No changes between revisions
/WebSVN/multiviews.php
File deleted
\ No newline at end of file
/WebSVN/composer.json
File deleted
/WebSVN/javascript/blame-popup.js
File deleted
/WebSVN/javascript/compare-checkboxes.js
File deleted
/WebSVN/javascript/ie-png-transparency.js
File deleted
/WebSVN/javascript/jquery.min.1.9.1.js
File deleted
\ No newline at end of file
/WebSVN/javascript/collapsible.js
File deleted
/WebSVN/search.php
File deleted
/WebSVN/revision.php
File deleted
/WebSVN/README.md
File deleted
/WebSVN/browse.php
File deleted
/WebSVN/license.txt
File deleted
/WebSVN/filedetails.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
22,70 → 24,55
//
// Simply lists the contents of a file
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once 'include/template.php';
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/utils.inc");
require_once("include/template.inc");
 
// Make sure that we have a repository
if (!$rep)
if (!isset($rep))
{
renderTemplate404('file','NOREP');
echo $lang["NOREP"];
exit;
}
 
$svnrep = new SVNRepository($rep);
 
if ($path[0] != '/')
{
$ppath = '/'.$path;
}
if ($path{0} != "/")
$ppath = "/".$path;
else
{
$ppath = $path;
}
 
$useMime = false;
$passrev = $rev;
 
// If there's no revision info, go to the lastest revision for this path
$history = $svnrep->getLog($path, 'HEAD', 1, false, 2, ($path == '/') ? '' : $peg);
$history = $svnrep->getLog($path, "", "", true);
$youngest = $history->entries[0]->rev;
 
if (!$history)
{
unset($vars['error']);
$history = $svnrep->getLog($path, '', '', false, 2, ($path == '/') ? '' : $peg);
if (!$history)
{
renderTemplate404('file','NOPATH');
}
}
 
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : false;
 
if (empty($rev))
{
$rev = !$peg ? $youngest : min($peg, $youngest);
}
$rev = $youngest;
 
$extn = strtolower(strrchr($path, '.'));
$extn = strrchr($path, ".");
 
// Check to see if the user has requested that this type be zipped and sent
// to the browser as an attachment
 
if ($history && isset($zipped) && in_array($extn, $zipped) && $rep->hasReadAccess($path, false))
if (in_array($extn, $zipped))
{
$base = basename($path);
header('Content-Type: application/gzip');
header("Content-Disposition: attachment; filename*=UTF-8''".rawurlencode($base).'.gz');
header("Content-Type: application/x-gzip");
header("Content-Disposition: attachment; filename=".urlencode($base).".gz");
 
// Get the file contents and pipe into gzip. All this without creating
// a temporary file. Damn clever.
$svnrep->getFileContents($path, '', $rev, $peg, '| '.$config->gzip.' -n -f');
$svnrep->getFileContents($path, "", $rev, "| ".$config->gzip." -n -f");
exit;
}
 
// Check to see if we should serve it with a particular content-type.
// The content-type could come from an svn:mime-type property on the
// file, or from the $contentType array in setup.php.
// file, or from the $contentType array in setup.inc.
 
if (!$rep->getIgnoreSvnMimeTypes())
{
97,152 → 84,91
$setupContentType = @$contentType[$extn];
}
 
// Use the documented priorities when establishing what content-type to use.
// Use this set of priorities when establishing what content-type to
// actually use.
 
if (!empty($svnMimeType) && $svnMimeType != 'application/octet-stream')
{
$mimeType = $svnMimeType;
$cont = $svnMimeType;
}
else if (!empty($setupContentType))
{
$mimeType = $setupContentType;
$cont = $setupContentType;
}
else if (!empty($svnMimeType))
{
$mimeType = $svnMimeType; // Use SVN's default of 'application/octet-stream'
// It now is equal to application/octet-stream due to logic
// above....
$cont = $svnMimeType;
}
else
{
$mimeType = '';
}
 
$useMime = ($mimeType) ? @$_REQUEST['usemime'] : false;
// If there's a MIME type associated with this format, then we deliver it
// with this information
 
if ($history && !empty($mimeType) && !$useMime)
if (!empty($cont))
{
$useMime = $mimeType; // Save MIME type for later before possibly clobbering
// If a MIME type exists but is set to be ignored, set it to an empty string.
foreach ($config->inlineMimeTypes as $inlineType)
{
if (preg_match('|'.$inlineType.'|', $mimeType))
{
$mimeType = '';
break;
}
}
}
 
// If a MIME type is associated with the file, deliver with Content-Type header.
if ($history && !empty($mimeType) && $rep->hasReadAccess($path, false))
{
$base = basename($path);
header('Content-Type: '.$mimeType);
//header('Content-Length: '.$size);
header("Content-Disposition: inline; filename*=UTF-8''".rawurlencode($base));
$svnrep->getFileContents($path, '', $rev, $peg);
exit;
}
 
// Display the file inline using WebSVN.
header("Content-Type: $cont");
//header("Content-Length: $size");
header("Content-Disposition: inline; filename=".urlencode($base));
 
$vars['action'] = '';
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath));
$vars['safepath'] = escape($ppath);
$svnrep->getFileContents($path, "", $rev);
 
if (isset($history->entries[0]))
{
$vars['log'] = xml_entities($history->entries[0]->msg);
$vars['date'] = $history->entries[0]->date;
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date));
$vars['author'] = $history->entries[0]->author;
exit;
}
 
createPathLinks($rep, $ppath, !$passrev && $peg ? $rev : $passrev, $peg);
$passRevString = createRevAndPegString($rev, $peg);
 
if ($rev != $youngest)
// Explicitly requested file as attachment
if (isset($_REQUEST['getfile']))
{
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'file').createRevAndPegString($youngest, $peg);
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>';
}
$base = basename($path);
 
$revurl = $config->getURL($rep, $path, 'file');
header("Content-Type: application/octet-stream");
header("Content-Length: $size");
header("Content-Disposition: inline; filename=".urlencode($base));
 
if ($rev < $youngest)
{
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg ? $peg : 'HEAD');
$svnrep->getFileContents($path, "", $rev);
 
if (isset($history2->entries[1]))
{
$nextRev = $history2->entries[1]->rev;
if ($nextRev != $youngest)
{
$vars['nextrev'] = $nextRev;
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg);
exit;
}
}
 
unset($vars['error']);
}
// There's no associated MIME type. Show the file using WebSVN.
 
$history3 = $svnrep->getLog($path, $rev, 1, true, 2, $peg ? $peg : 'HEAD');
$url = $config->getURL($rep, $path, "file");
 
if (isset($history3->entries[1]))
{
$prevRev = $history3->entries[1]->rev;
$prevPath = $history3->entries[1]->path;
$vars['prevrev'] = $prevRev;
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg);
}
if ($rev != $youngest)
$vars["goyoungestlink"] = "<a href=\"${url}sc=1\">${lang["GOYOUNGEST"]}</a>";
else
$vars["goyoungestlink"] = "";
 
unset($vars['error']);
$vars["action"] = "";
$vars["repname"] = $rep->getDisplayName();
$vars["rev"] = $rev;
$vars["path"] = $ppath;
 
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$passRevString;
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>';
createDirLinks($rep, $ppath, $passrev, $showchanged);
 
$vars['logurl'] = $config->getURL($rep, $path, 'log').$passRevString;
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>';
$url = $config->getURL($rep, $path, "log");
$vars["fileviewloglink"] = "<a href=\"${url}rev=$passrev&amp;sc=$showchanged&isdir=0\">${lang["VIEWLOG"]}</a>";
 
$vars['blameurl'] = $config->getURL($rep, $path, 'blame').$passRevString;
$vars['blamelink'] = '<a href="'.$vars['blameurl'].'">'.$lang['BLAME'].'</a>';
$url = $config->getURL($rep, $path, "diff");
$vars["prevdifflink"] = "<a href=\"${url}rev=$passrev&amp;sc=$showchanged\">${lang["DIFFPREV"]}</a>";
 
if ($history == null || count($history->entries) > 1)
{
$vars['diffurl'] = $config->getURL($rep, $path, 'diff').$passRevString;
$vars['difflink'] = '<a href="'.$vars['diffurl'].'">'.$lang['DIFFPREV'].'</a>';
}
$url = $config->getURL($rep, $path, "blame");
$vars["blamelink"] = "<a href=\"${url}rev=$passrev&amp;sc=$showchanged\">${lang["BLAME"]}</a>";
 
if ($rep->isDownloadAllowed($path))
{
$vars['downloadlurl'] = $config->getURL($rep, $path, 'dl').$passRevString;
$vars['downloadlink'] = '<a href="'.$vars['downloadlurl'].'">'.$lang['DOWNLOAD'].'</a>';
}
#$url = $config->getURL($rep, $path, "get");
$url = $config->getURL($rep, $path, "file");
$vars["getfile"] = "<a href=\"${url}getfile&amp;rev=$passrev&amp;sc=$showchanged\">${lang["GETFILE"]}</a>";
 
if ($rep->isRssEnabled())
{
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').createRevAndPegString('', $peg);
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>';
}
$listing = array ();
 
$mimeType = $useMime; // Restore preserved value to use for 'mimelink' variable.
// If there was a MIME type, create a link to display file with that type.
if ($mimeType && !isset($vars['warning']))
{
$vars['mimeurl'] = $config->getURL($rep, $path, 'file').'usemime=1&amp;'.$passRevString;
$vars['mimelink'] = '<a href="'.$vars['mimeurl'].'">'.$lang['VIEWAS'].' "'.$mimeType.'"</a>';
}
$vars["version"] = $version;
 
$vars['rev'] = $rev;
$vars['peg'] = $peg;
if (!$rep->hasReadAccess($path, false))
$vars["noaccess"] = true;
 
if (!$rep->hasReadAccess($path))
{
$vars['error'] = $lang['NOACCESS'];
sendHeaderForbidden();
}
else if (!$svnrep->isFile($path, $rev, $peg))
{
renderTemplate404('file','NOPATH');
}
 
// $listing is populated with file data when file.tmpl calls [websvn-getlisting]
renderTemplate('file');
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."file.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing);
?>
/WebSVN/include/template.php
File deleted
\ No newline at end of file
/WebSVN/include/command.php
File deleted
/WebSVN/include/diff_util.php
File deleted
/WebSVN/include/utils.php
File deleted
/WebSVN/include/setup.php
File deleted
/WebSVN/include/configclass.php
File deleted
/WebSVN/include/svnlook.php
File deleted
/WebSVN/include/bugtraq.php
File deleted
/WebSVN/include/version.php
File deleted
/WebSVN/include/.gitignore
File deleted
/WebSVN/include/authz.php
File deleted
/WebSVN/include/diff_inc.php
File deleted
/WebSVN/include/distconfig.php
File deleted
/WebSVN/include/configclass.inc
0,0 → 1,1270
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// configclass.inc4
//
// General class for handling configuration options
 
require_once("include/command.inc");
require_once("include/auth.inc");
require_once("include/version.inc");
 
// Auxillary functions used to sort repositories by name/group
 
// {{{ cmpReps($a, $b)
 
function cmpReps($a, $b)
{
// First, sort by group
$g = strcasecmp($a->group, $b->group);
if ($g)
return $g;
// Same group? Sort by name
return strcasecmp($a->name, $b->name);
}
 
// }}}
 
// {{{ cmpGroups($a, $b)
 
function cmpGroups($a, $b)
{
$g = strcasecmp($a->group, $b->group);
if ($g)
return $g;
return 0;
}
 
// }}}
 
// {{{ mergesort(&$array, [$cmp_function])
 
function mergesort(&$array, $cmp_function = 'strcmp')
{
// Arrays of size < 2 require no action
if (count($array) < 2)
return;
// Split the array in half
$halfway = count($array) / 2;
$array1 = array_slice($array, 0, $halfway);
$array2 = array_slice($array, $halfway);
// Recurse to sort the two halves
mergesort($array1, $cmp_function);
mergesort($array2, $cmp_function);
// If all of $array1 is <= all of $array2, just append them.
if (call_user_func($cmp_function, end($array1), $array2[0]) < 1)
{
$array = array_merge($array1, $array2);
return;
}
// Merge the two sorted arrays into a single sorted array
$array = array();
$ptr1 = $ptr2 = 0;
while ($ptr1 < count($array1) && $ptr2 < count($array2))
{
if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1)
{
$array[] = $array1[$ptr1++];
}
else
{
$array[] = $array2[$ptr2++];
}
}
// Merge the remainder
while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++];
while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++];
return;
}
 
// }}}
 
// A Repository configuration class
 
Class Repository
{
// {{{ Properties
 
var $name;
var $svnName;
var $path;
var $group;
var $username;
var $password;
// Local configuration options must start off unset
var $allowDownload;
var $minDownloadLevel;
var $allowedExceptions = array();
var $disallowedExceptions = array();
var $rss;
var $spaces;
var $ignoreSvnMimeTypes;
var $ignoreWebSVNContentTypes;
var $bugtraq;
var $auth;
var $contentEnc;
var $templatePath;
 
// }}}
 
// {{{ __construct($name, $svnName, $path, [$group, [$username, [$password]]])
 
function Repository($name, $svnName, $path, $group = NULL, $username = NULL, $password = NULL)
{
$this->name = $name;
$this->svnName = $svnName;
$this->path = $path;
$this->group = $group;
$this->username = $username;
$this->password = $password;
}
 
// }}}
 
// {{{ getDisplayName()
 
function getDisplayName()
{
if(!empty($this->group))
return $this->group.".".$this->name;
else
return $this->name;
}
 
// }}}
 
// {{{ svnParams
 
function svnParams()
{
if (!empty($this->username))
return " --username ".$this->username." --password ".$this->password." ";
else
return " ";
}
 
// }}}
 
// Local configuration accessors
// {{{ RSS Feed
function hideRSS()
{
$this->rss = false;
}
 
function showRSS()
{
$this->rss = true;
}
 
function getHideRSS()
{
global $config;
 
if (isset($this->rss))
return $this->rss;
return $config->getHideRSS();
}
 
// }}}
// {{{ Download
function allowDownload()
{
$this->allowDownload = true;
}
 
function disallowDownload()
{
$this->allowDownload = false;
}
function getAllowDownload()
{
global $config;
 
if (isset($this->allowDownload))
return $this->allowDownload;
return $config->getAllowDownload();
}
 
function setMinDownloadLevel($level)
{
$this->minDownloadLevel = $level;
}
 
function getMinDownloadLevel()
{
global $config;
 
if (isset($this->minDownloadLevel))
return $this->minDownloadLevel;
return $config->getMinDownloadLevel();
}
function addAllowedDownloadException($path)
{
if ($path{strlen($path) - 1} != "/")
$path .= "/";
$this->allowedExceptions[] = $path;
}
function addDisallowedDownloadException($path)
{
if ($path{strlen($path) - 1} != "/")
$path .= "/";
$this->disallowedExceptions[] = $path;
}
 
function isDownloadAllowed($path)
{
global $config;
// Check global download option
if (!$this->getAllowDownload())
return false;
// Check with access module
if (!$this->hasUnrestrictedReadAccess($path))
return false;
$subs = explode("/", $path);
$level = count($subs) - 2;
if ($level >= $this->getMinDownloadLevel())
{
// Level OK, search for disallowed exceptions
if ($config->findException($path, $this->disallowedExceptions))
return false;
if ($config->findException($path, $config->disallowedExceptions))
return false;
return true;
}
else
{
// Level not OK, search for disallowed exceptions
 
if ($config->findException($path, $this->allowedExceptions))
return true;
if ($config->findException($path, $config->allowedExceptions))
return true;
return false;
}
}
 
// }}}
 
// {{{ Templates
 
function setTemplatePath($path)
{
$lastchar = substr($path, -1, 1);
if (!($lastchar == DIRECTORY_SEPARATOR ||
$lastchar == '/' ||
$lastchar == '\\'))
$path .= DIRECTORY_SEPARATOR;
 
$this->templatePath = $path;
}
 
function getTemplatePath()
{
global $config;
if (!empty($this->templatePath))
return $this->templatePath;
else
return $config->getTemplatePath();
}
 
// }}}
 
// {{{ Tab expansion
function expandTabsBy($sp)
{
$this->spaces = $sp;
}
function getExpandTabsBy()
{
global $config;
 
if (isset($this->spaces))
return $this->spaces;
return $config->getExpandTabsBy();
}
 
// }}}
 
// {{{ MIME-Type Handing
function ignoreSvnMimeTypes()
{
$this->ignoreSvnMimeTypes = true;
}
 
function useSvnMimeTypes()
{
$this->ignoreSvnMimeTypes = false;
}
 
function getIgnoreSvnMimeTypes()
{
global $config;
 
if (isset($this->ignoreSvnMimeTypes))
return $this->ignoreSvnMimeTypes;
return $config->getIgnoreSvnMimeTypes();
}
 
function ignoreWebSVNContentTypes()
{
$this->ignoreWebSVNContentTypes = true;
}
 
function useWebSVNContentTypes()
{
$this->ignoreWebSVNContentTypes = false;
}
 
function getIgnoreWebSVNContentTypes()
{
global $config;
 
if (isset($this->ignoreWebSVNContentTypes))
return $this->ignoreWebSVNContentTypes;
return $config->getIgnoreWebSVNContentTypes();
}
 
// }}}
// {{{ Issue Tracking
function useBugtraqProperties()
{
$this->bugtraq = true;
}
 
function ignoreBugtraqProperties()
{
$this->bugtraq = false;
}
 
function getBugtraq()
{
global $config;
 
if (isset($this->bugtraq))
return $this->bugtraq;
return $config->getBugtraq();
}
 
// }}}
// {{{ Encodings
function setContentEncoding($contentEnc)
{
$this->contentEnc = $contentEnc;
}
 
function getContentEncoding()
{
global $config;
 
if (isset($this->contentEnc))
return $this->contentEnc;
return $config->getContentEncoding();
}
 
// }}}
 
// {{{ Authentication
function useAuthenticationFile($file)
{
if (is_readable($file))
$this->auth =& new Authentication($file);
else
die('Unable to read authentication file "'.$file.'"');
}
 
function hasReadAccess($path, $checkSubFolders = false)
{
global $config;
 
$a = null;
if (isset($this->auth))
$a =& $this->auth;
else
$a =& $config->getAuth();
if (!empty($a))
return $a->hasReadAccess($this->svnName, $path, $checkSubFolders);
// No auth file - free access...
return true;
}
 
function hasUnrestrictedReadAccess($path)
{
global $config;
 
$a = null;
if (isset($this->auth))
$a =& $this->auth;
else
$a =& $config->getAuth();
if (!empty($a))
return $a->hasUnrestrictedReadAccess($this->svnName, $path);
// No auth file - free access...
return true;
}
 
// }}}
 
}
 
// The general configuration class
 
Class Config
{
// {{{ Properties
 
// Tool path locations
 
var $svnlook = "svnlook";
var $svn = "svn --non-interactive --config-dir /tmp";
var $svn_noparams = "svn --config-dir /tmp";
var $diff = "diff";
var $enscript ="enscript";
var $sed = "sed";
var $gzip = "gzip";
var $tar = "tar";
// Other configuration items
var $treeView = true;
var $flatIndex = true;
var $openTree = false;
var $serverIsWindows = false;
var $phpCompatEnabled = false;
var $cacheResults = false;
var $multiViews = false;
var $useEnscript = false;
var $allowDownload = false;
var $minDownloadLevel = 0;
var $allowedExceptions = array();
var $disallowedExceptions = array();
var $rss = true;
var $spaces = 8;
var $bugtraq = false;
var $auth = "";
var $templatePath = "./templates/Standard/";
var $phpCompatPath = './include/PHP/Compat.php';
 
var $ignoreSvnMimeTypes = false;
var $ignoreWebSVNContentTypes = false;
 
var $subversionMajorVersion = "";
var $subversionMinorVersion = "";
 
// Default character encodings
var $inputEnc = ""; // Encoding of output returned from command line
var $contentEnc = ""; // Encoding of repository content
var $outputEnc = "UTF-8"; // Encoding of web page. Now forced to UTF-8
 
var $quote = "'";
var $pathSeparator = ":";
 
var $_repositories;
 
// }}}
 
// {{{ __construct()
 
function Config()
{
}
 
// }}}
 
// {{{ Repository configuration
function addRepository($name, $url, $group = NULL, $username = NULL, $password = NULL)
{
$url = str_replace(DIRECTORY_SEPARATOR, "/", $url);
if ($url{strlen($url) - 1} == "/")
$url = substr($url, 0, -1);
$svnName = substr($url, strrpos($url, "/") + 1);
$this->_repositories[] = new Repository($name, $svnName, $url, $group, $username, $password);
}
 
function getRepositories()
{
return $this->_repositories;
}
 
function &findRepository($name)
{
foreach ($this->_repositories as $index => $rep)
{
if (strcmp($rep->getDisplayName(), $name) == 0)
{
$repref =& $this->_repositories[$index];
return $repref;
}
}
print "ERROR: Unable to find repository '$name'";
exit;
}
 
// }}}
 
// {{{ setServerIsWindows
//
// The server is running on Windows
function setServerIsWindows()
{
$this->serverIsWindows = true;
// Try to set the input encoding intelligently
$cp = 0;
if ($cp = @shell_exec("CHCP"))
{
$cp = trim(substr($cp, strpos($cp, ":") + 1));
settype($cp, "integer");
}
// Use the most sensible default value if that failed
if ($cp == 0) $cp = 850;
// We assume, as a default, that the encoding of the repository contents is
// in iso-8859-1, to be compatible with compilers and the like.
$this->setInputEncoding("CP$cp", "iso-8859-1");
// On Windows machines, use double quotes around command line parameters
$this->quote = '"';
// On Windows, semicolon separates path entries in a list rather than colon.
$this->pathSeparator = ";";
}
// }}}
// {{{ setPHPCompatEnabled
//
// Used for PHP4
 
function setPHPCompatEnabled() {
$this->phpCompatEnabled = true;
}
function isPHPCompatEnabled() {
return $this->phpCompatEnabled;
}
 
// }}}
 
// {{{ Caching
 
// setCachingOn
//
// Set result caching on
function setCachingOn()
{
$this->cacheResults = true;
}
 
function isCachingOn()
{
return $this->cacheResults;
}
 
// }}}
 
// {{{ MultiViews
 
// useMultiViews
//
// Use MultiViews to access the repository
function useMultiViews()
{
$this->multiViews = true;
}
 
function getUseMultiViews()
{
return $this->multiViews;
}
 
// }}}
 
// {{{ Enscript
 
// useEnscript
//
// Use Enscript to colourise listings
function useEnscript()
{
$this->useEnscript = true;
}
 
function getUseEnscript()
{
return $this->useEnscript;
}
 
// }}}
 
// {{{ RSS
 
// offerRSS
//
// Use Enscript to colourise listings
function hideRSS($myrep = 0)
{
if (empty($myrep))
$this->rss = false;
else
{
$repo =& $this->findRepository($myrep);
$repo->hideRSS();
}
}
 
function getHideRSS()
{
return $this->rss;
}
 
// }}}
 
// {{{ Downloads
 
// allowDownload
//
// Allow download of tarballs
function allowDownload($myrep = 0)
{
if (empty($myrep))
$this->allowDownload = true;
else
{
$repo =& $this->findRepository($myrep);
$repo->allowDownload();
}
}
 
function disallowDownload($myrep = 0)
{
if (empty($myrep))
$this->allowDownload = false;
else
{
$repo =& $this->findRepository($myrep);
$repo->disallowDownload();
}
}
 
function getAllowDownload()
{
return $this->allowDownload;
}
 
function setMinDownloadLevel($level, $myrep = 0)
{
if (empty($myrep))
$this->minDownloadLevel = $level;
else
{
$repo =& $this->findRepository($myrep);
$repo->setMinDownloadLevel($level);
}
}
 
function getMinDownloadLevel()
{
return $this->minDownloadLevel;
}
 
function addAllowedDownloadException($path, $myrep = 0)
{
if ($path{strlen($path) - 1} != "/")
$path .= "/";
if (empty($myrep))
$this->allowedExceptions[] = $path;
else
{
$repo =& $this->findRepository($myrep);
$repo->addAllowedDownloadException($path);
}
}
 
function addDisallowedDownloadException($path, $myrep = 0)
{
if ($path{strlen($path) - 1} != "/")
$path .= "/";
if (empty($myrep))
$this->disallowedExceptions[] = $path;
else
{
$repo =& $this->findRepository($myrep);
$repo->addDisallowedDownloadException($path);
}
}
function findException($path, $exceptions)
{
foreach ($exceptions As $key => $exc)
{
if (strncmp($exc, $path, strlen($exc)) == 0)
return true;
}
return false;
}
// }}}
 
// {{{ getURL
//
// Get the URL to a path name based on the current config
function getURL($rep, $path, $op)
{
$base = $_SERVER["SCRIPT_NAME"];
if ($this->multiViews)
{
// Remove the .php
if (eregi(".php$", $base))
{
// Remove the .php
$base = substr($base, 0, -4);
}
if ($path && $path{0} != "/") $path = "/".$path;
$url = $base;
if (is_object($rep))
{
$url .= "/".$rep->getDisplayName().str_replace('%2F', '/', urlencode($path));
if ($op != "dir" && $op != "file")
$url .= "?op=$op&amp;";
else
$url .= "?";
}
return $url;
}
else
{
switch ($op)
{
case "dir":
$fname = "listing.php";
break;
case "file":
$fname = "filedetails.php";
break;
 
case "log":
$fname = "log.php";
break;
 
case "diff":
$fname = "diff.php";
break;
 
case "blame":
$fname = "blame.php";
break;
 
case "form":
$fname = "form.php";
break;
 
case "rss":
$fname = "rss.php";
break;
 
case "dl":
$fname = "dl.php";
break;
 
case "comp":
$fname = "comp.php";
break;
}
 
# if ($rep == -1)
if (!is_object($rep))
return $fname."?path=".urlencode($path)."&amp;";
else
return $fname."?repname=".urlencode($rep->getDisplayName())."&amp;path=".urlencode($path)."&amp;";
}
}
 
// }}}
 
// {{{ Paths and Commands
 
// setPath
//
// Set the location of the given path
function setPath(&$var, $path, $name, $params = "")
{
$lastchar = substr($path, -1, 1);
$isDir = ($lastchar == DIRECTORY_SEPARATOR ||
$lastchar == "/" ||
$lastchar == "\\");
if (!$isDir)
{
$path .= DIRECTORY_SEPARATOR;
}
 
// On a windows machine we need to put spaces around the entire command
// to allow for spaces in the path
if ($this->serverIsWindows)
$var = "\"$path$name\"";
else
$var = "$path$name";
$var .= " ".$params;
}
 
// setSVNCommandPath
//
// Define the location of the svn and svnlook commands
function setSVNCommandPath($path)
{
$this->setPath($this->svn, $path, "svn", "--non-interactive --config-dir /tmp");
$this->setPath($this->svn_noparams, $path, "svn", " --config-dir /tmp");
$this->setPath($this->svnlook, $path, "svnlook");
}
function getSvnCommand()
{
return $this->svn;
}
 
function getCleanSvnCommand()
{
return $this->svn_noparams;
}
 
function getSvnlookCommand()
{
return $this->svnlook;
}
// setDiffPath
//
// Define the location of the diff command
function setDiffPath($path)
{
$this->setPath($this->diff, $path, "diff");
}
 
function getDiffCommand()
{
return $this->diff;
}
 
// setEnscriptPath
//
// Define the location of the enscript command
function setEnscriptPath($path)
{
$this->setPath($this->enscript, $path, "enscript");
}
 
function getEnscriptCommand()
{
return $this->enscript;
}
 
// setSedPath
//
// Define the location of the sed command
function setSedPath($path)
{
$this->setPath($this->sed, $path, "sed");
}
function getSedCommand()
{
return $this->sed;
}
 
// setTarPath
//
// Define the location of the tar command
function setTarPath($path)
{
$this->setPath($this->tar, $path, "tar");
}
function getTarCommand()
{
return $this->tar;
}
 
// setGzipPath
//
// Define the location of the GZip command
function setGzipPath($path)
{
$this->setPath($this->gzip, $path, "gzip");
}
function getGzipCommand()
{
return $this->gzip;
}
 
// Templates
function setTemplatePath($path, $myrep = 0)
{
if (empty($myrep))
{
$lastchar = substr($path, -1, 1);
if (!($lastchar == DIRECTORY_SEPARATOR ||
$lastchar == '/' ||
$lastchar == '\\'))
$path .= DIRECTORY_SEPARATOR;
 
$this->templatePath = $path;
}
else
{
$repo =& $this->findRepository($myrep);
$repo->setTemplatePath($path);
}
}
 
function getTemplatePath()
{
return $this->templatePath;
}
 
// PHP Compat file (from PEAR)
 
function setPHPCompatPath($path)
{
$this->setPath($this->phpCompatPath, $path, 'Compat.php');
}
 
function getPHPCompatFile()
{
return trim($this->phpCompatPath);
}
 
// }}}
 
// {{{ parentPath
//
// Automatically set up the repositories based on a parent path
function parentPath($path, $group = NULL)
{
if ($handle = @opendir($path))
{
// For each file...
while (false !== ($file = readdir($handle)))
{
// That's also a non hidden directory
if (is_dir($path.DIRECTORY_SEPARATOR.$file) && $file{0} != ".")
{
// And that contains a db directory (in an attempt to not include
// non svn repositories.
if (is_dir($path.DIRECTORY_SEPARATOR.$file.DIRECTORY_SEPARATOR."db"))
{
// We add the repository to the list
$this->addRepository($file, "file:///".$path.DIRECTORY_SEPARATOR.$file, $group);
}
}
}
closedir($handle);
}
 
// Sort the repositories into alphabetical order
if (!empty($this->_repositories))
usort($this->_repositories, "cmpReps");
}
 
// }}}
// {{{ Encoding functions
function setInputEncoding($systemEnc)
{
$this->inputEnc = $systemEnc;
if (!isset($this->contentEnc))
$this->contentEnc = $systemEnc;
}
function getInputEncoding()
{
return $this->inputEnc;
}
 
function setContentEncoding($contentEnc, $myrep = 0)
{
if (empty($myrep))
$this->contentEnc = $contentEnc;
else
{
$repo =& $this->findRepository($myrep);
$repo->setContentEncoding($contentEnc);
}
}
function getContentEncoding()
{
return $this->contentEnc;
}
 
// }}}
 
// {{{ Tab expansion functions
function expandTabsBy($sp, $myrep = 0)
{
if (empty($myrep))
$this->spaces = $sp;
else
{
$repo =& $this->findRepository($myrep);
$repo->expandTabsBy($sp);
}
}
function getExpandTabsBy()
{
return $this->spaces;
}
 
// }}}
 
// {{{ Misc settings
function ignoreSvnMimeTypes()
{
$this->ignoreSvnMimeTypes = true;
}
 
function getIgnoreSvnMimeTypes()
{
return $this->ignoreSvnMimeTypes;
}
 
function ignoreWebSVNContentTypes()
{
$this->ignoreWebSVNContentTypes = true;
}
 
function getIgnoreWebSVNContentTypes()
{
return $this->ignoreWebSVNContentTypes;
}
 
function useBugtraqProperties($myrep = 0)
{
if (empty($myrep))
$this->bugtraq = true;
else
{
$repo =& $this->findRepository($myrep);
$repo->useBugtraqProperties();
}
}
function getBugtraq()
{
return $this->bugtraq;
}
 
function useAuthenticationFile($file, $myrep = 0)
{
if (empty($myrep))
{
if (is_readable($file))
$this->auth = new Authentication($file);
else
{
echo "Unable to read authentication file '$file'";
exit;
}
}
else
{
$repo =& $this->findRepository($myrep);
$repo->useAuthenticationFile($file);
}
}
function &getAuth()
{
return $this->auth;
}
 
function useTreeView()
{
$this->treeView = true;
}
function getUseTreeView()
{
return $this->treeView;
}
 
function useFlatView()
{
$this->treeView = false;
}
 
function useTreeIndex($open)
{
$this->flatIndex = false;
$this->openTree = $open;
}
 
function getUseFlatIndex()
{
return $this->flatIndex;
}
 
function getOpenTree()
{
return $this->openTree;
}
 
// setSubversionMajorVersion
//
// Set subversion major version
function setSubversionMajorVersion($subversionMajorVersion)
{
$this->subversionMajorVersion = $subversionMajorVersion;
}
 
function getSubversionMajorVersion()
{
return $this->subversionMajorVersion;
}
 
// setSubversionMinorVersion
//
// Set subversion minor version
function setSubversionMinorVersion($subversionMinorVersion)
{
$this->subversionMinorVersion = $subversionMinorVersion;
}
function getSubversionMinorVersion()
{
return $this->subversionMinorVersion;
}
 
// }}}
 
// {{{ Sort the repostories
//
// This function sorts the repositories by group name. The contents of the
// group are left in there original order, which will either be sorted if the
// group was added using the parentPath function, or defined for the order in
// which the repositories were included in the user's config file.
//
// Note that as of PHP 4.0.6 the usort command no longer preserves the order
// of items that are considered equal (in our case, part of the same group).
// The mergesort function preserves this order.
function sortByGroup()
{
if (!empty($this->_repositories))
mergesort($this->_repositories, "cmpGroups");
}
 
// }}}
}
?>
/WebSVN/include/config.inc
0,0 → 1,386
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// config.inc
//
// Configuration parameters
 
// --- FOLLOW THE INSTRUCTIONS BELOW TO CONFIGURE YOUR SETUP ---
 
// {{{ PLATFORM CONFIGURATION ---
 
// Uncomment the next line if your running a windows server
//
// $config->setServerIsWindows();
 
// Configure these lines if your commands aren't on your path.
//
// $config->setSVNCommandPath('Path/to/svn and svnlook/ e.g. c:\\program files\\subversion\\bin');
// $config->setDiffPath('Path/to/diff/command/');
 
// For syntax colouring, if option enabled...
// $config->setEnscriptPath('Path/to/enscript/command/');
// $config->setSedPath('Path/to/sed/command/');
 
// For delivered tarballs, if option enabled...
// $config->setTarPath('Path/to/tar/command/');
 
// For delivered GZIP'd files and tarballs, if option enabled...
// $config->setGZipPath('Path/to/gzip/command/');
 
// }}}
 
// {{{ REPOSITORY SETUP ---
 
// There are 2 methods for defining the repositiories available on the system. Either you list
// them by hand, in which case you can give each one the name of your choice, or you use the
// parent path function, in which case the name of the directory is used as the repository name.
//
// In all cases, you may optionally supply a group name to the repositories. This is useful in the
// case that you need to separate your projects. Grouped Repositories are referred to using the
// convention GroupName.RepositoryName
//
// Performance is much better on local repositories (e.g. accessed by file:///). However, you
// can also provide an interface onto a remote repository. In this case you should supply the
// username and password needed to access it.
//
// To configure the repositories by hand, copy the appropriate line below, uncomment it and
// replace the name and URL of your repository.
 
// Local repositories (without and with optional group):
//
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)');
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)', 'group');
$config->addRepository('MLAB', 'file:///data/svnData/MLAB');
$config->addRepository('library', 'file:///data/svnData/library');
$config->addRepository('svnkaklik', 'file:///data/svnData/svnkaklik');
$config->addRepository('MLAB_E', 'file:///data/svnData/MLAB_E');
$config->addRepository('8magsvn', 'file:///data/svnData/8magsvn');
// Remote repositories (without and with optional group):
//
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', NULL, 'username', 'password');
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', 'group', 'username', 'password');
//
// To use the parent path method, uncomment the newt line and and replace the path with your one. You
// can call the function several times if you have several parent paths. Note that in this case the
// path is a filesystem path
//
// $config->parentPath('Path/to/parent (e.g. c:\\svn)');
 
// }}}
 
// {{{ LOOK AND FEEL ---
//
// Uncomment ONLY the template file that you want.
 
// $config->setTemplatePath("$locwebsvnreal/templates/Standard/");
// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/");
// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/");
 
// You may also specify a per repository template file by uncommenting and changing the following
// line as necessary. Use the convention "groupname.myrep" if your repository is in a group.
 
// $config->setTemplatePath('$locwebsvnreal/templates/Standard/', 'myrep'); // Access file for myrep
$config->setTemplatePath("$locwebsvnreal/templates/MLAB/", "MLAB");
$config->setTemplatePath("$locwebsvnreal/templates/MLAB/", "library");
$config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/", "8magsvn");
$config->setTemplatePath("$locwebsvnreal/templates/Standard/", "svnkaklik");
$config->setTemplatePath("$locwebsvnreal/templates/MLAB/", "MLAB_E");
// The index page containing the projects may either be displayed as a flat view (the default),
// where grouped repositories are displayed as "GroupName.RepName" or as a tree view.
// In the case of a tree view, you may choose whether the entire tree is open by default.
 
// $config->useTreeIndex(false); // Tree index, closed by default
// $config->useTreeIndex(true); // Tree index, open by default
 
// By default, WebSVN displays a tree view onto the current directory. You can however
// choose to display a flat view of the current directory only, which may make the display
// load faster. Uncomment this line if you want that.
 
// $config->useFlatView();
 
// }}}
 
// {{{ LANGUAGE SETUP ---
 
// WebSVN uses the iconv module to convert messages from your system's character set to the
// UTF-8 output encoding. If you find that your log messages aren't displayed correctly then
// you'll need to change the value here.
//
// You may also specify the character encoding of the repository contents if different from
// the system encoding. This is typically the case for windows users, whereby the command
// line returns, for example, CP850 encoded strings, whereas the source files are encoded
// as iso-8859-1 by Windows based text editors. When display text file, WebSVN will convert
// them from the content encoding to the output encoding (UTF-8).
//
// WebSVN does its best to automate all this, so only use the following if it doesn't work
// "out of the box". Uncomment and change one of the examples below.
//
// $config->setInputEncoding('CP850'); // Encoding of result returned by svn command line, etc.
// $config->setContentEncoding('iso-8859-1'); // Content encoding of all your repositories // repositories
 
// You may also specify a content encoding on a per repository basis. Uncomment and copy this
// line as necessary.
//
// $config->setContentEncoding('iso-8859-1', 'MyEnc');
 
// Note for Windows users: To enable iconv you'll need to enable the extension in your php.ini file
// AND copy iconv.dll (not php_iconv.dll) to your Windows system folder. In most cases the correct
// encoding is set when you call $config->setServerIsWindows();.
 
// Note for *nix users. You'll need to have iconv compiled into your binary. The default input and
// output encodings are taken from your locale informations. Override these if they aren't correct.
 
// Uncomment the default language. If you want English then don't do anything here.
//
 
include 'languages/czech.inc';
// include 'languages/catalan.inc';
// include 'languages/danish.inc';
// include 'languages/dutch.inc';
// include 'languages/finnish.inc';
// include 'languages/french.inc';
// include 'languages/german.inc';
// include 'languages/japanese.inc';
// include 'languages/korean.inc';
// include 'languages/norwegian.inc';
// include 'languages/polish.inc';
// include 'languages/portuguese.inc';
// include 'languages/russian.inc';
// include 'languages/schinese.inc';
// include 'languages/slovenian.inc';
// include 'languages/spanish.inc';
// include 'languages/swedish.inc';
// include 'languages/tchinese.inc';
// include 'languages/turkish.inc';
 
// }}}
 
// {{{ MULTIVIEWS ---
 
// Uncomment this line if you want to use MultiView to access the repository by, for example:
//
// http://servername/wsvn/repname/path/in/repository
//
// Note: The websvn directory will need to have Multiviews turned on in Apache, and you'll need to configure
// wsvn.php
 
// $config->useMultiViews();
 
// }}}
 
// {{{ ACCESS RIGHTS ---
 
// Uncomment this line if you want to use your Subversion access file to control access
// rights via WebSVN. For this to work, you'll need to set up the same Apache based authentication
// to the WebSVN (or wsvn) directory as you have for Subversion itself. More information can be
// found in install.txt
 
// $config->useAuthenticationFile('/path/to/accessfile'); // Global access file
 
// You may also specify a per repository access file by uncommenting and copying the following
// line as necessary. Use the convention 'groupname.myrep' if your repository is in a group.
 
$config->useAuthenticationFile('/data/svnData/MLAB/conf/authz', 'MLAB'); // Access file for MLAB
$config->useAuthenticationFile('/data/svnData/svnkaklik/conf/authz', 'svnkaklik'); // Access file for svnkaklik
 
// }}}
 
// {{{ FILE CONTENT ---
//
// You may wish certain file types to be GZIP'd and delieved to the user when clicked apon.
// This is useful for binary files and the like that don't display well in a browser window!
// Copy, uncomment and modify this line for each extension to which this rule should apply.
// (Don't forget the . before the extension. You don't need an index between the []'s).
// If you'd rather that the files were delivered uncompressed with the associated MIME type,
// then read below.
//
// $zipped[] = '.dll';
 
// Subversion controlled files have an svn:mime-type property that can
// be set on a file indicating its mime type. By default binary files
// are set to the generic appcliation/octet-stream, and other files
// don't have it set at all. WebSVN also has a built-in list of
// associations from file extension to MIME content type. (You can
// view this list in setup.inc).
//
// Determining the content-type: By default, if the svn:mime-type
// property exists and is different from application/octet-stream, it
// is used. Otherwise, if the built-in list has a contentType entry
// for the extension of the file, that is used. Otherwise, if the
// svn:mime-type property exists has the generic binary value of
// application/octet-stream, the file will be served as a binary
// file. Otherwise, the file will be brought up as ASCII text in the
// browser window (although this text may optionally be colourised.
// See below).
//
// Uncomment this if you want to ignore any svn:mime-type property on your
// files.
//
// $config->ignoreSvnMimeTypes();
//
// Uncomment this if you want skip WebSVN's custom mime-type handling
//
// $config->ignoreWebSVNContentTypes();
//
// Following the examples below, you can add new associations, modify
// the default ones or even delete them entirely (to show them in
// ASCII via WebSVN).
 
// $contentType['.c'] = 'plain/text'; // Create a new association
// $contentType['.doc'] = 'plain/text'; // Modify an existing one
// unset($contentType['.m'] // Remove a default association
 
// }}}
 
// {{{ TARBALLS ---
 
// You need tar and gzip installed on your system. Set the paths above if necessary
//
// Uncomment the line below to offer a tarball download option across all your
// repositories.
//
$config->allowDownload();
//
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->allowDownload('myrep'); // Specifically allow downloading for 'myrep'
// $config->disallowDownload('myrep'); // Specifically disallow downloading for 'myrep'
 
// You can also choose the minimum directory level from which you'll allow downloading.
// A value of zero will allow downloading from the root. 1 will allow downloding of directories
// in the root, etc.
//
// If your project is arranged with trunk, tags and branches at the root level, then a value of 2
// would allow the downloading of directories within branches/tags while disallowing the download
// of the entire branches or tags directories. This would also stop downloading of the trunk, but
// see after for path exceptions.
//
// Change the line below to set the download level across all your repositories.
 
$config->setMinDownloadLevel(2);
 
// To change the level for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->setMinDownloadLevel(2, 'myrep');
 
// Finally, you may add or remove certain directories (and their contents) either globally
// or on a per repository basis. Uncomment and copy the following lines as necessary. Note
// that the these are searched in the order than you give them until a match is made (with the
// exception that all the per repository exceptions are tested before the global ones). This means
// that you must disallow /a/b/c/ before you allow /a/b/ otherwise the allowed match on /a/b/ will
// stop any further searching, thereby allowing downloads on /a/b/c/.
 
// Global exceptions possibilties:
//
// $config->addAllowedDownloadException('/path/to/allowed/directory/');
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/');
//
// Per repository exception possibilties:
// Use the convention 'groupname.myrep' if your repository is in a group.
//
// $config->addAllowedDownloadException('/path/to/allowed/directory/', 'myrep');
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/', 'myrep');
 
// }}}
 
// {{{ COLOURISATION ---
 
// Uncomment this line if you want to use Enscript to colourise your file listings
//
// You'll need Enscript version 1.6 or higher AND Sed installed to use this feature.
// Set the path above.
//
// $config->useEnscript();
 
// Enscript need to be told what the contents of a file are so that it can be colourised
// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript
// file type (viewable in setup.inc).
//
// Here you should add and other extensions not already listed or redefine the default ones. eg:
//
// $extEnscript['.pas'] = 'pascal';
//
// Note that extensions are case sensitive.
 
// }}}
 
// {{{ RSSFEED ---
 
// Uncomment this line if you wish to hide the RSS feed links across all repositories
//
$config->hideRSS();
//
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->hideRSS('myrep'); // Specifically hide RSS links for 'myrep'
// $config->showRSS('myrep'); // Specifically show RSS links for 'myrep'
 
// }}}
 
// {{{ BUGTRAQ ---
 
// Uncomment this line if you wish to use bugtraq: properties to show links to your BugTracker
// from the log messages.
//
// $config->useBugtraqProperties();
//
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->useBugtraqProperties('myrep'); // Specifically use bugtraq properties for 'myrep'
// $config->ignoreBugtraqProperties('myrep'); // Specifically ignore bugtraq properties for 'myrep'
 
// }}}
 
// {{{ MISCELLANEOUS ---
 
// Comment out this if you don't have the right to use it. Be warned that you may need it however!
set_time_limit(0);
 
// Comment this line to turn off caching of repo information. This will slow down your browsing.
$config->setCachingOn();
 
// Number of spaces to expand tabs to in diff/listing view across all repositories
 
$config->expandTabsBy(8);
 
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->expandTabsBy(3, 'myrep'); // Expand Tabs by 3 for repository 'myrep'
 
// For installations without PHP5, a copy of PEAR's PHP Compat library is included.
// If you have your own version of Compat you wish to use, go ahead and specify here.
 
// $config->setPHPCompatPath('/usr/share/php/PHP/');
 
// }}}
?>
/WebSVN/include/setup.inc
0,0 → 1,459
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// setup.inc
//
// Global setup
 
// --- DON'T CHANGE THIS FILE ---
//
// User changes should be done in config.ini
 
// Include the configuration class
require_once 'include/configclass.inc';
 
// Create the config
$config = new Config;
 
// Set up the default character encodings
if (function_exists('iconv_get_encoding'))
{
$config->setInputEncoding(iconv_get_encoding('input_encoding'));
}
 
// Define the language array
$lang = array();
$langNames = array();
 
// Set up locwebsvnhttp
// Note: we will use nothing in MultiViews mode so that the URLs use the root
// directory by default.
if (empty($locwebsvnhttp))
$locwebsvnhttp = defined('WSVN_MULTIVIEWS') ? '' : '.';
 
if (empty($locwebsvnreal))
$locwebsvnreal = '.';
 
$vars['locwebsvnhttp'] = $locwebsvnhttp;
 
// Include a default language file (must go before config.inc)
require 'languages/english.inc';
 
// Get the user's personalised config (requires the locwebsvnhttp stuff above)
require_once 'config.inc';
 
// Load PHP_Compat if we're going to use it. This needs to be done after including config.inc (which contains
// the setting) but before svnlook.inc (which requires util.inc, which contains PHP4-incompatible functions)
if ($config->isPHPCompatEnabled()) {
require_once($config->getPHPCompatFile());
require_once 'include/php5compat.inc';
}
 
require_once 'include/svnlook.inc';
 
// Make sure that the input locale is set up correctly
setlocale(LC_ALL, '');
 
// {{{ Content-Type's
// Set up the default content-type extension handling
 
$contentType = array (
 
'.dwg' => 'application/acad', // AutoCAD Drawing files
'.DWG' => 'application/acad', // AutoCAD Drawing files
'.arj' => 'application/arj', //  
'.ccAD' => 'application/clariscad', // ClarisCAD files
'.DRW' => 'application/drafting', // MATRA Prelude drafting
'.dxf' => 'application/dxf', // DXF (AutoCAD)
'.DXF' => 'application/dxf', // DXF (AutoCAD)
'.unv' => 'application/i-deas', //SDRC I-DEAS files
'.UNV' => 'application/i-deas', //SDRC I-DEAS files
'.igs' => 'application/iges', // IGES graphics format
'.iges' => 'application/iges', // IGES graphics format
'.IGS' => 'application/iges', // IGES graphics format
'.IGES' => 'application/iges', // IGES graphics format
'.hqx' => 'application/mac-binhex40', // Macintosh BinHex format
'.word' => 'application/msword', // Microsoft Word
'.w6w' => 'application/msword', // Microsoft Word
'.doc' => 'application/msword', // Microsoft Word
'.DOC' => 'application/msword', // Microsoft Word
'.wri' => 'application/mswrite', // Microsoft Write
'.bin' => 'application/octet-stream', // Uninterpreted binary
'.exe' => 'application/x-msdownload', // Windows EXE
'.EXE' => 'application/x-msdownload', // Windows EXE
'.oda' => 'application/oda', //  
'.pdf' => 'application/pdf', // PDF (Adobe Acrobat)
'.PDF' => 'application/pdf', // PDF (Adobe Acrobat)
'.ai' => 'application/postscript', // PostScript
'.PS' => 'application/postscript', // PostScript
'.ps' => 'application/postscript', // PostScript
'.eps' => 'application/postscript', // PostScript
'.prt' => 'application/pro_eng', // PTC Pro/ENGINEER
'.PRT' => 'application/pro_eng', // PTC Pro/ENGINEER
'.part' => 'application/pro_eng', // PTC Pro/ENGINEER
'.rtf' => 'application/rtf', // Rich Text Format
'.set' => 'application/set', // SET (French CAD standard)
'.SET' => 'application/set', // SET (French CAD standard)
'.stl' => 'application/sla', // Stereolithography
'.STL' => 'application/sla', // Stereolithography
'.SOL' => 'application/solids', // MATRA Prelude Solids
'.stp' => 'application/STEP', // ISO-10303 STEP data files
'.STP' => 'application/STEP', // ISO-10303 STEP data files
'.step' => 'application/STEP', // ISO-10303 STEP data files
'.STEP' => 'application/STEP', // ISO-10303 STEP data files
'.svg' => 'application/svg', // Scalable Vector Graphics
'.vda' => 'application/vda', // VDA-FS Surface data
'.VDA' => 'application/vda', // VDA-FS Surface data
'.dir' => 'application/x-director', // Macromedia Director
'.dcr' => 'application/x-director', // Macromedia Director
'.dxr' => 'application/x-director', // Macromedia Director
'.mif' => 'application/x-mif', // FrameMaker MIF Format
'.csh' => 'application/x-csh', // C-shell script
'.dvi' => 'application/x-dvi', // TeX DVI
'.gz' => 'application/x-gzip', // GNU Zip
'.gzip' => 'application/x-gzip', // GNU Zip
'.hdf' => 'application/x-hdf', // ncSA HDF Data File
'.latex' => 'application/x-latex', // LaTeX source
'.nc' => 'application/x-netcdf', // Unidata netCDF
'.cdf' => 'application/x-netcdf', // Unidata netCDF
'.sit' => 'application/x-stuffit', // Stiffut Archive
'.tcl' => 'application/x-tcl', // TCL script
'.texinfo' => 'application/x-texinfo', // Texinfo (Emacs)
'.texi' => 'application/x-texinfo', // Texinfo (Emacs)
'.t' => 'application/x-troff', // Troff
'.tr' => 'application/x-troff', // Troff
'.roff' => 'application/x-troff', // Troff
'.man' => 'application/x-troff-man', // Troff with MAN macros
'.me' => 'application/x-troff-me', // Troff with ME macros
'.ms' => 'application/x-troff-ms', // Troff with MS macros
'.src' => 'application/x-wais-source', // WAIS source
'.bcpio' => 'application/x-bcpio', // Old binary CPIO
'.cpio' => 'application/x-cpio', // POSIX CPIO
'.gtar' => 'application/x-gtar', // GNU tar
'.shar' => 'application/x-shar', // Shell archive
'.sv4cpio' => 'application/x-sv4cpio', // SVR4 CPIO
'.sv4crc' => 'application/x-sv4crc', // SVR4 CPIO with CRC
'.tar' => 'application/x-tar', // 4.3BSD tar format
'.ustar' => 'application/x-ustar', // POSIX tar format
'.hlp' => 'application/x-winhelp', // Windows Help
'.zip' => 'application/zip', // ZIP archive
'.au' => 'audio/basic', // Basic audio (usually m-law)
'.snd' => 'audio/basic', // Basic audio (usually m-law)
'.aif' => 'audio/x-aiff', // AIFF audio
'.aiff' => 'audio/x-aiff', // AIFF audio
'.aifc' => 'audio/x-aiff', // AIFF audio
'.ra' => 'audio/x-pn-realaudio', // RealAudio
'.ram' => 'audio/x-pn-realaudio', // RealAudio
'.rpm' => 'audio/x-pn-realaudio-plugin', // RealAudio (plug-in)
'.wav' => 'audio/x-wav', // Windows WAVE audio
'.mp3' => 'audio/x-mp3', // MP3 files
'.gif' => 'image/gif', // gif image
'.ief' => 'image/ief', // Image Exchange Format
'.jpg' => 'image/jpeg', // JPEG image
'.JPG' => 'image/jpeg', // JPEG image
'.JPE' => 'image/jpeg', // JPEG image
'.jpe' => 'image/jpeg', // JPEG image
'.JPEG' => 'image/jpeg', // JPEG image
'.jpeg' => 'image/jpeg', // JPEG image
'.pict' => 'image/pict', // Macintosh PICT
'.tiff' => 'image/tiff', // TIFF image
'.tif' => 'image/tiff', // TIFF image
'.ras' => 'image/x-cmu-raster', // CMU raster
'.pnm' => 'image/x-portable-anymap', // PBM Anymap format
'.pbm' => 'image/x-portable-bitmap', // PBM Bitmap format
'.pgm' => 'image/x-portable-graymap', // PBM Graymap format
'.ppm' => 'image/x-portable-pixmap', // PBM Pixmap format
'.rgb' => 'image/x-rgb', // RGB Image
'.xbm' => 'image/x-xbitmap', // X Bitmap
'.xpm' => 'image/x-xpixmap', // X Pixmap
'.xl' => 'application/excel', // Microsoft Excel
'.xls' => 'application/excel', // Microsoft Excel
'.XLS' => 'application/excel', // Microsoft Excel
'.xwd' => 'image/x-xwindowdump', // X Windows dump (xwd) format
'.zip' => 'multipart/x-zip', // PKZIP Archive
'.gzip' => 'multipart/x-gzip', // GNU ZIP Archive
'.mpeg' => 'video/mpeg', // MPEG video
'.mpg' => 'video/mpeg', // MPEG video
'.MPG' => 'video/mpeg', // MPEG video
'.MPE' => 'video/mpeg', // MPEG video
'.mpe' => 'video/mpeg', // MPEG video
'.MPEG' => 'video/mpeg', // MPEG video
'.mpeg' => 'video/mpeg', // MPEG video
'.qt' => 'video/quicktime', // QuickTime Video
'.mov' => 'video/quicktime', // QuickTime Video
'.avi' => 'video/msvideo', // Microsoft Windows Video
'.movie' => 'video/x-sgi-movie', // SGI Movieplayer format
'.wrl' => 'x-world/x-vrml', // VRML Worlds
'.odt' => 'application/vnd.oasis.opendocument.text', // OpenDocument Text
'.ott' => 'application/vnd.oasis.opendocument.text-template', // OpenDocument Text Template
'.ods' => 'application/vnd.oasis.opendocument.spreadsheet', // OpenDocument Spreadsheet
'.ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', // OpenDocument Spreadsheet Template
'.odp' => 'application/vnd.oasis.opendocument.presentation', // OpenDocument Presentation
'.otp' => 'application/vnd.oasis.opendocument.presentation-template', // OpenDocument Presentation Template
'.odg' => 'application/vnd.oasis.opendocument.graphics', // OpenDocument Drawing
'.otg' => 'application/vnd.oasis.opendocument.graphics-template', // OpenDocument Drawing Template
'.odc' => 'application/vnd.oasis.opendocument.chart', // OpenDocument Chart
'.otc' => 'application/vnd.oasis.opendocument.chart-template', // OpenDocument Chart Template
'.odf' => 'application/vnd.oasis.opendocument.formula', // OpenDocument Formula
'.otf' => 'application/vnd.oasis.opendocument.formula-template', // OpenDocument Formula Template
'.odi' => 'application/vnd.oasis.opendocument.image', // OpenDocument Image
'.oti' => 'application/vnd.oasis.opendocument.image-template', // OpenDocument Image Template
'.odm' => 'application/vnd.oasis.opendocument.text-master', // OpenDocument Master Document
'.oth' => 'application/vnd.oasis.opendocument.text-web', // HTML Document Template
'.odb' => 'application/vnd.oasis.opendocument.database', // OpenDocument Database
 
);
 
// }}}
 
// {{{ Enscript file extensions
 
// List of extensions recognised by enscript.
 
$extEnscript = array
(
'.ada' => 'ada',
'.adb' => 'ada',
'.ads' => 'ada',
'.awk' => 'awk',
'.c' => 'c',
'.c++' => 'cpp',
'.cc' => 'cpp',
'.cpp' => 'cpp',
'.csh' => 'csh',
'.cxx' => 'cpp',
'.diff' => 'diffu',
'.dpr' => 'delphi',
'.el' => 'elisp',
'.eps' => 'postscript',
'.f' => 'fortran',
'.for' => 'fortran',
'.gs' => 'haskell',
'.h' => 'c',
'.hpp' => 'cpp',
'.hs' => 'haskell',
'.htm' => 'html',
'.html' => 'html',
'.idl' => 'idl',
'.java' => 'java',
'.js' => 'javascript',
'.lgs' => 'haskell',
'.lhs' => 'haskell',
'.m' => 'objc',
'.m4' => 'm4',
'.man' => 'nroff',
'.nr' => 'nroff',
'.p' => 'pascal',
'.pas' => 'delphi',
'.patch' => 'diffu',
'.pkg' => 'sql',
'.pl' => 'perl',
'.pm' => 'perl',
'.pp' => 'pascal',
'.ps' => 'postscript',
'.s' => 'asm',
'.scheme' => 'scheme',
'.scm' => 'scheme',
'.scr' => 'synopsys',
'.sh' => 'sh',
'.shtml' => 'html',
'.sql' => 'sql',
'.st' => 'states',
'.syn' => 'synopsys',
'.synth' => 'synopsys',
'.tcl' => 'tcl',
'.tex' => 'tex',
'.texi' => 'tex',
'.texinfo' => 'tex',
'.v' => 'verilog',
'.vba' => 'vba',
'.vh' => 'verilog',
'.vhd' => 'vhdl',
'.vhdl' => 'vhdl',
'.py' => 'python',
// The following are handled internally by WebSVN, since there's no
// support for them in Enscript
'.php' => 'php',
'.phtml' => 'php',
'.php3' => 'php',
'.inc' => 'php'
);
 
// }}}
 
// Default 'zipped' array
 
$zipped = array ();
 
// Set up the version info
 
initSvnVersion($major,$minor);
 
// Get the language choice as defained as the default by config.inc
$user_defaultLang = $lang['LANGUAGENAME'];
 
// Override this with the user choice if there is one, and memorise the setting
// as a cookie (since we don't have user accounts, we can't store the setting
// anywhere else). We try to memorise a permanant cookie and a per session cookie
// in case the user's disabled permanant ones.
 
if (!empty($_REQUEST['langchoice']))
{
$user_defaultLang = $_REQUEST['langchoice'];
setcookie('storedlang', $_REQUEST['langchoice'], time()+(3600*24*356*10), '/');
setcookie('storedsesslang', $_REQUEST['langchoice']);
}
else // Try to read an existing cookie if there is one
{
if (!empty($_COOKIE['storedlang'])) $user_defaultLang = $_COOKIE['storedlang'];
else if (!empty($_COOKIE['storedsesslang'])) $user_defaultLang = $_COOKIE['storedsesslang'];
}
$user_defaultFile = '';
if ($handle = opendir('languages'))
{
// Read the language name for each language.
while (false !== ($file = readdir($handle)))
{
if ($file{0} != '.' && !is_dir('languages'.DIRECTORY_SEPARATOR.$file))
{
$lang['LANGUAGENAME'] = '';
require 'languages/'.$file;
if ($lang['LANGUAGENAME'] != '')
{
$langNames[] = $lang['LANGUAGENAME'];
if ($lang['LANGUAGENAME'] == $user_defaultLang)
$user_defaultFile = $file;
}
}
}
 
closedir($handle);
// XXX: this shouldn't be necessary
// ^ i.e. just require english.inc, then the desired language
// Reload english to get untranslated strings
require 'languages/english.inc';
// Reload the default language
if (!empty($user_defaultFile))
require 'languages/'.$user_defaultFile;
$url = getParameterisedSelfUrl(true);
$vars["lang_form"] = "<form action=\"$url\" method=\"post\" id=\"langform\">";
$vars["lang_select"] = "<select name=\"langchoice\" onchange=\"javascript:this.form.submit();\">";
reset($langNames);
foreach ($langNames as $name)
{
$sel = "";
if ($name == $user_defaultLang) $sel = "selected";
$vars["lang_select"] .= "<option value=\"$name\" $sel>$name</option>";
}
$vars["lang_select"] .= "</select>";
$vars["lang_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\">";
$vars["lang_endform"] = "</form>";
}
 
// Set up headers
 
header('Content-Type: text/html; charset=UTF-8');
 
// Make sure that the user has set up a repository
 
$reps = $config->getRepositories();
if (empty($reps[0]))
{
echo $lang["SUPPLYREP"];
exit;
}
 
// Override the rep parameter with the repository name if it's available
$repname = @$_REQUEST["repname"];
if (isset($repname))
{
$rep = $config->findRepository($repname);
}
else
$rep = $reps[0];
// Retrieve other standard parameters
 
# due to possible XSS exploit, we need to clean up path first
$path = !empty($_REQUEST['path']) ? $_REQUEST['path'] : null;
$vars['safepath'] = htmlentities($path);
$rev = (int)@$_REQUEST["rev"];
$showchanged = (@$_REQUEST["sc"] == 1)?1:0;
 
// Function to create the project selection HTML form
function createProjectSelectionForm()
{
global $config, $vars, $rep, $lang, $showchanged;
$url = $config->getURL(-1, "", "form");
$vars["projects_form"] = "<form action=\"$url\" method=\"post\" id=\"projectform\">";
$reps = $config->getRepositories();
$vars["projects_select"] = "<select name=\"repname\" onchange=\"javascript:this.form.submit();\">";
foreach ($reps as $trep)
{
if ($trep->hasReadAccess("/", true))
{
if ($rep->getDisplayName() == $trep->getDisplayName())
$sel = "selected";
else
$sel = "";
$vars["projects_select"] .= "<option value=\"".$trep->getDisplayName()."\" $sel>".$trep->getDisplayName()."</option>";
}
}
$vars["projects_select"] .= "</select>";
$vars["projects_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\" />";
$vars["projects_endform"] = "<input type=\"hidden\" name=\"selectproj\" value=\"1\" /><input type=\"hidden\" name=\"op\" value=\"form\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>";
}
 
// Create the form if we're not in MultiViews. Otherwise wsvn must create the form once the current project has
// been found
 
if (!$config->multiViews)
{
createProjectSelectionForm();
}
 
if ($rep)
{
$vars["allowdownload"] = $rep->getAllowDownload();
$vars["repname"] = $rep->getDisplayName();
}
 
// As of version 1.70 the output encoding is forced to be UTF-8, since this is the output
// encoding returned by svn log --xml. This is good, since we are no longer reliant on PHP's
// rudimentary conversions.
 
$vars["charset"] = "UTF-8";
?>
/WebSVN/include/auth.inc
0,0 → 1,242
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// auth.inc
//
// Handle reading and interpretation of an SVN auth file
 
require_once("include/accessfile.inc");
 
define("UNDEFINED", 0);
define("ALLOW", 1);
define("DENY", 2);
 
class Authentication
{
var $rights;
var $user;
var $usersGroups = array();
// {{{ __construct
 
function Authentication($accessfile)
{
$this->rights = new IniFile();
$this->rights->readIniFile($accessfile);
$this->setUsername("");
$this->identifyGroups();
}
 
// }}}
// {{{ setUsername($username)
//
// Set the username if it is given, or
// get the user of the current http session
 
function setUsername($username)
{
if ($username == "") // Use the current user
{
$this->user = @$_SERVER["REMOTE_USER"];
}
else
{
$this->user = $username;
}
}
 
// }}}
 
// {{{ identifyGroups()
//
// Checks to see which groups the user belongs to
 
function identifyGroups()
{
$this->usersGroups[] = "*";
 
if (is_array($this->rights->getValues("groups")))
{
foreach ($this->rights->getValues("groups") as $group => $names)
{
if (in_array(strtolower($this->user), preg_split('/\s*,\s*/', $names)))
$this->usersGroups[] = "@" . $group;
}
}
}
 
// }}}
 
// {{{ inList
//
// Check if the user is in the given list and return their read status
// if they are (UNDEFINED, ALLOW or DENY)
function inList($accessors, $user)
{
$output = UNDEFINED;
foreach($accessors As $key => $rights)
{
$keymatch = false;
if (in_array($key, $this->usersGroups) || !strcmp($key, strtolower($user)))
$keymatch = true;
if ($keymatch)
{
if (strpos($rights, "r") !== false)
return ALLOW;
else
$output = DENY;
}
}
return $output;
}
 
// }}}
// {{{ hasReadAccess
//
// Returns true if the user has read access to the given path
function hasReadAccess($repos, $path, $checkSubFolders = false)
{
$access = UNDEFINED;
if ($path{0} != "/")
$path = "/$path";
// If were told to, we should check sub folders of the path to see if there's
// a read access below this level. This is used to display the folders needed
// to get to the folder to which read access is granted.
if ($checkSubFolders)
{
$sections = $this->rights->getSections();
foreach($sections As $section => $accessers)
{
$qualified = $repos.":".$path;
$len = strlen($qualified);
if ($len < strlen($section) && strncmp($section, $qualified, strlen($qualified)) == 0)
{
$access = $this->inList($accessers, $this->user);
}
 
if ($access != ALLOW)
{
$len = strlen($path);
if ($len < strlen($section) && strncmp($section, $path, strlen($path)) == 0)
{
$access = $this->inList($accessers, $this->user);
}
}
if ($access == ALLOW)
break;
}
}
// If we still don't have access, check each subpath of the path until we find an
// access level...
if ($access != ALLOW)
{
$access = UNDEFINED;
do
{
$accessers = $this->rights->getValues($repos.":".$path);
if (!empty($accessers))
$access = $this->inList($accessers, $this->user);
if ($access == UNDEFINED)
{
$accessers = $this->rights->getValues($path);
if (!empty($accessers))
$access = $this->inList($accessers, $this->user);
}
// If we've not got a match, remove the sub directory and start again
if ($access == UNDEFINED)
{
if ($path == "/") break;
$path = substr($path, 0, strrpos(substr($path, 0, -1), "/") + 1);
}
} while ($access == UNDEFINED && $path != "");
}
return $access == ALLOW;
}
 
// }}}
// {{{ hasUnrestrictedReadAccess
//
// Returns true if the user has read access to the given path and too
// all subfolders
function hasUnrestrictedReadAccess($repos, $path)
{
// First make sure that we have full read access at this level
if (!$this->hasReadAccess($repos, $path, false))
return false;
// Now check to see if there is a sub folder that's protected
$sections = $this->rights->getSections();
foreach($sections As $section => $accessers)
{
$qualified = $repos.":".$path;
$len = strlen($qualified);
$access = UNDEFINED;
if ($len < strlen($section) && strncmp($section, $qualified, strlen($qualified)) == 0)
{
$access = $this->inList($accessers, $this->user);
}
 
if ($access != DENY)
{
$len = strlen($path);
if ($len < strlen($section) && strncmp($section, $path, strlen($qualified)) == 0)
{
$access = $this->inList($accessers, $this->user);
}
}
if ($access == DENY)
return false;
}
return true;
}
 
// }}}
 
}
?>
/WebSVN/include/bugtraq.inc
0,0 → 1,390
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// bugtraq.inc
//
// Functions for accessing the bugtraq properties and replacing issue IDs
// with URLs.
//
// For more information about bugtraq, see
// http://svn.collab.net/repos/tortoisesvn/trunk/doc/issuetrackers.txt
 
class Bugtraq
{
// {{{ Properties
 
var $msgstring;
var $urlstring;
var $logregex;
var $append;
 
var $firstPart;
var $firstPartLen;
var $lastPart;
var $lastPartLen;
 
var $propsfound = false;
 
// }}}
 
// {{{ __construct($rep, $svnrep, $path)
 
function Bugtraq($rep, $svnrep, $path)
{
global $config;
if ($rep->getBugtraq())
{
$pos = strrpos($path, "/");
$parent = substr($path, 0, $pos + 1);
$this->append = true;
$enoughdata = false;
while(!$enoughdata && (strpos($parent, "/") !== false))
{
if (empty($this->msgstring)) $this->msgstring = $svnrep->getProperty($parent, 'bugtraq:message');
if (empty($this->logregex)) $this->logregex = $svnrep->getProperty($parent, 'bugtraq:logregex');
if (empty($this->urlstring)) $this->urlstring = $svnrep->getProperty($parent, 'bugtraq:url');
if (empty($this->append)) $this->append = ($svnrep->getProperty($parent, 'bugtraq:append') == "true");
$parent = substr($parent, 0, -1); // Remove the trailing slash
$pos = strrpos($parent, "/"); // Find the last trailing slash
$parent = substr($parent, 0, $pos + 1); // Find the previous parent directory
$enoughdata = ((!empty($this->msgstring) || !empty($this->logregex)) && !empty($this->urlstring));
}
$this->msgstring = trim(@$this->msgstring);
$this->urlstring = trim(@$this->urlstring);
if ($enoughdata && !empty($this->msgstring))
$this->initPartInfo();
if ($enoughdata)
$this->propsfound = true;
}
}
 
// }}}
 
// {{{ initPartInfo()
function initPartInfo()
{
if (($bugidpos = strpos($this->msgstring, "%BUGID%")) !== false && strpos($this->urlstring, "%BUGID%") !== false)
{
// Get the textual parts of the message string for comparison purposes
$this->firstPart = substr($this->msgstring, 0, $bugidpos);
$this->firstPartLen = strlen($this->firstPart);
$this->lastPart = substr($this->msgstring, $bugidpos + 7);
$this->lastPartLen = strlen($this->lastPart);
}
}
 
// }}}
 
// {{{ replaceIDs($message)
 
function replaceIDs($message)
{
if ($this->propsfound)
{
// First we search for the message string
$logmsg = "";
$message = rtrim($message);
if ($this->append)
{
// Just compare the last line
if (($offset = strrpos($message, "\n")) !== false)
{
$logmsg = substr($message, 0, $offset + 1);
$bugLine = substr($message, $offset + 1);
}
else
$bugLine = $message;
}
else
{
if (($offset = strpos($message, "\n")) !== false)
{
$bugLine = substr($message, 0, $offset);
$logmsg = substr($message, $offset);
}
else
$bugLine = $message;
}
 
// Make sure that our line really is an issue tracker message
 
if (((strncmp($bugLine, $this->firstPart, $this->firstPartLen) == 0)) &&
strcmp(substr($bugLine, -$this->lastPartLen, $this->lastPartLen), $this->lastPart) == 0)
{
// Get the issues list
if ($this->lastPartLen > 0)
$issues = substr($bugLine, $this->firstPartLen, -$this->lastPartLen);
else
$issues = substr($bugLine, $this->firstPartLen);
// Add each reference to the first part of the line
$line = $this->firstPart;
while ($pos = strpos($issues, ","))
{
$issue = trim(substr($issues, 0, $pos));
$issues = substr($issues, $pos + 1);
$line .= "<a href=\"".str_replace("%BUGID%", $issue, $this->urlstring)."\">$issue</a>, ";
}
$line .= "<a href=\"".str_replace("%BUGID%", trim($issues), $this->urlstring)."\">".trim($issues)."</a>".$this->lastPart;
if ($this->append)
$message = $logmsg.$line;
else
$message = $line.$logmsg;
}
// Now replace all other instances of bug IDs that match the regex
 
if ($this->logregex)
{
$message = rtrim($message);
$line = "";
$allissues = "";
$lines = split("\n", $this->logregex);
$regex_all = "~".$lines[0]."~";
$regex_single = @$lines[1];
if (empty($regex_single))
{
// If the property only contains one line, then the pattern is only designed
// to find one issue number at a time. e.g. [Ii]ssue #?(\d+). In this case
// we need to replace the matched issue ID with the link.
if ($numMatches = preg_match_all($regex_all, $message, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
{
$addedOffset = 0;
for ($match = 0; $match < $numMatches; $match++)
{
$issue = $matches[$match][1][0];
$issueOffset = $matches[$match][1][1];
$issueLink = "<a href=\"".str_replace("%BUGID%", $issue, $this->urlstring)."\">".$issue."</a>";
$message = substr_replace($message, $issueLink, $issueOffset + $addedOffset, strlen($issue));
$addedOffset += strlen($issueLink) - strlen($issue);
}
}
}
else
{
// It the property contains two lines, then the first is a pattern for extracting
// multiple issue numbers, and the second is a pattern extracting each issue
// number from the multiple match. e.g. [Ii]ssue #?(\d+)(,? ?#?(\d+))+ and (\d+)
while (preg_match($regex_all, $message, $matches, PREG_OFFSET_CAPTURE))
{
$completeMatch = $matches[0][0];
$completeMatchOffset = $matches[0][1];
$replacement = $completeMatch;
if ($numMatches = preg_match_all("~".$regex_single."~", $replacement, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
{
$addedOffset = 0;
for ($match = 0; $match < $numMatches; $match++)
{
$issue = $matches[$match][1][0];
$issueOffset = $matches[$match][1][1];
 
$issueLink = "<a href=\"".str_replace("%BUGID%", $issue, $this->urlstring)."\">".$issue."</a>";
$replacement = substr_replace($replacement, $issueLink, $issueOffset + $addedOffset, strlen($issue));
$addedOffset += strlen($issueLink) - strlen($issue);
}
}
$message = substr_replace($message, $replacement, $completeMatchOffset, strlen($completeMatch));
}
}
}
}
 
return $message;
}
 
// }}}
 
}
 
// The BugtraqTestable class is a derived class that is used to test the matching
// abilities of the Bugtraq class. In particular, it allows for the initialisation of the
// class without the need for a repository.
 
class BugtraqTestable extends Bugtraq
{
// {{{ __construct()
 
function BugtraqTestable()
{
// This constructor serves to assure that the parent constructor is not
// called.
}
 
// }}}
 
// {{{ setUpVars($message, $url, $regex, $append)
 
function setUpVars($message, $url, $regex, $append)
{
$this->msgstring = $message;
$this->urlstring = $url;
$this->logregex = $regex;
$this->append = $append;
$this->propsfound = true;
 
$this->initPartInfo();
}
 
// }}}
 
// {{{ setMessage($message)
function setMessage($message)
{
$this->msgstring = $message;
}
 
// }}}
 
// {{{ setUrl($url)
 
function setUrl($url)
{
$this->urlstring = $url;
}
 
// }}}
 
// {{{ setRegex($regex)
 
function setRegEx($regex)
{
$this->logregex = $regex;
}
 
// }}}
 
// {{{ setAppend($append)
 
function setAppend($append)
{
$this->append = $append;
}
 
// }}}
 
// {{{ printVars()
function printVars()
{
echo "msgstring = ".$this->msgstring."\n";
echo "urlstring = ".$this->urlstring."\n";
echo "logregex = ".$this->logregex."\n";
echo "append = ".$this->append."\n";
echo "firstPart = ".$this->firstPart."\n";
echo "firstPartLen = ".$this->firstPartLen."\n";
echo "lastPart = ".$this->lastPart."\n";
echo "lastPartLen = ".$this->lastPartLen."\n";
}
 
// }}}
}
 
// {{{ test_bugtraq()
 
function test_bugtraq()
{
$tester = new BugtraqTestable;
$tester->setUpVars("BugID: %BUGID%",
"http://bugtracker/?id=%BUGID%",
"[Ii]ssue #?(\d+)",
true);
//$tester->printVars();
$res = $tester->replaceIDs("BugID: 789\n".
"This is a test message that refers to issue #123 and\n".
"issue #456.\n".
"BugID: 789");
echo nl2br($res)."<p>";
$res = $tester->replaceIDs("BugID: 789, 101112\n".
"This is a test message that refers to issue #123 and\n".
"issue #456.\n".
"BugID: 789, 101112");
 
echo nl2br($res)."<p>";
$tester->setAppend(false);
$res = $tester->replaceIDs("BugID: 789\n".
"This is a test message that refers to issue #123 and\n".
"issue #456.\n".
"BugID: 789");
echo nl2br($res)."<p>";
$res = $tester->replaceIDs("BugID: 789, 101112\n".
"This is a test message that refers to issue #123 and\n".
"issue #456.\n".
"BugID: 789, 101112");
 
echo nl2br($res)."<p>";
$tester->setUpVars("BugID: %BUGID%",
"http://bugtracker/?id=%BUGID%",
"[Ii]ssues?:?(\s*(,|and)?\s*#\d+)+\n(\d+)",
true);
$res = $tester->replaceIDs("BugID: 789, 101112\n".
"This is a test message that refers to issue #123 and\n".
"issues #456, #654 and #321.\n".
"BugID: 789, 101112");
 
echo nl2br($res)."<p>";
 
$tester->setUpVars("Test: %BUGID%",
"http://bugtracker/?id=%BUGID%",
"\s*[Cc]ases*\s*[IDs]*\s*[#: ]+((\d+[ ,:;#]*)+)\n(\d+)",
true);
$res = $tester->replaceIDs("Cosmetic change\n".
"CaseIDs: 48");
 
echo nl2br($res)."<p>";
}
 
// }}}
 
?>
/WebSVN/include/command.inc
0,0 → 1,171
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// command.inc
//
// External command handling
 
// {{{ replaceEntities
//
// Replace character codes with HTML entities for display purposes.
// This routine assumes that the character encoding of the string is
// that of the local system (i.e., it's a string returned from a command
// line command).
 
function replaceEntities($str, $rep)
{
global $config;
// Ideally, we'd do this:
//
// $str = htmlentities($str, ENT_COMPAT, $config->inputEnc);
//
// However, htmlentities is very limited in it's ability to process
// character encodings. We have to rely on something more powerful.
if (version_compare(phpversion(), "4.1.0", "<"))
{
// In this case, we can't do any better than assume that the
// input encoding is ISO-8859-1.
$str = htmlentities($str);
}
else
{
$str = toOutputEncoding($str, $rep->getContentEncoding());
 
// $str is now encoded as UTF-8.
$str = htmlentities($str, ENT_COMPAT, $config->outputEnc);
}
return $str;
}
 
// }}}
 
// {{{ toOutputEncoding
 
function toOutputEncoding($str, $inputEncoding = "")
{
global $config;
if (empty($inputEncoding))
$inputEncoding = $config->inputEnc;
// Try to convert the messages based on the locale information
if ($config->inputEnc && $config->outputEnc)
{
if (function_exists("iconv"))
{
$output = @iconv($inputEncoding, $config->outputEnc, $str);
if (!empty($output))
$str = $output;
}
}
 
return $str;
}
 
// }}}
 
// {{{ quoteCommand
 
function quoteCommand($cmd, $redirecterr)
{
global $config;
if ($redirecterr)
$cmd .= " 2>&1";
// On Windows machines, the whole line needs quotes round it so that it's
// passed to cmd.exe correctly
 
if ($config->serverIsWindows)
$cmd = "\"$cmd\"";
return $cmd;
}
 
// }}}
 
// {{{ runCommand
 
function runCommand($cmd, $mayReturnNothing = false)
{
global $lang;
$output = array ();
$err = false;
 
$c = quoteCommand($cmd, false);
// Try to run the command normally
if ($handle = popen($c, 'r'))
{
$firstline = true;
while (!feof($handle))
{
$line = fgets($handle);
if ($firstline && empty($line) && !$mayReturnNothing)
{
$err = true;
}
$firstline = false;
$output[] = toOutputEncoding(rtrim($line));
}
pclose($handle);
if (!$err)
return $output;
}
 
echo '<p>',$lang['BADCMD'],': <code>',$cmd,'</code></p>';
// Rerun the command, this time grabbing the error information
 
$c = quoteCommand($cmd, true);
 
$output = toOutputEncoding(shell_exec($c));
if (!empty($output))
echo '<p>',nl2br($output),'</p>';
exit;
}
 
// }}}
 
// {{{ quote
//
// Quote a string to send to the command line
 
function quote($str)
{
global $config;
 
if ($config->serverIsWindows)
return "\"$str\"";
else
return escapeshellarg($str);
}
 
// }}}
 
?>
/WebSVN/include/distconfig.inc
0,0 → 1,376
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// config.inc
//
// Configuration parameters
 
// --- FOLLOW THE INSTRUCTIONS BELOW TO CONFIGURE YOUR SETUP ---
 
// {{{ PLATFORM CONFIGURATION ---
 
// Uncomment the next line if your running a windows server
//
// $config->setServerIsWindows();
 
// Configure these lines if your commands aren't on your path.
//
// $config->setSVNCommandPath('Path/to/svn and svnlook/ e.g. c:\\program files\\subversion\\bin');
// $config->setDiffPath('Path/to/diff/command/');
 
// For syntax colouring, if option enabled...
// $config->setEnscriptPath('Path/to/enscript/command/');
// $config->setSedPath('Path/to/sed/command/');
 
// For delivered tarballs, if option enabled...
// $config->setTarPath('Path/to/tar/command/');
 
// For delivered GZIP'd files and tarballs, if option enabled...
// $config->setGZipPath('Path/to/gzip/command/');
 
// }}}
 
// {{{ REPOSITORY SETUP ---
 
// There are 2 methods for defining the repositiories available on the system. Either you list
// them by hand, in which case you can give each one the name of your choice, or you use the
// parent path function, in which case the name of the directory is used as the repository name.
//
// In all cases, you may optionally supply a group name to the repositories. This is useful in the
// case that you need to separate your projects. Grouped Repositories are referred to using the
// convention GroupName.RepositoryName
//
// Performance is much better on local repositories (e.g. accessed by file:///). However, you
// can also provide an interface onto a remote repository. In this case you should supply the
// username and password needed to access it.
//
// To configure the repositories by hand, copy the appropriate line below, uncomment it and
// replace the name and URL of your repository.
 
// Local repositories (without and with optional group):
//
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)');
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)', 'group');
//
// Remote repositories (without and with optional group):
//
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', NULL, 'username', 'password');
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', 'group', 'username', 'password');
//
// To use the parent path method, uncomment the newt line and and replace the path with your one. You
// can call the function several times if you have several parent paths. Note that in this case the
// path is a filesystem path
//
// $config->parentPath('Path/to/parent (e.g. c:\\svn)');
 
// }}}
 
// {{{ LOOK AND FEEL ---
//
// Uncomment ONLY the template file that you want.
 
$config->setTemplatePath("$locwebsvnreal/templates/Standard/");
// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/");
// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/");
 
// You may also specify a per repository template file by uncommenting and changing the following
// line as necessary. Use the convention "groupname.myrep" if your repository is in a group.
 
// $config->setTemplatePath('$locwebsvnreal/templates/Standard/', 'myrep'); // Access file for myrep
 
// The index page containing the projects may either be displayed as a flat view (the default),
// where grouped repositories are displayed as "GroupName.RepName" or as a tree view.
// In the case of a tree view, you may choose whether the entire tree is open by default.
 
// $config->useTreeIndex(false); // Tree index, closed by default
// $config->useTreeIndex(true); // Tree index, open by default
 
// By default, WebSVN displays a tree view onto the current directory. You can however
// choose to display a flat view of the current directory only, which may make the display
// load faster. Uncomment this line if you want that.
 
// $config->useFlatView();
 
// }}}
 
// {{{ LANGUAGE SETUP ---
 
// WebSVN uses the iconv module to convert messages from your system's character set to the
// UTF-8 output encoding. If you find that your log messages aren't displayed correctly then
// you'll need to change the value here.
//
// You may also specify the character encoding of the repository contents if different from
// the system encoding. This is typically the case for windows users, whereby the command
// line returns, for example, CP850 encoded strings, whereas the source files are encoded
// as iso-8859-1 by Windows based text editors. When display text file, WebSVN will convert
// them from the content encoding to the output encoding (UTF-8).
//
// WebSVN does its best to automate all this, so only use the following if it doesn't work
// "out of the box". Uncomment and change one of the examples below.
//
// $config->setInputEncoding('CP850'); // Encoding of result returned by svn command line, etc.
// $config->setContentEncoding('iso-8859-1'); // Content encoding of all your repositories // repositories
 
// You may also specify a content encoding on a per repository basis. Uncomment and copy this
// line as necessary.
//
// $config->setContentEncoding('iso-8859-1', 'MyEnc');
 
// Note for Windows users: To enable iconv you'll need to enable the extension in your php.ini file
// AND copy iconv.dll (not php_iconv.dll) to your Windows system folder. In most cases the correct
// encoding is set when you call $config->setServerIsWindows();.
 
// Note for *nix users. You'll need to have iconv compiled into your binary. The default input and
// output encodings are taken from your locale informations. Override these if they aren't correct.
 
// Uncomment the default language. If you want English then don't do anything here.
//
// include 'languages/catalan.inc';
// include 'languages/czech.inc';
// include 'languages/danish.inc';
// include 'languages/dutch.inc';
// include 'languages/finnish.inc';
// include 'languages/french.inc';
// include 'languages/german.inc';
// include 'languages/japanese.inc';
// include 'languages/korean.inc';
// include 'languages/norwegian.inc';
// include 'languages/polish.inc';
// include 'languages/portuguese.inc';
// include 'languages/russian.inc';
// include 'languages/schinese.inc';
// include 'languages/slovenian.inc';
// include 'languages/spanish.inc';
// include 'languages/swedish.inc';
// include 'languages/tchinese.inc';
// include 'languages/turkish.inc';
 
// }}}
 
// {{{ MULTIVIEWS ---
 
// Uncomment this line if you want to use MultiView to access the repository by, for example:
//
// http://servername/wsvn/repname/path/in/repository
//
// Note: The websvn directory will need to have Multiviews turned on in Apache, and you'll need to configure
// wsvn.php
 
// $config->useMultiViews();
 
// }}}
 
// {{{ ACCESS RIGHTS ---
 
// Uncomment this line if you want to use your Subversion access file to control access
// rights via WebSVN. For this to work, you'll need to set up the same Apache based authentication
// to the WebSVN (or wsvn) directory as you have for Subversion itself. More information can be
// found in install.txt
 
// $config->useAuthenticationFile('/path/to/accessfile'); // Global access file
 
// You may also specify a per repository access file by uncommenting and copying the following
// line as necessary. Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->useAuthenticationFile('/path/to/accessfile', 'myrep'); // Access file for myrep
 
// }}}
 
// {{{ FILE CONTENT ---
//
// You may wish certain file types to be GZIP'd and delieved to the user when clicked apon.
// This is useful for binary files and the like that don't display well in a browser window!
// Copy, uncomment and modify this line for each extension to which this rule should apply.
// (Don't forget the . before the extension. You don't need an index between the []'s).
// If you'd rather that the files were delivered uncompressed with the associated MIME type,
// then read below.
//
// $zipped[] = '.dll';
 
// Subversion controlled files have an svn:mime-type property that can
// be set on a file indicating its mime type. By default binary files
// are set to the generic appcliation/octet-stream, and other files
// don't have it set at all. WebSVN also has a built-in list of
// associations from file extension to MIME content type. (You can
// view this list in setup.inc).
//
// Determining the content-type: By default, if the svn:mime-type
// property exists and is different from application/octet-stream, it
// is used. Otherwise, if the built-in list has a contentType entry
// for the extension of the file, that is used. Otherwise, if the
// svn:mime-type property exists has the generic binary value of
// application/octet-stream, the file will be served as a binary
// file. Otherwise, the file will be brought up as ASCII text in the
// browser window (although this text may optionally be colourised.
// See below).
//
// Uncomment this if you want to ignore any svn:mime-type property on your
// files.
//
// $config->ignoreSvnMimeTypes();
//
// Uncomment this if you want skip WebSVN's custom mime-type handling
//
// $config->ignoreWebSVNContentTypes();
//
// Following the examples below, you can add new associations, modify
// the default ones or even delete them entirely (to show them in
// ASCII via WebSVN).
 
// $contentType['.c'] = 'plain/text'; // Create a new association
// $contentType['.doc'] = 'plain/text'; // Modify an existing one
// unset($contentType['.m'] // Remove a default association
 
// }}}
 
// {{{ TARBALLS ---
 
// You need tar and gzip installed on your system. Set the paths above if necessary
//
// Uncomment the line below to offer a tarball download option across all your
// repositories.
//
// $config->allowDownload();
//
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->allowDownload('myrep'); // Specifically allow downloading for 'myrep'
// $config->disallowDownload('myrep'); // Specifically disallow downloading for 'myrep'
 
// You can also choose the minimum directory level from which you'll allow downloading.
// A value of zero will allow downloading from the root. 1 will allow downloding of directories
// in the root, etc.
//
// If your project is arranged with trunk, tags and branches at the root level, then a value of 2
// would allow the downloading of directories within branches/tags while disallowing the download
// of the entire branches or tags directories. This would also stop downloading of the trunk, but
// see after for path exceptions.
//
// Change the line below to set the download level across all your repositories.
 
$config->setMinDownloadLevel(2);
 
// To change the level for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->setMinDownloadLevel(2, 'myrep');
 
// Finally, you may add or remove certain directories (and their contents) either globally
// or on a per repository basis. Uncomment and copy the following lines as necessary. Note
// that the these are searched in the order than you give them until a match is made (with the
// exception that all the per repository exceptions are tested before the global ones). This means
// that you must disallow /a/b/c/ before you allow /a/b/ otherwise the allowed match on /a/b/ will
// stop any further searching, thereby allowing downloads on /a/b/c/.
 
// Global exceptions possibilties:
//
// $config->addAllowedDownloadException('/path/to/allowed/directory/');
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/');
//
// Per repository exception possibilties:
// Use the convention 'groupname.myrep' if your repository is in a group.
//
// $config->addAllowedDownloadException('/path/to/allowed/directory/', 'myrep');
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/', 'myrep');
 
// }}}
 
// {{{ COLOURISATION ---
 
// Uncomment this line if you want to use Enscript to colourise your file listings
//
// You'll need Enscript version 1.6 or higher AND Sed installed to use this feature.
// Set the path above.
//
// $config->useEnscript();
 
// Enscript need to be told what the contents of a file are so that it can be colourised
// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript
// file type (viewable in setup.inc).
//
// Here you should add and other extensions not already listed or redefine the default ones. eg:
//
// $extEnscript['.pas'] = 'pascal';
//
// Note that extensions are case sensitive.
 
// }}}
 
// {{{ RSSFEED ---
 
// Uncomment this line if you wish to hide the RSS feed links across all repositories
//
// $config->hideRSS();
//
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->hideRSS('myrep'); // Specifically hide RSS links for 'myrep'
// $config->showRSS('myrep'); // Specifically show RSS links for 'myrep'
 
// }}}
 
// {{{ BUGTRAQ ---
 
// Uncomment this line if you wish to use bugtraq: properties to show links to your BugTracker
// from the log messages.
//
// $config->useBugtraqProperties();
//
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->useBugtraqProperties('myrep'); // Specifically use bugtraq properties for 'myrep'
// $config->ignoreBugtraqProperties('myrep'); // Specifically ignore bugtraq properties for 'myrep'
 
// }}}
 
// {{{ MISCELLANEOUS ---
 
// Comment out this if you don't have the right to use it. Be warned that you may need it however!
set_time_limit(0);
 
// Comment this line to turn off caching of repo information. This will slow down your browsing.
$config->setCachingOn();
 
// Number of spaces to expand tabs to in diff/listing view across all repositories
 
$config->expandTabsBy(8);
 
// To change the global option for individual repositories, uncomment and replicate
// the required line below (replacing 'myrep' for the name of the repository to be changed).
// Use the convention 'groupname.myrep' if your repository is in a group.
 
// $config->expandTabsBy(3, 'myrep'); // Expand Tabs by 3 for repository 'myrep'
 
// For installations without PHP5, a copy of PEAR's PHP Compat library is included.
// If you have your own version of Compat you wish to use, go ahead and specify here.
 
// $config->setPHPCompatPath('/usr/share/php/PHP/');
 
// }}}
?>
/WebSVN/include/feedcreator.class.php
0,0 → 1,1153
<?php
# vim:et:ts=4:sts=4:sw=4:fdm=marker:
# {{{ Info
/***************************************************************************
 
FeedCreator class v1.6
originally (c) Kai Blankenhorn
www.bitfolge.de
kaib@bitfolge.de
v1.3 work by Scott Reynen (scott@randomchaos.com) and Kai Blankenhorn
v1.5 OPML support by Dirk Clemens
 
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details: <http://www.gnu.org/licenses/gpl.txt>
 
****************************************************************************
 
 
Changelog:
 
Modifications for WebSVN:
The main description link wasn't put through htmlspecialcharacters
Output encoding now defined by $config
Remove hardcoded time zone
 
v1.6 05-10-04
added stylesheet to RSS 1.0 feeds
fixed generator comment (thanks Kevin L. Papendick and Tanguy Pruvot)
fixed RFC822 date bug (thanks Tanguy Pruvot)
added TimeZone customization for RFC8601 (thanks Tanguy Pruvot)
fixed Content-type could be empty (thanks Tanguy Pruvot)
fixed author/creator in RSS1.0 (thanks Tanguy Pruvot)
 
 
v1.6 beta 02-28-04
added Atom 0.3 support (not all features, though)
improved OPML 1.0 support (hopefully - added more elements)
added support for arbitrary additional elements (use with caution)
code beautification :-)
considered beta due to some internal changes
 
v1.5.1 01-27-04
fixed some RSS 1.0 glitches (thanks to Stéphane Vanpoperynghe)
fixed some inconsistencies between documentation and code (thanks to Timothy Martin)
 
v1.5 01-06-04
added support for OPML 1.0
added more documentation
 
v1.4 11-11-03
optional feed saving and caching
improved documentation
minor improvements
 
v1.3 10-02-03
renamed to FeedCreator, as it not only creates RSS anymore
added support for mbox
tentative support for echo/necho/atom/pie/???
v1.2 07-20-03
intelligent auto-truncating of RSS 0.91 attributes
don't create some attributes when they're not set
documentation improved
fixed a real and a possible bug with date conversions
code cleanup
 
v1.1 06-29-03
added images to feeds
now includes most RSS 0.91 attributes
added RSS 2.0 feeds
 
v1.0 06-24-03
initial release
 
 
 
***************************************************************************/
 
/*** GENERAL USAGE *********************************************************
 
include("feedcreator.class.php");
 
$rss = new UniversalFeedCreator();
$rss->useCached(); // use cached version if age<1 hour
$rss->title = "PHP news";
$rss->description = "daily news from the PHP scripting world";
$rss->link = "http://www.dailyphp.net/news";
$rss->syndicationURL = "http://www.dailyphp.net/".$_SERVER["PHP_SELF"];
 
$image = new FeedImage();
$image->title = "dailyphp.net logo";
$image->url = "http://www.dailyphp.net/images/logo.gif";
$image->link = "http://www.dailyphp.net";
$image->description = "Feed provided by dailyphp.net. Click to visit.";
$rss->image = $image;
 
// get your news items from somewhere, e.g. your database:
mysql_select_db($dbHost, $dbUser, $dbPass);
$res = mysql_query("SELECT * FROM news ORDER BY newsdate DESC");
while ($data = mysql_fetch_object($res)) {
$item = new FeedItem();
$item->title = $data->title;
$item->link = $data->url;
$item->description = $data->short;
$item->date = $data->newsdate;
$item->source = "http://www.dailyphp.net";
$item->author = "John Doe";
$rss->addItem($item);
}
 
// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1 (deprecated),
// MBOX, OPML, ATOM0.3
echo $rss->saveFeed("RSS1.0", "news/feed.xml");
 
# }}}
 
***************************************************************************
* A little setup *
**************************************************************************/
 
/**
* Version string.
**/
define("FEEDCREATOR_VERSION", "FeedCreator 1.6");
 
 
 
/**
* A FeedItem is a part of a FeedCreator feed.
*
* @author Kai Blankenhorn <kaib@bitfolge.de>
* @since 1.3
*/
class FeedItem {
# {{{ Properties
 
/**
* Mandatory attributes of an item.
*/
var $title, $description, $link;
/**
* Optional attributes of an item.
*/
var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator;
/**
* Publishing date of an item. May be in one of the following formats:
*
* RFC 822:
* "Mon, 20 Jan 03 18:05:41 +0400"
* "20 Jan 03 18:05:41 +0000"
*
* ISO 8601:
* "2003-01-20T18:05:41+04:00"
*
* Unix:
* 1043082341
*/
var $date;
/**
* Any additional elements to include as an assiciated array. All $key => $value pairs
* will be included unencoded in the feed item in the form
* <$key>$value</$key>
* Again: No encoding will be used! This means you can invalidate or enhance the feed
* if $value contains markup. This may be abused to embed tags not implemented by
* the FeedCreator class used.
*/
var $additionalElements = Array();
 
// on hold
// var $source;
 
# }}}
}
 
 
 
/**
* An FeedImage may be added to a FeedCreator feed.
* @author Kai Blankenhorn <kaib@bitfolge.de>
* @since 1.3
*/
class FeedImage {
# {{{ Properties
 
/**
* Mandatory attributes of an image.
*/
var $title, $url, $link;
/**
* Optional attributes of an image.
*/
var $width, $height, $description;
 
# }}}
}
 
 
/**
* UniversalFeedCreator lets you choose during runtime which
* format to build.
* For general usage of a feed class, see the FeedCreator class
* below or the example above.
*
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class UniversalFeedCreator extends FeedCreator {
var $_feed;
# {{{ _setFormat
function _setFormat($format) {
switch (strtoupper($format)) {
case "2.0":
// fall through
case "RSS2.0":
$this->_feed = new RSSCreator20();
break;
case "1.0":
// fall through
case "RSS1.0":
$this->_feed = new RSSCreator10();
break;
case "0.91":
// fall through
case "RSS0.91":
$this->_feed = new RSSCreator091();
break;
case "PIE0.1":
$this->_feed = new PIECreator01();
break;
case "MBOX":
$this->_feed = new MBOXCreator();
break;
case "OPML":
$this->_feed = new OPMLCreator();
break;
case "ATOM0.3":
$this->_feed = new AtomCreator03();
break;
default:
$this->_feed = new RSSCreator091();
break;
}
$vars = get_object_vars($this);
foreach ($vars as $key => $value) {
if ($key!="feed") {
$this->_feed->{$key} = $this->{$key};
}
}
}
# }}}
# {{{ createFeed
/**
* Creates a syndication feed based on the items previously added.
*
* @see FeedCreator::addItem()
* @param string format format the feed should comply to. Valid values are:
* "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML".
* @return string the contents of the feed.
*/
function createFeed($format = "RSS0.91") {
$this->_setFormat($format);
return $this->_feed->createFeed();
}
# }}}
 
# {{{ saveFeed
/**
* Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect
* header may be sent to redirect the use to the newly created file.
* @since 1.4
*
* @param string format format the feed should comply to. Valid values are:
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
* @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
* @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.
*/
function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {
$this->_setFormat($format);
$this->_feed->saveFeed($filename, $displayContents);
}
# }}}
 
}
 
 
/**
* FeedCreator is the abstract base implementation for concrete
* implementations that implement a specific format of syndication.
*
* @abstract
* @author Kai Blankenhorn <kaib@bitfolge.de>
* @since 1.4
*/
class FeedCreator {
# {{{ Properties
 
/**
* Mandatory attributes of a feed.
*/
var $title, $description, $link;
 
 
/**
* Optional attributes of a feed.
*/
var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;
 
 
/**
* @access private
*/
var $items = Array();
 
 
/**
* This feed's MIME content type.
* @since 1.4
* @access private
*/
var $contentType = "text/xml";
 
 
/**
* Any additional elements to include as an assiciated array. All $key => $value pairs
* will be included unencoded in the feed in the form
* <$key>$value</$key>
* Again: No encoding will be used! This means you can invalidate or enhance the feed
* if $value contains markup. This may be abused to embed tags not implemented by
* the FeedCreator class used.
*/
var $additionalElements = Array();
 
# }}}
# {{{ addItem
/**
* Adds an FeedItem to the feed.
*
* @param object FeedItem $item The FeedItem to add to the feed.
* @access public
*/
function addItem($item) {
$this->items[] = $item;
}
# }}}
 
# {{{ iTrunc
/**
* Truncates a string to a certain length at the most sensible point.
* First, if there's a '.' character near the end of the string, the string is truncated after this character.
* If there is no '.', the string is truncated after the last ' ' character.
* If the string is truncated, " ..." is appended.
* If the string is already shorter than $length, it is returned unchanged.
*
* @static
* @param string string A string to be truncated.
* @param int length the maximum length the string should be truncated to
* @return string the truncated string
*/
function iTrunc($string, $length) {
if (strlen($string)<=$length) {
return $string;
}
$pos = strrpos($string,".");
if ($pos>=$length-4) {
$string = substr($string,0,$length-4);
$pos = strrpos($string,".");
}
if ($pos>=$length*0.4) {
return substr($string,0,$pos+1)." ...";
}
$pos = strrpos($string," ");
if ($pos>=$length-4) {
$string = substr($string,0,$length-4);
$pos = strrpos($string," ");
}
if ($pos>=$length*0.4) {
return substr($string,0,$pos)." ...";
}
return substr($string,0,$length-4)." ...";
}
# }}}
 
# {{{ _createGeneratorComment
/**
* Creates a comment indicating the generator of this feed.
* The format of this comment seems to be recognized by
* Syndic8.com.
*/
function _createGeneratorComment() {
return "<!-- generator=\"".FEEDCREATOR_VERSION."\" -->\n";
}
# }}}
 
# {{{ _createAdditionalElements
/**
* Creates a string containing all additional elements specified in
* $additionalElements.
* @param elements array an associative array containing key => value pairs
* @param indentString string a string that will be inserted before every generated line
* @return string the XML tags corresponding to $additionalElements
*/
function _createAdditionalElements($elements, $indentString="") {
$ae = "";
if (is_array($elements)) {
foreach($elements AS $key => $value) {
$ae.= $indentString."<$key>$value</$key>\n";
}
}
return $ae;
}
# }}}
 
# {{{ createFeed
/**
* Builds the feed's text.
* @abstract
* @return string the feed's complete text
*/
function createFeed() {
}
# }}}
 
# {{{ _generateFilename
/**
* Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml.
* For example:
*
* echo $_SERVER["PHP_SELF"]."\n";
* echo FeedCreator::_generateFilename();
*
* would produce:
*
* /rss/latestnews.php
* latestnews.xml
*
* @return string the feed cache filename
* @since 1.4
* @access private
*/
function _generateFilename() {
$fileInfo = pathinfo($_SERVER["PHP_SELF"]);
return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";
}
# }}}
 
# {{{ _redirect
/**
* @since 1.4
* @access private
*/
function _redirect($filename) {
// attention, heavily-commented-out-area
// maybe use this in addition to file time checking
//Header("Expires: ".date("r",time()+$this->_timeout));
/* no caching at all, doesn't seem to work as good:
Header("Cache-Control: no-cache");
Header("Pragma: no-cache");
*/
// HTTP redirect, some feed readers' simple HTTP implementations don't follow it
//Header("Location: ".$filename);
 
Header("Content-Type: ".$this->contentType."; filename=".basename($filename));
Header("Content-Disposition: inline; filename=".basename($filename));
readfile($filename, "r");
die();
}
# }}}
 
# {{{ useCached
/**
* Turns on caching and checks if there is a recent version of this feed in the cache.
* If there is, an HTTP redirect header is sent.
* To effectively use caching, you should create the FeedCreator object and call this method
* before anything else, especially before you do the time consuming task to build the feed
* (web fetching, for example).
* @since 1.4
* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
* @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
*/
function useCached($filename="", $timeout=3600) {
$this->_timeout = $timeout;
if ($filename=="") {
$filename = $this->_generateFilename();
}
if (file_exists($filename) AND (time()-filemtime($filename) < $timeout)) {
$this->_redirect($filename);
}
}
# }}}
 
# {{{ saveFeed
/**
* Saves this feed as a file on the local disk. After the file is saved, a redirect
* header may be sent to redirect the user to the newly created file.
* @since 1.4
*
* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
* @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.
*/
function saveFeed($filename="", $displayContents=true) {
if ($filename=="") {
$filename = $this->_generateFilename();
}
$feedFile = fopen($filename, "w+");
if ($feedFile) {
fputs($feedFile,$this->createFeed());
fclose($feedFile);
if ($displayContents) {
$this->_redirect($filename);
}
} else {
echo "<br /><b>Error creating feed file, please check write permissions.</b><br />";
}
}
# }}}
}
 
 
/**
* FeedDate is an internal class that stores a date for a feed or feed item.
* Usually, you won't need to use this.
*/
class FeedDate {
var $unix;
 
# {{{ __construct
/**
* Creates a new instance of FeedDate representing a given date.
* Accepts RFC 822, ISO 8601 date formats as well as unix time stamps.
* @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used.
*/
function FeedDate($dateString="") {
if ($dateString=="") $dateString = date("r");
if (is_integer($dateString)) {
$this->unix = $dateString;
return;
}
if (preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)) {
$months = Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);
$this->unix = mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]);
if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
$tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
} else {
if (strlen($matches[7])==1) {
$oneHour = 3600;
$ord = ord($matches[7]);
if ($ord < ord("M")) {
$tzOffset = (ord("A") - $ord - 1) * $oneHour;
} elseif ($ord >= ord("M") AND $matches[7]!="Z") {
$tzOffset = ($ord - ord("M")) * $oneHour;
} elseif ($matches[7]=="Z") {
$tzOffset = 0;
}
}
switch ($matches[7]) {
case "UT":
case "GMT": $tzOffset = 0;
}
}
$this->unix += $tzOffset;
return;
}
if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)) {
$this->unix = mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);
if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
$tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
} else {
if ($matches[7]=="Z") {
$tzOffset = 0;
}
}
$this->unix += $tzOffset;
return;
}
$this->unix = 0;
}
# }}}
 
# {{{ rfc822
/**
* Gets the date stored in this FeedDate as an RFC 822 date.
*
* @return a date in RFC 822 format
*/
function rfc822() {
return gmdate("r",$this->unix);
}
# }}}
 
# {{{ iso8601
/**
* Gets the date stored in this FeedDate as an ISO 8601 date.
*
* @return a date in ISO 8601 format
*/
function iso8601() {
$date = gmdate("Y-m-d\TH:i:sO",$this->unix);
$date = substr($date,0,22) . ':' . substr($date,-2);
return $date;
}
# }}}
 
# {{{ unix
/**
* Gets the date stored in this FeedDate as unix time stamp.
*
* @return a date as a unix time stamp
*/
function unix() {
return $this->unix;
}
# }}}
}
 
 
/**
* RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0.
*
* @see http://www.purl.org/rss/1.0/
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class RSSCreator10 extends FeedCreator {
 
# {{{ createFeed
/**
* Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
* The feed will contain all items previously added in the same order.
* @return string the feed's complete text
*/
function createFeed() {
global $config;
$feed = "<?xml version=\"1.0\" encoding=\"".$config->outputEnc."\"?>\n";
$feed.= "<?xml-stylesheet href=\"http://www.w3.org/2000/08/w3c-synd/style.css\" type=\"text/css\"?>\n";
$feed.= $this->_createGeneratorComment();
$feed.= "<rdf:RDF\n";
$feed.= " xmlns=\"http://purl.org/rss/1.0/\"\n";
$feed.= " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
$feed.= " xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
$feed.= " <channel rdf:about=\"".htmlspecialchars($this->syndicationURL)."\">\n";
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
$feed.= " <description>".htmlspecialchars($this->description)."</description>\n";
$feed.= " <link>".htmlspecialchars($this->link)."</link>\n";
if ($this->image!=null) {
$feed.= " <image rdf:resource=\"".$this->image->url."\" />\n";
}
$now = new FeedDate();
$feed.= " <dc:date>".htmlspecialchars($now->iso8601())."</dc:date>\n";
$feed.= " <items>\n";
$feed.= " <rdf:Seq>\n";
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <rdf:li rdf:resource=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
}
$feed.= " </rdf:Seq>\n";
$feed.= " </items>\n";
$feed.= " </channel>\n";
if ($this->image!=null) {
$feed.= " <image rdf:about=\"".$this->image->url."\">\n";
$feed.= " <title>".$this->image->title."</title>\n";
$feed.= " <link>".$this->image->link."</link>\n";
$feed.= " <url>".$this->image->url."</url>\n";
$feed.= " </image>\n";
}
//$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <item rdf:about=\"".htmlspecialchars($this->items[$i]->link)."\">\n";
//$feed.= " <dc:type>Posting</dc:type>\n";
$feed.= " <dc:format>text/html</dc:format>\n";
if ($this->items[$i]->date!=null) {
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <dc:date>".htmlspecialchars($itemDate->iso8601())."</dc:date>\n";
}
if ($this->items[$i]->source!="") {
$feed.= " <dc:source>".htmlspecialchars($this->items[$i]->source)."</dc:source>\n";
}
if ($this->items[$i]->author!="") {
$feed.= " <dc:creator>".htmlspecialchars($this->items[$i]->author)."</dc:creator>\n";
}
$feed.= " <title>".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."</title>\n";
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
$feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n";
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
$feed.= " </item>\n";
}
$feed.= "</rdf:RDF>\n";
return $feed;
}
# }}}
}
 
 
 
/**
* RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3.
*
* @see http://my.netscape.com/publish/formats/rss-spec-0.91.html
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class RSSCreator091 extends FeedCreator {
 
/**
* Stores this RSS feed's version number.
* @access private
*/
var $RSSVersion;
 
# {{{ __construct
function RSSCreator091() {
$this->_setRSSVersion("0.91");
$this->contentType = "application/rss+xml";
}
# }}}
 
# {{{ _setRSSVersion
/**
* Sets this RSS feed's version number.
* @access private
*/
function _setRSSVersion($version) {
$this->RSSVersion = $version;
}
# }}}
 
# {{{ createFeed
/**
* Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
* The feed will contain all items previously added in the same order.
* @return string the feed's complete text
*/
function createFeed() {
global $config;
$feed = "<?xml version=\"1.0\" encoding=\"".$config->outputEnc."\"?>\n";
$feed.= $this->_createGeneratorComment();
$feed.= "<rss version=\"".$this->RSSVersion."\">\n";
$feed.= " <channel>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
$feed.= " <description>".FeedCreator::iTrunc(htmlspecialchars($this->description),500)."</description>\n";
$feed.= " <link>".htmlspecialchars($this->link)."</link>\n";
$now = new FeedDate();
$feed.= " <lastBuildDate>".htmlspecialchars($now->rfc822())."</lastBuildDate>\n";
$feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
 
if ($this->image!=null) {
$feed.= " <image>\n";
$feed.= " <url>".$this->image->url."</url>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."</title>\n";
$feed.= " <link>".$this->image->link."</link>\n";
if ($this->image->width!="") {
$feed.= " <width>".$this->image->width."</width>\n";
}
if ($this->image->height!="") {
$feed.= " <height>".$this->image->height."</height>\n";
}
if ($this->image->description!="") {
$feed.= " <description>".htmlspecialchars($this->image->description)."</description>\n";
}
$feed.= " </image>\n";
}
if ($this->language!="") {
$feed.= " <language>".$this->language."</language>\n";
}
if ($this->copyright!="") {
$feed.= " <copyright>".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."</copyright>\n";
}
if ($this->editor!="") {
$feed.= " <managingEditor>".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."</managingEditor>\n";
}
if ($this->webmaster!="") {
$feed.= " <webMaster>".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."</webMaster>\n";
}
if ($this->pubDate!="") {
$pubDate = new FeedDate($this->pubDate);
$feed.= " <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n";
}
if ($this->category!="") {
$feed.= " <category>".htmlspecialchars($this->category)."</category>\n";
}
if ($this->docs!="") {
$feed.= " <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."</docs>\n";
}
if ($this->ttl!="") {
$feed.= " <ttl>".htmlspecialchars($this->ttl)."</ttl>\n";
}
if ($this->rating!="") {
$feed.= " <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."</rating>\n";
}
if ($this->skipHours!="") {
$feed.= " <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n";
}
if ($this->skipDays!="") {
$feed.= " <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n";
}
$feed.= $this->_createAdditionalElements($this->additionalElements, " ");
 
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <item>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
$feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n";
if ($this->items[$i]->author!="") {
$feed.= " <author>".htmlspecialchars($this->items[$i]->author)."</author>\n";
}
/*
// on hold
if ($this->items[$i]->source!="") {
$feed.= " <source>".htmlspecialchars($this->items[$i]->source)."</source>\n";
}
*/
if ($this->items[$i]->category!="") {
$feed.= " <category>".htmlspecialchars($this->items[$i]->category)."</category>\n";
}
if ($this->items[$i]->comments!="") {
$feed.= " <comments>".$this->items[$i]->comments."</comments>\n";
}
if ($this->items[$i]->date!="") {
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n";
}
if ($this->items[$i]->guid!="") {
$feed.= " <guid>".$this->items[$i]->guid."</guid>\n";
}
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
$feed.= " </item>\n";
}
$feed.= " </channel>\n";
$feed.= "</rss>\n";
return $feed;
}
# }}}
}
 
 
 
/**
* RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0.
*
* @see http://backend.userland.com/rss
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class RSSCreator20 extends RSSCreator091 {
 
# {{{ __construct
function RSSCreator20() {
parent::_setRSSVersion("2.0");
}
# }}}
 
}
 
 
/**
* PIECreator01 is a FeedCreator that implements the emerging PIE specification,
* as in http://intertwingly.net/wiki/pie/Syntax.
*
* @deprecated
* @since 1.3
* @author Scott Reynen <scott@randomchaos.com> and Kai Blankenhorn <kaib@bitfolge.de>
*/
class PIECreator01 extends FeedCreator {
 
# {{{ createFeed
function createFeed() {
$feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
$feed.= " <subtitle>".FeedCreator::iTrunc(htmlspecialchars($this->description),500)."</subtitle>\n";
$feed.= " <link>".$this->link."</link>\n";
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <entry>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
$feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
$feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
$feed.= " <id>".$this->items[$i]->guid."</id>\n";
if ($this->items[$i]->author!="") {
$feed.= " <author>\n";
$feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
if ($this->items[$i]->authorEmail!="") {
$feed.= " <email>".$this->items[$i]->authorEmail."</email>\n";
}
$feed.=" </author>\n";
}
$feed.= " <content type=\"text/html\" xml:lang=\"en-us\">\n";
$feed.= " <div xmlns=\"http://www.w3.org/1999/xhtml\">".$this->items[$i]->description."</div>\n";
$feed.= " </content>\n";
$feed.= " </entry>\n";
}
$feed.= "</feed>\n";
return $feed;
}
# }}}
}
 
 
/**
* AtomCreator03 is a FeedCreator that implements the atom specification,
* as in http://www.intertwingly.net/wiki/pie/FrontPage.
* Please note that just by using AtomCreator03 you won't automatically
* produce valid atom files. For example, you have to specify either an editor
* for the feed or an author for every single feed item.
*
* Some elements have not been implemented yet. These are (incomplete list):
* author URL, item author's email and URL, item contents, alternate links,
* other link content types than text/html. Some of them may be created with
* AtomCreator03::additionalElements.
*
* @see FeedCreator#additionalElements
* @since 1.6
* @author Kai Blankenhorn <kaib@bitfolge.de>, Scott Reynen <scott@randomchaos.com>
*/
class AtomCreator03 extends FeedCreator {
 
# {{{ __construct
function AtomCreator03() {
$this->contentType = "application/atom+xml";
}
# }}}
 
# {{{ createFeed
function createFeed() {
$feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$feed.= $this->_createGeneratorComment();
$feed.= "<feed version=\"0.3\" xmlns=\"http://purl.org/atom/ns#\"";
if ($this->language!="") {
$feed.= " xml:lang:\"".$this->language."\"";
}
$feed.= ">\n";
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
$feed.= " <tagline>".htmlspecialchars($this->description)."</tagline>\n";
$feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n";
$feed.= " <id>".$this->link."</id>\n";
$now = new FeedDate();
$feed.= " <modified>".htmlspecialchars($now->iso8601())."</modified>\n";
if ($this->editor!="") {
$feed.= " <author>\n";
$feed.= " <name>".$this->editor."</name>\n";
if ($this->editorEmail!="") {
$feed.= " <email>".$this->editorEmail."</email>\n";
}
$feed.= " </author>\n";
}
$feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
$feed.= $this->_createAdditionalElements($this->additionalElements, " ");
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <entry>\n";
$feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n";
$feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
if ($this->items[$i]->date=="") {
$this->items[$i]->date = time();
}
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
$feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
$feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
$feed.= " <id>".$this->items[$i]->link."</id>\n";
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
if ($this->items[$i]->author!="") {
$feed.= " <author>\n";
$feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
$feed.= " </author>\n";
}
if ($this->items[$i]->description!="") {
$feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n";
}
$feed.= " </entry>\n";
}
$feed.= "</feed>\n";
return $feed;
}
# }}}
}
 
 
/**
* MBOXCreator is a FeedCreator that implements the mbox format
* as described in http://www.qmail.org/man/man5/mbox.html
*
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class MBOXCreator extends FeedCreator {
 
# {{{ __construct
function MBOXCreator() {
$this->contentType = "text/plain";
}
# }}}
 
# {{{ qp_enc
function qp_enc($input = "", $line_max = 76) {
$hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
$lines = preg_split("/(?:\r\n|\r|\n)/", $input);
$eol = "\r\n";
$escape = "=";
$output = "";
while( list(, $line) = each($lines) ) {
//$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
$linlen = strlen($line);
$newline = "";
for($i = 0; $i < $linlen; $i++) {
$c = substr($line, $i, 1);
$dec = ord($c);
if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only
$c = "=20";
} elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required
$h2 = floor($dec/16); $h1 = floor($dec%16);
$c = $escape.$hex["$h2"].$hex["$h1"];
}
if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
$output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
$newline = "";
}
$newline .= $c;
} // end of for
$output .= $newline.$eol;
}
return trim($output);
}
# }}}
 
# {{{ createFeed
/**
* Builds the MBOX contents.
* @return string the feed's complete text
*/
function createFeed() {
global $config;
for ($i=0;$i<count($this->items);$i++) {
if ($this->items[$i]->author!="") {
$from = $this->items[$i]->author;
} else {
$from = $this->title;
}
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= "From ".strtr(MBOXCreator::qp_enc($from)," ","_")." ".date("D M d H:i:s Y",$itemDate->unix())."\n";
$feed.= "Content-Type: text/plain;\n";
$feed.= " charset=\"".$config->outputEnc."\"\n";
$feed.= "Content-Transfer-Encoding: quoted-printable\n";
$feed.= "Content-Type: text/plain\n";
$feed.= "From: \"".MBOXCreator::qp_enc($from)."\"\n";
$feed.= "Date: ".$itemDate->rfc822()."\n";
$feed.= "Subject: ".MBOXCreator::qp_enc(FeedCreator::iTrunc($this->items[$i]->title,100))."\n";
$feed.= "\n";
$body = chunk_split(MBOXCreator::qp_enc($this->items[$i]->description));
$feed.= preg_replace("~\nFrom ([^\n]*)(\n?)~","\n>From $1$2\n",$body);
$feed.= "\n";
$feed.= "\n";
}
return $feed;
}
# }}}
 
# {{{ _generateFilename
/**
* Generate a filename for the feed cache file. Overridden from FeedCreator to prevent XML data types.
* @return string the feed cache filename
* @since 1.4
* @access private
*/
function _generateFilename() {
$fileInfo = pathinfo($_SERVER["PHP_SELF"]);
return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".mbox";
}
# }}}
}
 
 
/**
* OPMLCreator is a FeedCreator that implements OPML 1.0.
*
* @see http://opml.scripting.com/spec
* @author Dirk Clemens, Kai Blankenhorn
* @since 1.5
*/
class OPMLCreator extends FeedCreator {
# {{{ createFeed
function createFeed() {
$feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$feed.= $this->_createGeneratorComment();
$feed.= "<opml xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n";
$feed.= " <head>\n";
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
if ($this->pubDate!="") {
$date = new FeedDate($this->pubDate);
$feed.= " <dateCreated>".$date->rfc822()."</dateCreated>\n";
}
if ($this->lastBuildDate!="") {
$date = new FeedDate($this->lastBuildDate);
$feed.= " <dateModified>".$date->rfc822()."</dateModified>\n";
}
if ($this->editor!="") {
$feed.= " <ownerName>".$this->editor."</ownerName>\n";
}
if ($this->editorEmail!="") {
$feed.= " <ownerEmail>".$this->editorEmail."</ownerEmail>\n";
}
$feed.= " </head>\n";
$feed.= " <body>\n";
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <outline type=\"rss\" ";
$title = htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")));
$feed.= " title=\"".$title."\"";
$feed.= " text=\"".$title."\"";
//$feed.= " description=\"".htmlspecialchars($this->items[$i]->description)."\"";
$feed.= " url=\"".htmlspecialchars($this->items[$i]->link)."\"";
$feed.= "/>\n";
}
$feed.= " </body>\n";
$feed.= "</opml>\n";
return $feed;
}
# }}}
}
 
?>
/WebSVN/include/php5compat.inc
0,0 → 1,26
<?php
 
if (version_compare(phpversion(), '5.0.0', 'lt')) {
 
// Configure necessary functions here
$funcs = array(
'stripos',
'http_build_query',
);
 
// End configuration
 
// JB: PHP_Compat expects to be able to find functions by including
// 'PHP/Compat/Functions/functionname.php', but that hardcoded path
// isn't relative to the standard include path '.' (it's instead relative
// to './include'). So rather than hack PHP_Compat to work, just add
// './include' to our include path.
ini_set("include_path", ini_get("include_path").$config->pathSeparator."./include");
 
foreach ($funcs as $fn) {
if (PHP_Compat::loadFunction($fn) != true)
error_log('Could not load function `'.$fn.'\' as required by PHP Compat.');
}
 
}
?>
/WebSVN/include/svnlook.inc
0,0 → 1,769
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// svn-look.inc
//
// Svn bindings
//
// These binding currently use the svn command line to achieve their goal. Once a proper
// SWIG binding has been produced for PHP, there'll be an option to use that instead.
 
require_once("include/utils.inc");
 
// {{{ Classes for retaining log information ---
 
$debugxml = false;
 
Class SVNMod
{
var $action = '';
var $copyfrom = '';
var $copyrev = '';
var $path = '';
}
 
Class SVNLogEntry
{
var $rev = 1;
var $author = '';
var $date = '';
var $committime;
var $age = '';
var $msg = '';
var $path = '';
var $mods;
var $curMod;
}
 
Class SVNLog
{
var $entries; // Array of entries
var $curEntry; // Current entry
var $path = ''; // Temporary variable used to trace path history
// findEntry
//
// Return the entry for a given revision
function findEntry($rev)
{
foreach ($this->entries as $index => $entry)
{
if ($entry->rev == $rev)
return $index;
 
}
}
}
 
// }}}
 
// {{{ XML parsing functions---
 
$curLog = 0;
$curTag = '';
 
// {{{ startElement
 
function startElement($parser, $name, $attrs)
{
global $curLog, $curTag, $debugxml;
 
switch ($name)
{
case "LOGENTRY":
if ($debugxml) print "Creating new log entry\n";
$curLog->curEntry = new SVNLogEntry;
$curLog->curEntry->mods = array();
$curLog->curEntry->path = $curLog->path;
if (sizeof($attrs))
{
while (list($k, $v) = each($attrs))
{
switch ($k)
{
case "REVISION":
if ($debugxml) print "Revision $v\n";
$curLog->curEntry->rev = $v;
break;
}
}
}
break;
case "PATH":
if ($debugxml) print "Creating new path\n";
$curLog->curEntry->curMod = new SVNMod;
if (sizeof($attrs))
{
while (list($k, $v) = each($attrs))
{
switch ($k)
{
case "ACTION":
if ($debugxml) print "Action $v\n";
$curLog->curEntry->curMod->action = $v;
break;
 
case "COPYFROM-PATH":
if ($debugxml) print "Copy from: $v\n";
$curLog->curEntry->curMod->copyfrom = $v;
break;
 
case "COPYFROM-REV":
$curLog->curEntry->curMod->copyrev = $v;
break;
}
}
}
$curTag = $name;
break;
default:
$curTag = $name;
break;
}
}
 
// }}}
 
// {{{ endElement
 
function endElement($parser, $name)
{
global $curLog, $debugxml, $curTag;
 
switch ($name)
{
case "LOGENTRY":
if ($debugxml) print "Ending new log entry\n";
$curLog->entries[] = $curLog->curEntry;
break;
 
case "PATH":
if ($debugxml) print "Ending path\n";
$curLog->curEntry->mods[] = $curLog->curEntry->curMod;
break;
 
case "MSG":
$curLog->curEntry->msg = trim($curLog->curEntry->msg);
if ($debugxml) print "Completed msg = '".$curLog->curEntry->msg."'\n";
break;
}
$curTag = "";
}
 
// }}}
 
// {{{ characterData
 
function characterData($parser, $data)
{
global $curLog, $curTag, $lang, $debugxml;
 
switch ($curTag)
{
case "AUTHOR":
if ($debugxml) print "Author: $data\n";
if (empty($data)) return;
$curLog->curEntry->author .= htmlentities($data, ENT_COMPAT, "UTF-8");
break;
 
case "DATE":
if ($debugxml) print "Date: $data\n";
$data = trim($data);
if (empty($data)) return;
sscanf($data, "%d-%d-%dT%d:%d:%d.", $y, $mo, $d, $h, $m, $s);
$mo = substr("00".$mo, -2);
$d = substr("00".$d, -2);
$h = substr("00".$h, -2);
$m = substr("00".$m, -2);
$s = substr("00".$s, -2);
$curLog->curEntry->date = "$y-$mo-$d $h:$m:$s GMT";
$committime = strtotime($curLog->curEntry->date);
$curLog->curEntry->committime = $committime;
$curtime = time();
// Get the number of seconds since the commit
$agesecs = $curtime - $committime;
if ($agesecs < 0) $agesecs = 0;
$curLog->curEntry->age = datetimeFormatDuration($agesecs, true, true);
break;
 
case "MSG":
if ($debugxml) print "Msg: '$data'\n";
$curLog->curEntry->msg .= htmlentities($data, ENT_COMPAT, "UTF-8");
break;
case "PATH":
if ($debugxml) print "Path name: '$data'\n";
$data = trim($data);
if (empty($data)) return;
 
$curLog->curEntry->curMod->path .= $data;
// The XML returned when a file is renamed/branched in inconsistant. In the case
// of a branch, the path information doesn't include the leafname. In the case of
// a rename, it does. Ludicrous.
if (!empty($curLog->path))
{
$pos = strrpos($curLog->path, "/");
$curpath = substr($curLog->path, 0, $pos);
$leafname = substr($curLog->path, $pos + 1);
}
else
{
$curpath = "";
$leafname = "";
}
if ($curLog->curEntry->curMod->action == "A")
{
if ($debugxml) print "Examining added path '".$curLog->curEntry->curMod->copyfrom."' - Current path = '$curpath', leafname = '$leafname'\n";
if ($data == $curLog->path) // For directories and renames
{
if ($debugxml) print "New path for comparison: '".$curLog->curEntry->curMod->copyfrom."'\n";
$curLog->path = $curLog->curEntry->curMod->copyfrom;
}
else if ($data == $curpath || $data == $curpath."/") // Logs of files that have moved due to branching
{
if ($debugxml) print "New path for comparison: '".$curLog->curEntry->curMod->copyfrom."/$leafname'\n";
$curLog->path = $curLog->curEntry->curMod->copyfrom."/$leafname";
}
}
break;
}
}
 
// }}}
 
// }}}
 
// Function returns true if the give entry in a directory tree is at the top level
 
function _topLevel($entry)
{
// To be at top level, there must be one space before the entry
return (strlen($entry) > 1 && $entry{0} == " " && $entry{1} != " ");
}
 
// Function to sort two given directory entries. Directories go at the top
 
function _dirSort($e1, $e2)
{
$isDir1 = $e1{strlen($e1) - 1} == "/";
$isDir2 = $e2{strlen($e2) - 1} == "/";
if ($isDir1 && !$isDir2) return -1;
if ($isDir2 && !$isDir1) return 1;
return strnatcasecmp($e1, $e2);
}
 
// Return the revision string to pass to a command
 
function _revStr($rev)
{
if ($rev > 0)
return "-r $rev";
else
return "";
}
 
// {{{ encodePath
 
// Function to encode a URL without encoding the /'s
 
function encodePath($uri)
{
global $config;
 
$uri = str_replace(DIRECTORY_SEPARATOR, "/", $uri);
 
$parts = explode('/', $uri);
for ($i = 0; $i < count($parts); $i++)
{
if ( function_exists("mb_detect_encoding") && function_exists("mb_convert_encoding"))
{
$parts[$i] = mb_convert_encoding($parts[$i], "UTF-8", mb_detect_encoding($parts[$i]));
}
$parts[$i] = rawurlencode($parts[$i]);
}
$uri = implode('/', $parts);
// Quick hack. Subversion seems to have a bug surrounding the use of %3A instead of :
$uri = str_replace("%3A" ,":", $uri);
// Correct for Window share names
if ( $config->serverIsWindows==true )
{
if ( substr($uri, 0,2)=="//" )
$uri="\\".substr($uri, 2, strlen($uri));
}
 
return $uri;
}
 
// }}}
 
// The SVNRepository Class
 
Class SVNRepository
{
var $repConfig;
function SVNRepository($repConfig)
{
$this->repConfig = $repConfig;
}
// {{{ dirContents
 
function dirContents($path, $rev = 0)
{
global $config, $locwebsvnreal;
$revstr = _revStr($rev);
$tree = array();
if ($rev == 0)
{
$headlog = $this->getLog("/", "", "", true, 1);
$rev = $headlog->entries[0]->rev;
}
$path = encodepath($this->repConfig->path.$path);
$output = runCommand($config->svn." list $revstr ".$this->repConfig->svnParams().quote($path), true);
foreach ($output as $entry)
{
if ($entry != "")
$tree[] = $entry;
}
// Sort the entries into alphabetical order with the directories at the top of the list
usort($tree, "_dirSort");
return $tree;
}
 
// }}}
// {{{ highlightLine
//
// Distill line-spanning syntax highlighting so that each line can stand alone
// (when invoking on the first line, $attributes should be an empty array)
// Invoked to make sure all open syntax highlighting tags (<font>, <i>, <b>, etc.)
// are closed at the end of each line and re-opened on the next line
function highlightLine($line, &$attributes)
{
$hline = "";
// Apply any highlighting in effect from the previous line
foreach($attributes as $attr)
{
$hline.=$attr['text'];
}
 
// append the new line
$hline.=$line;
 
// update attributes
for ($line = strstr($line, "<"); $line; $line = strstr(substr($line,1), "<"))
{
// if this closes a tag, remove most recent corresponding opener
if (substr($line,1,1) == "/")
{
$tagNamLen = strcspn($line, "> \t", 2);
$tagNam = substr($line,2,$tagNamLen);
foreach(array_reverse(array_keys($attributes)) as $k)
{
if ($attributes[$k]['tag'] == $tagNam)
{
unset($attributes[$k]);
break;
}
}
}
else
// if this opens a tag, add it to the list
{
$tagNamLen = strcspn($line, "> \t", 1);
$tagNam = substr($line,1,$tagNamLen);
$tagLen = strcspn($line, ">") + 1;
$attributes[] = array('tag' => $tagNam, 'text' => substr($line,0,$tagLen));
}
}
 
// close any still-open tags
foreach(array_reverse($attributes) as $attr)
{
$hline.="</".$attr['tag'].">";
}
 
return($hline);
}
 
// }}}
 
// {{{ getFileContents
//
// Dump the content of a file to the given filename
function getFileContents($path, $filename, $rev = 0, $pipe = "", $perLineHighlighting = false)
{
global $config, $extEnscript;
$revstr = _revStr($rev);
// If there's no filename, we'll just deliver the contents as it is to the user
if ($filename == "")
{
$path = encodepath($this->repConfig->path.$path);
passthru(quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." $pipe", false));
return;
}
// Get the file contents info
$ext = strrchr($path, ".");
$l = @$extEnscript[$ext];
if ($l == "php")
{
// Output the file to the filename
$path = encodepath($this->repConfig->path.$path);
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." > $filename", false);
@exec($cmd);
// Get the file as a string (memory hogging, but we have no other options)
$content = highlight_file($filename, true);
// Destroy the previous version, and replace it with the highlighted version
$f = fopen($filename, "w");
if ($f)
{
// The highlight file function doesn't deal with line endings very nicely at all. We'll have to do it
// by hand.
// Remove the first line generated by highlight()
$pos = strpos($content, "\n");
$content = substr($content, $pos+1);
$content = explode("<br />", $content);
if ($perLineHighlighting)
{
// If we need each line independently highlighted (e.g. for diff or blame)
// hen we'll need to filter the output of the highlighter
// to make sure tags like <font>, <i> or <b> don't span lines
// $attributes is used to remember what highlighting attributes
// are in effect from one line to the next
$attributes = array(); // start with no attributes in effect
foreach ($content as $line)
{
fputs($f, $this->highlightLine(rtrim($line),$attributes)."\n");
}
}
else
{
foreach ($content as $line)
{
fputs($f, rtrim($line)."\n");
}
}
 
fclose($f);
}
}
else
{
if ($config->useEnscript)
{
// Get the files, feed it through enscript, then remove the enscript headers using sed
//
// Note that the sec command returns only the part of the file between <PRE> and </PRE>.
// It's complicated because it's designed not to return those lines themselves.
$path = encodepath($this->repConfig->path.$path);
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." | ".
$config->enscript." --language=html ".
($l ? "--color --pretty-print=$l" : "")." -o - | ".
$config->sed." -n ".$config->quote."1,/^<PRE.$/!{/^<\\/PRE.$/,/^<PRE.$/!p;}".$config->quote." > $filename", false);
@exec($cmd);
}
else
{
$path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repConfig->path.$path));
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." > $filename", false);
@exec($cmd);
}
}
}
 
// }}}
 
// {{{ listFileContents
//
// Print the contents of a file without filling up Apache's memory
function listFileContents($path, $rev = 0)
{
global $config, $extEnscript;
$revstr = _revStr($rev);
$pre = false;
// Get the file contents info
$ext = strrchr($path, ".");
$l = @$extEnscript[$ext];
// Deal with php highlighting internally
if ($l == "php")
{
$tmp = tempnam("temp", "wsvn");
// Output the file to a temporary file
$path = encodepath($this->repConfig->path.$path);
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." > $tmp", false);
@exec($cmd);
highlight_file($tmp);
unlink($tmp);
}
else
{
if ($config->useEnscript)
{
$path = encodepath($this->repConfig->path.$path);
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." | ".
$config->enscript." --language=html ".
($l ? "--color --pretty-print=$l" : "")." -o - | ".
$config->sed." -n ".$config->quote."/^<PRE.$/,/^<\\/PRE.$/p".$config->quote." 2>&1", false);
if (!($result = popen($cmd, "r")))
return;
}
else
{
$path = encodepath($this->repConfig->path.$path);
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." 2>&1", false);
if (!($result = popen($cmd, "r")))
return;
$pre = true;
}
if ($pre)
echo "<PRE>";
while (!feof($result))
{
$line = fgets($result, 1024);
if ($pre) $line = replaceEntities($line, $this->repConfig);
print hardspace($line);
}
if ($pre)
echo "</PRE>";
pclose($result);
}
}
 
// }}}
 
// {{{ getBlameDetails
//
// Dump the blame content of a file to the given filename
function getBlameDetails($path, $filename, $rev = 0)
{
global $config;
$revstr = _revStr($rev);
$path = encodepath($this->repConfig->path.$path);
$cmd = quoteCommand($config->svn." blame $revstr ".$this->repConfig->svnParams().quote($path)." > $filename", false);
@exec($cmd);
}
 
// }}}
 
// {{{ getProperty
 
function getProperty($path, $property, $rev = 0)
{
global $config;
$revstr = _revStr($rev);
$path = encodepath($this->repConfig->path.$path);
$ret = runCommand($config->svn." propget $property $revstr ".$this->repConfig->svnParams().quote($path), true);
// Remove the surplus newline
if (count($ret))
unset($ret[count($ret) - 1]);
return implode("\n", $ret);
}
 
// }}}
 
// {{{ exportDirectory
//
// Exports the directory to the given location
function exportDirectory($path, $filename, $rev = 0)
{
global $config;
$revstr = _revStr($rev);
$path = encodepath($this->repConfig->path.$path);
$cmd = quoteCommand($config->svn." export $revstr ".$this->repConfig->svnParams().quote($path)." ".quote($filename), false);
 
@exec($cmd);
}
 
// }}}
 
// {{{ getLog
function getLog($path, $brev = "", $erev = 1, $quiet = false, $limit = 2)
{
global $config, $curLog, $vars, $lang;
$xml_parser = xml_parser_create("UTF-8");
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
 
// Since directories returned by svn log don't have trailing slashes (:-(), we need to remove
// the trailing slash from the path for comparison purposes
if ($path{strlen($path) - 1} == "/" && $path != "/")
$path = substr($path, 0, -1);
$curLog = new SVNLog;
$curLog->entries = array();
$curLog->path = $path;
$revStr = "";
if ($brev && $erev)
$revStr = "-r$brev:$erev";
else if ($brev)
$revStr = "-r$brev:1";
 
if (($config->subversionMajorVersion > 1 || $config->subversionMinorVersion >=2) && $limit != 0)
$revStr .= " --limit $limit";
// Get the log info
$path = encodepath($this->repConfig->path.$path);
$info = "--verbose";
if ($quiet)
$info = "--quiet";
$cmd = quoteCommand($config->svn." log --xml $info $revStr ".$this->repConfig->svnParams().quote($path), false);
 
if ($handle = popen($cmd, "r"))
{
$firstline = true;
while (!feof($handle))
{
$line = fgets($handle);
if (!xml_parse($xml_parser, $line, feof($handle)))
{
if (xml_get_error_code($xml_parser) != 5)
{
die(sprintf("XML error: %s (%d) at line %d column %d byte %d<br>cmd: %s<nr>",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_error_code($xml_parser),
xml_get_current_line_number($xml_parser),
xml_get_current_column_number($xml_parser),
xml_get_current_byte_index($xml_parser),
$cmd));
}
else
{
$vars["error"] = $lang["UNKNOWNREVISION"];
return 0;
}
}
}
pclose($handle);
}
 
xml_parser_free($xml_parser);
return $curLog;
}
 
// }}}
 
}
 
// {{{ initSvnVersion
 
function initSvnVersion(&$major, &$minor)
{
global $config;
$ret = runCommand($config->svn_noparams." --version", false);
 
if (preg_match("~([0-9]?)\.([0-9]?)\.([0-9]?)~",$ret[0],$matches))
{
$major = $matches[1];
$minor = $matches[2];
}
$config->setSubversionMajorVersion($major);
$config->setSubversionMinorVersion($minor);
}
 
// }}}
 
?>
/WebSVN/include/template.inc
0,0 → 1,306
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// templates.inc
//
// Templating system to allow advanced page customisation
 
$ignore = false;
 
// Stack of previous test results
$ignorestack = array();
 
// Number of test levels currently ignored
$ignorelevel = 0;
 
// parseCommand
//
// Parse a special command
 
function parseCommand($line, $vars, $handle)
{
global $ignore, $ignorestack, $ignorelevel;
// Check for test conditions
if (strncmp(trim($line), "[websvn-test:", 13) == 0)
{
if (!$ignore)
{
$line = trim($line);
$var = substr($line, 13, -1);
if (empty($vars[$var]))
{
array_push($ignorestack, $ignore);
$ignore = true;
}
}
else
{
$ignorelevel++;
}
return true;
}
if (strncmp(trim($line), "[websvn-else]", 13) == 0)
{
if ($ignorelevel == 0)
{
$ignore = !$ignore;
}
return true;
}
 
if (strncmp(trim($line), "[websvn-endtest]", 16) == 0)
{
if ($ignorelevel > 0)
{
$ignorelevel--;
}
else
{
$ignore = array_pop($ignorestack);
}
return true;
}
if (strncmp(trim($line), "[websvn-getlisting]", 19) == 0)
{
global $path, $rev, $svnrep;
if (!$ignore)
$svnrep->listFileContents($path, $rev);
return true;
}
if (strncmp(trim($line), "[websvn-defineicons]", 19) == 0)
{
global $icons;
if (!isset($icons))
$icons = array();
// Read all the lines until we reach the end of the definition, storing
// each one...
if (!$ignore)
{
while (!feof($handle))
{
$line = trim(fgets($handle));
if (strncmp($line, "[websvn-enddefineicons]", 22) == 0)
{
return true;
}
$eqsign = strpos($line, "=");
$match = substr($line, 0, $eqsign);
$def = substr($line, $eqsign + 1);
$icons[$match] = $def;
}
}
return true;
}
 
if (strncmp(trim($line), "[websvn-icon]", 13) == 0)
{
global $icons, $vars;
if (!$ignore)
{
// The current filetype should be defined my $vars["filetype"]
if (!empty($icons[$vars["filetype"]]))
{
echo parseTags($icons[$vars["filetype"]], $vars);
}
else if (!empty($icons["*"]))
{
echo parseTags($icons["*"], $vars);
}
}
return true;
}
 
if (strncmp(trim($line), "[websvn-treenode]", 17) == 0)
{
global $icons, $vars;
if (!$ignore)
{
if ((!empty($icons["i-node"])) && (!empty($icons["t-node"])) && (!empty($icons["l-node"])))
{
for ($n = 1; $n < $vars["level"]; $n++)
{
if ($vars["last_i_node"][$n])
{
echo parseTags($icons["e-node"], $vars);
}
else
{
echo parseTags($icons["i-node"], $vars);
}
}
 
if ($vars["level"] != 0)
{
if ($vars["node"] == 0)
{
echo parseTags($icons["t-node"], $vars);
}
else
{
echo parseTags($icons["l-node"], $vars);
$vars["last_i_node"][$vars["level"]] = TRUE;
}
}
}
}
 
return true;
}
return false;
}
 
// parseTemplate
//
// Parse the given template, replacing the variables with the values passed
 
function parseTemplate($template, $vars, $listing)
{
global $ignore, $vars;
if (!is_file($template))
{
print "No template file found ($template)";
exit;
}
 
$handle = fopen($template, "r");
$inListing = false;
$ignore = false;
$listLines = array();
while (!feof($handle))
{
$line = fgets($handle);
// Check for the end of the file list
if ($inListing)
{
if (strcmp(trim($line), "[websvn-endlisting]") == 0)
{
$inListing = false;
 
// For each item in the list
foreach ($listing as $listvars)
{
// Copy the value for this list item into the $vars array
foreach ($listvars as $id => $value)
{
$vars[$id] = $value;
}
// Output the list item
foreach ($listLines as $line)
{
if (!parseCommand($line, $vars, $handle))
{
if (!$ignore)
print parseTags($line, $vars);
}
}
}
}
else
{
if ($ignore == false)
$listLines[] = $line;
}
}
else if (parseCommand($line, $vars, $handle))
{
continue;
}
else
{
// Check for the start of the file list
if (strncmp(trim($line), "[websvn-startlisting]", 21) == 0)
{
$inListing = true;
}
else
{
if ($ignore == false)
print parseTags($line, $vars);
}
}
}
fclose($handle);
}
 
// parseTags
//
// Replace all occurences of [websvn:varname] with the give variable
 
function parseTags($line, $vars)
{
global $lang;
// Replace the websvn variables
while (ereg("\[websvn:([a-zA-Z0-9_]+)\]", $line, $matches))
{
// Make sure that the variable exists
if (!isset($vars[$matches[1]]))
{
$vars[$matches[1]] = "?${matches[1]}?";
}
$line = str_replace($matches[0], $vars[$matches[1]], $line);
}
// Replace the language strings
while (ereg("\[lang:([a-zA-Z0-9_]+)\]", $line, $matches))
{
// Make sure that the variable exists
if (!isset($lang[$matches[1]]))
{
$lang[$matches[1]] = "?${matches[1]}?";
}
$line = str_replace($matches[0], $lang[$matches[1]], $line);
}
 
// Return the results
return $line;
}
?>
/WebSVN/include/utils.inc
0,0 → 1,340
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// utils.inc
//
// General utility commands
 
// {{{ createDirLinks
//
// Create a list of links to the current path that'll be available from the template
 
function createDirLinks($rep, $path, $rev, $showchanged)
{
global $vars, $config;
$subs = explode('/', htmlentities($path));
$sofar = "";
$count = count($subs);
$vars["curdirlinks"] = "";
// The number of links depends on the last item. It's empty if
// we're looing at a directory, and full if it's a file
if (empty($subs[$count - 1]))
{
$limit = $count - 2;
$dir = true;
}
else
{
$limit = $count - 1;
$dir = false;
}
for ($n = 0; $n < $limit; $n++)
{
$sofar .= html_entity_decode($subs[$n])."/";
$sofarurl = $config->getURL($rep, $sofar, "dir");
$vars["curdirlinks"] .= "[<a href=\"${sofarurl}rev=$rev&amp;sc=$showchanged\">".$subs[$n]."/]</a> ";
}
if ($dir)
{
$vars["curdirlinks"] .= "[<b>".html_entity_decode($subs[$n])."</b>/]";
}
else
{
$vars["curdirlinks"] .= "[<b>".html_entity_decode($subs[$n])."</b>]";
}
}
 
// }}}
 
// {{{ create_anchors
//
// Create links out of http:// and mailto: tags
 
# TODO: the target="_blank" nonsense should be optional (or specified by the template)
function create_anchors($text)
{
$ret = $text;
 
// Match correctly formed URLs that aren't already links
$ret = preg_replace("#\b(?<!href=\")([a-z]+?)://(\S*)([\w/]+)#i",
"<a href=\"\\1://\\2\\3\" target=\"_blank\">\\1://\\2\\3</a>",
$ret);
// Now match anything beginning with www, as long as it's not //www since they were matched above
$ret = preg_replace("#\b(?<!//)www\.(\S*)([\w/]+)#i",
"<a href=\"http://www.\\1\\2\" target=\"_blank\">www.\\1\\2</a>",
$ret);
 
// Match email addresses
$ret = preg_replace("#\b([\w\-_.]+)@([\w\-.]+)\b#i",
"<a href=\"mailto:\\1@\\2\">\\1@\\2</a>",
$ret);
return ($ret);
}
 
// }}}
 
// {{{ getFullURL
 
function getFullURL($loc)
{
$protocol = 'http';
if (isset($_SERVER["HTTPS"]) && (strtolower($_SERVER["HTTPS"]) != "off"))
{
$protocol = "https";
}
$port = ":".$_SERVER["SERVER_PORT"];
if ((":80" == $port && "http" == $protocol) ||
(":443" == $port && "https" == $protocol))
{
$port = "";
}
if (isset($_SERVER["HTTP_HOST"]))
{
$host = $_SERVER["HTTP_HOST"];
}
else if (isset($_SERVER["SERVER_NAME"]))
{
$host = $_SERVER["SERVER_NAME"].$port;
}
else if (isset($_SERVER["SERVER_ADDR"]))
{
$host = $_SERVER["SERVER_ADDR"].$port;
}
else
{
print "Unable to redirect";
exit;
}
$url = $protocol . "://" . $host . $loc;
 
return $url;
}
 
// }}}
 
// {{{ hardspace
//
// Replace the spaces at the front of a line with hard spaces
 
# XXX: this is an unnecessary function; you can prevent whitespace from being
# trimmed via CSS (use the "white-space: pre;" properties). ~J
# in the meantime, here's an improved function (does nothing)
 
function hardspace($s)
{
return '<code>' . expandTabs($s) . '</code>';
}
 
// }}}
 
// {{{ expandTabs
 
/**
* Expands the tabs in a line that may or may not include HTML.
*
* Enscript generates code with HTML, so we need to take that into account.
*
* @param string $s Line of possibly HTML-encoded text to expand
* @param int $tabwidth Tab width, -1 to use repository's default, 0 to collapse
* all tabs.
* @return string The expanded line.
* @since 2.1
*/
 
function expandTabs($s, $tabwidth = -1)
{
global $rep;
 
if ($tabwidth == -1)
$tabwidth = $rep->getExpandTabsBy();
$pos = 0;
 
// Parse the string into chunks that are either 1 of: HTML tag, tab char, run of any other stuff
$chunks = preg_split("/((?:<.+?>)|(?:&.+?;)|(?:\t))/", $s, -1, PREG_SPLIT_DELIM_CAPTURE);
 
// Count the sizes of the chunks and replace tabs as we go
for ($i = 0; $i < count($chunks); $i++)
{
# make sure we're not dealing with an empty string
if (empty($chunks[$i])) continue;
switch ($chunks[$i]{0})
{
case '<': // HTML tag : ignore its width by doing nothing
break;
 
case '&': // HTML entity: count its width as 1 char
$pos += 1;
break;
 
case "\t": // Tab char: replace it with a run of spaces between length tabwidth and 1
$tabsize = $tabwidth - ($pos % $tabwidth);
$chunks[$i] = str_repeat(' ', $tabsize);
$pos += $tabsize;
break;
 
default: // Anything else: just keep track of its width
$pos += strlen($chunks[$i]);
break;
}
}
 
// Put the chunks back together and we've got the original line, detabbed.
return join('', $chunks);
}
 
// }}}
 
// {{{ datetimeFormatDuration
//
// Formats a duration of seconds for display.
//
// $seconds the number of seconds until something
// $nbsp true if spaces should be replaced by nbsp
// $skipSeconds true if seconds should be omitted
//
// return the formatted duration (e.g. @c "8h 6m 1s")
 
function datetimeFormatDuration($seconds, $nbsp = false, $skipSeconds = false)
{
global $lang;
if ($seconds < 0)
{
$seconds = -$seconds;
$neg = true;
}
else
$neg = false;
 
$qty = array();
 
$qty[] = (int)($seconds / (60 * 60 * 24));
$seconds %= 60 * 60 * 24;
 
$qty[] = (int)($seconds / (60 * 60));
$seconds %= 60 * 60;
 
$qty[] = (int)($seconds / 60);
$qty[] = (int)($seconds % 60);
 
$text = "";
$names = $lang["DAYLETTER"].$lang["HOURLETTER"].$lang["MINUTELETTER"];
if (!$skipSeconds) $names .= $lang["SECONDLETTER"];
 
$any = false;
for ($i = 0; $i < strlen($names); $i++)
// If a "higher valued" time slot had a value or this time slot
// has a value or this is the very last entry (i.e. all values
// are 0 and we still want to print seconds)
if ($any || $qty[$i] || $i == sizeof($qty) - 1)
{
$any = true;
 
if ($i)
$text .= sprintf("%2d", $qty[$i]);
else
$text .= $qty[$i];
 
$text .= "{$names{$i}} ";
}
 
$text = trim($text);
if ($neg)
$text = "-$text";
 
return $nbsp ? str_replace(" ", "&nbsp;", $text) : $text;
}
 
// }}}
 
// {{{ getParameterisedSelfUrl
//
// Get the relative URL (PHP_SELF) with GET and POST data
 
function getParameterisedSelfUrl($params = true)
{
global $config;
 
$url = null;
 
if ($config->multiViews)
{
// Get rid of the file's name
$url = preg_replace('/\.php/', '', $_SERVER['PHP_SELF'], 1);
}
else
{
$url = basename($_SERVER['PHP_SELF']);
 
// Sometimes the .php isn't on the end. Damn strange...
if (strchr($url, '.') === false)
$url .= '.php';
}
 
if ($params)
{
$arr = $_GET + $_POST;
# XXX: the point of HTTP POST is that URIs have a set size limit, so POST
# data is typically too large to bother with; why include it?
$url .= '?'.htmlentities(http_build_query($arr));
}
 
return $url;
}
 
// }}}
 
// {{{ getUserLanguage
 
function getUserLanguage() {
$languages = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'en';
if (strpos($languages, ',') === false) return $languages; # only one specified
# split off the languages into an array of languages and q-values
$qvals = array();
$langs = array();
preg_match_all('#(\S+?)\s*(?:;q=([01](?:\.\d{1,3})?))?\s*,\s*#', $languages, $qvals, PREG_SET_ORDER);
foreach ($qvals as $q) {
$langs[] = array (
$q[1],
floatval(!empty($q[2]) ? $q[2] : 1.0)
);
}
# XXX: now, we should loop through our available languages and choose an
# appropriate one for the user
# note that we shouldn't match the region unless we have a specific region
# to use (e.g. zh-CN vs. zh-TW)
# FIXME: see above; otherwise, this function doesn't really do anything
}
 
// }}}
 
?>
/WebSVN/include/version.inc
0,0 → 1,28
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// version.inc
//
// Version information
 
$version = '2.1 alpha 1';
?>
/WebSVN/include/PHP/Compat/Components.php
0,0 → 1,108
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: Components.php,v 1.10 2005/12/05 14:49:56 aidan Exp $
 
 
// Functions
$components['function']['array_change_key_case'] = '4.2.0';
$components['function']['array_chunk'] = '4.2.0';
$components['function']['array_combine'] = '5.0.0';
$components['function']['array_diff_assoc'] = '4.3.0';
$components['function']['array_diff_key'] = '5.0.2';
$components['function']['array_diff_uassoc'] = '5.0.0';
$components['function']['array_diff_ukey'] = '5.0.2';
$components['function']['array_intersect_assoc'] = '5.0.0';
$components['function']['array_intersect_key'] = '5.0.2';
$components['function']['array_intersect_uassoc'] = '5.0.0';
$components['function']['array_intersect_ukey'] = '5.0.2';
$components['function']['array_key_exists'] = '4.1.0';
$components['function']['array_product'] = '5.1.0';
$components['function']['array_search'] = '4.0.5';
$components['function']['array_udiff'] = '5.0.0';
$components['function']['array_udiff_assoc'] = '5.0.0';
$components['function']['array_udiff_uassoc'] = '5.0.0';
$components['function']['array_uintersect'] = '5.0.0';
$components['function']['array_uintersect_assoc'] = '5.0.0';
$components['function']['array_uintersect_uassoc'] = '5.0.0';
$components['function']['array_walk_recursive'] = '5.0.0';
$components['function']['bcinvert'] = '5.2.0';
$components['function']['bcpowmod'] = '5.0.0';
$components['function']['call_user_func_array'] = '4.0.4';
$components['function']['clone'] = '5.0.0';
$components['function']['constant'] = '4.0.4';
$components['function']['convert_uudecode'] = '5.0.0';
$components['function']['convert_uuencode'] = '5.0.0';
$components['function']['debug_print_backtrace'] = '5.0.0';
$components['function']['file_get_contents'] = '4.3.0';
$components['function']['file_put_contents'] = '5.0.0';
$components['function']['floatval'] = '4.2.0';
$components['function']['fprintf'] = '5.0.0';
$components['function']['fputcsv'] = '5.0.0';
$components['function']['get_headers'] = '5.0.0';
$components['function']['get_include_path'] = '4.3.0';
$components['function']['html_entity_decode'] = '4.3.0';
$components['function']['htmlspecialchars_decode'] = '5.1.0';
$components['function']['http_build_query'] = '5.0.0';
$components['function']['ibase_timefmt'] = '5.0.0';
$components['function']['idate'] = '5.1.0';
$components['function']['image_type_to_mime_type'] = '4.3.0';
$components['function']['inet_ntop'] = '5.1.0';
$components['function']['inet_pton'] = '5.1.0';
$components['function']['ini_get_all'] = '4.2.0';
$components['function']['is_a'] = '4.2.0';
$components['function']['is_scalar'] = '4.0.5';
$components['function']['md5_file'] = '4.2.0';
$components['function']['mhash'] = '4.0.0';
$components['function']['mime_content_type'] = '4.3.0';
$components['function']['ob_clean'] = '4.2.0';
$components['function']['ob_flush'] = '4.2.0';
$components['function']['ob_get_clean'] = '4.3.0';
$components['function']['ob_get_flush'] = '4.3.0';
$components['function']['php_strip_whitespace'] = '5.0.0';
$components['function']['property_exists'] = '5.1.0';
$components['function']['pg_affected_rows'] = '4.2.0';
$components['function']['pg_escape_bytea'] = '4.2.0';
$components['function']['pg_unescape_bytea'] = '4.2.0';
$components['function']['restore_include_path'] = '4.3.0';
$components['function']['scandir'] = '5.0.0';
$components['function']['set_include_path'] = '4.3.0';
$components['function']['str_ireplace'] = '5.0.0';
$components['function']['str_rot13'] = '4.2.0';
$components['function']['str_shuffle'] = '4.3.0';
$components['function']['str_split'] = '5.0.0';
$components['function']['str_word_count'] = '4.3.0';
$components['function']['stripos'] = '5.0.0';
$components['function']['strpbrk'] = '5.0.0';
$components['function']['strripos'] = '5.0.0';
$components['function']['substr_compare'] = '5.0.0';
$components['function']['time_sleep_until'] = '5.1.0';
$components['function']['var_export'] = '4.2.0';
$components['function']['version_compare'] = '4.1.0';
$components['function']['vprintf'] = '4.1.0';
$components['function']['vsprintf'] = '4.1.0';
 
// Constants
$components['constant']['DIRECTORY_SEPARATOR'] = '4.0.6';
$components['constant']['E_STRICT'] = '5.0.0';
$components['constant']['FILE'] = '4.3.0';
$components['constant']['PATH_SEPARATOR'] = '4.3.0';
$components['constant']['PHP_EOL'] = '5.0.1';
$components['constant']['STD'] = '4.3.0';
$components['constant']['T'] = '5.0.0';
$components['constant']['UPLOAD_ERR'] = '4.3.0';
?>
/WebSVN/include/PHP/Compat/Constant/DIRECTORY_SEPARATOR.php
0,0 → 1,37
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: DIRECTORY_SEPARATOR.php,v 1.1 2004/11/28 03:55:28 aidan Exp $
 
 
/**
* Replace constant DIRECTORY_SEPARATOR
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/reserved.constants.standard
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.1 $
* @since PHP 4.0.6
*/
if (!defined('DIRECTORY_SEPARATOR')) {
define('DIRECTORY_SEPARATOR',
strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/'
);
}
 
?>
/WebSVN/include/PHP/Compat/Constant/E_STRICT.php
0,0 → 1,35
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: E_STRICT.php,v 1.11 2004/08/19 10:09:52 aidan Exp $
 
 
/**
* Replace constant E_STRICT
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/ref.errorfunc
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.11 $
* @since PHP 5
*/
if (!defined('E_STRICT')) {
define('E_STRICT', 2048);
}
 
?>
/WebSVN/include/PHP/Compat/Constant/FILE.php
0,0 → 1,51
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: FILE.php,v 1.8 2004/08/19 10:09:52 aidan Exp $
 
 
/**
* Replace filesystem constants
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/ref.filesystem
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.8 $
* @since PHP 5
*/
if (!defined('FILE_USE_INCLUDE_PATH')) {
define('FILE_USE_INCLUDE_PATH', 1);
}
 
if (!defined('FILE_IGNORE_NEW_LINES')) {
define('FILE_IGNORE_NEW_LINES', 2);
}
 
if (!defined('FILE_SKIP_EMPTY_LINES')) {
define('FILE_SKIP_EMPTY_LINES', 4);
}
 
if (!defined('FILE_APPEND')) {
define('FILE_APPEND', 8);
}
 
if (!defined('FILE_NO_DEFAULT_CONTEXT')) {
define('FILE_NO_DEFAULT_CONTEXT', 16);
}
 
?>
/WebSVN/include/PHP/Compat/Constant/PATH_SEPARATOR.php
0,0 → 1,37
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: PATH_SEPARATOR.php,v 1.13 2004/11/14 16:10:18 aidan Exp $
 
 
/**
* Replace constant PATH_SEPARATOR
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/ref.dir
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.13 $
* @since PHP 4.3.0
*/
if (!defined('PATH_SEPARATOR')) {
define('PATH_SEPARATOR',
strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? ';' : ':'
);
}
 
?>
/WebSVN/include/PHP/Compat/Constant/PHP_EOL.php
0,0 → 1,49
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: PHP_EOL.php,v 1.2 2004/10/10 13:58:09 aidan Exp $
 
 
/**
* Replace PHP_EOL constant
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/reserved.constants.core
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.2 $
* @since PHP 5.0.2
*/
if (!defined('PHP_EOL')) {
switch (strtoupper(substr(PHP_OS, 0, 3))) {
// Windows
case 'WIN':
define('PHP_EOL', "\r\n");
break;
 
// Mac
case 'DAR':
define('PHP_EOL', "\r");
break;
 
// Unix
default:
define('PHP_EOL', "\n");
}
}
 
?>
/WebSVN/include/PHP/Compat/Constant/STD.php
0,0 → 1,43
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: STD.php,v 1.9 2004/08/19 10:09:52 aidan Exp $
 
 
/**
* Replace commandline constants
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/features.commandline
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.9 $
* @since PHP 4.3.0
*/
if (!defined('STDIN')) {
define('STDIN', fopen('php://stdin', 'r'));
}
 
if (!defined('STDOUT')) {
define('STDOUT', fopen('php://stdout', 'w'));
}
 
if (!defined('STDERR')) {
define('STDERR', fopen('php://stderr', 'w'));
}
 
?>
/WebSVN/include/PHP/Compat/Constant/T.php
0,0 → 1,72
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: T.php,v 1.4 2004/11/14 16:43:40 aidan Exp $
 
 
/**
* Replace tokenizer constants
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/ref.tokenizer
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.4 $
* @since PHP 5
*/
if (!defined('T_ML_COMMENT')) {
define('T_ML_COMMENT', T_COMMENT);
}
if (!defined('T_DOC_COMMENT')) {
define('T_DOC_COMMENT', T_ML_COMMENT);
}
 
if (!defined('T_OLD_FUNCTION')) {
define('T_OLD_FUNCTION', -1);
}
if (!defined('T_ABSTRACT')) {
define('T_ABSTRACT', -1);
}
if (!defined('T_CATCH')) {
define('T_CATCH', -1);
}
if (!defined('T_FINAL')) {
define('T_FINAL', -1);
}
if (!defined('T_INSTANCEOF')) {
define('T_INSTANCEOF', -1);
}
if (!defined('T_PRIVATE')) {
define('T_PRIVATE', -1);
}
if (!defined('T_PROTECTED')) {
define('T_PROTECTED', -1);
}
if (!defined('T_PUBLIC')) {
define('T_PUBLIC', -1);
}
if (!defined('T_THROW')) {
define('T_THROW', -1);
}
if (!defined('T_TRY')) {
define('T_TRY', -1);
}
if (!defined('T_CLONE')) {
define('T_CLONE', -1);
}
 
?>
/WebSVN/include/PHP/Compat/Constant/UPLOAD_ERR.php
0,0 → 1,51
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: UPLOAD_ERR.php,v 1.1 2004/10/12 08:41:11 aidan Exp $
 
 
/**
* Replace upload error constants
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/features.file-upload.errors
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.1 $
* @since PHP 4.3.0
*/
if (!defined('UPLOAD_ERR_OK')) {
define('UPLOAD_ERR_OK', 0);
}
 
if (!defined('UPLOAD_ERR_INI_SIZE')) {
define('UPLOAD_ERR_INI_SIZE', 1);
}
 
if (!defined('UPLOAD_ERR_FORM_SIZE')) {
define('UPLOAD_ERR_FORM_SIZE', 2);
}
 
if (!defined('UPLOAD_ERR_PARTIAL')) {
define('UPLOAD_ERR_PARTIAL', 3);
}
 
if (!defined('UPLOAD_ERR_NO_FILE')) {
define('UPLOAD_ERR_NO_FILE', 4);
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_change_key_case.php
0,0 → 1,64
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_change_key_case.php,v 1.11 2005/12/07 21:08:57 aidan Exp $
 
 
if (!defined('CASE_LOWER')) {
define('CASE_LOWER', 0);
}
 
if (!defined('CASE_UPPER')) {
define('CASE_UPPER', 1);
}
 
 
/**
* Replace array_change_key_case()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_change_key_case
* @author Stephan Schmidt <schst@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.11 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_change_key_case')) {
function array_change_key_case($input, $case = CASE_LOWER)
{
if (!is_array($input)) {
user_error('array_change_key_case(): The argument should be an array',
E_USER_WARNING);
return false;
}
 
$output = array ();
$keys = array_keys($input);
$casefunc = ($case == CASE_LOWER) ? 'strtolower' : 'strtoupper';
 
foreach ($keys as $key) {
$output[$casefunc($key)] = $input[$key];
}
 
return $output;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_chunk.php
0,0 → 1,72
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_chunk.php,v 1.14 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_combine()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_chunk
* @author Aidan Lister <aidan@php.net>
* @author Thiemo Mättig (http://maettig.com)
* @version $Revision: 1.14 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_chunk')) {
function array_chunk($input, $size, $preserve_keys = false)
{
if (!is_array($input)) {
user_error('array_chunk() expects parameter 1 to be array, ' .
gettype($input) . ' given', E_USER_WARNING);
return;
}
 
if (!is_numeric($size)) {
user_error('array_chunk() expects parameter 2 to be long, ' .
gettype($size) . ' given', E_USER_WARNING);
return;
}
 
$size = (int)$size;
if ($size <= 0) {
user_error('array_chunk() Size parameter expected to be greater than 0',
E_USER_WARNING);
return;
}
 
$chunks = array();
$i = 0;
 
if ($preserve_keys !== false) {
foreach ($input as $key => $value) {
$chunks[(int)($i++ / $size)][$key] = $value;
}
} else {
foreach ($input as $value) {
$chunks[(int)($i++ / $size)][] = $value;
}
}
 
return $chunks;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_combine.php
0,0 → 1,71
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_combine.php,v 1.21 2005/01/28 02:27:52 aidan Exp $
 
 
/**
* Replace array_combine()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_combine
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.21 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_combine')) {
function array_combine($keys, $values)
{
if (!is_array($keys)) {
user_error('array_combine() expects parameter 1 to be array, ' .
gettype($keys) . ' given', E_USER_WARNING);
return;
}
 
if (!is_array($values)) {
user_error('array_combine() expects parameter 2 to be array, ' .
gettype($values) . ' given', E_USER_WARNING);
return;
}
 
$key_count = count($keys);
$value_count = count($values);
if ($key_count !== $value_count) {
user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING);
return false;
}
 
if ($key_count === 0 || $value_count === 0) {
user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING);
return false;
}
 
$keys = array_values($keys);
$values = array_values($values);
 
$combined = array();
for ($i = 0; $i < $key_count; $i++) {
$combined[$keys[$i]] = $values[$i];
}
 
return $combined;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_diff_assoc.php
0,0 → 1,76
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_diff_assoc.php,v 1.12 2005/12/07 21:08:57 aidan Exp $
 
 
/**
* Replace array_diff_assoc()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_diff_assoc
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.12 $
* @since PHP 4.3.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_diff_assoc')) {
function array_diff_assoc()
{
// Check we have enough arguments
$args = func_get_args();
$count = count($args);
if (count($args) < 2) {
user_error('Wrong parameter count for array_diff_assoc()', E_USER_WARNING);
return;
}
 
// Check arrays
for ($i = 0; $i < $count; $i++) {
if (!is_array($args[$i])) {
user_error('array_diff_assoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Get the comparison array
$array_comp = array_shift($args);
--$count;
 
// Traverse values of the first array
foreach ($array_comp as $key => $value) {
// Loop through the other arrays
for ($i = 0; $i < $count; $i++) {
// Loop through this arrays key/value pairs and compare
foreach ($args[$i] as $comp_key => $comp_value) {
if ((string)$key === (string)$comp_key &&
(string)$value === (string)$comp_value)
{
 
unset($array_comp[$key]);
}
}
}
}
 
return $array_comp;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_diff_key.php
0,0 → 1,66
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_diff_key.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_diff_key()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_diff_key
* @author Tom Buskens <ortega@php.net>
* @version $Revision: 1.4 $
* @since PHP 5.0.2
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_diff_key')) {
function array_diff_key()
{
$args = func_get_args();
if (count($args) < 2) {
user_error('Wrong parameter count for array_diff_key()', E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_diff_key() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
$result = $args[0];
foreach ($args[0] as $key1 => $value1) {
for ($i = 1; $i !== $array_count; $i++) {
foreach ($args[$i] as $key2 => $value2) {
if ((string) $key1 === (string) $key2) {
unset($result[$key2]);
break 2;
}
}
}
}
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_diff_uassoc.php
0,0 → 1,83
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_diff_uassoc.php,v 1.2 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_diff_uassoc()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_diff_uassoc
* @version $Revision: 1.2 $
* @since PHP 5.0.0
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_diff_uassoc')) {
function array_diff_uassoc()
{
// Sanity check
$args = func_get_args();
if (count($args) < 3) {
user_error('Wrong parameter count for array_diff_uassoc()', E_USER_WARNING);
return;
}
 
// Get compare function
$compare_func = array_pop($args);
if (!is_callable($compare_func)) {
if (is_array($compare_func)) {
$compare_func = $compare_func[0] . '::' . $compare_func[1];
}
user_error('array_diff_uassoc() Not a valid callback ' .
$compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_diff_uassoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$result = array();
foreach ($args[0] as $k => $v) {
for ($i = 1; $i < $array_count; $i++) {
foreach ($args[$i] as $kk => $vv) {
if ($v == $vv) {
$compare = call_user_func_array($compare_func, array($k, $kk));
if ($compare == 0) {
continue 3;
}
}
}
}
 
$result[$k] = $v;
}
 
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_diff_ukey.php
0,0 → 1,79
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_diff_ukey.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_diff_ukey()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_diff_ukey
* @author Tom Buskens <ortega@php.net>
* @version $Revision: 1.4 $
* @since PHP 5.0.2
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_diff_ukey')) {
function array_diff_ukey()
{
$args = func_get_args();
if (count($args) < 3) {
user_error('Wrong parameter count for array_diff_ukey()', E_USER_WARNING);
return;
}
 
// Get compare function
$compare_func = array_pop($args);
if (!is_callable($compare_func)) {
if (is_array($compare_func)) {
$compare_func = $compare_func[0].'::'.$compare_func[1];
}
user_error('array_diff_ukey() Not a valid callback ' .
$compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_diff_ukey() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$result = $args[0];
foreach ($args[0] as $key1 => $value1) {
for ($i = 1; $i !== $array_count; $i++) {
foreach ($args[$i] as $key2 => $value2) {
if (!(call_user_func($compare_func, (string) $key1, (string) $key2))) {
unset($result[$key1]);
break 2;
}
}
}
}
 
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_intersect_assoc.php
0,0 → 1,69
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_intersect_assoc.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_intersect_assoc()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_intersect_assoc
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.4 $
* @since PHP 4.3.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_intersect_assoc')) {
function array_intersect_assoc()
{
// Sanity check
$args = func_get_args();
if (count($args) < 2) {
user_error('wrong parameter count for array_intersect_assoc()', E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_intersect_assoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$intersect = array();
foreach ($args[0] as $key => $value) {
$intersect[$key] = $value;
 
for ($i = 1; $i < $array_count; $i++) {
if (!isset($args[$i][$key]) || $args[$i][$key] != $value) {
unset($intersect[$key]);
break;
}
}
}
 
return $intersect;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_intersect_key.php
0,0 → 1,67
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_intersect_key.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_intersect_key()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_intersect_key
* @author Tom Buskens <ortega@php.net>
* @version $Revision: 1.4 $
* @since PHP 5.0.2
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_intersect_key')) {
function array_intersect_key()
{
$args = func_get_args();
if (count($args) < 2) {
user_error('Wrong parameter count for array_intersect_key()', E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_intersect_key() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$result = array();
foreach ($args[0] as $key1 => $value1) {
for ($i = 1; $i !== $array_count; $i++) {
foreach ($args[$i] as $key2 => $value2) {
if ((string) $key1 === (string) $key2) {
$result[$key1] = $value1;
}
}
}
}
 
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_intersect_uassoc.php
0,0 → 1,90
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_intersect_uassoc.php,v 1.5 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_intersect_assoc()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_intersect_uassoc
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.5 $
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_intersect_uassoc')) {
function array_intersect_uassoc()
{
// Sanity check
$args = func_get_args();
if (count($args) < 3) {
user_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING);
return;
}
 
// Get compare function
$compare_func = array_pop($args);
if (!is_callable($compare_func)) {
if (is_array($compare_func)) {
$compare_func = $compare_func[0] . '::' . $compare_func[1];
}
user_error('array_intersect_uassoc() Not a valid callback ' .
$compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_intersect_uassoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$result = array();
foreach ($args[0] as $k => $v) {
for ($i = 0; $i < $array_count; $i++) {
$match = false;
foreach ($args[$i] as $kk => $vv) {
$compare = call_user_func_array($compare_func, array($k, $kk));
if ($compare === 0 && $v == $vv) {
$match = true;
continue 2;
}
}
 
if ($match === false) {
continue 2;
}
}
 
if ($match === true) {
$result[$k] = $v;
}
}
 
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_intersect_ukey.php
0,0 → 1,79
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_intersect_ukey.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_intersect_ukey()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_intersect_ukey
* @author Tom Buskens <ortega@php.net>
* @version $Revision: 1.4 $
* @since PHP 5.0.2
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_intersect_ukey')) {
function array_intersect_ukey()
{
$args = func_get_args();
if (count($args) < 3) {
user_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING);
return;
}
 
// Get compare function
$compare_func = array_pop($args);
if (!is_callable($compare_func)) {
if (is_array($compare_func)) {
$compare_func = $compare_func[0].'::'.$compare_func[1];
}
user_error('array_diff_ukey() Not a valid callback ' .
$compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i !== $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_intersect_ukey() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$result = array();
foreach ($args[0] as $key1 => $value1) {
for ($i = 1; $i !== $array_count; $i++) {
foreach ($args[$i] as $key2 => $value2) {
if (!(call_user_func($compare_func, (string) $key1, (string) $key2))) {
$result[$key1] = $value1;
break 2;
}
}
}
}
 
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_key_exists.php
0,0 → 1,55
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_key_exists.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_key_exists()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_key_exists
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.7 $
* @since PHP 4.1.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_key_exists')) {
function array_key_exists($key, $search)
{
if (!is_scalar($key)) {
user_error('array_key_exists() The first argument should be either a string or an integer',
E_USER_WARNING);
return false;
}
 
if (is_object($search)) {
$search = get_object_vars($search);
}
 
if (!is_array($search)) {
user_error('array_key_exists() The second argument should be either an array or an object',
E_USER_WARNING);
return false;
}
 
return in_array($key, array_keys($search));
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_product.php
0,0 → 1,53
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Arpad Ray <arpad@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_product.php,v 1.1 2005/12/05 14:49:08 aidan Exp $
 
 
/**
* Replace array_product()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/time_sleep_until
* @author Arpad Ray <arpad@php.net>
* @version $Revision: 1.1 $
* @since PHP 5.1.0
* @require PHP 4.0.1 (trigger_error)
*/
if (!function_exists('array_product')) {
function array_product($array)
{
if (!is_array($array)) {
trigger_error('The argument should be an array', E_USER_WARNING);
return;
}
 
if (empty($array)) {
return 0;
}
 
$r = 1;
foreach ($array as $v) {
$r *= $v;
}
 
return $r;
}
}
?>
/WebSVN/include/PHP/Compat/Function/array_search.php
0,0 → 1,51
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_search.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_search()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_search
* @author Aidan Lister <aidan@php.net>
* @author Thiemo Mättig (http://maettig.com/)
* @version $Revision: 1.6 $
* @since PHP 4.0.5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('array_search')) {
function array_search($needle, $haystack, $strict = false)
{
if (!is_array($haystack)) {
user_error('array_search() Wrong datatype for second argument', E_USER_WARNING);
return false;
}
 
foreach ($haystack as $key => $value) {
if ($strict ? $value === $needle : $value == $needle) {
return $key;
}
}
 
return false;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_udiff.php
0,0 → 1,83
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_udiff.php,v 1.10 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_udiff()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_udiff
* @author Stephan Schmidt <schst@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.10 $
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_udiff')) {
function array_udiff()
{
$args = func_get_args();
 
if (count($args) < 3) {
user_error('Wrong parameter count for array_udiff()', E_USER_WARNING);
return;
}
 
// Get compare function
$compare_func = array_pop($args);
if (!is_callable($compare_func)) {
if (is_array($compare_func)) {
$compare_func = $compare_func[0] . '::' . $compare_func[1];
}
user_error('array_udiff() Not a valid callback ' .
$compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$cnt = count($args);
for ($i = 0; $i < $cnt; $i++) {
if (!is_array($args[$i])) {
user_error('array_udiff() Argument #' .
($i + 1). ' is not an array', E_USER_WARNING);
return;
}
}
 
$diff = array ();
// Traverse values of the first array
foreach ($args[0] as $key => $value) {
// Check all arrays
for ($i = 1; $i < $cnt; $i++) {
foreach ($args[$i] as $cmp_value) {
$result = call_user_func($compare_func, $value, $cmp_value);
if ($result === 0) {
continue 3;
}
}
}
$diff[$key] = $value;
}
return $diff;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_udiff_assoc.php
0,0 → 1,85
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_udiff_assoc.php,v 1.14 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_udiff_assoc()
*
* @category PHP
* @package PHP_Compat
* @author Stephan Schmidt <schst@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.14 $
* @link http://php.net/function.array-udiff-assoc
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_udiff_assoc')) {
function array_udiff_assoc()
{
$args = func_get_args();
if (count($args) < 3) {
user_error('Wrong parameter count for array_udiff_assoc()', E_USER_WARNING);
return;
}
 
// Get compare function
$compare_func = array_pop($args);
if (!is_callable($compare_func)) {
if (is_array($compare_func)) {
$compare_func = $compare_func[0] . '::' . $compare_func[1];
}
user_error('array_udiff_assoc() Not a valid callback ' .
$compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$count = count($args);
for ($i = 0; $i < $count; $i++) {
if (!is_array($args[$i])) {
user_error('array_udiff_assoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
$diff = array ();
// Traverse values of the first array
foreach ($args[0] as $key => $value) {
// Check all arrays
for ($i = 1; $i < $count; $i++) {
if (!array_key_exists($key, $args[$i])) {
continue;
}
$result = call_user_func($compare_func, $value, $args[$i][$key]);
if ($result === 0) {
continue 2;
}
}
 
$diff[$key] = $value;
}
 
return $diff;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_udiff_uassoc.php
0,0 → 1,82
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_udiff_uassoc.php,v 1.8 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_udiff_uassoc()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_udiff_uassoc
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.8 $
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_udiff_uassoc')) {
function array_udiff_uassoc()
{
$args = func_get_args();
if (count($args) < 3) {
user_error('Wrong parameter count for array_udiff_uassoc()', E_USER_WARNING);
return;
}
 
// Get compare function
$compare_func = array_pop($args);
if (!is_callable($compare_func)) {
if (is_array($compare_func)) {
$compare_func = $compare_func[0] . '::' . $compare_func[1];
}
user_error('array_udiff_uassoc() Not a valid callback ' . $compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$count = count($args);
for ($i = 0; $i < $count; $i++) {
if (!is_array($args[$i])) {
user_error('array_udiff_uassoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Traverse values of the first array
$diff = array ();
foreach ($args[0] as $key => $value) {
// Check all arrays
for ($i = 1; $i < $count; $i++) {
if (!array_key_exists($key, $args[$i])) {
continue;
}
$result = call_user_func($compare_func, $value, $args[$i][$key]);
if ($result === 0) {
continue 2;
}
}
 
$diff[$key] = $value;
}
 
return $diff;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_uintersect.php
0,0 → 1,82
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Tom Buskens <ortega@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_uintersect.php,v 1.9 2005/05/10 12:05:48 aidan Exp $
 
 
/**
* Replace array_uintersect()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_uintersect
* @author Tom Buskens <ortega@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.9 $
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_uintersect')) {
function array_uintersect()
{
$args = func_get_args();
if (count($args) < 3) {
user_error('wrong parameter count for array_uintersect()',
E_USER_WARNING);
return;
}
 
// Get compare function
$user_func = array_pop($args);
if (!is_callable($user_func)) {
if (is_array($user_func)) {
$user_func = $user_func[0] . '::' . $user_func[1];
}
user_error('array_uintersect() Not a valid callback ' .
$user_func, E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i < $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_uintersect() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$output = array();
foreach ($args[0] as $key => $item) {
for ($i = 1; $i !== $array_count; $i++) {
$array = $args[$i];
foreach($array as $key0 => $item0) {
if (!call_user_func($user_func, $item, $item0)) {
$output[$key] = $item;
}
}
}
}
 
return $output;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_uintersect_assoc.php
0,0 → 1,81
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Tom Buskens <ortega@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_uintersect_assoc.php,v 1.9 2005/05/10 07:50:08 aidan Exp $
 
 
/**
* Replace array_uintersect_assoc()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_uintersect_assoc
* @author Tom Buskens <ortega@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.9 $
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_uintersect_assoc')) {
function array_uintersect_assoc()
{
$args = func_get_args();
if (count($args) < 3) {
user_error('wrong parameter count for array_uintersect_assoc()', E_USER_WARNING);
return;
}
 
// Get compare function
$user_func = array_pop($args);
if (!is_callable($user_func)) {
if (is_array($user_func)) {
$user_func = $user_func[0] . '::' . $user_func[1];
}
user_error('array_uintersect_assoc() Not a valid callback ' .
$user_func, E_USER_WARNING);
return;
}
 
// Check arrays
$array_count = count($args);
for ($i = 0; $i < $array_count; $i++) {
if (!is_array($args[$i])) {
user_error('array_uintersect_assoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Compare entries
$output = array();
foreach ($args[0] as $key => $item) {
for ($i = 1; $i !== $array_count; $i++) {
if (array_key_exists($key, $args[$i])) {
$compare = call_user_func($user_func, $item, $args[$i][$key]);
if ($compare === 0) {
$output[$key] = $item;
}
}
}
}
 
return $output;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_uintersect_uassoc.php
0,0 → 1,97
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_uintersect_uassoc.php,v 1.12 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_uintersect_uassoc()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_uintersect_uassoc
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.12 $
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_uintersect_uassoc')) {
function array_uintersect_uassoc()
{
$args = func_get_args();
if (count($args) < 4) {
user_error('Wrong parameter count for array_uintersect_uassoc()',
E_USER_WARNING);
return;
}
 
// Get key_compare_func
$key_compare_func = array_pop($args);
if (!is_callable($key_compare_func)) {
if (is_array($key_compare_func)) {
$key_compare_func = $key_compare_func[0] . '::' . $key_compare_func[1];
}
user_error('array_uintersect_uassoc() Not a valid callback ' .
$key_compare_func, E_USER_WARNING);
return;
}
 
// Get data_compare_func
$data_compare_func = array_pop($args);
if (!is_callable($data_compare_func)) {
if (is_array($data_compare_func)) {
$data_compare_func = $data_compare_func[0] . '::' . $data_compare_func[1];
}
user_error('array_uintersect_uassoc() Not a valid callback '
. $data_compare_func, E_USER_WARNING);
return;
}
 
// Check arrays
$count = count($args);
for ($i = 0; $i !== $count; $i++) {
if (!is_array($args[$i])) {
user_error('array_uintersect_uassoc() Argument #' .
($i + 1) . ' is not an array', E_USER_WARNING);
return;
}
}
 
// Traverse values of the first array
$intersect = array ();
foreach ($args[0] as $key => $value) {
// Check against each array
for ($i = 1; $i < $count; $i++) {
// Traverse each element in current array
foreach ($args[$i] as $ckey => $cvalue) {
// Compare key and value
if (call_user_func($key_compare_func, $key, $ckey) === 0 &&
call_user_func($data_compare_func, $value, $cvalue) === 0)
{
 
$intersect[$key] = $value;
continue;
}
}
}
}
 
return $intersect;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/array_walk_recursive.php
0,0 → 1,68
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Tom Buskens <ortega@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: array_walk_recursive.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace array_walk_recursive()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.array_walk_recursive
* @author Tom Buskens <ortega@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.7 $
* @since PHP 5
* @require PHP 4.0.6 (is_callable)
*/
if (!function_exists('array_walk_recursive')) {
function array_walk_recursive(&$input, $funcname)
{
if (!is_callable($funcname)) {
if (is_array($funcname)) {
$funcname = $funcname[0] . '::' . $funcname[1];
}
user_error('array_walk_recursive() Not a valid callback ' . $user_func,
E_USER_WARNING);
return;
}
 
if (!is_array($input)) {
user_error('array_walk_recursive() The argument should be an array',
E_USER_WARNING);
return;
}
 
$args = func_get_args();
 
foreach ($input as $key => $item) {
if (is_array($item)) {
array_walk_recursive($item, $funcname, $args);
$input[$key] = $item;
} else {
$args[0] = &$item;
$args[1] = &$key;
call_user_func_array($funcname, $args);
$input[$key] = $item;
}
}
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/bcinvert.php
0,0 → 1,76
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: bcinvert.php,v 1.2 2005/11/22 20:24:45 aidan Exp $
 
 
/**
* Replace bcinvert()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.bcinvert
* @author Sara Golemon <pollita@php.net>
* @version $Revision: 1.2 $
* @since PHP 5.2.0
* @require PHP 4.0.4 (call_user_func_array)
*/
if (!function_exists('bcinvert')) {
function bcinvert($a, $n)
{
// Sanity check
if (!is_scalar($a)) {
user_error('bcinvert() expects parameter 1 to be string, ' .
gettype($a) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_scalar($n)) {
user_error('bcinvert() expects parameter 2 to be string, ' .
gettype($n) . ' given', E_USER_WARNING);
return false;
}
$u1 = $v2 = '1';
$u2 = $v1 = '0';
$u3 = $n;
$v3 = $a;
 
while (bccomp($v3, '0')) {
$q0 = bcdiv($u3, $v3);
$t1 = bcsub($u1, bcmul($q0, $v1));
$t2 = bcsub($u2, bcmul($q0, $v2));
$t3 = bcsub($u3, bcmul($q0, $v3));
 
$u1 = $v1;
$u2 = $v2;
$u3 = $v3;
 
$v1 = $t1;
$v2 = $t2;
$v3 = $t3;
}
 
if (bccomp($u2, '0') < 0) {
return bcadd($u2, $n);
} else {
return bcmod($u2, $n);
}
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/bcpowmod.php
0,0 → 1,75
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: bcpowmod.php,v 1.2 2005/11/22 20:24:45 aidan Exp $
 
 
/**
* Replace bcpowmod()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.bcpowmod
* @author Sara Golemon <pollita@php.net>
* @version $Revision: 1.2 $
* @since PHP 5.0.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('bcpowmod')) {
function bcpowmod($x, $y, $modulus, $scale)
{
// Sanity check
if (!is_scalar($x)) {
user_error('bcpowmod() expects parameter 1 to be string, ' .
gettype($x) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_scalar($y)) {
user_error('bcpowmod() expects parameter 2 to be string, ' .
gettype($y) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_scalar($modulus)) {
user_error('bcpowmod() expects parameter 3 to be string, ' .
gettype($modulus) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_scalar($scale)) {
user_error('bcpowmod() expects parameter 4 to be integer, ' .
gettype($scale) . ' given', E_USER_WARNING);
return false;
}
 
$t = '1';
while (bccomp($y, '0')) {
if (bccomp(bcmod($y, '2'), '0')) {
$t = bcmod(bcmul($t, $x), $modulus);
$y = bcsub($y, '1');
}
 
$x = bcmod(bcmul($x, $x), $modulus);
$y = bcdiv($y, '2');
}
 
return $t;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/call_user_func_array.php
0,0 → 1,75
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: call_user_func_array.php,v 1.13 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace call_user_func_array()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.call_user_func_array
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.13 $
* @since PHP 4.0.4
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('call_user_func_array')) {
function call_user_func_array($function, $param_arr)
{
$param_arr = array_values((array) $param_arr);
 
// Sanity check
if (!is_callable($function)) {
if (is_array($function) && count($function) > 2) {
$function = $function[0] . '::' . $function[1];
}
$error = sprintf('call_user_func_array() First argument is expected ' .
'to be a valid callback, \'%s\' was given', $function);
user_error($error, E_USER_WARNING);
return;
}
 
// Build argument string
$arg_string = '';
$comma = '';
for ($i = 0, $x = count($param_arr); $i < $x; $i++) {
$arg_string .= $comma . "\$param_arr[$i]";
$comma = ', ';
}
 
// Determine method of calling function
if (is_array($function)) {
$object =& $function[0];
$method = $function[1];
 
// Static vs method call
if (is_string($function[0])) {
eval("\$retval = $object::\$method($arg_string);");
} else {
eval("\$retval = \$object->\$method($arg_string);");
}
} else {
eval("\$retval = \$function($arg_string);");
}
 
return $retval;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/clone.php
0,0 → 1,56
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: clone.php,v 1.3 2005/05/01 10:40:59 aidan Exp $
 
 
/**
* Replace clone()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/language.oop5.cloning
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.3 $
* @since PHP 5.0.0
* @require PHP 4.0.0 (user_error)
*/
if (version_compare(phpversion(), '5.0') === -1) {
// Needs to be wrapped in eval as clone is a keyword in PHP5
eval('
function clone($object)
{
// Sanity check
if (!is_object($object)) {
user_error(\'clone() __clone method called on non-object\', E_USER_WARNING);
return;
}
// Use serialize/unserialize trick to deep copy the object
$object = unserialize(serialize($object));
 
// If there is a __clone method call it on the "new" class
if (method_exists($object, \'__clone\')) {
$object->__clone();
}
return $object;
}
');
}
 
?>
/WebSVN/include/PHP/Compat/Function/constant.php
0,0 → 1,47
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: constant.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace constant()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.constant
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.7 $
* @since PHP 4.0.4
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('constant')) {
function constant($constant)
{
if (!defined($constant)) {
$error = sprintf('constant() Couldn\'t find constant %s', $constant);
user_error($error, E_USER_WARNING);
return false;
}
 
eval("\$value=$constant;");
 
return $value;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/convert_uudecode.php
0,0 → 1,79
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Michael Wallner <mike@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: convert_uudecode.php,v 1.8 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace convert_uudecode()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.convert_uudecode
* @author Michael Wallner <mike@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.8 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('convert_uudecode')) {
function convert_uudecode($string)
{
// Sanity check
if (!is_scalar($string)) {
user_error('convert_uuencode() expects parameter 1 to be string, ' .
gettype($string) . ' given', E_USER_WARNING);
return false;
}
 
if (strlen($string) < 8) {
user_error('convert_uuencode() The given parameter is not a valid uuencoded string', E_USER_WARNING);
return false;
}
 
$decoded = '';
foreach (explode("\n", $string) as $line) {
 
$c = count($bytes = unpack('c*', substr(trim($line), 1)));
 
while ($c % 4) {
$bytes[++$c] = 0;
}
 
foreach (array_chunk($bytes, 4) as $b) {
$b0 = $b[0] == 0x60 ? 0 : $b[0] - 0x20;
$b1 = $b[1] == 0x60 ? 0 : $b[1] - 0x20;
$b2 = $b[2] == 0x60 ? 0 : $b[2] - 0x20;
$b3 = $b[3] == 0x60 ? 0 : $b[3] - 0x20;
$b0 <<= 2;
$b0 |= ($b1 >> 4) & 0x03;
$b1 <<= 4;
$b1 |= ($b2 >> 2) & 0x0F;
$b2 <<= 6;
$b2 |= $b3 & 0x3F;
$decoded .= pack('c*', $b0, $b1, $b2);
}
}
 
return rtrim($decoded, "\0");
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/convert_uuencode.php
0,0 → 1,79
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Michael Wallner <mike@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: convert_uuencode.php,v 1.7 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace convert_uuencode()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.convert_uuencode
* @author Michael Wallner <mike@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.7 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('convert_uuencode')) {
function convert_uuencode($string)
{
// Sanity check
if (!is_scalar($string)) {
user_error('convert_uuencode() expects parameter 1 to be string, ' .
gettype($string) . ' given', E_USER_WARNING);
return false;
}
 
$u = 0;
$encoded = '';
while ($c = count($bytes = unpack('c*', substr($string, $u, 45)))) {
$u += 45;
$encoded .= pack('c', $c + 0x20);
 
while ($c % 3) {
$bytes[++$c] = 0;
}
 
foreach (array_chunk($bytes, 3) as $b) {
$b0 = ($b[0] & 0xFC) >> 2;
$b1 = (($b[0] & 0x03) << 4) + (($b[1] & 0xF0) >> 4);
$b2 = (($b[1] & 0x0F) << 2) + (($b[2] & 0xC0) >> 6);
$b3 = $b[2] & 0x3F;
$b0 = $b0 ? $b0 + 0x20 : 0x60;
$b1 = $b1 ? $b1 + 0x20 : 0x60;
$b2 = $b2 ? $b2 + 0x20 : 0x60;
$b3 = $b3 ? $b3 + 0x20 : 0x60;
$encoded .= pack('c*', $b0, $b1, $b2, $b3);
}
 
$encoded .= "\n";
}
// Add termination characters
$encoded .= "\x60\n";
 
return $encoded;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/debug_print_backtrace.php
0,0 → 1,67
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Laurent Laville <pear@laurent-laville.org> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: debug_print_backtrace.php,v 1.3 2005/08/17 02:58:09 aidan Exp $
 
 
/**
* Replace debug_print_backtrace()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.debug_print_backtrace
* @author Laurent Laville <pear@laurent-laville.org>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.3 $
* @since PHP 5
* @require PHP 4.3.0 (debug_backtrace)
*/
if (!function_exists('debug_print_backtrace')) {
function debug_print_backtrace()
{
// Get backtrace
$backtrace = debug_backtrace();
 
// Unset call to debug_print_backtrace
array_shift($backtrace);
// Iterate backtrace
$calls = array();
foreach ($backtrace as $i => $call) {
$location = $call['file'] . ':' . $call['line'];
$function = (isset($call['class'])) ?
$call['class'] . '.' . $call['function'] :
$call['function'];
$params = '';
if (isset($call['args'])) {
$params = implode(', ', $call['args']);
}
 
$calls[] = sprintf('#%d %s(%s) called at [%s]',
$i,
$function,
$params,
$location);
}
 
echo implode("\n", $calls);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/file_get_contents.php
0,0 → 1,57
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: file_get_contents.php,v 1.21 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace file_get_contents()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.file_get_contents
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.21 $
* @internal resource_context is not supported
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('file_get_contents')) {
function file_get_contents($filename, $incpath = false, $resource_context = null)
{
if (false === $fh = fopen($filename, 'rb', $incpath)) {
user_error('file_get_contents() failed to open stream: No such file or directory',
E_USER_WARNING);
return false;
}
 
clearstatcache();
if ($fsize = @filesize($filename)) {
$data = fread($fh, $fsize);
} else {
$data = '';
while (!feof($fh)) {
$data .= fread($fh, 8192);
}
}
 
fclose($fh);
return $data;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/file_put_contents.php
0,0 → 1,116
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: file_put_contents.php,v 1.25 2005/12/05 09:25:15 aidan Exp $
 
 
if (!defined('FILE_USE_INCLUDE_PATH')) {
define('FILE_USE_INCLUDE_PATH', 1);
}
 
if (!defined('LOCK_EX')) {
define('LOCK_EX', 2);
}
 
if (!defined('FILE_APPEND')) {
define('FILE_APPEND', 8);
}
 
 
/**
* Replace file_put_contents()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.file_put_contents
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.25 $
* @internal resource_context is not supported
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('file_put_contents')) {
function file_put_contents($filename, $content, $flags = null, $resource_context = null)
{
// If $content is an array, convert it to a string
if (is_array($content)) {
$content = implode('', $content);
}
 
// If we don't have a string, throw an error
if (!is_scalar($content)) {
user_error('file_put_contents() The 2nd parameter should be either a string or an array',
E_USER_WARNING);
return false;
}
 
// Get the length of data to write
$length = strlen($content);
 
// Check what mode we are using
$mode = ($flags & FILE_APPEND) ?
'a' :
'wb';
 
// Check if we're using the include path
$use_inc_path = ($flags & FILE_USE_INCLUDE_PATH) ?
true :
false;
 
// Open the file for writing
if (($fh = @fopen($filename, $mode, $use_inc_path)) === false) {
user_error('file_put_contents() failed to open stream: Permission denied',
E_USER_WARNING);
return false;
}
 
// Attempt to get an exclusive lock
$use_lock = ($flags & LOCK_EX) ? true : false ;
if ($use_lock === true) {
if (!flock($fh, LOCK_EX)) {
return false;
}
}
 
// Write to the file
$bytes = 0;
if (($bytes = @fwrite($fh, $content)) === false) {
$errormsg = sprintf('file_put_contents() Failed to write %d bytes to %s',
$length,
$filename);
user_error($errormsg, E_USER_WARNING);
return false;
}
 
// Close the handle
@fclose($fh);
 
// Check all the data was written
if ($bytes != $length) {
$errormsg = sprintf('file_put_contents() Only %d of %d bytes written, possibly out of free disk space.',
$bytes,
$length);
user_error($errormsg, E_USER_WARNING);
return false;
}
 
// Return length
return $bytes;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/floatval.php
0,0 → 1,39
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: floatval.php,v 1.2 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace floatval()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.floatval
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.2 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error) (Type Casting)
*/
if (!function_exists('floatval')) {
function floatval($var)
{
return (float) $var;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/fprintf.php
0,0 → 1,54
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: fprintf.php,v 1.13 2005/05/28 17:25:25 aidan Exp $
 
 
/**
* Replace fprintf()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.fprintf
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.13 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('fprintf')) {
function fprintf() {
$args = func_get_args();
 
if (count($args) < 2) {
user_error('Wrong parameter count for fprintf()', E_USER_WARNING);
return;
}
 
$resource_handle = array_shift($args);
$format = array_shift($args);
 
if (!is_resource($resource_handle)) {
user_error('fprintf() supplied argument is not a valid stream resource',
E_USER_WARNING);
return false;
}
 
return fwrite($resource_handle, vsprintf($format, $args));
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/fputcsv.php
0,0 → 1,64
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: fputcsv.php,v 1.2 2005/11/22 08:28:16 aidan Exp $
 
 
/**
* Replace fprintf()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.fprintf
* @author Twebb <twebb@boisecenter.com>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.2 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('fputcsv')) {
function fputcsv($handle, $fields, $delimiter = ',', $enclosure = '"')
{
// Sanity Check
if (!is_resource($handle)) {
user_error('fputcsv() expects parameter 1 to be resource, ' .
gettype($handle) . ' given', E_USER_WARNING);
return false;
}
 
$str = '';
foreach ($fields as $cell) {
$cell = str_replace($enclosure, $enclosure . $enclosure, $cell);
 
if (strchr($cell, $delimiter) !== false ||
strchr($cell, $enclosure) !== false ||
strchr($cell, "\n") !== false) {
$str .= $enclosure . $cell . $enclosure . $delimiter;
} else {
$str .= $cell . $delimiter;
}
}
 
fputs($handle, substr($str, 0, -1) . "\n");
 
return strlen($str);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/get_headers.php
0,0 → 1,77
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: get_headers.php,v 1.1 2005/05/10 07:50:53 aidan Exp $
 
 
/**
* Replace get_headers()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.get_headers
* @author Aeontech <aeontech@gmail.com>
* @author Cpurruc <cpurruc@fh-landshut.de>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.1 $
* @since PHP 5.0.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('get_headers')) {
function get_headers($url, $format = 0)
{
// Init
$urlinfo = parse_url($url);
$port = isset($urlinfo['port']) ? $urlinfo['port'] : 80;
 
// Connect
$fp = fsockopen($urlinfo['host'], $port, $errno, $errstr, 30);
if ($fp === false) {
return false;
}
// Send request
$head = 'HEAD ' . $urlinfo['path'] .
(isset($urlinfo['query']) ? '?' . $urlinfo['query'] : '') .
' HTTP/1.0' . "\r\n" .
'Host: ' . $urlinfo['host'] . "\r\n\r\n";
fputs($fp, $head);
 
// Read
while (!feof($fp)) {
if ($header = trim(fgets($fp, 1024))) {
list($key) = explode(':', $header);
 
if ($format === 1) {
// First element is the HTTP header type, such as HTTP 200 OK
// It doesn't have a separate name, so check for it
if ($key == $header) {
$headers[] = $header;
} else {
$headers[$key] = substr($header, strlen($key)+2);
}
} else {
$headers[] = $header;
}
}
}
 
return $headers;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/get_include_path.php
0,0 → 1,39
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: get_include_path.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace get_include_path()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.get_include_path
* @author Stephan Schmidt <schst@php.net>
* @version $Revision: 1.4 $
* @since PHP 4.3.0
* @require PHP 4.0.0
*/
if (!function_exists('get_include_path')) {
function get_include_path()
{
return ini_get('include_path');
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/html_entity_decode.php
0,0 → 1,73
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: David Irvine <dave@codexweb.co.za> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: html_entity_decode.php,v 1.8 2005/12/07 21:08:57 aidan Exp $
 
 
if (!defined('ENT_NOQUOTES')) {
define('ENT_NOQUOTES', 0);
}
 
if (!defined('ENT_COMPAT')) {
define('ENT_COMPAT', 2);
}
 
if (!defined('ENT_QUOTES')) {
define('ENT_QUOTES', 3);
}
 
 
/**
* Replace html_entity_decode()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.html_entity_decode
* @author David Irvine <dave@codexweb.co.za>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.8 $
* @since PHP 4.3.0
* @internal Setting the charset will not do anything
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('html_entity_decode')) {
function html_entity_decode($string, $quote_style = ENT_COMPAT, $charset = null)
{
if (!is_int($quote_style)) {
user_error('html_entity_decode() expects parameter 2 to be long, ' .
gettype($quote_style) . ' given', E_USER_WARNING);
return;
}
 
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
 
// Add single quote to translation table;
$trans_tbl['&#039;'] = '\'';
 
// Not translating double quotes
if ($quote_style & ENT_NOQUOTES) {
// Remove double quote from translation table
unset($trans_tbl['&quot;']);
}
 
return strtr($string, $trans_tbl);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/htmlspecialchars_decode.php
0,0 → 1,67
<?PHP
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: htmlspecialchars_decode.php,v 1.3 2005/06/18 14:02:09 aidan Exp $
 
 
/**
* Replace function htmlspecialchars_decode()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.htmlspecialchars_decode
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.3 $
* @since PHP 5.1.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('htmlspecialchars_decode')) {
function htmlspecialchars_decode($string, $quote_style = null)
{
// Sanity check
if (!is_scalar($string)) {
user_error('htmlspecialchars_decode() expects parameter 1 to be string, ' .
gettype($string) . ' given', E_USER_WARNING);
return;
}
 
if (!is_int($quote_style) && $quote_style !== null) {
user_error('htmlspecialchars_decode() expects parameter 2 to be integer, ' .
gettype($quote_style) . ' given', E_USER_WARNING);
return;
}
 
// Init
$from = array('&amp;', '&lt;', '&gt;');
$to = array('&', '<', '>');
// The function does not behave as documented
// This matches the actual behaviour of the function
if ($quote_style & ENT_COMPAT || $quote_style & ENT_QUOTES) {
$from[] = '&quot;';
$to[] = '"';
$from[] = '&#039;';
$to[] = "'";
}
 
return str_replace($from, $to, $string);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/http_build_query.php
0,0 → 1,100
<?PHP
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: http_build_query.php,v 1.16 2005/05/31 08:54:57 aidan Exp $
 
 
/**
* Replace function http_build_query()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.http-build-query
* @author Stephan Schmidt <schst@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.16 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('http_build_query')) {
function http_build_query($formdata, $numeric_prefix = null)
{
// If $formdata is an object, convert it to an array
if (is_object($formdata)) {
$formdata = get_object_vars($formdata);
}
 
// Check we have an array to work with
if (!is_array($formdata)) {
user_error('http_build_query() Parameter 1 expected to be Array or Object. Incorrect value given.',
E_USER_WARNING);
return false;
}
 
// If the array is empty, return null
if (empty($formdata)) {
return;
}
 
// Argument seperator
$separator = ini_get('arg_separator.output');
 
// Start building the query
$tmp = array ();
foreach ($formdata as $key => $val) {
if (is_integer($key) && $numeric_prefix != null) {
$key = $numeric_prefix . $key;
}
 
if (is_scalar($val)) {
array_push($tmp, urlencode($key).'='.urlencode($val));
continue;
}
 
// If the value is an array, recursively parse it
if (is_array($val)) {
array_push($tmp, __http_build_query($val, urlencode($key)));
continue;
}
}
 
return implode($separator, $tmp);
}
 
// Helper function
function __http_build_query ($array, $name)
{
$tmp = array ();
foreach ($array as $key => $value) {
if (is_array($value)) {
array_push($tmp, __http_build_query($value, sprintf('%s[%s]', $name, $key)));
} elseif (is_scalar($value)) {
array_push($tmp, sprintf('%s[%s]=%s', $name, urlencode($key), urlencode($value)));
} elseif (is_object($value)) {
array_push($tmp, __http_build_query(get_object_vars($value), sprintf('%s[%s]', $name, $key)));
}
}
 
// Argument seperator
$separator = ini_get('arg_separator.output');
 
return implode($separator, $tmp);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/ibase_timefmt.php
0,0 → 1,56
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: ibase_timefmt.php,v 1.1 2005/05/10 07:51:07 aidan Exp $
 
 
/**
* Replace function ibase_timefmt()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.ibase_timefmt
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.1 $
* @since PHP 5.0.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('ibase_timefmt')) {
function ibase_timefmt($format, $columntype = IBASE_TIMESTAMP)
{
switch ($columntype) {
case IBASE_TIMESTAMP:
ini_set('ibase.dateformat', $format);
break;
 
case IBASE_DATE:
ini_set('ibase.dateformat', $format);
break;
 
case IBASE_TIME:
ini_set('ibase.timeformat', $format);
break;
 
default:
return false;
}
 
return true;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/idate.php
0,0 → 1,52
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Arpad Ray <arpad@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: idate.php,v 1.2 2005/12/07 21:08:57 aidan Exp $
 
 
/**
* Replace idate()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/idate
* @author Arpad Ray <arpad@php.net>
* @version $Revision: 1.2 $
* @since PHP 5.0.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('idate')) {
function idate($format, $timestamp = false)
{
if (strlen($format) !== 1) {
user_error('idate format is one char', E_USER_WARNING);
return false;
}
 
if (strpos('BdhHiILmstUwWyYzZ', $format) === false) {
return 0;
}
 
if ($timestamp === false) {
$timestamp = time();
}
 
return intval(date($format, $timestamp));
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/image_type_to_mime_type.php
0,0 → 1,147
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: image_type_to_mime_type.php,v 1.8 2005/01/26 04:55:13 aidan Exp $
 
 
if (!defined('IMAGETYPE_GIF')) {
define('IMAGETYPE_GIF', 1);
}
 
if (!defined('IMAGETYPE_JPEG')) {
define('IMAGETYPE_JPEG', 2);
}
 
if (!defined('IMAGETYPE_PNG')) {
define('IMAGETYPE_PNG', 3);
}
 
if (!defined('IMAGETYPE_SWF')) {
define('IMAGETYPE_SWF', 4);
}
 
if (!defined('IMAGETYPE_PSD')) {
define('IMAGETYPE_PSD', 5);
}
 
if (!defined('IMAGETYPE_BMP')) {
define('IMAGETYPE_BMP', 6);
}
 
if (!defined('IMAGETYPE_TIFF_II')) {
define('IMAGETYPE_TIFF_II', 7);
}
 
if (!defined('IMAGETYPE_TIFF_MM')) {
define('IMAGETYPE_TIFF_MM', 8);
}
 
if (!defined('IMAGETYPE_JPC')) {
define('IMAGETYPE_JPC', 9);
}
 
if (!defined('IMAGETYPE_JP2')) {
define('IMAGETYPE_JP2', 10);
}
 
if (!defined('IMAGETYPE_JPX')) {
define('IMAGETYPE_JPX', 11);
}
 
if (!defined('IMAGETYPE_JB2')) {
define('IMAGETYPE_JB2', 12);
}
 
if (!defined('IMAGETYPE_SWC')) {
define('IMAGETYPE_SWC', 13);
}
 
if (!defined('IMAGETYPE_IFF')) {
define('IMAGETYPE_IFF', 14);
}
 
if (!defined('IMAGETYPE_WBMP')) {
define('IMAGETYPE_WBMP', 15);
}
 
if (!defined('IMAGETYPE_XBM')) {
define('IMAGETYPE_XBM', 16);
}
 
 
/**
* Replace image_type_to_mime_type()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.image_type_to_mime_type
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.8 $
* @since PHP 4.3.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('image_type_to_mime_type')) {
function image_type_to_mime_type($imagetype)
{
switch ($imagetype):
case IMAGETYPE_GIF:
return 'image/gif';
break;
case IMAGETYPE_JPEG:
return 'image/jpeg';
break;
case IMAGETYPE_PNG:
return 'image/png';
break;
case IMAGETYPE_SWF:
case IMAGETYPE_SWC:
return 'application/x-shockwave-flash';
break;
case IMAGETYPE_PSD:
return 'image/psd';
break;
case IMAGETYPE_BMP:
return 'image/bmp';
break;
case IMAGETYPE_TIFF_MM:
case IMAGETYPE_TIFF_II:
return 'image/tiff';
break;
case IMAGETYPE_JP2:
return 'image/jp2';
break;
case IMAGETYPE_IFF:
return 'image/iff';
break;
case IMAGETYPE_WBMP:
return 'image/vnd.wap.wbmp';
break;
case IMAGETYPE_XBM:
return 'image/xbm';
break;
case IMAGETYPE_JPX:
case IMAGETYPE_JB2:
case IMAGETYPE_JPC:
default:
return 'application/octet-stream';
break;
 
endswitch;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/inet_ntop.php
0,0 → 1,53
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Arpad Ray <arpad@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: inet_ntop.php,v 1.3 2005/12/05 14:49:40 aidan Exp $
 
 
/**
* Replace inet_ntop()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/inet_ntop
* @author Arpad Ray <arpad@php.net>
* @version $Revision: 1.3 $
* @since PHP 5.1.0
* @require PHP 4.0.0 (long2ip)
*/
if (!function_exists('inet_ntop')) {
function inet_ntop($in_addr)
{
switch (strlen($in_addr)) {
case 4:
list(,$r) = unpack('N', $in_addr);
return long2ip($r);
 
case 16:
$r = substr(chunk_split(bin2hex($in_addr), 4, ':'), 0, -1);
$r = preg_replace(
array('/(?::?\b0+\b:?){2,}/', '/\b0+([^0])/e'),
array('::', '(int)"$1"?"$1":"0$1"'),
$r);
return $r;
}
 
return false;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/inet_pton.php
0,0 → 1,60
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Arpad Ray <arpad@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: inet_pton.php,v 1.2 2005/12/05 14:49:40 aidan Exp $
 
 
/**
* Replace inet_pton()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/inet_pton
* @author Arpad Ray <arpad@php.net>
* @version $Revision: 1.2 $
* @since PHP 5.1.0
* @require PHP 4.2.0 (array_fill)
*/
if (!function_exists('inet_pton')) {
function inet_pton($address)
{
$r = ip2long($address);
if ($r !== false && $r != -1) {
return pack('N', $r);
}
 
$delim_count = substr_count($address, ':');
if ($delim_count < 1 || $delim_count > 7) {
return false;
}
 
$r = explode(':', $address);
$rcount = count($r);
if (($doub = array_search('', $r, 1)) !== false) {
$length = (!$doub || $doub == $rcount - 1 ? 2 : 1);
array_splice($r, $doub, $length, array_fill(0, 8 + $length - $rcount, 0));
}
 
$r = array_map('hexdec', $r);
array_unshift($r, 'n*');
$r = call_user_func_array('pack', $r);
 
return $r;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/ini_get_all.php
0,0 → 1,85
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: ini_get_all.php,v 1.3 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace ini_get_all()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.ini_get_all
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.3 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('ini_get_all')) {
function ini_get_all($extension = null)
{
// Sanity check
if (!is_scalar($extension)) {
user_error('ini_get_all() expects parameter 1 to be string, ' .
gettype($extension) . ' given', E_USER_WARNING);
return false;
}
// Get the location of php.ini
ob_start();
phpinfo(INFO_GENERAL);
$info = ob_get_contents();
ob_clean();
$info = explode("\n", $info);
$line = array_values(preg_grep('#php.ini#', $info));
list (, $value) = explode('<td class="v">', $line[0]);
$inifile = trim(strip_tags($value));
 
// Parse
if ($extension !== null) {
$ini_all = parse_ini_file($inifile, true);
 
// Lowercase extension keys
foreach ($ini_all as $key => $value) {
$ini_arr[strtolower($key)] = $value;
}
 
$ini = $ini_arr[$extension];
} else {
$ini = parse_ini_file($inifile);
}
 
// Order
$ini_lc = array_map('strtolower', array_keys($ini));
array_multisort($ini_lc, SORT_ASC, SORT_STRING, $ini);
 
// Format
$info = array();
foreach ($ini as $key => $value) {
$info[$key] = array(
'global_value' => $value,
'local_value' => ini_get($key),
// No way to know this
'access' => -1
);
}
 
return $info;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/is_a.php
0,0 → 1,47
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: is_a.php,v 1.16 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace function is_a()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.is_a
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.16 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error) (is_subclass_of)
*/
if (!function_exists('is_a')) {
function is_a($object, $class)
{
if (!is_object($object)) {
return false;
}
 
if (get_class($object) == strtolower($class)) {
return true;
} else {
return is_subclass_of($object, $class);
}
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/md5_file.php
0,0 → 1,82
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: md5_file.php,v 1.3 2005/11/22 08:29:19 aidan Exp $
 
 
/**
* Replace md5_file()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/md5_file
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.3 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('md5_file')) {
function md5_file($filename, $raw_output = false)
{
// Sanity check
if (!is_scalar($filename)) {
user_error('md5_file() expects parameter 1 to be string, ' .
gettype($filename) . ' given', E_USER_WARNING);
return;
}
 
if (!is_scalar($raw_output)) {
user_error('md5_file() expects parameter 2 to be bool, ' .
gettype($raw_output) . ' given', E_USER_WARNING);
return;
}
 
if (!file_exists($filename)) {
user_error('md5_file() Unable to open file', E_USER_WARNING);
return false;
}
// Read the file
if (false === $fh = fopen($filename, 'rb')) {
user_error('md5_file() failed to open stream: No such file or directory',
E_USER_WARNING);
return false;
}
 
clearstatcache();
if ($fsize = @filesize($filename)) {
$data = fread($fh, $fsize);
} else {
$data = '';
while (!feof($fh)) {
$data .= fread($fh, 8192);
}
}
 
fclose($fh);
 
// Return
$data = md5($data);
if ($raw_output === true) {
$data = pack('H*', $data);
}
 
return $data;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/mhash.php
0,0 → 1,115
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: mhash.php,v 1.1 2005/05/10 07:56:44 aidan Exp $
 
 
if (!defined('MHASH_CRC32')) {
define('MHASH_CRC32', 0);
}
 
if (!defined('MHASH_MD5')) {
define('MHASH_MD5', 1);
}
 
if (!defined('MHASH_SHA1')) {
define('MHASH_SHA1', 2);
}
 
if (!defined('MHASH_HAVAL256')) {
define('MHASH_HAVAL256', 3);
}
 
if (!defined('MHASH_RIPEMD160')) {
define('MHASH_RIPEMD160', 5);
}
 
if (!defined('MHASH_TIGER')) {
define('MHASH_TIGER', 7);
}
 
if (!defined('MHASH_GOST')) {
define('MHASH_GOST', 8);
}
 
if (!defined('MHASH_CRC32B')) {
define('MHASH_CRC32B', 9);
}
 
if (!defined('MHASH_HAVAL192')) {
define('MHASH_HAVAL192', 11);
}
 
if (!defined('MHASH_HAVAL160')) {
define('MHASH_HAVAL160', 12);
}
 
if (!defined('MHASH_HAVAL128')) {
define('MHASH_HAVAL128', 13);
}
 
if (!defined('MHASH_TIGER128')) {
define('MHASH_TIGER128', 14);
}
 
if (!defined('MHASH_TIGER160')) {
define('MHASH_TIGER160', 15);
}
 
if (!defined('MHASH_MD4')) {
define('MHASH_MD4', 16);
}
 
if (!defined('MHASH_SHA256')) {
define('MHASH_SHA256', 17);
}
 
if (!defined('MHASH_ADLER32')) {
define('MHASH_ADLER32', 18);
}
 
 
/**
* Replace mhash()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.mhash
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.1 $
* @since PHP 4.1.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('mhash')) {
function mhash($hashtype, $data, $key = '')
{
switch ($hashtype) {
case MHASH_MD5:
$key = str_pad((strlen($key) > 64 ? pack("H*", md5($key)) : $key), 64, chr(0x00));
$k_opad = $key ^ (str_pad('', 64, chr(0x5c)));
$k_ipad = $key ^ (str_pad('', 64, chr(0x36)));
return pack("H*", md5($k_opad . pack("H*", md5($k_ipad . $data))));
 
default:
return false;
 
break;
}
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/mime_content_type.php
0,0 → 1,63
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Ian Eure <ieure@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: mime_content_type.php,v 1.3 2005/12/07 21:08:57 aidan Exp $
 
 
/**
* Replace mime_content_type()
*
* You will need the `file` command installed and present in your $PATH. If
* `file` is not available, the type 'application/octet-stream' is returned
* for all files.
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.mime_content_type
* @version $Revision: 1.3 $
* @author Ian Eure <ieure@php.net>
* @since PHP 4.3.0
* @require PHP 4.0.3 (escapeshellarg)
*/
if (!function_exists('mime_content_type')) {
function mime_content_type($filename)
{
// Sanity check
if (!file_exists($filename)) {
return false;
}
 
$filename = escapeshellarg($filename);
$out = `file -iL $filename 2>/dev/null`;
if (empty($out)) {
return 'application/octet-stream';
}
 
// Strip off filename
$t = substr($out, strpos($out, ':') + 2);
 
if (strpos($t, ';') !== false) {
// Strip MIME parameters
$t = substr($t, 0, strpos($t, ';'));
}
 
// Strip any remaining whitespace
return trim($t);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/ob_clean.php
0,0 → 1,46
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: ob_clean.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace ob_clean()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.ob_clean
* @author Aidan Lister <aidan@php.net>
* @author Thiemo Mättig (http://maettig.com/)
* @version $Revision: 1.6 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('ob_clean')) {
function ob_clean()
{
if (@ob_end_clean()) {
return ob_start();
}
 
user_error("ob_clean() failed to delete buffer. No buffer to delete.", E_USER_NOTICE);
 
return false;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/ob_flush.php
0,0 → 1,46
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: ob_flush.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace ob_flush()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.ob_flush
* @author Aidan Lister <aidan@php.net>
* @author Thiemo Mättig (http://maettig.com/)
* @version $Revision: 1.6 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('ob_flush')) {
function ob_flush()
{
if (@ob_end_flush()) {
return ob_start();
}
 
user_error("ob_flush() Failed to flush buffer. No buffer to flush.", E_USER_NOTICE);
 
return false;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/ob_get_clean.php
0,0 → 1,46
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: ob_get_clean.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace ob_get_clean()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.ob_get_clean
* @author Aidan Lister <aidan@php.net>
* @author Thiemo Mättig (http://maettig.com/)
* @version $Revision: 1.6 $
* @since PHP 4.3.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('ob_get_clean')) {
function ob_get_clean()
{
$contents = ob_get_contents();
 
if ($contents !== false) {
ob_end_clean();
}
 
return $contents;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/ob_get_flush.php
0,0 → 1,46
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: ob_get_flush.php,v 1.6 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace ob_get_flush()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.ob_get_flush
* @author Aidan Lister <aidan@php.net>
* @author Thiemo Mättig (http://maettig.com/)
* @version $Revision: 1.6 $
* @since PHP 4.3.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('ob_get_flush')) {
function ob_get_flush()
{
$contents = ob_get_contents();
 
if ($contents !== false) {
ob_end_flush();
}
 
return $contents;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/pg_affected_rows.php
0,0 → 1,40
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Ian Eure <ieure@php.net> |
// | Mocha (http://us4.php.net/pg_escape_bytea) |
// +----------------------------------------------------------------------+
//
// $Id: pg_affected_rows.php,v 1.1 2005/05/10 07:56:51 aidan Exp $
 
 
/**
* Replace pg_affected_rows()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.pg_affectd_rows
* @author Ian Eure <ieure@php.net>
* @version $Revision@
* @since PHP 4.2.0
* @require PHP 4.0.0
*/
if (!function_exists('pg_affected_rows')) {
function pg_affected_rows($resource)
{
return pg_cmdtuples($resource);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/pg_escape_bytea.php
0,0 → 1,43
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Ian Eure <ieure@php.net> |
// | Mocha (http://us4.php.net/pg_escape_bytea) |
// +----------------------------------------------------------------------+
//
// $Id: pg_escape_bytea.php,v 1.1 2005/05/10 07:56:51 aidan Exp $
 
 
/**
* Replace pg_escape_bytea()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.pg_escape_bytea
* @author Ian Eure <ieure@php.net>
* @version $Revision@
* @since PHP 4.2.0
* @require PHP 4.0.0
*/
if (!function_exists('pg_escape_bytea')) {
function pg_escape_bytea($data)
{
return str_replace(
array(chr(92), chr(0), chr(39)),
array('\\\134', '\\\000', '\\\047'),
$data);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/pg_unescape_bytea.php
0,0 → 1,43
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Ian Eure <ieure@php.net> |
// | Tobias <php@tobias.olsson.be> |
// +----------------------------------------------------------------------+
//
// $Id: pg_unescape_bytea.php,v 1.2 2005/12/07 21:08:57 aidan Exp $
 
 
/**
* Replace pg_unescape_bytea()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.pg_unescape_bytea
* @author Ian Eure <ieure@php.net>
* @version $Revision@
* @since PHP 4.2.0
* @require PHP 4.0.0
*/
if (!function_exists('pg_unescape_bytea')) {
function pg_unescape_bytea(&$data)
{
return str_replace(
array('$', '"'),
array('\\$', '\\"'),
$data);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/php_strip_whitespace.php
0,0 → 1,86
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: php_strip_whitespace.php,v 1.10 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace php_strip_whitespace()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.php_strip_whitespace
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.10 $
* @since PHP 5
* @require PHP 4.0.0 (user_error) + Tokenizer extension
*/
if (!function_exists('php_strip_whitespace')) {
function php_strip_whitespace($file)
{
// Sanity check
if (!is_scalar($file)) {
user_error('php_strip_whitespace() expects parameter 1 to be string, ' .
gettype($file) . ' given', E_USER_WARNING);
return;
}
 
// Load file / tokens
$source = implode('', file($file));
$tokens = token_get_all($source);
 
// Init
$source = '';
$was_ws = false;
 
// Process
foreach ($tokens as $token) {
if (is_string($token)) {
// Single character tokens
$source .= $token;
} else {
list($id, $text) = $token;
switch ($id) {
// Skip all comments
case T_COMMENT:
case T_ML_COMMENT:
case T_DOC_COMMENT:
break;
 
// Remove whitespace
case T_WHITESPACE:
// We don't want more than one whitespace in a row replaced
if ($was_ws !== true) {
$source .= ' ';
}
$was_ws = true;
break;
 
default:
$was_ws = false;
$source .= $text;
break;
}
}
}
 
return $source;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/restore_include_path.php
0,0 → 1,38
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: restore_include_path.php,v 1.4 2005/12/07 21:08:57 aidan Exp $
 
 
/**
* Replace restore_include_path()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.restore_include_path
* @author Stephan Schmidt <schst@php.net>
* @version $Revision: 1.4 $
* @since PHP 4.3.0
*/
if (!function_exists('restore_include_path')) {
function restore_include_path()
{
return ini_restore('include_path');
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/scandir.php
0,0 → 1,69
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: scandir.php,v 1.18 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace scandir()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.scandir
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.18 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('scandir')) {
function scandir($directory, $sorting_order = 0)
{
if (!is_string($directory)) {
user_error('scandir() expects parameter 1 to be string, ' .
gettype($directory) . ' given', E_USER_WARNING);
return;
}
 
if (!is_int($sorting_order) && !is_bool($sorting_order)) {
user_error('scandir() expects parameter 2 to be long, ' .
gettype($sorting_order) . ' given', E_USER_WARNING);
return;
}
 
if (!is_dir($directory) || (false === $fh = @opendir($directory))) {
user_error('scandir() failed to open dir: Invalid argument', E_USER_WARNING);
return false;
}
 
$files = array ();
while (false !== ($filename = readdir($fh))) {
$files[] = $filename;
}
 
closedir($fh);
 
if ($sorting_order == 1) {
rsort($files);
} else {
sort($files);
}
 
return $files;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/set_include_path.php
0,0 → 1,38
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: set_include_path.php,v 1.4 2005/12/07 21:08:57 aidan Exp $
 
 
/**
* Replace set_include_path()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.set_include_path
* @author Stephan Schmidt <schst@php.net>
* @version $Revision: 1.4 $
* @since PHP 4.3.0
*/
if (!function_exists('set_include_path')) {
function set_include_path($new_include_path)
{
return ini_set('include_path', $new_include_path);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/str_ireplace.php
0,0 → 1,113
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: str_ireplace.php,v 1.18 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace str_ireplace()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.str_ireplace
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.18 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
* @note count not by returned by reference, to enable
* change '$count = null' to '&$count'
*/
if (!function_exists('str_ireplace')) {
function str_ireplace($search, $replace, $subject, $count = null)
{
// Sanity check
if (is_string($search) && is_array($replace)) {
user_error('Array to string conversion', E_USER_NOTICE);
$replace = (string) $replace;
}
 
// If search isn't an array, make it one
if (!is_array($search)) {
$search = array ($search);
}
$search = array_values($search);
 
// If replace isn't an array, make it one, and pad it to the length of search
if (!is_array($replace)) {
$replace_string = $replace;
 
$replace = array ();
for ($i = 0, $c = count($search); $i < $c; $i++) {
$replace[$i] = $replace_string;
}
}
$replace = array_values($replace);
 
// Check the replace array is padded to the correct length
$length_replace = count($replace);
$length_search = count($search);
if ($length_replace < $length_search) {
for ($i = $length_replace; $i < $length_search; $i++) {
$replace[$i] = '';
}
}
 
// If subject is not an array, make it one
$was_array = false;
if (!is_array($subject)) {
$was_array = true;
$subject = array ($subject);
}
 
// Loop through each subject
$count = 0;
foreach ($subject as $subject_key => $subject_value) {
// Loop through each search
foreach ($search as $search_key => $search_value) {
// Split the array into segments, in between each part is our search
$segments = explode(strtolower($search_value), strtolower($subject_value));
 
// The number of replacements done is the number of segments minus the first
$count += count($segments) - 1;
$pos = 0;
 
// Loop through each segment
foreach ($segments as $segment_key => $segment_value) {
// Replace the lowercase segments with the upper case versions
$segments[$segment_key] = substr($subject_value, $pos, strlen($segment_value));
// Increase the position relative to the initial string
$pos += strlen($segment_value) + strlen($search_value);
}
 
// Put our original string back together
$subject_value = implode($replace[$search_key], $segments);
}
 
$result[$subject_key] = $subject_value;
}
 
// Check if subject was initially a string and return it as a string
if ($was_array === true) {
return $result[0];
}
 
// Otherwise, just return the array
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/str_rot13.php
0,0 → 1,43
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Alan Morey <alan@caint.com> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: str_rot13.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace str_rot13()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.str_rot13
* @author Alan Morey <alan@caint.com>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.4 $
* @since PHP 4.0.0
*/
if (!function_exists('str_rot13')) {
function str_rot13($str)
{
$from = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$to = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM';
 
return strtr($str, $from, $to);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/str_shuffle.php
0,0 → 1,52
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: str_shuffle.php,v 1.6 2005/08/14 03:24:16 aidan Exp $
 
 
/**
* Replace str_shuffle()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.str_shuffle
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.6 $
* @since PHP 4.3.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('str_shuffle')) {
function str_shuffle($str)
{
// Init
$str = (string) $str;
 
// Seed
list($usec, $sec) = explode(' ', microtime());
$seed = (float) $sec + ((float) $usec * 100000);
mt_srand($seed);
 
// Shuffle
for ($new = '', $len = strlen($str); $len > 0; $str{$p} = $str{$len}) {
$new .= $str{$p = mt_rand(0, --$len)};
}
 
return $new;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/str_split.php
0,0 → 1,71
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: str_split.php,v 1.15 2005/06/18 12:15:32 aidan Exp $
 
 
/**
* Replace str_split()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.str_split
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.15 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('str_split')) {
function str_split($string, $split_length = 1)
{
if (!is_scalar($split_length)) {
user_error('str_split() expects parameter 2 to be long, ' .
gettype($split_length) . ' given', E_USER_WARNING);
return false;
}
 
$split_length = (int) $split_length;
if ($split_length < 1) {
user_error('str_split() The length of each segment must be greater than zero', E_USER_WARNING);
return false;
}
// Select split method
if ($split_length < 65536) {
// Faster, but only works for less than 2^16
preg_match_all('/.{1,' . $split_length . '}/s', $string, $matches);
return $matches[0];
} else {
// Required due to preg limitations
$arr = array();
$idx = 0;
$pos = 0;
$len = strlen($string);
 
while ($len > 0) {
$blk = ($len < $split_length) ? $len : $split_length;
$arr[$idx++] = substr($string, $pos, $blk);
$pos += $blk;
$len -= $blk;
}
 
return $arr;
}
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/str_word_count.php
0,0 → 1,68
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: str_word_count.php,v 1.9 2005/02/28 11:45:28 aidan Exp $
 
 
/**
* Replace str_word_count()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.str_word_count
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.9 $
* @since PHP 4.3.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('str_word_count')) {
function str_word_count($string, $format = null)
{
if ($format !== 1 && $format !== 2 && $format !== null) {
user_error('str_word_count() The specified format parameter, "' . $format . '" is invalid',
E_USER_WARNING);
return false;
}
 
$word_string = preg_replace('/[0-9]+/', '', $string);
$word_array = preg_split('/[^A-Za-z0-9_\']+/', $word_string, -1, PREG_SPLIT_NO_EMPTY);
 
switch ($format) {
case null:
$result = count($word_array);
break;
 
case 1:
$result = $word_array;
break;
 
case 2:
$lastmatch = 0;
$word_assoc = array();
foreach ($word_array as $word) {
$word_assoc[$lastmatch = strpos($string, $word, $lastmatch)] = $word;
$lastmatch += strlen($word);
}
$result = $word_assoc;
break;
}
 
return $result;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/stripos.php
0,0 → 1,73
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: stripos.php,v 1.13 2005/05/30 20:33:03 aidan Exp $
 
 
/**
* Replace stripos()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.stripos
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.13 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('stripos')) {
function stripos($haystack, $needle, $offset = null)
{
if (!is_scalar($haystack)) {
user_error('stripos() expects parameter 1 to be string, ' .
gettype($haystack) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_scalar($needle)) {
user_error('stripos() needle is not a string or an integer.', E_USER_WARNING);
return false;
}
 
if (!is_int($offset) && !is_bool($offset) && !is_null($offset)) {
user_error('stripos() expects parameter 3 to be long, ' .
gettype($offset) . ' given', E_USER_WARNING);
return false;
}
 
// Manipulate the string if there is an offset
$fix = 0;
if (!is_null($offset)) {
if ($offset > 0) {
$haystack = substr($haystack, $offset, strlen($haystack) - $offset);
$fix = $offset;
}
}
 
$segments = explode(strtolower($needle), strtolower($haystack), 2);
 
// Check there was a match
if (count($segments) === 1) {
return false;
}
 
$position = strlen($segments[0]) + $fix;
return $position;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/strpbrk.php
0,0 → 1,63
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stephan Schmidt <schst@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: strpbrk.php,v 1.4 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace strpbrk()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.strpbrk
* @author Stephan Schmidt <schst@php.net>
* @version $Revision: 1.4 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('strpbrk')) {
function strpbrk($haystack, $char_list)
{
if (!is_scalar($haystack)) {
user_error('strpbrk() expects parameter 1 to be string, ' .
gettype($haystack) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_scalar($char_list)) {
user_error('strpbrk() expects parameter 2 to be scalar, ' .
gettype($needle) . ' given', E_USER_WARNING);
return false;
}
 
$haystack = (string) $haystack;
$char_list = (string) $char_list;
 
$len = strlen($haystack);
for ($i = 0; $i < $len; $i++) {
$char = substr($haystack, $i, 1);
if (strpos($char_list, $char) === false) {
continue;
}
return substr($haystack, $i);
}
 
return false;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/strripos.php
0,0 → 1,79
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// | Stephan Schmidt <schst@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: strripos.php,v 1.24 2005/08/10 10:19:59 aidan Exp $
 
 
/**
* Replace strripos()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.strripos
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.24 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('strripos')) {
function strripos($haystack, $needle, $offset = null)
{
// Sanity check
if (!is_scalar($haystack)) {
user_error('strripos() expects parameter 1 to be scalar, ' .
gettype($haystack) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_scalar($needle)) {
user_error('strripos() expects parameter 2 to be scalar, ' .
gettype($needle) . ' given', E_USER_WARNING);
return false;
}
 
if (!is_int($offset) && !is_bool($offset) && !is_null($offset)) {
user_error('strripos() expects parameter 3 to be long, ' .
gettype($offset) . ' given', E_USER_WARNING);
return false;
}
 
// Initialise variables
$needle = strtolower($needle);
$haystack = strtolower($haystack);
$needle_fc = $needle{0};
$needle_len = strlen($needle);
$haystack_len = strlen($haystack);
$offset = (int) $offset;
$leftlimit = ($offset >= 0) ? $offset : 0;
$p = ($offset >= 0) ?
$haystack_len :
$haystack_len + $offset + 1;
 
// Reverse iterate haystack
while (--$p >= $leftlimit) {
if ($needle_fc === $haystack{$p} &&
substr($haystack, $p, $needle_len) === $needle) {
return $p;
}
}
 
return false;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/substr_compare.php
0,0 → 1,74
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Tom Buskens <ortega@php.net> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: substr_compare.php,v 1.5 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace substr_compare()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.substr_compare
* @author Tom Buskens <ortega@php.net>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.5 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('substr_compare')) {
function substr_compare($main_str, $str, $offset, $length = null, $case_insensitive = false)
{
if (!is_string($main_str)) {
user_error('substr_compare() expects parameter 1 to be string, ' .
gettype($main_str) . ' given', E_USER_WARNING);
return;
}
 
if (!is_string($str)) {
user_error('substr_compare() expects parameter 2 to be string, ' .
gettype($str) . ' given', E_USER_WARNING);
return;
}
if (!is_int($offset)) {
user_error('substr_compare() expects parameter 3 to be long, ' .
gettype($offset) . ' given', E_USER_WARNING);
return;
}
if (is_null($length)) {
$length = strlen($main_str) - $offset;
} elseif ($offset >= strlen($main_str)) {
user_error('substr_compare() The start position cannot exceed initial string length',
E_USER_WARNING);
return false;
}
 
$main_str = substr($main_str, $offset, $length);
$str = substr($str, 0, strlen($main_str));
 
if ($case_insensitive === false) {
return strcmp($main_str, $str);
} else {
return strcasecmp($main_str, $str);
}
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/time_sleep_until.php
0,0 → 1,48
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Arpad Ray <arpad@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: time_sleep_until.php,v 1.2 2005/12/07 21:08:57 aidan Exp $
 
 
/**
* Replace time_sleep_until()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/time_sleep_until
* @author Arpad Ray <arpad@php.net>
* @version $Revision: 1.2 $
* @since PHP 5.1.0
* @require PHP 4.0.1 (trigger_error)
*/
if (!function_exists('time_sleep_until')) {
function time_sleep_until($timestamp)
{
list($usec, $sec) = explode(' ', microtime());
$now = $sec + $usec;
if ($timestamp <= $now) {
user_error('Specified timestamp is in the past', E_USER_WARNING);
return false;
}
 
$diff = $timestamp - $now;
usleep($diff * 1000000);
return true;
}
}
?>
/WebSVN/include/PHP/Compat/Function/var_export.php
0,0 → 1,136
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: var_export.php,v 1.15 2005/12/05 14:24:27 aidan Exp $
 
 
/**
* Replace var_export()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.var_export
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.15 $
* @since PHP 4.2.0
* @require PHP 4.0.0 (user_error)
*/
if (!function_exists('var_export')) {
function var_export($var, $return = false, $level = 0)
{
// Init
$indent = ' ';
$doublearrow = ' => ';
$lineend = ",\n";
$stringdelim = '\'';
$newline = "\n";
$find = array(null, '\\', '\'');
$replace = array('NULL', '\\\\', '\\\'');
$out = '';
// Indent
$level++;
for ($i = 1, $previndent = ''; $i < $level; $i++) {
$previndent .= $indent;
}
 
// Handle each type
switch (gettype($var)) {
// Array
case 'array':
$out = 'array (' . $newline;
foreach ($var as $key => $value) {
// Key
if (is_string($key)) {
// Make key safe
for ($i = 0, $c = count($find); $i < $c; $i++) {
$var = str_replace($find[$i], $replace[$i], $var);
}
$key = $stringdelim . $key . $stringdelim;
}
// Value
if (is_array($value)) {
$export = var_export($value, true, $level);
$value = $newline . $previndent . $indent . $export;
} else {
$value = var_export($value, true, $level);
}
 
// Piece line together
$out .= $previndent . $indent . $key . $doublearrow . $value . $lineend;
}
 
// End string
$out .= $previndent . ')';
break;
 
// String
case 'string':
// Make the string safe
for ($i = 0, $c = count($find); $i < $c; $i++) {
$var = str_replace($find[$i], $replace[$i], $var);
}
$out = $stringdelim . $var . $stringdelim;
break;
 
// Number
case 'integer':
case 'double':
$out = (string) $var;
break;
// Boolean
case 'boolean':
$out = $var ? 'true' : 'false';
break;
 
// NULLs
case 'NULL':
case 'resource':
$out = 'NULL';
break;
 
// Objects
case 'object':
// Start the object export
$out = $newline . $previndent . 'class ' . get_class($var) . ' {' . $newline;
 
// Export the object vars
foreach (get_object_vars($var) as $key => $val) {
$out .= $previndent . ' var $' . $key . ' = ';
if (is_array($val)) {
$export = var_export($val, true, $level);
$out .= $newline . $previndent . $indent . $export . ';' . $newline;
} else {
$out .= var_export($val, true, $level) . ';' . $newline;
}
}
$out .= $previndent . '}';
break;
}
 
// Method of output
if ($return === true) {
return $out;
} else {
echo $out;
}
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/version_compare.php
0,0 → 1,182
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Philippe Jausions <Philippe.Jausions@11abacus.com> |
// | Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: version_compare.php,v 1.13 2005/08/01 12:21:14 aidan Exp $
 
 
/**
* Replace version_compare()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.version_compare
* @author Philippe Jausions <Philippe.Jausions@11abacus.com>
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.13 $
* @since PHP 4.1.0
* @require PHP 4.0.5 (user_error)
*/
if (!function_exists('version_compare')) {
function version_compare($version1, $version2, $operator = '<')
{
// Check input
if (!is_scalar($version1)) {
user_error('version_compare() expects parameter 1 to be string, ' .
gettype($version1) . ' given', E_USER_WARNING);
return;
}
 
if (!is_scalar($version2)) {
user_error('version_compare() expects parameter 2 to be string, ' .
gettype($version2) . ' given', E_USER_WARNING);
return;
}
 
if (!is_scalar($operator)) {
user_error('version_compare() expects parameter 3 to be string, ' .
gettype($operator) . ' given', E_USER_WARNING);
return;
}
 
// Standardise versions
$v1 = explode('.',
str_replace('..', '.',
preg_replace('/([^0-9\.]+)/', '.$1.',
str_replace(array('-', '_', '+'), '.',
trim($version1)))));
 
$v2 = explode('.',
str_replace('..', '.',
preg_replace('/([^0-9\.]+)/', '.$1.',
str_replace(array('-', '_', '+'), '.',
trim($version2)))));
 
// Replace empty entries at the start of the array
while (empty($v1[0]) && array_shift($v1)) {}
while (empty($v2[0]) && array_shift($v2)) {}
 
// Release state order
// '#' stands for any number
$versions = array(
'dev' => 0,
'alpha' => 1,
'a' => 1,
'beta' => 2,
'b' => 2,
'RC' => 3,
'#' => 4,
'p' => 5,
'pl' => 5);
 
// Loop through each segment in the version string
$compare = 0;
for ($i = 0, $x = min(count($v1), count($v2)); $i < $x; $i++) {
if ($v1[$i] == $v2[$i]) {
continue;
}
$i1 = $v1[$i];
$i2 = $v2[$i];
if (is_numeric($i1) && is_numeric($i2)) {
$compare = ($i1 < $i2) ? -1 : 1;
break;
}
 
// We use the position of '#' in the versions list
// for numbers... (so take care of # in original string)
if ($i1 == '#') {
$i1 = '';
} elseif (is_numeric($i1)) {
$i1 = '#';
}
 
if ($i2 == '#') {
$i2 = '';
} elseif (is_numeric($i2)) {
$i2 = '#';
}
 
if (isset($versions[$i1]) && isset($versions[$i2])) {
$compare = ($versions[$i1] < $versions[$i2]) ? -1 : 1;
} elseif (isset($versions[$i1])) {
$compare = 1;
} elseif (isset($versions[$i2])) {
$compare = -1;
} else {
$compare = 0;
}
 
break;
}
 
// If previous loop didn't find anything, compare the "extra" segments
if ($compare == 0) {
if (count($v2) > count($v1)) {
if (isset($versions[$v2[$i]])) {
$compare = ($versions[$v2[$i]] < 4) ? 1 : -1;
} else {
$compare = -1;
}
} elseif (count($v2) < count($v1)) {
if (isset($versions[$v1[$i]])) {
$compare = ($versions[$v1[$i]] < 4) ? -1 : 1;
} else {
$compare = 1;
}
}
}
 
// Compare the versions
if (func_num_args() > 2) {
switch ($operator) {
case '>':
case 'gt':
return (bool) ($compare > 0);
break;
case '>=':
case 'ge':
return (bool) ($compare >= 0);
break;
case '<=':
case 'le':
return (bool) ($compare <= 0);
break;
case '==':
case '=':
case 'eq':
return (bool) ($compare == 0);
break;
case '<>':
case '!=':
case 'ne':
return (bool) ($compare != 0);
break;
case '':
case '<':
case 'lt':
return (bool) ($compare < 0);
break;
default:
return;
}
}
 
return $compare;
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/vprintf.php
0,0 → 1,45
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: vprintf.php,v 1.14 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace vprintf()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.vprintf
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.14 $
* @since PHP 4.1.0
* @require PHP 4.0.4 (call_user_func_array)
*/
if (!function_exists('vprintf')) {
function vprintf ($format, $args)
{
if (count($args) < 2) {
user_error('vprintf() Too few arguments', E_USER_WARNING);
return;
}
 
array_unshift($args, $format);
return call_user_func_array('printf', $args);
}
}
 
?>
/WebSVN/include/PHP/Compat/Function/vsprintf.php
0,0 → 1,45
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: vsprintf.php,v 1.10 2005/01/26 04:55:13 aidan Exp $
 
 
/**
* Replace vsprintf()
*
* @category PHP
* @package PHP_Compat
* @link http://php.net/function.vsprintf
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.10 $
* @since PHP 4.1.0
* @require PHP 4.0.4 (call_user_func_array)
*/
if (!function_exists('vsprintf')) {
function vsprintf ($format, $args)
{
if (count($args) < 2) {
user_error('vsprintf() Too few arguments', E_USER_WARNING);
return;
}
 
array_unshift($args, $format);
return call_user_func_array('sprintf', $args);
}
}
 
?>
/WebSVN/include/PHP/Compat.php
0,0 → 1,133
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Aidan Lister <aidan@php.net> |
// +----------------------------------------------------------------------+
//
// $Id: Compat.php,v 1.19 2005/05/10 12:05:36 aidan Exp $
 
 
/**
* Provides missing functionality in the form of constants and functions
* for older versions of PHP
*
* Optionally, you may simply include the file.
* e.g. require_once 'PHP/Compat/Function/scandir.php';
*
* @category PHP
* @package PHP_Compat
* @version $Revision: 1.19 $
* @author Aidan Lister <aidan@php.net>
* @static
*/
class PHP_Compat
{
/**
* Load a function, or array of functions
*
* @param string|array $function The function or functions to load
* @return bool|array TRUE if loaded, FALSE if not
*/
function loadFunction($function)
{
// Recursiveness
if (is_array($function)) {
$res = array();
foreach ($function as $singlefunc) {
$res[$singlefunc] = PHP_Compat::loadFunction($singlefunc);
}
 
return $res;
}
 
// Load function
if (!function_exists($function)) {
$file = sprintf('PHP/Compat/Function/%s.php', $function);
if ((@include_once $file) !== false) {
return true;
}
}
 
return false;
}
 
 
/**
* Load a constant, or array of constants
*
* @param string|array $constant The constant or constants to load
* @return bool|array TRUE if loaded, FALSE if not
*/
function loadConstant($constant)
{
// Recursiveness
if (is_array($constant)) {
$res = array();
foreach ($constant as $singleconst) {
$res[$singleconst] = PHP_Compat::loadConstant($singleconst);
}
 
return $res;
}
 
// Load constant
$file = sprintf('PHP/Compat/Constant/%s.php', $constant);
if ((@include_once $file) !== false) {
return true;
}
 
return false;
}
 
 
/**
* Load components for a PHP version
*
* @param string $version PHP Version to load
* @return array An associative array of component names loaded
*/
function loadVersion($version = null)
{
// Include list of components
require 'PHP/Compat/Components.php';
 
// Include version_compare to work with older versions
PHP_Compat::loadFunction('version_compare');
 
// Init
$phpversion = phpversion();
$methods = array(
'function' => 'loadFunction',
'constant' => 'loadConstant');
$res = array();
 
// Iterate each component
foreach ($components as $type => $slice) {
foreach ($slice as $component => $compversion) {
if (($version === null &&
1 === version_compare($compversion, $phpversion)) || // C > PHP
(0 === version_compare($compversion, $version) || // C = S
1 === version_compare($compversion, $phpversion))) { // C > PHP
$res[$type][$component] =
call_user_func(array('PHP_Compat', $methods[$type]), $component);
}
}
}
 
return $res;
}
}
 
?>
/WebSVN/include/header
1,5 → 1,7
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
/WebSVN/include/accessfile.inc
0,0 → 1,102
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// accessfile.inc
//
// Read a .ini style file
 
class IniFile
{
var $sections;
// {{{ __construct
 
function IniFile()
{
$this->sections = array();
}
 
// }}}
// {{{ readIniFile
 
function readIniFile ($name)
{
$contents = file($name);
$cursection = '';
$first = true;
foreach ($contents as $str)
{
$str = trim($str);
if (empty($str)) continue;
if ($str{0} == '#' or $str{0} == "'")
continue;
if ($str{0} == '[')
{
$cursection = strtolower(substr($str, 1, strlen($str) - 2));
if (!($str{strlen($str) - 2} == '/' or $str == '[groups]')) $cursection .= '/';
$first = true;
}
elseif (!empty($cursection))
{
if ($first === true) $this->sections[$cursection] = array();
list ($key, $val) = split('=', $str);
$this->sections[$cursection][strtolower(trim($key))] = strtolower(trim($val));
$first = false;
}
}
}
 
// }}}
 
// {{{ getSections
 
function &getSections()
{
return $this->sections;
}
 
// }}}
 
// {{{ getValues
 
function getValues($section)
{
return @$this->sections[strtolower($section)];
}
 
// }}}
 
// {{{ getValue
 
function getValue($section, $key)
{
return @$this->sections[strtolower($section)][strtolower($key)];
}
 
// }}}
}
 
?>
/WebSVN/dl.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
20,307 → 22,101
//
// dl.php
//
// Allow for file and directory downloads, creating zip/tar/gz files if needed.
// Create gz/tar files of the requested item
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/utils.inc");
 
if (!defined('USE_AUTOLOADER')) {
@include_once 'Archive/Tar.php';
}
// Make sure that this operation is allowed
 
function setDirectoryTimestamp($dir, $timestamp) {
global $config;
// Changing the timestamp of a directory in Windows is only supported in PHP 5.3.0+
touch($dir, $timestamp);
if (is_dir($dir)) {
// Set timestamp for all contents, recursing into subdirectories
$handle = opendir($dir);
if ($handle) {
while (($file = readdir($handle)) !== false) {
if ($file == '.' || $file == '..') {
continue;
}
$f = $dir.DIRECTORY_SEPARATOR.$file;
if (is_dir($f)) {
setDirectoryTimestamp($f, $timestamp);
}
}
closedir($handle);
}
}
}
 
// Make sure that downloading the specified file/directory is permitted
 
if (!$rep)
{
http_response_code(404);
if (!$rep->isDownloadAllowed($path))
exit;
}
 
if (!$rep->isDownloadAllowed($path)) {
http_response_code(403);
error_log('Unable to download resource at path: '.$path);
print 'Unable to download resource at path: '.xml_entities($path);
exit;
}
 
$svnrep = new SVNRepository($rep);
 
// Fetch information about a revision (if unspecified, the latest) for this path
if (empty($rev))
{
$history = $svnrep->getLog($path, 'HEAD', '', true, 1, $peg);
}
else if ($rev == $peg)
{
$history = $svnrep->getLog($path, '', 1, true, 1, $peg);
}
if ($path{0} != "/")
$ppath = "/".$path;
else
{
$history = $svnrep->getLog($path, $rev, $rev - 1, true, 1, $peg);
}
$ppath = $path;
 
$logEntry = ($history && !empty($history->entries)) ? $history->entries[0] : null;
// If there's no revision info, go to the lastest revision for this path
$history = $svnrep->getLog($path, "", "", true);
$youngest = $history->entries[0]->rev;
 
if (!$logEntry)
{
http_response_code(404);
error_log('Unable to download resource at path: '.$path);
print 'Unable to download resource at path: '.xml_entities($path);
exit(0);
}
 
if (empty($rev))
{
$rev = $logEntry->rev;
}
$rev = $youngest;
 
// Create a temporary filename to be used for a directory to archive a download.
// Here we have an unavoidable but highly unlikely to occur race condition.
$tempDir = tempnamWithCheck($config->getTempDir(), 'websvn');
// Create a temporary directory. Here we have an unavoidable but highly
// unlikely to occure race condition
 
@unlink($tempDir);
mkdir($tempDir);
// Create the name of the directory being archived
$archiveName = $path;
$isDir = (substr($archiveName, -1) == '/');
 
if ($isDir)
if (count(glob("/tmp/wsvn-*"))<=40) // Omezeni na pocet soucasne stahovanych souboru
{
$archiveName = substr($archiveName, 0, -1);
}
 
$archiveName = basename($archiveName);
// Ošetření doběhnutí skriptu i když klient klikne jinam (smazání tmp)
ignore_user_abort(true);
 
if ($archiveName == '')
$tmpname1 = tempnam("temp", "wsvn-");
$tmpname = $tmpname1;
$tmpname .= "dir";
if (mkdir($tmpname))
{
$archiveName = $rep->name;
}
// Get the name of the directory being archived
$arcname = substr($path, 0, -1);
$arcname = basename($arcname);
if (empty($arcname))
$arcname = $rep->name;
 
$plainfilename = $archiveName;
$archiveName .= '.r'.$rev;
$svnrep->exportDirectory($path, $tmpname.DIRECTORY_SEPARATOR.$arcname, $rev);
 
// Export the requested path from SVN repository to the temp directory
$svnExportResult = $svnrep->exportRepositoryPath($path, $tempDir.DIRECTORY_SEPARATOR.$archiveName, $rev, $peg);
// ZIP it up
chdir($tmpname);
if (! connection_aborted())
exec("zip -r ".quote("$arcname")." .");
 
if ($svnExportResult != 0)
{
http_response_code(500);
error_log('svn export failed for: '.$archiveName);
print 'svn export failed for "'.xml_entities($archiveName).'".';
removeDirectory($tempDir);
exit(0);
}
$size = filesize("$arcname.zip");
 
// For security reasons, disallow direct downloads of filenames that
// are a symlink, since they may be a symlink to anywhere (/etc/passwd)
// Deciding whether the symlink is relative and legal within the
// repository would be nice but seems to error prone at this moment.
if ( is_link($tempDir.DIRECTORY_SEPARATOR.$archiveName) )
{
http_response_code(500);
error_log('to be downloaded file is symlink, aborting: '.$archiveName);
print 'Download of symlinks disallowed: "'.xml_entities($archiveName).'".';
removeDirectory($tempDir);
exit(0);
}
// Give the file to the browser
 
// Set timestamp of exported directory (and subdirectories) to timestamp of
// the revision so every archive of a given revision has the same timestamp.
$revDate = $logEntry->date;
$timestamp = mktime(substr($revDate, 11, 2), // hour
substr($revDate, 14, 2), // minute
substr($revDate, 17, 2), // second
substr($revDate, 5, 2), // month
substr($revDate, 8, 2), // day
substr($revDate, 0, 4)); // year
setDirectoryTimestamp($tempDir, $timestamp);
 
// Change to temp directory so that only relative paths are stored in archive.
$oldcwd = getcwd();
chdir($tempDir);
 
if ($isDir)
if (!connection_aborted() && $fp = @fopen("$arcname.zip","rb"))
{
$downloadMode = $config->getDefaultDirectoryDlMode();
}
else
header("Content-Type: application/zip");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"".$rep->name."-$arcname.zip\"");
// Use a loop to transfer the data 4KB at a time.
while(!feof($fp))
{
$downloadMode = $config->getDefaultFileDlMode();
echo fread($fp, 4096);
ob_flush();
}
 
// $_REQUEST parameter can override dlmode
if (!empty($_REQUEST['dlmode']))
{
$downloadMode = $_REQUEST['dlmode'];
 
if (substr($logEntry->path, -1) == '/')
{
if (!in_array($downloadMode, $config->validDirectoryDlModes))
{
$downloadMode = $config->getDefaultDirectoryDlMode();
}
}
else
{
if (!in_array($downloadMode, $config->validFileDlModes))
{
$downloadMode = $config->getDefaultFileDlMode();
print "Unable to open file $arcname.zip";
}
}
}
 
$downloadArchive = $archiveName;
fclose($fp);
 
if ($downloadMode == 'plain')
{
$downloadMimeType = 'application/octet-stream';
chdir("..");
 
}
else if ($downloadMode == 'zip')
{
$downloadMimeType = 'application/zip';
$downloadArchive .= '.zip';
// Create zip file
$cmd = $config->zip.' --symlinks -r '.quote($downloadArchive).' '.quote($archiveName);
execCommand($cmd, $retcode);
// Delete the directory. Why doesn't PHP have a generic recursive directory
// deletion command? It's stupid.
 
if ($retcode != 0)
{
error_log('Unable to call zip command: '.$cmd);
print 'Unable to call zip command. See webserver error log for details.';
}
}
else
{
$downloadMimeType = 'application/gzip';
$downloadArchive .= '.tar.gz';
$tarArchive = $archiveName.'.tar';
// if ($config->serverIsWindows)
// {
// $cmd = quoteCommand("rmdir /S /Q ".quote($tmpname), false);
// }
// else
// {
$cmd = quoteCommand("rm -fr ".quote($tmpname), false);
// }
 
// Create the tar file
$retcode = 0;
 
if (class_exists('Archive_Tar'))
{
$tar = new Archive_Tar($tarArchive);
$created = $tar->create(array($archiveName));
 
if (!$created)
{
$retcode = 1;
http_response_code(500);
print 'Unable to create tar archive.';
@exec($cmd);
}
unlink($tmpname1); // Pomocny soubor smazeme az po smazani adresare
}
else
{
$cmd = $config->tar.' -cf '.quote($tarArchive).' '.quote($archiveName);
execCommand($cmd, $retcode);
 
if ($retcode != 0)
{
http_response_code(500);
error_log('Unable to call tar command: '.$cmd);
print 'Unable to call tar command. See webserver error log for details.';
print "We are sorry. The server is overloaded...";
}
}
 
if ($retcode != 0)
{
chdir($oldcwd);
removeDirectory($tempDir);
exit(0);
}
 
// Set timestamp of tar file to timestamp of revision
touch($tarArchive, $timestamp);
 
// GZIP it up
if (function_exists('gzopen'))
{
$srcHandle = fopen($tarArchive, 'rb');
$dstHandle = gzopen($downloadArchive, 'wb');
 
if (!$srcHandle || !$dstHandle)
{
http_response_code(500);
print 'Unable to open file for gz-compression.';
chdir($oldcwd);
removeDirectory($tempDir);
exit(0);
}
 
while (!feof($srcHandle))
{
gzwrite($dstHandle, fread($srcHandle, 1024 * 512));
}
 
fclose($srcHandle);
gzclose($dstHandle);
}
else
{
$cmd = $config->gzip.' '.quote($tarArchive);
$retcode = 0;
execCommand($cmd, $retcode);
 
if ($retcode != 0)
{
http_response_code(500);
error_log('Unable to call gzip command: '.$cmd);
print 'Unable to call gzip command. See webserver error log for details.';
chdir($oldcwd);
removeDirectory($tempDir);
exit(0);
}
}
}
 
// Give the file to the browser
if (is_readable($downloadArchive))
{
if ($downloadMode == 'plain')
{
$downloadFilename = $plainfilename;
}
else
{
$downloadFilename = $rep->name.'-'.$downloadArchive;
}
 
header('Content-Type: '.$downloadMimeType);
header('Content-Length: '.filesize($downloadArchive));
header("Content-Disposition: attachment; filename*=UTF-8''".rawurlencode($downloadFilename));
readfile($downloadArchive);
}
else
{
http_response_code(404);
print 'Unable to open file: '.xml_entities($downloadArchive);
}
 
chdir($oldcwd);
removeDirectory($tempDir);
?>
/WebSVN/templates/calm/index.tmpl
File deleted
/WebSVN/templates/calm/diff.tmpl
File deleted
/WebSVN/templates/calm/header.tmpl
File deleted
/WebSVN/templates/calm/images/pilcrow_delete.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/delete.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/toggle-up.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/exclamation.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/script.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/directory.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/filepaint.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/favicon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/next.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/l-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/pilcrow.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/arrow_in.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/blame.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/log.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/bullet_yellow.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/eye.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:executable
-*
\ No newline at end of property
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/page_white_add.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/up.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/toggle-down.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/t-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/filephp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/css.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/add.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/compress.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/textbg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/bullet_add.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/sitemap_color.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/html.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/e-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/diff.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/bullet_delete.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/i-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/previous.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/submitbg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/file.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/filetxt.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/page_white_edit.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/arrow_out.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/xml.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/filec.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/filedb.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/fileh.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/link.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/page_white_delete.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/cube_green.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/images/filexml.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/calm/footer.tmpl
File deleted
/WebSVN/templates/calm/revision.tmpl
File deleted
/WebSVN/templates/calm/styles.css
File deleted
/WebSVN/templates/calm/file.tmpl
File deleted
/WebSVN/templates/calm/README.txt
File deleted
/WebSVN/templates/calm/blame.tmpl
File deleted
/WebSVN/templates/calm/log.tmpl
File deleted
/WebSVN/templates/calm/user_greeting.tmpl
File deleted
/WebSVN/templates/calm/directory.tmpl
File deleted
/WebSVN/templates/calm/compare.tmpl
File deleted
/WebSVN/templates/Elegant/footer.tmpl
File deleted
/WebSVN/templates/Elegant/revision.tmpl
File deleted
/WebSVN/templates/Elegant/styles.css
File deleted
/WebSVN/templates/Elegant/revision-popup.js
File deleted
/WebSVN/templates/Elegant/file.tmpl
File deleted
/WebSVN/templates/Elegant/blame.tmpl
File deleted
/WebSVN/templates/Elegant/log.tmpl
File deleted
/WebSVN/templates/Elegant/user_greeting.tmpl
File deleted
/WebSVN/templates/Elegant/directory.tmpl
File deleted
/WebSVN/templates/Elegant/compare.tmpl
File deleted
\ No newline at end of file
/WebSVN/templates/Elegant/index.tmpl
File deleted
/WebSVN/templates/Elegant/diff.tmpl
File deleted
/WebSVN/templates/Elegant/header.tmpl
File deleted
/WebSVN/templates/Elegant/images/parent.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/arrow-in.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-java.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/subversion-s.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-c.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/bg-table-divider.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/detail.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-h.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-py.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-css.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/deleted.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/download.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/rss.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/diff.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-m.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/previous.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-xml.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/information.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/repository24.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/blank.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/remove.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/bg-gray-light.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/revision.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/valid.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-cpp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-image.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/arrow-out.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/added.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/bg-table-header.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/cube-blue.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-php.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/directory.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/warning.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/bg-gray-dark.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/favicon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/reverse.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/youngest.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/next.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/repository.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/pilcrow.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/modified.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/blame.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/file-html.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/log.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/eye.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/stop.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/README.txt
File deleted
/WebSVN/templates/Elegant/images/home.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/Elegant/images/bg-page-header.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/t-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/fileh.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/filepy.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/rss.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/filem.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/directory-open.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/directory.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/websvn.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/filehtml.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/repo.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/e-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/favicon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/i-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/l-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/file.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/filejava.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/filecpp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/images/filec.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/revision.tmpl
File deleted
/WebSVN/templates/BlueGrey/blame.tmpl
1,62 → 1,32
<h1>[websvn:repname] &ndash; [lang:BLAMEFOR] [websvn:rev]</h1>
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
[websvn-test:error]
<div id="error">[websvn:error]</div>
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="left"><h1>[websvn:repname]</h1></td>
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td>
</tr>
</table>
 
[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2>
<p>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div>
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div>
<div id="nav">
[websvn-test:prevrevurl]
<a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a> &ndash;
[websvn-endtest]
[websvn-test:nextrevurl]
<a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a> &ndash;
[websvn-endtest]
[websvn-test:goyoungestlink]
[websvn:goyoungestlink] &ndash;
[websvn-endtest]
[websvn-test:mimelink]
[websvn:mimelink] &ndash;
[websvn-endtest]
[websvn:filedetaillink] &ndash;
[websvn-test:difflink]
[websvn:difflink] &ndash;
[websvn-endtest]
[websvn-test:downloadlink]
[websvn:downloadlink] &ndash;
[websvn-endtest]
[websvn:revlink] &ndash;
[websvn:loglink]
[websvn-test:clientrooturl]
&ndash; <a href="[websvn:clientrooturl][websvn:path]">SVN</a>
[websvn-endtest]
[websvn-test:rssurl]
&ndash; <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a>
[websvn-endtest]
</div>
[websvn-test:warning]
<div id="warning">[websvn:warning]</div>
[websvn-else]
<table>
<thead>
<table cellpadding="2px" cellspacing="0" width="100%">
<tr>
<th>[lang:REV]</th>
<th>[lang:AUTHOR]</th>
<th>[lang:LINENO]</th>
<th>[lang:LINE]</th>
<th class="HdrClmn"><b>[lang:LINENO]</b></th>
<th class="HdrClmn"><b>[lang:REV]</b></th>
<th class="HdrClmn"><b>[lang:AUTHOR]</b></th>
<th class="HdrClmnEnd"><b>[lang:LINE]</b></th>
</tr>
</thead>
<tbody style="font-size: 90%;">
[websvn-startlisting]
<tr class="[websvn:row_class]">
<th>[websvn:revision]</th>
<th>[websvn:author]</th>
<th><a name="l[websvn:lineno]" href="#l[websvn:lineno]">[websvn:lineno]</a></th>
<td>[websvn:line]</td>
<tr>
<td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:lineno]</td>
<td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:revision]</td>
<td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:author]</td>
<td style="border-right: 1px solid black" valign="top">[websvn:line]</td>
</tr>
[websvn-endlisting]
</tbody>
</table>
[websvn:javascript]
[websvn-endtest]
[websvn-endtest]
/WebSVN/templates/BlueGrey/collapse.js
0,0 → 1,169
/***********************************************
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use. Last updated April 2nd, 2005.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
 
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off)
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no)
 
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif">
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol.
var expandonload=false
 
if (document.getElementById)
{
document.write('<style type="text/css">')
document.write('.switchcontent{display:none;}')
document.write('</style>')
}
 
function getElementbyClass(rootobj, classname)
{
var temparray=new Array()
var inc=0
for (i=0; i<rootobj.length; i++)
{
if (rootobj[i].className==classname)
temparray[inc++]=rootobj[i]
}
return temparray
}
 
function sweeptoggle(ec)
{
var thestate=(ec=="expand")? "block" : "none"
var inc=0
while (ccollect[inc])
{
ccollect[inc].style.display=thestate
inc++
}
revivestatus()
collapseprevious = (ec=="expand")? "no" : "yes"
}
 
 
function contractcontent(omit)
{
var inc=0
while (ccollect[inc])
{
if (ccollect[inc].id!=omit)
ccollect[inc].style.display="none"
inc++
}
}
 
function expandcontent(curobj, cid)
{
var spantags=curobj.getElementsByTagName("SPAN")
var showstateobj=getElementbyClass(spantags, "showstate")
if (ccollect.length>0)
{
if (collapseprevious=="yes")
contractcontent(cid)
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none"
if (showstateobj.length>0) //if "showstate" span exists in header
{
if (collapseprevious=="no")
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol
else
revivestatus()
}
}
}
 
function revivecontent()
{
contractcontent("omitnothing")
selectedItem=getselectedItem()
selectedComponents=selectedItem.split("|")
collapseprevious=selectedComponents[0]
for (i=1; i<selectedComponents.length-1; i++)
document.getElementById(selectedComponents[i]).style.display="block"
}
 
function revivestatus()
{
var inc=0
while (statecollect[inc])
{
if (ccollect[inc].style.display=="block")
statecollect[inc].innerHTML=contractsymbol
else
statecollect[inc].innerHTML=expandsymbol
inc++
}
}
 
function get_cookie(Name)
{
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0)
{
offset = document.cookie.indexOf(search)
if (offset != -1)
{
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
 
function getselectedItem()
{
if (get_cookie(window.location.pathname) != "")
{
selectedItem=get_cookie(window.location.pathname)
return selectedItem
}
else
return ""
}
 
function saveswitchstate()
{
var inc=0, selectedItem=collapseprevious+"|"
while (ccollect[inc])
{
if (ccollect[inc].style.display=="block")
selectedItem+=ccollect[inc].id+"|"
inc++
}
document.cookie=window.location.pathname+"="+selectedItem
}
 
function do_onload()
{
uniqueidn=window.location.pathname+"firsttimeload"
var alltags=document.all? document.all : document.getElementsByTagName("*")
ccollect=getElementbyClass(alltags, "switchcontent")
statecollect=getElementbyClass(alltags, "showstate")
if (enablepersist=="on" && ccollect.length>0)
{
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0"
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load
if (!firsttimeload)
revivecontent()
}
if (ccollect.length>0 && statecollect.length>0)
revivestatus()
if (expandonload)
sweeptoggle('expand')
}
 
if (window.addEventListener)
window.addEventListener("load", do_onload, false)
else if (window.attachEvent)
window.attachEvent("onload", do_onload)
else if (document.getElementById)
window.onload=do_onload
 
if (enablepersist=="on" && document.getElementById)
window.onunload=saveswitchstate
/WebSVN/templates/BlueGrey/compare.tmpl
1,63 → 1,65
<h1>[websvn:repname]</h1>
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
[websvn-test:error]
<div id="error">[websvn:error]</div>
[websvn-else]
<center>
[websvn:compare_form]
<table id="params">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td>[lang:COMPPATH]</td>
<td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td>
<td rowspan="2">[websvn:compare_submit]</td>
<td align="left"><h1>[websvn:repname]</h1></td>
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td>
</tr>
<tr>
<td>[lang:WITHPATH]</td>
<td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn:compare_form]
<table>
<tr><td>[lang:COMPPATH]&nbsp</td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr>
<tr><td>[lang:WITHPATH]</td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr>
</table>
[websvn:compare_submit]
[websvn:compare_endform]
[websvn-test:warning]
<div id="warning">[websvn:warning]</div>
[websvn-endtest]
[websvn-test:success]
<div id="nav">
[websvn:reverselink] &#124;
[websvn-test:regardwhitespacelink]
[websvn:regardwhitespacelink]
[websvn-else]
[websvn:ignorewhitespacelink]
<hr>
<p>[lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
<p>
[websvn:revlink]
<p>
[websvn-endtest]
</div>
<div><a href="[websvn:rev1url]">[websvn:safepath1] @ [websvn:rev1]</a> &nbsp;&rarr;&nbsp; <a href="[websvn:rev2url]">[websvn:safepath2] @ [websvn:rev2]</a></div>
[websvn-endtest]
</center>
[websvn-startlisting]
[websvn-test:newpath]
<table class="comparison collapsible">
<thead>
<tr><th><a href="[websvn:fileurl]">[websvn:newpath]</a></th></tr>
</thead>
<p>
<div class="newpath">
<b>[websvn:newpath]</b><br>
[websvn-endtest]
[websvn-test:info]
[websvn:info]<br />
[websvn:info]<br>
[websvn-endtest]
[websvn-test:difflines]
<tr class="row1"><th>[websvn:difflines]</th></tr>
<div class="difflines">
<p>
[websvn:difflines]<br>
<table class="diff" cellspacing="0">
[websvn-endtest]
[websvn-test:diffclass]
<tr><td class="[websvn:diffclass]">[websvn:line]</td></tr>
[websvn-endtest]
[websvn-test:endpath]
[websvn-test:enddifflines]
</table>
</div>
[websvn-endtest]
[websvn-test:endpath]
</div>
<p><hr>
[websvn-endtest]
[websvn-test:properties]
<p><i>[lang:PROPCHANGES]</i><p>
[websvn-endtest]
[websvn-endlisting]
[websvn-endtest]
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/jquery.min.1.9.1.js"></script>
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/collapsible.js"></script>
[websvn-endtest]
</table>
[websvn-endtest]
/WebSVN/templates/BlueGrey/diff.tmpl
1,85 → 1,46
[websvn-test:rev2]
<h1>[websvn:repname] &ndash; [lang:DIFFREVS] [websvn:rev2] [lang:AND] [websvn:rev1]</h1>
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<h1>[websvn:repname] &ndash; [lang:DIFF]</h1>
[websvn-endtest]
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
[websvn-test:error]
<div id="error">[websvn:error]</div>
[websvn-else]
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div>
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div>
<div id="nav">
[websvn-test:prevrevurl]
<a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a> &ndash;
[websvn-endtest]
[websvn-test:nextrevurl]
<a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a> &ndash;
[websvn-endtest]
[websvn-test:goyoungestlink]
[websvn:goyoungestlink] &ndash;
[websvn-endtest]
[websvn:filedetaillink] &ndash;
[websvn:blamelink] &ndash;
[websvn-test:downloadlink]
[websvn:downloadlink] &ndash;
[websvn-endtest]
[websvn:revlink] &ndash;
[websvn:loglink]
[websvn-test:clientrooturl]
&ndash; <a href="[websvn:clientrooturl][websvn:path]">SVN</a>
[websvn-endtest]
[websvn-test:rssurl]
&ndash; <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a>
[websvn-endtest]
</div>
[websvn-test:warning]
<div id="warning">[websvn:warning]</div>
[websvn-else]
[websvn-test:noprev]
<div id="warning">[lang:NOPREVREV].</div>
[lang:NOPREVREV]
[websvn-else]
<center>
[websvn-test:showcompactlink]
[websvn:showcompactlink] &ndash;
[websvn-endtest]
[websvn-test:showalllink]
[websvn:showalllink] &ndash;
[websvn-endtest]
[websvn-test:regardwhitespacelink]
[websvn:regardwhitespacelink]
[websvn-endtest]
[websvn-test:ignorewhitespacelink]
[websvn:ignorewhitespacelink]
[websvn-endtest]
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="left"><h1>[websvn:repname]</h1></td>
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td>
</tr>
</table>
[websvn:curdirlinks] - [lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b>
<p>
<p><center>
[websvn:showcompactlink]
[websvn:showalllink]
</center>
<table class="diff" cellspacing="0">
<thead>
<p>
<table class="diff" width="100%" cellspacing="0">
<tr>
<th width="50%" colspan="2"><a href="[websvn:prevrevurl]">[lang:REV] [websvn:rev2]</a></th>
<td width="5"></td>
<th width="50%" colspan="2"><a href="[websvn:revurl]">[lang:REV] [websvn:rev1]</a></th>
<th class="HdrClmnEnd" style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th>
<th width="5"></th>
<th class="HdrClmnEnd" style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th>
</tr>
</thead>
[websvn-startlisting]
[websvn-test:startblock]
[websvn-test:rev1lineno]
<tr>
<th class="row1" colspan="2">[lang:LINE] [websvn:rev1lineno]...</th>
<td width="5" style="background: none;"></td>
<th class="row1" colspan="2">[lang:LINE] [websvn:rev2lineno]...</th>
</tr>
[websvn-endtest]
<td width="50%" style="padding: 3px 0 3px 0" align="center" class="row1"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
<td width="5"></td>
<td width="50%" style="padding: 3px 0 3px 0" align="center" class="row1"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
<tr>
<td class="lineno">[websvn:rev1lineno]</td>
<td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
[websvn-else]
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
<td width="5"></td>
<td class="lineno">[websvn:rev2lineno]</td>
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td>
</tr>
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr>
[websvn-endtest]
[websvn-endlisting]
</table>
[websvn-endtest]
[websvn-endtest]
[websvn-endtest]
[websvn-endtest]
 
/WebSVN/templates/BlueGrey/directory.tmpl
1,142 → 1,142
<h1>[websvn:repname] &ndash; [lang:REV] [websvn:rev]</h1>
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
[websvn-test:error]
<div id="error">[websvn:error]</div>
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="left"><h1>[websvn:repname]</h1></td>
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div>
[websvn-test:search]
<div id="searchcss">[websvn:search_form]<div>[lang:SEARCH] [websvn:search_input]<span class="submit">[websvn:search_submit]</span></div>[websvn:search_endform]</div>
<table cellpadding="2px" cellspacing="0px" class="outline">
<tr><th colspan=2 class="HdrClmnEnd">[lang:REVINFO]</th></tr>
<tr><td class="CatClmn1" valign="top">[lang:CURDIR]:</td><td class="row1">[websvn:path]</td></tr>
<tr><td class="CatClmn0">[lang:REV] &amp; [lang:AUTHOR]:</td><td class="row0">[lang:REV] [websvn:rev] - [websvn:author]
[websvn-test:goyoungestlink]
- [websvn:goyoungestlink]
[websvn-endtest]
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div>
[websvn-test:warning]
[websvn-else]
<table cellpadding="2" cellspacing="0" class="outline">
<thead>
<tr><th colspan="2">[lang:REVINFO]</th></tr>
</thead>
</td></tr>
[websvn-test:restricted]
[websvn-else]
<tr class="row0"><th>[lang:LASTMOD]:</th><td>[lang:REV] [websvn:lastchangedrev] &ndash; [websvn:author] &ndash; [websvn:date]
[websvn-test:prevrevurl]
&ndash; <a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a>
<tr><td class="CatClmn1" valign="top">[lang:LASTMOD]:</td><td class="row1">[lang:REV] [websvn:lastchangedrev] - [websvn:date]</td></tr>
<tr><td class="CatClmn0" valign="top">[lang:LOGMSG]:</td><td class="row0">[websvn:log]</td></tr>
[websvn-test:hidechanges]
<tr><td class="CatClmn1" valign="top">&nbsp;</td><td class="row1">([websvn:showchangeslink])</td></tr>
[websvn-else]
[websvn:showchangeslink]
<tr><td class="CatClmn1" valign="top">&nbsp;</td><td class="row1">([websvn:hidechangeslink])</td></tr>
[websvn-test:changedfilesbr]
<tr><td class="CatClmn0" valign="top">[lang:CHANGEDFILES]:</td><td class="row0">[websvn:changedfilesbr]</td></tr>
[websvn-endtest]
[websvn-test:nextrevurl]
&ndash; <a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a>
[websvn-test:newfilesbr]
[websvn-test:changedfilesbr]
<tr><td class="CatClmn1" valign="top">[lang:NEWFILES]:</td><td class="row1">[websvn:newfilesbr]</td></tr>
[websvn-else]
<tr><td class="CatClmn0" valign="top">[lang:NEWFILES]:</td><td class="row0">[websvn:newfilesbr]</td></tr>
[websvn-endtest]
[websvn-test:goyoungestlink]
&ndash; [websvn:goyoungestlink]
[websvn-endtest]
</td></tr>
<tr class="row1"><th>[lang:LOGMSG]:</th><td>[websvn:log]</td></tr>
[websvn-test:deletedfilesbr]
[websvn-test:changedfilesbr]
[websvn-test:newfilesbr]
<tr><td class="CatClmn0" valign="top">[lang:DELETEDFILES]:</td><td class="row0">[websvn:deletedfilesbr]</td></tr>
[websvn-else]
<tr><td class="CatClmn1" valign="top">[lang:DELETEDFILES]:</td><td class="row1">[websvn:deletedfilesbr]</td></tr>
[websvn-endtest]
</table>
[websvn-else]
[websvn-test:newfilesbr]
<tr><td class="CatClmn1" valign="top">[lang:DELETEDFILES]:</td><td class="row1">[websvn:deletedfilesbr]</td></tr>
[websvn-else]
<tr><td class="CatClmn0" valign="top">[lang:DELETEDFILES]:</td><td class="row0">[websvn:deletedfilesbr]</td></tr>
[websvn-endtest]
 
<div id="nav">
[websvn:revlink] &ndash;
[websvn-test:comparelink]
[websvn:comparelink] &ndash;
[websvn-endtest]
[websvn:loglink]
[websvn-test:downloadurl]
&ndash; <a href="[websvn:downloadurl]" rel="nofollow">[lang:DOWNLOAD]</a>
[websvn-endtest]
[websvn-test:clientrooturl]
&ndash; <a href="[websvn:clientrooturl][websvn:path]">SVN</a>
[websvn-endtest]
[websvn-test:rssurl]
&ndash; <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a>
[websvn-endtest]
</div>
[websvn-test:warning]
<div id="warning">[websvn:warning]</div>
[websvn-else]
</table>
[websvn-defineicons]
dir=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/directory.png" alt="[DIRECTORY]"/>
diropen=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/directory.png" alt="[OPEN-DIRECTORY]"/>
*=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/file.png" alt="[FILE]"/>
.c=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filec.png" alt="[C-FILE]"/>
.cpp=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filecpp.png" alt="[CPP-FILE]"/>
.h=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/fileh.png" alt="[H-FILE]"/>
.html=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filehtml.png" alt="[HTML-FILE]"/>
.java=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filejava.png" alt="[JAVA-FILE]"/>
.m=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filem.png" alt="[M-FILE]"/>
.py=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filepy.png" alt="[PY-FILE]"/>
dir=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[FOLDER]">
diropen=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[OPEN-FOLDER]">
*=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/file.png" alt="[FILE]">
.c=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filec.png" alt="[C-FILE]">
.cpp=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filecpp.png" alt="[CPP-FILE]">
.h=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/fileh.png" alt="[H-FILE]">
.html=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filehtml.png" alt="[HTML-FILE]">
.java=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filejava.png" alt="[JAVA-FILE]">
.m=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filem.png" alt="[M-FILE]">
.py=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filepy.png" alt="[PY-FILE]">
.s=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/files.png" alt="[S-FILE]">
 
i-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/i-node.png" alt="[NODE]"/>
t-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/t-node.png" alt="[NODE]"/>
l-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/l-node.png" alt="[NODE]"/>
e-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/e-node.png" alt="[NODE]"/>
i-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt="[NODE]">
t-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt="[NODE]">
l-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt="[NODE]">
e-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt="[NODE]">
[websvn-enddefineicons]
<p><hr>
[websvn:curdirlinks] - [websvn:curdirloglink]
[websvn-test:curdircomplink]
- [websvn:curdircomplink]
[websvn-endtest]
[websvn-test:curdirdllink]
- [websvn:curdirdllink]
[websvn-endtest]
[websvn-test:curdirrsslink]
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a>
[websvn-endtest]
<p>
[websvn:compare_form]
<table cellpadding="2" cellspacing="0" id="listing">
<thead>
<table cellpadding="2px" cellspacing="0px" width="100%" class="outline">
<tr>
<th class="path">[lang:PATH]</th>
[websvn-test:showlastmod]
<th class="last_mod" scope="col" colspan="3">[lang:LASTMOD]</th>
[websvn-endtest]
<th class="view_log" nowrap="nowrap">[lang:VIEWLOG]</th>
<th class="HdrClmn" width="100%"><b>[lang:PATH]</b></th>
[websvn-test:allowdownload]
<th class="download">[lang:DOWNLOAD]</th>
[websvn-test:curdirrsslink]
<th class="HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
<th class="HdrClmn"><b>[lang:TARBALL]</b></th>
<th class="HdrClmnEnd"><b>RSS</b></th>
[websvn-else]
<th class="HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
<th class="HdrClmnEnd"><b>[lang:TARBALL]</b></th>
[websvn-endtest]
[websvn-test:clientrooturl]
<th>SVN</th>
[websvn-else]
[websvn-test:curdirrsslink]
<th class="HdrClmn"><b>[lang:LOG]</b></th>
<th class="HdrClmnEnd"><b>RSS</b></th>
[websvn-else]
<th class="HdrClmnEnd"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
[websvn-endtest]
[websvn-test:rssurl]
<th>RSS</th>
[websvn-endtest]
</tr>
</thead>
<tbody>
[websvn-startlisting]
<tr class="row[websvn:rowparity]"
[websvn-test:loadalldir]
title="[websvn:classname]"
[websvn-endtest]
>
<td class="path" valign="middle">
<tr>
<td valign="middle" style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">
[websvn:compare_box]
[websvn-treenode]
<a href="[websvn:fileurl]">
[websvn-icon]
[websvn:filename]
</a>
[websvn:filelink]
</td>
[websvn-test:showlastmod]
<td class="rev"><a href="[websvn:revurl]">[websvn:revision]</a>&nbsp;</td>
[websvn-test:showageinsteadofdate]
<td class="age" title="[websvn:date]">[websvn:age]</td>
[websvn-test:allowdownload]
[websvn-test:curdirrsslink]
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:fileviewdllink]</td>
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
[websvn-else]
<td class="date" title="[websvn:age]">[websvn:date]</td>
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:fileviewdllink]</td>
[websvn-endtest]
<td class="author">[websvn:author]</td>
[websvn-else]
[websvn-test:curdirrsslink]
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
[websvn-else]
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
[websvn-endtest]
<td><a href="[websvn:logurl]">[lang:LOG]</a></td>
[websvn-test:allowdownload]
<td>
[websvn-test:downloadurl]
<a href="[websvn:downloadurl]" rel="nofollow">[lang:DOWNLOAD]</a>
[websvn-endtest]
[websvn-test:downloadplainurl]
<a href="[websvn:downloadplainurl]" rel="nofollow">[lang:DOWNLOAD]</a>
[websvn-endtest]
</td>
[websvn-endtest]
[websvn-test:clientrooturl]
<td><a href="[websvn:clientrooturl][websvn:path]">SVN</a></td>
[websvn-endtest]
[websvn-test:rssurl]
<td><a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a></td>
[websvn-endtest]
</tr>
[websvn-endlisting]
</tbody>
</table>
[websvn:compare_submit][websvn:compare_endform]
<p>
[websvn:compare_submit]
[websvn:compare_endform]
<hr>
[websvn-endtest]
[websvn-test:loadalldir]
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/jquery.min.1.9.1.js"></script>
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/collapsible.js"></script>
[websvn-endtest]
[websvn-endtest]
/WebSVN/templates/BlueGrey/file.tmpl
1,48 → 1,19
<h1>[websvn:repname] &ndash; [lang:REV] [websvn:rev]</h1>
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
[websvn-test:error]
<div id="error">[websvn:error]</div>
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="left"><h1>[websvn:repname]</h1></td>
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div>
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div>
<div id="nav">
[websvn-test:prevrevurl]
<a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a> &ndash;
[websvn-endtest]
[websvn-test:nextrevurl]
<a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a> &ndash;
[websvn-endtest]
[websvn:curdirlinks] - [lang:REV] [websvn:rev]
[websvn-test:goyoungestlink]
[websvn:goyoungestlink] &ndash;
[websvn:goyoungestlink]<p>
[websvn-endtest]
[websvn-test:mimelink]
[websvn:mimelink] &ndash;
[websvn-endtest]
[websvn:blamelink] &ndash;
[websvn-test:difflink]
[websvn:difflink] &ndash;
[websvn-endtest]
[websvn:revlink] &ndash;
[websvn:loglink]
[websvn-test:downloadlink]
&ndash; [websvn:downloadlink]
[websvn-endtest]
[websvn-test:clientrooturl]
&ndash; <a href="[websvn:clientrooturl][websvn:path]">SVN</a>
[websvn-endtest]
[websvn-test:rssurl]
&ndash; <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a>
[websvn-endtest]
</div>
[websvn-test:warning]
<div id="warning">[websvn:warning]</div>
[websvn-else]
<div id="listing">
<p>[websvn:prevdifflink] - [websvn:blamelink]</p>
<hr />
[websvn-getlisting]
</div>
[websvn-test:warning]
<!-- check for warnings generated by getlisting -->
<div id="warning">[websvn:warning]</div>
<hr />
[websvn-endtest]
[websvn-endtest]
[websvn-endtest]
/WebSVN/templates/BlueGrey/footer.tmpl
1,4 → 1,3
</div>
<div id="footer">[lang:POWERED] [websvn:version] [lang:AND] <a href="http://subversion.apache.org">Apache Subversion</a> [websvn:svnversion] &nbsp; &nbsp; &#x2713; <a href="http://validator.w3.org/check?uri=[websvn:validationurl]">XHTML</a> &amp; <a href="http://jigsaw.w3.org/css-validator/validator?uri=[websvn:validationurl]">CSS</a></div>
<p><center><font size="-1"><i><b>[lang:POWERED] v[websvn:version]</b></i></font></center>
</body>
</html>
/WebSVN/templates/BlueGrey/header.tmpl
1,58 → 1,73
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="[websvn:language_code]" lang="[websvn:language_code]">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=[websvn:charset]">
<link href="[websvn:locwebsvnhttp]/templates/BlueGrey/styles.css" rel="stylesheet" media="screen">
<!--[if lt IE 7]>
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/BlueGrey/png.js"></script>
<![endif]-->
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/BlueGrey/collapse.js"></script>
<title>
WebSVN
[websvn-test:repname]
&ndash; [websvn:repname]
- [websvn:repname]
[websvn-endtest]
[websvn-test:error]
&ndash; ERROR
[websvn-else]
[websvn-test:action]
&ndash; [websvn:action]
- [websvn:action]
[websvn-endtest]
[websvn-test:rev2]
[websvn-test:safepath2]
&ndash; [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2]
[websvn-test:path2]
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2]
[websvn-else]
&ndash; [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
[websvn-endtest]
[websvn-else]
[websvn-test:rev]
&ndash; [lang:REV] [websvn:rev]
- [lang:REV] [websvn:rev]
[websvn-endtest]
[websvn-endtest]
[websvn-test:safepath]
&ndash; [websvn:safepath]
[websvn-test:path]
- [websvn:safepath]
[websvn-endtest]
[websvn-endtest]
</title>
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
<meta http-equiv="generator" content="WebSVN [websvn:version]"/> <!-- leave this for stats -->
[websvn-test:blockrobots]
<meta name="robots" content="noindex,nofollow"/>
 
<script type="text/javascript">
function checkCB(chBox)
{
count = 0
first = null
f = chBox.form
for (i = 0 ; i < f.elements.length ; i++)
if (f.elements[i].type == 'checkbox' && f.elements[i].checked)
{
if (first == null && f.elements[i] != chBox)
first = f.elements[i]
count += 1
}
if (count > 2)
{
first.checked = false
count -= 1
}
}
[websvn-test:opentree]
expandonload = true
[websvn-endtest]
<link rel="shortcut icon" type="image/x-icon" href="[websvn:locwebsvnhttp]/templates/BlueGrey/images/favicon.ico"/>
<link type="text/css" href="[websvn:locwebsvnhttp]/templates/BlueGrey/styles.css" rel="stylesheet" media="screen"/>
[websvn-test:rssurl]
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:rssurl]"/>
</script>
 
[websvn-test:curdirrsslink]
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:curdirrsshref]">
[websvn-endtest]
<!--[if lt IE 7]>
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/ie-png-transparency.js"></script>
<![endif]-->
 
</head>
<body id="[websvn:template]">
<div id="header">
<table border="0">
<body>
<table width="100%" border="0">
<tr>
<td width="33%">&nbsp;</td>
<td width="33%" align="center"><a href="[websvn:indexurl]" title="[lang:PROJECTS]"><img style="border: 0; width: 272px; height: 64px;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/websvn.png" alt="WebSVN" /></a></td>
<td width="33%"><div style="float: right">
[websvn:language_form][websvn:language_select][websvn:language_submit][websvn:language_endform]
[websvn:template_form][websvn:template_select][websvn:template_submit][websvn:template_endform]
</div></td>
<td width="33%" align="center"><a href="http://subversion.tigris.org/"><img style="border: 0; width: 468px; height: 64px;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/subversion.png" alt="Subversion" /></a></td>
<td width="33%"><div style="float: right">[websvn:lang_form][websvn:lang_select][websvn:lang_submit][websvn:lang_endform]</div></td>
</tr>
</table>
</div>
<div id="content">
<hr />
/WebSVN/templates/BlueGrey/index.tmpl
1,69 → 1,26
[websvn-test:error]
<div id="error">[websvn:error]</div>
[websvn-else]
<table>
[websvn-test:showlastmod]
<thead><tr><th colspan="4">[lang:PROJECTS]</th></tr></thead>
[websvn-else]
<thead><tr><th>[lang:PROJECTS]</th></tr></thead>
[websvn-endtest]
<p>
[websvn-test:flatview]
<table align="center" cellspacing="0" cellpadding="0" width="50%">
<tr><th align="center" colspan=2 class="HdrClmnEnd">[lang:PROJECTS]</th></tr>
[websvn-startlisting]
[websvn-test:groupid]
[websvn-else]
<tr class="row[websvn:rowparity]">
<td class="project"><a href="[websvn:projecturl]">[websvn:projectname]</a></td>
[websvn-test:showlastmod]
<td>[lang:REV] [websvn:revision]</td>
[websvn-test:showageinsteadofdate]
<td title="[websvn:date]">[websvn:age]</td>
[websvn-else]
<td title="[websvn:age]">[websvn:date]</td>
[websvn-endtest]
<td>[websvn:author]</td>
[websvn-endtest]
<tr><td class="row[websvn:rowparity]"><img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/repo.png" alt="[FOLDER]"> [websvn:projlink]</td>
</tr>
[websvn-endtest]
[websvn-endlisting]
</table>
[websvn-else]
<table align="center" cellspacing=0 cellpadding=0 width="50%">
<tr><th align="left" colspan=2 class="HdrClmnEnd">[lang:PROJECTS]</th></tr>
<td>
[websvn-startlisting]
[websvn-test:groupid]
[websvn-test:showlastmod]
<tr><th onclick="toggleGroup('[websvn:groupname]');" colspan="4">[websvn:groupname]</th></tr>
[websvn-test:isprojlink]
<div class="row[websvn:rowparity]"><img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/repo.png" alt="[FOLDER]"> [websvn:listitem]</div>
[websvn-else]
<tr><th onclick="toggleGroup('[websvn:groupname]');">[websvn:groupname]</th></tr>
[websvn:listitem]
[websvn-endtest]
[websvn-else]
<tr title="[websvn:groupname]" class="row[websvn:groupparity]">
[websvn-test:groupname]
<td class="project group"><a href="[websvn:projecturl]">[websvn:projectname]</a></td>
[websvn-else]
<td class="project"><a href="[websvn:projecturl]">[websvn:projectname]</a></td>
[websvn-endtest]
[websvn-test:showlastmod]
<td>[lang:REV] [websvn:revision]</td>
[websvn-test:showageinsteadofdate]
<td title="[websvn:date]">[websvn:age]</td>
[websvn-else]
<td title="[websvn:age]">[websvn:date]</td>
[websvn-endtest]
<td>[websvn:author]</td>
[websvn-endtest]
[websvn-endlisting]
</td>
</tr>
[websvn-endtest]
[websvn-endlisting]
[websvn-endtest]
</table>
[websvn-test:treeview]
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/jquery.min.1.9.1.js"></script>
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/collapsible.js"></script>
[websvn-test:opentree]
[websvn-else]
<script type="text/javascript">
//<![CDATA[
collapseAllGroups();
//]]>
</script>
[websvn-endtest]
[websvn-endtest]
[websvn-endtest]
<hr />
/WebSVN/templates/BlueGrey/log.tmpl
1,96 → 1,70
<h1>[websvn:repname]</h1>
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
[websvn-test:error]
<div id="error">[websvn:error]</div>
[websvn-else]
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div>
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div>
<div id="nav">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td align="left"><h1>[websvn:repname] - [lang:REV] [websvn:rev]</h1></td>
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td>
</tr>
</table>
 
[websvn:curdirlinks]<p>
[websvn-test:goyoungestlink]
[websvn:goyoungestlink] &ndash;
[websvn:goyoungestlink]<p>
[websvn-endtest]
[websvn:changeslink] &ndash;
[websvn-test:filedetaillink]
[websvn:filedetaillink] &ndash;
[websvn:blamelink] &ndash;
[websvn:difflink]
<hr>
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn:directorylink]
[websvn-endtest]
[websvn-test:clientrooturl]
&ndash; <a href="[websvn:clientrooturl][websvn:path]">SVN</a>
[websvn-endtest]
[websvn-test:rsslink]
&ndash; <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a>
[websvn-endtest]
</div>
[websvn-test:warning]
<div id="warning">[websvn:warning]</div>
[websvn-else]
<center>
[websvn:logsearch_form]
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox] [lang:SHOWALL]:[websvn:logsearch_showall]
<b>[lang:FILTER]</b><p>
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox]
[websvn:logsearch_submit]
[websvn-test:logsearch_clearloglink]
<br/>[websvn:logsearch_clearloglink]
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p>
[websvn-endtest]
[websvn:logsearch_endform]
</center>
[websvn-test:logsearch_nomatches]
<p>[lang:NORESULTS]</p>
<center>[lang:NORESULTS]</center>
[websvn-endtest]
[websvn-test:logsearch_nomorematches]
<p>[lang:NOMORERESULTS]</p>
[websvn-test:error]
<center>[websvn:error]</center>
[websvn-endtest]
[websvn:logsearch_moreresultslink]
<span id="logpagelinks">[websvn:pagelinks]</span> &nbsp; &nbsp; [websvn:showalllink]
</center>
 
[websvn-test:logsearch_resultsfound]
[websvn:compare_form]
<table cellpadding="2" cellspacing="0">
<thead>
<table cellpadding="2px" cellspacing="0" width="100%">
<tr>
<th>[lang:REV]</th>
<th>[lang:AGE]</th>
<th>[lang:AUTHOR]</th>
<th>[lang:PATH]</th>
<th>[lang:LOGMSG]</th>
<th>[lang:DIFF]</th>
[websvn-test:showchanges]
<th>[lang:CHANGES]</th>
[websvn-endtest]
<th class="HdrClmn">[lang:REV]</th>
<th class="HdrClmn">[lang:PATH]</th>
<th class="HdrClmn">[lang:AUTHOR]</th>
<th class="HdrClmn">[lang:AGE]</th>
<th class="HdrClmnEnd">[lang:LOGMSG]</th>
</tr>
</thead>
[websvn-startlisting]
<tr class="row[websvn:rowparity]">
<td style="white-space: nowrap;">[websvn:compare_box][websvn:revlink]</td>
[websvn-test:showageinsteadofdate]
<td title="[websvn:revdate]">[websvn:revage]</td>
[websvn-else]
<td title="[websvn:revage]">[websvn:revdate]</td>
[websvn-endtest]
<td>[websvn:revauthor]</td>
<td>[websvn:revpathlink]</td>
<td valign="top">[websvn:revlog]</td>
<td><a href="[websvn:compareurl]" title="[lang:DIFFPREV]">[lang:DIFF]</a></td>
[websvn-test:showchanges]
<td class="changes"><table>
[websvn-test:revadded]
<tr><td>A</td><td>[websvn:revadded]</td></tr>
[websvn-endtest]
[websvn-test:revdeleted]
<tr><td>D</td><td>[websvn:revdeleted]</td></tr>
[websvn-endtest]
[websvn-test:revmodified]
<tr><td>M</td><td>[websvn:revmodified]</td></tr>
[websvn-endtest]
</table></td>
[websvn-endtest]
<tr>
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td>
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revpathlink]</td>
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revauthor]</td>
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revage]</td>
<td valign="top" class="row[websvn:rowparity]">[websvn:revlog]</td>
</tr>
[websvn-endlisting]
</table>
<center>[websvn:compare_submit]</center>
<p>
[websvn:compare_submit]
[websvn:compare_endform]
[websvn-endtest]
[websvn-test:logsearch_nomorematches]
<p><center>[lang:NOMORERESULTS]</center>
[websvn-endtest]
<p><center>[websvn:logsearch_moreresultslink]</center>
<hr>
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
[websvn-endtest]
/WebSVN/templates/BlueGrey/png.js
0,0 → 1,39
// correctly handle PNG transparency in Win IE 5.5 or higher.
function correctPNG()
{
for(var i = 0; i < document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id='" + img.id + "' " : ""
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
var imgStyle = "display:inline-block;" + img.style.cssText
var imgAttribs = img.attributes;
for (var j=0; j<imgAttribs.length; j++)
{
var imgAttrib = imgAttribs[j];
if (imgAttrib.nodeName == "align")
{
if (imgAttrib.nodeValue == "left") imgStyle = "float:left;" + imgStyle
if (imgAttrib.nodeValue == "right") imgStyle = "float:right;" + imgStyle
break
}
}
var strNewHTML = "<span " + imgID + imgClass + imgTitle
strNewHTML += " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
strNewHTML += "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
 
var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32";
 
if (supported)
window.attachEvent("onload", correctPNG);
/WebSVN/templates/BlueGrey/styles.css
1,401 → 1,131
/* @group General Styles */
 
body {
margin: 0;
font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: 10pt;
body
{
font-family: verdana, sans-serif;
color: black;
background-color: white;
background-color: white
}
h1 {
body *
{
font-size: 10pt;
}
h1
{
font-size: 150%;
margin: 0;
float: left;
}
h2 {
h2
{
font-size: 125%;
}
h3 {
font-size: 105%;
hr
{
border: 0px;
padding: 0px;
height: 1px;
background-color: #808080
}
a:link, a:visited {
a:link, a:visited
{
color: #004080;
text-decoration: none;
}
a:hover, a:active {
a:hover, a:active
{
text-decoration: underline;
}
thead th a:link, thead th a:visited {
.HdrClmn,
.HdrClmnEnd
{
border: black 1px solid;
font-weight: bold;
color: white;
background-color: #809cc8
}
a img {
border: none;
}
 
table {
table
{
border-width: 0px;
border-collapse: collapse;
width: 100%;
}
 
pre {
padding: 4px;
background-color: #eee;
border: solid 1px #ccc;
}
 
code {
white-space: pre-wrap;
}
 
/* Semantic sections */
 
#header {
padding: 5px 0;
border-bottom: 1px solid #555;
}
 
#projects, #revjump {
float: right;
}
 
#revjump, #error {
clear: both;
}
 
#path_links {
clear: left;
padding-top: 5px;
}
#nav {
margin: 10px 0;
}
 
#content {
margin: 10px;
}
#content table {
border: 1px solid #555;
margin: 10px 0;
}
#content th, #content td {
padding: 0 3px;
}
#content thead th {
border: 1px solid #555;
font-weight: bold;
color: white;
background-color: #809cc8;
padding: 1px 4px 2px 1px;
}
#content thead th.path {
text-align: left;
width: 60%;
}
#content thead th.last_mod {
width: 25%;
}
#content thead th.view_log,
#content thead th.download,
#content thead th.rss {
width: 5%;
}
 
.row0, .row1 {
.row0,
.row1
{
height:22px;
border-width: 0px;
}
.row0 img, .row1 img {
.row0 img,
.row1 img {
padding: 0px;
margin: 0px;
vertical-align: middle;
}
.row0 {
.row0
{
background-color: #f0f0f0;
}
.row1 {
.row1
{
background-color: #e0e0e0;
}
 
tr.row0 th, tr.row1 th, #content td {
font-weight: normal;
text-align: left;
vertical-align: top;
border-right: 1px solid #555;
}
tr.row0 th {
.CatClmn0
{
border-right: black 1px solid;
background-color: #e0e0ff
}
tr.row1 th {
background-color: #d0d0ee;
}
th.row1 {
background-color: #d0d0ee;
border-right: 1px solid #555;
}
div.clearer {
clear: both;
height: 0;
}
 
#footer {
padding: 3px;
text-align: center;
font-size: 80%;
font-weight: bold;
background-color: #e5e9fe;
border: solid #555;
border-width: 1px 0;
}
 
div#error, div#warning {
font-weight: bold;
display: table;
padding: 5px;
margin: 10px auto;
border: 1px solid;
}
 
div#error {
border-color: #b2595a;
background-color: #ffe2e2;
}
 
div#warning {
border-color: #b2ac00;
background-color: #ffd;
}
 
/* @end */
 
/* @group blame.tmpl */
 
#blame #content table {
width: 100%;
}
 
#blame #content table tbody th {
font-weight: normal;
text-align: right;
}
 
#blame #content table tbody .light th {
.CatClmn1
{
border-right: black 1px solid;
background-color: #e0e0ff;
background-color: #d0d0ee
}
 
#blame #content table tbody .dark th {
border-right: black 1px solid;
background-color: #d0d0ee;
table.outline
{
border-collapse:collapse;
border: 1px black solid;
}
 
div.blame-popup {
position: absolute;
text-align: left;
background-color: white;
border: solid 2px #809cc8;
padding: 5px;
max-width: 600px;
}
 
div.blame-popup .date {
font-weight: bold;
}
 
/* @end */
 
/* @group compare.tmpl */
 
#compare #params, #params td {
border-width: 0;
}
 
#compare #params td {
vertical-align: middle;
}
 
#compare .comparison {
width: 100%;
margin: 20px 0 10px;
}
 
#compare .comparison tbody th {
text-align: center;
font-weight: bold;
border: 1px solid #555;
}
 
#compare .comparison td {
font-family: monospace;
font-size: 90%;
white-space: pre-wrap;
}
 
/* Whitespace hacks for IE 4-7 */
 
* html #compare .comparison td {
white-space: pre;
}
 
*:first-child+html #compare .comparison td {
white-space: pre;
}
 
/* @end */
 
/* @group diff.tmpl */
 
#diff td {
font-size: 90%;
}
 
#diff td.lineno {
text-align: right;
vertical-align: top;
}
 
td.diffdeleted {
td.diffdeleted
{
font-size: 11px;
background-color: #ff8888;
}
 
td.diffchanged {
td.diffchanged
{
font-size: 11px;
background-color: #ffff88;
}
td.diffchanged ins {
background-color: #88ff88;
text-decoration: none;
}
td.diffchanged del {
background-color: #ff8888;
text-decoration: none;
}
 
td.diffadded {
td.diffadded
{
font-size: 11px;
background-color: #88ff88;
}
 
td.diff {
background-color: #f0f0f0;
td.diff
{
font-size: 11px;
background-color: #F0F0F0;
}
 
div.newpath {
div.newpath
{
padding: 10px;
background-color: #d0d0ee;
background-color: #d0d0ee
}
 
div.difflines {
div.difflines
{
}
 
#diff th.row1 {
border: solid 1px #555;
}
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #D0D0D0; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #809cc8; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
 
/* @end */
.groupname { padding-left: 0px; text-indent: -25px; margin: 3px 0 3px 0;}
.switchcontent { margin: 3px 0 0 20px; }
.project { padding: 2px; }
 
/* @group directory.tmpl */
 
#directory table#listing tbody tr {
height: 22px;
}
 
#directory td.age, #directory td.date, #directory td.rev {
border-right-width: 0;
}
 
img.icon {
vertical-align: middle;
}
 
/* @end */
 
/* @group file.tmpl */
 
#file #listing {
font-size: 90%;
border: 1px solid #999;
padding: 5px;
background-color: #f0f0f0;
}
 
/* @end */
 
/* @group index.tmpl */
 
#index #content table {
margin: 0 auto;
}
 
#index #content th {
padding: 4px;
}
 
#index #content td {
padding: 0px;
vertical-align: middle;
padding-right: 6px;
border-width: 0;
text-align: right;
}
 
#index #content td.project {
text-align: left;
}
 
#index #content td a {
background: url(images/repo.png) no-repeat 3px 3px;
width: 100%;
display: block;
padding-top: 6px;
padding-bottom: 6px;
}
 
#index #content td a, #index #content td.group, #index #content tbody th {
padding-left: 32px;
text-align: left;
}
 
#index #content tbody th {
background-color: #D0D0D0;
text-decoration: underline;
}
 
.groupname {
font-weight: bold;
padding-left: 0px;
text-indent: 4px;
margin: 3px 0 3px 0;
}
 
.switchcontent {
margin: 3px 0 0 20px;
}
 
/* @end */
 
/* @group log.tmpl */
 
#logpagelinks > * {
padding: 0 3px;
}
 
#content td.changes table {
margin: 0;
}
 
#content td.changes * {
border-width: 0;
}
 
/* @end */
 
/* @group revision.tmpl */
 
#revision del {
color: #555;
text-decoration: none;
}
 
#revision a.notinpath {
color: #8d0208;
}
 
/* @end */
code
{
white-space: pre-wrap;
}
/WebSVN/templates/BlueGrey/filecpp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/filehtml.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/filejava.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/filem.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/filepy.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/e-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/file.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/filec.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/fileh.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/folder.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/i-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/l-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/t-node.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/files.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/folder-open.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/repo.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/subversion.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/BlueGrey/xml.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/Standard/blame.tmpl
0,0 → 1,27
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname]</h2>
[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2>
<p>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<table border="1" class="blame" width="100%">
<tr>
<th style="padding-bottom: 5px" align="left"><b>[lang:LINENO]</b></th>
<th style="padding-bottom: 5px" align="left"><b>[lang:REV]</b></th>
<th style="padding-bottom: 5px" align="left"><b>[lang:AUTHOR]</b></th>
<th style="padding-bottom: 5px" align="left"><b>[lang:LINE]</b></th>
</tr>
[websvn-startlisting]
<tr>
<td>[websvn:lineno]</td>
<td>[websvn:revision]</td>
<td>[websvn:author]</td>
<td>[websvn:line]</td>
</tr>
[websvn-endlisting]
</table>
[websvn-endtest]
/WebSVN/templates/Standard/collapse.js
0,0 → 1,169
/***********************************************
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use. Last updated April 2nd, 2005.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
 
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off)
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no)
 
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif">
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol.
var expandonload=false
 
if (document.getElementById)
{
document.write('<style type="text/css">')
document.write('.switchcontent{display:none;}')
document.write('</style>')
}
 
function getElementbyClass(rootobj, classname)
{
var temparray=new Array()
var inc=0
for (i=0; i<rootobj.length; i++)
{
if (rootobj[i].className==classname)
temparray[inc++]=rootobj[i]
}
return temparray
}
 
function sweeptoggle(ec)
{
var thestate=(ec=="expand")? "block" : "none"
var inc=0
while (ccollect[inc])
{
ccollect[inc].style.display=thestate
inc++
}
revivestatus()
collapseprevious = (ec=="expand")? "no" : "yes"
}
 
 
function contractcontent(omit)
{
var inc=0
while (ccollect[inc])
{
if (ccollect[inc].id!=omit)
ccollect[inc].style.display="none"
inc++
}
}
 
function expandcontent(curobj, cid)
{
var spantags=curobj.getElementsByTagName("SPAN")
var showstateobj=getElementbyClass(spantags, "showstate")
if (ccollect.length>0)
{
if (collapseprevious=="yes")
contractcontent(cid)
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none"
if (showstateobj.length>0) //if "showstate" span exists in header
{
if (collapseprevious=="no")
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol
else
revivestatus()
}
}
}
 
function revivecontent()
{
contractcontent("omitnothing")
selectedItem=getselectedItem()
selectedComponents=selectedItem.split("|")
collapseprevious=selectedComponents[0]
for (i=1; i<selectedComponents.length-1; i++)
document.getElementById(selectedComponents[i]).style.display="block"
}
 
function revivestatus()
{
var inc=0
while (statecollect[inc])
{
if (ccollect[inc].style.display=="block")
statecollect[inc].innerHTML=contractsymbol
else
statecollect[inc].innerHTML=expandsymbol
inc++
}
}
 
function get_cookie(Name)
{
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0)
{
offset = document.cookie.indexOf(search)
if (offset != -1)
{
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
 
function getselectedItem()
{
if (get_cookie(window.location.pathname) != "")
{
selectedItem=get_cookie(window.location.pathname)
return selectedItem
}
else
return ""
}
 
function saveswitchstate()
{
var inc=0, selectedItem=collapseprevious+"|"
while (ccollect[inc])
{
if (ccollect[inc].style.display=="block")
selectedItem+=ccollect[inc].id+"|"
inc++
}
document.cookie=window.location.pathname+"="+selectedItem
}
 
function do_onload()
{
uniqueidn=window.location.pathname+"firsttimeload"
var alltags=document.all? document.all : document.getElementsByTagName("*")
ccollect=getElementbyClass(alltags, "switchcontent")
statecollect=getElementbyClass(alltags, "showstate")
if (enablepersist=="on" && ccollect.length>0)
{
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0"
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load
if (!firsttimeload)
revivecontent()
}
if (ccollect.length>0 && statecollect.length>0)
revivestatus()
if (expandonload)
sweeptoggle('expand')
}
 
if (window.addEventListener)
window.addEventListener("load", do_onload, false)
else if (window.attachEvent)
window.attachEvent("onload", do_onload)
else if (document.getElementById)
window.onload=do_onload
 
if (enablepersist=="on" && document.getElementById)
window.onunload=saveswitchstate
/WebSVN/templates/Standard/compare.tmpl
0,0 → 1,66
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname]</h2>
<p>
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<center>
[websvn:compare_form]
<table>
<tr><td>
<table class="outlined">
<tr><td>[lang:COMPPATH]&nbsp;</td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr>
<tr><td>[lang:WITHPATH]&nbsp;</td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr>
</table>
</td><tr>
<tr><td align="center">[websvn:compare_submit]</td></tr>
</table>
[websvn:compare_endform]
</center>
<hr>
[websvn-test:success]
[lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
<p>
[websvn:revlink]
[websvn-endtest]
<p>
[websvn-startlisting]
[websvn-test:newpath]
<p>
<div class="newpath">
<b>[websvn:newpath]</b><br>
[websvn-endtest]
[websvn-test:info]
[websvn:info]<br>
[websvn-endtest]
[websvn-test:difflines]
<div class="difflines">
<p>
[websvn:difflines]<br>
<table class="diff" cellspacing="0">
[websvn-endtest]
[websvn-test:diffclass]
<tr><td class="[websvn:diffclass]">[websvn:line]</td></tr>
[websvn-endtest]
[websvn-test:enddifflines]
</table>
</div>
[websvn-endtest]
[websvn-test:endpath]
</div>
<p><hr>
[websvn-endtest]
[websvn-test:properties]
<p><i>[lang:PROPCHANGES]</i><p>
[websvn-endtest]
[websvn-endlisting]
</table>
[websvn-endtest]
/WebSVN/templates/Standard/diff.tmpl
0,0 → 1,40
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn-test:noprev]
[lang:NOPREVREV]
[websvn-else]
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname]</h2>
[websvn:curdirlinks] - <h2>[lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b></h2>
<p>
<p><center>
[websvn:showcompactlink]
[websvn:showalllink]
</center>
<p>
<table class="diff" width="100%">
<tr>
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th>
<th width="5"></th>
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th>
</tr>
[websvn-startlisting]
[websvn-test:rev1lineno]
<tr>
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
<td width="5"></td>
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
<tr>
[websvn-else]
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
<td width="5"></td>
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr>
[websvn-endtest]
[websvn-endlisting]
</table>
[websvn-endtest]
[websvn-endtest]
/WebSVN/templates/Standard/directory.tmpl
0,0 → 1,117
 
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h1>[websvn:repname]</h1>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn-test:restricted]
[websvn-else]
<p><b>[lang:PATH]:</b> [websvn:path]
<br><b>[lang:REV]:</b> [websvn:rev]
[websvn-test:goyoungestlink]
- [websvn:goyoungestlink]
[websvn-endtest]
<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date]
<br><b>[lang:LOGMSG]:</b><br>
[websvn:log]
<p>
[websvn-test:hidechanges]
<p>[websvn:showchangeslink]
[websvn-endtest]
[websvn-test:showchanges]
<p><b>[lang:CHANGES]:</b><br>
<p>[websvn:hidechangeslink]
<p>
<center>
<table border=1 class="bordered" cellpadding=4>
<tr>
<th><center><b>[lang:NEWFILES]</b></center></th>
<th><center><b>[lang:CHANGEDFILES]</b></center></th>
<th><center><b>[lang:DELETEDFILES]</b></center></th>
</tr>
<tr>
<td valign="top">
[websvn-test:newfilesbr]
[websvn:newfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
<td valign="top">
[websvn-test:changedfilesbr]
[websvn:changedfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
<td valign="top">
[websvn-test:deletedfilesbr]
[websvn:deletedfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
</tr>
</table>
</center>
[websvn-endtest]
[websvn-endtest]
[websvn-defineicons]
dir=&nbsp;&nbsp;&nbsp;&nbsp;
diropen=&nbsp;&nbsp;&nbsp;&nbsp;
i-node=&nbsp;&nbsp;&nbsp;&nbsp;
t-node=&nbsp;&nbsp;&nbsp;&nbsp;
l-node=&nbsp;&nbsp;&nbsp;&nbsp;
e-node=&nbsp;&nbsp;&nbsp;&nbsp;
*=&nbsp;&nbsp;&nbsp;&nbsp;
[websvn-enddefineicons]
<p><hr>
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink]
[websvn-test:curdircomplink]
- [websvn:curdircomplink]
[websvn-endtest]
[websvn-test:curdirdllink]
- [websvn:curdirdllink]
[websvn-endtest]
[websvn-test:curdirrsslink]
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a>
[websvn-endtest]
<p>
[websvn:compare_form]
<table class="outlined" width="100%" cellpadding=2>
<tr>
<th width="100%"><b>[lang:PATH]</b></th>
<th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
[websvn-test:allowdownload]
<th><b>[lang:TARBALL]</b></th>
[websvn-endtest]
[websvn-test:curdirrsslink]
<th><b>[lang:RSSFEED]</b></th>
[websvn-endtest]
</tr>
[websvn-startlisting]
<tr>
<td class="[websvn:rowparity]">
[websvn:compare_box]
[websvn-treenode]
[websvn:filelink]
</td>
<td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
[websvn-test:allowdownload]
<td class="[websvn:rowparity]">[websvn:fileviewdllink]</td>
[websvn-endtest]
[websvn-test:curdirrsslink]
<td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
[websvn-endtest]
</tr>
[websvn-endlisting]
</table>
<p>
[websvn:compare_submit]
[websvn:compare_endform]
[websvn-endtest]
/WebSVN/templates/Standard/file.tmpl
0,0 → 1,18
 
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname]</h2>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn:curdirlinks] - [lang:REV] [websvn:rev]<p>
[websvn-test:goyoungestlink]
[websvn:goyoungestlink]<p>
[websvn-endtest]
[websvn:prevdifflink] - [websvn:blamelink]
<p>
<table width="100%" border=0><tr><td>
[websvn-getlisting]
</td></tr></table>
[websvn-endtest]
/WebSVN/templates/Standard/footer.tmpl
0,0 → 1,3
<p><center><font size="-1"><i><b>[lang:POWERED] v[websvn:version]</b></i></font></center>
</body>
</html>
/WebSVN/templates/Standard/header.tmpl
0,0 → 1,73
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=[websvn:charset]">
<link href="[websvn:locwebsvnhttp]/templates/Standard/styles.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/Standard/collapse.js"></script>
<script type="text/javascript">
function checkCB(chBox)
{
count = 0
first = null
f = chBox.form
for (i = 0 ; i < f.elements.length ; i++)
if (f.elements[i].type == 'checkbox' && f.elements[i].checked)
{
if (first == null && f.elements[i] != chBox)
first = f.elements[i]
count += 1
}
if (count > 2)
{
first.checked = false
count -= 1
}
 
[websvn-test:opentree]
expandonload = true
[websvn-endtest]
 
}
</script>
<title>
WebSVN
[websvn-test:repname]
- [websvn:repname]
[websvn-endtest]
[websvn-test:action]
- [websvn:action]
[websvn-endtest]
[websvn-test:rev2]
[websvn-test:path2]
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2]
[websvn-else]
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
[websvn-endtest]
[websvn-else]
[websvn-test:rev]
- [lang:REV] [websvn:rev]
[websvn-endtest]
[websvn-endtest]
[websvn-test:path]
- [websvn:safepath]
[websvn-endtest]
</title>
 
[websvn-test:curdirrsslink]
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:curdirrsshref]">
[websvn-endtest]
 
</head>
<body>
<table width="100%" border="0">
<tr>
<td width="33%">&nbsp;</td>
<td width="33%" align="center"><h1>[lang:SERVER]</h1></td>
<td width="33%"><div style="float: right">[websvn:lang_form][websvn:lang_select][websvn:lang_submit][websvn:lang_endform]</div></td>
</tr>
</table>
 
<hr>
<p>
/WebSVN/templates/Standard/index.tmpl
0,0 → 1,35
[websvn-test:flatview]
<table border=0 cellspacing=0 cellpadding=0 align="center">
<tr>
<td align="center">
<br><h2>[lang:PROJECTS]:</h2>
<table border=0>
<tr><td><ul>
[websvn-startlisting]
<li><strong>[websvn:projlink]</strong></li>
[websvn-endlisting]
</ul></td></tr>
</table>
</td>
</tr>
</table>
[websvn-else]
<table border=0 cellspacing=0 cellpadding=0 align="center">
<tr>
<td align="center">
<br><h2>[lang:PROJECTS]:</h2>
<table border=0>
<tr><td>
[websvn-startlisting]
[websvn-test:isprojlink]
<div style="padding: 3px">[websvn:listitem]</div>
[websvn-else]
[websvn:listitem]
[websvn-endtest]
[websvn-endlisting]
</td></tr>
</table>
</td>
</tr>
</table>
[websvn-endtest]
/WebSVN/templates/Standard/log.tmpl
0,0 → 1,64
 
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname] - [lang:REV] [websvn:rev]</h2>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn:curdirlinks]<p>
[websvn-test:goyoungestlink]
[websvn:goyoungestlink]<p>
[websvn-endtest]
<center>
[websvn:logsearch_form]
<b>[lang:FILTER]</b><p>
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox]
[websvn:logsearch_submit]
[websvn-test:logsearch_clearloglink]
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p>
[websvn-endtest]
[websvn:logsearch_endform]
</center>
[websvn-test:logsearch_nomatches]
<center>[lang:NORESULTS]</center>
[websvn-endtest]
[websvn-test:error]
<center>[websvn:error]</center>
[websvn-endtest]
 
[websvn-test:logsearch_resultsfound]
[websvn:compare_form]
<table border=1 class="outlined" width="100%" cellpadding=2>
<tr>
<th>[lang:REV]</th>
<th>[lang:PATH]</th>
<th>[lang:AUTHOR]</th>
<th>[lang:AGE]</th>
<th>[lang:LOGMSG]</th>
</tr>
[websvn-startlisting]
<tr>
<td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td>
<td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revage]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td>
</tr>
[websvn-endlisting]
</table>
<p>
[websvn:compare_submit]
[websvn:compare_endform]
[websvn-endtest]
[websvn-test:logsearch_nomorematches]
<p><center>[lang:NOMORERESULTS]</center>
[websvn-endtest]
<p><center>[websvn:logsearch_moreresultslink]</center>
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
[websvn-endtest]
/WebSVN/templates/Standard/styles.css
0,0 → 1,93
body
{
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif;
background-color: white;
margin: 20px;
padding: 0px
}
 
h1
{
color: #99007E;
font-size: 30px;
font-weight: normal;
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif;
text-decoration: none;
}
 
hr { color: #99007E; background-color: #99007E }
 
.highlight { color: #99007E; font-style: italic; }
 
table.bordered, table.outlined, table.blame
{
border-collapse: collapse;
border: solid 2px #99007E;
}
 
.bordered td, .bordered th
{
border: solid 2px #99007E;
}
 
.outlined td
{
padding: 0px 5px 0px 5px;
}
 
.outlined th, .blame th
{
padding: 5px 5px 5px 5px;
font-weight: bold;
border: solid 2px #99007E;
}
 
.outlined td, .blame td
{
padding: 1px 5px 1px 5px;
border-right: solid 2px #99007E;
border-bottom: solid 1px #F0F0F0;
}
 
td.diffdeleted
{
font-size: 11px;
background-color: red;
}
 
td.diffchanged
{
font-size: 11px;
background-color: yellow;
}
 
td.diffadded
{
font-size: 11px;
background-color: green;
}
 
td.diff
{
font-size: 11px;
background-color: #D0D0D0;
}
 
table.diff
{
border-collapse: collapse;
}
 
div.newpath
{
padding: 5px 5px 5px 5px;
border: solid 2px #99007E;
}
 
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #D0D0D0; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #99007E; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
 
.groupname { padding-left: 0px; text-indent: -25px; margin: 3px 0 3px 0;}
.switchcontent { margin: 3px 0 0 20px; }
 
code { white-space: pre-wrap; }
/WebSVN/templates/Standard/xml.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/StandardNG/collapse.js
0,0 → 1,169
/***********************************************
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use. Last updated April 2nd, 2005.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
 
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off)
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no)
 
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif">
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol.
var expandonload=false
 
if (document.getElementById)
{
document.write('<style type="text/css">')
document.write('.switchcontent{display:none;}')
document.write('</style>')
}
 
function getElementbyClass(rootobj, classname)
{
var temparray=new Array()
var inc=0
for (i=0; i<rootobj.length; i++)
{
if (rootobj[i].className==classname)
temparray[inc++]=rootobj[i]
}
return temparray
}
 
function sweeptoggle(ec)
{
var thestate=(ec=="expand")? "block" : "none"
var inc=0
while (ccollect[inc])
{
ccollect[inc].style.display=thestate
inc++
}
revivestatus()
collapseprevious = (ec=="expand")? "no" : "yes"
}
 
 
function contractcontent(omit)
{
var inc=0
while (ccollect[inc])
{
if (ccollect[inc].id!=omit)
ccollect[inc].style.display="none"
inc++
}
}
 
function expandcontent(curobj, cid)
{
var spantags=curobj.getElementsByTagName("SPAN")
var showstateobj=getElementbyClass(spantags, "showstate")
if (ccollect.length>0)
{
if (collapseprevious=="yes")
contractcontent(cid)
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none"
if (showstateobj.length>0) //if "showstate" span exists in header
{
if (collapseprevious=="no")
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol
else
revivestatus()
}
}
}
 
function revivecontent()
{
contractcontent("omitnothing")
selectedItem=getselectedItem()
selectedComponents=selectedItem.split("|")
collapseprevious=selectedComponents[0]
for (i=1; i<selectedComponents.length-1; i++)
document.getElementById(selectedComponents[i]).style.display="block"
}
 
function revivestatus()
{
var inc=0
while (statecollect[inc])
{
if (ccollect[inc].style.display=="block")
statecollect[inc].innerHTML=contractsymbol
else
statecollect[inc].innerHTML=expandsymbol
inc++
}
}
 
function get_cookie(Name)
{
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0)
{
offset = document.cookie.indexOf(search)
if (offset != -1)
{
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
 
function getselectedItem()
{
if (get_cookie(window.location.pathname) != "")
{
selectedItem=get_cookie(window.location.pathname)
return selectedItem
}
else
return ""
}
 
function saveswitchstate()
{
var inc=0, selectedItem=collapseprevious+"|"
while (ccollect[inc])
{
if (ccollect[inc].style.display=="block")
selectedItem+=ccollect[inc].id+"|"
inc++
}
document.cookie=window.location.pathname+"="+selectedItem
}
 
function do_onload()
{
uniqueidn=window.location.pathname+"firsttimeload"
var alltags=document.all? document.all : document.getElementsByTagName("*")
ccollect=getElementbyClass(alltags, "switchcontent")
statecollect=getElementbyClass(alltags, "showstate")
if (enablepersist=="on" && ccollect.length>0)
{
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0"
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load
if (!firsttimeload)
revivecontent()
}
if (ccollect.length>0 && statecollect.length>0)
revivestatus()
if (expandonload)
sweeptoggle('expand')
}
 
if (window.addEventListener)
window.addEventListener("load", do_onload, false)
else if (window.attachEvent)
window.attachEvent("onload", do_onload)
else if (document.getElementById)
window.onload=do_onload
 
if (enablepersist=="on" && document.getElementById)
window.onunload=saveswitchstate
/WebSVN/templates/StandardNG/diff.tmpl
0,0 → 1,37
[websvn-test:noprev]
[lang:NOPREVREV]
[websvn-else]
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname]</h2>
[websvn:curdirlinks] - <h2>[lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b></h2>
<p>
<p><center>
[websvn:showcompactlink]
[websvn:showalllink]
</center>
<p>
<table class="diff" width="100%">
<tr>
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th>
<th width="5"></th>
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th>
</tr>
[websvn-startlisting]
[websvn-test:rev1lineno]
<tr>
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
<td width="5"></td>
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
<tr>
[websvn-else]
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
<td width="5"></td>
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr>
[websvn-endtest]
[websvn-endlisting]
</table>
[websvn-endtest]
[websvn-endtest]
/WebSVN/templates/StandardNG/ie7/ie7-base64.php
0,0 → 1,7
<?php
$data = split(";", $_SERVER["REDIRECT_QUERY_STRING"]);
$type = $data[0];
$data = split(",", $data[1]);
header("Content-type: ".$type);
echo base64_decode($data[1]);
?>
/WebSVN/templates/StandardNG/ie7/ie7-content.htc
0,0 → 1,14
<html>
<!--
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
-->
<head>
<object id="dummy" width="0" height="0"></object>
<base id="base">
<style type="text/css">html,body,img{margin:0;}img{vertical-align:top}#dummy{display:inline}</style>
<script type="text/javascript">public_description=new function(){var l=false;this.ie7_anon=true;this.load=function(o,c,u){if(l)return;l=true;base.href=o.document.URL;dummy.style.cssText=c;var _0=o.parentElement;var _1=Boolean(dummy.currentStyle.display=="inline");function r(){o.runtimeStyle.width=(_1)?image.offsetWidth:"100%";o.runtimeStyle.height=body.offsetHeight};image.onreadystatechange=function(){if(this.readyState=="complete")_2()};image.src=u;function _2(){function copy(p){try{body.style[p]=_0.currentStyle[p]}catch(i){}};for(var j in body.currentStyle)copy(j);body.style.width="";body.style.height="";body.style.border="none";body.style.padding="0";body.style.margin="0";body.style.textIndent="";body.style.position="static";while(_0&&_0.currentStyle.backgroundColor=="transparent"){_0=_0.parentElement}if(_0)document.body.style.backgroundColor=_0.currentStyle.backgroundColor;body.runtimeStyle.cssText=c;body.runtimeStyle.margin="0";if(_1)body.runtimeStyle.width="";r()}}};</script>
</head>
<body><span id="body"><img id="image"></span></body>
</html>
/WebSVN/templates/StandardNG/ie7/ie7-core.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('x(!1M.1j)z 6(){1l{1M.1j=8;4 1W=8.2m=z 26;8.O=6(){7"1j 2q 0.9 (5G)"};4 36=/36/.B(42.41.40);4 1G=(36)?6(m){1M.1G(1j+"\\n\\n"+m)}:1W;4 2t=5F.2t.1g(/5E (\\d\\.\\d)/)[1];4 2z=K.5D!="5C";x(/5B/.B(42.41.40)||2t<5||!/^5A/.B(K.1J.2A))7;4 1H=K.39=="1H";4 1t,5z;4 1J=K.1J,2s,3X,17=K.17;4 5y="!";4 22={};4 1u=1C;1j.2m=6(n,s){x(!22[n]){x(1u)1k("s="+2o(s));22[n]=z s()}};4 R=/^[\\w\\.]+[^:]*$/;6 1I(h,p){x(R.B(h))h=(p||"")+h;7 h};6 2e(h,p){h=1I(h,p);7 h.1d(0,h.3n("/")+1)};4 s=K.3Z[K.3Z.y-1];1l{1k(s.3z)}1i(i){}4 1R=2e(s.5x);4 1F;1l{4 l=(5w()>=5)?"5v":"5u";1F=z 5t(l+".5s")}1i(i){}4 2w={};6 2y(h,p){1l{h=1I(h,p);x(!2w[h]){1F.5r("5q",h,1C);1F.5p();x(1F.3Y==0||1F.3Y==5o){2w[h]=1F.5n}}}1i(i){1G("2x [1]: 30 5m 5l "+h)}37{7 2w[h]||""}};4 5k=1I("5j.5i",1R);6 1E(V){x(V!=1L){V.2v=13.16.2v;V.12=13.16.12}7 V};1E.12=6(p,c){x(!p)p={};x(!c)c=p.J;x(c=={}.J)c=z 26("8.2v()");c.Y=z 26("7 8");c.Y.16=z 8.Y;c.Y.16.12(p);c.16=z c.Y;c.Y.16.J=c.16.J=c;c.1r=8;c.12=F.32;c.2u=8.2u;7 c};1E.Y=z 26("7 8");1E.Y.16={J:1E,2v:6(){7 F.32.5h.1r.2k(8,F)},12:6(V){x(8==8.J.16&&8.J.12){7 8.J.Y.16.12(V)}D(4 i 5g V){2K(i){1o"J":1o"O":1o"Y":2X}x(2V V[i]=="6"&&V[i]!=8[i]){V[i].1r=8[i]}8[i]=V[i]}x(V.O!=8.O&&V.O!={}.O){V.O.1r=8.O;8.O=V.O}7 8}};6 13(){};8.13=1E.12({J:13,O:6(){7"[5f "+(8.J.2Z||"5e")+"]"},5d:6(1h){7 8.J==1h||1h.2u(8.J)}});13.2Z="13";13.1r=1L;13.2u=6(1h){1f(1h&&1h.1r!=8)1h=1h.1r;7 3J(1h)};13.Y.1r=1E;2a 8.13;4 3A=13.12({J:6(){8.5c=[];8.1p=[]},1s:1W});x(2t<5.5)1k(2y("Z-5b.3a",1R));4 35=1C;1j.1s=6(){1l{x(35)7;35=1H=1c;2s=K.2s;3X=(2z)?2s:1J;x(1K&&1t)1t.2k();15.2k();1n();1G("1u 5a")}1i(e){1G("2x [2]: "+e.38)}};4 1p=[];6 2C(r){1p.11(r)};6 1n(){H.3P();x(1K&&1t)1t.1n();15.1n();D(4 i=0;i<1p.y;i++)1p[i]()};6 23(){4 E=0,R=1,L=2;4 G=/\\(/g,S=/\\$\\d/,I=/^\\$\\d+$/,T=/([\'"])\\1\\+(.*)\\+\\1\\1$/,3Q=/\\\\./g,Q=/\'/,3W=/\\25[^\\25]*\\25/g;4 1X=8;8.18=6(e,r){x(!r)r="";4 l=(34(2o(e)).1g(G)||"").y+1;x(S.B(r)){x(I.B(r)){r=3e(r.1d(1))-1}1b{4 i=l;4 q=Q.B(34(r))?\'"\':"\'";1f(i)r=r.2S("$"+i--).2p(q+"+a[o+"+i+"]+"+q);r=z 26("a,o","7"+q+r.19(T,"$1")+q)}}3V(e||"/^$/",r,l)};8.1U=6(s){24.y=0;7 3R(3S(s,8.2r).19(z 1Z(1D,8.33?"2I":"g"),3T),8.2r).19(3W,"")};8.59=6(){1D.y=0};4 24=[];4 1D=[];4 3U=6(){7"("+2o(8[E]).1d(1,-1)+")"};1D.O=6(){7 8.2p("|")};6 3V(){F.O=3U;1D[1D.y]=F}6 3T(){x(!F[0])7"";4 i=1,j=0,p;1f(p=1D[j++]){x(F[i]){4 r=p[R];2K(2V r){1o"6":7 r(F,i);1o"58":7 F[r+i]}4 d=(F[i].57(1X.2r)==-1)?"":"\\25"+F[i]+"\\25";7 d+r}1b i+=p[L]}};6 3S(s,e){7 e?s.19(z 1Z("\\\\"+e+"(.)","g"),6(m,c){24[24.y]=c;7 e}):s};6 3R(s,e){4 i=0;7 e?s.19(z 1Z("\\\\"+e,"g"),6(){7 e+(24[i++]||"")}):s};6 34(s){7 s.19(3Q,"")}};23.16={J:23,33:1C,2r:""};13.12(23.16);4 1V=23.12({33:1c});4 H=6(){4 2q="2.0.2";4 C=/\\s*,\\s*/;4 H=6(s,14){1l{4 m=[];4 u=F.32.2Q&&!14;4 b=(14)?(14.J==3G)?14:[14]:[K];4 31=3D(s).2S(C),i;D(i=0;i<31.y;i++){s=2R(31[i]);x(3K&&s.1d(0,3).2p("")==" *#"){s=s.1d(2);14=3H([],b,s[1])}1b 14=b;4 j=0,t,f,a,c="";1f(j<s.y){t=s[j++];f=s[j++];c+=t+f;a="";x(s[j]=="("){1f(s[j++]!=")"&&j<s.y){a+=s[j]}a=a.1d(0,-1);c+="("+a+")"}14=(u&&1P[c])?1P[c]:3F(14,t,f,a);x(u)1P[c]=14}m=m.3t(14)}2a H.30;7 m}1i(e){H.30=e;7[]}};H.O=6(){7"6 H() {\\n [2q "+2q+"]\\n}"};4 1P={};H.2Q=1C;H.3P=6(s){x(s){s=2R(s).2p("");2a 1P[s]}1b 1P={}};4 22={};4 1u=1C;H.2m=6(n,s){x(1u)1k("s="+2o(s));22[n]=z s()};H.Y=6(c){7 c?1k(c):8};4 1B={};4 2n={};4 56={1g:/\\[([\\w-]+(\\|[\\w-]+)?)\\s*(\\W?=)?\\s*([^\\]]*)\\]/};4 55=[];1B[" "]=6(r,f,t,n){4 e,i,j;D(i=0;i<f.y;i++){4 s=2l(f[i],t,n);D(j=0;(e=s[j]);j++){x(1q(e)&&2T(e,n))r.11(e)}}};1B["#"]=6(r,f,i){4 e,j;D(j=0;(e=f[j]);j++)x(e.1a==i)r.11(e)};1B["."]=6(r,f,c){c=z 1Z("(^|\\\\s)"+c+"(\\\\s|$)");4 e,i;D(i=0;(e=f[i]);i++)x(c.B(e.2Z))r.11(e)};1B[":"]=6(r,f,p,a){4 t=2n[p],e,i;x(t)D(i=0;(e=f[i]);i++)x(t(e,a))r.11(e)};2n["21"]=6(e){4 d=2U(e);x(d.2Y)D(4 i=0;i<d.2Y.y;i++){x(d.2Y[i]==e)7 1c}};2n["2N"]=6(e){};4 1q=6(e){7(e&&e.3B==1&&e.2P!="!")?e:1L};4 3N=6(e){1f(e&&(e=e.54)&&!1q(e))2X;7 e};4 2W=6(e){1f(e&&(e=e.53)&&!1q(e))2X;7 e};4 3L=6(e){7 1q(e.3O)||2W(e.3O)};4 52=6(e){7 1q(e.3M)||3N(e.3M)};4 51=6(e){4 c=[];e=3L(e);1f(e){c.11(e);e=2W(e)}7 c};4 3K=1c;4 2O=6(e){4 d=2U(e);7(2V d.3I=="50")?/\\.4Z$/i.B(d.4Y):3J(d.3I=="4X 4W")};4 2U=6(e){7 e.4V||e.K};4 2l=6(e,t){7(t=="*"&&e.1A)?e.1A:e.2l(t)};4 4U=6(e,t,n){x(t=="*")7 1q(e);x(!2T(e,n))7 1C;x(!2O(e))t=t.4T();7 e.2P==t};4 2T=6(e,n){7!n||(n=="*")||(e.4S==n)};4 4R=6(e){7 e.4Q};6 3H(r,f,1a){4 m,i,j;D(i=0;i<f.y;i++){x(m=f[i].1A.4P(1a)){x(m.1a==1a)r.11(m);1b x(m.y!=1L){D(j=0;j<m.y;j++){x(m[j].1a==1a)r.11(m[j])}}}}7 r};x(![].11)3G.16.11=6(){D(4 i=0;i<F.y;i++){8[8.y]=F[i]}7 8.y};4 N=/\\|/;6 3F(14,t,f,a){x(N.B(f)){f=f.2S(N);a=f[0];f=f[1]}4 r=[];x(1B[t]){1B[t](r,14,f,a)}7 r};4 S=/^[^\\s>+~]/;4 3E=/[\\s#.:>+~()@]|[^\\s#.:>+~()@]+/g;6 2R(s){x(S.B(s))s=" "+s;7 s.1g(3E)||[]};4 W=/\\s*([\\s>+~(),]|^|$)\\s*/g;4 I=/([\\s>+~,]|[^(]\\+|^)([#.:@])/g;4 3D=6(s){7 s.19(W,"$1").19(I,"$1*$2")};4 1y={O:6(){7"\'"},1g:/^(\'[^\']*\')|("[^"]*")$/,B:6(s){7 8.1g.B(s)},18:6(s){7 8.B(s)?s:8+s+8},3C:6(s){7 8.B(s)?s.1d(1,-1):s}};4 1N=6(t){7 1y.3C(t)};4 E=/([\\/()[\\]?{}|*+-])/g;6 4O(s){7 s.19(E,"\\\\$1")};1u=1c;7 H}();H.2Q=1c;H.2m("Z",6(){1q=6(e){7(e&&e.3B==1&&e.2P!="!"&&!e.3d)?e:1L}});H.Y("1N=F[1]",3k);4 1K=!H.Y("2O(F[1])",1J);4 2h=":21{Z-21:21}:2N{Z-21:2N}"+(1K?"":"*{4N:0}");4 15=z(3A.12({2F:z 1V,1O:"",1w:"",2L:[],1s:6(){8.2M();8.2g()},2g:6(){15.1Y.X=2h+8.1O+8.1w},3y:6(){4 20=K.2l("1e"),s;D(4 i=20.y-1;(s=20[i]);i--){x(!s.2H&&!s.Z){8.2L.11(s.3z)}}},2k:6(){8.3y();8.2g();z 28("1O");8.3u()},3w:6(e,r){8.2F.18(e,r)},1n:6(){4 R=/3v\\d+/g;4 s=2h.1g(/[{,]/g).y;4 20=s+(8.1O.X.1g(/\\{/g)||"").y;4 3x=8.1Y.4M,r;4 2j,c,2i,e,i,j,k,1a;D(i=s;i<20;i++){r=3x[i];x(r&&(2j=r.1e.X.1g(R))){2i=H(r.4L);x(2i.y)D(j=0;j<2j.y;j++){1a=2j[j];c=15.1p[1a.1d(10)][2];D(k=0;(e=2i[k]);k++){x(e.1v[1a])c(e)}}}}},2C:6(p,t,h,r){t=z 1Z("([{;\\\\s])"+p+"\\\\s*:\\\\s*"+t+"[^;}]*");4 i=8.1p.y;x(r)r=p+":"+r;8.3w(t,6(m,o){7(r?m[o+1]+r:m[o])+";Z-"+m[o].1d(1)+";3v"+i+":1"});8.1p.11(F);7 i},1N:6(s){7 s.X||""},2M:6(){x(1H||!1K)K.2M();1b K.4K("<1e Z=1c></1e>");8.1Y=17[17.y-1];8.1Y.Z=1c;8.1Y.X=2h},3u:6(){D(4 i=0;i<17.y;i++){x(!17[i].Z&&17[i].X){17[i].X=""}}}}));6 28(m){8.1z=m;8.1S();15[m]=8;15.2g()};13.12({J:28,O:6(){7"@1z "+8.1z+"{"+8.X+"}"},1n:1W,1S:6(){8.X="";8.1N();8.3m();8.X=3j(8.X);f={}},1N:6(){4 3r=[].3t(15.2L);4 M=/@1z\\s+([^{]*)\\{([^@]+\\})\\s*\\}/2I;4 A=/\\4J\\b|^$/i,S=/\\4I\\b/i,P=/\\4H\\b/i;6 3q(c,m){2f.v=m;7 c.19(M,2f)};6 2f(4G,m,c){m=2J(m);2K(m){1o"1O":1o"1w":x(m!=2f.v)7"";1o"1A":7 c}7""};6 2J(m){x(A.B(m))7"1A";1b x(S.B(m))7(P.B(m))?"1A":"1O";1b x(P.B(m))7"1w"};4 1X=8;6 2G(s,p,m,l){4 c="";x(!l){m=2J(s.1z);l=0}x(m=="1A"||m==1X.1z){x(l<3){D(4 i=0;i<s.3s.y;i++){c+=2G(s.3s[i],2e(s.2d,p),m,l+1)}}c+=3l(s.2d?3p(s,p):3r.3h()||"");c=3q(c,1X.1z)}7 c};4 f={};6 3p(s,p){4 u=1I(s.2d,p);x(f[u])7"";f[u]=(s.2H)?"":3o(15.1N(s,p),2e(s.2d,p));7 f[u]};4 U=/(4F\\s*\\(\\s*[\'"]?)([\\w\\.]+[^:\\)]*[\'"]?\\))/2I;6 3o(c,p){7 c.19(U,"$1"+p.1d(0,p.3n("/")+1)+"$2")};D(4 i=0;i<17.y;i++){x(!17[i].2H&&!17[i].Z){8.X+=2G(17[i])}}},3m:6(){8.X=15.2F.1U(8.X)},1n:1W});4 1y=H.Y("1y");4 2b=[];6 3l(c){7 1x.1U(2c.1U(c))};6 2E(m,o){7 1y+(2b.11(m[o])-1)+1y};6 3k(v){7 1y.B(v)?1k(2b[1k(v)]):v};4 1x=z 1V;1x.18(/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\//);1x.18(/\'[^\']*\'/,2E);1x.18(/"[^"]*"/,2E);1x.18(/\\s+/," ");1x.18(/@(4E|4D)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->/);4 2c=z 1V;2c.18(/\\\\\'/,"\\\\4C");2c.18(/\\\\"/,"\\\\4B");4 2D=z 1V;2D.18(/\'(\\d+)\'/,3i);6 3j(c){7 2D.1U(c)};6 3i(m,o){7 2b[m[o+1]]};4 2B=[];6 4A(h){2C(h);1Q(1M,"4z",h)};6 1Q(e,t,h){e.4y(t,h);2B.11(F)};6 3g(e,t,h){1l{e.4x(t,h)}1i(i){}};1Q(1M,"4w",6(){4 h;1f(h=2B.3h()){3g(h[0],h[1],h[2])}});6 4v(h,e,c){x(!h.29)h.29={};x(c)h.29[e.2A]=e;1b 2a h.29[e.2A];7 c};1Q(1M,"4u",6(){x(!15.1w)z 28("1w");15.1w.1n()});4 3f=/^\\d+(4t)?$/i;4 4s=/^\\d+%$/;4 4r=6(e,v){x(3f.B(v))7 3e(v);4 s=e.1e.1m;4 r=e.1T.1m;e.1T.1m=e.1v.1m;e.1e.1m=v||0;v=e.1e.4q;e.1e.1m=s;e.1T.1m=r;7 v};6 4p(t){4 e=K.4o(t||"4n");e.1e.X="3c:4m;4l:0;4k:4j;4i:4h;4g:4f(0 0 0 0);1m:-4e";e.3d=1c;7 e};4 27="Z-";6 4d(e){7 e.1v["Z-3c"]=="4c"};6 4b(e,p){7 e.1v[27+p]||e.1v[p]};6 4a(e,p,v){x(e.1v[27+p]==1L){e.1T[27+p]=e.1v[p]}e.1T[p]=v};6 49(o,c,u){4 t=48(6(){1l{x(!o.1S)7;o.1S(o,c,u);3b(t)}1i(i){3b(t)}},10)};1u=1c;x(2z)1k(2y("Z-47.3a",1R));15.1s();x(1K&&1t)1t.1s();x(1H)1j.1s();1b{1J.46(1I("Z-1S.45",1R));1Q(K,"44",6(){x(K.39=="1H")43(1j.1s,0)})}}1i(e){1G("2x [0]: "+e.38)}37{}};',62,353,'||||var||function|return|this|||||||||||||||||||||||||if|length|new||test||for||arguments||cssQuery||constructor|document||||toString|||||||that||cssText|valueOf|ie7||push|specialize|Common|fr|ie7CSS|prototype|styleSheets|add|replace|id|else|true|slice|style|while|match|klass|catch|IE7|eval|try|left|recalc|case|recalcs|thisElement|ancestor|init|ie7HTML|loaded|currentStyle|print|encoder|Quote|media|all|selectors|false|_0|ICommon|httpRequest|alert|complete|makePath|documentElement|isHTML|null|window|getText|screen|cache|addEventHandler|path|load|runtimeStyle|exec|Parser|DUMMY|self|styleSheet|RegExp|st|link|modules|ParseMaster|_1|x01|Function|_2|StyleSheet|elements|delete|_3|safeString|href|getPath|_4|refresh|HEADER|el|ca|apply|getElementsByTagName|addModule|pseudoClasses|String|join|version|escapeChar|body|appVersion|ancestorOf|inherit|_5|Error|loadFile|quirksMode|uniqueID|_6|addRecalc|decoder|_7|parser|_8|disabled|gi|_9|switch|styles|createStyleSheet|visited|isXML|tagName|caching|_10|split|compareNamespace|getDocument|typeof|nextElementSibling|continue|links|className|error|se|callee|ignoreCase|_11|_12|ie7_debug|finally|description|readyState|js|clearInterval|position|ie7_anon|parseInt|PIXEL|removeEventHandler|pop|_13|decode|getString|_14|parse|lastIndexOf|_15|_16|_17|_18|imports|concat|trash|ie7_recalc|addFix|ru|getInlineStyles|innerHTML|Fix|nodeType|remove|parseSelector|ST|select|Array|_19|mimeType|Boolean|isMSIE|firstElementChild|lastChild|previousElementSibling|firstChild|clearCache|ES|_20|_21|_22|_23|_24|DE|viewport|status|scripts|search|location|top|setTimeout|onreadystatechange|htc|addBehavior|quirks|setInterval|addTimer|setOverrideStyle|getDefinedStyle|fixed|isFixed|9999|rect|clip|none|border|block|display|padding|absolute|object|createElement|createTempElement|pixelLeft|getPixelValue|PERCENT|px|onbeforeprint|register|onunload|detachEvent|attachEvent|onresize|addResize|x22|x27|import|namespace|url|ma|bprint|bscreen|ball|write|selectorText|rules|margin|regEscape|item|innerText|getTextContent|scopeName|toUpperCase|compareTagName|ownerDocument|Document|XML|URL|xml|unknown|childElements|lastElementChild|nextSibling|previousSibling|attributeSelectors|AttributeSelector|indexOf|number|reset|successfully|ie5|fixes|instanceOf|Object|common|in|caller|gif|blank|BLANK_GIF|file|loading|responseText|200|send|GET|open|XMLHTTP|ActiveXObject|Microsoft|Msxml2|ScriptEngineMajorVersion|src|ANON|ie7Layout|ms_|ie7_off|CSS1Compat|compatMode|MSIE|navigator|alpha'.split('|'),0,{}))
/WebSVN/templates/StandardNG/ie7/ie7-css-strict.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-css-strict",function(){if(!modules["ie7-css2-selectors"])return;StyleSheet.prototype.specialize({parse:function(){this.inherit();var r=[].concat(this.rules);r.sort(ie7CSS.Rule.compare);this.cssText=r.join("\n")},createRule:function(s,c){var m;if(m=s.match(ie7CSS.PseudoElement.MATCH))return new ie7CSS.PseudoElement(m[1],m[2],c);else if(m=s.match(ie7CSS.DynamicRule.MATCH))return new ie7CSS.DynamicRule(s,m[1],m[2],m[3],c);else return new ie7CSS.Rule(s,c)}});ie7CSS.specialize({apply:function(){this.inherit();this.Rule.MATCH=/([^{}]+)(\{[^{}]*\})/g}});ie7CSS.Rule.compare=function(r1,r2){return r1.specificity-r2.specificity};var N=[],I=/#/g,C=/[.:\[]/g,T=/^\w|[\s>+~]\w/g;ie7CSS.Rule.score=function(s){return(s.match(I)||N).length*10000+(s.match(C)||N).length*100+(s.match(T)||N).length};ie7CSS.Rule.simple=function(){return""};ie7CSS.Rule.prototype.specialize({specificity:0,init:function(){this.specificity=ie7CSS.Rule.score(this.selector)}})});
/WebSVN/templates/StandardNG/ie7/ie7-css2-selectors.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-css2-selectors",function(){cssQuery.addModule("css-level2",function(){selectors[">"]=function(r,f,t,n){var e,i,j;for(i=0;i<f.length;i++){var s=childElements(f[i]);for(j=0;(e=s[j]);j++)if(compareTagName(e,t,n))r.push(e)}};selectors["+"]=function(r,f,t,n){for(var i=0;i<f.length;i++){var e=nextElementSibling(f[i]);if(e&&compareTagName(e,t,n))r.push(e)}};selectors["@"]=function(r,f,a){var t=attributeSelectors[a].test;var e,i;for(i=0;(e=f[i]);i++)if(t(e))r.push(e)};pseudoClasses["first-child"]=function(e){return!previousElementSibling(e)};pseudoClasses["lang"]=function(e,c){c=new RegExp("^"+c,"i");while(e&&!e.getAttribute("lang"))e=e.parentNode;return e&&c.test(e.getAttribute("lang"))};AttributeSelector.NS_IE=/\\:/g;AttributeSelector.PREFIX="@";AttributeSelector.tests={};AttributeSelector.replace=function(m,a,n,c,v){var k=this.PREFIX+m;if(!attributeSelectors[k]){a=this.create(a,c||"",v||"");attributeSelectors[k]=a;attributeSelectors.push(a)}return attributeSelectors[k].id};AttributeSelector.parse=function(s){s=s.replace(this.NS_IE,"|");var m;while(m=s.match(this.match)){var r=this.replace(m[0],m[1],m[2],m[3],m[4]);s=s.replace(this.match,r)}return s};AttributeSelector.create=function(p,t,v){var a={};a.id=this.PREFIX+attributeSelectors.length;a.name=p;t=this.tests[t];t=t?t(this.getAttribute(p),getText(v)):false;a.test=new Function("e","return "+t);return a};AttributeSelector.getAttribute=function(n){switch(n.toLowerCase()){case"id":return"e.id";case"class":return"e.className";case"for":return"e.htmlFor";case"href":if(isMSIE){return"String((e.outerHTML.match(/href=\\x22?([^\\s\\x22]*)\\x22?/)||[])[1]||'')"}}return"e.getAttribute('"+n.replace(N,":")+"')"};AttributeSelector.tests[""]=function(a){return a};AttributeSelector.tests["="]=function(a,v){return a+"=="+Quote.add(v)};AttributeSelector.tests["~="]=function(a,v){return"/(^| )"+regEscape(v)+"( |$)/.test("+a+")"};AttributeSelector.tests["|="]=function(a,v){return"/^"+regEscape(v)+"(-|$)/.test("+a+")"};var _6=parseSelector;parseSelector=function(s){return _6(AttributeSelector.parse(s))}});var AttributeSelector=cssQuery.valueOf("AttributeSelector");var H=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var B1=/\s*\{\s*/,B2=/\s*\}\s*/,C=/\s*\,\s*/;var F=/(.*)(:first-(line|letter))/;StyleSheet.prototype.specialize({parse:function(){this.inherit();var o=ie7CSS.rules.length;var ru=this.cssText.split(B2),r;var se,c,i,j;for(i=0;i<ru.length;i++){r=ru[i].split(B1);se=r[0].split(C);c=r[1];for(j=0;j<se.length;j++){se[j]=c?this.createRule(se[j],c):""}ru[i]=se.join("\n")}this.cssText=ru.join("\n");this.rules=ie7CSS.rules.slice(o)},recalc:function(){var r,i;for(i=0;(r=this.rules[i]);i++)r.recalc()},createRule:function(s,c){if(ie7CSS.UNKNOWN.test(s)){var m;if(m=s.match(PseudoElement.MATCH)){return new PseudoElement(m[1],m[2],c)}else if(m=s.match(DynamicRule.MATCH)){if(!isHTML||!H.test(m)||DynamicRule.COMPLEX.test(m)){return new DynamicRule(s,m[1],m[2],m[3],c)}}else return new Rule(s,c)}return s+" {"+c+"}"}});ie7CSS.specialize({rules:[],pseudoClasses:cssQuery.valueOf("pseudoClasses"),dynamicPseudoClasses:{},cache:cssQuery.valueOf("cache"),Rule:Rule,DynamicRule:DynamicRule,PseudoElement:PseudoElement,DynamicPseudoClass:DynamicPseudoClass,apply:function(){var p=this.pseudoClasses+"|before|after|"+this.dynamicPseudoClasses;p=p.replace(/(link|visited)\|/g,"");this.UNKNOWN=new RegExp("[>+~\[]|([:.])[\\w-()]+\\1|:("+p+")");var c="[^\\s(]+\\s*[+~]|@\\d+|:(";Rule.COMPLEX=new RegExp(c+p+")","g");DynamicRule.COMPLEX=new RegExp(c+this.pseudoClasses+")","g");DynamicRule.MATCH=new RegExp("(.*):("+this.dynamicPseudoClasses+")(.*)");PseudoElement.MATCH=/(.*):(before|after).*/;this.inherit()},recalc:function(){this.screen.recalc();this.inherit()},getText:function(s,p){return httpRequest?(loadFile(s.href,p)||s.cssText):this.inherit(s)},addEventHandler:function(e,t,h){addEventHandler(e,t,h)}});function Rule(s,c){this.id=ie7CSS.rules.length;this.className=Rule.PREFIX+this.id;s=(s).match(F)||s||"*";this.selector=s[1]||s;this.selectorText=Rule.simple(this.selector)+"."+this.className+(s[2]||"");this.cssText=c;this.MATCH=new RegExp("\\s"+this.className+"(\\s|$)","g");ie7CSS.rules.push(this);this.init()};Common.specialize({constructor:Rule,toString:function(){return this.selectorText+" {"+this.cssText+"}"},init:DUMMY,add:function(e){e.className+=" "+this.className},remove:function(e){e.className=e.className.replace(this.MATCH,"$1")},recalc:function(){var m=ie7CSS.cache[" *."+this.className]=cssQuery(this.selector);for(i=0;i<m.length;i++)this.add(m[i])}});Rule.PREFIX="ie7_class";Rule.CHILD=/>/g;Rule.simple=function(s){s=AttributeSelector.parse(s);return s.replace(this.COMPLEX,"").replace(this.CHILD," ")};function DynamicRule(s,a,d,t,c){this.attach=a||"*";this.dynamicPseudoClass=ie7CSS.dynamicPseudoClasses[d];this.target=t;this.inherit(s,c)};Rule.specialize({constructor:DynamicRule,recalc:function(){var m=cssQuery(this.attach);for(var i=0;i<m.length;i++){var t=(this.target)?cssQuery(this.target,m[i]):[m[i]];if(t.length)this.dynamicPseudoClass.apply(m[i],t,this)}}});var A=/^attr/;var U=/^url\s*\(\s*([^)]*)\)$/;var M={before0:"beforeBegin",before1:"afterBegin",after0:"afterEnd",after1:"beforeEnd"};var _5=makePath("ie7-content.htc",path)+"?";HEADER+=".ie7_anon{display:none}";function PseudoElement(s,p,c){this.position=p;var co=c.match(PseudoElement.CONTENT),m,e;if(co){co=co[1];m=co.split(/\s+/);for(var i=0;(e=m[i]);i++){m[i]=A.test(e)?{attr:e.slice(5,-1)}:(e.charAt(0)=="'")?getString(e):decode(e)}co=m}this.content=co;this.inherit(s,decode(c))};Rule.specialize({constructor:PseudoElement,toString:function(){return"."+this.className+"{display:inline}"},init:function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var r=this.match[i].runtimeStyle;if(!r[this.position])r[this.position]={cssText:""};r[this.position].cssText+=";"+this.cssText;if(this.content!=null)r[this.position].content=this.content}},recalc:function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){this.create(this.match[i])}},create:function(t){var g=t.runtimeStyle[this.position];if(g){var c=[].concat(g.content||"");for(var j=0;j<c.length;j++){if(typeof c[j]=="object"){c[j]=t.getAttribute(c[j].attr)}}c=c.join("");var u=c.match(U);var h=PseudoElement[u?"OBJECT":"ANON"].replace(/%1/,this.className);var cs=g.cssText.replace(/'/g,'"');var po=M[this.position+Number(t.canHaveChildren)];if(u){var p=document.createElement(h);t.insertAdjacentElement(po,p);p.data=_5;addTimer(p,cs,Quote.remove(u[1]))}else{h=h.replace(/%2/,cs).replace(/%3/,c);t.insertAdjacentHTML(po,h)}t.runtimeStyle[this.position]=null}}});PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class='ie7_anon %1' ie7_anon width=100% height=0 type=text/x-scriptlet>";PseudoElement.ANON="<ie7:! class='ie7_anon %1' ie7_anon style='%2'>%3</ie7:!>";function DynamicPseudoClass(n,a){this.name=n;this.apply=a;this.instances={};ie7CSS.dynamicPseudoClasses[n]=this};Common.specialize({constructor:DynamicPseudoClass,register:function(i){var c=i[2];i.id=c.id+i[0].uniqueID;if(!this.instances[i.id]){var t=i[1],j;for(j=0;j<t.length;j++)c.add(t[j]);this.instances[i.id]=i}},unregister:function(i){if(this.instances[i.id]){var c=i[2];var t=i[1],j;for(j=0;j<t.length;j++)c.remove(t[j]);delete this.instances[i.id]}}});ie7CSS.pseudoClasses.toString=function(){var t=[],p;for(p in this){if(this[p].length>1)p+="\\([^)]*\\)";t.push(p)}return t.join("|")};ie7CSS.pseudoClasses["link"]=function(e){return e.currentStyle["ie7-link"]=="link"};ie7CSS.pseudoClasses["visited"]=function(e){return e.currentStyle["ie7-link"]=="visited"};var _4=(appVersion<5.5)?"onmouseover":"onmouseenter";var _3=(appVersion<5.5)?"onmouseout":"onmouseleave";ie7CSS.dynamicPseudoClasses.toString=ie7CSS.pseudoClasses.toString;var _0=new DynamicPseudoClass("hover",function(e){var i=arguments;ie7CSS.addEventHandler(e,_4,function(){_0.register(i)});ie7CSS.addEventHandler(e,_3,function(){_0.unregister(i)})});var _1=new DynamicPseudoClass("focus",function(e){var i=arguments;ie7CSS.addEventHandler(e,"onfocus",function(){_1.unregister(i);_1.register(i)});ie7CSS.addEventHandler(e,"onblur",function(){_1.unregister(i)});if(e==document.activeElement){_1.register(i)}});var _2=new DynamicPseudoClass("active",function(e){var i=arguments;ie7CSS.addEventHandler(e,"onmousedown",function(){_2.register(i)})});addEventHandler(document,"onmouseup",function(){var i=_2.instances,j;for(j in i)_2.unregister(i[j]);i=_0.instances;for(j in i)if(!i[j][0].contains(event.srcElement))_0.unregister(i[j])});ICommon(AttributeSelector);AttributeSelector.specialize({getAttribute:function(n){switch(n.toLowerCase()){case"class":return"e.className.replace(/\\b\\s*ie7_class\\d+/g,'')";case"src":return"(e.pngSrc||e.src)"}return this.inherit(n)}});encoder.add(/::/,":");safeString.add(/\\([\da-fA-F]{1,4})/,function(m,o){m=m[o+1];return"\\u"+"0000".slice(m.length)+m})});
/WebSVN/templates/StandardNG/ie7/ie7-css3-selectors.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-css3-selectors",function(){cssQuery.addModule("css-level3",function(){selectors["~"]=function(r,f,t,n){var e,i;for(i=0;(e=f[i]);i++){while(e=nextElementSibling(e)){if(compareTagName(e,t,n))r.push(e)}}};pseudoClasses["contains"]=function(e,t){t=new RegExp(regEscape(getText(t)));return t.test(getTextContent(e))};pseudoClasses["root"]=function(e){return e==getDocument(e).documentElement};pseudoClasses["empty"]=function(e){var n,i;for(i=0;(n=e.childNodes[i]);i++){if(thisElement(n)||n.nodeType==3)return false}return true};pseudoClasses["last-child"]=function(e){return!nextElementSibling(e)};pseudoClasses["only-child"]=function(e){e=e.parentNode;return firstElementChild(e)==lastElementChild(e)};pseudoClasses["not"]=function(e,s){var n=cssQuery(s,getDocument(e));for(var i=0;i<n.length;i++){if(n[i]==e)return false}return true};pseudoClasses["nth-child"]=function(e,a){return nthChild(e,a,previousElementSibling)};pseudoClasses["nth-last-child"]=function(e,a){return nthChild(e,a,nextElementSibling)};pseudoClasses["target"]=function(e){return e.id==location.hash.slice(1)};pseudoClasses["checked"]=function(e){return e.checked};pseudoClasses["enabled"]=function(e){return e.disabled===false};pseudoClasses["disabled"]=function(e){return e.disabled};pseudoClasses["indeterminate"]=function(e){return e.indeterminate};AttributeSelector.tests["^="]=function(a,v){return"/^"+regEscape(v)+"/.test("+a+")"};AttributeSelector.tests["$="]=function(a,v){return"/"+regEscape(v)+"$/.test("+a+")"};AttributeSelector.tests["*="]=function(a,v){return"/"+regEscape(v)+"/.test("+a+")"};function nthChild(e,a,t){switch(a){case"n":return true;case"even":a="2n";break;case"odd":a="2n+1"}var ch=childElements(e.parentNode);function _5(i){var i=(t==nextElementSibling)?ch.length-i:i-1;return ch[i]==e};if(!isNaN(a))return _5(a);a=a.split("n");var m=parseInt(a[0]);var s=parseInt(a[1]);if((isNaN(m)||m==1)&&s==0)return true;if(m==0&&!isNaN(s))return _5(s);if(isNaN(s))s=0;var c=1;while(e=t(e))c++;if(isNaN(m)||m==1)return(t==nextElementSibling)?(c<=s):(s>=c);return(c%m)==s}});var firstElementChild=cssQuery.valueOf("firstElementChild");ie7CSS.pseudoClasses["root"]=function(e){return(e==viewport)||(!isHTML&&e==firstElementChild(body))};var _4=new ie7CSS.DynamicPseudoClass("checked",function(e){if(typeof e.checked!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="checked"){if(e.checked)_4.register(i);else _4.unregister(i)}});if(e.checked)_4.register(i)});var _3=new ie7CSS.DynamicPseudoClass("enabled",function(e){if(typeof e.disabled!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="disabled"){if(!e.isDisabled)_3.register(i);else _3.unregister(i)}});if(!e.isDisabled)_3.register(i)});var _2=new ie7CSS.DynamicPseudoClass("disabled",function(e){if(typeof e.disabled!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="disabled"){if(e.isDisabled)_2.register(i);else _2.unregister(i)}});if(e.isDisabled)_2.register(i)});var _1=new ie7CSS.DynamicPseudoClass("indeterminate",function(e){if(typeof e.indeterminate!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="indeterminate"){if(e.indeterminate)_1.register(i);else _1.unregister(i)}});ie7CSS.addEventHandler(e,"onclick",function(){_1.unregister(i)})});var _0=new ie7CSS.DynamicPseudoClass("target",function(e){var i=arguments;if(!e.tabIndex)e.tabIndex=0;ie7CSS.addEventHandler(document,"onpropertychange",function(){if(event.propertyName=="activeElement"){if(e.id==location.hash.slice(1))_0.register(i);else _0.unregister(i)}});if(e.id==location.hash.slice(1))_0.register(i)});decoder.add(/\|/,"\\:")});
/WebSVN/templates/StandardNG/ie7/ie7-dhtml.js
0,0 → 1,57
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-dhtml", function() {
 
/* ---------------------------------------------------------------------
This module is still in development and should not be used.
--------------------------------------------------------------------- */
 
ie7CSS.specialize("recalc", function() {
this.inherit();
for (var i = 0; i < this.recalcs.length; i++) {
var $recalc = this.recalcs[i];
for (var j = 0; i < $recalc[3].length; i++) {
_addPropertyChangeHandler($recalc[3][j], _getPropertyName($recalc[2]), $recalc[1]);
}
}
});
 
// constants
var _PATTERNS = {
width: "(width|paddingLeft|paddingRight|borderLeftWidth|borderRightWidth|borderLeftStyle|borderRightStyle)",
height: "(height|paddingTop|paddingBottom|borderTopHeight|borderBottomHeight|borderTopStyle|borderBottomStyle)"
};
var _PROPERTY_NAMES = {
width: "fixedWidth",
height: "fixedHeight",
right: "width",
bottom: "height"
};
var _DASH_LETTER = /-(\w)/g;
var _PROPERTY_NAME = /\w+/;
 
function _addPropertyChangeHandler($element, $propertyName, $fix) {
addEventHandler($element, "onpropertychange", function() {
if (_getPattern($propertyName).test(event.propertyName)) {
_reset($element, $propertyName);
$fix($element);
}
});
};
function _upper($match, $letter) {return $letter.toUpperCase()};
function _getPropertyName($pattern) {
return String(String($pattern).toLowerCase().replace(_DASH_LETTER, _upper).match(_PROPERTY_NAME));
};
function _getPattern($propertyName) {
return eval("/^style." + (_PATTERNS[$propertyName] || $propertyName) + "$/");
};
function _reset($element, $propertyName) {
$element.runtimeStyle[$propertyName] = "";
$propertyName = _PROPERTY_NAMES[$propertyName]
if ($propertyName) $element.runtimeStyle[$propertyName] = "";
};
 
});
/WebSVN/templates/StandardNG/ie7/ie7-dynamic-attributes.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-dynamic-attributes",function(){if(!modules["ie7-css2-selectors"])return;var attributeSelectors=cssQuery.valueOf("attributeSelectors");var parseSelector=cssQuery.valueOf("parseSelector");function DynamicAttribute(s,a,d,t,c){this.attach=a||"*";parseSelector(d);this.dynamicAttribute=attributeSelectors["@"+d];this.target=t;this.inherit(s,c)};ie7CSS.Rule.specialize({constructor:DynamicAttribute,recalc:function(){var m=cssQuery(this.attach);for(var i=0;i<m.length;i++){var t=(this.target)?cssQuery(this.target,m[i]):[m[i]];if(t.length)this.apply(m[i],t)}},apply:function(e,t){var self=this;addEventHandler(e,"onpropertychange",function(){if(event.propertyName==self.dynamicAttribute.name)self.test(e,t)});this.test(e,t)},test:function(e,t){var a=this.dynamicAttribute.test(e)?"add":"remove";for(var i=0;(e=t[i]);i++)this[a](e)}});DynamicAttribute.MATCH=/(.*)(\[[^\]]*\])(.*)/;StyleSheet.prototype.specialize({createRule:function(s,c){var m;if(m=s.match(DynamicAttribute.MATCH)){return new DynamicAttribute(s,m[1],m[2],m[3],c)}else return this.inherit(s,c)}})});
/WebSVN/templates/StandardNG/ie7/ie7-fixed.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-fixed",function(){ie7CSS.addRecalc("position","fixed",_6,"absolute");ie7CSS.addRecalc("background(-attachment)?","[^};]*fixed",_7);var _10=(quirksMode)?"body":"documentElement";var _8=function(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundRepeat="no-repeat";body.runtimeStyle.backgroundImage="url("+BLANK_GIF+")"}body.runtimeStyle.backgroundAttachment="fixed"}_8=DUMMY};var _0=createTempElement("img");function _1(f){return _2.exec(String(f))};var _2=new ParseMaster;_2.add(/Left/,"Top");_2.add(/left/,"top");_2.add(/Width/,"Height");_2.add(/width/,"height");_2.add(/right/,"bottom");_2.add(/X/,"Y");function _3(e){return(e)?isFixed(e)||_3(e.parentElement):false};function setExpression(e,p,ex){setTimeout("document.all."+e.uniqueID+".runtimeStyle.setExpression('"+p+"','"+ex+"')",0)};function _7(e){if(register(_7,e,e.currentStyle.backgroundAttachment=="fixed"&&!e.contains(body))){_8();backgroundLeft(e);backgroundTop(e);_9(e)}};function _9(e){_0.src=e.currentStyle.backgroundImage.slice(5,-2);var p=(e.canHaveChildren)?e:e.parentElement;p.appendChild(_0);setOffsetLeft(e);setOffsetTop(e);p.removeChild(_0)};function backgroundLeft(e){e.style.backgroundPositionX=e.currentStyle.backgroundPositionX;if(!_3(e)){var ex="(parseInt(runtimeStyle.offsetLeft)+document."+_10+".scrollLeft)||0";setExpression(e,"backgroundPositionX",ex)}};eval(_1(backgroundLeft));function setOffsetLeft(e){var p=_3(e)?"backgroundPositionX":"offsetLeft";e.runtimeStyle[p]=getOffsetLeft(e,e.style.backgroundPositionX)-e.getBoundingClientRect().left-e.clientLeft+2};eval(_1(setOffsetLeft));function getOffsetLeft(e,p){switch(p){case"left":case"top":return 0;case"right":case"bottom":return viewport.clientWidth-_0.offsetWidth;case"center":return(viewport.clientWidth-_0.offsetWidth)/2;default:if(PERCENT.test(p)){return parseInt((viewport.clientWidth-_0.offsetWidth)*parseFloat(p)/100)}_0.style.left=p;return _0.offsetLeft}};eval(_1(getOffsetLeft));function _6(e){if(register(_6,e,isFixed(e))){setOverrideStyle(e,"position","absolute");setOverrideStyle(e,"left",e.currentStyle.left);setOverrideStyle(e,"top",e.currentStyle.top);_8();if(ie7Layout)ie7Layout.fixRight(e);_5(e)}};function _5(e,r){positionTop(e,r);positionLeft(e,r,true);if(!e.runtimeStyle.autoLeft&&e.currentStyle.marginLeft=="auto"&&e.currentStyle.right!="auto"){var l=viewport.clientWidth-getPixelWidth(e,e.currentStyle.right)-getPixelWidth(e,e.runtimeStyle._12)-e.clientWidth;if(e.currentStyle.marginRight=="auto")l=parseInt(l/2);if(_3(e.offsetParent))e.runtimeStyle.pixelLeft+=l;else e.runtimeStyle.shiftLeft=l}clipWidth(e);clipHeight(e)};function clipWidth(e){if(e.currentStyle.width!="auto"){var r=e.getBoundingClientRect();var w=e.offsetWidth-viewport.clientWidth+r.left-2;if(w>=0){w=Math.max(getPixelValue(e,e.currentStyle.width)-w,0);setOverrideStyle(e,"width",w)}}};eval(_1(clipWidth));function positionLeft(e,r){if(!r&&PERCENT.test(e.currentStyle.width)){e.runtimeStyle.fixWidth=e.currentStyle.width}if(e.runtimeStyle.fixWidth){e.runtimeStyle.width=getPixelWidth(e,e.runtimeStyle.fixWidth)}if(r){if(!e.runtimeStyle.autoLeft)return}else{e.runtimeStyle.shiftLeft=0;e.runtimeStyle._12=e.currentStyle.left;e.runtimeStyle.autoLeft=e.currentStyle.right!="auto"&&e.currentStyle.left=="auto"}e.runtimeStyle.left="";e.runtimeStyle.screenLeft=getScreenLeft(e);e.runtimeStyle.pixelLeft=e.runtimeStyle.screenLeft;if(!r&&!_3(e.offsetParent)){var ex="runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+_10+".scrollLeft";setExpression(e,"pixelLeft",ex)}};eval(_1(positionLeft));function getScreenLeft(e){var s=e.offsetLeft,n=1;if(e.runtimeStyle.autoLeft){s=viewport.clientWidth-e.offsetWidth-getPixelWidth(e,e.currentStyle.right)}if(e.currentStyle.marginLeft!="auto"){s-=getPixelWidth(e,e.currentStyle.marginLeft)}while(e=e.offsetParent){if(e.currentStyle.position!="static")n=-1;s+=e.offsetLeft*n}return s};eval(_1(getScreenLeft));function getPixelWidth(e,v){if(PERCENT.test(v))return parseInt(parseFloat(v)/100*viewport.clientWidth);return getPixelValue(e,v)};eval(_1(getPixelWidth));function _11(){var e=_7.elements;for(var i in e)_9(e[i]);e=_6.elements;for(i in e){_5(e[i],true);_5(e[i],true)}_4=0};var _4;addResize(function(){if(!_4)_4=setTimeout(_11,0)})});
/WebSVN/templates/StandardNG/ie7/ie7-graphics.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-graphics",function(){if(appVersion<5.5)return;var A="DXImageTransform.Microsoft.AlphaImageLoader";var F="progid:"+A+"(src='%1',sizingMethod='scale')";var _3=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");var _0=[];function _2(e){var f=e.filters[A];if(f){f.src=e.src;f.enabled=true}else{e.runtimeStyle.filter=F.replace(/%1/,e.src);_0.push(e)}e.src=BLANK_GIF};function _5(e){e.src=e.pngSrc;e.filters[A].enabled=false};ie7CSS.addFix(/opacity\s*:\s*([\d.]+)/,function(m,o){return"zoom:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity="+((parseFloat(m[o+1])*100)||1)+")"});var B=/background(-image)?\s*:\s*([^\(};]*)url\(([^\)]+)\)([^;}]*)/;ie7CSS.addFix(B,function(m,o){var u=getString(m[o+3]);return _3.test(u)?"filter:"+F.replace(/scale/,"crop").replace(/%1/,u)+";zoom:1;background"+(m[o+1]||"")+":"+(m[o+2]||"")+"none"+(m[o+4]||""):m[o]});if(ie7HTML){ie7HTML.addRecalc("img,input",function(e){if(e.tagName=="INPUT"&&e.type!="image")return;_4(e);addEventHandler(e,"onpropertychange",function(){if(!_1&&event.propertyName=="src"&&e.src.indexOf(BLANK_GIF)==-1)_4(e)})});var B64=/^data:.*;base64/i;var _7=makePath("ie7-base64.php",path);function _4(e){if(_3.test(e.src)){var i=new Image(e.width,e.height);i.onload=function(){e.width=i.width;e.height=i.height;i=null};i.src=e.src;e.pngSrc=e.src;_2(e)}else if(B64.test(e.src)){e.src=_7+"?"+e.src.slice(5)}};var I=/^image/i;var _6=makePath("ie7-object.htc",path);ie7HTML.addRecalc("object",function(e){if(I.test(e.type)){var o=document.createElement("<object type=text/x-scriptlet>");o.style.width=e.currentStyle.width;o.style.height=e.currentStyle.height;o.data=_6;var u=makePath(e.data,getPath(location.href));e.parentNode.replaceChild(o,e);cssQuery.clearCache("object");addTimer(o,"",u);return o}})}var _1=false;addEventHandler(window,"onbeforeprint",function(){_1=true;for(var i=0;i<_0.length;i++)_5(_0[i])});addEventHandler(window,"onafterprint",function(){for(var i=0;i<_0.length;i++)_2(_0[i]);_1=false})});
/WebSVN/templates/StandardNG/ie7/ie7-html4.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-html4",function(){if(!isHTML)return;HEADER+="h1{font-size:2em}h2{font-size:1.5em;}h3{font-size:1.17em;}"+"h4{font-size:1em}h5{font-size:.83em}h6{font-size:.67em}";var _0={};ie7HTML=new(Fix.specialize({init:DUMMY,addFix:function(){this.fixes.push(arguments)},apply:function(){for(var i=0;i<this.fixes.length;i++){var m=cssQuery(this.fixes[i][0]);var f=this.fixes[i][1]||_1;for(var j=0;j<m.length;j++)f(m[j])}},addRecalc:function(){this.recalcs.push(arguments)},recalc:function(){for(var i=0;i<this.recalcs.length;i++){var m=cssQuery(this.recalcs[i][0]);var r=this.recalcs[i][1],e;var k=Math.pow(2,i);for(var j=0;(e=m[j]);j++){var u=e.uniqueID;if((_0[u]&k)==0){e=r(e)||e;_0[u]|=k}}}}}));ie7HTML.addFix("abbr");ie7HTML.addRecalc("label",function(e){if(!e.htmlFor){var f=cssQuery("input,textarea",e)[0];if(f){addEventHandler(e,"onclick",function(){f.click()})}}});ie7HTML.addRecalc("button,input",function(e){if(e.tagName=="BUTTON"){var m=e.outerHTML.match(/ value="([^"]*)"/i);e.runtimeStyle.value=(m)?m[1]:""}if(e.type=="submit"){addEventHandler(e,"onclick",function(){e.runtimeStyle.clicked=true;setTimeout("document.all."+e.uniqueID+".runtimeStyle.clicked=false",1)})}});var U=/^(submit|reset|button)$/;ie7HTML.addRecalc("form",function(e){addEventHandler(e,"onsubmit",function(){for(var i=0;i<e.length;i++){if(_2(e[i])){e[i].disabled=true;setTimeout("document.all."+e[i].uniqueID+".disabled=false",1)}else if(e[i].tagName=="BUTTON"&&e[i].type=="submit"){setTimeout("document.all."+e[i].uniqueID+".value='"+e[i].value+"'",1);e[i].value=e[i].runtimeStyle.value}}})});function _2(e){return U.test(e.type)&&!e.disabled&&!e.runtimeStyle.clicked};ie7HTML.addRecalc("img",function(e){if(e.alt&&!e.title)e.title=""});var P=(appVersion<5.5)?"HTML:":"";function _1(e){var f=document.createElement("<"+P+e.outerHTML.slice(1));if(e.outerHTML.slice(-2)!="/>"){var en="</"+e.tagName+">",n;while((n=e.nextSibling)&&n.outerHTML!=en){f.appendChild(n)}if(n)n.removeNode()}e.parentNode.replaceChild(f,e)}});
/WebSVN/templates/StandardNG/ie7/ie7-ie5.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
if(appVersion<5.5){ANON="HTML:!";var ap=function(f,o,a){f.apply(o,a)};if(''.replace(/^/,String)){var _0=String.prototype.replace;var _1=function(e,r){var m,n="",s=this;while(s&&(m=e.exec(s))){n+=s.slice(0,m.index)+ap(r,this,m);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(e,r){this.replace=(typeof r=="function")?_1:_0;return this.replace(e,r)}}if(!Function.apply){var APPLY="apply-"+Number(new Date);ap=function(f,o,a){var r;o[APPLY]=f;switch(a.length){case 0:r=o[APPLY]();break;case 1:r=o[APPLY](a[0]);break;case 2:r=o[APPLY](a[0],a[1]);break;case 3:r=o[APPLY](a[0],a[1],a[2]);break;case 4:r=o[APPLY](a[0],a[1],a[2],a[3]);break;default:var aa=[],i=a.length-1;do aa[i]="a["+i+"]";while(i--);eval("r=o[APPLY]("+aa+")")}delete o[APPLY];return r};ICommon.valueOf.prototype.inherit=function(){return ap(arguments.callee.caller.ancestor,this,arguments)}}if(![].push)Array.prototype.push=function(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i]}return this.length};if(![].pop)Array.prototype.pop=function(){var i=this[this.length-1];this.length--;return i};if(isHTML){HEADER+="address,blockquote,body,dd,div,dt,fieldset,form,"+"frame,frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,"+"hr,applet,center,dir,menu,pre,dl,li,ol,ul{display:block}"}}
/WebSVN/templates/StandardNG/ie7/ie7-layout.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-layout",function(){ie7Layout=this;HEADER+="*{boxSizing:content-box}";this.hasLayout=(appVersion<5.5)?function(e){return e.clientWidth}:function(e){return e.currentStyle.hasLayout};this.boxSizing=function(e){if(!ie7Layout.hasLayout(e)){e.style.height="0cm";if(e.currentStyle.verticalAlign=="auto")e.runtimeStyle.verticalAlign="top";_1(e)}};function _1(e){if(e!=viewport&&e.currentStyle.position!="absolute"){collapseMarginTop(e);collapseMarginBottom(e)}};var firstElementChild=cssQuery.valueOf("firstElementChild");var lastElementChild=cssQuery.valueOf("lastElementChild");function collapseMarginTop(e){if(!e.runtimeStyle.marginTop){var p=e.parentElement;if(p&&ie7Layout.hasLayout(p)&&e==firstElementChild(p))return;var f=firstElementChild(e);if(f&&f.currentStyle.styleFloat=="none"&&ie7Layout.hasLayout(f)){collapseMarginTop(f);m=_3(e,e.currentStyle.marginTop);c=_3(f,f.currentStyle.marginTop);if(m<0||c<0){e.runtimeStyle.marginTop=m+c}else{e.runtimeStyle.marginTop=Math.max(c,m)}f.runtimeStyle.marginTop="0px"}}};eval(String(collapseMarginTop).replace(/Top/g,"Bottom").replace(/first/g,"last"));function _3(e,v){return(v=="auto")?0:getPixelValue(e,v)};var U=/^[.\d][\w%]*$/,A=/^(auto|0cm)$/,N="[.\\d]";var applyWidth,applyHeight;function borderBox(e){applyWidth(e);applyHeight(e)};function fixWidth(H){applyWidth=function(e){if(!PERCENT.test(e.currentStyle.width))fixWidth(e);_1(e)};function fixWidth(e,v){if(!e.runtimeStyle.fixedWidth){if(!v)v=e.currentStyle.width;e.runtimeStyle.fixedWidth=(U.test(v))?Math.max(0,getFixedWidth(e,v)):v;setOverrideStyle(e,"width",e.runtimeStyle.fixedWidth)}};function layoutWidth(e){if(!isFixed(e)){var l=e.offsetParent;while(l&&!ie7Layout.hasLayout(l))l=l.offsetParent}return(l||viewport).clientWidth};function getPixelWidth(e,v){if(PERCENT.test(v))return parseInt(parseFloat(v)/100*layoutWidth(e));return getPixelValue(e,v)};var getFixedWidth=function(e,v){var b=e.currentStyle["box-sizing"]=="border-box";var a=0;if(quirksMode&&!b)a+=getBorderWidth(e)+getPaddingWidth(e);else if(!quirksMode&&b)a-=getBorderWidth(e)+getPaddingWidth(e);return getPixelWidth(e,v)+a};function getBorderWidth(e){return e.offsetWidth-e.clientWidth};function getPaddingWidth(e){return getPixelWidth(e,e.currentStyle.paddingLeft)+getPixelWidth(e,e.currentStyle.paddingRight)};eval(String(getPaddingWidth).replace(/padding/g,"margin").replace(/Padding/g,"Margin"));HEADER+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";function minWidth(e){if(e.currentStyle["min-width"]!=null){e.style.minWidth=e.currentStyle["min-width"]}if(register(minWidth,e,e.currentStyle.minWidth!="none")){ie7Layout.boxSizing(e);fixWidth(e);resizeWidth(e)}};eval(String(minWidth).replace(/min/g,"max"));ie7Layout.minWidth=minWidth;ie7Layout.maxWidth=maxWidth;function resizeWidth(e){var r=e.getBoundingClientRect();var w=r.right-r.left;if(e.currentStyle.minWidth!="none"&&w<=getFixedWidth(e,e.currentStyle.minWidth)){e.runtimeStyle.width=getFixedWidth(e,e.currentStyle.minWidth)}else if(e.currentStyle.maxWidth!="none"&&w>=getFixedWidth(e,e.currentStyle.maxWidth)){e.runtimeStyle.width=getFixedWidth(e,e.currentStyle.maxWidth)}else{e.runtimeStyle.width=e.runtimeStyle.fixedWidth}};function fixRight(e){if(register(fixRight,e,/^(fixed|absolute)$/.test(e.currentStyle.position)&&getDefinedStyle(e,"left")!="auto"&&getDefinedStyle(e,"right")!="auto"&&A.test(getDefinedStyle(e,"width")))){resizeRight(e);ie7Layout.boxSizing(e)}};ie7Layout.fixRight=fixRight;function resizeRight(e){var l=getPixelWidth(e,e.runtimeStyle._4||e.currentStyle.left);var w=layoutWidth(e)-getPixelWidth(e,e.currentStyle.right)-l-getMarginWidth(e);if(parseInt(e.runtimeStyle.width)==w)return;e.runtimeStyle.width="";if(isFixed(e)||H||e.offsetWidth<w){if(!quirksMode)w-=getBorderWidth(e)+getPaddingWidth(e);if(w<0)w=0;e.runtimeStyle.fixedWidth=w;setOverrideStyle(e,"width",w)}};var _2=0;addResize(function(){var i,w=(_2<viewport.clientWidth);_2=viewport.clientWidth;for(i in minWidth.elements){var e=minWidth.elements[i];var f=(parseInt(e.runtimeStyle.width)==getFixedWidth(e,e.currentStyle.minWidth));if(w&&f)e.runtimeStyle.width="";if(w==f)resizeWidth(e)}for(i in maxWidth.elements){var e=maxWidth.elements[i];var f=(parseInt(e.runtimeStyle.width)==getFixedWidth(e,e.currentStyle.maxWidth));if(!w&&f)e.runtimeStyle.width="";if(w!=f)resizeWidth(e)}for(i in fixRight.elements)resizeRight(fixRight.elements[i])});if(window.IE7_BOX_MODEL!==false){ie7CSS.addRecalc("width",N,quirksMode?applyWidth:_1)}ie7CSS.addRecalc("min-width",N,minWidth);ie7CSS.addRecalc("max-width",N,maxWidth);ie7CSS.addRecalc("right",N,fixRight)};ie7CSS.addRecalc("border-spacing",N,function(e){if(e.currentStyle.borderCollapse!="collapse"){e.cellSpacing=getPixelValue(e,e.currentStyle["border-spacing"])}});ie7CSS.addRecalc("box-sizing","content-box",this.boxSizing);ie7CSS.addRecalc("box-sizing","border-box",borderBox);var _0=new ParseMaster;_0.add(/Width/,"Height");_0.add(/width/,"height");_0.add(/Left/,"Top");_0.add(/left/,"top");_0.add(/Right/,"Bottom");_0.add(/right/,"bottom");eval(_0.exec(String(fixWidth)));fixWidth();fixHeight(true)});
/WebSVN/templates/StandardNG/ie7/ie7-load.htc
0,0 → 1,0
<component lightweight="true"><attach event="ondocumentready" onevent="IE7.init()"/></component>
/WebSVN/templates/StandardNG/ie7/ie7-object.htc
0,0 → 1,12
<html>
<!--
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
-->
<head>
<style type="text/css">body{margin:0}</style>
<script type="text/javascript">public_description=new function(){var l=false;this.ie7_anon=true;this.load=function(o,c,u){if(l)return;l=true;function _0(t,p){t.style[p]=o.currentStyle[p]};var p=o;while(p&&p.currentStyle.backgroundColor=="transparent"){p=p.parentElement}if(p)body.style.backgroundColor=p.currentStyle.backgroundColor;_0(body,"backgroundImage");_0(body,"backgroundRepeat");_0(body,"backgroundPositionX");_0(body,"backgroundPositionY");_0(body,"fontFamily");_0(body,"fontSize");_0(wrapper,"paddingTop");_0(wrapper,"paddingRight");_0(wrapper,"paddingBottom");_0(wrapper,"paddingLeft");image.width=o.clientWidth;image.height=o.clientHeight;var B64=/^data:.*;base64/i,P=/.png$/i;if(B64.test(u))u="ie7-base64.php"+"?"+u.slice(5);if(P.test(u)&&!/MSIE 5.0/.test(navigator.userAgent)){image.src="blank.gif";image.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+u+"',sizingMethod='scale')"}else{image.src=u}o.style.width=body.scrollWidth;o.style.height=body.scrollHeight}};</script>
</head>
<body id="body"><div id="wrapper"><img id="image"></div></body>
</html>
/WebSVN/templates/StandardNG/ie7/ie7-overflow.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-overflow",function(){var S={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};function _3(p,s,t){t.style[p]=s.currentStyle[p];if(S[p]!=null){s.runtimeStyle[p]=S[p]}};ie7CSS.addRecalc("overflow","visible",function(e){if(e.parentNode.ie7_wrapper)return;if(ie7Layout&&e.currentStyle["max-height"]!="auto"){ie7Layout.maxHeight(e)}if(e.currentStyle.marginLeft=="auto")e.style.marginLeft=0;if(e.currentStyle.marginRight=="auto")e.style.marginRight=0;var w=document.createElement(ANON);w.ie7_wrapper=true;for(var p in S)_3(p,e,w);w.style.display="block";w.style.position="relative";e.runtimeStyle.position="absolute";e.parentNode.insertBefore(w,e);w.appendChild(e)});cssQuery.addModule("ie7-overflow",function(){function _0(e){return(e&&e.ie7_wrapper)?e.firstChild:e};var _2=previousElementSibling;previousElementSibling=function(e){return _0(_2(e))};var _1=nextElementSibling;nextElementSibling=function(e){return _0(_1(e))};selectors[" "]=function(r,f,t,n){var e,i,j;for(i=0;i<f.length;i++){var s=getElementsByTagName(f[i],t,n);for(j=0;(e=_0(s[j]));j++){if(thisElement(e)&&(!n||compareNamespace(e,n)))r.push(e)}}};selectors[">"]=function(r,f,t,n){var e,i,j;for(i=0;i<f.length;i++){var s=childElements(f[i]);for(j=0;(e=_0(s[j]));j++){if(compareTagName(e,t,n))r.push(e)}}}})});
/WebSVN/templates/StandardNG/ie7/ie7-quirks.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-quirks",function(){if(quirksMode){var F="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<F.length;i++){F[F[i]]=F[i-1]||"0.67em"}ie7CSS.addFix(new RegExp("(font(-size)?\\s*:\\s*)([\\w\\-\\.]+)"),function(m,o){return m[o+1]+(F[m[o+3]]||m[o+3])});if(appVersion<6){var N=/^\-/,L=/(em|ex)$/i;var EM=/em$/i,EX=/ex$/i;function _2(e){var s=1;_0.style.fontFamily=e.currentStyle.fontFamily;_0.style.lineHeight=e.currentStyle.lineHeight;while(e!=body){var f=e.currentStyle["ie7-font-size"];if(f){if(EM.test(f))s*=parseFloat(f);else if(PERCENT.test(f))s*=(parseFloat(f)/100);else if(EX.test(f))s*=(parseFloat(f)/2);else{_0.style.fontSize=f;return 1}}e=e.parentElement}return s};var _0=createTempElement();getPixelValue=function(e,v){if(PIXEL.test(v||0))return parseInt(v||0);var scale=N.test(v)?-1:1;if(L.test(v))scale*=_2(e);_0.style.width=(scale<0)?v.slice(1):v;body.appendChild(_0);v=scale*_0.offsetWidth;_0.removeNode();return parseInt(v)};HEADER=HEADER.replace(/(font(-size)?\s*:\s*([^\s;}\/]*))/gi,"ie7-font-size:$3;$1");ie7CSS.addFix(/cursor\s*:\s*pointer/,"cursor:hand");ie7CSS.addFix(/display\s*:\s*list-item/,"display:block")}function getPaddingWidth(e){return getPixelValue(e,e.currentStyle.paddingLeft)+getPixelValue(e,e.currentStyle.paddingRight)};function _1(e){if(appVersion<5.5&&ie7Layout)ie7Layout.boxSizing(e.parentElement);var p=e.parentElement;var m=p.offsetWidth-e.offsetWidth-getPaddingWidth(p);var a=(e.currentStyle["ie7-margin"]&&e.currentStyle.marginRight=="auto")||e.currentStyle["ie7-margin-right"]=="auto";switch(p.currentStyle.textAlign){case"right":m=(a)?parseInt(m/2):0;e.runtimeStyle.marginRight=parseInt(m)+"px";break;case"center":if(a)m=0;default:if(a)m=parseInt(m/2);e.runtimeStyle.marginLeft=parseInt(m)+"px"}};ie7CSS.addRecalc("margin(-left|-right)?","[^};]*auto",function(e){if(register(_1,e,e.parentElement&&e.currentStyle.display=="block"&&e.currentStyle.marginLeft=="auto"&&e.currentStyle.position!="absolute")){_1(e)}});addResize(function(){for(var i in _1.elements){e=_1.elements[i];e.runtimeStyle.marginLeft=e.runtimeStyle.marginRight="";_1(e)}})}});
/WebSVN/templates/StandardNG/ie7/ie7-recalc.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-recalc",function(){C=/\sie7_class\d+/g;function _0(e){e.className=e.className.replace(C,"")};function _1(e){e.runtimeStyle.cssText=""};ie7CSS.specialize({elements:{},handlers:[],reset:function(){this.removeEventHandlers();var e=this.elements;for(var i in e)_1(e[i]);this.elements={};if(this.Rule){var e=this.Rule.elements;for(var i in e)_0(e[i]);this.Rule.elements={}}},reload:function(){ie7CSS.rules=[];this.getInlineStyles();this.screen.load();if(this.print)this.print.load();this.refresh();this.trash()},addRecalc:function(p,t,h,r){this.inherit(p,t,function(e){h(e);ie7CSS.elements[e.uniqueID]=e},r)},recalc:function(){this.reset();this.inherit()},addEventHandler:function(e,t,h){e.attachEvent(t,h);this.handlers.push(arguments)},removeEventHandlers:function(){var h;while(h=this.handlers.pop()){removeEventHandler(h[0],h[1],h[2])}},getInlineStyles:function(){var st=document.getElementsByTagName("style"),s;for(var i=st.length-1;(s=st[i]);i--){if(!s.disabled&&!s.ie7){var c=s.c||s.innerHTML;this.styles.push(c);s.c=c}}},trash:function(){var s,i;for(i=0;i<styleSheets.length;i++){s=styleSheets[i];if(!s.ie7&&!s.c){s.c=s.cssText}}this.inherit()},getText:function(s){return s.c||this.inherit(s)}});addEventHandler(window,"onunload",function(){ie7CSS.removeEventHandlers()});if(ie7CSS.Rule){ie7CSS.Rule.elements={};ie7CSS.Rule.prototype.specialize({add:function(e){this.inherit(e);ie7CSS.Rule.elements[e.uniqueID]=e}});ie7CSS.PseudoElement.hash={};ie7CSS.PseudoElement.prototype.specialize({create:function(t){var k=this.selector+":"+t.uniqueID;if(!ie7CSS.PseudoElement.hash[k]){ie7CSS.PseudoElement.hash[k]=true;this.inherit(t)}}})}if(isHTML&&ie7HTML){ie7HTML.specialize({elements:{},addRecalc:function(s,h){this.inherit(s,function(e){if(!ie7HTML.elements[e.uniqueID]){h(e);ie7HTML.elements[e.uniqueID]=e}})}})}document.recalc=function(reload){if(ie7CSS.screen){if(reload)ie7CSS.reload();recalc()}}});
/WebSVN/templates/StandardNG/ie7/ie7-server.css
0,0 → 1,44
body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;}
body {margin: 8px; background: #333;}
h1 {margin: 0;}
h1 a:hover {background-color: transparent;}
h2 {font-size: 1.75em;}
h3 {font-size: 1.1em;}
p.footnote {font-family: "Times New Roman", Times, serif; font-style: italic;}
a:active {color: #ff0000;}
a:link {color: #0a6cce;}
a:visited {color: #0a6cce;}
code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap;
padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;}
code.box {display: block; padding: 10px; margin: 0.5em 0;}
ul {list-style-type: square;}
dd {margin: .2em 0 .5em 1em;}
dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;}
dl.library dd {font-style: italic; margin-left: 3em;}
dt {font-weight: bold;}
dt.pack {color: brown;}
a img {border-style: none;}
hr {height: 1px; color: #000; border-style: solid;}
hr.short {height: 2px; width: 100px;}
div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;}
hr {border-bottom-width: 0px;}
div.header hr {color: #0a6cce; background-color: #0a6cce;}
div.footer hr {color: #898e79; background-color: #898e79; }
div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;}
a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;}
div.footer a:hover {background-color: transparent; text-decoration: none;}
div.header .menu {text-align: right;}
div.content {min-height: 100px;}
div.footer {font-size: x-small; margin-top: 8px;}
div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;}
#license {margin-top: 5px; font-size: xx-small;}
table {border-top: 1px solid #000; border-left: 1px solid #000;}
th {background-color: #fff; text-align: left;}
th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;}
th.small {width: 100px;}
th.medium {width: 200px;}
th.large {width: 270px;}
th.x-large {width: 408px;}
table.fixed {table-layout: fixed;}
span.comment {color: #666;}
 
/WebSVN/templates/StandardNG/ie7/ie7-squish.js
0,0 → 1,45
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
IE7.addModule("ie7-squish", function() {
 
/* ---------------------------------------------------------------------
 
Squish some IE bugs!
 
Some of these bug fixes may have adverse effects so they are
not included in the standard library. Add your own if you want.
 
-dean
 
--------------------------------------------------------------------- */
 
// @NOTE: ie7Layout.boxSizing is the same as the "Holly Hack"
 
// "doubled margin" bug
// http://www.positioniseverything.net/explorer/doubled-margin.html
ie7CSS.addFix(/float\s*:\s*(left|right)/, "display:inline;$1");
 
if (ie7Layout) {
// "peekaboo" bug
// http://www.positioniseverything.net/explorer/peekaboo.html
if (appVersion >= 6) ie7CSS.addRecalc("float", "left|right", function($element) {
ie7Layout.boxSizing($element.parentElement);
// "doubled margin" bug
$element.runtimeStyle.display = "inline";
});
 
// "unscrollable content" bug
// http://www.positioniseverything.net/explorer/unscrollable.html
ie7CSS.addRecalc("position", "absolute|fixed", function($element) {
if ($element.offsetParent && $element.offsetParent.currentStyle.position == "relative")
ie7Layout.boxSizing($element.offsetParent);
});
}
 
//# // get rid of Microsoft's pesky image toolbar
//# if (!complete) document.write('<meta http-equiv="imagetoolbar" content="no">');
 
});
/WebSVN/templates/StandardNG/ie7/ie7-standard-p.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('y(!26.1F)11 7(){2C{26.1F=8;6 2s=8.24=11 3b;8.1g=7(){z"1F 4x 0.9 (ad)"};6 5T=/5T/.Z(2y.5h.7C);6 31=(5T)?7(m){26.31(1F+"\\n\\n"+m)}:2s;6 29=ac.29.19(/ab (\\d\\.\\d)/)[1];6 2m=16.aa!="a9";y(/a8/.Z(2y.5h.7C)||29<5||!/^a7/.Z(16.2F.2a))z;6 33=16.5W=="33";6 1s,1K;6 2F=16.2F,1X,1J,1R=16.1R;6 4E="!";6 3Q={};6 2G=1z;1F.24=7(n,s){y(!3Q[n]){y(2G)1k("s="+23(s));3Q[n]=11 s()}};6 R=/^[\\w\\.]+[^:]*$/;7 1Z(h,p){y(R.Z(h))h=(p||"")+h;z h};7 3F(h,p){h=1Z(h,p);z h.1q(0,h.7a("/")+1)};6 s=16.7B[16.7B.K-1];2C{1k(s.7j)}2j(i){}6 2k=3F(s.1l);6 2v;2C{6 l=(a6()>=5)?"a5":"5n";2v=11 a4(l+".a3")}2j(i){}6 4A={};7 3T(h,p){2C{h=1Z(h,p);y(!4A[h]){2v.a2("a1",h,1z);2v.a0();y(2v.7A==0||2v.7A==9Z){4A[h]=2v.9Y}}}2j(i){31("4B [1]: 5O 9X 9W "+h)}5U{z 4A[h]||""}};6 4i=1Z("9V.9U",2k);7 2o(1w){y(1w!=1U){1w.1T=1t.1C.1T;1w.1e=1t.1C.1e}z 1w};2o.1e=7(p,c){y(!p)p={};y(!c)c=p.1h;y(c=={}.1h)c=11 3b("8.1T()");c.1i=11 3b("z 8");c.1i.1C=11 8.1i;c.1i.1C.1e(p);c.1C=11 c.1i;c.1i.1C.1h=c.1C.1h=c;c.2E=8;c.1e=1a.5P;c.4z=8.4z;z c};2o.1i=11 3b("z 8");2o.1i.1C={1h:2o,1T:7(){z 1a.5P.9T.2E.2q(8,1a)},1e:7(1w){y(8==8.1h.1C&&8.1h.1e){z 8.1h.1i.1C.1e(1w)}O(6 i 28 1w){34(i){1m"1h":1m"1g":1m"1i":5M}y(3Y 1w[i]=="7"&&1w[i]!=8[i]){1w[i].2E=8[i]}8[i]=1w[i]}y(1w.1g!=8.1g&&1w.1g!={}.1g){1w.1g.2E=8.1g;8.1g=1w.1g}z 8}};7 1t(){};8.1t=2o.1e({1h:1t,1g:7(){z"[9S "+(8.1h.1x||"9R")+"]"},9Q:7(2i){z 8.1h==2i||2i.4z(8.1h)}});1t.1x="1t";1t.2E=1U;1t.4z=7(2i){1D(2i&&2i.2E!=8)2i=2i.2E;z 7q(2i)};1t.1i.2E=2o;3u 8.1t;6 5x=1t.1e({1h:7(){8.3L=[];8.1Q=[]},1S:2s});y(29<5.5)1k(3T("17-9P.5X",2k));6 5S=1z;1F.1S=7(){2C{y(5S)z;5S=33=1o;1X=16.1X;1J=(2m)?1X:2F;y(2l&&1s)1s.2q();V.2q();1u();31("2G 9O")}2j(e){31("4B [2]: "+e.5V)}};6 1Q=[];7 1n(r){1Q.1b(r)};7 1u(){14.5g();y(2l&&1s)1s.1u();V.1u();O(6 i=0;i<1Q.K;i++)1Q[i]()};7 2U(){6 E=0,R=1,L=2;6 G=/\\(/g,S=/\\$\\d/,I=/^\\$\\d+$/,T=/([\'"])\\1\\+(.*)\\+\\1\\1$/,7t=/\\\\./g,Q=/\'/,7z=/\\3S[^\\3S]*\\3S/g;6 3N=8;8.15=7(e,r){y(!r)r="";6 l=(5R(23(e)).19(G)||"").K+1;y(S.Z(r)){y(I.Z(r)){r=25(r.1q(1))-1}1d{6 i=l;6 q=Q.Z(5R(r))?\'"\':"\'";1D(i)r=r.2O("$"+i--).2p(q+"+a[o+"+i+"]+"+q);r=11 3b("a,o","z"+q+r.13(T,"$1")+q)}}7y(e||"/^$/",r,l)};8.2V=7(s){3R.K=0;z 7u(7v(s,8.4y).13(11 1N(30,8.5Q?"5D":"g"),7w),8.4y).13(7z,"")};8.72=7(){30.K=0};6 3R=[];6 30=[];6 7x=7(){z"("+23(8[E]).1q(1,-1)+")"};30.1g=7(){z 8.2p("|")};7 7y(){1a.1g=7x;30[30.K]=1a}7 7w(){y(!1a[0])z"";6 i=1,j=0,p;1D(p=30[j++]){y(1a[i]){6 r=p[R];34(3Y r){1m"7":z r(1a,i);1m"9N":z 1a[r+i]}6 d=(1a[i].6F(3N.4y)==-1)?"":"\\3S"+1a[i]+"\\3S";z d+r}1d i+=p[L]}};7 7v(s,e){z e?s.13(11 1N("\\\\"+e+"(.)","g"),7(m,c){3R[3R.K]=c;z e}):s};7 7u(s,e){6 i=0;z e?s.13(11 1N("\\\\"+e,"g"),7(){z e+(3R[i++]||"")}):s};7 5R(s){z s.13(7t,"")}};2U.1C={1h:2U,5Q:1z,4y:""};1t.1e(2U.1C);6 3M=2U.1e({5Q:1o});6 14=7(){6 4x="2.0.2";6 C=/\\s*,\\s*/;6 14=7(s,1E){2C{6 m=[];6 u=1a.5P.5I&&!1E;6 b=(1E)?(1E.1h==7n)?1E:[1E]:[16];6 2f=45(s).2O(C),i;O(i=0;i<2f.K;i++){s=5J(2f[i]);y(4P&&s.1q(0,3).2p("")==" *#"){s=s.1q(2);1E=7o([],b,s[1])}1d 1E=b;6 j=0,t,f,a,c="";1D(j<s.K){t=s[j++];f=s[j++];c+=t+f;a="";y(s[j]=="("){1D(s[j++]!=")"&&j<s.K){a+=s[j]}a=a.1q(0,-1);c+="("+a+")"}1E=(u&&2e[c])?2e[c]:7m(1E,t,f,a);y(u)2e[c]=1E}m=m.4J(1E)}3u 14.5O;z m}2j(e){14.5O=e;z[]}};14.1g=7(){z"7 14() {\\n [4x "+4x+"]\\n}"};6 2e={};14.5I=1z;14.5g=7(s){y(s){s=5J(s).2p("");3u 2e[s]}1d 2e={}};6 3Q={};6 2G=1z;14.24=7(n,s){y(2G)1k("s="+23(s));3Q[n]=11 s()};14.1i=7(c){z c?1k(c):8};6 1V={};6 1B={};6 1p={19:/\\[([\\w-]+(\\|[\\w-]+)?)\\s*(\\W?=)?\\s*([^\\]]*)\\]/};6 2R=[];1V[" "]=7(r,f,t,n){6 e,i,j;O(i=0;i<f.K;i++){6 s=4w(f[i],t,n);O(j=0;(e=s[j]);j++){y(2D(e)&&5K(e,n))r.1b(e)}}};1V["#"]=7(r,f,i){6 e,j;O(j=0;(e=f[j]);j++)y(e.1c==i)r.1b(e)};1V["."]=7(r,f,c){c=11 1N("(^|\\\\s)"+c+"(\\\\s|$)");6 e,i;O(i=0;(e=f[i]);i++)y(c.Z(e.1x))r.1b(e)};1V[":"]=7(r,f,p,a){6 t=1B[p],e,i;y(t)O(i=0;(e=f[i]);i++)y(t(e,a))r.1b(e)};1B["21"]=7(e){6 d=5L(e);y(d.5N)O(6 i=0;i<d.5N.K;i++){y(d.5N[i]==e)z 1o}};1B["37"]=7(e){};6 2D=7(e){z(e&&e.7k==1&&e.2W!="!")?e:1U};6 4S=7(e){1D(e&&(e=e.9M)&&!2D(e))5M;z e};6 47=7(e){1D(e&&(e=e.6W)&&!2D(e))5M;z e};6 3l=7(e){z 2D(e.7s)||47(e.7s)};6 5t=7(e){z 2D(e.7r)||4S(e.7r)};6 6q=7(e){6 c=[];e=3l(e);1D(e){c.1b(e);e=47(e)}z c};6 4P=1o;6 5H=7(e){6 d=5L(e);z(3Y d.7p=="9L")?/\\.9K$/i.Z(d.9J):7q(d.7p=="9I 9H")};6 5L=7(e){z e.9G||e.16};6 4w=7(e,t){z(t=="*"&&e.1Y)?e.1Y:e.4w(t)};6 4T=7(e,t,n){y(t=="*")z 2D(e);y(!5K(e,n))z 1z;y(!5H(e))t=t.9F();z e.2W==t};6 5K=7(e,n){z!n||(n=="*")||(e.9E==n)};6 9D=7(e){z e.9C};7 7o(r,f,1c){6 m,i,j;O(i=0;i<f.K;i++){y(m=f[i].1Y.9B(1c)){y(m.1c==1c)r.1b(m);1d y(m.K!=1U){O(j=0;j<m.K;j++){y(m[j].1c==1c)r.1b(m[j])}}}}z r};y(![].1b)7n.1C.1b=7(){O(6 i=0;i<1a.K;i++){8[8.K]=1a[i]}z 8.K};6 N=/\\|/;7 7m(1E,t,f,a){y(N.Z(f)){f=f.2O(N);a=f[0];f=f[1]}6 r=[];y(1V[t]){1V[t](r,1E,f,a)}z r};6 S=/^[^\\s>+~]/;6 7l=/[\\s#.:>+~()@]|[^\\s#.:>+~()@]+/g;7 5J(s){y(S.Z(s))s=" "+s;z s.19(7l)||[]};6 W=/\\s*([\\s>+~(),]|^|$)\\s*/g;6 I=/([\\s>+~,]|[^(]\\+|^)([#.:@])/g;6 45=7(s){z s.13(W,"$1").13(I,"$1*$2")};6 2c={1g:7(){z"\'"},19:/^(\'[^\']*\')|("[^"]*")$/,Z:7(s){z 8.19.Z(s)},15:7(s){z 8.Z(s)?s:8+s+8},3v:7(s){z 8.Z(s)?s.1q(1,-1):s}};6 2w=7(t){z 2c.3v(t)};6 E=/([\\/()[\\]?{}|*+-])/g;7 4O(s){z s.13(E,"\\\\$1")};2G=1o;z 14}();14.5I=1o;14.24("17",7(){2D=7(e){z(e&&e.7k==1&&e.2W!="!"&&!e.2K)?e:1U}});14.1i("2w=1a[1]",42);6 2l=!14.1i("5H(1a[1])",2F);6 2r=":21{17-21:21}:37{17-21:37}"+(2l?"":"*{6Q:0}");6 V=11(5x.1e({5B:11 3M,2P:"",2Y:"",5F:[],1S:7(){8.5G();8.4t()},4t:7(){V.3O.18=2r+8.2P+8.2Y},7i:7(){6 3P=16.4w("1r"),s;O(6 i=3P.K-1;(s=3P[i]);i--){y(!s.3m&&!s.17){8.5F.1b(s.7j)}}},2q:7(){8.7i();8.4t();11 3y("2P");8.7g()},3i:7(e,r){8.5B.15(e,r)},1u:7(){6 R=/7h\\d+/g;6 s=2r.19(/[{,]/g).K;6 3P=s+(8.2P.18.19(/\\{/g)||"").K;6 2Q=8.3O.2t,r;6 4v,c,4u,e,i,j,k,1c;O(i=s;i<3P;i++){r=2Q[i];y(r&&(4v=r.1r.18.19(R))){4u=14(r.4M);y(4u.K)O(j=0;j<4v.K;j++){1c=4v[j];c=V.1Q[1c.1q(10)][2];O(k=0;(e=4u[k]);k++){y(e.D[1c])c(e)}}}}},1n:7(p,t,h,r){t=11 1N("([{;\\\\s])"+p+"\\\\s*:\\\\s*"+t+"[^;}]*");6 i=8.1Q.K;y(r)r=p+":"+r;8.3i(t,7(m,o){z(r?m[o+1]+r:m[o])+";17-"+m[o].1q(1)+";7h"+i+":1"});8.1Q.1b(1a);z i},2w:7(s){z s.18||""},5G:7(){y(33||!2l)16.5G();1d 16.9A("<1r 17=1o></1r>");8.3O=1R[1R.K-1];8.3O.17=1o;8.3O.18=2r},7g:7(){O(6 i=0;i<1R.K;i++){y(!1R[i].17&&1R[i].18){1R[i].18=""}}}}));7 3y(m){8.2Z=m;8.3q();V[m]=8;V.4t()};1t.1e({1h:3y,1g:7(){z"@2Z "+8.2Z+"{"+8.18+"}"},1u:2s,3q:7(){8.18="";8.2w();8.38();8.18=41(8.18);f={}},2w:7(){6 7e=[].4J(V.5F);6 M=/@2Z\\s+([^{]*)\\{([^@]+\\})\\s*\\}/5D;6 A=/\\9z\\b|^$/i,S=/\\9y\\b/i,P=/\\9x\\b/i;7 7d(c,m){4s.v=m;z c.13(M,4s)};7 4s(9w,m,c){m=5E(m);34(m){1m"2P":1m"2Y":y(m!=4s.v)z"";1m"1Y":z c}z""};7 5E(m){y(A.Z(m))z"1Y";1d y(S.Z(m))z(P.Z(m))?"1Y":"2P";1d y(P.Z(m))z"2Y"};6 3N=8;7 5C(s,p,m,l){6 c="";y(!l){m=5E(s.2Z);l=0}y(m=="1Y"||m==3N.2Z){y(l<3){O(6 i=0;i<s.7f.K;i++){c+=5C(s.7f[i],3F(s.2u,p),m,l+1)}}c+=79(s.2u?7c(s,p):7e.77()||"");c=7d(c,3N.2Z)}z c};6 f={};7 7c(s,p){6 u=1Z(s.2u,p);y(f[u])z"";f[u]=(s.3m)?"":7b(V.2w(s,p),3F(s.2u,p));z f[u]};6 U=/(43\\s*\\(\\s*[\'"]?)([\\w\\.]+[^:\\)]*[\'"]?\\))/5D;7 7b(c,p){z c.13(U,"$1"+p.1q(0,p.7a("/")+1)+"$2")};O(6 i=0;i<1R.K;i++){y(!1R[i].3m&&!1R[i].17){8.18+=5C(1R[i])}}},38:7(){8.18=V.5B.2V(8.18)},1u:2s});6 2c=14.1i("2c");6 4r=[];7 79(c){z 2n.2V(3r.2V(c))};7 5A(m,o){z 2c+(4r.1b(m[o])-1)+2c};7 42(v){z 2c.Z(v)?1k(4r[1k(v)]):v};6 2n=11 3M;2n.15(/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\//);2n.15(/\'[^\']*\'/,5A);2n.15(/"[^"]*"/,5A);2n.15(/\\s+/," ");2n.15(/@(9v|9u)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->/);6 3r=11 3M;3r.15(/\\\\\'/,"\\\\9t");3r.15(/\\\\"/,"\\\\46");6 5z=11 3M;5z.15(/\'(\\d+)\'/,78);7 41(c){z 5z.2V(c)};7 78(m,o){z 4r[m[o+1]]};6 5y=[];7 4U(h){1n(h);1j(26,"9s",h)};7 1j(e,t,h){e.9r(t,h);5y.1b(1a)};7 76(e,t,h){2C{e.9q(t,h)}2j(i){}};1j(26,"9p",7(){6 h;1D(h=5y.77()){76(h[0],h[1],h[2])}});7 20(h,e,c){y(!h.1O)h.1O={};y(c)h.1O[e.2a]=e;1d 3u h.1O[e.2a];z c};1j(26,"6z",7(){y(!V.2Y)11 3y("2Y");V.2Y.1u()});6 75=/^\\d+(9o)?$/i;6 3d=/^\\d+%$/;6 3c=7(e,v){y(75.Z(v))z 25(v);6 s=e.1r.1f;6 r=e.J.1f;e.J.1f=e.D.1f;e.1r.1f=v||0;v=e.1r.4e;e.1r.1f=s;e.J.1f=r;z v};7 6x(t){6 e=16.3X(t||"2M");e.1r.18="1y:3C;6R:0;4K:9n;3G:1M;9m:9l(0 0 0 0);1f:-9k";e.2K=1o;z e};6 4q="17-";7 3D(e){z e.D["17-1y"]=="2z"};7 4o(e,p){z e.D[4q+p]||e.D[p]};7 2T(e,p,v){y(e.D[4q+p]==1U){e.J[4q+p]=e.D[p]}e.J[p]=v};7 4H(o,c,u){6 t=9j(7(){2C{y(!o.3q)z;o.3q(o,c,u);74(t)}2j(i){74(t)}},10)};1F.24("17-9i",7(){y(!2l)z;2r+="9h{3p-3o:9g}9f{3p-3o:1.9e;}9d{3p-3o:1.9c;}"+"9b{3p-3o:9a}99{3p-3o:.98}97{3p-3o:.96}";6 5w={};1s=11(5x.1e({1S:2s,3i:7(){8.3L.1b(1a)},2q:7(){O(6 i=0;i<8.3L.K;i++){6 m=14(8.3L[i][0]);6 f=8.3L[i][1]||6X;O(6 j=0;j<m.K;j++)f(m[j])}},1n:7(){8.1Q.1b(1a)},1u:7(){O(6 i=0;i<8.1Q.K;i++){6 m=14(8.1Q[i][0]);6 r=8.1Q[i][1],e;6 k=4g.95(2,i);O(6 j=0;(e=m[j]);j++){6 u=e.2a;y((5w[u]&k)==0){e=r(e)||e;5w[u]|=k}}}}}));1s.3i("94");1s.1n("93",7(e){y(!e.6o){6 f=14("5l,92",e)[0];y(f){1j(e,"73",7(){f.91()})}}});1s.1n("71,5l",7(e){y(e.2W=="70"){6 m=e.3z.19(/ 3n="([^"]*)"/i);e.J.3n=(m)?m[1]:""}y(e.2L=="5v"){1j(e,"73",7(){e.J.5u=1o;32("16.1Y."+e.2a+".J.5u=1z",1)})}});6 U=/^(5v|72|71)$/;1s.1n("90",7(e){1j(e,"8Z",7(){O(6 i=0;i<e.K;i++){y(6Z(e[i])){e[i].3m=1o;32("16.1Y."+e[i].2a+".3m=1z",1)}1d y(e[i].2W=="70"&&e[i].2L=="5v"){32("16.1Y."+e[i].2a+".3n=\'"+e[i].3n+"\'",1);e[i].3n=e[i].J.3n}}})});7 6Z(e){z U.Z(e.2L)&&!e.3m&&!e.J.5u};1s.1n("5d",7(e){y(e.8Y&&!e.6Y)e.6Y=""});6 P=(29<5.5)?"8X:":"";7 6X(e){6 f=16.3X("<"+P+e.3z.1q(1));y(e.3z.1q(-2)!="/>"){6 6V="</"+e.2W+">",n;1D((n=e.6W)&&n.3z!=6V){f.6t(n)}y(n)n.8W()}e.4R.6A(f,e)}});1F.24("17-8V",7(){1K=8;2r+="*{3H:22-2X}";8.3j=(29<5.5)?7(e){z e.1I}:7(e){z e.D.3j};8.3H=7(e){y(!1K.3j(e)){e.1r.2b="6T";y(e.D.6U=="1P")e.J.6U="2y";4k(e)}};7 4k(e){y(e!=1J&&e.D.1y!="3C"){4p(e);8U(e)}};6 3l=14.1i("3l");6 5t=14.1i("5t");7 4p(e){y(!e.J.3k){6 p=e.59;y(p&&1K.3j(p)&&e==3l(p))z;6 f=3l(e);y(f&&f.D.8T=="1M"&&1K.3j(f)){4p(f);m=5s(e,e.D.3k);c=5s(f,f.D.3k);y(m<0||c<0){e.J.3k=m+c}1d{e.J.3k=4g.3g(c,m)}f.J.3k="8S"}}};1k(23(4p).13(/5c/g,"6N").13(/4N/g,"8R"));7 5s(e,v){z(v=="1P")?0:3c(e,v)};6 U=/^[.\\d][\\w%]*$/,A=/^(1P|6T)$/,N="[.\\\\d]";6 4l,6S;7 6O(e){4l(e);6S(e)};7 2g(H){4l=7(e){y(!3d.Z(e.D.12))2g(e);4k(e)};7 2g(e,v){y(!e.J.3J){y(!v)v=e.D.12;e.J.3J=(U.Z(v))?4g.3g(0,2B(e,v)):v;2T(e,"12",e.J.3J)}};7 5r(e){y(!3D(e)){6 l=e.3B;1D(l&&!1K.3j(l))l=l.3B}z(l||1J).1I};7 1H(e,v){y(3d.Z(v))z 25(4c(v)/3w*5r(e));z 3c(e,v)};6 2B=7(e,v){6 b=e.D["2X-5o"]=="3G-2X";6 a=0;y(2m&&!b)a+=4n(e)+3K(e);1d y(!2m&&b)a-=4n(e)+3K(e);z 1H(e,v)+a};7 4n(e){z e.2S-e.1I};7 3K(e){z 1H(e,e.D.8Q)+1H(e,e.D.8P)};1k(23(3K).13(/6R/g,"6Q").13(/8O/g,"8N"));2r+="*{1A:1M;27:1M;3I-12:1M;3g-12:1M}";7 1A(e){y(e.D["3I-12"]!=1U){e.1r.1A=e.D["3I-12"]}y(20(1A,e,e.D.1A!="1M")){1K.3H(e);2g(e);4m(e)}};1k(23(1A).13(/3I/g,"3g"));1K.1A=1A;1K.27=27;7 4m(e){6 r=e.54();6 w=r.1W-r.1f;y(e.D.1A!="1M"&&w<=2B(e,e.D.1A)){e.J.12=2B(e,e.D.1A)}1d y(e.D.27!="1M"&&w>=2B(e,e.D.27)){e.J.12=2B(e,e.D.27)}1d{e.J.12=e.J.3J}};7 2x(e){y(20(2x,e,/^(2z|3C)$/.Z(e.D.1y)&&4o(e,"1f")!="1P"&&4o(e,"1W")!="1P"&&A.Z(4o(e,"12")))){5p(e);1K.3H(e)}};1K.2x=2x;7 5p(e){6 l=1H(e,e.J.52||e.D.1f);6 w=5r(e)-1H(e,e.D.1W)-l-8M(e);y(25(e.J.12)==w)z;e.J.12="";y(3D(e)||H||e.2S<w){y(!2m)w-=4n(e)+3K(e);y(w<0)w=0;e.J.3J=w;2T(e,"12",w)}};6 5q=0;4U(7(){6 i,w=(5q<1J.1I);5q=1J.1I;O(i 28 1A.1O){6 e=1A.1O[i];6 f=(25(e.J.12)==2B(e,e.D.1A));y(w&&f)e.J.12="";y(w==f)4m(e)}O(i 28 27.1O){6 e=27.1O[i];6 f=(25(e.J.12)==2B(e,e.D.27));y(!w&&f)e.J.12="";y(w!=f)4m(e)}O(i 28 2x.1O)5p(2x.1O[i])});y(26.8L!==1z){V.1n("12",N,2m?4l:4k)}V.1n("3I-12",N,1A);V.1n("3g-12",N,27);V.1n("1W",N,2x)};V.1n("3G-6P",N,7(e){y(e.D.8K!="8J"){e.8I=3c(e,e.D["3G-6P"])}});V.1n("2X-5o","22-2X",8.3H);V.1n("2X-5o","3G-2X",6O);6 1v=11 2U;1v.15(/6v/,"6u");1v.15(/12/,"2b");1v.15(/6w/,"5c");1v.15(/1f/,"2y");1v.15(/8H/,"6N");1v.15(/1W/,"56");1k(1v.2V(23(2g)));2g();8G(1o)});1F.24("17-8F",7(){y(29<5.5)z;6 A="6J.5n.8E";6 F="6K:"+A+"(1l=\'%1\',8D=\'6H\')";6 5j=11 1N((26.8C||"-8B.8A")+"$","i");6 3h=[];7 5f(e){6 f=e.6M[A];y(f){f.1l=e.1l;f.6L=1o}1d{e.J.5m=F.13(/%1/,e.1l);3h.1b(e)}e.1l=4i};7 6y(e){e.1l=e.4D;e.6M[A].6L=1z};V.3i(/6I\\s*:\\s*([\\d.]+)/,7(m,o){z"6G:1;5m:6K:6J.5n.8z(6I="+((4c(m[o+1])*3w)||1)+")"});6 B=/5e(-5i)?\\s*:\\s*([^\\(};]*)43\\(([^\\)]+)\\)([^;}]*)/;V.3i(B,7(m,o){6 u=42(m[o+3]);z 5j.Z(u)?"5m:"+F.13(/6H/,"8y").13(/%1/,u)+";6G:1;5e"+(m[o+1]||"")+":"+(m[o+2]||"")+"1M"+(m[o+4]||""):m[o]});y(1s){1s.1n("5d,5l",7(e){y(e.2W=="8x"&&e.2L!="5i")z;5k(e);1j(e,"8w",7(){y(!4j&&60.8v=="1l"&&e.1l.6F(4i)==-1)5k(e)})});6 6D=/^3W:.*;6E/i;6 6C=1Z("17-6E.8u",2k);7 5k(e){y(5j.Z(e.1l)){6 i=11 8t(e.12,e.2b);i.8s=7(){e.12=i.12;e.2b=i.2b;i=1U};i.1l=e.1l;e.4D=e.1l;5f(e)}1d y(6D.Z(e.1l)){e.1l=6C+"?"+e.1l.1q(5)}};6 I=/^5i/i;6 6B=1Z("17-2M.4C",2k);1s.1n("2M",7(e){y(I.Z(e.2L)){6 o=16.3X("<2M 2L=68/x-67>");o.1r.12=e.D.12;o.1r.2b=e.D.2b;o.3W=6B;6 u=1Z(e.3W,3F(5h.2u));e.4R.6A(o,e);14.5g("2M");4H(o,"",u);z o}})}6 4j=1z;1j(26,"6z",7(){4j=1o;O(6 i=0;i<3h.K;i++)6y(3h[i])});1j(26,"8r",7(){O(6 i=0;i<3h.K;i++)5f(3h[i]);4j=1z})});1F.24("17-2z",7(){V.1n("1y","2z",4a,"3C");V.1n("5e(-8q)?","[^};]*2z",4b);6 4Z=(2m)?"1X":"2F";6 4h=7(){y(1X.D.5b!="2z"){y(1X.D.5a=="1M"){1X.J.8p="8o-8n";1X.J.5a="43("+4i+")"}1X.J.5b="2z"}4h=2s};6 2h=6x("5d");7 1v(f){z 2A.2V(23(f))};6 2A=11 2U;2A.15(/6w/,"5c");2A.15(/1f/,"2y");2A.15(/6v/,"6u");2A.15(/12/,"2b");2A.15(/1W/,"56");2A.15(/X/,"Y");7 3f(e){z(e)?3D(e)||3f(e.59):1z};7 4f(e,p,3e){32("16.1Y."+e.2a+".J.4f(\'"+p+"\',\'"+3e+"\')",0)};7 4b(e){y(20(4b,e,e.D.5b=="2z"&&!e.61(1X))){4h();58(e);8m(e);4V(e)}};7 4V(e){2h.1l=e.D.5a.1q(5,-2);6 p=(e.6c)?e:e.59;p.6t(2h);57(e);8l(e);p.8k(2h)};7 58(e){e.1r.3E=e.D.3E;y(!3f(e)){6 3e="(25(J.3A)+16."+4Z+".6s)||0";4f(e,"3E",3e)}};1k(1v(58));7 57(e){6 p=3f(e)?"3E":"3A";e.J[p]=55(e,e.1r.3E)-e.54().1f-e.8j+2};1k(1v(57));7 55(e,p){34(p){1m"1f":1m"2y":z 0;1m"1W":1m"56":z 1J.1I-2h.2S;1m"8i":z(1J.1I-2h.2S)/2;8h:y(3d.Z(p)){z 25((1J.1I-2h.2S)*4c(p)/3w)}2h.1r.1f=p;z 2h.3A}};1k(1v(55));7 4a(e){y(20(4a,e,3D(e))){2T(e,"1y","3C");2T(e,"1f",e.D.1f);2T(e,"2y",e.D.2y);4h();y(1K)1K.2x(e);49(e)}};7 49(e,r){8g(e,r);4Y(e,r,1o);y(!e.J.4d&&e.D.4X=="1P"&&e.D.1W!="1P"){6 l=1J.1I-1H(e,e.D.1W)-1H(e,e.J.52)-e.1I;y(e.D.8f=="1P")l=25(l/2);y(3f(e.3B))e.J.4e+=l;1d e.J.50=l}53(e);8e(e)};7 53(e){y(e.D.12!="1P"){6 r=e.54();6 w=e.2S-1J.1I+r.1f-2;y(w>=0){w=4g.3g(3c(e,e.D.12)-w,0);2T(e,"12",w)}}};1k(1v(53));7 4Y(e,r){y(!r&&3d.Z(e.D.12)){e.J.2g=e.D.12}y(e.J.2g){e.J.12=1H(e,e.J.2g)}y(r){y(!e.J.4d)z}1d{e.J.50=0;e.J.52=e.D.1f;e.J.4d=e.D.1W!="1P"&&e.D.1f=="1P"}e.J.1f="";e.J.51=4W(e);e.J.4e=e.J.51;y(!r&&!3f(e.3B)){6 3e="J.51+J.50+16."+4Z+".6s";4f(e,"4e",3e)}};1k(1v(4Y));7 4W(e){6 s=e.3A,n=1;y(e.J.4d){s=1J.1I-e.2S-1H(e,e.D.1W)}y(e.D.4X!="1P"){s-=1H(e,e.D.4X)}1D(e=e.3B){y(e.D.1y!="8d")n=-1;s+=e.3A*n}z s};1k(1v(4W));7 1H(e,v){y(3d.Z(v))z 25(4c(v)/3w*1J.1I);z 3c(e,v)};1k(1v(1H));7 6r(){6 e=4b.1O;O(6 i 28 e)4V(e[i]);e=4a.1O;O(i 28 e){49(e[i],1o);49(e[i],1o)}48=0};6 48;4U(7(){y(!48)48=32(6r,0)})});1F.24("17-8c-1V",7(){14.24("8b-8a",7(){1V[">"]=7(r,f,t,n){6 e,i,j;O(i=0;i<f.K;i++){6 s=6q(f[i]);O(j=0;(e=s[j]);j++)y(4T(e,t,n))r.1b(e)}};1V["+"]=7(r,f,t,n){O(6 i=0;i<f.K;i++){6 e=47(f[i]);y(e&&4T(e,t,n))r.1b(e)}};1V["@"]=7(r,f,a){6 t=2R[a].Z;6 e,i;O(i=0;(e=f[i]);i++)y(t(e))r.1b(e)};1B["4N-89"]=7(e){z!4S(e)};1B["4Q"]=7(e,c){c=11 1N("^"+c,"i");1D(e&&!e.2H("4Q"))e=e.4R;z e&&c.Z(e.2H("4Q"))};1p.6p=/\\\\:/g;1p.3x="@";1p.3a={};1p.13=7(m,a,n,c,v){6 k=8.3x+m;y(!2R[k]){a=8.3Z(a,c||"",v||"");2R[k]=a;2R.1b(a)}z 2R[k].1c};1p.38=7(s){s=s.13(8.6p,"|");6 m;1D(m=s.19(8.19)){6 r=8.13(m[0],m[1],m[2],m[3],m[4]);s=s.13(8.19,r)}z s};1p.3Z=7(p,t,v){6 a={};a.1c=8.3x+2R.K;a.66=p;t=8.3a[t];t=t?t(8.2H(p),2w(v)):1z;a.Z=11 3b("e","z "+t);z a};1p.2H=7(n){34(n.5Z()){1m"1c":z"e.1c";1m"3U":z"e.1x";1m"O":z"e.6o";1m"2u":y(4P){z"23((e.3z.19(/2u=\\\\46?([^\\\\s\\\\46]*)\\\\46?/)||[])[1]||\'\')"}}z"e.2H(\'"+n.13(N,":")+"\')"};1p.3a[""]=7(a){z a};1p.3a["="]=7(a,v){z a+"=="+2c.15(v)};1p.3a["~="]=7(a,v){z"/(^| )"+4O(v)+"( |$)/.Z("+a+")"};1p.3a["|="]=7(a,v){z"/^"+4O(v)+"(-|$)/.Z("+a+")"};6 6n=45;45=7(s){z 6n(1p.38(s))}});6 1p=14.1i("1p");6 H=/a(#[\\w-]+)?(\\.[\\w-]+)?:(65|62)/i;6 6l=/\\s*\\{\\s*/,6m=/\\s*\\}\\s*/,C=/\\s*\\,\\s*/;6 F=/(.*)(:4N-(88|87))/;3y.1C.1e({38:7(){8.1T();6 o=V.2t.K;6 2Q=8.18.2O(6m),r;6 2f,c,i,j;O(i=0;i<2Q.K;i++){r=2Q[i].2O(6l);2f=r[0].2O(C);c=r[1];O(j=0;j<2f.K;j++){2f[j]=c?8.6k(2f[j],c):""}2Q[i]=2f.2p("\\n")}8.18=2Q.2p("\\n");8.2t=V.2t.1q(o)},1u:7(){6 r,i;O(i=0;(r=8.2t[i]);i++)r.1u()},6k:7(s,c){y(V.6j.Z(s)){6 m;y(m=s.19(1L.39)){z 11 1L(m[1],m[2],c)}1d y(m=s.19(2d.39)){y(!2l||!H.Z(m)||2d.44.Z(m)){z 11 2d(s,m[1],m[2],m[3],c)}}1d z 11 1G(s,c)}z s+" {"+c+"}"}});V.1e({2t:[],1B:14.1i("1B"),36:{},2e:14.1i("2e"),1G:1G,2d:2d,1L:1L,2J:2J,2q:7(){6 p=8.1B+"|6i|6h|"+8.36;p=p.13(/(21|37)\\|/g,"");8.6j=11 1N("[>+~\\[]|([:.])[\\\\w-()]+\\\\1|:("+p+")");6 c="[^\\\\s(]+\\\\s*[+~]|@\\\\d+|:(";1G.44=11 1N(c+p+")","g");2d.44=11 1N(c+8.1B+")","g");2d.39=11 1N("(.*):("+8.36+")(.*)");1L.39=/(.*):(6i|6h).*/;8.1T()},1u:7(){8.2P.1u();8.1T()},2w:7(s,p){z 2v?(3T(s.2u,p)||s.18):8.1T(s)},1j:7(e,t,h){1j(e,t,h)}});7 1G(s,c){8.1c=V.2t.K;8.1x=1G.3x+8.1c;s=(s).19(F)||s||"*";8.40=s[1]||s;8.4M=1G.6g(8.40)+"."+8.1x+(s[2]||"");8.18=c;8.39=11 1N("\\\\s"+8.1x+"(\\\\s|$)","g");V.2t.1b(8);8.1S()};1t.1e({1h:1G,1g:7(){z 8.4M+" {"+8.18+"}"},1S:2s,15:7(e){e.1x+=" "+8.1x},3v:7(e){e.1x=e.1x.13(8.39,"$1")},1u:7(){6 m=V.2e[" *."+8.1x]=14(8.40);O(i=0;i<m.K;i++)8.15(m[i])}});1G.3x="5Y";1G.6f=/>/g;1G.6g=7(s){s=1p.38(s);z s.13(8.44,"").13(8.6f," ")};7 2d(s,a,d,t,c){8.6e=a||"*";8.6d=V.36[d];8.4L=t;8.1T(s,c)};1G.1e({1h:2d,1u:7(){6 m=14(8.6e);O(6 i=0;i<m.K;i++){6 t=(8.4L)?14(8.4L,m[i]):[m[i]];y(t.K)8.6d.2q(m[i],t,8)}}});6 A=/^4I/;6 U=/^43\\s*\\(\\s*([^)]*)\\)$/;6 M={86:"85",84:"83",82:"81",80:"7Z"};6 6b=1Z("17-22.4C",2k)+"?";2r+=".2K{4K:1M}";7 1L(s,p,c){8.1y=p;6 2N=c.19(1L.6a),m,e;y(2N){2N=2N[1];m=2N.2O(/\\s+/);O(6 i=0;(e=m[i]);i++){m[i]=A.Z(e)?{4I:e.1q(5,-1)}:(e.7Y(0)=="\'")?42(e):41(e)}2N=m}8.22=2N;8.1T(s,41(c))};1G.1e({1h:1L,1g:7(){z"."+8.1x+"{4K:7X}"},1S:7(){8.19=14(8.40);O(6 i=0;i<8.19.K;i++){6 r=8.19[i].J;y(!r[8.1y])r[8.1y]={18:""};r[8.1y].18+=";"+8.18;y(8.22!=1U)r[8.1y].22=8.22}},1u:7(){y(8.22==1U)z;O(6 i=0;i<8.19.K;i++){8.3Z(8.19[i])}},3Z:7(t){6 g=t.J[8.1y];y(g){6 c=[].4J(g.22||"");O(6 j=0;j<c.K;j++){y(3Y c[j]=="2M"){c[j]=t.2H(c[j].4I)}}c=c.2p("");6 u=c.19(U);6 h=1L[u?"69":"4E"].13(/%1/,8.1x);6 4G=g.18.13(/\'/g,\'"\');6 4F=M[8.1y+7W(t.6c)];y(u){6 p=16.3X(h);t.7V(4F,p);p.3W=6b;4H(p,4G,2c.3v(u[1]))}1d{h=h.13(/%2/,4G).13(/%3/,c);t.7U(4F,h)}t.J[8.1y]=1U}}});1L.6a=/22\\s*:\\s*([^;]*)(;|$)/;1L.69="<2M 3U=\'2K %1\' 2K 12=3w% 2b=0 2L=68/x-67>";1L.4E="<17:! 3U=\'2K %1\' 2K 1r=\'%2\'>%3</17:!>";7 2J(n,a){8.66=n;8.2q=a;8.2I={};V.36[n]=8};1t.1e({1h:2J,20:7(i){6 c=i[2];i.1c=c.1c+i[0].2a;y(!8.2I[i.1c]){6 t=i[1],j;O(j=0;j<t.K;j++)c.15(t[j]);8.2I[i.1c]=i}},35:7(i){y(8.2I[i.1c]){6 c=i[2];6 t=i[1],j;O(j=0;j<t.K;j++)c.3v(t[j]);3u 8.2I[i.1c]}}});V.1B.1g=7(){6 t=[],p;O(p 28 8){y(8[p].K>1)p+="\\\\([^)]*\\\\)";t.1b(p)}z t.2p("|")};V.1B["21"]=7(e){z e.D["17-21"]=="21"};V.1B["37"]=7(e){z e.D["17-21"]=="37"};6 64=(29<5.5)?"7T":"7S";6 63=(29<5.5)?"7R":"7Q";V.36.1g=V.1B.1g;6 3s=11 2J("65",7(e){6 i=1a;V.1j(e,64,7(){3s.20(i)});V.1j(e,63,7(){3s.35(i)})});6 3t=11 2J("7P",7(e){6 i=1a;V.1j(e,"7O",7(){3t.35(i);3t.20(i)});V.1j(e,"7N",7(){3t.35(i)});y(e==16.7M){3t.20(i)}});6 3V=11 2J("62",7(e){6 i=1a;V.1j(e,"7L",7(){3V.20(i)})});1j(16,"7K",7(){6 i=3V.2I,j;O(j 28 i)3V.35(i[j]);i=3s.2I;O(j 28 i)y(!i[j][0].61(60.7J))3s.35(i[j])});2o(1p);1p.1e({2H:7(n){34(n.5Z()){1m"3U":z"e.1x.13(/\\\\b\\\\s*5Y\\\\d+/g,\'\')";1m"1l":z"(e.4D||e.1l)"}z 8.1T(n)}});2n.15(/::/,":");3r.15(/\\\\([\\7I-7H-F]{1,4})/,7(m,o){m=m[o+1];z"\\\\u"+"7G".1q(m.K)+m})});2G=1o;y(2m)1k(3T("17-7F.5X",2k));V.1S();y(2l&&1s)1s.1S();y(33)1F.1S();1d{2F.7E(1Z("17-3q.4C",2k));1j(16,"7D",7(){y(16.5W=="33")32(1F.1S,0)})}}2j(e){31("4B [0]: "+e.5V)}5U{}};',62,634,'||||||var|function|this||||||||||||||||||||||||||if|return||||currentStyle||||||runtimeStyle|length||||for|||||||ie7CSS||||test||new|width|replace|cssQuery|add|document|ie7|cssText|match|arguments|push|id|else|specialize|left|toString|constructor|valueOf|addEventHandler|eval|src|case|addRecalc|true|AttributeSelector|slice|style|ie7HTML|Common|recalc|_0|that|className|position|false|minWidth|pseudoClasses|prototype|while|fr|IE7|Rule|getPixelWidth|clientWidth|viewport|ie7Layout|PseudoElement|none|RegExp|elements|auto|recalcs|styleSheets|init|inherit|null|selectors|right|body|all|makePath|register|link|content|String|addModule|parseInt|window|maxWidth|in|appVersion|uniqueID|height|Quote|DynamicRule|cache|se|fixWidth|_1|klass|catch|path|isHTML|quirksMode|encoder|ICommon|join|apply|HEADER|DUMMY|rules|href|httpRequest|getText|fixRight|top|fixed|_2|getFixedWidth|try|thisElement|ancestor|documentElement|loaded|getAttribute|instances|DynamicPseudoClass|ie7_anon|type|object|co|split|screen|ru|attributeSelectors|offsetWidth|setOverrideStyle|ParseMaster|exec|tagName|box|print|media|_3|alert|setTimeout|complete|switch|unregister|dynamicPseudoClasses|visited|parse|MATCH|tests|Function|getPixelValue|PERCENT|ex|_4|max|_5|addFix|hasLayout|marginTop|firstElementChild|disabled|value|size|font|load|safeString|_6|_7|delete|remove|100|PREFIX|StyleSheet|outerHTML|offsetLeft|offsetParent|absolute|isFixed|backgroundPositionX|getPath|border|boxSizing|min|fixedWidth|getPaddingWidth|fixes|Parser|self|styleSheet|st|modules|_8|x01|loadFile|class|_9|data|createElement|typeof|create|selector|decode|getString|url|COMPLEX|parseSelector|x22|nextElementSibling|_10|_11|_12|_13|parseFloat|autoLeft|pixelLeft|setExpression|Math|_14|BLANK_GIF|_15|_16|applyWidth|resizeWidth|getBorderWidth|getDefinedStyle|collapseMarginTop|_17|_18|_19|refresh|el|ca|getElementsByTagName|version|escapeChar|ancestorOf|_20|Error|htc|pngSrc|ANON|po|cs|addTimer|attr|concat|display|target|selectorText|first|regEscape|isMSIE|lang|parentNode|previousElementSibling|compareTagName|addResize|_21|getScreenLeft|marginLeft|positionLeft|_22|shiftLeft|screenLeft|_23|clipWidth|getBoundingClientRect|getOffsetLeft|bottom|setOffsetLeft|backgroundLeft|parentElement|backgroundImage|backgroundAttachment|Top|img|background|_24|clearCache|location|image|_25|_26|input|filter|Microsoft|sizing|resizeRight|_27|layoutWidth|_28|lastElementChild|clicked|submit|_29|Fix|_30|decoder|_31|parser|_32|gi|_33|styles|createStyleSheet|isXML|caching|_34|compareNamespace|getDocument|continue|links|error|callee|ignoreCase|_35|_36|ie7_debug|finally|description|readyState|js|ie7_class|toLowerCase|event|contains|active|_37|_38|hover|name|scriptlet|text|OBJECT|CONTENT|_39|canHaveChildren|dynamicPseudoClass|attach|CHILD|simple|after|before|UNKNOWN|createRule|B1|B2|_40|htmlFor|NS_IE|childElements|_41|scrollLeft|appendChild|Height|Width|Left|createTempElement|_42|onbeforeprint|replaceChild|_43|_44|B64|base64|indexOf|zoom|scale|opacity|DXImageTransform|progid|enabled|filters|Bottom|borderBox|spacing|margin|padding|applyHeight|0cm|verticalAlign|en|nextSibling|_45|title|_46|BUTTON|button|reset|onclick|clearInterval|PIXEL|removeEventHandler|pop|_47|_48|lastIndexOf|_49|_50|_51|_52|imports|trash|ie7_recalc|getInlineStyles|innerHTML|nodeType|ST|select|Array|_53|mimeType|Boolean|lastChild|firstChild|ES|_54|_55|_56|_57|_58|DE|status|scripts|search|onreadystatechange|addBehavior|quirks|0000|fA|da|srcElement|onmouseup|onmousedown|activeElement|onblur|onfocus|focus|onmouseleave|onmouseout|onmouseenter|onmouseover|insertAdjacentHTML|insertAdjacentElement|Number|inline|charAt|beforeEnd|after1|afterEnd|after0|afterBegin|before1|beforeBegin|before0|letter|line|child|level2|css|css2|static|clipHeight|marginRight|positionTop|default|center|clientLeft|removeChild|setOffsetTop|backgroundTop|repeat|no|backgroundRepeat|attachment|onafterprint|onload|Image|php|propertyName|onpropertychange|INPUT|crop|Alpha|png|trans|IE7_PNG_SUFFIX|sizingMethod|AlphaImageLoader|graphics|fixHeight|Right|cellSpacing|collapse|borderCollapse|IE7_BOX_MODEL|getMarginWidth|Margin|Padding|paddingRight|paddingLeft|last|0px|styleFloat|collapseMarginBottom|layout|removeNode|HTML|alt|onsubmit|form|click|textarea|label|abbr|pow|67em|h6|83em|h5|1em|h4|17em|h3|5em|h2|2em|h1|html4|setInterval|9999|rect|clip|block|px|onunload|detachEvent|attachEvent|onresize|x27|import|namespace|ma|bprint|bscreen|ball|write|item|innerText|getTextContent|scopeName|toUpperCase|ownerDocument|Document|XML|URL|xml|unknown|previousSibling|number|successfully|ie5|instanceOf|Object|common|caller|gif|blank|file|loading|responseText|200|send|GET|open|XMLHTTP|ActiveXObject|Msxml2|ScriptEngineMajorVersion|ms_|ie7_off|CSS1Compat|compatMode|MSIE|navigator|alpha'.split('|'),0,{}))
/WebSVN/templates/StandardNG/ie7/ie7-xml-extras.js
0,0 → 1,6
/*
IE7, version 0.9 (alpha) (2005-08-19)
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)
License: http://creativecommons.org/licenses/LGPL/2.1/
*/
function XMLHttpRequest(){var l=(ScriptEngineMajorVersion()>=5)?"Msxml2":"Microsoft";return new ActiveXObject(l+".XMLHTTP")};function DOMParser(){};DOMParser.prototype={toString:function(){return"[object DOMParser]"},parseFromString:function(s,c){var x=new ActiveXObject("Microsoft.XMLDOM");x.loadXML(s);return x},parseFromStream:new Function,baseURI:""};function XMLSerializer(){};XMLSerializer.prototype={toString:function(){return"[object XMLSerializer]"},serializeToString:function(r){return r.xml||r.outerHTML},serializeToStream:new Function};
/WebSVN/templates/StandardNG/ie7/blank.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/StandardNG/blame.tmpl
0,0 → 1,30
[websvn:projects_form]
<div id='projectSelectForm'>
[websvn:projects_select]
[websvn:projects_submit]
</div>
[websvn:projects_form]
<h2>[websvn:repname]</h2>
[websvn:curdirlinks]
<h2>[lang:BLAMEFOR] [websvn:rev]</h2>
[websvn-test:noaccess]
<h3 class='err'>[lang:NOACCESS]</h3>
[websvn-else]
<table class='blame'>
<tr>
<th>[lang:LINENO]</th>
<th>[lang:REV]</th>
<th>[lang:AUTHOR]</th>
<th>[lang:LINE]</th>
</tr>
 
[websvn-startlisting]
<tr>
<td>[websvn:lineno]</td>
<td>[websvn:revision]</td>
<td>[websvn:author]</td>
<td>[websvn:line]</td>
</tr>
[websvn-endlisting]
</table>
[websvn-endtest]
/WebSVN/templates/StandardNG/compare.tmpl
0,0 → 1,53
[websvn:projects_form]
<div id='projectSelectForm'>
[websvn:projects_select]
[websvn:projects_submit]
</div>
[websvn:projects_endform]
<h2>[websvn:repname]</h2>
[websvn-test:noaccess]
<h2 class='err'>[lang:NOACCESS]</h2>
[websvn-else]
[websvn:compare_form]
<p><label>[lang:COMPPATH] [websvn:compare_path1input]</label> <label>[lang:REV] [websvn:compare_rev1input]</label></p>
<p><label>[lang:COMPPATH] [websvn:compare_path2input]</label> <label>[lang:REV] [websvn:compare_rev2input]</label></p>
<p>[websvn:compare_submit]</p>
[websvn:compare_endform]
<hr />
[websvn-test:success]
<p>[lang:CONVFROM] <em>[websvn:path1] ([lang:REV] [websvn:rev1]</em> [lang:TO] <em>[websvn:path2] ([lang:REV] [websvn:rev2])</em></p>
[websvn-endtest]
[websvn-startlisting]
 
[websvn-test:info]
<p>[websvn:info]</p>
[websvn-endtest]
 
[websvn-test:newpath]
<div class='newpath'>
<h3>[websvn:newpath]</h3>
[websvn-endtest]
 
[websvn-test:difflines]
<div class='difflines'>
<code>[websvn:difflines]</code>
[websvn-endtest]
 
[websvn-test:diffclass]
<code class='[websvn:diffclass]'>[websvn:line]</code>
[websvn-endtest]
 
[websvn-test:enddifflines]
</div>
[websvn-endtest]
 
[websvn-test:endpath]
</div>
[websvn-endtest]
 
[websvn-test:properties]
<p>[lang:PROPCHANGES]</p>
[websvn-endtest]
 
[websvn-endlisting]
[websvn-endtest]
/WebSVN/templates/StandardNG/directory.tmpl
0,0 → 1,117
 
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h1>[websvn:repname]</h1>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn-test:restricted]
[websvn-else]
<p><b>[lang:PATH]:</b> [websvn:path]
<br><b>[lang:REV]:</b> [websvn:rev]
[websvn-test:goyoungestlink]
- [websvn:goyoungestlink]
[websvn-endtest]
<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date]
<br><b>[lang:LOGMSG]:</b><br>
[websvn:log]
<p>
[websvn-test:hidechanges]
<p>[websvn:showchangeslink]
[websvn-endtest]
[websvn-test:showchanges]
<p><b>[lang:CHANGES]:</b><br>
<p>[websvn:hidechangeslink]
<p>
<center>
<table border=1 class="bordered" cellpadding=4>
<tr>
<th><center><b>[lang:NEWFILES]</b></center></th>
<th><center><b>[lang:CHANGEDFILES]</b></center></th>
<th><center><b>[lang:DELETEDFILES]</b></center></th>
</tr>
<tr>
<td valign="top">
[websvn-test:newfilesbr]
[websvn:newfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
<td valign="top">
[websvn-test:changedfilesbr]
[websvn:changedfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
<td valign="top">
[websvn-test:deletedfilesbr]
[websvn:deletedfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
</tr>
</table>
</center>
[websvn-endtest]
[websvn-endtest]
[websvn-defineicons]
dir=&nbsp;&nbsp;&nbsp;&nbsp;
diropen=&nbsp;&nbsp;&nbsp;&nbsp;
i-node=&nbsp;&nbsp;&nbsp;&nbsp;
t-node=&nbsp;&nbsp;&nbsp;&nbsp;
l-node=&nbsp;&nbsp;&nbsp;&nbsp;
e-node=&nbsp;&nbsp;&nbsp;&nbsp;
*=&nbsp;&nbsp;&nbsp;&nbsp;
[websvn-enddefineicons]
<p><hr>
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink]
[websvn-test:curdircomplink]
- [websvn:curdircomplink]
[websvn-endtest]
[websvn-test:curdirdllink]
- [websvn:curdirdllink]
[websvn-endtest]
[websvn-test:curdirrsslink]
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a>
[websvn-endtest]
<p>
[websvn:compare_form]
<table class="outlined" width="100%" cellpadding=2>
<tr>
<th width="100%"><b>[lang:PATH]</b></th>
<th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
[websvn-test:allowdownload]
<th><b>[lang:TARBALL]</b></th>
[websvn-endtest]
[websvn-test:curdirrsslink]
<th><b>[lang:RSSFEED]</b></th>
[websvn-endtest]
</tr>
[websvn-startlisting]
<tr>
<td class="[websvn:rowparity]">
[websvn:compare_box]
[websvn-treenode]
[websvn:filelink]
</td>
<td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
[websvn-test:allowdownload]
<td class="[websvn:rowparity]">[websvn:fileviewdllink]</td>
[websvn-endtest]
[websvn-test:curdirrsslink]
<td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
[websvn-endtest]
</tr>
[websvn-endlisting]
</table>
<p>
[websvn:compare_submit]
[websvn:compare_endform]
[websvn-endtest]
/WebSVN/templates/StandardNG/file.tmpl
0,0 → 1,18
 
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname]</h2>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn:curdirlinks] - [lang:REV] [websvn:rev]<p>
[websvn-test:goyoungestlink]
[websvn:goyoungestlink]<p>
[websvn-endtest]
[websvn:prevdifflink] - [websvn:blamelink]
<p>
<table width="100%" border=0><tr><td>
[websvn-getlisting]
</td></tr></table>
[websvn-endtest]
/WebSVN/templates/StandardNG/footer.tmpl
0,0 → 1,3
<p id='footer'>[lang:POWERED] v[websvn:version]</p>
</body>
</html>
/WebSVN/templates/StandardNG/header.tmpl
0,0 → 1,79
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<link rel='stylesheet' type='text/css' media='screen' href='[websvn:locwebsvnhttp]/templates/StandardNG/styles.css' />
<script type='application/javascript' src='[websvn:locwebsvnhttp]/templates/Standard/collapse.js'></script>
<script type='application/javascript'>
<![CDATA[
function checkCB(chBox) {
count = 0;
first = null;
f = chBox.form;
for (i = 0; i < f.elements.length; i++) {
if (f.elements[i].type == 'checkbox' && f.elements[i].checked) {
if (first == null && f.elements[i] != chBox) {
first = f.elements[i];
}
count++;
}
 
if (count > 2) {
first.checked = false;
count--;
}
 
[websvn-test:opentree]
expandonload = true;
[websvn-endtest]
}
}
]]>
</script>
 
<title>
WebSVN
[websvn-test:repname]
- [websvn:repname]
[websvn-endtest]
[websvn-test:action]
- [websvn:action]
[websvn-endtest]
[websvn-test:rev2]
[websvn-test:path2]
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2]
[websvn-else]
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
[websvn-endtest]
[websvn-else]
[websvn-test:rev]
- [lang:REV] [websvn:rev]
[websvn-endtest]
[websvn-endtest]
[websvn-test:path]
- [websvn:safepath]
[websvn-endtest]
</title>
 
[websvn-test:curdirrsslink]
<link rel='alternate' type='application/rss+xml' title='WebSVN RSS' href='[websvn:curdirrsshref]' />
[websvn-endtest]
 
<!--[if IE]>
<script type='text/javascript' src='[websvn:locwebsvnhttp]/templates/StandardNG/ie7/ie7-standard-p.js'></script>
<[end if]-->
 
</head>
<body>
<div id='header'>
<h1>[lang:SERVER]</h1>
<div id='formSelect'>
[websvn:lang_form]
[websvn:lang_select]
[websvn:lang_submit]
[websvn:lang_endform]
</div>
</div>
 
<hr />
<!-- end of header.tmpl -->
/WebSVN/templates/StandardNG/index.tmpl
0,0 → 1,20
<!-- beginning of index.tmpl -->
<h2>[lang:PROJECTS]:</h2>
[websvn-test:flatview]
<ul id='projectListing'>
[websvn-startlisting]
<li>[websvn:projlink]</li>
[websvn-endlisting]
</ul>
[websvn-else]
[websvn-startlisting]
[websvn-test:isprojlink]
<div class='projectGroup'>
[websvn:listitem]
</div>
[websvn-else]
[websvn:listitem]
[websvn-endtest]
[websvn-endlisting]
[websvn-endtest]
<!-- end of index.tmpl -->
/WebSVN/templates/StandardNG/log.tmpl
0,0 → 1,64
 
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
<h2>[websvn:repname] - [lang:REV] [websvn:rev]</h2>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn:curdirlinks]<p>
[websvn-test:goyoungestlink]
[websvn:goyoungestlink]<p>
[websvn-endtest]
<center>
[websvn:logsearch_form]
<b>[lang:FILTER]</b><p>
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox]
[websvn:logsearch_submit]
[websvn-test:logsearch_clearloglink]
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p>
[websvn-endtest]
[websvn:logsearch_endform]
</center>
[websvn-test:logsearch_nomatches]
<center>[lang:NORESULTS]</center>
[websvn-endtest]
[websvn-test:error]
<center>[websvn:error]</center>
[websvn-endtest]
 
[websvn-test:logsearch_resultsfound]
[websvn:compare_form]
<table border=1 class="outlined" width="100%" cellpadding=2>
<tr>
<th>[lang:REV]</th>
<th>[lang:PATH]</th>
<th>[lang:AUTHOR]</th>
<th>[lang:AGE]</th>
<th>[lang:LOGMSG]</th>
</tr>
[websvn-startlisting]
<tr>
<td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td>
<td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revage]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td>
</tr>
[websvn-endlisting]
</table>
<p>
[websvn:compare_submit]
[websvn:compare_endform]
[websvn-endtest]
[websvn-test:logsearch_nomorematches]
<p><center>[lang:NOMORERESULTS]</center>
[websvn-endtest]
<p><center>[websvn:logsearch_moreresultslink]</center>
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
[websvn-endtest]
/WebSVN/templates/StandardNG/styles.css
0,0 → 1,93
body
{
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif;
background-color: white;
margin: 20px;
padding: 0px
}
 
h1
{
color: #99007E;
font-size: 30px;
font-weight: normal;
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif;
text-decoration: none;
}
 
hr { color: #99007E; background-color: #99007E }
 
.highlight { color: #99007E; font-style: italic; }
 
table.bordered, table.outlined, table.blame
{
border-collapse: collapse;
border: solid 2px #99007E;
}
 
.bordered td, .bordered th
{
border: solid 2px #99007E;
}
 
.outlined td
{
padding: 0px 5px 0px 5px;
}
 
.outlined th, .blame th
{
padding: 5px 5px 5px 5px;
font-weight: bold;
border: solid 2px #99007E;
}
 
.outlined td, .blame td
{
padding: 1px 5px 1px 5px;
border-right: solid 2px #99007E;
border-bottom: solid 1px #F0F0F0;
}
 
td.diffdeleted
{
font-size: 11px;
background-color: red;
}
 
td.diffchanged
{
font-size: 11px;
background-color: yellow;
}
 
td.diffadded
{
font-size: 11px;
background-color: green;
}
 
td.diff
{
font-size: 11px;
background-color: #D0D0D0;
}
 
table.diff
{
border-collapse: collapse;
}
 
div.newpath
{
padding: 5px 5px 5px 5px;
border: solid 2px #99007E;
}
 
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #D0D0D0; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #99007E; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
 
.groupname { padding-left: 0px; text-indent: -25px; margin: 3px 0 3px 0;}
.switchcontent { margin: 3px 0 0 20px; }
 
code { white-space: pre-wrap; }
/WebSVN/templates/StandardNG/xml.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/WebSVN/templates/Zinn/blame.tmpl
0,0 → 1,36
<table width="100%" border="0">
<tr>
<td>
<h1>[websvn:repname]</h1>
</td>
<td>
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn:curdirlinks] - [lang:BLAMEFOR] [websvn:rev]
<p>
<table border="1" class="blame" width="100%" cellpadding="2">
<tr>
<th style="padding-bottom: 5px" align="left"><b>[lang:LINENO]</b></th>
<th style="padding-bottom: 5px" align="left"><b>[lang:REV]</b></th>
<th style="padding-bottom: 5px" align="left"><b>[lang:AUTHOR]</b></th>
<th style="padding-bottom: 5px" align="left"><b>[lang:LINE]</b></th>
</tr>
[websvn-startlisting]
<tr>
<td>[websvn:lineno]</td>
<td>[websvn:revision]</td>
<td>[websvn:author]</td>
<td>[websvn:line]</td>
</tr>
[websvn-endlisting]
</table>
[websvn-endtest]
/WebSVN/templates/Zinn/collapse.js
0,0 → 1,169
/***********************************************
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use. Last updated April 2nd, 2005.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
 
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off)
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no)
 
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif">
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol.
var expandonload=false
 
if (document.getElementById)
{
document.write('<style type="text/css">')
document.write('.switchcontent{display:none;}')
document.write('</style>')
}
 
function getElementbyClass(rootobj, classname)
{
var temparray=new Array()
var inc=0
for (i=0; i<rootobj.length; i++)
{
if (rootobj[i].className==classname)
temparray[inc++]=rootobj[i]
}
return temparray
}
 
function sweeptoggle(ec)
{
var thestate=(ec=="expand")? "block" : "none"
var inc=0
while (ccollect[inc])
{
ccollect[inc].style.display=thestate
inc++
}
revivestatus()
collapseprevious = (ec=="expand")? "no" : "yes"
}
 
 
function contractcontent(omit)
{
var inc=0
while (ccollect[inc])
{
if (ccollect[inc].id!=omit)
ccollect[inc].style.display="none"
inc++
}
}
 
function expandcontent(curobj, cid)
{
var spantags=curobj.getElementsByTagName("SPAN")
var showstateobj=getElementbyClass(spantags, "showstate")
if (ccollect.length>0)
{
if (collapseprevious=="yes")
contractcontent(cid)
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none"
if (showstateobj.length>0) //if "showstate" span exists in header
{
if (collapseprevious=="no")
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol
else
revivestatus()
}
}
}
 
function revivecontent()
{
contractcontent("omitnothing")
selectedItem=getselectedItem()
selectedComponents=selectedItem.split("|")
collapseprevious=selectedComponents[0]
for (i=1; i<selectedComponents.length-1; i++)
document.getElementById(selectedComponents[i]).style.display="block"
}
 
function revivestatus()
{
var inc=0
while (statecollect[inc])
{
if (ccollect[inc].style.display=="block")
statecollect[inc].innerHTML=contractsymbol
else
statecollect[inc].innerHTML=expandsymbol
inc++
}
}
 
function get_cookie(Name)
{
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0)
{
offset = document.cookie.indexOf(search)
if (offset != -1)
{
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
 
function getselectedItem()
{
if (get_cookie(window.location.pathname) != "")
{
selectedItem=get_cookie(window.location.pathname)
return selectedItem
}
else
return ""
}
 
function saveswitchstate()
{
var inc=0, selectedItem=collapseprevious+"|"
while (ccollect[inc])
{
if (ccollect[inc].style.display=="block")
selectedItem+=ccollect[inc].id+"|"
inc++
}
document.cookie=window.location.pathname+"="+selectedItem
}
 
function do_onload()
{
uniqueidn=window.location.pathname+"firsttimeload"
var alltags=document.all? document.all : document.getElementsByTagName("*")
ccollect=getElementbyClass(alltags, "switchcontent")
statecollect=getElementbyClass(alltags, "showstate")
if (enablepersist=="on" && ccollect.length>0)
{
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0"
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load
if (!firsttimeload)
revivecontent()
}
if (ccollect.length>0 && statecollect.length>0)
revivestatus()
if (expandonload)
sweeptoggle('expand')
}
 
if (window.addEventListener)
window.addEventListener("load", do_onload, false)
else if (window.attachEvent)
window.attachEvent("onload", do_onload)
else if (document.getElementById)
window.onload=do_onload
 
if (enablepersist=="on" && document.getElementById)
window.onunload=saveswitchstate
/WebSVN/templates/Zinn/compare.tmpl
0,0 → 1,75
<table width="100%" border="0">
<tr>
<td>
<h1>[websvn:repname]</h1>
</td>
<td>
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<center>
[websvn:compare_form]
<table>
<tr><td>
<table class="outlined">
<tr><td>[lang:COMPPATH]&nbsp;</td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr>
<tr><td>[lang:WITHPATH]&nbsp;</td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr>
</table>
</td><tr>
<tr><td align="center">[websvn:compare_submit]</td></tr>
</table>
[websvn:compare_endform]
<hr>
</center>
<p>
[websvn-test:success]
[lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b>
<p>
[websvn:revlink]
[websvn-endtest]
<p>
[websvn-startlisting]
[websvn-test:newpath]
<p>
<div class="newpath">
<b>[websvn:newpath]</b><br>
[websvn-endtest]
[websvn-test:info]
[websvn:info]<br>
[websvn-endtest]
[websvn-test:difflines]
<div class="difflines">
<p>
[websvn:difflines]<br>
<table class="diff" cellspacing="0">
[websvn-endtest]
[websvn-test:diffclass]
<tr><td class="[websvn:diffclass]">[websvn:line]</td></tr>
[websvn-endtest]
[websvn-test:enddifflines]
</table>
</div>
[websvn-endtest]
[websvn-test:endpath]
</div>
<p><hr>
[websvn-endtest]
[websvn-test:properties]
<p><i>[lang:PROPCHANGES]</i><p>
[websvn-endtest]
[websvn-endlisting]
</table>
[websvn-endtest]
/WebSVN/templates/Zinn/diff.tmpl
0,0 → 1,51
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn-test:noprev]
[lang:NOPREVREV]
[websvn-else]
<table width="100%" border="0">
<tr>
<td>
<h1>[websvn:repname]</h1>
</td>
<td>
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
</td>
</tr>
</table>
<b>[lang:PATH]:</b> [websvn:path]
<br><b>[lang:REV]:</b> [websvn:rev]
<p><hr>
<b>[lang:CURDIR]:</b> [websvn:curdirlinks]
<p>
<p><center>
[websvn:showcompactlink]
[websvn:showalllink]
</center>
<p>
<table class="diff" width="100%">
<tr>
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th>
<th width="5"></th>
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th>
</tr>
[websvn-startlisting]
[websvn-test:rev1lineno]
<tr>
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td>
<td width="5"></td>
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td>
<tr>
[websvn-else]
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td>
<td width="5"></td>
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr>
[websvn-endtest]
[websvn-endlisting]
</table>
[websvn-endtest]
[websvn-endtest]
/WebSVN/templates/Zinn/directory.tmpl
0,0 → 1,125
<table width="100%" border="0">
<tr>
<td>
<h1>[websvn:repname]</h1>
</td>
<td>
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
[websvn-test:restricted]
[websvn-else]
<b>[lang:PATH]:</b> [websvn:path]
<br><b>[lang:REV]:</b> [websvn:rev]
<p><hr>
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink]
[websvn-test:curdircomplink]
- [websvn:curdircomplink]
[websvn-endtest]
[websvn-test:curdirdllink]
- [websvn:curdirdllink]
[websvn-endtest]
[websvn-test:curdirrsslink]
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a>
[websvn-endtest]
[websvn-endtest]
[websvn-defineicons]
dir=&nbsp;&nbsp;&nbsp;&nbsp;
diropen=&nbsp;&nbsp;&nbsp;&nbsp;
i-node=&nbsp;&nbsp;&nbsp;&nbsp;
t-node=&nbsp;&nbsp;&nbsp;&nbsp;
l-node=&nbsp;&nbsp;&nbsp;&nbsp;
e-node=&nbsp;&nbsp;&nbsp;&nbsp;
*=&nbsp;&nbsp;&nbsp;&nbsp;
[websvn-enddefineicons]
<p>
[websvn:compare_form]
<table class="outlined" width="100%" cellpadding="2">
<tr>
<th width="100%"><b>Path</b></th>
<th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th>
[websvn-test:allowdownload]
<th><b>[lang:TARBALL]</b></th>
[websvn-endtest]
[websvn-test:curdirrsslink]
<th><b>[lang:RSSFEED]</b></th>
[websvn-endtest]
</tr>
[websvn-startlisting]
<tr>
<td class="[websvn:rowparity]">
[websvn:compare_box]
[websvn-treenode]
[websvn:filelink]
</td>
<td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td>
[websvn-test:allowdownload]
<td class="[websvn:rowparity]">[websvn:fileviewdllink]</td>
[websvn-endtest]
[websvn-test:curdirrsslink]
<td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td>
[websvn-endtest]
</tr>
[websvn-endlisting]
</table>
<p>
[websvn:compare_submit]
[websvn:compare_endform]
<hr>
[websvn-test:goyoungestlink]
- [websvn:goyoungestlink]
[websvn-endtest]
<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date]
<br><b>[lang:LOGMSG]:</b><br>
[websvn:log]
<p>
[websvn-test:hidechanges]
<p>[websvn:showchangeslink]
[websvn-endtest]
[websvn-test:showchanges]
<p><b>[lang:CHANGES]:</b><br>
<p>[websvn:hidechangeslink]
<p>
<center>
<table border=1 class="bordered" cellpadding=4>
<tr>
<th><center><b>[lang:NEWFILES]</b></center></th>
<th><center><b>[lang:CHANGEDFILES]</b></center></th>
<th><center><b>[lang:DELETEDFILES]</b></center></th>
</tr>
<tr>
<td valign="top">
[websvn-test:newfilesbr]
[websvn:newfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
<td valign="top">
[websvn-test:changedfilesbr]
[websvn:changedfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
<td valign="top">
[websvn-test:deletedfilesbr]
[websvn:deletedfilesbr]
[websvn-else]
&nbsp;
[websvn-endtest]
</td>
</tr>
</table>
</center>
[websvn-endtest]
[websvn-endtest]
 
/WebSVN/templates/Zinn/file.tmpl
0,0 → 1,30
<table width="100%" border="0">
<tr>
<td>
<h1>[websvn:repname]</h1>
</td>
<td>
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<b>[lang:PATH]:</b> [websvn:path]
<br><b>[lang:REV]:</b> [websvn:rev]
<p><hr>
<b>[lang:CURDIR]:</b> [websvn:curdirlinks]
<p>
[websvn-test:goyoungestlink]
[websvn:goyoungestlink]<p>
[websvn-endtest]
[websvn:prevdifflink] - [websvn:blamelink]
<p>
<table width="100%" border=1><tr><td>
[websvn-getlisting]
</td></tr></table>
[websvn-endtest]
/WebSVN/templates/Zinn/footer.tmpl
0,0 → 1,2
</body>
</html>
/WebSVN/templates/Zinn/header.tmpl
0,0 → 1,64
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=[websvn:charset]">
<link href="[websvn:locwebsvnhttp]/templates/zinn/styles.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/Zinn/collapse.js"></script>
<script type="text/javascript">
function checkCB(chBox)
{
count = 0
first = null
f = chBox.form
for (i = 0 ; i < f.elements.length ; i++)
if (f.elements[i].type == 'checkbox' && f.elements[i].checked)
{
if (first == null && f.elements[i] != chBox)
first = f.elements[i]
count += 1
}
if (count > 2)
{
first.checked = false
count -= 1
}
}
 
[websvn-test:opentree]
expandonload = true
[websvn-endtest]
 
</script>
<title>
WebSVN
[websvn-test:repname]
- [websvn:repname]
[websvn-endtest]
[websvn-test:action]
- [websvn:action]
[websvn-endtest]
[websvn-test:rev2]
[websvn-test:path2]
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2]
[websvn-else]
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2]
[websvn-endtest]
[websvn-else]
[websvn-test:rev]
- [lang:REV] [websvn:rev]
[websvn-endtest]
[websvn-endtest]
[websvn-test:path]
- [websvn:safepath]
[websvn-endtest]
</title>
 
[websvn-test:curdirrsslink]
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:curdirrsshref]">
[websvn-endtest]
 
</head>
<body>
<div style="float: right">[websvn:lang_form][websvn:lang_select][websvn:lang_submit][websvn:lang_endform]</div>
</tr>
</table>
/WebSVN/templates/Zinn/index.tmpl
0,0 → 1,34
[websvn-test:flatview]
<table border=0 cellspacing=0 cellpadding=0 align="center">
<tr>
<td align="center">
<br><h1>[lang:PROJECTS]:</h1>
<p><hr><p>
<table width="100%" class="outlined" cellpadding="2">
[websvn-startlisting]
<tr><td>[websvn:projlink]</td></tr>
[websvn-endlisting]
</table>
</td>
</tr>
</table>
[websvn-else]
<table border=0 cellspacing=0 cellpadding=0 align="center">
<tr>
<td align="center">
<br><h2>[lang:PROJECTS]:</h2>
<table border=0>
<tr><td>
[websvn-startlisting]
[websvn-test:isprojlink]
<div>[websvn:listitem]</div>
[websvn-else]
[websvn:listitem]
[websvn-endtest]
[websvn-endlisting]
</td></tr>
</table>
</td>
</tr>
</table>
[websvn-endtest]
/WebSVN/templates/Zinn/log.tmpl
0,0 → 1,74
<table width="100%" border="0">
<tr>
<td>
<h1>[websvn:repname]</h1>
</td>
<td>
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div>
</td>
</tr>
</table>
 
[websvn-test:noaccess]
[lang:NOACCESS]
[websvn-else]
<b>[lang:PATH]:</b> [websvn:path]
<br><b>[lang:REV]:</b> [websvn:rev]
<p><hr>
<b>[lang:CURDIR]:</b> [websvn:curdirlinks]<br><br>
[websvn-test:goyoungestlink]
[websvn:goyoungestlink]<p>
[websvn-endtest]
<center>
[websvn:logsearch_form]
<b>[lang:FILTER]</b><p>
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox]
[websvn:logsearch_submit]
[websvn-test:logsearch_clearloglink]
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p>
[websvn-endtest]
[websvn:logsearch_endform]
</center>
[websvn-test:logsearch_nomatches]
<center>[lang:NORESULTS]</center>
[websvn-endtest]
[websvn-test:error]
<center>[websvn:error]</center>
[websvn-endtest]
 
[websvn-test:logsearch_resultsfound]
[websvn:compare_form]
<table border=1 class="outlined" width="100%" cellpadding=2>
<tr>
<th>[lang:REV]</th>
<th>[lang:PATH]</th>
<th>[lang:AUTHOR]</th>
<th>[lang:AGE]</th>
<th>[lang:LOGMSG]</th>
</tr>
[websvn-startlisting]
<tr>
<td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td>
<td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revage]</td>
<td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td>
</tr>
[websvn-endlisting]
</table>
<p>
[websvn:compare_submit]
[websvn:compare_endform]
[websvn-endtest]
[websvn-test:logsearch_nomorematches]
<p><center>[lang:NOMORERESULTS]</center>
[websvn-endtest]
<p><center>[websvn:logsearch_moreresultslink]</center>
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center>
[websvn-endtest]
/WebSVN/templates/Zinn/styles.css
0,0 → 1,107
 
body
{
font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular;
background-color: white;
margin: 20px;
padding: 0px;
font-size: 76%;
}
 
H1
{
color: #8c0000;
font-size: 30px;
font-weight: normal;
font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular;
text-decoration: none;
}
 
a:link { color: black;
font-size: 76%;
}
a:visited { color: black;
font-size: 76%;
}
 
HR { color: #8c0000; background-color: #8c0000 }
 
.highlight { color: #8c0000; font-style: italic; }
 
TABLE.bordered, TABLE.outlined, TABLE.blame
{
border-collapse: collapse;
border: solid 2px #8c0000;
}
 
.bordered TD, .bordered TH
{
border: solid 2px #8c0000;
}
 
.outlined TH, .blame TH
{
padding: 5px 5px 5px 5px;
font-weight: bold;
border: solid 2px #8c0000;
}
 
.outlined TD, .blame TD
{
padding: 1px 5px 1px 5px;
border-right: solid 2px #8c0000;
border-bottom: solid 1px #F0F0F0;
}
 
.blame TD
{
font-size: 11px;
}
 
.blame TD A
{
font-size: 100%;
}
 
TD.diffdeleted
{
font-size: 11px;
background-color: red;
}
 
TD.diffchanged
{
font-size: 11px;
background-color: yellow;
}
 
TD.diffadded
{
font-size: 11px;
background-color: green;
}
 
TD.diff
{
font-size: 11px;
background-color: #D0D0D0;
}
 
TABLE.diff
{
border-collapse: collapse;
}
 
DIV.newpath
{
padding: 5px 5px 5px 5px;
border: solid 2px #8c0000;
}
 
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #8c0000; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; }
 
.groupname { padding-left: 0px; text-indent: -25px; margin: 8px 0 3px 0;}
.switchcontent { margin: 3px 0 0 20px; }
 
code { white-space: pre-wrap; }
/WebSVN/languages/czech.php
File deleted
/WebSVN/languages/english.php
File deleted
/WebSVN/languages/czech.inc
0,0 → 1,125
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// czech.inc
//
// Czech language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Česky";
// This is the RFC 2616 (§3.10) language tag that corresponds to this translation
// see also RFC 4646
$lang['LANGUAGETAG'] = 'cs';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "Není určen žádný repozitář";
$lang["NOPATH"] = "Cesta nebyla nalezena";
$lang["NOACCESS"] = "Nemáte dostatečná přístupová práva pro čtení adresáře";
$lang["RESTRICTED"] = "Omezený přístup";
$lang["SUPPLYREP"] = "Nastavte prosím cestu k repozitáři v include/config.inc pomocí \$config->parentPath nebo \$config->addRepository<p>Podívejte se do insatlační příručky pro podrobnější informace";
 
$lang["DIFFREVS"] = "Rozdíly mezi revizemi";
$lang["AND"] = "a";
$lang["REV"] = "Revize";
$lang["LINE"] = "Line";
$lang["SHOWENTIREFILE"] = "Zobraz celý soubor";
$lang["SHOWCOMPACT"] = "Zobraz pouze rozdílné části";
 
$lang["DIFFPREV"] = "Porovnej s předchozí";
$lang["BLAME"] = "Blame";
 
$lang["REVINFO"] = "Informace o revizi";
$lang["GOYOUNGEST"] = "Přejdi na současnou revizi";
$lang["LASTMOD"] = "Poslední změna";
$lang["LOGMSG"] = "Záznam";
$lang["CHANGES"] = "Změny";
$lang["SHOWCHANGED"] = "Zobraz změněné soubory";
$lang["HIDECHANGED"] = "Schovej změněné soubory";
$lang["NEWFILES"] = "Nové soubory";
$lang["CHANGEDFILES"] = "Změněné soubory";
$lang["DELETEDFILES"] = "Smazané soubory";
$lang["VIEWLOG"] = "Ukaž";
$lang["PATH"] = "Cesta";
$lang["AUTHOR"] = "Autor";
$lang["AGE"] = "Stáří";
$lang["LOG"] = "Deník";
$lang["CURDIR"] = "Aktuální adresář";
$lang["TARBALL"] = "Zip";
 
$lang["PREV"] = "Předchozí";
$lang["NEXT"] = "Následující";
$lang["SHOWALL"] = "Ukaž všechny";
 
$lang["BADCMD"] = "Nepodařilo se spustit tento příkaz";
$lang["UNKNOWNREVISION"] = "Revize nebyla nalezena";
 
$lang["POWERED"] = "Poháněno <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Repozitáře";
$lang["SERVER"] = "Subversion&nbsp;Servery";
 
$lang["FILTER"] = "Nastavení filtrování";
$lang["STARTLOG"] = "Od revize";
$lang["ENDLOG"] = "Do revize";
$lang["MAXLOG"] = "Max revizí";
$lang["SEARCHLOG"] = "Hledat";
$lang["CLEARLOG"] = "Zruš aktuální filtr";
$lang["MORERESULTS"] = "Najdi další...";
$lang["NORESULTS"] = "Nejsou tu žádné zázanmy odpovídající vašim požadavkům";
$lang["NOMORERESULTS"] = "Nejsou tu žádné další záznamy odpovídající vašim požadavkům";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "soubor(y) změněn(y)";
$lang["RSSFEED"] = "RSS";
 
$lang["LINENO"] = "Číslo řádky";
$lang["BLAMEFOR"] = "Blame information for rev";
 
$lang["DAYLETTER"] = "d";
$lang["HOURLETTER"] = "h";
$lang["MINUTELETTER"] = "m";
$lang["SECONDLETTER"] = "s";
 
$lang["GO"] = "Go";
 
$lang["PATHCOMPARISON"] = "Porovnání cest";
$lang["COMPAREPATHS"] = "Porovnej cesty";
$lang["COMPAREREVS"] = "Porovnej revize";
$lang["PROPCHANGES"] = "Změněné vlastnosti:";
$lang["CONVFROM"] = "Toto porovnání ukazuje změny pro převedení";
$lang["TO"] = "na";
$lang["REVCOMP"] = "Reverzní porovnání";
$lang["COMPPATH"] = "Porovnej cestu:";
$lang["WITHPATH"] = "S umístěním:";
$lang["FILEDELETED"] = "Soubor smazán";
$lang["FILEADDED"] = "Nový soubor";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
 
$lang["GETFILE"] = "Stáhnout jako soubor";
/WebSVN/languages/english.inc
0,0 → 1,126
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// english.inc
//
// English language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "English";
// This is the RFC 2616 (§3.10) language tag that corresponds to this translation
// see also RFC 4646
$lang['LANGUAGETAG'] = 'en';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "No repository given";
$lang["NOPATH"] = "Path not found";
$lang["NOACCESS"] = "You do not have the necessary permissions to read this directory";
$lang["RESTRICTED"] = "Restricted access";
$lang["SUPPLYREP"] = "Please set up a repository path in include/config.inc using \$config->parentPath or \$config->addRepository<p>See the installation guide for more details";
 
$lang["DIFFREVS"] = "Diff between revs";
$lang["AND"] = "and";
$lang["REV"] = "Rev";
$lang["LINE"] = "Line";
$lang["SHOWENTIREFILE"] = "Show entire file";
$lang["SHOWCOMPACT"] = "Only display areas with differences";
 
$lang["DIFFPREV"] = "Compare with Previous";
$lang["BLAME"] = "Blame";
 
$lang["REVINFO"] = "Revision Information";
$lang["GOYOUNGEST"] = "Go to most recent revision";
$lang["LASTMOD"] = "Last modification";
$lang["LOGMSG"] = "Log message";
$lang["CHANGES"] = "Changes";
$lang["SHOWCHANGED"] = "Show changed files";
$lang["HIDECHANGED"] = "Hide changed files";
$lang["NEWFILES"] = "New Files";
$lang["CHANGEDFILES"] = "Modified files";
$lang["DELETEDFILES"] = "Deleted files";
$lang["VIEWLOG"] = "View&nbsp;Log";
$lang["PATH"] = "Path";
$lang["AUTHOR"] = "Author";
$lang["AGE"] = "Age";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "Current Directory";
$lang["TARBALL"] = "Zip";
 
$lang["PREV"] = "Prev";
$lang["NEXT"] = "Next";
$lang["SHOWALL"] = "Show All";
 
$lang["BADCMD"] = "Error running this command";
$lang["UNKNOWNREVISION"] = "Revision not found";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Repositories";
$lang["SERVER"] = "Subversion&nbsp;Server";
 
$lang["FILTER"] = "Filtering Options";
$lang["STARTLOG"] = "From rev";
$lang["ENDLOG"] = "To rev";
$lang["MAXLOG"] = "Max revs";
$lang["SEARCHLOG"] = "Search for";
$lang["CLEARLOG"] = "Clear current filter";
$lang["MORERESULTS"] = "Find more matches...";
$lang["NORESULTS"] = "There are no logs matching your query";
$lang["NOMORERESULTS"] = "There are no more logs matching your query";
$lang['NOPREVREV'] = 'No previous revision';
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "file(s) modified";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "Line No.";
$lang["BLAMEFOR"] = "Blame information for rev";
 
$lang["DAYLETTER"] = "d";
$lang["HOURLETTER"] = "h";
$lang["MINUTELETTER"] = "m";
$lang["SECONDLETTER"] = "s";
 
$lang["GO"] = "Go";
 
$lang["PATHCOMPARISON"] = "Path Comparison";
$lang["COMPAREPATHS"] = "Compare Paths";
$lang["COMPAREREVS"] = "Compare Revisions";
$lang["PROPCHANGES"] = "Property changes :";
$lang["CONVFROM"] = "This comparison shows the changes necessary to convert path ";
$lang["TO"] = "TO";
$lang["REVCOMP"] = "Reverse comparison";
$lang["COMPPATH"] = "Compare Path:";
$lang["WITHPATH"] = "With Path:";
$lang["FILEDELETED"] = "File deleted";
$lang["FILEADDED"] = "New file";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
 
$lang["GETFILE"] = "Get as a File";
/WebSVN/languages/NotUsed/catalan.inc
0,0 → 1,122
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// catalan.inc
//
// Catalan language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Català-Valencià";
$lang['LANGUAGETAG'] = 'ca';
 
$lang["LOG"] = "Registre";
$lang["DIFF"] = "Diferència";
 
$lang["NOREP"] = "No s'ha proporcionat cap dipòsit";
$lang["NOPATH"] = "No s'ha trobat cap camí";
$lang["NOACCESS"] = "No teniu els permisos necessaris per a llegir aquest directori";
$lang["RESTRICTED"] = "Accés restringit";
$lang["SUPPLYREP"] = "Definiu un camí per al dipòsit a include/config.inc utilitzant \$config->parentPath o \$config->addRepository<p>Vegeu la guia d'instal·lació per a més detalls";
 
$lang["DIFFREVS"] = "Diferències entre revisions";
$lang["AND"] = "i";
$lang["REV"] = "Revisió";
$lang["LINE"] = "Línia";
$lang["SHOWENTIREFILE"] = "Mostra el fitxer sencer";
$lang["SHOWCOMPACT"] = "Mostra només les àrees amb diferències";
 
$lang["DIFFPREV"] = "Compara amb l'anterior";
$lang["BLAME"] = "Culpa";
 
$lang["REVINFO"] = "Informació de la revisió";
$lang["GOYOUNGEST"] = "Vés a la revisió més recent";
$lang["LASTMOD"] = "Darrera modificació";
$lang["LOGMSG"] = "Missatge de registre";
$lang["CHANGES"] = "Canvis";
$lang["SHOWCHANGED"] = "Mostra els fitxers canviats";
$lang["HIDECHANGED"] = "Amaga els fitxers canviats";
$lang["NEWFILES"] = "Nous fitxers";
$lang["CHANGEDFILES"] = "Fitxers modificats";
$lang["DELETEDFILES"] = "Fitxers suprimits";
$lang["VIEWLOG"] = "Visualitza&nbsp;el&nbsp;registre";
$lang["PATH"] = "Camí";
$lang["AUTHOR"] = "Autor";
$lang["AGE"] = "Edat";
$lang["LOG"] = "Registre";
$lang["CURDIR"] = "Directori actual";
$lang["TARBALL"] = "Arxiu tar";
 
$lang["PREV"] = "Anterior";
$lang["NEXT"] = "Següent";
$lang["SHOWALL"] = "Mostra-ho tot";
 
$lang["BADCMD"] = "S'ha produït un error en exectuar aquesta ordre";
$lang["UNKNOWNREVISION"] = "No s'ha trobat la revisió";
 
$lang["POWERED"] = "Funciona amb <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Dipòsits&nbsp;de&nbsp;Subversion";
$lang["SERVER"] = "Servidor&nbsp;de&nbsp;Subversion";
 
$lang["FILTER"] = "Opcions de filtratge";
$lang["STARTLOG"] = "Des de la revisió";
$lang["ENDLOG"] = "A la revisió";
$lang["MAXLOG"] = "Màximes revisions";
$lang["SEARCHLOG"] = "Cerca";
$lang["CLEARLOG"] = "Neteja el filtre actual";
$lang["MORERESULTS"] = "Cerca més coincidències...";
$lang["NORESULTS"] = "No hi ha cap registre que coincideixi amb la vostra cerca";
$lang["NOMORERESULTS"] = "No hi ha més registres que coincideixin amb la vostra cerca";
$lang['NOPREVREV'] = 'No hi ha cap revisió anterior.';
 
$lang["RSSFEEDTITLE"] = "Canal RSS del WebSVN";
$lang["FILESMODIFIED"] = "fitxer(s) modificat(s)";
$lang["RSSFEED"] = "Canal RSS";
 
$lang["LINENO"] = "Línia núm.";
$lang["BLAMEFOR"] = "Informació de culpa per a la revisió";
 
$lang["DAYLETTER"] = "d";
$lang["HOURLETTER"] = "h";
$lang["MINUTELETTER"] = "m";
$lang["SECONDLETTER"] = "s";
 
$lang["GO"] = "Vés-hi";
 
$lang["PATHCOMPARISON"] = "Comparació de camins";
$lang["COMPAREPATHS"] = "Compara els camins";
$lang["COMPAREREVS"] = "Compara les revisions";
$lang["PROPCHANGES"] = "Canvis de propietat:";
$lang["CONVFROM"] = "Aquesta comparació mostra els canvis necessaris per a convertir el camí ";
$lang["TO"] = "a";
$lang["REVCOMP"] = "Comparació inversa";
$lang["COMPPATH"] = "Camí de comparació:";
$lang["WITHPATH"] = "Amb el camí:";
$lang["FILEDELETED"] = "Fitxer suprimit";
$lang["FILEADDED"] = "Nou fitxer";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/danish.inc
0,0 → 1,124
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// danish.inc
//
// Danish language strings based on TortoiseSVN translation.
// by Jan Normann Nielsen, <span@dubbekarl.dk>
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Dansk";
$lang['LANGUAGETAG'] = 'da';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Sammenlign";
 
$lang["NOREP"] = "Der er ikke angivet noget versionarkiv";
$lang["NOPATH"] = "Stien blev ikke fundet";
$lang["NOACCESS"] = "Du har ikke de n&oslash;dvendige rettigheder til at l&aelig;se denne mappe";
$lang["RESTRICTED"] = "Begr&aelig;nset adgang";
$lang["SUPPLYREP"] = "Konfigurer venligst stier til versionsarkiver i include/config.inc ved at bruge \$config->parentPath eller \$config->addRepository<p>. Se installationsguiden for n&aelig;rmere detaljer.";
 
$lang["DIFFREVS"] = "Sammenlign revisionerne";
$lang["AND"] = "og";
$lang["REV"] = "Rev";
$lang["LINE"] = "Linje";
$lang["SHOWENTIREFILE"] = "Vis hele filen";
$lang["SHOWCOMPACT"] = "Vis kun omr&aring;der med forskelle";
 
$lang["DIFFPREV"] = "Sammenlign med forrige";
$lang["BLAME"] = "&aelig;ndringsfordeling";
 
$lang["REVINFO"] = "Informationer om revision";
$lang["GOYOUNGEST"] = "G&aring; til nyeste revision";
$lang["LASTMOD"] = "Sidste &aelig;ndring";
$lang["LOGMSG"] = "Logbesked";
$lang["CHANGES"] = "&aelig;ndringer";
$lang["SHOWCHANGED"] = "Vis &aelig;ndrede filer";
$lang["HIDECHANGED"] = "Skjul &aelig;ndrede filer";
$lang["NEWFILES"] = "Nye filer";
$lang["CHANGEDFILES"] = "&aelig;ndrede filer";
$lang["DELETEDFILES"] = "Slettede filer";
$lang["VIEWLOG"] = "Vis&nbsp;log";
$lang["PATH"] = "Sti";
$lang["AUTHOR"] = "Forfatter";
$lang["AGE"] = "Alder";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "Nuv&aelig;rende mappe";
$lang["TARBALL"] = "Tar-pakke";
 
$lang["PREV"] = "Forrige";
$lang["NEXT"] = "N&aelig;ste";
$lang["SHOWALL"] = "Vis alle";
 
$lang["BADCMD"] = "Fejl ved udf&oslash;relse af kommandoen";
$lang["UNKNOWNREVISION"] = "Revisionen findes ikke";
 
$lang["POWERED"] = "Leveret af <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion-versionsarkiver";
$lang["SERVER"] = "Subversion-server";
 
$lang["FILTER"] = "Filter-indstillinger";
$lang["STARTLOG"] = "Fra rev";
$lang["ENDLOG"] = "Til rev";
$lang["SEARCHLOG"] = "S&oslash;g efter";
$lang["CLEARLOG"] = "Ryd aktuelle filter";
$lang["MORERESULTS"] = "Vis flere resultater...";
$lang["NORESULTS"] = "Der er ingen logbeskeder, der passer p&aring; s&oslash;gningen";
$lang["NOMORERESULTS"] = "Der er ikke flere logbeskeder, som svarer til s&oslash;gningen";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS-feed";
$lang["FILESMODIFIED"] = "fil(er) &aelig;ndret";
$lang["RSSFEED"] = "RSS-feed";
 
$lang["LINENO"] = "Linjenr.";
$lang["BLAMEFOR"] = "&aelig;ndringsfordeling for revision";
 
$lang["DAYLETTER"] = "d";
$lang["HOURLETTER"] = "t";
$lang["MINUTELETTER"] = "m";
$lang["SECONDLETTER"] = "s";
 
$lang["GO"] = "G&aring; til";
 
$lang["PATHCOMPARISON"] = "Sammenligning af stier";
$lang["COMPAREPATHS"] = "Sammenlign stier";
$lang["COMPAREREVS"] = "Sammenlign revisioner";
$lang["PROPCHANGES"] = "&aelig;ndringer i egenskaber:";
$lang["CONVFROM"] = "Denne sammenligning viser de &aelig;ndringer, der skal til for at konvertere stien ";
$lang["TO"] = "til";
$lang["REVCOMP"] = "Omvendt sammenligning";
$lang["COMPPATH"] = "Sammenlign sti:";
$lang["WITHPATH"] = "med sti:";
$lang["FILEDELETED"] = "Fil slettet";
$lang["FILEADDED"] = "Ny fil";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
 
 
 
/WebSVN/languages/NotUsed/dutch.inc
0,0 → 1,119
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// dutch.inc
//
// Dutch language strings
//
// By David Gartner david A.T net2ftp D-O-T com
// Comments welcome.
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Dutch";
$lang['LANGUAGETAG'] = 'nl';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "Geen repository ingegeven";
$lang["NOPATH"] = "Pad niet gevonden";
$lang["SUPPLYREP"] = "Gelieve een repository pad aan te maken in include/config.inc met behulp van \$config->parentPath of \$config->addRepository<p>Zie de installatiegids voor meer details";
 
$lang["DIFFREVS"] = "Verschil tussen de revisies";
$lang["AND"] = "en";
$lang["REV"] = "Rev";
$lang["LINE"] = "Lijn";
$lang["SHOWENTIREFILE"] = "Toon volledig bestand";
$lang["SHOWCOMPACT"] = "Toon enkel de delen met verschillen";
 
$lang["DIFFPREV"] = "Vergelijk met vorige";
$lang["BLAME"] = "Blame";
 
$lang["REVINFO"] = "Revisie Informatie";
$lang["GOYOUNGEST"] = "Ga naar de meest recente revisie";
$lang["LASTMOD"] = "Laatste wijziging";
$lang["LOGMSG"] = "Log bericht";
$lang["CHANGES"] = "Wijzigingen";
$lang["SHOWCHANGED"] = "Toon gewijzigde bestanden";
$lang["HIDECHANGED"] = "Verberg gewijzigde bestanden";
$lang["NEWFILES"] = "Nieuwe bestanden";
$lang["CHANGEDFILES"] = "Gewijzigde bestanden";
$lang["DELETEDFILES"] = "Gewiste files";
$lang["VIEWLOG"] = "Toon&nbsp;Log";
$lang["PATH"] = "Pad";
$lang["AUTHOR"] = "Auteur";
$lang["AGE"] = "Ouderdom";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "Huidige map";
$lang["TARBALL"] = "Tarball";
 
$lang["PREV"] = "Vorige";
$lang["NEXT"] = "Volgende";
$lang["SHOWALL"] = "Toon alles";
 
$lang["BADCMD"] = "Een fout is opgetreden tijdens het uitvoeren van dit commando";
 
$lang["POWERED"] = "Aangedreven door <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Projecten";
$lang["SERVER"] = "Subversion&nbsp;Server";
 
$lang["SEARCHLOG"] = "Doorzoek de logs";
$lang["CLEARLOG"] = "Wis deze zoekopdracht";
$lang["MORERESULTS"] = "Vind meer resultaten...";
$lang["NORESULTS"] = "Er zijn geen logs die aan de zoekcriteria voldoen";
$lang["NOMORERESULTS"] = "Er zijn geen logs meer die aan de zoekcriteria voldoen";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "bestand(en) gewijzigd";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "Lijn Nr.";
$lang["BLAMEFOR"] = "Blame informatie voor revisie";
 
$lang["YEARS"] = "jaren";
$lang["MONTHS"] = "maanden";
$lang["WEEKS"] = "weken";
$lang["DAYS"] = "dagen";
$lang["HOURS"] = "uren";
$lang["MINUTES"] = "minuten";
 
$lang["GO"] = "Ga";
 
$lang["PATHCOMPARISON"] = "Pad vergelijking";
$lang["COMPAREPATHS"] = "Vergelijk paden";
$lang["COMPAREREVS"] = "Vergelijk revisies";
$lang["PROPCHANGES"] = "Eigenschap wijzigingen :";
$lang["CONVFROM"] = "Deze vergelijking geeft de veranderingen weer die nodig zijn om het pad te converteren ";
$lang["TO"] = "TO";
$lang["REVCOMP"] = "Omgekeerde vergelijking";
$lang["COMPPATH"] = "Vergelijk pad:";
$lang["WITHPATH"] = "Met pad:";
$lang["FILEDELETED"] = "Bestand gewist";
$lang["FILEADDED"] = "Nieuw bestand";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/finnish.inc
0,0 → 1,117
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2005 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// finnish.inc
//
// Finnish language strings
// Matti Pöllä <mpo@iki.fi>
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Finnish";
$lang['LANGUAGETAG'] = 'fi';
 
$lang["LOG"] = "Loki";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "Tietokantaa ei ole valittu";
$lang["NOPATH"] = "Polkua ei löydy";
$lang["SUPPLYREP"] = "Aseta tietokannan polku tiedostossa include/config.inc käyttäen muuttujaa \$config->parentPath tai \$config->addRepository<p>Katso asennusoppaasta yksityiskohtaiset ohjeet";
 
$lang["DIFFREVS"] = "Versioiden väliset muutokset";
$lang["AND"] = "ja";
$lang["REV"] = "Versio";
$lang["LINE"] = "Rivi";
$lang["SHOWENTIREFILE"] = "Näytä koko tiedosto";
$lang["SHOWCOMPACT"] = "Näytä vain muutoksia sisältävät alueet";
 
$lang["DIFFPREV"] = "Vertaa Edelliseen";
$lang["BLAME"] = "Blame";
 
$lang["REVINFO"] = "Version Tiedot";
$lang["GOYOUNGEST"] = "Siirry uusimpaan versioon";
$lang["LASTMOD"] = "Viimeinen muokkaus";
$lang["LOGMSG"] = "Lokiviesti";
$lang["CHANGES"] = "Muutokset";
$lang["SHOWCHANGED"] = "Näytä muutoksia siältävät tiedostot";
$lang["HIDECHANGED"] = "Piilota muutoksia sisältävät tiedostot";
$lang["NEWFILES"] = "Uudet tiedostot";
$lang["CHANGEDFILES"] = "Muokatut tiedostot";
$lang["DELETEDFILES"] = "Poistetut tiedostot";
$lang["VIEWLOG"] = "Näytä&nbsp;Loki";
$lang["PATH"] = "Polku";
$lang["AUTHOR"] = "Tekijä";
$lang["AGE"] = "Ikä";
$lang["LOG"] = "Loki";
$lang["CURDIR"] = "Tämä Hakemisto";
$lang["TARBALL"] = "Tar-tiedosto";
 
$lang["PREV"] = "Edellinen";
$lang["NEXT"] = "Seuraava";
$lang["SHOWALL"] = "Näytä Kaikki";
 
$lang["BADCMD"] = "Virhe komennon suorittamisessa";
 
$lang["POWERED"] = "Moottorina <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Projektit";
$lang["SERVER"] = "Subversion-palvelin";
 
$lang["SEARCHLOG"] = "Etsi lokista";
$lang["CLEARLOG"] = "Tyhjennä tämä haku";
$lang["MORERESULTS"] = "Hae lisää osumia...";
$lang["NORESULTS"] = "Mikään loki ei vastaa kyselyä";
$lang["NOMORERESULTS"] = "Kyselyä vastaavia lokeja ei ole enemmän";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS-syöte";
$lang["FILESMODIFIED"] = "tiedosto(a) muokattu";
$lang["RSSFEED"] = "RSS-syöte";
 
$lang["LINENO"] = "Rivi Nro.";
$lang["BLAMEFOR"] = "Blame-tiedot versiolle";
 
$lang["YEARS"] = "vuotta";
$lang["MONTHS"] = "kuukautta";
$lang["WEEKS"] = "viikkoa";
$lang["DAYS"] = "päivää";
$lang["HOURS"] = "tuntia";
$lang["MINUTES"] = "minuuttia";
 
$lang["GO"] = "Siirry";
 
$lang["PATHCOMPARISON"] = "Polkujen Vertailu";
$lang["COMPAREPATHS"] = "Vertaa Polkuja";
$lang["COMPAREREVS"] = "Vertaile Versioita";
$lang["PROPCHANGES"] = "Ominaisuuksien muutokset :";
$lang["CONVFROM"] = "Tämä vertailu näyttää polun muuntamiseen tarvittavat muutokset ";
$lang["TO"] = "TO";
$lang["REVCOMP"] = "Vertailu käänteiseen suuntaan";
$lang["COMPPATH"] = "Vertaile Polkua:";
$lang["WITHPATH"] = "Vertailtava Polku:";
$lang["FILEDELETED"] = "Tiedosto poistettu";
$lang["FILEADDED"] = "Uusi tiedosto";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/french.inc
0,0 → 1,94
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Erik Le Blanc
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// french.inc
//
// French language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Francais";
$lang['LANGUAGETAG'] = 'fr';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "Pas de repository";
$lang["NOPATH"] = "Fichier ou r&eacute;pertoire non trouv&eacute;";
 
$lang["DIFFREVS"] = "Diff&eacute;rences entre les r&eacute;visions";
$lang["AND"] = "et";
$lang["REV"] = "R&eacute;vision";
$lang["LINE"] = "Ligne";
$lang["SHOWENTIREFILE"] = "Afficher tout le fichier";
$lang["SHOWCOMPACT"] = "Afficher seulement les passages avec des diff&eacute;rences";
 
$lang["DIFFPREV"] = "Diff&eacute;rence avec le pr&eacute;c&eacute;dent";
$lang["BLAME"] = "Responsabilit&eacute;";
 
$lang["REVINFO"] = "Information sur la R&eacute;vision";
$lang["GOYOUNGEST"] = "Aller &agrave; la R&eacute;vision la plus r&eacute;cente";
$lang["LASTMOD"] = "Derni&egrave;re modification";
$lang["LOGMSG"] = "Message de Log";
$lang["CHANGES"] = "Changements";
$lang["SHOWCHANGED"] = "Montrer les fichiers modifi&eacute;s";
$lang["HIDECHANGED"] = "Cacher les fichiers modifi&eacute;s";
$lang["NEWFILES"] = "Nouveaux fichiers";
$lang["CHANGEDFILES"] = "Fichier(s) modifi&eacute;(s)";
$lang["DELETEDFILES"] = "Fichier(s) effac&eacute;(s)";
$lang["VIEWLOG"] = "Afficher&nbsp;le&nbsp;Log";
$lang["PATH"] = "Chemin";
$lang["AUTHOR"] = "Auteur";
$lang["AGE"] = "Anciennet&eacute;";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "R&eacute;pertoire courant";
 
$lang["PREV"] = "Pr&eacute;c&eacute;dent";
$lang["NEXT"] = "Suivant";
$lang["SHOWALL"] = "Tout montrer";
 
$lang["BADCMD"] = "Cette commande a provoqu&eacute; une erreur";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Projets&nbsp;Subversion";
$lang["SERVER"] = "Serveur&nbsp;Subversion";
 
$lang["SEARCHLOG"] = "Rechercher dans les Logs";
$lang["CLEARLOG"] = "Effacer la recherche courante";
$lang["MORERESULTS"] = "Trouver plus de r&eacute;ponses...";
$lang["NORESULTS"] = "Il n'y a pas de r&eacute;ponse &agrave; votre recherche dans les Logs";
$lang["NOMORERESULTS"] = "Il n'y a pas plus de r&eacute;ponses &agrave; votre recherche";
 
$lang["RSSFEEDTITLE"] = "Fil RSS de WebSVN";
$lang["FILESMODIFIED"] = "fichier(s) modifi&aecute;(s)";
$lang["RSSFEED"] = "RSS";
 
$lang["LINENO"] = "Ligne num&eacute;ro";
$lang["BLAMEFOR"] = "Dernier responsable";
 
$lang["YEARS"] = "ann&eacute;es";
$lang["MONTHS"] = "mois";
$lang["WEEKS"] = "semaines";
$lang["DAYS"] = "jours";
$lang["HOURS"] = "heures";
$lang["MINUTES"] = "minutes";
 
$lang["GO"] = "Go";
 
/WebSVN/languages/NotUsed/german.inc
0,0 → 1,110
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Stephan Stapel, <stephan.stapel@web.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// germany.inc
//
// German language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "German";
$lang['LANGUAGETAG'] = 'de';
 
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "Kein Repository angegeben.";
$lang["NOPATH"] = "Pfad nicht gefunden";
$lang["SUPPLYREP"] = "Bitte den Repository Pfad in include/config.inc mit \$config->parentPath oder \$config->addRepository konfigurieren.<p>Genauere Informationen sind in der Installationsanleitung";
 
$lang["DIFFREVS"] = "Vergleich zwischen Revisionen";
$lang["AND"] = "und";
$lang["REV"] = "Revision";
$lang["LINE"] = "Zeile";
$lang["SHOWENTIREFILE"] = "Ganze Datei anzeigen";
$lang["SHOWCOMPACT"] = "Nur ge&auml;nderte Bereiche";
 
$lang["DIFFPREV"] = "Vergleich mit vorheriger";
$lang["BLAME"] = "Blame";
 
$lang["REVINFO"] = "Revisionsinformation";
$lang["GOYOUNGEST"] = "Zur aktuellen Revision";
$lang["LASTMOD"] = "Letzte &Auml;nderung";
$lang["LOGMSG"] = "Logeintrag";
$lang["CHANGES"] = "&Auml;nderungen";
$lang["SHOWCHANGED"] = "Ge&auml;nderte Dateien anzeigen";
$lang["HIDECHANGED"] = "Ge&auml;nderte Dateien verstecken";
$lang["NEWFILES"] = "Neue Dateien";
$lang["CHANGEDFILES"] = "Ge&auml;nderte Dateien";
$lang["DELETEDFILES"] = "Gel&ouml;schte Dateien";
$lang["VIEWLOG"] = "Log&nbsp;anzeigen";
$lang["PATH"] = "Pfad";
$lang["AUTHOR"] = "Autor";
$lang["AGE"] = "Alter";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "Aktuelles Verzeichnis";
$lang["TARBALL"] = "Archiv Download";
 
$lang["PREV"] = "Zur&uuml;ck";
$lang["NEXT"] = "Weiter";
$lang["SHOWALL"] = "Alles anzeigen";
 
$lang["BADCMD"] = "Fehler beim Ausf&uuml;hren des Befehls";
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion-Projekte";
$lang["SERVER"] = "Subversion Server";
 
$lang["SEARCHLOG"] = "Suche im Log nach";
$lang["CLEARLOG"] = "Aktuelle Suche l&ouml;schen";
$lang["MORERESULTS"] = "Weitere Ergebnisse finden...";
$lang["NORESULTS"] = "Es wurden keine Treffer erzielt";
$lang["NOMORERESULTS"] = "Keine weiteren Treffer f&uuml;r diese Suche";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "Ver&auml;nderte Dateien";
$lang["RSSFEED"] = "RSS feed";
$lang["LINENO"] = "Nr.";
$lang["BLAMEFOR"] = "Blame Information f&uuml; Rev.";
 
$lang["GO"] = "Los";
 
$lang["PATHCOMPARISON"] = "Pfadvergleich";
$lang["COMPAREPATHS"] = "Vergleiche Pfade";
$lang["COMPAREREVS"] = "Vergleiche Revisionen";
$lang["PROPCHANGES"] = "Ge&auml;nderte Eigenschaften :";
$lang["CONVFROM"] = "Dieser Vergleich zeigt die &Auml;nderungen zwischen ";
$lang["TO"] = "und";
$lang["REVCOMP"] = "Revisionen vertauschen";
$lang["COMPPATH"] = "Vergleiche Pfad:";
$lang["WITHPATH"] = "Mit Pfad:";
$lang["FILEDELETED"] = "Datei gel&ouml;scht";
$lang["FILEADDED"] = "Neue Datei";
 
$lang["YEARS"] = "Jahre";
$lang["MONTHS"] = "Monate";
$lang["WEEKS"] = "Wochen";
$lang["DAYS"] = "Tage";
$lang["HOURS"] = "Stunden";
$lang["MINUTES"] = "Minuten";
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
/WebSVN/languages/NotUsed/japanese.inc
0,0 → 1,128
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// japanese.inc
// Translatior: BEPPU Masamichi
//
// Japanese(UTF-8) language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Japanese";
$lang['LANGUAGETAG'] = 'ja';
 
$lang["LOG"] = "ログ";
$lang["DIFF"] = "差分";
 
$lang["NOREP"] = "リポジトリが指定されていません";
$lang["NOPATH"] = "パスが見付かりません";
 
$lang["RESTRICTED"] = "アクセスが制限されています";
$lang["SUPPLYREP"] = "ファイル include/config.inc 内に \$config->parentPath もしくは \$config->addRepository を使用してリポジトリパスを設定してください。<p>詳しくはインストールガイドを参照してください。";
 
 
$lang["DIFFREVS"] = "リビジョン間の差分";
$lang["AND"] = "と";
$lang["REV"] = "リビジョン";
$lang["LINE"] = "行";
$lang["SHOWENTIREFILE"] = "全て表示";
$lang["SHOWCOMPACT"] = "異なる行の周辺だけ表示";
 
$lang["DIFFPREV"] = "前のリビジョンとの差分";
$lang["BLAME"] = "詳細表示";
 
$lang["REVINFO"] = "リビジョン情報";
$lang["GOYOUNGEST"] = "最新のリビジョンへ";
$lang["LASTMOD"] = "最終更新日時";
$lang["LOGMSG"] = "ログメッセージ";
$lang["CHANGES"] = "変更";
$lang["SHOWCHANGED"] = "変更されたファイルの一覧を表示する";
$lang["HIDECHANGED"] = "変更されたファイルの一覧を表示しない";
$lang["NEWFILES"] = "追加ファイル";
$lang["CHANGEDFILES"] = "修正ファイル";
$lang["DELETEDFILES"] = "削除ファイル";
$lang["VIEWLOG"] = "ログを見る";
$lang["PATH"] = "パス";
$lang["AUTHOR"] = "修正者";
$lang["AGE"] = "無修正時間";
$lang["LOG"] = "ログ";
$lang["CURDIR"] = "カレントディレクトリ";
$lang["TARBALL"] = "Tarball";
 
$lang["PREV"] = "前";
$lang["NEXT"] = "次";
$lang["SHOWALL"] = "全て表示";
 
$lang["BADCMD"] = "コマンド実行中のエラー";
$lang["UNKNOWNREVISION"] = "指定のリビジョンがありません";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;リポジトリ一覧";
$lang["SERVER"] = "Subversion&nbsp;サーバ";
 
$lang["FILTER"] = "フィルタオプション";
$lang["STARTLOG"] = "開始リビジョン";
$lang["ENDLOG"] = "終了リビジョン";
$lang["MAXLOG"] = "最大リビジョン数";
$lang["SEARCHLOG"] = "ログを検索";
$lang["CLEARLOG"] = "検索条件をクリアする";
$lang["MORERESULTS"] = "検索条件を絞り込む";
$lang["NORESULTS"] = "検索条件にマッチするものはありませんでした";
$lang["NOMORERESULTS"] = "これ以上検索条件にマッチするものはありません";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "ファイルが修正されました";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "行番号";
$lang["BLAMEFOR"] = "詳細表示 対象リビジョン";
$lang["YEARS"] = "年間";
$lang["MONTHS"] = "ヵ月間";
$lang["WEEKS"] = "週間";
$lang["DAYS"] = "日間";
$lang["HOURS"] = "時間";
$lang["MINUTES"] = "分";
$lang["DAYLETTER"] = "日間";
$lang["HOURLETTER"] = "時間";
$lang["MINUTELETTER"] = "分";
$lang["SECONDLETTER"] = "秒";
 
$lang["GO"] = "GO";
 
$lang["PATHCOMPARISON"] = "パス比較";
$lang["COMPAREPATHS"] = "パス比較";
$lang["COMPAREREVS"] = "リビジョン比較";
$lang["PROPCHANGES"] = "プロパティ変更:";
$lang["CONVFROM"] = "この比較は次の2つのパス配下すべてのファイルの比較をします。比較対象パス:";
$lang["TO"] = "と";
$lang["REVCOMP"] = "逆比較";
$lang["COMPPATH"] = "比較元パス:";
$lang["WITHPATH"] = "比較先パス:";
$lang["FILEDELETED"] = "ファイル削除";
$lang["FILEADDED"] = "新規ファイル";
 
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "<nobr>";
$lang["ENDNOBR"] = "</nobr>";
 
/WebSVN/languages/NotUsed/korean.inc
0,0 → 1,114
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// korean-utf8.inc
// Translator: Lee Jae-Hong
// Korean(utf8) language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Korean";
$lang['LANGUAGETAG'] = 'ko';
 
$lang["LOG"] = "로그";
$lang["DIFF"] = "비교";
 
$lang["NOREP"] = "저장소가 지정되어 있지 않습니다.";
$lang["NOPATH"] = "경로를 찾을 수 없습니다.";
$lang["SUPPLYREP"] = "include/config.inc 파일의 \$config->parentPath 또는 \$config->addRepository에 저장소의 경로를 지정해 주십시오.<p>설치 설명서를 참조해 주십시오.";
 
$lang["DIFFREVS"] = "리비전간 비교";
$lang["AND"] = "와(과)";
$lang["REV"] = "리비전";
$lang["LINE"] = "행";
$lang["SHOWENTIREFILE"] = "모두 보기";
$lang["SHOWCOMPACT"] = "바뀐 부분만 보기";
 
$lang["DIFFPREV"] = "이전 리비전과 비교";
$lang["BLAME"] = "수정한 사람 보기";
 
$lang["REVINFO"] = "리비전 정보";
$lang["GOYOUNGEST"] = "최신 리비전으로 가기";
$lang["LASTMOD"] = "마지막 변경";
$lang["LOGMSG"] = "로그 메시지";
$lang["CHANGES"] = "변경";
$lang["SHOWCHANGED"] = "변경된 파일 보기";
$lang["HIDECHANGED"] = "변경된 파일 숨기기";
$lang["NEWFILES"] = "새 파일";
$lang["CHANGEDFILES"] = "수정된 파일";
$lang["DELETEDFILES"] = "삭제된 파일";
$lang["VIEWLOG"] = "로그&nbsp;보기";
$lang["PATH"] = "경로";
$lang["AUTHOR"] = "작성자";
$lang["AGE"] = "기간";
$lang["LOG"] = "로그";
$lang["CURDIR"] = "현재 디렉토리";
$lang["TARBALL"] = "Tarball";
 
$lang["PREV"] = "이전";
$lang["NEXT"] = "다음";
$lang["SHOWALL"] = "모두 보기";
 
$lang["BADCMD"] = "명령 실행 에러";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;프로젝트";
$lang["SERVER"] = "Subversion&nbsp;서버";
 
$lang["SEARCHLOG"] = "로그 검색";
$lang["CLEARLOG"] = "검색 조건 삭제";
$lang["MORERESULTS"] = "나머지 검색 결과...";
$lang["NORESULTS"] = "검색 조건에 맞는 결과가 없습니다.";
$lang["NOMORERESULTS"] = "더 이상 검색 조건에 맞는 결과가 없습니다.";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "파일 수정됨";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "행번호";
$lang["BLAMEFOR"] = "수정한 사람 보기, 리비전 ";
 
$lang["YEARS"] = "년";
$lang["MONTHS"] = "개월";
$lang["WEEKS"] = "주일";
$lang["DAYS"] = "일";
$lang["HOURS"] = "시간";
$lang["MINUTES"] = "분";
 
$lang["GO"] = "Go";
 
$lang["PATHCOMPARISON"] = "경로 비교";
$lang["COMPAREPATHS"] = "경로 비교하기";
$lang["COMPAREREVS"] = "리비전 비교하기";
$lang["PROPCHANGES"] = "특성 변경 :";
$lang["CONVFROM"] = "이 비교는 바뀐 경로를 보여 줍니다.";
$lang["TO"] = "에서";
$lang["REVCOMP"] = "역 비교";
$lang["COMPPATH"] = "비교 경로:";
$lang["WITHPATH"] = "경로:";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/norwegian.inc
0,0 → 1,122
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// norwegian.inc
//
// Norwegian language strings
// by Sigve Indregard <sigve.indregard@gmail.com>.
 
// Translation notes:
// - I've tried to keep with the translations made in the norwegian version
// of "Version control with Subversion"
// - I've kept the abbreviation "diff"
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Norwegian";
$lang['LANGUAGETAG'] = 'no';
 
$lang["LOG"] = "Logg";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "Depot ble ikke angitt";
$lang["NOPATH"] = "Stien ble ikke funnet";
$lang["SUPPLYREP"] = "Vennligst sett opp en depotsti i include/config.inc ved hjelp av \$config->parentPath eller \$config->addRepository.<p>Se installasjonsguiden for detaljer.";
 
$lang["DIFFREVS"] = "Diff mellom revisjoner";
$lang["AND"] = "og";
$lang["REV"] = "Rev";
$lang["LINE"] = "Linje";
$lang["SHOWENTIREFILE"] = "Vis hele filen";
$lang["SHOWCOMPACT"] = "Vis kun omr&aring;der med forskjeller";
 
$lang["DIFFPREV"] = "Sammenlign med forrige";
$lang["BLAME"] = "Ansvarlig";
 
$lang["REVINFO"] = "Revisjonsinformasjon";
$lang["GOYOUNGEST"] = "G&aring; til nyeste revisjon";
$lang["LASTMOD"] = "Siste endring";
$lang["LOGMSG"] = "Loggmelding";
$lang["CHANGES"] = "Endringer";
$lang["SHOWCHANGED"] = "Vis endrede filer";
$lang["HIDECHANGED"] = "Gjem endrede filer";
$lang["NEWFILES"] = "Nye filer";
$lang["CHANGEDFILES"] = "Endrede filer";
$lang["DELETEDFILES"] = "Slettede filer";
$lang["VIEWLOG"] = "Vis&nbsp;logg";
$lang["PATH"] = "Sti";
$lang["AUTHOR"] = "Forfatter";
$lang["AGE"] = "Alder";
$lang["LOG"] = "Logg";
$lang["CURDIR"] = "Gjeldende katalog";
$lang["TARBALL"] = "Tar-ball";
 
$lang["PREV"] = "Forrige";
$lang["NEXT"] = "Neste";
$lang["SHOWALL"] = "Vis alle";
 
$lang["BADCMD"] = "En feil oppstod under utf&oslash;relse av denne kommandoen";
 
$lang["POWERED"] = "Kj&oslash;rer p&aring; <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversionprosjekter";
$lang["SERVER"] = "Subversiontjener";
 
$lang["SEARCHLOG"] = "S&oslash;k i loggen etter";
$lang["CLEARLOG"] = "T&oslash;m gjeldende s&oslash;k";
$lang["MORERESULTS"] = "Finn flere treff...";
$lang["NORESULTS"] = "Ingen loggmeldinger passer til ditt s&oslash;k";
$lang["NOMORERESULTS"] = "Ingen flere loggmeldinger passer til ditt s&oslash;k";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS-str&oslash;m";
$lang["FILESMODIFIED"] = "fil(er) endret";
$lang["RSSFEED"] = "RSS-str&oslash;m";
 
$lang["LINENO"] = "Linjenr.";
$lang["BLAMEFOR"] = "Ansvarliginformasjon for rev.";
 
$lang["YEARS"] = "&aring;r";
$lang["MONTHS"] = "m&aring;neder";
$lang["WEEKS"] = "uker";
$lang["DAYS"] = "dager";
$lang["HOURS"] = "timer";
$lang["MINUTES"] = "minutter";
 
$lang["GO"] = "G&aring;";
 
$lang["PATHCOMPARISON"] = "Stisammenligning";
$lang["COMPAREPATHS"] = "Sammenlign stier";
$lang["COMPAREREVS"] = "Sammenlign revisjoner";
$lang["PROPCHANGES"] = "Egenskapsendringer :";
$lang["CONVFROM"] = "Denne sammenligningen viser hva som m&aring; til for &aring; konvertere stien ";
$lang["TO"] = "med";
$lang["REVCOMP"] = "Baklengs sammenligning";
$lang["COMPPATH"] = "Sammenlign sti:";
$lang["WITHPATH"] = "Med sti:";
$lang["FILEDELETED"] = "Fil slettet";
$lang["FILEADDED"] = "Ny fil";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/polish.inc
0,0 → 1,122
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// polish.inc
//
// Polish language strings in UTF-8 encoding
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Polish";
$lang['LANGUAGETAG'] = 'pl';
 
$lang["LOG"] = "Dziennik zmian";
$lang["DIFF"] = "Różnice";
 
$lang["NOREP"] = "Nie podano żadnego repozytorium";
$lang["NOPATH"] = "Nie odnaleziono ścieżki";
$lang["SUPPLYREP"] = "Proszę ustawić ścieżkę do repozytoriów w
include/config.inc za pomocą \$config->parentPath lub
\$config->addRepository<p>Aby uzyskać więcej szczegółów zapoznaj się z
podręcznikiem instalacyjnym";
 
$lang["DIFFREVS"] = "Różnice pomiędzy wersjami";
$lang["AND"] = "i";
$lang["REV"] = "Wersja";
$lang["LINE"] = "Linia";
$lang["SHOWENTIREFILE"] = "Pokaż cały plik";
$lang["SHOWCOMPACT"] = "Pokaż tylko fragmety w których zaszły zmiany";
 
$lang["DIFFPREV"] = "Porównaj z poprzednią wersją";
$lang["BLAME"] = "Wkład pracy";
 
$lang["REVINFO"] = "Informacje o wersji";
$lang["GOYOUNGEST"] = "Przejdź do najnowszej wersji";
$lang["LASTMOD"] = "Ostatnia zmiana";
$lang["LOGMSG"] = "Wpis z dziennika zmian";
$lang["CHANGES"] = "Zmiany";
$lang["SHOWCHANGED"] = "Pokaż zmienione pliki";
$lang["HIDECHANGED"] = "Ukryj zmienione pliki";
$lang["NEWFILES"] = "Nowe pliki";
$lang["CHANGEDFILES"] = "Zmienione pliki";
$lang["DELETEDFILES"] = "Usunięte pliki";
$lang["VIEWLOG"] = "Pokaż&nbsp;dziennik&nbsp;zmian";
$lang["PATH"] = "Ścieżka";
$lang["AUTHOR"] = "Autor";
$lang["AGE"] = "Wiek";
$lang["LOG"] = "Dziennik&nbsp;zmian";
$lang["CURDIR"] = "Aktualny katalog";
$lang["TARBALL"] = "Archiwum tar";
 
$lang["PREV"] = "Poprzednia strona";
$lang["NEXT"] = "Następna strona";
$lang["SHOWALL"] = "Pokaż wszyskie";
 
$lang["BADCMD"] = "Błąd podczas wykonywania polecenia";
 
$lang["POWERED"] = "Obsługiwane przez <a
href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Projekty&nbsp;Subversion";
$lang["SERVER"] = "Serwer Subversion";
 
$lang["SEARCHLOG"] = "Przeszukaj dziennik zmian";
$lang["CLEARLOG"] = "Usuń rezulaty wyszukiwania";
$lang["MORERESULTS"] = "Znajdź więcej dopasowań...";
$lang["NORESULTS"] = "Żaden wpis w dzinniku zmian nie pasuje do zapytania";
$lang["NOMORERESULTS"] = "Nie ma już więcej wpisów pasujących do
zadanych kryterów";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "zmienione pliki";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "Linia nr";
$lang["BLAMEFOR"] = "Wkład pracy dla wersji";
 
$lang["YEARS"] = "lat";
$lang["MONTHS"] = "miesięcy";
$lang["WEEKS"] = "tygodni";
$lang["DAYS"] = "dni";
$lang["HOURS"] = "godzin";
$lang["MINUTES"] = "minut";
 
$lang["GO"] = "Przejdź";
 
$lang["PATHCOMPARISON"] = "Porównywanie katalogów";
$lang["COMPAREPATHS"] = "Porównaj katalogi";
$lang["COMPAREREVS"] = "Porównaj wersje";
$lang["PROPCHANGES"] = "Zmiany właściwości :";
$lang["CONVFROM"] = "Poniższe zestawienie pokazuje zmiany konieczne by
zaktualizować katalog";
$lang["TO"] = "na";
$lang["REVCOMP"] = "Odwróć porównanie";
$lang["COMPPATH"] = "Porównaj katalog:";
$lang["WITHPATH"] = "Z katalogiem:";
$lang["FILEDELETED"] = "Plik usunięty";
$lang["FILEADDED"] = "Nowy plik";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/portuguese.inc
0,0 → 1,85
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// portuguese.inc
//
// Portuguese language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Portuguese";
$lang['LANGUAGETAG'] = 'pt';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "N&atilde;o foi indicado um reposit&oacute;rio";
$lang["NOPATH"] = "Path Inv&aacute;lida";
 
$lang["DIFFREVS"] = "Diferen&ccedil;as entre revis&otilde;es";
$lang["AND"] = "e";
$lang["REV"] = "Rev";
$lang["LINE"] = "Linha";
$lang["SHOWENTIREFILE"] = "Mostrar todo o ficheiro";
$lang["SHOWCOMPACT"] = "Mostrar apenas &aacute;reas com diferen&ccedil;as";
 
$lang["DIFFPREV"] = "Diferen&ccedil;as com a anterior";
 
$lang["REVINFO"] = "Notas desta revis&atilde;o";
$lang["GOYOUNGEST"] = "Revis&atilde;o mais recente";
$lang["LASTMOD"] = "&Uacute;ltima altera&ccedil;&atilde;o";
$lang["LOGMSG"] = "Mensagem de Log";
$lang["CHANGES"] = "Altera&ccedil;&otilde;es";
$lang["SHOWCHANGED"] = "Mostrar ficheiros alterados";
$lang["HIDECHANGED"] = "Esconder ficheiros alterados";
$lang["NEWFILES"] = "Novos ficheiros";
$lang["CHANGEDFILES"] = "Ficheiros alterados";
$lang["DELETEDFILES"] = "Ficheiros apagados";
$lang["VIEWLOG"] = "Ver&nbsp;Log";
$lang["PATH"] = "Path";
$lang["AUTHOR"] = "Autor";
$lang["AGE"] = "Idade";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "Directoria Currente";
 
$lang["PREV"] = "Anterior";
$lang["NEXT"] = "Seguinte";
$lang["SHOWALL"] = "Mostrar todos";
 
$lang["BADCMD"] = "Erro ao correr este comando";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Projectos";
$lang["SERVER"] = "Subversion&nbsp;Servidor";
 
$lang["SEARCHLOG"] = "Pesquisar o Search log por";
$lang["CLEARLOG"] = "Limpar pesquisa";
$lang["MORERESULTS"] = "Encontrar mais...";
$lang["NORESULTS"] = "A pesquisa n&atilde;o devolveu nenhum log";
$lang["NOMORERESULTS"] = "N&atilde;o existem mais resultados (logs) para a pesquisa";
 
$lang["YEARS"] = "anos";
$lang["MONTHS"] = "meses";
$lang["WEEKS"] = "semanas";
$lang["DAYS"] = "dias";
$lang["HOURS"] = "horas";
$lang["MINUTES"] = "minutos";
 
$lang["GO"] = "Go";
/WebSVN/languages/NotUsed/russian.inc
0,0 → 1,123
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// russian.inc
//
// Russian language strings
// by Alexey Chumakov <alex@chumakov.ru>
// UTF-8 encoding
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Russian";
$lang['LANGUAGETAG'] = 'ru';
 
$lang["LOG"] = "Журнал";
$lang["DIFF"] = "Различия";
 
$lang["NOREP"] = "Не задано хранилище";
$lang["NOPATH"] = "Путь не найден";
$lang["NOACCESS"] = "Для чтения этого каталога у вас нет нужных прав";
$lang["RESTRICTED"] = "Ограниченный доступ";
$lang["SUPPLYREP"] = "Пожалуйста, настройте путь к хранилищу в include/config.inc, пользуясь \$config->parentPath или \$config->addRepository<p>Дополнительные сведения приведены в руководстве по установке ";
 
$lang["DIFFREVS"] = "Различия между редакциями";
$lang["AND"] = "и";
$lang["REV"] = "Редакция";
$lang["LINE"] = "Строка";
$lang["SHOWENTIREFILE"] = "показать весь файл";
$lang["SHOWCOMPACT"] = "показать только места с различиями";
 
$lang["DIFFPREV"] = "сравнить с предыдущей";
$lang["BLAME"] = "авторство";
 
$lang["REVINFO"] = "Сведения о редакции";
$lang["GOYOUNGEST"] = "перейти к новейшей редакции";
$lang["LASTMOD"] = "Последнее изменение";
$lang["LOGMSG"] = "Запись в журнале";
$lang["CHANGES"] = "Изменения";
$lang["SHOWCHANGED"] = "показать измененные файлы";
$lang["HIDECHANGED"] = "скрыть измененные файлы";
$lang["NEWFILES"] = "Новые файлы";
$lang["CHANGEDFILES"] = "Измененные файлы";
$lang["DELETEDFILES"] = "Удаленные файлы";
$lang["VIEWLOG"] = "открыть&nbsp;журнал";
$lang["PATH"] = "Путь";
$lang["AUTHOR"] = "Автор";
$lang["AGE"] = "Давность";
$lang["LOG"] = "Журнал";
$lang["CURDIR"] = "Текущий каталог";
$lang["TARBALL"] = "Архив";
 
$lang["PREV"] = "пред.";
$lang["NEXT"] = "след.";
$lang["SHOWALL"] = "показать все";
 
$lang["BADCMD"] = "Ошибка при выполнении этой команды";
$lang["UNKNOWNREVISION"] = "Редакция не найдена";
 
$lang["POWERED"] = "Работает на <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Хранилища Subversion&nbsp;";
$lang["SERVER"] = "Сервер Subversion&nbsp;";
 
$lang["FILTER"] = "Параметры фильтрации";
$lang["STARTLOG"] = "От редакции";
$lang["ENDLOG"] = "До редакции";
$lang["MAXLOG"] = "Макс. редакций";
$lang["SEARCHLOG"] = "искать";
$lang["CLEARLOG"] = "очистить текущий фильтр";
$lang["MORERESULTS"] = "найти еще совпадения...";
$lang["NORESULTS"] = "Нет записей, совпадающих с вашим запросом";
$lang["NOMORERESULTS"] = "Больше нет записей, совпадающих с вашим запросом";
 
$lang["RSSFEEDTITLE"] = "RSS-канал WebSVN";
$lang["FILESMODIFIED"] = "файл(ов) изменено";
$lang["RSSFEED"] = "канал RSS";
 
$lang["LINENO"] = "№ строки";
$lang["BLAMEFOR"] = "Сведения об авторстве для редакции ";
 
$lang["DAYLETTER"] = "д";
$lang["HOURLETTER"] = "ч";
$lang["MINUTELETTER"] = "м";
$lang["SECONDLETTER"] = "с";
 
$lang["GO"] = "Перейти";
 
$lang["PATHCOMPARISON"] = "Сравнение путей";
$lang["COMPAREPATHS"] = "cравнить пути";
$lang["COMPAREREVS"] = "Сравнить редакции";
$lang["PROPCHANGES"] = "Изменения свойств :";
$lang["CONVFROM"] = "Такое сравнение показывает изменения, нужные для для преобразования пути ";
$lang["TO"] = "В";
$lang["REVCOMP"] = "обратное сравнение";
$lang["COMPPATH"] = "Сравнить путь:";
$lang["WITHPATH"] = "С путем:";
$lang["FILEDELETED"] = "Файл удален";
$lang["FILEADDED"] = "Новый файл";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
//$lang["NOBR"] = "<nobr>";
//$lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/schinese.inc
0,0 → 1,118
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// schinese-utf8.inc
//
// Simple Chinese language strings
//
// Author: Liangxu Wang <wlx@mygis.org>
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Simplified Chinese";
$lang['LANGUAGETAG'] = 'zh-CN';
 
$lang["LOG"] = "记录";
$lang["DIFF"] = "差异";
 
$lang["NOREP"] = "没有仓库";
$lang["NOPATH"] = "找不到路径";
$lang["SUPPLYREP"] = "请在include/config.inc中使用\$config->parentPath或\$config->addRepository设置仓库的路径<p>更详细的内容请参考安装手册";
 
$lang["DIFFREVS"] = "修订版本之间的差异";
$lang["AND"] = "和";
$lang["REV"] = "修订";
$lang["LINE"] = "行";
$lang["SHOWENTIREFILE"] = "显示整个文件";
$lang["SHOWCOMPACT"] = "只显示差异处";
 
$lang["DIFFPREV"] = "与前一次版本进行比较";
$lang["BLAME"] = "Blame";
 
$lang["REVINFO"] = "修订版信息";
$lang["GOYOUNGEST"] = "到最新的修订版";
$lang["LASTMOD"] = "最后修改";
$lang["LOGMSG"] = "记录消息";
$lang["CHANGES"] = "变化";
$lang["SHOWCHANGED"] = "显示有变化的文件";
$lang["HIDECHANGED"] = "隐藏有变化的文件";
$lang["NEWFILES"] = "新文件";
$lang["CHANGEDFILES"] = "已修改文件";
$lang["DELETEDFILES"] = "已删除文件";
$lang["VIEWLOG"] = "查看记录";
$lang["PATH"] = "路径";
$lang["AUTHOR"] = "作者";
$lang["AGE"] = "年龄";
$lang["LOG"] = "记录";
$lang["CURDIR"] = "当前目录";
$lang["TARBALL"] = "Tarball格式";
 
$lang["PREV"] = "前";
$lang["NEXT"] = "后";
$lang["SHOWALL"] = "全部显示";
 
$lang["BADCMD"] = "命令执行错误";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Projects";
$lang["SERVER"] = "Subversion&nbsp;Server";
 
$lang["SEARCHLOG"] = "搜索记录内容";
$lang["CLEARLOG"] = "清除当前搜索";
$lang["MORERESULTS"] = "找个更多符合的...";
$lang["NORESULTS"] = "没有符合要求的记录";
$lang["NOMORERESULTS"] = "没有更多记录符合要求";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "个文件被改动";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "行号";
$lang["BLAMEFOR"] = "Blame information for rev";
 
$lang["YEARS"] = "年";
$lang["MONTHS"] = "月";
$lang["WEEKS"] = "周";
$lang["DAYS"] = "日";
$lang["HOURS"] = "小时";
$lang["MINUTES"] = "分钟";
 
$lang["GO"] = "Go";
 
$lang["PATHCOMPARISON"] = "路径比较";
$lang["COMPAREPATHS"] = "路径比较";
$lang["COMPAREREVS"] = "比较修订版";
$lang["PROPCHANGES"] = "改变属性 :";
$lang["CONVFROM"] = "这个比较必须转换路径,从";
$lang["TO"] = "到";
$lang["REVCOMP"] = "颠倒比较";
$lang["COMPPATH"] = "路径比较:";
$lang["WITHPATH"] = "With Path:";
$lang["FILEDELETED"] = "已删除文件";
$lang["FILEADDED"] = "新文件";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/slovenian.inc
0,0 → 1,130
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Goran Kavrecic
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// slovenian.inc
//
// Slovenian language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Slovenian";
$lang['LANGUAGETAG'] = 'sl';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "Skladišče ni določeno";
$lang["NOPATH"] = "Ne najdem poti";
$lang["NOACCESS"] = "Nimate dovolj pravic za branje tega direktorija";
$lang["RESTRICTED"] = "Dostop zavrnjen";
$lang["SUPPLYREP"] = "Prosim nastavi pot do skladišča v include/config.inc z \$config->parentPath ali \$config->addRepository<p>Poglej navodila za detajle";
 
$lang["DIFFREVS"] = "Razlika med različicama";
$lang["AND"] = "in";
$lang["REV"] = "Različica";
$lang["LINE"] = "Vrstica";
$lang["SHOWENTIREFILE"] = "Prikaži celo datoteko";
$lang["SHOWCOMPACT"] = "Prikaži samo področja z razlikami";
 
$lang["DIFFPREV"] = "Primerjaj s prejšno";
$lang["BLAME"] = "Blame";
 
$lang["REVINFO"] = "Informacija o različici";
$lang["GOYOUNGEST"] = "Skoči na zadnjo različico";
$lang["LASTMOD"] = "Zadnje spremembe";
$lang["LOGMSG"] = "Opombe";
$lang["CHANGES"] = "Spremembe";
$lang["SHOWCHANGED"] = "Prikaži spremenjene datoteke";
$lang["HIDECHANGED"] = "Skrij spremenjene datoteke";
$lang["NEWFILES"] = "Nove datoteke";
$lang["CHANGEDFILES"] = "Spremenjene datoteke";
$lang["DELETEDFILES"] = "Pobrisane datoteke";
$lang["VIEWLOG"] = "Poglej&nbsp;Opombe";
$lang["PATH"] = "Pot";
$lang["AUTHOR"] = "Avtor";
$lang["AGE"] = "Starost";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "Trenutni direktorij";
$lang["TARBALL"] = "Tarball";
 
$lang["PREV"] = "Nazaj";
$lang["NEXT"] = "Naprej";
$lang["SHOWALL"] = "Prikaži vse";
 
$lang["BADCMD"] = "Napaka pri izvajanju tega ukaza";
$lang["UNKNOWNREVISION"] = "Ne najdem različice";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Projekti";
$lang["SERVER"] = "Subversion&nbsp;strežnik";
 
 
$lang["FILTER"] = "Možnosti filtriranja";
$lang["STARTLOG"] = "Od različice";
$lang["ENDLOG"] = "Do različice";
$lang["MAXLOG"] = "Max različic";
$lang["SEARCHLOG"] = "Išči po opombah";
$lang["CLEARLOG"] = "Pobriši trenutno iskanje";
$lang["MORERESULTS"] = "Poišči še...";
$lang["NORESULTS"] = "Med zapisi ni opomb z iskalno zahtevo";
$lang["NOMORERESULTS"] = "Med zapisi ni več opomb z iskalno zahtevo";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "datotek spremenjenih";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "Vrstica št.";
$lang["BLAMEFOR"] = "Blame informacije za različico";
 
//$lang["YEARS"] = "let";
//$lang["MONTHS"] = "mesecev";
//$lang["WEEKS"] = "tednov";
//$lang["DAYS"] = "dni";
//$lang["HOURS"] = "ur";
//$lang["MINUTES"] = "minute";
$lang["DAYLETTER"] = "d";
$lang["HOURLETTER"] = "h";
$lang["MINUTELETTER"] = "m";
$lang["SECONDLETTER"] = "s";
 
$lang["GO"] = "Izvedi";
 
$lang["PATHCOMPARISON"] = "Primerjava poti";
$lang["COMPAREPATHS"] = "Primerjaj poti";
$lang["COMPAREREVS"] = "Primerjaj različici";
$lang["PROPCHANGES"] = "Spremembe lastnosti :";
$lang["CONVFROM"] = "Ta primerjava prikazuje spremembe potrebne za pretvorbo poti ";
$lang["TO"] = "V";
$lang["REVCOMP"] = "Reverzna primerjava";
$lang["COMPPATH"] = "Primerjaj pot:";
$lang["WITHPATH"] = "S potjo:";
$lang["FILEDELETED"] = "Datoteka pobrisana";
$lang["FILEADDED"] = "Nova datoteka";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
 
 
/WebSVN/languages/NotUsed/spanish.inc
0,0 → 1,116
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// spanish.inc
//
// Spanish language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Spanish";
$lang['LANGUAGETAG'] = 'es';
 
$lang["LOG"] = "Log";
$lang["DIFF"] = "Diff";
 
$lang["NOREP"] = "No se especific&oacute; un repositorio";
$lang["NOPATH"] = "Ruta no encontrada";
$lang["SUPPLYREP"] = "Por Favor, configure una ruta a un repositorio en include/config.inc usando \$config->parentPath o \$config->addRepository<p>Verifique la gu&iacute;a de instalaci&oacute;n para mas detalles";
 
$lang["DIFFREVS"] = "Diff entre versiones";
$lang["AND"] = "y";
$lang["REV"] = "Rev";
$lang["LINE"] = "L&iacute;nea";
$lang["SHOWENTIREFILE"] = "Mostrar el archivo completo";
$lang["SHOWCOMPACT"] = "Solo mostrar &aacute;reas con diferencias";
 
$lang["DIFFPREV"] = "Comparar con el anterior";
$lang["BLAME"] = "Autor&iacute;a";
 
$lang["REVINFO"] = "Informaci&oacute;n sobre la revisi&oacute;n";
$lang["GOYOUNGEST"] = "Ir a la &uacute;ltima revisi&oacute;n";
$lang["LASTMOD"] = "Ultima modificaci&oacute;n";
$lang["LOGMSG"] = "Mensaje de Log";
$lang["CHANGES"] = "Cambios";
$lang["SHOWCHANGED"] = "Mostrar archivos modificados";
$lang["HIDECHANGED"] = "Ocultar archivos modificados";
$lang["NEWFILES"] = "Archivos Nuevos";
$lang["CHANGEDFILES"] = "Archivos modificados";
$lang["DELETEDFILES"] = "Archivos borrados";
$lang["VIEWLOG"] = "Ver&nbsp;Log";
$lang["PATH"] = "Ruta";
$lang["AUTHOR"] = "Autor";
$lang["AGE"] = "Antig&#252;edad";
$lang["LOG"] = "Log";
$lang["CURDIR"] = "Directorio Actual";
$lang["TARBALL"] = "Tarball";
 
$lang["PREV"] = "Ant";
$lang["NEXT"] = "Sig";
$lang["SHOWALL"] = "Mostrar todo";
 
$lang["BADCMD"] = "Error ejecutando ese comando";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Proyectos de&nbsp;Subversion";
$lang["SERVER"] = "Servidor de&nbsp;Subversion";
 
$lang["SEARCHLOG"] = "Buscar en el log";
$lang["CLEARLOG"] = "Limpiar la b&uacute;squeda actual";
$lang["MORERESULTS"] = "Buscar mas coincidencias";
$lang["NORESULTS"] = "Ning&uacute;n log coincide con su b&uacute;squeda";
$lang["NOMORERESULTS"] = "No hay mas logs que coincidan con su b&uacute;squeda";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "Archivo(s) modificados";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "L&iacute;nea Nro.";
$lang["BLAMEFOR"] = "Informaci&oacute;n de culpa para rev";
 
$lang["YEARS"] = "A&ntilde;os";
$lang["MONTHS"] = "meses";
$lang["WEEKS"] = "semanas";
$lang["DAYS"] = "d&iacute;as";
$lang["HOURS"] = "horas";
$lang["MINUTES"] = "minutos";
 
$lang["GO"] = "Ir";
 
$lang["PATHCOMPARISON"] = "Comparaci&oacute;n de rutas";
$lang["COMPAREPATHS"] = "Comparar Rutas";
$lang["COMPAREREVS"] = "Comparar Revisiones";
$lang["PROPCHANGES"] = "Cambios de propiedades :";
$lang["CONVFROM"] = "Esta Comparaci&oacute;n muestra los cambios necesarios para convertir la ruta";
$lang["TO"] = "a";
$lang["REVCOMP"] = "Revertir comparaci&oacute;n";
$lang["COMPPATH"] = "Comparar Ruta:";
$lang["WITHPATH"] = "Con Ruta:";
$lang["FILEDELETED"] = "Archivo Eliminado";
$lang["FILEADDED"] = "Archivo Nuevo";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/languages/NotUsed/swedish.inc
0,0 → 1,118
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// swedish.inc
//
// Swedish language strings
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Swedish";
$lang['LANGUAGETAG'] = 'sv';
 
$lang["LOG"] = "Logg";
$lang["DIFF"] = "Skillnad";
 
$lang["NOREP"] = "Inget arkiv angivet"; //repository
$lang["NOPATH"] = "S&ouml;kv&auml;gen saknas";
$lang["SUPPLYREP"] = "V&auml;nligen s&auml;tt upp en s&ouml;v&auml;g till arkivet i include/config.inc med \$config->parentPath eller \$config->addRepository<p>Se installationsanvisningen f&ouml;r mer detaljer";
 
$lang["DIFFREVS"] = "Skillnad mellan rev.";
$lang["AND"] = "och";
$lang["REV"] = "Rev";
$lang["LINE"] = "Rad";
$lang["SHOWENTIREFILE"] = "Visa hela filen";
$lang["SHOWCOMPACT"] = "Visa bara omr&aring;den med skillnader";
 
$lang["DIFFPREV"] = "Skillnad mot f&ouml;reg&aring;ende";
$lang["BLAME"] = "Ansvarig";
 
$lang["REVINFO"] = "Revisionsinformation";
$lang["GOYOUNGEST"] = "G&aring; till senaste revision";
$lang["LASTMOD"] = "Senast &auml;ndrad";
$lang["LOGMSG"] = "Loggmeddelande";
$lang["CHANGES"] = "&auml;ndringar";
$lang["SHOWCHANGED"] = "Visa &auml;ndrade filer";
$lang["HIDECHANGED"] = "G&ouml;m &auml;ndrade filer";
$lang["NEWFILES"] = "Nya filer";
$lang["CHANGEDFILES"] = "&Auml;ndrade filer";
$lang["DELETEDFILES"] = "Raderade filer";
$lang["VIEWLOG"] = "Visa&nbsp;Logg";
$lang["PATH"] = "S&ouml;kv&auml;g";
$lang["AUTHOR"] = "F&ouml;rfattare";
$lang["AGE"] = "&Aring;lder";
$lang["LOG"] = "Logg";
$lang["CURDIR"] = "Nuvarande folder";
$lang["TARBALL"] = "Tarball";
 
$lang["PREV"] = "F&ouml;reg.";
$lang["NEXT"] = "N&auml;sta";
$lang["SHOWALL"] = "Visa alla";
 
$lang["BADCMD"] = "Fel vid k&ouml;rning av kommande";
 
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>";
$lang["PROJECTS"] = "Subversion&nbsp;Projekt";
$lang["SERVER"] = "Subversion&nbsp;Server";
 
$lang["SEARCHLOG"] = "S&ouml;k i logg efter";
$lang["CLEARLOG"] = "Rensa nuvarande s&ouml;kning";
$lang["MORERESULTS"] = "Hitta fler tr&auml;ffar...";
$lang["NORESULTS"] = "Det finns ingen logg som motsvarar din s&ouml;kning";
$lang["NOMORERESULTS"] = "Det finns inga fler loggar i din s&ouml;kning";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "fil(er) &auml;ndrade";
$lang["RSSFEED"] = "RSS";
 
$lang["LINENO"] = "Radnr.";
$lang["BLAMEFOR"] = "Ansvariginformation f&ouml;r rev";
 
$lang["YEARS"] = "&aring;r";
$lang["MONTHS"] = "m&aring;nader";
$lang["WEEKS"] = "veckor";
$lang["DAYS"] = "dagar";
$lang["HOURS"] = "timmar";
$lang["MINUTES"] = "minuter";
 
$lang["GO"] = "Utf&ouml;r";
 
$lang["PATHCOMPARISON"] = "S&ouml;kv&auml;gsj&auml;mf&ouml;relse";
$lang["COMPAREPATHS"] = "J&auml;mf&ouml;r s&ouml;kv&auml;gar";
$lang["COMPAREREVS"] = "J&auml;mf&ouml;r revisioner";
$lang["PROPCHANGES"] = "Egenskaps&auml;ndringar :";
$lang["CONVFROM"] = "Denna j&auml;mförelse visar &auml;ndringarna som beh&ouml;vs för att konvertera s&ouml;kv&auml;g ";
$lang["TO"] = "till";
$lang["REVCOMP"] = "V&auml;xla j&auml;mf&ouml;relse";
$lang["COMPPATH"] = "J&auml;mf&ouml;r s&ouml;kv&auml;g:";
$lang["WITHPATH"] = "Med s&ouml;kv&auml;g:";
$lang["FILEDELETED"] = "Filen raderad";
$lang["FILEADDED"] = "Ny fil";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
 
 
/WebSVN/languages/NotUsed/tchinese.inc
0,0 → 1,111
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// tchinese.inc
//
// Traditional Chinese language strings
//
// Author: Yuan-Chung Hsiao <ychsiao@ychsiao.idv.tw>
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Traditional Chinese";
$lang['LANGUAGETAG'] = 'zh-TW';
 
$lang["LOG"] = "歷史記錄";
$lang["DIFF"] = "比對";
 
$lang["NOREP"] = "沒有檔案庫";
$lang["NOPATH"] = "找不到路徑";
$lang["SUPPLYREP"] = "請在include/config.inc中設定檔案庫位置為 \$config->parentPath 或 \$config->addRepository<p>更詳細的內容請見安裝手冊";
 
$lang["DIFFREVS"] = "不同版本間的差異";
$lang["AND"] = "與";
$lang["REV"] = "修訂版號";
$lang["LINE"] = "行";
$lang["SHOWALL"] = "顯示完整的檔案";
$lang["SHOWCOMPACT"] = "只顯示不同處";
 
$lang["DIFFPREV"] = "與前一版次比較";
$lang["BLAME"] = "譴責";
 
$lang["REVINFO"] = "修訂版次資訊";
$lang["GOYOUNGEST"] = "到最新的修訂";
$lang["LASTMOD"] = "最後更動";
$lang["LOGMSG"] = "訊息記錄";
$lang["CHANGES"] = "改變";
$lang["SHOWCHANGED"] = "顯示已變動檔案";
$lang["HIDECHANGED"] = "隱藏已變動檔案";
$lang["NEWFILES"] = "新檔案";
$lang["CHANGEDFILES"] = "已變動檔案";
$lang["DELETEDFILES"] = "已刪除檔案";
$lang["VIEWLOG"] = "看歷史記錄";
$lang["PATH"] = "路徑";
$lang["AUTHOR"] = "作者";
$lang["AGE"] = "更動時間";
$lang["LOG"] = "歷史記錄";
$lang["CURDIR"] = "目前目錄";
$lang["TARBALL"] = "Tarball 格式";
 
$lang["PREV"] = "上一筆";
$lang["NEXT"] = "下一筆";
$lang["SHOWALL"] = "顯示全部";
 
$lang["BADCMD"] = "執行錯誤";
 
$lang["POWERED"] = "採用 <a href=\"http://websvn.tigris.org/\">WebSVN</a>架設";
$lang["PROJECTS"] = "Subversion&nbsp;專案";
$lang["SERVER"] = "Subversion&nbsp;Server";
 
$lang["SEARCHLOG"] = "搜尋記錄內容";
$lang["CLEARLOG"] = "清除目前搜尋";
$lang["MORERESULTS"] = "找到更多的符合的...";
$lang["NORESULTS"] = "查詢結果並沒有符合的紀錄";
$lang["NOMORERESULTS"] = "沒有更多紀錄符合你的查詢";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed";
$lang["FILESMODIFIED"] = "個檔案變動";
$lang["RSSFEED"] = "RSS feed";
 
$lang["LINENO"] = "行";
$lang["BLAMEFOR"] = "版本譴責資訊";
 
$lang["YEARS"] = "年前";
$lang["MONTHS"] = "月前";
$lang["WEEKS"] = "週前";
$lang["DAYS"] = "日前";
$lang["HOURS"] = "小時前";
$lang["MINUTES"] = "分鐘前";
 
$lang["GO"] = "到";
 
$lang["COMPAREPATHS"] = "比對路徑";
$lang["COMPAREREVS"] = "比對修訂版";
$lang["PROPCHANGES"] = "改變屬性 :";
$lang["CONVFROM"] = "這個比對顯示必需改變轉換路徑";
$lang["TO"] = "到";
$lang["REVCOMP"] = "顛倒比對";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
/WebSVN/languages/NotUsed/turkish.inc
0,0 → 1,117
<?php
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004 Tim Armes
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// turkish.inc
//
// Turkish language strings
// by Barış Metin <baris@uludag.org.tr>
 
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities).
$lang["LANGUAGENAME"] = "Turkish";
$lang['LANGUAGETAG'] = 'tr';
 
$lang["LOG"] = "Kayıt";
$lang["DIFF"] = "Fark";
 
$lang["NOREP"] = "Bir depo tanımlanmadı";
$lang["NOPATH"] = "Patika bulunamadı";
$lang["SUPPLYREP"] = "Lütfen, include/config.inc dosyasında \$config->parentPath ya da \$config->addRepository değerlerini kullanarak bir depo yolu belirtin<p>Daha fazla bilgi için kurulum kılavuzuna bakın";
 
$lang["DIFFREVS"] = "Sürümler arası fark";
$lang["AND"] = "ve";
$lang["REV"] = "Sürüm";
$lang["LINE"] = "Satır";
$lang["SHOWENTIREFILE"] = "Tüm dosyayı göster";
$lang["SHOWCOMPACT"] = "Yalnızca değişen bölümleri göster";
 
$lang["DIFFPREV"] = "Önceki ile karşılaştır";
$lang["BLAME"] = "svn blame";
 
$lang["REVINFO"] = "Sürüm Bilgisi";
$lang["GOYOUNGEST"] = "En güncel sürüme git";
$lang["LASTMOD"] = "Son değişiklik";
$lang["LOGMSG"] = "Kayıt mesajı";
$lang["CHANGES"] = "Değişiklikler";
$lang["SHOWCHANGED"] = "Değişen dosyaları göster";
$lang["HIDECHANGED"] = "Değişen dosyaları gizle";
$lang["NEWFILES"] = "Yeni Dosyalar";
$lang["CHANGEDFILES"] = "Değişen dosyalar";
$lang["DELETEDFILES"] = "Silinen dosyalar";
$lang["VIEWLOG"] = "Kayıt&nbsp;Mesajını&nbsp;Göster";
$lang["PATH"] = "Patika";
$lang["AUTHOR"] = "Yazar";
$lang["AGE"] = "Yaş";
$lang["LOG"] = "Kayıt";
$lang["CURDIR"] = "Şimdiki Dizin";
$lang["TARBALL"] = "Tar dosyası";
 
$lang["PREV"] = "Önceki";
$lang["NEXT"] = "Sonraki";
$lang["SHOWALL"] = "Tümünü Göster";
 
$lang["BADCMD"] = "Bu komut çalıştırılırken hata oluştu";
 
$lang["POWERED"] = "<a href=\"http://websvn.tigris.org/\">WebSVN</a> tarafından çalıştırılmaktadır";
$lang["PROJECTS"] = "Subversion&nbsp;Projeleri";
$lang["SERVER"] = "Subversion&nbsp;Sunucusu";
 
$lang["SEARCHLOG"] = "Kayıtlarda ara";
$lang["CLEARLOG"] = "Mevcut aramayı iptal et";
$lang["MORERESULTS"] = "Daha fazla eşleştirmeyi bul...";
$lang["NORESULTS"] = "Aramaya uyan kayıt mesajı yok";
$lang["NOMORERESULTS"] = "Aramaya uyan başka kayıt mesajı yok";
 
$lang["RSSFEEDTITLE"] = "WebSVN RSS kaynağı";
$lang["FILESMODIFIED"] = "dosya değişti";
$lang["RSSFEED"] = "RSS kaynağı";
 
$lang["LINENO"] = "Satır No.";
$lang["BLAMEFOR"] = "svn blame bilgisi alınan sürüm numarası";
 
$lang["YEARS"] = "yıl";
$lang["MONTHS"] = "ay";
$lang["WEEKS"] = "hafta";
$lang["DAYS"] = "gün";
$lang["HOURS"] = "saat";
$lang["MINUTES"] = "dakika";
 
$lang["GO"] = "Git";
 
$lang["PATHCOMPARISON"] = "Patika karşılaştırması";
$lang["COMPAREPATHS"] = "Patikaları karşılaştır";
$lang["COMPAREREVS"] = "Sürümleri karşışaştır";
$lang["PROPCHANGES"] = "Özellik değişiklikleri :";
$lang["CONVFROM"] = "Bu karşılaştırma patikayı dönüştürmek için gerekli olan değişikliği gösterir ";
$lang["TO"] = "TO";
$lang["REVCOMP"] = "Geriye doğru karşılaştır";
$lang["COMPPATH"] = "Patikaları karşılaştır:";
$lang["WITHPATH"] = "Patika ile:";
$lang["FILEDELETED"] = "Dosya silinmiş";
$lang["FILEADDED"] = "Yeni dosya";
 
// The following are defined by some languages to stop unwanted line splitting
// in the template files.
 
$lang["NOBR"] = "";
$lang["ENDNOBR"] = "";
 
// $lang["NOBR"] = "<nobr>";
// $lang["ENDNOBR"] = "</nobr>";
/WebSVN/listing.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
22,11 → 24,11
//
// Show the listing for the given repository/path/revision
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once 'include/template.php';
require_once 'include/bugtraq.php';
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/utils.inc");
require_once("include/template.inc");
require_once("include/bugtraq.inc");
 
function removeURLSeparator($url)
{
33,482 → 35,286
return preg_replace('#(\?|&(amp;)?)$#', '', $url);
}
 
function urlForPath($fullpath, $passRevString)
function fileLink($path, $file, $returnjoin = false)
{
global $config, $rep;
global $rep, $passrev, $showchanged, $config;
 
$isDir = $fullpath[strlen($fullpath) - 1] == '/';
if ($path == "" || $path{0} != "/")
$ppath = "/".$path;
else
$ppath = $path;
 
if ($isDir)
{
if ($config->treeView)
{
$url = $config->getURL($rep, $fullpath, 'dir').$passRevString;
$id = anchorForPath($fullpath);
$url .= '#'.$id.'" id="'.$id;
}
if ($ppath{strlen($ppath)-1} != "/")
$ppath .= "/";
if ($file{0} == "/")
$pfile = substr($file, 1);
else
{
$url = $config->getURL($rep, $fullpath, 'dir').$passRevString;
}
}
else
{
$url = $config->getURL($rep, $fullpath, 'file').$passRevString;
}
return removeURLSeparator($url);
}
$pfile = $file;
 
function showDirFiles($svnrep, $subs, $level, $limit, $rev, $peg, $listing, $index, $treeview = true)
{
global $config, $lang, $rep, $passrev, $peg, $passRevString;
if ($returnjoin)
return $ppath.$pfile;
 
$path = '';
$isDir = $pfile{strlen($pfile) - 1} == "/";
 
if (!$treeview)
{
$level = $limit;
}
if ($passrev) $passrevstr = "rev=$passrev&amp;"; else $passrevstr = "";
if ($showchanged) $showchangedstr = "sc=$showchanged"; else $showchangedstr = "";
 
// TODO: Fix node links to use the path and number of peg revision (if exists)
// This applies to file detail, log, and RSS -- leave the download link as-is
for ($n = 0; $n <= $level; $n++)
if ($isDir)
{
$path .= $subs[$n].'/';
}
$url = $config->getURL($rep, $ppath.$pfile, "dir");
 
// List each file in the current directory
$loop = 0;
$last_index = 0;
$accessToThisDir = $rep->hasReadAccess($path, false);
// XHTML doesn't allow slashes in IDs ~J
$id = str_replace('/', '_', $ppath.$pfile);
$url = "<a id='$id' href=\"${url}$passrevstr$showchangedstr";
 
// If using flat view and not at the root, create a '..' entry at the top.
if (!$treeview && count($subs) > 2)
{
$parentPath = $subs;
unset($parentPath[count($parentPath) - 2]);
$parentPath = implode('/', $parentPath);
 
if ($rep->hasReadAccess($parentPath, false))
{
$listvar = &$listing[$index];
$listvar['rowparity'] = $index % 2;
$listvar['path'] = str_replace('%2F', '/', rawurlencode($parentPath));
$listvar['filetype'] = 'dir';
$listvar['filename'] = '..';
$listvar['fileurl'] = urlForPath($parentPath, $passRevString);
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>';
$listvar['level'] = 0;
$listvar['node'] = 0; // t-node
$listvar['revision'] = $rev;
$listvar['revurl'] = $config->getURL($rep, $parentPath, 'revision').'rev='.$rev.'&amp;isdir=1';
global $vars;
$listvar['date'] = $vars['date'];
$listvar['age'] = datetimeFormatDuration(time() - strtotime($vars['date']), true, true);
$index++;
$url = removeURLSeparator($url);
if ($config->treeView) $url .= "#$id";
$url .= "\">$pfile</a>";
}
}
 
$openDir = false;
$logList = $svnrep->getList($path, $rev, $peg);
 
if (!$logList)
else
{
return $listing;
$url = $config->getURL($rep, $ppath.$pfile, "file");
$url .= $passrevstr.$showchangedstr;
$url = removeURLSeparator($url);
$url = "<a href=\"${url}\">$pfile</a>";
}
 
$downloadRevAndPeg = createRevAndPegString($rev, $peg ? $peg : $rev);
foreach ($logList->entries as $entry)
{
$isDir = $entry->isdir;
if (!$isDir && $level != $limit)
{
continue; // Skip any files outside the current directory
return $url;
}
$file = $entry->file;
$isDirString = ($isDir) ? 'isdir=1&amp;' : '';
 
// Only list files/directories that are not designated as off-limits
$access = ($isDir) ? $rep->hasReadAccess($path.$file, false)
: $accessToThisDir;
 
if (!$access)
function fileLinkGetFile($path, $file)
{
continue;
}
global $rep, $passrev, $showchanged, $config;
 
$listvar = &$listing[$index];
$listvar['rowparity'] = $index % 2;
 
if ($isDir)
{
$openDir = isset($subs[$level + 1]) && (!strcmp($subs[$level + 1].'/', $file) || !strcmp($subs[$level + 1], $file));
$listvar['filetype'] = ($openDir) ? 'diropen' : 'dir';
}
if ($path == "" || $path{0} != "/")
$ppath = "/".$path;
else
{
$openDir = false;
$listvar['filetype'] = strtolower(strrchr($file, '.'));
}
$ppath = $path;
 
$listvar['isDir'] = $isDir;
$listvar['openDir'] = $openDir;
$listvar['level'] = ($treeview) ? $level : 0;
$listvar['node'] = 0; // t-node
$listvar['path'] = str_replace('%2F', '/', rawurlencode($path.$file));
$listvar['filename'] = escape($file);
if ($ppath{strlen($ppath)-1} != "/")
$ppath .= "/";
 
if ($isDir)
{
$listvar['fileurl'] = urlForPath($path.$file, $passRevString);
}
if ($file{0} == "/")
$pfile = substr($file, 1);
else
{
$listvar['fileurl'] = urlForPath($path.$file, createDifferentRevAndPegString($passrev, $peg));
}
$pfile = $file;
 
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>';
$isDir = $pfile{strlen($pfile) - 1} == "/";
 
if ($isDir)
if (!$isDir)
{
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.$passRevString;
$url = $config->getURL($rep, $ppath.$pfile, "file");
$url = removeURLSeparator($url);
$url = "<a href=\"${url}&getfile\">Get</a>";
}
else
{
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.createDifferentRevAndPegString($passrev, $peg);
}
 
if ($treeview)
{
$listvar['compare_box'] = '<input type="checkbox" name="compare[]" value="'.escape($path.$file).'@'.$passrev.'" onclick="enforceOnlyTwoChecked(this)" />';
return $url;
}
 
if ($config->showLastModInListing())
function showDirFiles($svnrep, $subs, $level, $limit, $rev, $listing, $index, $treeview = true)
{
$listvar['committime'] = $entry->committime;
$listvar['revision'] = $entry->rev;
$listvar['author'] = $entry->author;
$listvar['age'] = $entry->age;
$listvar['date'] = $entry->date;
$listvar['revurl'] = $config->getURL($rep, $path.$file, 'revision').$isDirString.createRevAndPegString($entry->rev, $peg ? $peg : $rev);
}
global $rep, $passrev, $showchanged, $config, $lang;
 
if ($rep->isDownloadAllowed($path.$file))
{
$downloadurl = $config->getURL($rep, $path.$file, 'dl').$isDirString.$downloadRevAndPeg;
$path = "";
 
if ($isDir)
// Explicitly requested file as attachment
if (isset($_REQUEST['getfile']))
{
$listvar['downloadurl'] = $downloadurl;
$listvar['downloadplainurl'] = '';
}
else
{
$listvar['downloadplainurl'] = $downloadurl;
$listvar['downloadurl'] = '';
}
}
else
{
$listvar['downloadplainurl'] = '';
$listvar['downloadurl'] = '';
}
$base = basename($path);
 
if ($rep->isRssEnabled())
{
// RSS should always point to the latest revision, so don't include rev
$listvar['rssurl'] = $config->getURL($rep, $path.$file, 'rss').$isDirString.createRevAndPegString('', $peg);
}
header("Content-Type: application/octet-stream");
header("Content-Length: $size");
header("Content-Disposition: inline; filename=".urlencode($base));
 
$loop++;
$index++;
$last_index = $index;
$svnrep->getFileContents($path, "", $rev);
 
if ($isDir && ($level != $limit))
{
// @todo remove the alternate check with htmlentities when assured that there are not side effects
if (isset($subs[$level + 1]) && (!strcmp($subs[$level + 1].'/', $file) || !strcmp(htmlentities($subs[$level + 1], ENT_QUOTES).'/', htmlentities($file))))
{
$listing = showDirFiles($svnrep, $subs, $level + 1, $limit, $rev, $peg, $listing, $index);
$index = count($listing);
exit;
}
}
}
 
// For an expanded tree, give the last entry an "L" node to close the grouping
if ($treeview && $last_index != 0)
if (!$treeview)
$level = $limit;
 
for ($n = 0; $n <= $level; $n++)
{
$listing[$last_index - 1]['node'] = 1; // l-node
$path .= $subs[$n]."/";
}
 
return $listing;
}
$contents = $svnrep->dirContents($path, $rev);
 
function showAllDirFiles($svnrep, $path, $rev, $peg, $listing, $index, $treeView = true)
{
global $config, $lang, $rep, $passrev, $peg, $passRevString;
 
// List each file in the current directory
$loop = 0;
$last_index = 0;
$accessToThisDir = $rep->hasReadAccess($path, false);
 
// If using flat view and not at the root, create a '..' entry at the top.
if (!$treeView && count($subs) > 2)
{
$parentPath = $subs;
unset($parentPath[count($parentPath) - 2]);
$parentPath = implode('/', $parentPath);
 
if ($rep->hasReadAccess($parentPath, false))
{
$listvar = &$listing[$index];
$listvar['rowparity'] = $index % 2;
$listvar['path'] = str_replace('%2F', '/', rawurlencode($parentPath));
$listvar['filetype'] = 'dir';
$listvar['filename'] = '..';
$listvar['fileurl'] = urlForPath($parentPath, $passRevString);
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>';
$listvar['level'] = 0;
$listvar['node'] = 0; // t-node
$listvar['revision'] = $rev;
$listvar['revurl'] = $config->getURL($rep, $parentPath, 'revision').'rev='.$rev.'&amp;isdir=1';
global $vars;
$listvar['date'] = $vars['date'];
$listvar['age'] = datetimeFormatDuration(time() - strtotime($vars['date']), true, true);
$index++;
}
}
 
$openDir = false;
$logList = $svnrep->getList($path, $rev, $peg);
$fullaccess = $rep->hasReadAccess($path, false);
 
if (!$logList)
foreach($contents as $file)
{
return $listing;
}
$isDir = ($file{strlen($file) - 1} == "/"?1:0);
$access = false;
 
$downloadRevAndPeg = createRevAndPegString($rev, $peg ? $peg : $rev);
 
foreach ($logList->entries as $entry)
if ($isDir)
{
$isDir = $entry->isdir;
 
$file = $entry->file;
$isDirString = ($isDir) ? 'isdir=1&amp;' : '';
 
// Only list files/directories that are not designated as off-limits
$access = ($isDir) ? $rep->hasReadAccess($path.$file, false)
: $accessToThisDir;
 
if (!$access)
if ($rep->hasReadAccess($path.$file, true))
{
continue;
}
$access = true;
$openDir = (!strcmp($subs[$level+1]."/", $file) || !strcmp($subs[$level+1], $file));
 
$listvar = &$listing[$index];
$listvar['rowparity'] = $index % 2;
if ($openDir)
$listing[$index]["filetype"] = "diropen";
else
$listing[$index]["filetype"] = "dir";
 
if ($isDir)
if ($rep->isDownloadAllowed($path.$file))
{
$listvar['filetype'] = 'dir';
$openDir = true;
$dlurl = $config->getURL($rep, $path.$file, "dl");
$listing[$index]["fileviewdllink"] = "<a href=\"${dlurl}rev=$passrev&amp;isdir=1\">${lang["TARBALL"]}</a>";
}
else
{
$listvar['filetype'] = strtolower(strrchr($file, '.'));
$openDir = false;
$listing[$index]["fileviewdllink"] = "&nbsp;";
}
 
$listvar['isDir'] = $isDir;
$listvar['openDir'] = $openDir;
$listvar['path'] = str_replace('%2F', '/', rawurlencode($path.$file));
$tempelements = explode('/',$file);
 
if ($tempelements[count($tempelements)-1] === "")
{
$lastindexfile = count($tempelements)-1 - 1;
$listvar['node'] = $lastindexfile; // t-node
$listvar['level'] = ($treeView) ? $lastindexfile : 0;
$listvar['filename'] = escape($tempelements[$lastindexfile]);
$listvar['classname'] = '';
 
for ($n = 0; $n < $lastindexfile; ++$n)
{
$listvar['last_i_node'][$n] = false;
$listvar['classname'] = $listvar['classname'].$tempelements[$n].'/';
}
 
$listvar['classname'] = $listvar['classname'].$tempelements[$lastindexfile];
$listvar['last_i_node'][$lastindexfile] = true;
}
else
{
$lastindexfile = count($tempelements)-1;
$listvar['node'] = $lastindexfile; // t-node
$listvar['level'] = ($treeView) ? $lastindexfile : 0;
$listvar['filename'] = escape($tempelements[$lastindexfile]);
$listvar['classname'] = '';
 
for ($n=0; $n < $lastindexfile; ++$n)
if ($fullaccess)
{
$listvar['last_i_node'][$n] = false;
$listvar['classname'] = $listvar['classname'].$tempelements[$n].'/';
$access = true;
if ($level != $limit)
{
// List directories only, skip all files
continue;
}
 
$listvar['last_i_node'][$lastindexfile] = true;
$listing[$index]["fileviewdllink"] = "&nbsp;";
$listing[$index]["filetype"] = strrchr($file, ".");
}
}
 
if ($isDir)
if ($access)
{
$listvar['fileurl'] = urlForPath($path.$file, $passRevString);
}
$listing[$index]["rowparity"] = ($index % 2)?"L1":"L0";
if ($treeview)
$listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"".fileLink($path, $file, true)."@$passrev\" onclick=\"checkCB(this)\" />";
else
{
$listvar['fileurl'] = urlForPath($path.$file, createDifferentRevAndPegString($passrev, $peg));
}
$listing[$index]["compare_box"] = "";
 
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>';
if ($openDir)
$listing[$index]["filelink"] = "<b>".fileLink($path, $file)."</b>";
else
$listing[$index]["filelink"] = fileLink($path, $file);
 
if ($isDir)
{
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.$passRevString;
}
$listing[$index]["filelinkgetfile"] = "";
else
{
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.createDifferentRevAndPegString($passrev, $peg);
}
$listing[$index]["filelinkgetfile"] = fileLinkGetFile($path, $file);
 
if ($treeView)
{
$listvar['compare_box'] = '<input type="checkbox" name="compare[]" value="'.escape($path.$file).'@'.$passrev.'" onclick="enforceOnlyTwoChecked(this)" />';
}
// The history command doesn't return with a trailing slash. We need to remember here if the
// file is a directory or not!
 
if ($config->showLastModInListing())
$listing[$index]["isDir"] = $isDir;
 
if ($treeview)
$listing[$index]["level"] = $level;
else
$listing[$index]["level"] = 0;
 
$listing[$index]["node"] = 0; // t-node
 
$fileurl = $config->getURL($rep, $path.$file, "log");
$listing[$index]["fileviewloglink"] = "<a href=\"${fileurl}rev=$passrev&amp;sc=$showchanged&amp;isdir=$isDir\">${lang["VIEWLOG"]}</a>";
 
$rssurl = $config->getURL($rep, $path.$file, "rss");
if ($rep->getHideRss())
{
$listvar['committime'] = $entry->committime;
$listvar['revision'] = $entry->rev;
$listvar['author'] = $entry->author;
$listvar['age'] = $entry->age;
$listvar['date'] = $entry->date;
$listvar['revurl'] = $config->getURL($rep, $path.$file, 'revision').$isDirString.createRevAndPegString($entry->rev, $peg ? $peg : $rev);
$listing[$index]["rsslink"] = "<a href=\"${rssurl}rev=$passrev&amp;sc=$showchanged&amp;isdir=$isDir\">${lang["RSSFEED"]}</a>";
$listing[$index]["rssanchor"] = "<a href=\"${rssurl}rev=$passrev&amp;sc=$showchanged&amp;isdir=$isDir\">";
}
 
if ($rep->isDownloadAllowed($path.$file))
{
$downloadurl = $config->getURL($rep, $path.$file, 'dl').$isDirString.$downloadRevAndPeg;
$index++;
$loop++;
$last_index = $index;
 
if ($isDir)
if (($level != $limit) && ($isDir))
{
$listvar['downloadurl'] = $downloadurl;
$listvar['downloadplainurl'] = '';
}
else
if (!strcmp($subs[$level + 1]."/", $file))
{
$listvar['downloadplainurl'] = $downloadurl;
$listvar['downloadurl'] = '';
$listing = showDirFiles($svnrep, $subs, $level + 1, $limit, $rev, $listing, $index);
$index = count($listing);
}
}
else
{
$listvar['downloadplainurl'] = '';
$listvar['downloadurl'] = '';
 
}
}
 
if ($rep->isRssEnabled())
if ($last_index != 0 && $treeview)
{
// RSS should always point to the latest revision, so don't include rev
$listvar['rssurl'] = $config->getURL($rep, $path.$file, 'rss').$isDirString.createRevAndPegString('', $peg);
$listing[$last_index - 1]["node"] = 1; // l-node
}
 
$loop++;
$index++;
$last_index = $index;
}
 
return $listing;
}
 
function showTreeDir($svnrep, $path, $rev, $peg, $listing)
function showTreeDir($svnrep, $path, $rev, $listing)
{
global $vars, $config;
 
if ($config->showLoadAllRepos())
{
$vars['compare_box'] = ''; // Set blank once in case tree view is not enabled.
return showAllDirFiles($svnrep, $path, $rev, $peg, $listing, 0, $config->treeView);
}
$subs = explode("/", $path);
 
$subs = explode('/', $path);
 
// The last element in "$subs" is empty for directories, some file name for files, but ALWAYS
// exists as an additional element. Hence, "-2" is necessary.
//
// Additionally, level and limit are conceptually different things, first to e.g. start access
// checks FROM, latter to process UNTIL. So don't merge those values too easily, especially as
// both values needed to be different in some environments in the past for some unkown reason.
//
// https://github.com/websvnphp/websvn/issues/146#issuecomment-913353366
// For directory, the last element in the subs is empty.
// For file, the last element in the subs is the file name.
// Therefore, it is always count($subs) - 2
$limit = count($subs) - 2;
$level = $limit;
$level = $level <= 0 ? 0 : $level;
 
for ($n = 0; $n < $limit; $n++)
{
$vars['last_i_node'][$n] = false;
$vars["last_i_node"][$n] = FALSE;
}
 
$vars['compare_box'] = ''; // Set blank once in case tree view is not enabled.
return showDirFiles($svnrep, $subs, $level, $limit, $rev, $peg, $listing, 0, $config->treeView);
return showDirFiles($svnrep, $subs, 0, $limit, $rev, $listing, 0, $config->treeView);
 
}
 
// Make sure that we have a repository
if (!$rep)
if (!isset($rep))
{
renderTemplate404('directory','NOREP');
echo $lang["NOREP"];
exit;
}
 
$svnrep = new SVNRepository($rep);
 
if (!empty($rev))
{
$info = $svnrep->getInfo($path, $rev, $peg);
// Revision info to pass along chain
$passrev = $rev;
 
if ($info)
{
$path = $info->path;
$peg = (int)$info->rev;
}
}
// Get the directory contents of the given revision, or HEAD if not defined
$contents = $svnrep->dirContents($path, @$rev);
 
$history = $svnrep->getLog($path, 'HEAD', 1, false, 2, ($path == '/') ? '' : $peg);
// If there's no revision info, go to the lastest revision for this path
$history = $svnrep->getLog($path, "", "", false);
 
if (!$history)
{
unset($vars['error']);
$history = $svnrep->getLog($path, '', '', false, 2, ($path == '/') ? '' : $peg);
if (!empty($history->entries[0]))
$youngest = $history->entries[0]->rev;
else
$youngest = -1;
 
if (!$history)
{
renderTemplate404('directory','NOPATH');
}
}
 
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : 0;
 
// Unless otherwise specified, we get the log details of the latest change
$lastChangedRev = ($passrev) ? $passrev : $youngest;
if (empty($rev))
$logrev = $youngest;
else
$logrev = $rev;
 
if ($lastChangedRev != $youngest)
if ($logrev != $youngest)
{
$history = $svnrep->getLog($path, $lastChangedRev, 1, false, 2, $peg);
$logEntry = $svnrep->getLog($path, $logrev, $logrev, false);
$logEntry = $logEntry->entries[0];
}
else
$logEntry = $history->entries[0];
 
$logEntry = ($history && isset($history->entries[0])) ? $history->entries[0] : 0;
$headlog = $svnrep->getLog("/", "", "", true, 1);
$headrev = $headlog->entries[0]->rev;
 
$headlog = $svnrep->getLog('/', '', '', true, 1);
$headrev = ($headlog && isset($headlog->entries[0])) ? $headlog->entries[0]->rev : 0;
 
// If we're not looking at a specific revision, get the HEAD revision number
// (the revision of the rest of the tree display)
 
517,126 → 323,147
$rev = $headrev;
}
 
if ($path == '' || $path[0] != '/')
{
$ppath = '/'.$path;
}
if ($path == "" || $path{0} != "/")
$ppath = "/".$path;
else
{
$ppath = $path;
}
 
createPathLinks($rep, $ppath, $passrev, $peg);
$passRevString = createRevAndPegString($passrev, $peg);
$isDirString = 'isdir=1&amp;';
$vars["repname"] = $rep->getDisplayName();
 
$revurl = $config->getURL($rep, $path != '/' ? $path : '', 'dir');
$revurlSuffix = $path != '/' ? '#'.anchorForPath($path) : '';
$dirurl = $config->getURL($rep, $path, "dir");
$logurl = $config->getURL($rep, $path, "log");
$rssurl = $config->getURL($rep, $path, "rss");
$dlurl = $config->getURL($rep, $path, "dl");
$compurl = $config->getURL($rep, "/", "comp");
 
if ($rev < $youngest)
if ($passrev != 0 && $passrev != $headrev && $youngest != -1)
$vars["goyoungestlink"] = "<a href=\"${dirurl}opt=dir&amp;sc=1\">${lang["GOYOUNGEST"]}</a>";
else
$vars["goyoungestlink"] = "";
 
$bugtraq = new Bugtraq($rep, $svnrep, $ppath);
 
$vars["action"] = "";
$vars["rev"] = $rev;
$vars["path"] = $ppath;
$vars["lastchangedrev"] = $logrev;
$vars["date"] = $logEntry->date;
$vars["author"] = $logEntry->author;
$vars["log"] = nl2br($bugtraq->replaceIDs(create_anchors($logEntry->msg)));
 
if (!$showchanged)
{
if ($path == '/')
{
$vars['goyoungesturl'] = $config->getURL($rep, '', 'dir');
$vars["showchangeslink"] = "<a href=\"${dirurl}rev=$passrev&amp;sc=1\">${lang["SHOWCHANGED"]}</a>";
$vars["hidechangeslink"] = "";
 
$vars["hidechanges"] = true;
$vars["showchanges"] = false;
}
else
{
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'dir').createRevAndPegString($youngest, $peg ? $peg: $rev).$revurlSuffix;
}
$vars["showchangeslink"] = "";
 
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>';
$changes = $logEntry->mods;
 
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg);
$firstAdded = true;
$firstModded = true;
$firstDeleted = true;
 
if (isset($history2->entries[1]))
$vars["newfilesbr"] = "";
$vars["newfiles"] = "";
$vars["changedfilesbr"] = "";
$vars["changedfiles"] = "";
$vars["deletedfilesbr"] = "";
$vars["deletedfiles"] = "";
 
foreach ($changes as $file)
{
$nextRev = $history2->entries[1]->rev;
if ($nextRev != $youngest)
switch ($file->action)
{
$vars['nextrev'] = $nextRev;
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg).$revurlSuffix;
case "A":
if (!$firstAdded) $vars["newfilesbr"] .= "<br />";
$firstAdded = false;
$vars["newfilesbr"] .= fileLink("", $file->path);
$vars["newfiles"] .= " ".fileLink("", $file->path);
break;
 
case "M":
if (!$firstModded) $vars["changedfilesbr"] .= "<br />";
$firstModded = false;
$vars["changedfilesbr"] .= fileLink("", $file->path);
$vars["changedfiles"] .= " ".fileLink("", $file->path);
break;
 
case "D":
if (!$firstDeleted) $vars["deletedfilesbr"] .= "<br />";
$firstDeleted = false;
$vars["deletedfilesbr"] .= $file->path;
$vars["deletedfiles"] .= " ".$file->path;
break;
}
}
 
unset($vars['error']);
}
$vars["hidechangeslink"] = "<a href=\"${dirurl}rev=$passrev&amp;sc=0\">${lang["HIDECHANGED"]}</a>";
 
if (isset($history->entries[1]))
{
$prevRev = $history->entries[1]->rev;
$prevPath = $history->entries[1]->path;
$vars['prevrev'] = $prevRev;
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg).$revurlSuffix;
$vars["hidechanges"] = false;
$vars["showchanges"] = true;
}
 
$bugtraq = new Bugtraq($rep, $svnrep, $ppath);
createDirLinks($rep, $ppath, $passrev, $showchanged);
$vars["curdirloglink"] = "<a href=\"${logurl}rev=$passrev&amp;sc=$showchanged&amp;isdir=1\">${lang["VIEWLOG"]}</a>";
 
$vars['action'] = '';
$vars['rev'] = $rev;
$vars['peg'] = $peg;
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath));
$vars['safepath'] = escape($ppath);
$vars['lastchangedrev'] = $lastChangedRev;
 
if ($logEntry)
if ($rev != $headrev)
{
$vars['date'] = $logEntry->date;
$vars['age'] = datetimeFormatDuration(time() - strtotime($logEntry->date));
$vars['author'] = $logEntry->author;
$vars['log'] = nl2br($bugtraq->replaceIDs(create_anchors(xml_entities($logEntry->msg))));
$history = $svnrep->getLog($path, $rev, "", false);
}
 
$vars['revurl'] = $config->getURL($rep, ($path == '/' ? '' : $path), 'revision').$isDirString.$passRevString;
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>';
 
if ($history && count($history->entries) > 1)
if (isset($history->entries[1]->rev))
{
$vars['compareurl'] = $config->getURL($rep, '', 'comp').'compare[]='.rawurlencode($history->entries[1]->path).'@'.$history->entries[1]->rev. '&amp;compare[]='.rawurlencode($history->entries[0]->path).'@'.$history->entries[0]->rev;
$vars['comparelink'] = '<a href="'.$vars['compareurl'].'">'.$lang['DIFFPREV'].'</a>';
$vars["curdircomplink"] = "<a href=\"${compurl}compare[]=".
urlencode($history->entries[1]->path)."@".$history->entries[1]->rev.
"&amp;compare[]=".urlencode($history->entries[0]->path)."@".$history->entries[0]->rev.
"\">${lang["DIFFPREV"]}</a>";
}
else
{
$vars["curdircomplink"] = "";
}
 
$vars['logurl'] = $config->getURL($rep, $path, 'log').$isDirString.$passRevString;
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>';
 
if ($rep->isRssEnabled())
if ($rep->getHideRss())
{
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').$isDirString.createRevAndPegString('', $peg);
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>';
$vars["curdirrsslink"] = "<a href=\"${rssurl}rev=$passrev&amp;sc=$showchanged&amp;isdir=1\">${lang["RSSFEED"]}</a>";
$vars["curdirrsshref"] = "${rssurl}rev=$passrev&amp;sc=$showchanged&amp;isdir=1";
$vars["curdirrssanchor"] = "<a href=\"${rssurl}rev=$passrev&amp;sc=$showchanged&amp;isdir=1\">";
}
 
// Set up the tarball link
$subs = explode('/', $path);
 
$subs = explode("/", $path);
$level = count($subs) - 2;
if ($rep->isDownloadAllowed($path))
$vars["curdirdllink"] = "<a href=\"${dlurl}rev=$passrev&amp;isdir=1\">${lang["TARBALL"]}</a>";
else
$vars["curdirdllink"] = "";
 
if ($rep->isDownloadAllowed($path) && !isset($vars['warning']))
{
$vars['downloadurl'] = $config->getURL($rep, $path, 'dl').$isDirString.$passRevString;
}
$url = $config->getURL($rep, "/", "comp");
 
$vars['compare_form'] = '<form method="get" action="'.$config->getURL($rep, '', 'comp').'" id="compare">';
$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">";
$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREPATHS"]}\" />";
$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>";
 
if ($config->multiViews)
{
$vars['compare_form'] .= '<input type="hidden" name="op" value="comp"/>';
}
else
{
$vars['compare_form'] .= '<input type="hidden" name="repname" value="'.$repname.'" />';
}
$listing = array();
$listing = showTreeDir($svnrep, $path, $rev, $listing);
 
$vars['compare_submit'] = '<input type="submit" value="'.$lang['COMPAREPATHS'].'" />';
$vars['compare_endform'] = '</form>';
$vars["version"] = $version;
 
$vars['showlastmod'] = $config->showLastModInListing();
if (!$rep->hasReadAccess($path, true))
$vars["noaccess"] = true;
 
$vars['loadalldir'] = $config->showLoadAllRepos();
$listing = showTreeDir($svnrep, $path, $rev, $peg, array());
if (!$rep->hasReadAccess($path, false))
$vars["restricted"] = true;
 
if (!$rep->hasReadAccess($path))
{
$vars['error'] = $lang['NOACCESS'];
sendHeaderForbidden();
}
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."directory.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing);
 
$vars['restricted'] = !$rep->hasReadAccess($path, false);
renderTemplate('directory', $path);
?>
/WebSVN/blame.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
23,152 → 25,55
// Show the blame information of a file.
//
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once 'include/template.php';
require_once 'include/setup.inc';
require_once 'include/svnlook.inc';
require_once 'include/utils.inc';
require_once 'include/template.inc';
 
$vars['action'] = $lang['BLAME'];
 
// Make sure that we have a repository
if (!$rep)
{
renderTemplate404('blame','NOREP');
}
 
$svnrep = new SVNRepository($rep);
 
// If there's no revision info, go to the lastest revision for this path
$history = $svnrep->getLog($path, 'HEAD', 1, false, 2, ($path == '/') ? '' : $peg);
$history = $svnrep->getLog($path, '', '', true);
$youngest = $history->entries[0]->rev;
 
if (!$history)
{
unset($vars['error']);
$history = $svnrep->getLog($path, '', '', false, 2, ($path == '/') ? '' : $peg);
 
if (!$history)
{
renderTemplate404('blame','NOPATH');
}
}
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : false;
 
if (empty($rev))
{
$rev = $youngest;
}
else
{
$history = $svnrep->getLog($path, $rev, '', false, 2, $peg);
if (!$history)
{
renderTemplate404('blame','NOPATH');
}
}
 
if ($path[0] != '/')
{
if ($path{0} != '/')
$ppath = '/'.$path;
}
else
{
$ppath = $path;
}
 
// Find the parent path (or the whole path if it's already a directory)
$pos = strrpos($ppath, '/');
$parent = substr($ppath, 0, $pos + 1);
 
$vars['repname'] = $rep->getDisplayName();
$vars['rev'] = $rev;
$vars['peg'] = $peg;
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath));
$vars['safepath'] = escape($ppath);
$vars['path'] = $ppath;
 
if (isset($history->entries[0]))
{
$vars['log'] = xml_entities($history->entries[0]->msg);
$vars['date'] = $history->entries[0]->date;
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date));
$vars['author'] = $history->entries[0]->author;
}
createDirLinks($rep, $ppath, $rev, $showchanged);
 
createPathLinks($rep, $ppath, $passrev, $peg);
$passRevString = createRevAndPegString($rev, $peg);
$listing = array();
 
if ($rev != $youngest)
{
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'blame').createRevAndPegString('', $peg);
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>';
}
// Get the contents of the file
$tfname = tempnam('temp', '');
$svnrep->getFileContents($path, $tfname, $rev, '', true);
 
$revurl = $config->getURL($rep, $path, 'blame');
$filecache = array();
 
if ($rev < $youngest)
{
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg);
 
if (isset($history2->entries[1]))
{
$nextRev = $history2->entries[1]->rev;
if ($nextRev != $youngest)
{
$vars['nextrev'] = $nextRev;
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg);
}
}
 
unset($vars['error']);
}
 
if (isset($history->entries[1]))
{
$prevRev = $history->entries[1]->rev;
$prevPath = $history->entries[1]->path;
$vars['prevrev'] = $prevRev;
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg);
}
 
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$passRevString;
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>';
 
$vars['logurl'] = $config->getURL($rep, $path, 'log').$passRevString;
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>';
 
$vars['filedetailurl'] = $config->getURL($rep, $path, 'file').$passRevString;
$vars['filedetaillink'] = '<a href="'.$vars['filedetailurl'].'">'.$lang['FILEDETAIL'].'</a>';
 
if ($history == null || count($history->entries) > 1)
{
$vars['diffurl'] = $config->getURL($rep, $path, 'diff').$passRevString;
$vars['difflink'] = '<a href="'.$vars['diffurl'].'">'.$lang['DIFFPREV'].'</a>';
}
 
if ($rep->isRssEnabled())
{
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').createRevAndPegString('', $peg);
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>';
}
 
// Check for binary file type before grabbing blame information.
$svnMimeType = $svnrep->getProperty($path, 'svn:mime-type', $rev, $peg);
 
if (!$rep->getIgnoreSvnMimeTypes() && preg_match('~application/*~', $svnMimeType))
{
$vars['warning'] = 'Cannot display blame info for binary file. (svn:mime-type = '.$svnMimeType.')';
$vars['javascript'] = '';
}
else
{
// Get the contents of the file
$tfname = tempnamWithCheck($config->getTempDir(), '');
$highlighted = $svnrep->getFileContents($path, $tfname, $rev, $peg, '', 'line');
 
if ($file = fopen($tfname, 'r'))
{
// Get the blame info
$tbname = tempnamWithCheck($config->getTempDir(), '');
$tbname = tempnam('temp', '');
$svnrep->getBlameDetails($path, $tbname, $rev);
 
$svnrep->getBlameDetails($path, $tbname, $rev, $peg);
$ent = true;
$extension = strrchr(basename($path), '.');
if (($extension && isset($extEnscript[$extension]) && ('php' == $extEnscript[$extension])) || ($config->useEnscript))
$ent = false;
 
if ($blame = fopen($tbname, 'r'))
{
175,89 → 80,52
// Create an array of version/author/line
 
$index = 0;
$seen_rev = array();
$last_rev = '';
$row_class = '';
 
while (!feof($blame) && !feof($file))
{
$blameline = rtrim(fgets($blame), "\n\r");
$blameline = fgets($blame);
 
if ($blameline != '')
{
list($revision, $author, $remainder) = sscanf($blameline, '%d %s %s');
$empty = !$remainder;
list($revision, $author) = sscanf($blameline, '%d %s');
 
$listvar = &$listing[$index];
$listvar['lineno'] = $index + 1;
$listing[$index]['lineno'] = $index + 1;
 
if ($last_rev != $revision)
{
$listvar['revision'] = '<a id="l'.$index.'-rev" class="blame-revision" href="'.$config->getURL($rep, $path, 'blame').createRevAndPegString($revision, $peg ? $peg : $rev).'">'.$revision.'</a>';
$seen_rev[$revision] = 1;
$row_class = ($row_class == 'light') ? 'dark' : 'light';
$listvar['author'] = $author;
}
$url = $config->getURL($rep, $parent, 'dir');
$listing[$index]['revision'] = "<a href=\"${url}rev=$revision&amp;sc=1\">$revision</a>";
 
$listing[$index]['author'] = $author;
if ($ent)
$line = replaceEntities(rtrim(fgets($file)), $rep);
else
{
$listvar['revision'] = '';
$listvar['author'] = '';
}
$line = rtrim(fgets($file));
 
$listvar['row_class'] = $row_class;
$last_rev = $revision;
$listing[$index]['line'] = hardspace($line);
 
$line = rtrim(fgets($file), "\n\r");
if (!$highlighted)
{
$line = escape(toOutputEncoding($line));
}
$listvar['line'] = ($empty) ? '&nbsp;' : wrapInCodeTagIfNecessary($line);
if (trim($listing[$index]['line']) == '')
$listing[$index]['line'] = '&nbsp;';
$index++;
}
}
fclose($blame);
}
 
fclose($file);
@unlink($tbname);
}
@unlink($tfname);
 
// Build the necessary JavaScript as an array of lines, then join them with \n
$javascript = array();
$javascript[] = '<script type="text/javascript" src="'.$locwebsvnhttp.'/javascript/blame-popup.js"></script>';
$javascript[] = '<script type="text/javascript">';
$javascript[] = '/* <![CDATA[ */';
$javascript[] = 'var rev = new Array();';
unlink($tfname);
unlink($tbname);
 
ksort($seen_rev); // Sort revisions in descending order by key
if (empty($peg))
{
$peg = $rev;
}
if (!isset($vars['warning']))
{
foreach ($seen_rev as $key => $val)
{
$history = $svnrep->getLog($path, $key, $key, false, 1, $peg);
$vars['version'] = $version;
 
if ($history && $history->curEntry)
{
$javascript[] = 'rev['.$key.'] = \'<div class="date">'.$history->curEntry->date.'</div><div class="msg">'.addslashes(preg_replace('/\n/', ' ', $history->curEntry->msg)).'</div>\';';
}
}
}
if (!$rep->hasReadAccess($path, false))
$vars['noaccess'] = true;
 
$javascript[] = '/* ]]> */';
$javascript[] = '</script>';
$vars['javascript'] = implode("\n", $javascript);
}
parseTemplate($rep->getTemplatePath().'header.tmpl', $vars, $listing);
parseTemplate($rep->getTemplatePath().'blame.tmpl', $vars, $listing);
parseTemplate($rep->getTemplatePath().'footer.tmpl', $vars, $listing);
 
if (!$rep->hasReadAccess($path, false))
{
$vars['error'] = $lang['NOACCESS'];
sendHeaderForbidden();
}
 
renderTemplate('blame');
?>
/WebSVN/changes.txt
1,147 → 1,20
2.4.0+
2.1 alpha 1
 
This file is discontinued in favor of using milestones per release on GitHub.
* Changed: many cleanups and optimisations.
* Added: more documentation for *.inc files.
* Removed: extraneous bits.
* New: PHP_Compat usage to allow some new PHP5 functionality and remain
backwards-compatible.
* Changed: line endings now use UNIX-style across the board.
 
https://github.com/websvnphp/websvn/releases
https://github.com/websvnphp/websvn/issues/29
 
2.3.3
 
* Fixed security issue (only affecting Windows with enabled downloads)
* Added option to override bugtraq properties in config file (#315)
* Added support for using complete filenames (instead of extensions only) for enscript and GeSHi highlighting (e.g. CMakeLists.txt)
* Added option to ignore whitespaces in diff as default
* Added proper notification if temporary folder is not writable
* Improved path-column in log-view to show most precise path containing all modifications of revision (#313)
* Improved handling of non-existing resources, returning HTTP status code 404 with an error message not containing SVN commands (#321)
* Fixed URLs when using revision form and listing view (partially #314)
* Fixed downloading folders containing whitespaces (#308)
* Fixed inline diff when ignoring whitespaces with PHP 4 (#309)
* Fixed keeping flag to regard/ignore whitespaces in diff when moving to previous/next/youngest revision
* Updated translation: Swedish (#320)
 
2.3.2
 
* Added ability to use plain PHP for creating templates
* Added config option to show last modification in repository list
* Added config option to trust all server certificates
* Added support for using multiple access files
* Added translation: Macedonian, Russian
* Improved navigation through items deleted in recent revision
* Improved ignoring whitespaces (including different newlines) in compare-view
* Updated translation: Dutch
* Updated libraries: GeSHi 1.0.8.9
* Fixed parsing SVN version
* Fixed comparing two revisions
* Fixed regression in revision form
* Fixed issues: 292, 294, 296, 298, 302, 304, 306, 307
 
2.3.1
 
* Added in-line highlighting of diff
* Added links to previous/next revision in various views
* Added config option to block bots from indexing
* Added returning correct http status 403/404 in some cases
* Improved check for path-based authorization
* Fixed usage of Enscript
* Fixed diff of just moved/renamed files
* Fixed strict messages when using PHP 5.3
* Updated libraries: GeSHi 1.0.8.6, PEAR Archive_Tar 1.3.6, PEAR Text_Diff 1.1.1
* Updated install documentation
* Updated translations: Hindi, Marathi, Slovenian
* Fixed issues: 98, 235, 250, 260, 262, 263, 264, 265, 266, 267, 268, 269,
270, 271, 273, 274, 275, 276, 278, 280, 283, 284, 285, 287, 288, 290
 
2.3.0
 
* Better support for moved, renamed and deleted items.
* Improved handling of errors, show useful messages without exposing auth data.
* Improved handling of different character encodings.
Replaced manual per-repository configuration with automatic handling
(using either multibyte string or iconv extension).
* Modified various things in templates (see doc/templates.html).
* Added new theme called "Elegant".
* Added combobox to select template on a per-user base.
* Fixed plain file downloading.
* Added http header 500 for errors with downloading archives/files.
* Updated rss generation.
* Updated french translation.
* Fixed issues: 64, 84, 151, 155, 236, 240, 242, 243, 244, 245, 246, 247, 248,
251, 253, 254, 255, 256, 257, 259
 
2.2.1
 
* Fixed downloading tar-gz-archives when using .gz extension.
* Improved output when svn-command could not be executed correctly.
* Added config option to fully alphabetize, independent of folder or file type.
* Fixed multiple links and minor issues.
* Fixed issues: 212, 213, 214, 215, 216, 217, 219, 222, 223, 224, 225, 227, 228,
229, 230, 231, 232, 234, 237, 238
 
2.2.0
 
* Fixed revision handling to use PEG revision instead of OPERATIVE revision.
* This fixes many (but not all) cases of viewing moved/renamed/deleted files.
* Removed dependencies to external command.
* Added PEAR Archive_Tar.
* Added PEAR Text_Diff.
* Added usage of gzip (.gz extension) if available.
* Added usage of PHP touch function.
* Improved scalability of parent path handling.
* Added support for upcoming PHP 5.3 release.
 
* Added separate customizable extension mapping for GeSHi.
* Added links for choosing whether to ignore whitespace on compare and diff.
* Added support for aliases in auth file; handles continuation lines correctly.
* Added config option to set custom config path.
* Added config option to exclude repositories from those included by parentPath.
* Added config option to add a subpath of a repository (not just at root level).
* Added config option to switch between showing age and date in log and listing
view (the other is displayed in the title attribute and shown when hovering).
* Added auto detection of Windows.
* Added message when config file does not exist.
* Added new logo and favicon.
 
* Fixed some broken links when navigating through a repository.
* Fixed created archive to be identical (for the same revision) across requests.
* This works under Linux with any PHP version and under Windows with PHP 5.3.
* Fixed parsing of access file to support usernames containing equal characters.
 
* Updated translations
* Dutch
* French
* Italian
 
2.1.0
 
* Fixed: Several security fixes.
* Added: Added GeSHi for code highlighting.
* Added: New languages.
* Changed: Separated modified files and directory listing.
* Changed: Updated used libraries.
 
CHANGES
FIX: Patched several XSS vulnerabilities. (Issue 179)
FIX: Hide modified files in revision view based on authentication.
FIX: Numerous other security problems.
NEW: Added translations: hungarian, indonesian, slovak, uzbek.
CHANGED: Some code cleanup.
 
2.0
NEW: Template files may now be specified on a per repository basis
NEW: Add RSS 'alternate' <link> elements to the HTML headers in
directory listings. This lets you, for example, easily create a
'live bookmark' in Firefox to monitor commits to a particular SVN path.
NEW: Russian translation.
 
* Added: More documentation for *.php files.
* Removed: Extraneous bits.
* Changed: Many cleanups and optimisations.
* Changed: Line endings now use UNIX-style across the board.
 
CHANGES
NEW: New default template theme offered by Erik Pöhler.
NEW: Template files may now be specified on a per repository basis.
NEW: RSS 'alternate' <link> elements in HTML headers links to directory listing.
This lets you, for example, easily create an RSS 'live bookmark' to monitor
commits to a particular SVN path.
NEW: Russian translation
 
CHANGE: Bugtraq handling has been updated to account for the latest spec.
 
FIX: Syntax highlighting across lines has been fixed (Issue 85)
148,160 → 21,165
 
2.00 beta 8
 
CHANGE: Remove path comparison boxes when using the flat view display.
CHANGE: Tidied URLs generated from the listing view (remove default parameters).
CHANGE: wsvn now selects either the listing or file view automatically when the
"op" parameter isn't present. This allows for simpler, shorter URLS.
(eg. /http://example.com/wsvn/repo1/myfile.txt)
CHANGE: Remove path comparison boxes when using the flat view display
CHANGE: Tidy up URLs generated from the listing view (Remove default parameters).
CHANGE: wsvn now selectes either the listing or file view automatically when the op parameter
isn't present. This allows for nicer URLS (eg. /http://example.com/wsvn/repo1/myfile.doc)
 
FIX: Fix warnings when using an access file that didn't define a groups section.
FIX: Fix tarballing of directories with spaces.
FIX: Fix warnings when using an access file that didn't define a groups section
FIX: Fix tarballing of directories with spaces
FIX: Path history information in the log view of a file was incorrect.
 
2.00 beta 7
 
NEW: Projects may now be assigned to groups to simplify the index view.
NEW: The index may be displayed as a collapsible tree of groups.
NEW: Projects may now be assigned to groups, to simplify the index view
NEW: The index may be displayed as a collapsable tree of groups
 
CHANGE: The syntax for per-repository configurations has changed is now much
simpler and will work on all versions of PHP.
CHANGE: The syntax for the per repository configurations has changed. It's now much simpler and
will work on all versions of PHP
 
FIX: Various bug fixes for the access rights module.
FIX: Language choice selection with MultiViews enabled didn't work.
FIX: Various small bugs introduced during 2.0 development.
FIX: Various bug fixes for the access rights module
FIX: Language choice selection with MultiViews enabled didn't work
FIX: Various small bugs introduced during 2.0 development
 
2.00 beta 6
 
Note: $config->addRepository() now takes a URL, not a filesystem path!
Note: the $config->addRepository command now takes a URL and not a filesystem path!
 
NEW: WebSVN can now host remote repositories!
 
FIX: The access rights handling didn't work if you had give a repository a
display name different from it's "real" svn name.
FIX: The deleted file list no longer links to nonexistent files.
FIX: Tidied the directory display when download/compare links aren't available.
FIX: The access rights handling didn't work if you had give a repository a display name
different from it's "real" svn name.
FIX: The deleted file list no longer links to non-existant files!
FIX: Neaten the directory display when the download/compare links aren't available
 
2.00 beta 5
 
NEW: Access rights files can now be specified on a per-repository basis.
NEW: Access rights files can now be specified on a per repository basis
 
CHANGE: Further improvements have been made to character encoding handling. In
particular, it is now possible to specify the encoding of the repository
contents separately from the system encoding. This is the case for
Windows users; the command line tools typically returning CP850-encoded
strings, whereas the source files are encoded as iso-8859-1. Now, when
displaying text files, WebSVN will convert from the content encoding to
the output encoding (UTF-8).
CHANGE: Updated Danish translation.
CHANGE: The log display has a "max number of revisions to show" filter option,
which defaults to 30. This significantly improves log view performance.
CHANGE: Further improvements have been made to character encoding handling. In particular,
it is now possible to specify the encoding of the repository contents separately
from the system encoding. This is the case for windows users, whereby the command
line tools typically returning CP850 encoded strings, whereas the source files are
encoded as iso-8859-1. Now, when displaying text files, WebSVN will convert them
from the content encoding to the output encoding (UTF-8).
 
FIX: Correctly display the contents of a file which had brackets in the name.
FIX: Correct problem with download of tarballs containing special characters.
FIX: Improve time display.
FIX: Remove non-UTF8 language options from distconfig.php.
FIX: Fix recent bug where the log messages contained unnecessary blank lines.
FIX: Auth file section groups without a trailing / are now treated correctly.
CHANGE: Update Danish translation
CHANGE: The log display has a "max number of revisions to show" fiter option, which defaults
to 30. This significantly improves performance of the log display.
 
FIX: It wasn't possible to display the contents of a file which had brackets in the name.
FIX: Correct problem with download of tarballs containing special characters
FIX: Improve time display
FIX: Remove non-UTF8 language options from distconfig.inc
FIX: Fix recent bug whereby the log messages would contain unnecessary blank lines
FIX: Access right file section groups without a trailing / are no correctly treated
 
2.00 beta 4
 
NEW: The log display may now be filtered to show a range of revisions.
NEW: You can now specify directories that can or cannot be tarballed. Tarballing
can be enabled after only a certain directory depth, and directories can be
(dis)allowed on a per-directory/per-repository basis.
NEW: The user can now choose their language via a drop down box.
NEW: The log display may now be filtered to show a range of revisions
NEW: You can now have control over the specification of directories that can or
cannot be tarball'ed. Tarballing can be turned on only after a certain directory
depth and directories can be allow/disallowed on a per directory/repository basis.
NEW: The user can now choose their language via a drop down box
 
CHANGE: Character encodings are now handled differently. The output encoding is
always UTF-8, and the setOutputEncoding option has been removed.
CHANGE: Character encodings are now handled differently. The output encoding is ALWAYS
defined as UTF-8, and the setOutputEncoding option has been removed.
 
FIX: Diff was broken by 1.70 beta 2.
FIX: Download of a directory is prohibited if the user doesn't have read access
to the directory AND all of its subdirectories.
FIX: The character set type is now sent in the HTTP header automatically.
FIX: Diff had been broken by 1.70 beta 2
FIX: Download of tarballs is prohibited if the user doesn't have read access to the directory
AND all of its subdirectories
FIX: The character set type is now sent in the HTTP header. No need to hack the Apache config
 
2.00 beta 3
 
NEW: Config option to display a flat view rather than a tree view.
NEW: WebSVN may now be configured to display a flat view rather than a tree view
 
FIX: Only use --limit option on SVN 1.2 or greater.
FIX: Correct spelling of "danish" in distconfig.php.
FIX: RSS was previously broken in 1.7 beta 1.
FIX: Only use --limit option on svn 1.2 or greater
FIX: Correct spelling of "danish" in distconfig
FIX: Fix RSS, previously broken 1.7 beta 1
 
2.00 beta 2
 
CHANGE: No longer requires entire revision history when accessing a directory,
resulting in a faster access for large repositories.
CHANGE: WebSVN no longer requires the entire revision history when accessing a directory,
resulting in a faster access for large repositories
 
FIX: The new access rights module didn't always hide directories.
FIX: Tree icons have been fixed (broken in 1.70 beta 1).
FIX: The new access rights module didn't always hide directories
FIX: Tree icons have been fixed (broken in 1.70 beta 1)
 
2.00 beta 1
 
NEW: Access rights module (Finally!) - see install.txt for details
NEW: The "View Log" link is now available for templates to use in the file view.
NEW: Added support for "bugtraq:logregex" property.
NEW: Translations for Danish, Finnish, Turkish, Norwegian, Simplified Chinese.
NEW: Added language file for Danish, Finnish, Turkish, Norwegian and Simplified Chinese
NEW: The "View Log" link is now available for templates to use from the file view
NEW: Added bugtraq:logregex support
 
CHANGE: Ages are now displayed with higher resolution.
CHANGE: Updated German translation.
CHANGE: Text files are no longer delivered as binary by default, but displayed
by Enscript.
CHANGE: The last modified files display now shows the most recently modified
files of the current directory.
CHANGE: Improved diff colours of BlueGrey template for better readability.
CHANGE: Ages are now displayed with higher resolution
CHANGE: Update German translation
CHANGE: Tex file are no longer delivered as binary by defaut, but displayed by enscript
CHANGE: The last modified files display now shows the most recently modified files of
the current directory
CHANGE: Improve diff colours of Blue Grey Scheme for better readability
CHANGE: WebSVN no longer requires the entire revision history when accessing a directory,
resulting in a faster access for large repositories
 
FIX: Directories containing accents weren't always displayed.
FIX: File revisions can be compared via the log display (not just directories).
FIX: Corrected RSS encoding issue.
FIX: Corrected bug where diff lines would be displayed twice.
FIX: "svn: Can't check path '/root/.subversion': Permission denied"
FIX: Sometimes files delivered (as opposed to displayed) by WebSVN were empty.
FIX: Fix problem with large tarball delivery.
FIX: Compare with previous always used HEAD.
FIX: .sh files are now viewable.
FIX: Allow special characters in repository names.
FIX: Now able to go into a module if another module starts with the same name.
FIX: Directories containing accents weren't always displayed
FIX: File version can be compared via the log display (as oppoed to just directories)
FIX: Corrected RSS encoding issue
FIX: Corrected bug whereby diff lines would be displayed twice
FIX: svn: Can't check path '/root/.subversion': Permission denied
FIX: Sometimes files delivered (as opposed to disaplyed) by WebSVN were empty
FIX: Fix problem with large tarball delivery
FIX: Compare with previous always used HEAD
FIX: .sh files are now viewable
FIX: Allow special characters in repository names
FIX: It wasn't possible to go into a module if another module starts with the same name.
FIX: Remove hard-coded timezone from the RSS feed creator.
FIX: Caching of RSS feeds wasn't working.
FIX: Caching of RSS feeds wasn't working
 
1.62
 
NEW: RSS feed can now list changed files.
NEW: Templates can now show an open folder icon.
NEW: RSS feed can now list changed files
NEW: Templates can now show an open folder icon
NEW: Polish translation
NEW: Dutch translation
 
CHANGE: Window is scrolled to appropriate location when opening a new directory.
CHANGE: Window is scrolled to appropriate location when opening a new directory
 
FIX: Allow repository names containing '/'.
FIX: Fixed sloppy HTML in diff templates.
FIX: Fix problems with the diff output.
FIX: Allow repository names containing '/'
FIX: Fixed sloppy HTML in diff templates
FIX: Fix problems with the diff output
FIX: Repositories on Windows network shares can now be accessed.
FIX: Accented characters now display correctly in the directory comparison view.
FIX: Remove error when only one revision was available.
FIX: Accented characters weren't shown correctly in the directory comparison
view.
FIX: Remove error when only one revision was available
 
1.61
 
NEW: Multibyte encodings are considered when urlencoding path names.
NEW: Multibyte encodings are considered when urlencoding path names
 
CHANGE: The listing view will now always show the requested revision (HEAD by
default), but the log message will show the log string for the latest
modification to the current directory). This means the parent directory
structure won't change as you browse through old directories.
CHANGE: The listing view will now always show the revision asked for
(HEAD by default), but the log message will show the log
string for the latest modification to the current directory).
This means the the parent directory structure won't change as you
browse through old directories.
 
FIX: A bug prevented downloading of tarballs from working.
FIX: A bug prevented downloading of tarballs from working
 
1.60
 
NEW: Directory displays are now shown in tree view (so that it's harder to get
lost). Many thanks to Brent Lu for this excellent patch.
NEW: Comparison of entire directories.
NEW: Directory displays are now shown in tree view (so that it's harder
to get lost). Many thanks to Brent Lu for this excellent patch.
The prettiest result are available in the BlueGrey scheme.
NEW: Comparison of entire directories
NEW: Tarballs of directories may now be downloaded.
Set $config->allowdownload(); in config.php to allow this.
NEW: New 'Zinn' template from http://projectzinn.org/. Thanks to Justin Doran.
Set $config->allowdownload(); in config.inc to allow this.
NEW: New style 'Zinn' based on the templates created for
http://www.projectzinn.org/. Thanks to Justin Doran.
NEW: File delivery now looks at the defined Mime-Type. Thanks to
Peter Valdemar Mřrch for this patch.
NEW: Various configuration options may now be applied on a per-project basis.
Peter Valdemar Mørch for this patch.
NEW: Various configuration options may now be applied on a per project
basis. Look in distconfig for instructions.
NEW: Support for using 'bugtraq' properties when display log entries.
See http://svn.collab.net/repos/tortoisesvn/trunk/doc/issuetrackers.txt
NEW: Traditional Chinese translation
308,14 → 186,16
NEW: Spanish translation
 
CHANGE: Style information removed from RSS feed
CHANGE: Changed files are now hidden by default (since the directory
CHANGE: Changed files are now hidden by defaut (since the directory
comparison link is far more useful)
 
FIX: File listing are now shown with the correct accented characters on Windows.
FIX: File listing sometimes failed when there were spaces in the filename.
FIX: Some setups wouldn't allow diff generations with Enscript enabled.
FIX: Filenames are URL encoded correctly before calling "svn file:///".
FIX: Keywords weren't expanded in file view when Enscript was disabled.
FIX: File listing were't being shown with the correct accented characters
under windows.
FIX: File listing sometimes failed when there were spaces in the filename
FIX: Some setups wouldn't allow diff generations with enscript
enabled.
FIX: Filenames are URL encoded correctly before calling svn file:///
FIX: Keywords weren't expanded in file view when enscript was disabled
 
1.51
 
322,141 → 202,159
NEW: Korean translation
NEW: Russian translation
 
FIX: Repositories may now have spaces in their path. (eg: c:\my reps)
FIX: Diff now works when the file name has changed between versions.
FIX: RSS feed now generates Content-Type header for XML so IE can display it.
FIX: Diff and blame now work properly for PHP files when Enscript isn't used.
FIX: Use 'svn --non-interactive' so that SVN never prompts WebSVN for input.
FIX: Corrections to the French translation.
FIX: Display a message when no repository paths have been configured.
FIX: Under Multiviews, change to the WebSVN directory before executing commands
so that tempnam() works, so diff and blame work correctly on all systems.
FIX: Repositories may now have spaces in their path (eg: c:\my reps)
FIX: Diff now works when the file name has changed between versions
FIX: RSS feed now generates Content-Type header for XML so that IE can display
the contents
FIX: Diff and Blame didn't work properly for php files when enscript wasn't used
FIX: Use svn --non-interactive to ensure that svn doesn't prompt WebSVN for input
FIX: Corrections to the French translation
FIX: Display an explanatory message when the user hasn't configured any
repository paths
FIX: When using Multiviews, change to the WebSVN directory before executing
commands so that tempnam works. This used to cause problems on some
systems when running diff and blame.
 
1.50
 
Notes: Before installing this version you should delete existing cache files.
Notes: Before installing this version you should delete all the existing
cache files.
 
wsvn.php has changed. You should redo any appropriate configuration
changes inside this file.
 
NEW: Blame information for a file can now be viewed.
NEW: The cached files are now compressed.
NEW: The project selection box shows the current project by default.
NEW: Blame information for a file can now be viewed
NEW: The cached files are now compressed
NEW: The project selection box shows the current project by default
NEW: Swedish translation
NEW: Japanese translation
NEW: The install file explains how to set up permission-based repository access,
such that access via the web interface is the same as access via a client.
NEW: SVN keywords are now expanded in file listings.
NEW: The install file explains how to set up permission based repository
access such that access via the web interface is the same as access
via a client (assuming Apache2).
NEW: SVN keywords are now expanded in file listings
 
CHANGE: The extraction of the directory listings is now accomplished using the
'svn' command via file:/// access rather than 'svnlook'. This has the
advantage of being non-recursive, and thereby eliminates the need for
caching the entire directory listing, and is much quicker on complex
directory structures. (Also, no more 50MB directory caches!)
CHANGE: The extraction of the directory listings is now accomplished using
the svn command via file:/// access rather than svnlook. This has
the advantage of being non-recursive, and thereby eliminates the need
for caching the entire directory listing, and is much quicker on
complex direcory structures. No more 50Mb directory caches!
 
FIX: Deleted directories are now viewable.
FIX: SHOWALL was being redefined in the language files.
FIX: The directory listing view sometimes showed [lang:DELETEDFILES].
FIX: SHOWALL was being redefined in the language files
FIX: The directory listing view sometimes showed [lang:DELETEDFILES
FIX: Under Windows, links in the RSS output would start with "\" if WebSVN
was installed in the server's root directory.
FIX: Sed wouldn't work under all versions of Windows due to the use of single
quotes around the parameters.
quotes around the paramters
FIX: Improved character encoding support for log messages etc.
FIX: Paths passed by URL are encoded.
FIX: Generated HTML code is strictly 4.01.
FIX: Paths passed by URL are encoded
FIX: Generated HTML code is strictly 4.01
 
1.40
 
NEW: RSS feed support. (Thanks to Lübbe Onken for his work on this.)
NEW: Translatations for French and Portuguese.
NEW: .exe files now default to content-type "application/x-msdownload".
NEW: Recognised links are now 'linkified' in the log messages.
NEW: Option to change number of spaces to use for tabs in file/diff listings.
NEW: URLs now access the repository by name rather than number. This means that
bookmarks will stay the same when new projects are added. The old behaviour
can be configured in config.php.
NEW: RSS feed support (thanks to Lübbe Onken for his work on this)
NEW: Translatations for French and Portuguese
NEW: .exe is recognised by default as having content-type
application/x-msdownload
NEW: Recognised links are now 'linkified' in the log messages
NEW: Tabs in file/diff listings are now expanded by a user
configurable number of spaces.
NEW: WebSVN URLs now access the repository by name rather than number.
This means that bookmarks will stay the same when new projects
are added. The old behaviour can be configured in config.inc.
 
FIX: Removed the revision 0 that has appeared since the previous version.
FIX: Repositories were not sorted alphabetically when using ParentPath.
FIX: The PNG support script (and the BlueGrey scheme) is now only loaded for IE.
FIX: Removed the revision 0 that has appeared since the previous version
FIX: Repositories were not sorted alphabetically when using ParentPath
FIX: The PNG support script needed for IE (and the BlueGrey scheme) is
now only loaded with IE
 
1.39
 
CHANGE: In the human-readable date strings, display up to 119 minutes, 47 hours,
13 days or 23 months before moving up to the next unit, like ViewCVS.
CHANGE: In the human-readable date strings, display up to 119 minutes,
47 hours, 13 days or 23 months before moving up to the next
quantity, like ViewCVS.
 
FIX: Links from file detail view now go to the current (not previous) revision.
FIX: Paths with spaces are now correctly showed in the log view.
FIX: Blank lines in diff output are set to &nbsp; so browsers will display them.
FIX: Links followed after viewing the contents of a file go to the
revision of the repository previously being viewed
FIX: Paths with spaces are now correctly showed in the log view
FIX: Blank lines in the diff output are set to &nbsp; so the browser
won't compress them
FIX: A blank author field is set to an &nbsp; cell.
FIX: A year is 365 days, not 356.
FIX: Base ages correctly upon GMT.
FIX: The diff output did not escape html entities when Enscript was enabled and
the file extension was not recognised for Enscript.
FIX: distconfig.php had a few minor errors in the examples.
FIX: It wasn't possible to call ParentPath multiple times.
FIX: Base ages correctly upon GMT
FIX: The diff output did not escape html entities when enscript was
enabled and the file extension was not recognised for enscript.
FIX: distconfig.inc has a few minor errors in the examples.
FIX: It wasn't possible to call ParentPath multiple times
 
1.38
 
NEW: Templates can now define icons for particular file types (see BlueGrey).
NEW: Display of PHP files with syntax highlighting.
NEW: Improve site navigation with links to each directory level on all pages.
NEW: Templates can now define icons for particular file types
(see BlueGrey scheme for an example)
NEW: Display of PHP files with syntax highlighting
NEW: Improve site navigation with links to each directory level on all
pages.
 
1.37
 
NEW: Display a message when there are no results found.
NEW: Display a message when there are no results found
 
CHANGE: Aesthetic changes to the BlueGrey scheme.
CHANGE: Sort entries more naturally.
CHANGE: Aesthetic changes to the BlueGrey scheme
CHANGE: Sort entries more naturally
 
FIX: Redirect to the right URL when using the drop-down box to select projects.
FIX: Nested [websvn-test] elements didn't always work.
FIX: Fixed use of "standard" vs "Standard", problematic on non-Windows machines.
FIX: Really make sure that we redirect to the right place when using the
drop-down box to select projects.
FIX: Nested [webtest]'s didn't always work
FIX: Fixed use of "standard" and "Standard", which caused problems on
non-windows machines
 
1.36
 
NEW: Log message search feature.
NEW: Diff display tries to display changed lines as changed, rather than showing
the line as deleted then added.
NEW: Log message search feature
NEW: Diff display tries to display changed lines as changed, rather than
showing the line deleted then added.
 
FIX: Problem with quoting of commands and command line arguments on Windows.
FIX: Problem surrounding the quoting of commands and command line arguments
on Windows machines.
 
1.35
 
NEW: You can now specify a list of file types (extensions) for files that should
be delivered to the user in a GZIP'd archive rather than displayed as ASCII
in the browser window.
NEW: You can now specify a list of file types (extensions) for files which
should be delivered to the user in a GZIP'd archive rather than
displayed as ASCII in the browser window.
 
CHANGE: Files delivered with a MIME Content type are now sent as "inline". The
browser will try to display them in the browser window, offering a save
box only if they can't be displayed in this manner.
CHANGE: Files delived with a MIME Content type are now sent as "inline".
The browser will try to display them in the browser window, offering
a save box only if they can't be displayed in this mannor.
 
FIX: Detect use of the HTTPS protocol when using the drop-down box to select
projects. (-- FIX INCORRECT. USE v1.36 -- )
FIX: The PNGs in the BlueGrey style are now transparent under IE 5.5 and higher.
FIX: Detect use of the HTTPS protocol when using the drop-down box to
select projects. (-- FIX INCORRECT. USE v1.36 -- )
FIX: The PNGs in the BlueGrey style are now transparent under Internet
Explorer 5.5 and higher.
 
1.34
 
NEW: Support for switching between projects using a drop-down box control.
(MultiViews users - note that wsvn.php has been changed.)
NEW: Sort the repositories alphabetically when using parentPath.
NEW: Better support for internationalisation.
(Template writers: Please note the use of the new variable 'charset'.)
NEW: More useful info in browser titles with the standard templates.
NEW: Support for switching between projects using a drop-down box control
(MultiViews users - note that wsvn.php has been changed)
NEW: Sort the repositories alphabetically when using parentPath
NEW: Better support for internationalisation
(Template writers: Please note the use of the new variable 'charset')
NEW: More useful info in browser titles with the standard templates
 
FIX: Accented characters should now be displayed correctly (I hope).
FIX: HTML files now display correctly on all machines.
FIX: Removed spurious BRs from the file listings.
FIX: HTML files now display correcly on all machines
FIX: Removed spurious BRs from the file listings
 
1.33
 
There are a few changes to the config file in this release. Copy distconfig.php
to config.php and redo any configuration changes that you had made.
There are a few changes to the config file in this release. Copy
distconfig.inc to config.inc and redo any configuration changes that you
had made.
 
NEW: Recognised non-text files are now delivered to the user as attachments.
NEW: The list of files types to be sent to the user (rather than displayed with
WebSVN) is now user-configurable.
NEW: File comparisons are now colourised based on the file extension.
The list of files types to be sent back to the user (rather than displayed
using WebSVN) is user configurable.
NEW: File comparisons are now colourised based on the file extension
 
CHANGE: Only the Enscript file extensions that the user wishes to override are
now listed in the config file.
463,94 → 361,102
 
1.32
 
FIX: Links now function correctly when used in basic (not multiviews) mode.
FIX: Links no longer functionned correctly when used in basic
(non-multiviews) mode.
FIX: Stop diff from comparing space changes
 
1.31
 
FIX: Directory view had disappeared!
FIX: Included missing setup.php file.
FIX: Handle spaces in filenames.
FIX: Included missing file setup.inc
FIX: Handle spaces in filenames
 
1.30
 
There are a few changes to the config file in this release. Copy distconfig.php
to config.php and redo any configuration changes that you had made.
There are a few changes to the config file in this release. Copy
distconfig.inc to config.inc and redo any configuration changes that you
had made.
 
NEW: MultiViews support allows access to repositories using a URL such as:
NEW: MultiViews support. You can now set up WebSVN to access the
repositories using a URL such as:
 
http://server/wsvn/repname/path/to/rep
 
NEW: Colourisation support using Enscript.
NEW: [websvn-test] function can now be nested.
NEW: locwebsvnhttp variable added in template system.
NEW: BlueGrey scheme now has show/hide changed link.
NEW: Colourisation support using Enscript
NEW: [websvn-test] function can now be nested
NEW: locwebsvnhttp variable added in template system
NEW: Bluegrey scheme now has show/hide changed link
 
FIX: Possible security hole with abuse of popen().
FIX: Should now function correctly (again) on non-Windows servers.
FIX: First character of diff listing was missing.
FIX: Possible security hole with abuse of popen
FIX: WebSVN should now function correctly (again) on non windows servers.
FIX: First character of diff listing was missing
 
1.20
 
NEW: Comprehensive templating solution.
NEW: Show the age of a revision in the log view.
NEW: Comprehensive templating solution
NEW: Show the age of a revision in the log view
 
CHANGE: The youngest revision of the current directory is now shown by default
(as opposed to the head revision of the entire repository). This means
that clicking a directory shows the latest changes associated with it.
Specific revisions can still be selected from a log view.
CHANGE: The youngest revision of the current directory is now shown by
default (as opposed to the head revision of the entire repository.
This means that clicking on a directory will show the lastest
changes associated with it. A specific revision can still be
selected from a log view
CHANGE: Only show the leaf name when viewing directory contents
 
FIX: Fixed error concerning use of pclose()
FIX: Fixed error concerning use of pclose
 
1.10/1.10a
 
There are a few changes to the config file in this release. Copy distconfig.php
to config.php and redo any configuration changes that you had made.
There are a few changes to the config file in this release. Copy
distconfig.inc to config.inc and redo any configuration changes that you
had made.
 
NEW: WebSVN now caches information on the repositories. Once a revision has been
viewed, subsequent revisions use the cached information to display the
directory structure. This significantly improves the browsing speed.
NEW: WebSVN now caches information on the repositories. Once a revision
has been viewed subsequent revisions use the cached infomation to
display the directory structure. This significantly improves the
browsing speed.
NEW: German language file (thanks to Stephan Stapel)
 
1.04/1.04a
 
Please note that the config file is now stored in the "include" subdirectory.
Please note that the config file is now stored in include/
 
FIX: Directories in the log view lacked their trailing slashes.
FIX: Diff is now far more memory-efficient, and shows the correct line numbers.
FIX: Diff is now far more efficient with Apache's memory,
and shows the corrrect line numbers.
FIX: setDiffPath now works.
FIX: Bug introduced in 1.03 whereby the revision number always showed '1'.
FIX: Bug introduced in 1.03 whereby the revision number always showed '1'
corrected.
 
Note that you can't view logs with 1.04! Use 1.04a instead.
Note that you can't view logs with 1.04! Use 1.04a.
 
1.03
 
Note that the config.php file has completely changed in this release, in order
to make it more "future proof" and resilient. You'll need to copy distconfig.php
to config.php redo the appropriate changes as described.
Note that the config.inc file has completely changed in this release, in
order to make it more "future proof" and resiliant. You'll need to copy
distconfig.inc to config.inc redo the appropriate changes are described.
 
NEW: A 'ParentPath' can now be specified, rather than having to specify the
directories by hand.
 
FIX: Rewrite of the file list code. Should now be quite a bit faster.
FIX: Use a more memory efficient algorithm to list file contents.
FIX: Spaces in Windows path to svnlook and diff are now handled properly.
FIX: Calls to external commands such as svnlook no longer require Windows-style
line endings.
FIX: Rewrite of the file list code. Should now be quite a bit faster
FIX: Use a more memory efficient algorithm to list file contents
FIX: Spaces in Windows path to svnlook and diff are now handled properly
FIX: Calls to external commands such as svnlook no longer require Windows
style line endings.
 
1.02
 
NEW: Improved command handling to report returned errors. Considerably helps
initial installation problems.
NEW: Show the author of each revision in the log view.
NEW: Show the author of each revision in the log view
 
FIX: Removed the spurious &nbsp; that some people were seeing.
FIX: Removed the spurious &nbsp that some people were seeing
 
1.01 (5 Feb 2004)
 
FIX: Files with HTML content are now shown correctly.
FIX: The diff output had the revision labels the wrong way round.
FIX: Files with HTML content are now shown correcty
FIX: The diff output had the revision lables the wrong way round
 
1.00 (4 Feb 2004)
 
/WebSVN/comp.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
20,487 → 22,261
//
// comp.php
//
// Compare two paths using `svn diff`
// Compare two paths using "svn diff"
//
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once 'include/template.php';
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/utils.inc");
require_once("include/template.inc");
 
$svnrep = new SVNRepository($rep);
 
function checkRevision($rev)
{
if (is_numeric($rev) && ((int)$rev > 0))
return $rev;
$rev = strtoupper($rev);
switch($rev)
{
case "HEAD":
case "PREV":
case "COMMITTED":
return $rev;
}
return 'HEAD';
}
 
// Make sure that we have a repository
if (!$rep)
{
renderTemplate404('compare','NOREP');
return "HEAD";
}
 
$svnrep = new SVNRepository($rep);
 
// Retrieve the request information
$path1 = @$_REQUEST['compare'][0];
$path2 = @$_REQUEST['compare'][1];
$rev1 = (int)@$_REQUEST['compare_rev'][0];
$rev2 = (int)@$_REQUEST['compare_rev'][1];
$manualorder = (@$_REQUEST['manualorder'] == 1);
$ignoreWhitespace = $config->getIgnoreWhitespacesInDiff();
$path1 = @$_REQUEST["compare"][0];
$path2 = @$_REQUEST["compare"][1];
$rev1 = @$_REQUEST["compare_rev"][0];
$rev2 = @$_REQUEST["compare_rev"][1];
 
if (array_key_exists('ignorews', $_REQUEST))
{
$ignoreWhitespace = (bool)$_REQUEST['ignorews'];
}
 
// Some page links put the revision with the path...
if ($path1 && strpos($path1, '@'))
{
list($path1, $rev1) = explode('@', $path1);
}
else if ($path1 && (strpos($path1, '@') === 0))
{
// Something went wrong. The path is missing.
$rev1 = substr($path1, 1);
$path1 = '/';
}
if (strpos($path1, "@")) list($path1, $rev1) = explode("@", $path1);
if (strpos($path2, "@")) list($path2, $rev2) = explode("@", $path2);
 
if ($path2 && strpos($path2, '@'))
{
list($path2, $rev2) = explode('@', $path2);
}
else if ($path2 && (strpos($path2, '@') === 0))
{
$rev2 = substr($path2, 1);
$path2 = '/';
}
 
$rev1 = checkRevision($rev1);
$rev2 = checkRevision($rev2);
 
// Choose a sensible comparison order unless told not to
 
if (!$manualorder && is_numeric($rev1) && is_numeric($rev2) && $rev1 > $rev2)
if (!@$_REQUEST["manualorder"] && is_numeric($rev1) && is_numeric($rev2))
{
if ($rev1 > $rev2)
{
$temppath = $path1;
$temprev = $rev1;
$path1 = $path2;
$rev1 = $rev2;
$path2 = $temppath;
 
$temprev = $rev1;
$rev1 = $rev2;
$rev2 = $temprev;
}
 
$vars['rev1url'] = $config->getURL($rep, $path1, 'dir').createRevAndPegString($rev1, $rev1);
$vars['rev2url'] = $config->getURL($rep, $path2, 'dir').createRevAndPegString($rev2, $rev2);
 
$url = $config->getURL($rep, '', 'comp');
$vars['reverselink'] = '<a href="'.$url.'compare%5B%5D='.rawurlencode($path2 ?? '').'@'.$rev2.'&amp;compare%5B%5D='.rawurlencode($path1 ?? '').'@'.$rev1.'&amp;manualorder=1'.($ignoreWhitespace ? '&amp;ignorews=1' : '').'">'.$lang['REVCOMP'].'</a>';
$toggleIgnoreWhitespace = '';
 
if ($ignoreWhitespace == $config->getIgnoreWhitespacesInDiff())
{
$toggleIgnoreWhitespace = '&amp;ignorews='.($ignoreWhitespace ? '0' : '1');
}
 
if (!$ignoreWhitespace)
{
$vars['ignorewhitespacelink'] = '<a href="'.$url.'compare%5B%5D='.rawurlencode($path1 ?? '').'@'.$rev1.'&amp;compare%5B%5D='.rawurlencode($path2 ?? '').'@'.$rev2.($manualorder ? '&amp;manualorder=1' : '').$toggleIgnoreWhitespace.'">'.$lang['IGNOREWHITESPACE'].'</a>';
}
else
{
$vars['regardwhitespacelink'] = '<a href="'.$url.'compare%5B%5D='.rawurlencode($path1 ?? '').'@'.$rev1.'&amp;compare%5B%5D='.rawurlencode($path2 ?? '').'@'.$rev2.($manualorder ? '&amp;manualorder=1' : '').$toggleIgnoreWhitespace.'">'.$lang['REGARDWHITESPACE'].'</a>';
}
$url = $config->getURL($rep, "/", "comp");
$vars["revlink"] = "<a href=\"${url}compare%5B%5D=".urlencode($path2)."@$rev2&amp;compare%5B%5D=".urlencode($path1)."@$rev1&manualorder=1\">${lang["REVCOMP"]}</a>";
 
if ($rev1 == 0) $rev1 = 'HEAD';
if ($rev2 == 0) $rev2 = 'HEAD';
if ($rev1 == 0) $rev1 = "HEAD";
if ($rev2 == 0) $rev2 = "HEAD";
 
$vars['repname'] = escape($rep->getDisplayName());
$vars['action'] = $lang['PATHCOMPARISON'];
$vars["repname"] = $rep->getDisplayName();
$vars["action"] = $lang["PATHCOMPARISON"];
$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">";
$vars["compare_path1input"] = "<input type=\"text\" size=\"40\" name=\"compare[0]\" value=\"$path1\" />";
$vars["compare_rev1input"] = "<input type=\"text\" size=\"5\" name=\"compare_rev[0]\" value=\"$rev1\" />";
$vars["compare_path2input"] = "<input type=\"text\" size=\"40\" name=\"compare[1]\" value=\"$path2\" />";
$vars["compare_rev2input"] = "<input type=\"text\" size=\"5\" name=\"compare_rev[1]\" value=\"$rev2\" />";
$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREPATHS"]}\" />";
$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\" /><input type=\"hidden\" name=\"manualorder\" value=\"1\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>";
 
$hidden = '<input type="hidden" name="manualorder" value="1" />';
# safe paths are a hack for fixing XSS sploit
$vars["path1"] = $path1;
$vars['safepath1'] = htmlentities($path1);
$vars["path2"] = $path2;
$vars['safepath2'] = htmlentities($path2);
 
if ($config->multiViews)
{
$hidden .= '<input type="hidden" name="op" value="comp"/>';
}
else
{
$hidden .= '<input type="hidden" name="repname" value="'.$repname.'" />';
}
$vars["rev1"] = $rev1;
$vars["rev2"] = $rev2;
 
$vars['compare_form'] = '<form method="get" action="'.$url.'" id="compare">'.$hidden;
$vars['compare_path1input'] = '<input type="text" size="40" name="compare[0]" value="'.escape($path1).'" />';
$vars['compare_path2input'] = '<input type="text" size="40" name="compare[1]" value="'.escape($path2).'" />';
$vars['compare_rev1input'] = '<input type="text" size="5" name="compare_rev[0]" value="'.$rev1.'" />';
$vars['compare_rev2input'] = '<input type="text" size="5" name="compare_rev[1]" value="'.$rev2.'" />';
$vars['compare_submit'] = '<input name="comparesubmit" type="submit" value="'.$lang['COMPAREPATHS'].'" />';
$vars['compare_endform'] = '</form>';
 
$vars['safepath1'] = escape($path1);
$vars['safepath2'] = escape($path2);
 
$vars['rev1'] = $rev1;
$vars['rev2'] = $rev2;
 
$history1 = $svnrep->getLog($path1, $rev1, 0, false, 1);
if (!$history1)
{
renderTemplate404('compare','NOPATH');
}
else
{
$history2 = $svnrep->getLog($path2, $rev2, 0, false, 1);
 
if (!$history2)
{
renderTemplate404('compare','NOPATH');
}
}
 
// Set variables used for the more recent of the two revisions
$history = ($rev1 >= $rev2 ? $history1 : $history2);
if ($history && $history->curEntry)
{
$logEntry = $history->curEntry;
$vars['rev'] = $logEntry->rev;
$vars['peg'] = $peg;
$vars['date'] = $logEntry->date;
$vars['age'] = datetimeFormatDuration(time() - strtotime($logEntry->date));
$vars['author'] = $logEntry->author;
$vars['log'] = xml_entities($logEntry->msg);
}
else
{
$vars['warning'] = 'Problem with comparison.';
}
 
$noinput = empty($path1) || empty($path2);
$listing = array();
 
// Generate the diff listing
$path1 = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->repConfig->path.$path1));
$path2 = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->repConfig->path.$path2));
 
$relativePath1 = $path1;
$relativePath2 = $path2;
 
$svnpath1 = encodepath($svnrep->getSvnPath(str_replace(DIRECTORY_SEPARATOR, '/', $path1 ?? '')));
$svnpath2 = encodepath($svnrep->getSvnPath(str_replace(DIRECTORY_SEPARATOR, '/', $path2 ?? '')));
 
$debug = false;
 
if (!$noinput)
{
$cmd = $config->getSvnCommand().$rep->svnCredentials().' diff '.($ignoreWhitespace ? '-x "-w --ignore-eol-style" ' : '').quote($svnpath1.'@'.$rev1).' '.quote($svnpath2.'@'.$rev2);
$rawcmd = $config->svn." diff ".$rep->svnParams().quote($path1."@".$rev1)." ".quote($path2."@".$rev2);
$cmd = quoteCommand($rawcmd, true);
if ($debug) echo "$cmd\n";
}
 
function clearVars()
{
global $ignoreWhitespace, $listing, $index;
global $listing, $index;
 
if ($ignoreWhitespace && $index > 1)
{
$endBlock = false;
$previous = $index - 1;
if ($listing[$previous]['endpath']) $endBlock = 'newpath';
else if ($listing[$previous]['enddifflines']) $endBlock = 'difflines';
 
if ($endBlock !== false)
{
// check if block ending at previous contains real diff data
$i = $previous;
$containsOnlyEqualDiff = true;
$addedLines = array();
$removedLines = array();
while ($i >= 0 && !$listing[$i - 1][$endBlock])
{
$diffclass = $listing[$i - 1]['diffclass'];
 
if ($diffclass !== 'diffadded' && $diffclass !== 'diffdeleted')
{
if ($addedLines !== $removedLines)
{
$containsOnlyEqualDiff = false;
break;
$listing[$index]["newpath"] = null;
$listing[$index]["endpath"] = null;
$listing[$index]["info"] = null;
$listing[$index]["diffclass"] = null;
$listing[$index]["difflines"] = null;
$listing[$index]["enddifflines"] = null;
$listing[$index]["properties"] = null;
}
}
 
if (count($addedLines) > 0 && $addedLines === $removedLines)
{
$addedLines = array();
$removedLines = array();
}
$vars["success"] = false;
 
if ($diffclass === 'diff')
{
$i--;
continue;
}
 
if ($diffclass === null)
{
$containsOnlyEqualDiff = false;
break;;
}
 
if ($diffclass === 'diffdeleted')
{
if (count($addedLines) <= count($removedLines))
{
$containsOnlyEqualDiff = false;
break;;
}
 
array_unshift($removedLines, $listing[$i - 1]['line']);
$i--;
continue;
}
 
if ($diffclass === 'diffadded')
{
if (count($removedLines) > 0)
{
$containsOnlyEqualDiff = false;
break;;
}
 
array_unshift($addedLines, $listing[$i - 1]['line']);
$i--;
continue;
}
 
assert(false);
}
 
if ($containsOnlyEqualDiff)
{
$containsOnlyEqualDiff = $addedLines === $removedLines;
}
 
// remove blocks which only contain diffclass=diff and equal removes and adds
if ($containsOnlyEqualDiff)
{
for ($j = $i - 1; $j < $index; $j++)
{
unset($listing[$j]);
}
 
$index = $i - 1;
}
}
}
 
$listvar = &$listing[$index];
$listvar['newpath'] = null;
$listvar['endpath'] = null;
$listvar['info'] = null;
$listvar['diffclass'] = null;
$listvar['difflines'] = null;
$listvar['enddifflines'] = null;
$listvar['properties'] = null;
}
 
$vars['success'] = false;
 
if (!$noinput)
{
// TODO: Report warning/error if comparison encounters any problems
if ($diff = popenCommand($cmd, 'r'))
if ($diff = popen($cmd, "r"))
{
$listing = array();
$index = 0;
$indiff = false;
$indiffproper = false;
$getLine = true;
$node = null;
$bufferedLine = false;
 
$vars['success'] = true;
$vars["success"] = true;
 
while (!feof($diff))
{
if ($getLine)
{
if ($bufferedLine === false)
{
$bufferedLine = rtrim(fgets($diff), "\n\r");
}
$line = fgets($diff);
 
$newlineR = strpos($bufferedLine, "\r");
$newlineN = strpos($bufferedLine, "\n");
if ($newlineR === false && $newlineN === false)
{
$line = $bufferedLine;
$bufferedLine = false;
}
else
{
$newline = ($newlineR < $newlineN ? $newlineR : $newlineN);
$line = substr($bufferedLine, 0, $newline);
$bufferedLine = substr($bufferedLine, $newline + 1);
}
}
 
clearVars();
$getLine = true;
if ($debug) print 'Line = "'.$line.'"<br />';
if ($debug) print "Line = '$line'<br />" ;
if ($indiff)
{
// If we're in a diff proper, just set up the line
if ($indiffproper)
{
if (strlen($line) > 0 && ($line[0] == ' ' || $line[0] == '+' || $line[0] == '-'))
if ($line[0] == " " || $line[0] == "+" || $line[0] == "-")
{
$subline = escape(toOutputEncoding(substr($line, 1)));
$subline = rtrim($subline, "\n\r");
$subline = ($subline) ? expandTabs($subline) : '&nbsp;';
$listvar = &$listing[$index];
$listvar['line'] = $subline;
 
switch ($line[0])
{
case ' ':
$listvar['diffclass'] = 'diff';
if ($debug) print 'Including as diff: '.$subline.'<br />';
case " ":
$listing[$index]["diffclass"] = "diff";
$subline = hardspace(replaceEntities(rtrim(substr($line, 1)), $rep));
if (empty($subline)) $subline = "&nbsp;";
$listing[$index++]["line"] = $subline;
if ($debug) print "Including as diff: $subline<br />";
break;
 
case '+':
$listvar['diffclass'] = 'diffadded';
if ($debug) print 'Including as added: '.$subline.'<br />';
case "+":
$listing[$index]["diffclass"] = "diffadded";
$subline = hardspace(replaceEntities(rtrim(substr($line, 1)), $rep));
if (empty($subline)) $subline = "&nbsp;";
$listing[$index++]["line"] = $subline;
if ($debug) print "Including as added: $subline<br />";
break;
 
case '-':
$listvar['diffclass'] = 'diffdeleted';
if ($debug) print 'Including as removed: '.$subline.'<br />';
case "-":
$listing[$index]["diffclass"] = "diffdeleted";
$subline = hardspace(replaceEntities(rtrim(substr($line, 1)), $rep));
if (empty($subline)) $subline = "&nbsp;";
$listing[$index++]["line"] = $subline;
if ($debug) print "Including as removed: $subline<br />";
break;
}
$index++;
continue;
}
else if ($line != '\ No newline at end of file')
else
{
$indiffproper = false;
$listing[$index++]['enddifflines'] = true;
$listing[$index++]["enddifflines"] = true;
$getLine = false;
if ($debug) print 'Ending lines<br />';
}
if ($debug) print "Ending lines<br />";
continue;
}
}
 
// Check for the start of a new diff area
if (!strncmp($line, '@@', 2))
if (!strncmp($line, "@@", 2))
{
$pos = strpos($line, '+');
$pos = strpos($line, "+");
$posline = substr($line, $pos);
$sline = 0;
$eline = 0;
sscanf($posline, '+%d,%d', $sline, $eline);
 
if ($debug) print 'sline = "'.$sline.'", eline = "'.$eline.'"<br />';
 
sscanf($posline, "+%d,%d", $sline, $eline);
if ($debug) print "sline = '$sline', eline = '$eline'<br />";
// Check that this isn't a file deletion
if ($sline == 0 && $eline == 0)
{
$line = fgets($diff);
if ($debug) print 'Ignoring: "'.$line.'"<br />';
 
while ($line && ($line[0] == ' ' || $line[0] == '+' || $line[0] == '-'))
if ($debug) print "Ignoring: $line<br />" ;
while ($line[0] == " " || $line[0] == "+" || $line[0] == "-")
{
$line = fgets($diff);
if ($debug) print 'Ignoring: "'.$line.'"<br />';
if ($debug) print "Ignoring: $line<br />" ;
}
 
$getLine = false;
if ($debug) print 'Unignoring previous - marking as deleted<br />';
$listing[$index++]['info'] = $lang['FILEDELETED'];
 
if ($debug) print "Unignoring previous - marking as deleted<b>";
$listing[$index++]["info"] = $lang["FILEDELETED"];
}
else
{
$listvar = &$listing[$index];
$listvar['difflines'] = $line;
$sline = 0;
$slen = 0;
$eline = 0;
$elen = 0;
sscanf($line, '@@ -%d,%d +%d,%d @@', $sline, $slen, $eline, $elen);
$listvar['rev1line'] = $sline;
$listvar['rev1len'] = $slen;
$listvar['rev2line'] = $eline;
$listvar['rev2len'] = $elen;
 
$listing[$index++]["difflines"] = $line;
$indiffproper = true;
 
$index++;
}
 
continue;
 
}
else
{
$indiff = false;
if ($debug) print 'Ending diff';
if ($debug) print "Ending diff";
}
}
 
// Check for a new node entry
if (strncmp(trim($line), 'Index: ', 7) == 0)
if (strncmp(trim($line), "Index: ", 7) == 0)
{
// End the current node
if ($node)
{
$listing[$index++]['endpath'] = true;
$listing[$index++]["endpath"] = true;
clearVars();
}
 
$node = trim(toOutputEncoding($line));
$node = trim($line);
$node = substr($node, 7);
if ($node == '' || $node[0] != '/') $node = '/'.$node;
 
if (substr($path2, -strlen($node)) === $node)
{
$absnode = $path2;
}
else
{
$absnode = $path2;
if (substr($absnode, -1) == '/') $absnode = substr($absnode, 0, -1);
$absnode .= $node;
}
$listing[$index]["newpath"] = $node;
if ($debug) echo "Creating node $node<br />";
 
$listvar = &$listing[$index];
$listvar['newpath'] = escape($absnode);
 
$listvar['fileurl'] = $config->getURL($rep, $absnode, 'file').'rev='.$rev2;
 
if ($debug) echo 'Creating node '.$node.'<br />';
 
// Skip past the line of ='s
$line = fgets($diff);
if ($debug) print 'Skipping: '.$line.'<br />';
if ($debug) print "Skipping: $line<br />" ;
 
// Check for a file addition
$line = fgets($diff);
if ($debug) print 'Examining: '.$line.'<br />';
if (strpos($line, '(revision 0)'))
{
$listvar['info'] = $lang['FILEADDED'];
}
if ($debug) print "Examining: $line<br />" ;
if (strpos($line, "(revision 0)"))
$listing[$index]["info"] = $lang["FILEADDED"];
 
if (strncmp(trim($line), 'Cannot display:', 15) == 0)
if (strncmp(trim($line), "Cannot display:", 15) == 0)
{
$index++;
clearVars();
$listing[$index++]['info'] = escape(toOutputEncoding(rtrim($line, "\n\r")));
$listing[$index++]["info"] = $line;
continue;
}
 
// Skip second file info
$line = fgets($diff);
if ($debug) print 'Skipping: '.$line.'<br />';
if ($debug) print "Skipping: $line<br />" ;
 
$indiff = true;
$index++;
508,119 → 284,72
continue;
}
 
if (strncmp(trim($line), 'Property changes on: ', 21) == 0)
if (strncmp(trim($line), "Property changes on: ", 21) == 0)
{
$propnode = trim($line);
$propnode = substr($propnode, 21);
if ($propnode == '' || $propnode[0] != '/') $propnode = '/'.$propnode;
 
if ($debug) print 'Properties on '.$propnode.' (cur node $ '.$node.')';
if ($debug) print "Properties on $propnode (cur node $ $node)";
if ($propnode != $node)
{
if ($node)
{
$listing[$index++]['endpath'] = true;
$listing[$index++]["endpath"] = true;
clearVars();
}
 
$node = $propnode;
 
$listing[$index++]['newpath'] = escape(toOutputEncoding($node));
$listing[$index++]["newpath"] = $node;
clearVars();
}
 
$listing[$index++]['properties'] = true;
$listing[$index++]["properties"] = true;
clearVars();
if ($debug) echo 'Creating node '.$node.'<br />';
if ($debug) echo "Creating node $node<br />";
 
// Skip the row of underscores
$line = fgets($diff);
if ($debug) print 'Skipping: '.$line.'<br />';
if ($debug) print "Skipping: $line<br />" ;
 
while ($line = rtrim(fgets($diff), "\n\r"))
while ($line = trim(fgets($diff)))
{
if (!strncmp(trim($line), 'Index: ', 7))
{
break;
}
if (!strncmp(trim($line), '##', 2) || $line == '\ No newline at end of file')
{
continue;
}
$listing[$index++]['info'] = escape(toOutputEncoding($line));
$listing[$index++]["info"] = $line;
clearVars();
}
$getLine = false;
 
continue;
}
 
// Check for error messages
if (strncmp(trim($line), 'svn: ', 5) == 0)
if (strncmp(trim($line), "svn: ", 5) == 0)
{
$listing[$index++]['info'] = urldecode($line);
$vars['success'] = false;
$listing[$index++]["info"] = urldecode($line);
$vars["success"] = false;
continue;
}
 
$listing[$index++]['info'] = escape(toOutputEncoding($line));
$listing[$index++]["info"] = $line;
if (strlen($line) === 0)
{
if (!isset($vars['warning']))
{
$vars['warning'] = "No changes between revisions";
}
}
}
 
if ($node)
{
clearVars();
$listing[$index++]['endpath'] = true;
$listing[$index++]["endpath"] = true;
}
 
if ($debug) print_r($listing);
 
if (!$rep->hasUnrestrictedReadAccess($relativePath1) || !$rep->hasUnrestrictedReadAccess($relativePath2, false))
{
// check every item for access and remove it if read access is not allowed
$restricted = array();
$inrestricted = false;
foreach ($listing as $i => $item)
{
if ($item['newpath'] !== null)
{
$newpath = $item['newpath'];
$inrestricted = !$rep->hasReadAccess($newpath, false);
}
 
if ($inrestricted)
{
$restricted[] = $i;
}
 
if ($item['endpath'] !== null)
{
$inrestricted = false;
}
}
$vars["version"] = $version;
 
foreach ($restricted as $i)
{
unset($listing[$i]);
}
if (!$rep->hasUnrestrictedReadAccess($path1) || !$rep->hasUnrestrictedReadAccess($path2, false))
$vars["noaccess"] = true;
 
if (count($restricted) && !count($listing))
{
$vars['error'] = $lang['NOACCESS'];
sendHeaderForbidden();
}
}
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."compare.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing);
 
pclose($diff);
}
}
 
renderTemplate('compare');
?>
/WebSVN/diff.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
23,212 → 25,334
// Show the differences between 2 revisions of a file.
//
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once 'include/template.php';
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/utils.inc");
require_once("include/template.inc");
 
require_once 'include/diff_inc.php';
$context = 5;
 
$vars['action'] = $lang['DIFF'];
$all = (@$_REQUEST['all'] == 1);
$ignoreWhitespace = $config->getIgnoreWhitespacesInDiff();
$vars["action"] = $lang["DIFF"];
$all = (@$_REQUEST["all"] == 1)?1:0;
 
if (array_key_exists('ignorews', $_REQUEST))
{
$ignoreWhitespace = (bool)$_REQUEST['ignorews'];
}
 
// Make sure that we have a repository
if (!$rep)
if (!isset($rep))
{
renderTemplate404('diff','NOREP');
echo $lang["NOREP"];
exit;
}
 
$svnrep = new SVNRepository($rep);
 
// If there's no revision info, go to the lastest revision for this path
$history = $svnrep->getLog($path, 'HEAD', 1, true, 2, ($path == '/') ? '' : $peg);
$history = $svnrep->getLog($path, "", "", true);
$youngest = $history->entries[0]->rev;
 
if (!$history)
{
unset($vars['error']);
$history = $svnrep->getLog($path, '', '', true, 2, ($path == '/') ? '' : $peg);
}
 
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : false;
 
if (empty($rev))
{
$rev = $youngest;
}
 
$history = $svnrep->getLog($path, $rev, 1, false, 2, $peg);
$history = $svnrep->getLog($path, $rev);
 
if ($path[0] != '/')
{
$ppath = '/'.$path;
}
if ($path{0} != "/")
$ppath = "/".$path;
else
{
$ppath = $path;
}
 
$prevrev = @$history->entries[1]->rev;
 
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath));
$vars['safepath'] = escape($ppath);
$vars['rev1'] = $rev;
$vars['rev2'] = $prevrev;
$vars['prevrev'] = $prevrev;
$vars["repname"] = $rep->getDisplayName();
$vars["rev"] = $rev;
$vars["path"] = $ppath;
$vars["prevrev"] = $prevrev;
 
if (isset($history->entries[0]))
$vars["rev1"] = $history->entries[0]->rev;
$vars["rev2"] = $prevrev;
 
createDirLinks($rep, $ppath, $rev, $showchanged);
 
$listing = array();
 
if ($prevrev)
{
$vars['log'] = xml_entities($history->entries[0]->msg);
$vars['date'] = $history->entries[0]->date;
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date));
$vars['author'] = $history->entries[0]->author;
$vars['rev'] = $vars['rev1'] = $history->entries[0]->rev;
$vars['peg'] = $peg;
$url = $config->getURL($rep, $path, "diff");
if (!$all)
{
$vars["showalllink"] = "<a href=\"${url}rev=$rev&amp;sc=$showchanged&amp;all=1\">${lang["SHOWENTIREFILE"]}</a>";
$vars["showcompactlink"] = "";
}
else
{
$vars["showcompactlink"] = "<a href=\"${url}rev=$rev&amp;sc=$showchanged&amp;all=0\">${lang["SHOWCOMPACT"]}</a>";
$vars["showalllink"] = "";
}
 
createPathLinks($rep, $ppath, $passrev, $peg);
$passRevString = createRevAndPegString($rev, $peg);
// Get the contents of the two files
$newtname = tempnam("temp", "");
$new = $svnrep->getFileContents($history->entries[0]->path, $newtname, $history->entries[0]->rev, "", true);
 
$passIgnoreWhitespace = '';
if ($ignoreWhitespace != $config->getIgnoreWhitespacesInDiff())
$oldtname = tempnam("temp", "");
$old = $svnrep->getFileContents($history->entries[1]->path, $oldtname, $history->entries[1]->rev, "", true);
$ent = true;
$extension = strrchr(basename($path), ".");
if (($extension && isset($extEnscript[$extension]) && ('php' == $extEnscript[$extension])) || ($config->useEnscript))
$ent = false;
 
$file1cache = array();
 
if ($all)
$context = 1; // Setting the context to 0 makes diff generate the wrong line numbers!
 
// Open a pipe to the diff command with $context lines of context
$cmd = quoteCommand($config->diff." --ignore-all-space -U $context $oldtname $newtname", false);
if ($all)
{
$passIgnoreWhitespace = '&amp;ignorews='.($ignoreWhitespace ? '1' : '0');
$ofile = fopen($oldtname, "r");
$nfile = fopen($newtname, "r");
}
 
if ($rev != $youngest)
if ($diff = popen($cmd, "r"))
{
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'diff').createRevAndPegString('', $peg).$passIgnoreWhitespace;
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>';
}
// Ignore the 3 header lines
$line = fgets($diff);
$line = fgets($diff);
 
$revurl = $config->getURL($rep, $path, 'diff');
// Get the first real line
$line = fgets($diff);
 
if ($rev < $youngest)
$index = 0;
$listing = array();
$curoline = 1;
$curnline = 1;
while (!feof($diff))
{
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg ? $peg : 'HEAD');
// Get the first line of this range
sscanf($line, "@@ -%d", $oline);
 
if (isset($history2->entries[1]))
$line = substr($line, strpos($line, "+"));
sscanf($line, "+%d", $nline);
if ($all)
{
$nextRev = $history2->entries[1]->rev;
if ($nextRev != $youngest)
while ($curoline < $oline || $curnline < $nline)
{
$vars['nextrev'] = $nextRev;
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg).$passIgnoreWhitespace;
$listing[$index]["rev1diffclass"] = "diff";
$listing[$index]["rev2diffclass"] = "diff";
if ($curoline < $oline)
{
$nl = fgets($ofile);
if ($ent)
$line = replaceEntities(rtrim($nl), $rep);
else
$line = rtrim($nl);
$listing[$index]["rev1line"] = hardspace($line);
 
$curoline++;
}
else
$listing[$index]["rev1line"] = "&nbsp;";
if ($curnline < $nline)
{
$nl = fgets($nfile);
 
if ($ent)
$line = replaceEntities(rtrim($nl), $rep);
else
$line = rtrim($nl);
$listing[$index]["rev2line"] = hardspace($line);
$curnline++;
}
else
$listing[$index]["rev2line"] = "&nbsp;";
 
unset($vars['error']);
$listing[$index]["rev1lineno"] = 0;
$listing[$index]["rev2lineno"] = 0;
 
$index++;
}
}
else
{
// Output the line numbers
$listing[$index]["rev1lineno"] = "$oline";
$listing[$index]["rev2lineno"] = "$nline";
$index++;
}
 
if (isset($history->entries[1]))
$fin = false;
while (!feof($diff) && !$fin)
{
$prevRev = $history->entries[1]->rev;
$prevPath = $history->entries[1]->path;
$vars['prevrev'] = $prevRev;
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg).$passIgnoreWhitespace;
$listing[$index]["rev1lineno"] = 0;
$listing[$index]["rev2lineno"] = 0;
 
$line = fgets($diff);
if (!strncmp($line, "@@", 2))
{
$fin = true;
}
else
{
$mod = $line{0};
 
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$passRevString;
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>';
if ($ent)
$line = replaceEntities(rtrim(substr($line, 1)), $rep);
else
$line = rtrim(substr($line, 1));
 
$vars['logurl'] = $config->getURL($rep, $path, 'log').$passRevString;
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>';
$listing[$index]["rev1line"] = hardspace($line);
 
$vars['filedetailurl'] = $config->getURL($rep, $path, 'file').$passRevString;
$vars['filedetaillink'] = '<a href="'.$vars['filedetailurl'].'">'.$lang['FILEDETAIL'].'</a>';
$text = hardspace($line);
if ($text == "") $text = "&nbsp;";
 
$vars['blameurl'] = $config->getURL($rep, $path, 'blame').$passRevString;
$vars['blamelink'] = '<a href="'.$vars['blameurl'].'">'.$lang['BLAME'].'</a>';
switch ($mod)
{
case "-":
$listing[$index]["rev1diffclass"] = "diffdeleted";
$listing[$index]["rev2diffclass"] = "diff";
 
if ($rep->isRssEnabled())
$listing[$index]["rev1line"] = $text;
$listing[$index]["rev2line"] = "&nbsp;";
if ($all)
{
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').createRevAndPegString('', $peg);
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>';
fgets($ofile);
$curoline++;
}
 
// Check for binary file type before diffing.
$svnMimeType = $svnrep->getProperty($path, 'svn:mime-type', $rev);
break;
 
// If no previous revision exists, bail out before diffing
if (!$rep->getIgnoreSvnMimeTypes() && preg_match('~application/*~', $svnMimeType))
case "+":
// Try to mark "changed" line sensibly
if (!empty($listing[$index-1]) && empty($listing[$index-1]["rev1lineno"]) && @$listing[$index-1]["rev1diffclass"] == "diffdeleted" && @$listing[$index-1]["rev2diffclass"] == "diff")
{
$vars['warning'] = 'Cannot display diff of binary file. (svn:mime-type = '.$svnMimeType.')';
$i = $index - 1;
while (!empty($listing[$i-1]) && empty($listing[$i-1]["rev1lineno"]) && $listing[$i-1]["rev1diffclass"] == "diffdeleted" && $listing[$i-1]["rev2diffclass"] == "diff")
$i--;
 
}
else if (!$prevrev)
$listing[$i]["rev1diffclass"] = "diffchanged";
$listing[$i]["rev2diffclass"] = "diffchanged";
$listing[$i]["rev2line"] = $text;
if ($all)
{
$vars['noprev'] = 1;
fgets($nfile);
$curnline++;
}
 
// Don't increment the current index count
$index--;
}
else
{
$diff = $config->getURL($rep, $path, 'diff').$passRevString;
$listing[$index]["rev1diffclass"] = "diff";
$listing[$index]["rev2diffclass"] = "diffadded";
 
$listing[$index]["rev1line"] = "&nbsp;";
$listing[$index]["rev2line"] = $text;
 
if ($all)
{
$vars['showcompactlink'] = '<a href="'.$diff.$passIgnoreWhitespace.'">'.$lang['SHOWCOMPACT'].'</a>';
fgets($nfile);
$curnline++;
}
else
{
$vars['showalllink'] = '<a href="'.$diff.$passIgnoreWhitespace.'&amp;all=1'.'">'.$lang['SHOWENTIREFILE'].'</a>';
}
break;
 
$passShowAll = ($all ? '&amp;all=1' : '');
$toggleIgnoreWhitespace = '';
default:
$listing[$index]["rev1diffclass"] = "diff";
$listing[$index]["rev2diffclass"] = "diff";
 
if ($ignoreWhitespace == $config->getIgnoreWhitespacesInDiff())
$listing[$index]["rev1line"] = $text;
$listing[$index]["rev2line"] = $text;
if ($all)
{
$toggleIgnoreWhitespace = '&amp;ignorews='.($ignoreWhitespace ? '0' : '1');
fgets($ofile);
fgets($nfile);
$curoline++;
$curnline++;
}
 
if ($ignoreWhitespace)
{
$vars['regardwhitespacelink'] = '<a href="'.$diff.$passShowAll.$toggleIgnoreWhitespace.'">'.$lang['REGARDWHITESPACE'].'</a>';
break;
}
else
{
$vars['ignorewhitespacelink'] = '<a href="'.$diff.$passShowAll.$toggleIgnoreWhitespace.'">'.$lang['IGNOREWHITESPACE'].'</a>';
}
 
// Get the contents of the two files
$newerFile = tempnamWithCheck($config->getTempDir(), '');
$newerFileHl = $newerFile.'highlight';
$normalNew = $svnrep->getFileContents($history->entries[0]->path, $newerFile, $history->entries[0]->rev, $peg, '', 'no');
$highlightedNew = $svnrep->getFileContents($history->entries[0]->path, $newerFileHl, $history->entries[0]->rev, $peg, '', 'line');
if (!$fin)
$index++;
}
}
 
$olderFile = tempnamWithCheck($config->getTempDir(), '');
$olderFileHl = $olderFile.'highlight';
$normalOld = $svnrep->getFileContents($history->entries[0]->path, $olderFile, $history->entries[1]->rev, $peg, '', 'no');
$highlightedOld = $svnrep->getFileContents($history->entries[0]->path, $olderFileHl, $history->entries[1]->rev, $peg, '', 'line');
// TODO: Figured out why diffs across a move/rename are currently broken.
// Output the rest of the files
if ($all)
{
while (!feof($ofile) || !feof($nfile))
{
$listing[$index]["rev1diffclass"] = "diff";
$listing[$index]["rev2diffclass"] = "diff";
 
$highlighted = ($highlightedNew && $highlightedOld);
if ($ent)
$line = replaceEntities(rtrim(fgets($ofile)), $rep);
else
$line = rtrim(fgets($ofile));
 
if ($highlighted)
{
$listing = do_diff($all, $ignoreWhitespace, $highlighted, $newerFile, $olderFile, $newerFileHl, $olderFileHl);
if (!feof($ofile))
$listing[$index]["rev1line"] = hardspace($line);
else
$listing[$index]["rev1line"] = "&nbsp;";
if ($ent)
$line = replaceEntities(rtrim(fgets($nfile)), $rep);
else
$line = rtrim(fgets($nfile));
 
if (!feof($nfile))
$listing[$index]["rev2line"] = hardspace($line);
else
$listing[$index]["rev2line"] = "&nbsp;";
$listing[$index]["rev1lineno"] = 0;
$listing[$index]["rev2lineno"] = 0;
 
$index++;
}
else
}
pclose($diff);
}
if ($all)
{
$listing = do_diff($all, $ignoreWhitespace, $highlighted, $newerFile, $olderFile, null, null);
fclose($ofile);
fclose($nfile);
}
 
// Remove our temporary files
@unlink($newerFile);
@unlink($olderFile);
@unlink($newerFileHl);
@unlink($olderFileHl);
unlink($oldtname);
unlink($newtname);
}
 
if (!$rep->hasReadAccess($path, false))
else
{
$vars['error'] = $lang['NOACCESS'];
sendHeaderForbidden();
$vars["noprev"] = 1;
}
 
renderTemplate('diff');
$vars["version"] = $version;
 
if (!$rep->hasReadAccess($path, false))
$vars["noaccess"] = true;
 
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."diff.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing);
?>
/WebSVN/form.php
0,0 → 1,66
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// form.php
//
// Handling of WebSVN forms
 
require_once("include/setup.inc");
require_once("include/utils.inc");
 
// Generic redirect handling
 
function redirect($loc)
{
$url= getFullURL($loc);
# technically, a die(header('Location: '.$url)); would suffice for all web browsers... ~J
header("Location: $url");
echo "<html>\n <head>\n <title>Redirecting...</title>\n <meta http-equiv='refresh' content='0; url=$url' />
<script type='application/x-javascript'><![CDATA[ window.location.href = '$url'; ]]></script>
</head>
<body>
<p>If you are not automatically redirected, please click <a href='$url'>here</a> to continue.</p>
</body>\n</html>";
}
 
// Handle project selection
 
if (@$_REQUEST["selectproj"])
{
$basedir = dirname($_SERVER["PHP_SELF"]);
if ($basedir != "" && $basedir != DIRECTORY_SEPARATOR && $basedir != "\\" && $basedir != "/" )
$basedir .= "/";
else
$basedir = "/";
$url = $config->getURL($rep, "/", "dir");
$url = html_entity_decode($url);
if ($config->multiViews)
redirect($url."sc=$showchanged");
else
redirect($basedir.$url."sc=$showchanged");
}
 
 
?>
/WebSVN/index.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
20,100 → 22,91
//
// index.php
//
// Main page which lists all configured repositories (optionally by groups).
// Main page. Lists all the projects
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/template.php';
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/template.inc");
 
$vars['action'] = $lang['PROJECTS'];
$vars['repname'] = '';
$vars['rev'] = 0;
$vars['path'] = '';
$vars['safepath'] = escape('');
$vars['showlastmod'] = $config->showLastModInIndex();
$vars["action"] = $lang["PROJECTS"];
$vars["repname"] = "";
$vars["rev"] = 0;
$vars["path"] = "";
 
// Sort the repositories by group
$config->sortByGroup();
 
if ($config->flatIndex)
{
// Create the flat view
$projects = $config->getRepositories();
$i = 0;
$listing = array ();
foreach ($projects as $project)
{
if ($project->hasReadAccess("/", true))
{
$url = $config->getURL($project, "/", "dir");
 
if (count($projects) == 1 && $projects[0]->hasReadAccess('/')) {
header('Location: '.str_replace('&amp;', '', $config->getURL($projects[0], '', 'dir')));
exit;
$listing[$i]["rowparity"] = $i % 2;
$listing[$i++]["projlink"] = "<a href=\"${url}sc=0\">".$project->getDisplayName()."</a>";
}
}
$vars["flatview"] = true;
$vars["treeview"] = false;
}
else
{
// Create the tree view
 
$projects = $config->getRepositories();
reset($projects);
$i = 0;
$parity = 0; // Alternates between every entry, whether it is a group or project
$groupparity = 0; // The first project (and first of any group) resets this to 0
$curgroup = null;
$groupcount = 0;
$listing = array ();
$curgroup = NULL;
$parity = 0;
foreach ($projects as $project)
{
if ($project->hasReadAccess("/", true))
{
$listing[$i]["rowparity"] = $parity % 2;
$url = $config->getURL($project, "/", "dir");
if ($curgroup != $project->group)
{
# TODO: this should be de-soupified
if (!empty($curgroup))
$listing[$i]["listitem"] = "</div>\n"; // Close the switchcontent div
else
$listing[$i]["listitem"] = "";
 
// Create listing of all configured projects (includes groups if they are used).
foreach ($projects as $project) {
if (!$project->hasReadAccess('/'))
continue;
$listing[$i]["isprojlink"] = false;
$listing[$i]["isgrouphead"] = true;
 
$listvar = &$listing[$i];
// If this is the first project in a group, add an entry for the group.
if ($curgroup != $project->group) {
$groupcount++;
$groupparity = 0;
$listvar['notfirstgroup'] = !empty($curgroup);
$curgroup = $project->group;
$listvar['groupname'] = $curgroup; // Applies until next group is set.
$listvar['groupid'] = strtr(base64_encode('grp'.$curgroup), array('+' => '-', '/' => '_', '=' => ''));
 
// setting to null because template.php won't unset them
$listvar['projectlink'] = null;
$listvar['projectname'] = null;
$listvar['projecturl'] = null;
$i++; // Causes the subsequent lines to store data in the next array slot.
$listvar = &$listing[$i];
$listvar['groupid'] = null;
$listing[$i++]["listitem"] .= "<div class=\"groupname\" onclick=\"expandcontent(this, '$curgroup');\" style=\"cursor:hand; cursor:pointer\"><div class=\"a\"><span class=\"showstate\"></span>$curgroup</div></div>\n<div id=\"$curgroup\" class=\"switchcontent\">";
}
$listvar['clientrooturl'] = $project->clientRootURL;
 
// Populate variables for latest modification to the current repository
if ($config->showLastModInIndex()) {
$svnrep = new SVNRepository($project);
$log = $svnrep->getLog('/', '', '', true, 1);
 
if (isset($log->entries[0])) {
$head = $log->entries[0];
$listvar['revision'] = $head->rev;
$listvar['date'] = $head->date;
$listvar['age'] = datetimeFormatDuration(time() - strtotime($head->date));
$listvar['author'] = $head->author;
} else {
$listvar['revision'] = 0;
$listvar['date'] = '';
$listvar['age'] = '';
$listvar['author'] = '';
$parity++;
$listing[$i]["isgrouphead"] = false;
$listing[$i]["isprojlink"] = true;
$listing[$i++]["listitem"] = "<a href=\"${url}sc=0\">".$project->name."</a>\n";
}
}
 
// Create project (repository) listing
$url = str_replace('&amp;', '', $config->getURL($project, '', 'dir'));
$name = ($config->flatIndex) ? $project->getDisplayName() : $project->name;
$listvar['projectlink'] = '<a href="'.$url.'">'.escape($name).'</a>';
$listvar['projectname'] = escape($name);
$listvar['projecturl'] = $url;
$listvar['rowparity'] = $parity % 2;
$parity++;
$listvar['groupparity'] = $groupparity % 2;
$groupparity++;
$listvar['groupname'] = ($curgroup != null) ? $curgroup : '';
$i++;
}
if (!empty($curgroup))
$listing[$i]["isprojlink"] = false;
$listing[$i]["isgrouphead"] = false;
$listing[$i]["listitem"] = "</div>"; // Close the switchcontent div
 
if (empty($listing) && !empty($projects)) {
$vars['error'] = $lang['NOACCESS'];
sendHeaderForbidden();
$vars["flatview"] = false;
$vars["treeview"] = true;
$vars["opentree"] = $config->openTree;
}
 
$vars['flatview'] = $config->flatIndex;
$vars['treeview'] = !$config->flatIndex;
$vars['opentree'] = $config->openTree;
$vars['groupcount'] = $groupcount; // Indicates whether any groups were present.
$vars["version"] = $version;
parseTemplate($config->getTemplatePath()."header.tmpl", $vars, $listing);
parseTemplate($config->getTemplatePath()."index.tmpl", $vars, $listing);
parseTemplate($config->getTemplatePath()."footer.tmpl", $vars, $listing);
 
renderTemplate('index');
?>
/WebSVN/install.txt
0,0 → 1,216
 
WHY WebSVN?
 
WebSVN offers a view onto your subversion repositories that's been designed
to reflect the Subversion methodology. You can view the log of any file or
directory and see a list of all the files changed, added or deleted in any
given revision. You can also view the differences between 2 versions of a
file so as to see exactly what was changed in a particular revision.
 
WebSVN offers the following features:
 
* Easy to use interface
* Highly customisable templating system
* Colourisation of file listings
* Blame view
* Log message searching
* Fast browsing thanks to internal caching feature
* Apache MultiViews support
* RSS feed support
 
Since it's written using PHP, WebSVN is also very portable and easy to install.
 
INSTALLATION
 
Grab the source and stick it somewhere that your server can get to. You
obviously need to have PHP installed and working. Also note that WebSVN
won't currently work in safe mode, due to the need to call svnlook.
 
You'll also need diff (preferably the GNU version; for Windows users I'd
recommend the Cygwin version) and svnlook available.
 
Rename distconfig.inc as config.inc (found in the includes directory)and then
edit it as directed in the file itself.
 
If everything has gone well, you should be able to view your projects by
pointing your browser at the index.php file.
 
For those of you wishing to customise the look and feel a little, you should
read templates.txt, which explains the highly configurable template system.
 
Windows users - note that some of the features offered by WebSVN, when
enabled, require the use of various external programs. They can be downloaded
from these locations:
 
Diff/Sed/Gzip/Tar: http://www.cygwin.com/
Enscript: http://people.ssh.com/mtr/genscript/
 
ACCENTED CHARACTERS
 
WebSVN is designed to worked with accented characters. To do this, it uses
the iconv function. This may not be installed on your system. If you aren't
getting the characters that you expect, make sure that the iconv module is
being loaded in php.ini. Windows users will need to copy the appropriate
DLLs to the system directory (from the PHP installation directory).
 
CACHING
 
In order to return results with a reasonable speed, WebSVN caches the results
of it's requests to svnlook. Under normal usage this works correctly since
it's not generally possible to change a revision with subversion.
 
That said, one case that may cause confusion is if someone changes the log
message of a given revision. WebSVN will have cached the previous log message
and won't know that there's a new one available. There are various solutions
to this problem:
 
1) Turn off caching in the config file. This will severely impede the
perfomance of WebSVN.
 
2) Change the post-revprop-change hook so that is deletes the contents of the
cache after any change to a revision property
 
3) Only allow the administrator to change revision properties. He can then
delete the cache by hand should this occur.
 
COLOURISATION
 
You can few files with syntax colouring if you have Enscript 1.6 or higher
installed on your system. You'll also need Sed.
 
Simply set the paths in the config file and then uncomment the line:
 
$config->useEnscript();
 
MULTIVIEWS
 
You may choose to configure access to your repository via Apache's MultiView
system. This will enable you to access a respositoy using a url such as:
 
http://servername/wsvn/repname/path/in/repository
 
To do this you must:
 
- Place wsvn.php where you want to. Normally you place it such that it's
accessible straight after the servername, as shown above.
 
- Configure the parent directory of wsvn.php to use MultiViews (see Apache
docs).
 
- Change config.inc to include the line $config->useMultiViews();
 
- Change the paths configured at the beginning of the wsvn.php script.
 
Now go to http://servername/wsvn/ and make sure that you get the index page.
 
The repname part of the URL is the name given to it in the config.inc file.
For this reason you may wish to avoid putting spaces in the name.
 
MULTIVIEWS EXAMPLE
 
First, you must get the Multiviews option working. In my set up, my Apache
directory root is set to a location on my harddrive:
 
DocumentRoot "D:/svnpage"
 
In that directory, I have WebSVN installed in a directory called websvn.
Normally WebSVN would be accessed by http://servername/websvn
 
wsvn.php in then copied from the WebSVN installation to the document root
directory and the variables at the beginning of the script configured as
follows (based on your own directory locations, obviously):
 
// Location of websvn directory via HTTP
//
// e.g. For http://servername/websvn use /websvn
//
// Note that wsvn.php need not be in the /websvn directory (and normally isn't).
$locwebsvnhttp = "/websvn";
 
// Physical location of websvn directory
$locwebsvnreal = "d:/svnpage/websvn";
 
Next, turn on Multiviews in the WebSVN config.inc file:
 
$config->useMultiViews();
 
Finally, Apache needs to know that you want to enable MultiViews for the root
directory. This can be done by including this line in the directory's
.htaccess file (assuming that the appropriate AllowOverrides directive is set
up):
 
Options MultiViews
 
 
If all has gone well, repositories should now by accessible by
http://servername/wsvn/repname
 
Note the index page can be accessed through http://servername/wsvn
If you want to view the index page by http://servername/ you need to
add another directive to the .htaccess file:
 
DirectoryIndex wsvn.php
 
ACCESS RIGHTS AND AUTHENTICATION
 
You may wish to provide an authentication mechanism for WebSVN. One obvious
solution is to protect the entire WebSVN directory with some form of Apache
authentication mechanism, but that doesn't allow for per repository
authentication.
 
WebSVN provides and access rights mechanism that uses your SVN access file to
control read access to the repository. This means that you only have to
maintain one file to define both Subversion and WebSVN access rights.
 
For this to work, you need to configure your authentication method to the /WebSVN/
(or /wsvn/) directory. This should be the same authentication as you use for
the svn repositories themselves. Here's an example using SSPI:
 
<Location /WebSVN/>
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain IMAJEMAIL
SSPIOfferBasic On
Require valid-user
</Location>
 
Note the use of the / after /WebSVN/ in the location directive. If you use
<Location /WebSVN> then you won't be able to access the index.
 
You should change /WebSVN/ to /wsvn/ if you're using multiviews.
 
Also note that you shouldn't use the AuthzSVNAccessFile command to define the
access file.
 
Now that you've defined your authentication, you'll be asked for your user name
and password in order to access the WebSVN directory. All that's left is to
configure WebSVN to use your Subversion access file to control access. Add this
line to your config.inc file:
 
$config->useAuthenticationFile("/path/to/accessfile");
 
Note that if your access file gives read access to, for example, path /a/b/c/ but
not to /a/b/, then the user will be given restricted access to /a/b/ in order to
reach /a/b/c/. The user will not be able to see any other files or directories in
/a or /a/b/.
 
You should read the Subversion book for information on the access file format.
 
COMMON PROBLEMS
 
1) On a Windows machine, this error is reported:
 
Warning: shell_exec(): Unable to execute
 
If you experience this problem, you need to give IUSR_<machinename> execute
permissions on %systemroot%\system32\cmd.exe. Under most systems, the file will
be C:\WINDOWS\system32\cmd.exe.
 
Right-click on the file, choose properties, and on the security tab click
the "Add" button. Add the IUSR_<machinename> user, and then select the
"read" and "read & execute" boxes.
 
LICENCE
 
GNU Public licence.
/WebSVN/licence.txt
0,0 → 1,280
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
 
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
Preamble
 
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
 
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
 
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
 
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
 
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
 
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
 
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
 
The precise terms and conditions for copying, distribution and
modification follow.
 
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
 
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
 
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
 
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
 
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
 
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
 
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
 
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
 
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
 
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
 
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
 
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
 
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
 
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
 
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
 
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
 
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
 
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
 
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
 
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
 
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
 
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
 
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
 
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
 
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
 
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
 
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
 
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
 
NO WARRANTY
 
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
 
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
 
END OF TERMS AND CONDITIONS
/WebSVN/log.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
22,47 → 24,28
//
// Show the logs for the given path
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once 'include/template.php';
require_once 'include/bugtraq.php';
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/utils.inc");
require_once("include/template.inc");
require_once("include/bugtraq.inc");
 
$page = (int)@$_REQUEST['page'];
$all = @$_REQUEST['all'] == 1;
$isDir = @$_REQUEST['isdir'] == 1 || $path == '' || $path == '/';
 
// Make sure that we have a repository
if (!$rep)
{
renderTemplate404('log','NOREP');
}
 
if (isset($_REQUEST['showchanges']))
{
$showchanges = @$_REQUEST['showchanges'] == 1;
}
else
{
$showchanges = $rep->logsShowChanges();
}
 
$search = trim((string) @$_REQUEST['search']);
$dosearch = strlen($search) > 0;
 
$page = (int)@$_REQUEST["page"];
$all = (@$_REQUEST["all"] == 1)?1:0;
$isDir = (@$_REQUEST["isdir"] == 1)?1:0;
$dosearch = (@$_REQUEST["logsearch"] == 1)?1:0;
$search = trim(@$_REQUEST["search"]);
$words = preg_split('#\s+#', $search);
$fromRev = (int)@$_REQUEST['fr'];
$startrev = strtoupper(trim((string) @$_REQUEST['sr']));
$endrev = strtoupper(trim((string) @$_REQUEST['er']));
$max = isset($_REQUEST['max']) ? (int)$_REQUEST['max'] : false;
$fromRev = (int)@$_REQUEST["fr"];
$startrev = strtoupper(trim(@$_REQUEST["sr"]));
$endrev = strtoupper(trim(@$_REQUEST["er"]));
$max = @$_REQUEST["max"];
 
// Max number of results to find at a time
$numSearchResults = 20;
$numSearchResults = 15;
 
if ($search == '')
{
if ($search == "")
$dosearch = false;
}
 
// removeAccents
//
72,9 → 55,9
 
function removeAccents($string)
{
$string = htmlentities($string, ENT_QUOTES, 'ISO-8859-1');
$string = preg_replace('/&([A-Za-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron);/', '$1', $string);
return $string;
return strtr($string,
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn");
}
 
// Normalise the search words
87,187 → 70,76
unset($words[$index]);
}
 
if (empty($page))
{
$page = 1;
}
if (empty($page)) $page = 1;
 
// If searching, display all the results
if ($dosearch)
{
$all = true;
}
$all = (bool) $dosearch;
 
$maxperpage = 20;
 
$svnrep = new SVNRepository($rep);
 
$history = $svnrep->getLog($path, 'HEAD', '', false, 1, ($path == '/') ? '' : $peg);
 
if (!$history)
// Make sure that we have a repository
if (!isset($rep))
{
unset($vars['error']);
$history = $svnrep->getLog($path, '', '', false, 1, ($path == '/') ? '' : $peg);
 
if (!$history)
{
renderTemplate404('log','NOPATH');
echo $lang["NOREP"];
exit;
}
}
 
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : 0;
$svnrep = new SVNRepository($rep);
 
if (empty($startrev))
{
//$startrev = ($rev) ? $rev : 'HEAD';
$startrev = $rev;
}
else if ($startrev != 'HEAD' && $startrev != 'BASE' && $startrev != 'PREV' && $startrev != 'COMMITTED')
{
$startrev = (int)$startrev;
}
$passrev = $rev;
 
if (empty($endrev))
{
$endrev = 1;
}
else if ($endrev != 'HEAD' && $endrev != 'BASE' && $endrev != 'PREV' && $endrev != 'COMMITTED')
{
$endrev = (int)$endrev;
}
// If there's no revision info, go to the lastest revision for this path
$history = $svnrep->getLog($path, "", "", true);
$youngest = $history->entries[0]->rev;
 
if (empty($rev))
{
$rev = $youngest;
}
 
if (empty($startrev))
{
$startrev = $rev;
}
 
// make sure path is prefixed by a /
$ppath = $path;
if ($path == "" || $path{0} != "/")
$ppath = "/".$path;
 
if ($path == '' || $path[0] != '/')
{
$ppath = '/'.$path;
}
$vars["action"] = $lang["LOG"];
$vars["repname"] = $rep->getDisplayName();
$vars["rev"] = $rev;
$vars["path"] = $ppath;
 
$vars['action'] = $lang['LOG'];
$vars['rev'] = $rev;
$vars['peg'] = $peg;
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath));
$vars['safepath'] = escape($ppath);
createDirLinks($rep, $ppath, $passrev, $showchanged);
 
if ($history && isset($history->entries[0]))
{
$vars['log'] = xml_entities($history->entries[0]->msg);
$vars['date'] = $history->entries[0]->date;
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date));
$vars['author'] = $history->entries[0]->author;
}
$logurl = $config->getURL($rep, $path, "log");
 
if ($max === false)
{
$max = ($dosearch) ? 0 : 40;
}
else if ($max < 0)
{
$max = 40;
}
 
// TODO: If the rev is less than the head, get the path (may have been renamed!)
// Will probably need to call `svn info`, parse XML output, and substring a path
 
createPathLinks($rep, $ppath, $passrev, $peg);
$passRevString = createRevAndPegString($rev, $peg);
$isDirString = ($isDir) ? 'isdir=1&amp;' : '';
 
unset($queryParams['repname']);
unset($queryParams['path']);
 
// Toggle 'showchanges' param for link to switch from the current behavior
if ($showchanges == $rep->logsShowChanges())
{
$queryParams['showchanges'] = (int)!$showchanges;
}
if ($rev != $youngest)
$vars["goyoungestlink"] = "<a href=\"${logurl}sc=1\">${lang["GOYOUNGEST"]}</a>";
else
{
unset($queryParams['showchanges']);
}
$vars["goyoungestlink"] = "";
 
$vars['changesurl'] = $config->getURL($rep, $path, 'log').buildQuery($queryParams);
$vars['changeslink'] = '<a href="'.$vars['changesurl'].'">'.$lang[($showchanges ? 'HIDECHANGED' : 'SHOWCHANGED')].'</a>';
$vars['showchanges'] = $showchanges;
// We get the bugtraq variable just once based on the HEAD
$bugtraq = new Bugtraq($rep, $svnrep, $ppath);
 
// Revert 'showchanges' param to propagate the current behavior
if ($showchanges == $rep->logsShowChanges())
{
unset($queryParams['showchanges']);
}
else
{
$queryParams['showchanges'] = (int)$showchanges;
}
if ($startrev != "HEAD") $startrev = (int)$startrev;
if (empty($startrev)) $startrev = $rev;
if (empty($endrev)) $endrev = 1;
 
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$isDirString.$passRevString;
 
if ($isDir)
if (empty($_REQUEST["max"]))
{
$vars['directoryurl'] = $config->getURL($rep, $path, 'dir').$passRevString.'#'.anchorForPath($path);
$vars['directorylink'] = '<a href="'.$vars['directoryurl'].'">'.$lang['LISTING'].'</a>';
}
if (empty($_REQUEST["logsearch"]))
$max = 30;
else
{
$vars['filedetailurl'] = $config->getURL($rep, $path, 'file').$passRevString;
$vars['filedetaillink'] = '<a href="'.$vars['filedetailurl'].'">'.$lang['FILEDETAIL'].'</a>';
 
$vars['blameurl'] = $config->getURL($rep, $path, 'blame').$passRevString;
$vars['blamelink'] = '<a href="'.$vars['blameurl'].'">'.$lang['BLAME'].'</a>';
 
$vars['diffurl'] = $config->getURL($rep, $path, 'diff').$passRevString;
$vars['difflink'] = '<a href="'.$vars['diffurl'].'">'.$lang['DIFFPREV'].'</a>';
$max = 0;
}
 
if ($rep->isRssEnabled())
{
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').$isDirString.createRevAndPegString('', $peg);
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>';
}
 
if ($rev != $youngest)
{
if ($path == '/')
{
$vars['goyoungesturl'] = $config->getURL($rep, '', 'log').$isDirString;
}
else
{
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'log').$isDirString.'peg='.($peg ? $peg : $rev);
$max = (int)$max;
if ($max < 0) $max = 30;
}
 
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>';
}
$history = $svnrep->getLog($path, $startrev, $endrev, true, $max);
$vars["logsearch_moreresultslink"] = "";
$vars["pagelinks"] = "";
$vars["showalllink"] = "";
$listing = array();
 
// We get the bugtraq variable just once based on the HEAD
$bugtraq = new Bugtraq($rep, $svnrep, $ppath);
 
$vars['logsearch_moreresultslink'] = '';
$vars['pagelinks'] = '';
$vars['showalllink'] = '';
 
if ($history)
{
$history = $svnrep->getLog($path, $startrev, $endrev, true, $max, $peg);
 
if (empty($history))
{
unset($vars['error']);
$vars['warning'] = 'Revision '.$startrev.' of this resource does not exist.';
}
}
 
if (!empty($history))
{
// Get the number of separate revisions
287,35 → 159,24
 
if ($page > $pages) $page = $pages;
 
// Work out where to start and stop
// Word out where to start and stop
$firstrevindex = ($page - 1) * $maxperpage;
$lastrevindex = min($firstrevindex + $maxperpage - 1, $revisions - 1);
$lastrevindex = $firstrevindex + $maxperpage - 1;
if ($lastrevindex > $revisions - 1) $lastrevindex = $revisions - 1;
}
 
$frev = isset($history->entries[0]) ? $history->entries[0]->rev : false;
$brev = isset($history->entries[$firstrevindex]) ? $history->entries[$firstrevindex]->rev : false;
$erev = isset($history->entries[$lastrevindex]) ? $history->entries[$lastrevindex]->rev : false;
$history = $svnrep->getLog($path, $history->entries[$firstrevindex ]->rev, $history->entries[$lastrevindex]->rev, false, 0);
 
$entries = array();
 
if ($brev && $erev)
{
$history = $svnrep->getLog($path, $brev, $erev, false, 0, $peg, true);
if ($history)
{
$entries = $history->entries;
}
}
 
$row = 0;
$index = 0;
$listing = array();
$found = false;
 
foreach ($entries as $revision)
foreach ($history->entries as $r)
{
// Assume a good match
$match = true;
$thisrev = $revision->rev;
$thisrev = $r->rev;
 
// Check the log for the search words, if searching
if ($dosearch)
327,7 → 188,7
// Make sure that each word in the search in also in the log
foreach ($words as $word)
{
if (strpos(strtolower(removeAccents($revision->msg)), $word) === false && strpos(strtolower(removeAccents($revision->author)), $word) === false)
if (strpos(strtolower(removeAccents($r->msg)), $word) === false)
{
$match = false;
break;
341,81 → 202,43
}
}
else
{
$match = false;
}
}
 
$thisRevString = createRevAndPegString($thisrev, ($peg ? $peg : $thisrev));
 
if ($match)
{
// Add the trailing slash if we need to (svnlook history doesn't return trailing slashes!)
$rpath = $revision->path;
$rpath = $r->path;
 
if (empty($rpath))
{
$rpath = '/';
}
else if ($isDir && $rpath[strlen($rpath) - 1] != '/')
{
$rpath .= '/';
}
$rpath = "/";
else if ($isDir && $rpath{strlen($rpath) - 1} != "/")
$rpath .= "/";
 
$precisePath = $revision->precisePath;
if (empty($precisePath))
{
$precisePath = '/';
}
else if ($isDir && $precisePath[strlen($precisePath) - 1] != '/')
{
$precisePath .= '/';
}
 
// Find the parent path (or the whole path if it's already a directory)
$pos = strrpos($rpath, '/');
$pos = strrpos($rpath, "/");
$parent = substr($rpath, 0, $pos + 1);
 
$compareValue = (($isDir) ? $parent : $rpath).'@'.$thisrev;
$url = $config->getURL($rep, $parent, "dir");
$listing[$index]["revlink"] = "<a href=\"${url}rev=$thisrev&amp;sc=1\">$thisrev</a>";
 
$listvar = &$listing[$index];
$listvar['compare_box'] = '<input type="checkbox" name="compare[]" value="'.$compareValue.'" onclick="enforceOnlyTwoChecked(this)" />';
$url = $config->getURL($rep, $rpath, 'revision').$thisRevString;
$listvar['revlink'] = '<a href="'.$url.'">'.$thisrev.'</a>';
 
$url = $config->getURL($rep, $precisePath, ($isDir ? 'dir' : 'file')).$thisRevString;
 
$listvar['revpathlink'] = '<a href="'.$url.'">'.escape($precisePath).'</a>';
$listvar['revpath'] = escape($precisePath);
$listvar['revauthor'] = $revision->author;
$listvar['revdate'] = $revision->date;
$listvar['revage'] = $revision->age;
$listvar['revlog'] = nl2br($bugtraq->replaceIDs(create_anchors(xml_entities($revision->msg))));
$listvar['rowparity'] = $row;
$listvar['compareurl'] = $config->getURL($rep, '', 'comp').'compare[]='.urlencode($rpath).'@'.($thisrev - 1).'&amp;compare[]='.urlencode($rpath).'@'.$thisrev;
 
if ($showchanges)
if ($isDir)
{
// Aggregate added/deleted/modified paths for display in table
$modpaths = array();
 
foreach ($revision->mods as $mod)
{
$modpaths[$mod->action][] = $mod->path;
$listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"$parent@$thisrev\" onclick=\"checkCB(this)\" />";
$url = $config->getURL($rep, $rpath, "dir");
$listing[$index]["revpathlink"] = "<a href=\"${url}rev=$thisrev&amp;sc=$showchanged\">$rpath</a>";
}
 
ksort($modpaths);
 
foreach ($modpaths as $action => $paths)
else
{
sort($paths);
$modpaths[$action] = $paths;
$listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"$rpath@$thisrev\" onclick=\"checkCB(this)\" />";
$url = $config->getURL($rep, $rpath, "file");
$listing[$index]["revpathlink"] = "<a href=\"${url}rev=$thisrev&amp;sc=$showchanged\">$rpath</a>";
}
 
$listvar['revadded'] = (isset($modpaths['A'])) ? implode('<br/>', escape($modpaths['A'])) : '';
$listvar['revdeleted'] = (isset($modpaths['D'])) ? implode('<br/>', escape($modpaths['D'])) : '';
$listvar['revmodified'] = (isset($modpaths['M'])) ? implode('<br/>', escape($modpaths['M'])) : '';
}
$listing[$index]["revauthor"] = $r->author;
$listing[$index]["revage"] = $r->age;
$listing[$index]["revlog"] = nl2br($bugtraq->replaceIDs(create_anchors($r->msg)));
$listing[$index]["rowparity"] = "$row";
 
$row = 1 - $row;
$index++;
424,135 → 247,87
// If we've reached the search limit, stop here...
if (!$numSearchResults)
{
$url = $config->getURL($rep, $path, 'log').$isDirString.$thisRevString;
$vars['logsearch_moreresultslink'] = '<a href="'.$url.'&amp;search='.$search.'&amp;fr='.$thisrev.'">'.$lang['MORERESULTS'].'</a>';
$url = $config->getURL($rep, $path, "log");
$vars["logsearch_moreresultslink"] = "<a href=\"${url}rev=$rev&amp;sc=$showchanged&amp;isdir=$isDir&amp;logsearch=1&amp;search=$search&amp;fr=$thisrev\">${lang["MORERESULTS"]}</a>";
break;
}
}
 
$vars['logsearch_resultsfound'] = true;
$vars["logsearch_resultsfound"] = true;
 
if ($dosearch && !$found)
{
if ($fromRev == 0)
{
$vars['logsearch_nomatches'] = true;
$vars['logsearch_resultsfound'] = false;
$vars["logsearch_nomatches"] = true;
$vars["logsearch_resultsfound"] = false;
}
else
{
$vars['logsearch_nomorematches'] = true;
$vars["logsearch_nomorematches"] = true;
}
}
else if ($dosearch && $numSearchResults > 0)
{
$vars['logsearch_nomorematches'] = true;
$vars["logsearch_nomorematches"] = true;
}
 
// Work out the paging options, create links to pages of results
// Work out the paging options
if ($pages > 1)
{
$prev = $page - 1;
$next = $page + 1;
echo "<p><center>";
 
unset($queryParams['page']);
$logurl = $config->getURL($rep, $path, 'log').buildQuery($queryParams);
 
if ($page > 1)
{
$vars['pagelinks'] .= '<a href="'.$logurl.(!$peg && $frev && $prev != 1 ? '&amp;peg='.$frev : '').'&amp;page='.$prev.'">&larr;'.$lang['PREV'].'</a>';
}
else
{
$vars['pagelinks'] .= '<span>&larr;'.$lang['PREV'].'</span>';
}
 
if ($page > 1) $vars["pagelinks"] .= "<a href=\"${logurl}rev=$rev&amp;sr=$startrev&amp;er=$endrev&amp;sc=$showchanged&amp;max=$max&amp;page=$prev\"><&nbsp;${lang["PREV"]}</a> ";
for ($p = 1; $p <= $pages; $p++)
{
if ($p != $page)
{
$vars['pagelinks'] .= '<a href="'.$logurl.(!$peg && $frev && $p != 1 ? '&amp;peg='.$frev : '').'&amp;page='.$p.'">'.$p.'</a>';
}
$vars["pagelinks"].= "<a href=\"${logurl}rev=$rev&amp;sr=$startrev&amp;er=$endrev&amp;sc=$showchanged&amp;max=$max&amp;page=$p\">$p</a> ";
else
{
$vars['pagelinks'] .= '<span id="curpage">'.$p.'</span>';
$vars["pagelinks"] .= "<b>$p </b>";
}
}
if ($page < $pages) $vars["pagelinks"] .=" <a href=\"${logurl}rev=$rev&amp;sr=$startrev&amp;er=$endrev&amp;sc=$showchanged&amp;max=$max&amp;page=$next\">${lang["NEXT"]}&nbsp;></a>";
 
if ($page < $pages)
{
$vars['pagelinks'] .= '<a href="'.$logurl.(!$peg && $frev ? '&amp;peg='.$frev : '').'&amp;page='.$next.'">'.$lang['NEXT'].'&rarr;</a>';
$vars["showalllink"] = "<a href=\"${logurl}rev=$rev&amp;sr=$startrev&amp;er=$endrev&amp;sc=$showchanged&amp;all=1&amp;max=$max\">${lang["SHOWALL"]}</a>";
echo "</center>";
}
else
{
$vars['pagelinks'] .= '<span>'.$lang['NEXT'].'&rarr;</span>';
}
 
$vars['showalllink'] = '<a href="'.$logurl.'&amp;all=1">'.$lang['SHOWALL'].'</a>';
}
}
// Create the project change combo box
 
// Create form elements for filtering and searching log messages
if ($config->multiViews)
{
$hidden = '<input type="hidden" name="op" value="log" />';
}
else
{
$hidden = '<input type="hidden" name="repname" value="'.$repname.'" />';
$hidden .= '<input type="hidden" name="path" value="'.$path.'" />';
}
$url = $config->getURL($rep, $path, "log");
# XXX: forms don't have the name attribute, but _everything_ has the id attribute,
# so what you're trying to do (if anything?) should be done via that ~J
$vars["logsearch_form"] = "<form action=\"$url\" method=\"post\" name=\"logsearchform\">";
 
if ($isDir)
{
$hidden .= '<input type="hidden" name="isdir" value="'.$isDir.'" />';
}
$vars["logsearch_startbox"] = "<input name=\"sr\" size=\"5\" value=\"$startrev\" />";
$vars["logsearch_endbox" ] = "<input name=\"er\" size=\"5\" value=\"$endrev\" />";
$vars["logsearch_maxbox" ] = "<input name=\"max\" size=\"5\" value=\"".($max==0?"":$max)."\" />";
$vars["logsearch_inputbox"] = "<input name=\"search\" value=\"$search\" />";
 
if ($peg)
{
$hidden .= '<input type="hidden" name="peg" value="'.$peg.'" />';
}
$vars["logsearch_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\" />";
$vars["logsearch_endform"] = "<input type=\"hidden\" name=\"logsearch\" value=\"1\" />".
"<input type=\"hidden\" name=\"op\" value=\"log\" />".
"<input type=\"hidden\" name=\"rev\" value=\"$rev\" />".
"<input type=\"hidden\" name=\"sc\" value=\"$showchanged\" />".
"<input type=\"hidden\" name=\"isdir\" value=\"$isDir\" />".
"</form>";
 
if ($showchanges != $rep->logsShowChanges())
{
$hidden .= '<input type="hidden" name="showchanges" value="'.$showchanges.'" />';
}
$url = $config->getURL($rep, $path, "log");
$vars["logsearch_clearloglink"] = "<a href=\"${url}rev=$rev&amp;sc=$showchanged&amp;isdir=$isDir\">${lang["CLEARLOG"]}</a>";
 
$vars['logsearch_form'] = '<form method="get" action="'.$config->getURL($rep, $path, 'log').'" id="search">'.$hidden;
$vars['logsearch_startbox'] = '<input name="sr" size="5" value="'.$startrev.'" />';
$vars['logsearch_endbox'] = '<input name="er" size="5" value="'.$endrev.'" />';
$vars['logsearch_maxbox'] = '<input name="max" size="5" value="'.($max == 0 ? 40 : $max).'" />';
$vars['logsearch_inputbox'] = '<input name="search" value="'.escape($search).'" />';
$vars['logsearch_showall'] = '<input type="checkbox" name="all" value="1"'.($all ? ' checked="checked"' : '').' />';
$vars['logsearch_submit'] = '<input type="submit" value="'.$lang['GO'].'" />';
$vars['logsearch_endform'] = '</form>';
$url = $config->getURL($rep, "/", "comp");
$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">";
$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREREVS"]}\" />";
$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>";
 
// If a filter is in place, produce a link to clear all filter parameters
if ($page !== 1 || $all || $dosearch || $fromRev || $startrev !== $rev || $endrev !== 1 || $max !== 40)
{
$url = $config->getURL($rep, $path, 'log').$isDirString.$passRevString;
$vars['logsearch_clearloglink'] = '<a href="'.$url.'">'.$lang['CLEARLOG'].'</a>';
}
$vars["version"] = $version;
 
// Create form elements for comparing selected revisions
$vars['compare_form'] = '<form method="get" action="'.$config->getURL($rep, '', 'comp').'" id="compare">';
if (!$rep->hasReadAccess($path, false))
$vars["noaccess"] = true;
 
if ($config->multiViews)
{
$vars['compare_form'] .= '<input type="hidden" name="op" value="comp" />';
}
else
{
$vars['compare_form'] .= '<input type="hidden" name="repname" value="'.$repname.'" />';
}
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."log.tmpl", $vars, $listing);
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing);
 
$vars['compare_submit'] = '<input type="submit" value="'.$lang['COMPAREREVS'].'" />';
$vars['compare_endform'] = '</form>';
 
if (!$rep->hasReadAccess($path, false))
{
$vars['error'] = $lang['NOACCESS'];
sendHeaderForbidden();
}
 
renderTemplate('log');
?>
/WebSVN/rss.php
1,6 → 1,8
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright (C) 2004-2006 Tim Armes
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
22,140 → 24,147
//
// Creates an rss feed for the given repository number
 
require_once 'include/setup.php';
require_once 'include/svnlook.php';
require_once 'include/utils.php';
require_once 'include/template.php';
require_once 'include/bugtraq.php';
include("include/feedcreator.class.php");
 
$max = (int)@$_REQUEST['max'];
if ($max == 0)
$max = $config->getRssMaxEntries();
$quiet = (isset($_REQUEST['quiet']));
require_once("include/setup.inc");
require_once("include/svnlook.inc");
require_once("include/utils.inc");
require_once("include/template.inc");
 
$isDir = (@$_REQUEST["isdir"] == 1)?1:0;
 
$maxmessages = 20;
 
// Find the base URL name
if ($config->multiViews) {
$baseurl = '';
} else {
$baseurl = dirname($_SERVER['PHP_SELF']);
if ($baseurl != '' && $baseurl != DIRECTORY_SEPARATOR && $baseurl != '\\' && $baseurl != '/') {
$baseurl .= '/';
} else {
$baseurl = '/';
if ($config->multiViews)
{
$baseurl = "";
}
else
{
$baseurl = dirname($_SERVER["PHP_SELF"]);
if ($baseurl != "" && $baseurl != DIRECTORY_SEPARATOR && $baseurl != "\\" && $baseurl != "/" )
$baseurl .= "/";
else
$baseurl = "/";
}
 
if ($path == '' || $path[0] != '/') {
$ppath = '/'.$path;
} else {
$svnrep = new SVNRepository($rep);
 
if ($path == "" || $path{0} != "/")
$ppath = "/".$path;
else
$ppath = $path;
}
 
if (!$rep) {
http_response_code(404);
print 'Unable to access resource at path: '.xml_entities($path);
exit;
}
// Make sure that the user has full access to the specified directory
if (!$rep->hasReadAccess($path, false)) {
http_response_code(403);
print 'Unable to access resource at path: '.xml_entities($path);
if (!$rep->hasReadAccess($path, false))
exit;
}
 
$url = $config->getURL($rep, $path, "log");
$listurl = $config->getURL($rep, $path, "dir");
 
// If there's no revision info, go to the lastest revision for this path
$svnrep = new SVNRepository($rep);
$history = $svnrep->getLog($path, $rev, '', false, $max, $peg, !$quiet);
if (!$history) {
http_response_code(404);
echo $lang['NOPATH'];
exit;
}
$history = $svnrep->getLog($path, $rev, "", false, 20);
$youngest = $history->entries[0]->rev;
 
header('Content-Type: application/xml; charset=utf-8');
// Cachename reflecting full path to and rev for rssfeed. Must end with xml to work
$cachename = strtr(getFullURL($listurl), ":/\\?", "____");
$cachename = $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTORY_SEPARATOR.$cachename.@$_REQUEST["rev"]."_rssfeed.xml";
 
if ($rep->isRssCachingEnabled()) {
// Filename for storing a cached RSS feed for this particular path/revision
$cache = $locwebsvnreal.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.strtr($rep->getDisplayName().$path, '\\/:*?"<>|.', '__________').($peg ? '@'.$peg : '').($rev ? '_r'.$rev : '').'m'.$max.($quiet ? 'q' : '').'.rss.xml';
// If a recent-enough cached version exists, use it and avoid the work below
if (file_exists($cache) && filemtime($cache) >= $history->curEntry->committime) {
readfile($cache);
exit();
}
}
$rss = new UniversalFeedCreator();
$rss->useCached("RSS2.0", $cachename);
$rss->title = $rep->getDisplayName();
$rss->description = "${lang["RSSFEEDTITLE"]} - $repname";
$rss->link = html_entity_decode(getFullURL($baseurl.$listurl));
$rss->syndicationURL = $rss->link;
$rss->xslStyleSheet = ""; //required for UniversalFeedCreator since 1.7
$rss->cssStyleSheet = ""; //required for UniversalFeedCreator since 1.7
 
$bugtraq = new Bugtraq($rep, $svnrep, $ppath);
//$divbox = "<div>";
//$divfont = "<span>";
 
// Generate RSS 2.0 feed
$rss = '<?xml version="1.0" encoding="utf-8"?>';
$rss .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel>';
$rss .= '<title>'.escape($rep->getDisplayName()).($path ? ' &#x2013; '.$path : '').'</title>';
$rss .= '<description>'.escape($lang['RSSFEEDTITLE']).' &#x2013; '.escape($repname).'</description>';
$rss .= '<lastBuildDate>'.date('r').'</lastBuildDate>'; // RFC 2822 date format
$rss .= '<generator>WebSVN '.$vars['version'].'</generator>';
$rss .= '<language>'.$lang['LANGUAGETAG'].'</language>';
// URL for matching WebSVN log page
$rss .= '<link>'.getFullURL($baseurl.$config->getURL($rep, $path, 'log').(@$_REQUEST['isdir'] == 1 ? 'isdir=1&amp;' : '').'max='.$max.'&amp;'.createRevAndPegString($passrev, $peg)).'</link>';
// URL where this original RSS feed can be found
$rss .= '<atom:link href="'.escape(getFullURL($_SERVER['REQUEST_URI'])).'" rel="self" type="application/rss+xml" />'."\n";
if (is_array($history->entries)) {
$itemURL = $baseurl.$config->getURL($rep, $path, 'revision');
if (@$_REQUEST['isdir'] == 1 || $path == '' || $path == '/')
$itemURL .= 'isdir=1&amp;';
foreach ($history->entries as $r) {
$wordLimit = 10; // Display only up to the first 10 words of the log message
$title = trim(explode('\n', $r->msg)[0]);
$title = str_replace(array("\r\n", "\r", "\n", "\t"), ' ', $title);
$words = explode(' ', $title, $wordLimit + 1);
if (count($words) > $wordLimit) {
$title = implode(' ', array_slice($words, 0, $wordLimit)).' ...';
foreach ($history->entries as $r)
{
$thisrev = $r->rev;
$changes = $r->mods;
$files = count($changes);
 
// Add the trailing slash if we need to (svnlook history doesn't return trailing slashes!)
$rpath = $r->path;
if ($isDir && $rpath{strlen($rpath) - 1} != "/")
$rpath .= "/";
// Find the parent path (or the whole path if it's already a directory)
$pos = strrpos($rpath, "/");
$parent = substr($rpath, 0, $pos + 1);
$url = $config->getURL($rep, $parent, "dir");
$desc = $r->msg;
$item = new FeedItem();
// For the title, we show the first 10 words of the description
$pos = 0;
$len = strlen($desc);
for ($i = 0; $i < 10; $i++)
{
if ($pos >= $len) break;
$pos = strpos($desc, " ", $pos);
if ($pos === FALSE) break;
$pos++;
}
$title = $lang['REV'].' '.$r->rev.' '.mb_convert_encoding('&#x2013;', 'UTF-8', 'HTML-ENTITIES').' '.$title;
$description = '<div><strong>'.$r->author;
if (!$quiet) {
$description .= ' '.mb_convert_encoding('&#x2013;', 'UTF-8', 'HTML-ENTITIES').' '.count($r->mods).' '.$lang['FILESMODIFIED'];
if ($pos !== FALSE)
{
$sdesc = substr($desc, 0, $pos) . "...";
}
$description .= '</strong><br/>'.nl2br($bugtraq->replaceIDs(create_anchors(str_replace('<', '&lt;', $r->msg)))).'</div>';
if (!$quiet) {
usort($r->mods, 'SVNLogEntry_compare');
foreach ($r->mods as $modifiedResource) {
switch ($modifiedResource->action) {
case 'A': $description .= '+ '; break;
case 'M': $description .= '~ '; break;
case 'D': $description .= 'x '; break;
else
{
$sdesc = $desc;
}
$description .= $modifiedResource->path;
if ($modifiedResource->copyfrom != '') {
$description .= ' <i>(copied from '.$modifiedResource->copyfrom.'@'.$modifiedResource->copyrev.')</i>';
if ($desc == "") $sdesc = "${lang["REV"]} $thisrev";
$item->title = "$sdesc";
$item->link = html_entity_decode(getFullURL($baseurl."${url}rev=$thisrev&amp;sc=$showchanged"));
$item->description = "<div><strong>${lang["REV"]} $thisrev - ".$r->author."</strong> ($files ${lang["FILESMODIFIED"]})</div><div>".nl2br(create_anchors($desc))."</div>";
 
if ($showchanged)
{
foreach ($changes as $file)
{
switch ($file->action)
{
case "A":
$item->description .= "+ ".$file->path."<br />";
break;
case "M":
$item->description .= "~ ".$file->path."<br />";
break;
case "D":
$item->description .= "-".$file->path."<br />";
break;
}
$description .= '<br />';
}
}
 
// skip items with no access
if ($r->committime) {
$rss .= '<item>';
$rss .= '<pubDate>'.date('r', $r->committime).'</pubDate>';
$rss .= '<dc:creator>'.escape($r->author).'</dc:creator>';
$rss .= '<title>'.escape($title).'</title>';
$rss .= '<description>'.escape($description).'</description>';
$itemLink = getFullURL($itemURL.createRevAndPegString($r->rev,$peg));
$rss .= '<link>'.$itemLink.'</link>';
$rss .= '<guid>'.$itemLink.'</guid>';
$rss .= '</item>'."\n";
$item->date = $r->committime;
$item->author = $r->author;
$rss->addItem($item);
}
}
}
$rss .= '</channel></rss>';
 
if ($rep->isRssCachingEnabled()) {
$file = fopen($cache, 'w+');
if ($file) {
fputs($file, $rss);
fclose($file);
touch($cache, $history->curEntry->committime); // set timestamp to commit time
} else {
echo 'Error creating RSS cache file, please check write permissions.';
}
}
echo $rss;
// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1, MBOX, OPML
 
// Save the feed
$rss->saveFeed("RSS2.0",$cachename, false);
header("Content-Type: application/xml");
echo $rss->createFeed("RSS2.0");
 
?>
/WebSVN/templates.txt
0,0 → 1,364
 
THE TEMPLATING SYSTEM
~~~~~~~~~~~~~~~~~~~~~
 
Everyone wants their view onto their SVN repository to fit in with their look
and feel. With WebSVN's templating system this is very possible.
 
To create your own templates, you first need to change your config.inc file to
tell WebSVN where the templates are stored. For example:
 
$config->setTemplatePath("./templates/Standard/");
 
This directory should contain at least the following files:
 
header.tmpl - Header templated included before any other
footer.tmpl - Footer templated included after any other
 
index.tmpl - The main project page template
 
directory.tmpl - Listing of a directory
log.tmple - Log of a directory or file
file.tmpl - Contents of a text file
diff.tmpl - Differences between text files
blame.tmpl - Blame information for a file
 
Each template file should be written in HTML, but is allowed to contain certain
WebSVN controls. There are two control types, commands and variables.
 
 
COMMANDS
~~~~~~~~
 
NOTE: Commands MUST appear on their own line.
 
---
 
[websvn-test:varname]
...
[websvn-else]
...
[websvn-endtest]
 
If the variable is non-0 write out the first part else write out the second
 
---
 
[websvn-startlisting]
...
[websvn-endlisting]
 
 
Used in pages that contain listings of files, logs, etc. Everything between
the controls is repeated for each item in the list
 
---
 
[websvn-defineicons] (used in directory.tmpl only)
...
[websvn-enddefineicons]
...
 
[websvn-treenode]
[websvn-icon]
 
These commands are used to display certain icons next to certain file types in
the directory view.
 
The [websvn-defineicons] block should contain a line for each file type,
defining the HTML to be used for that file type. To define the HTML for a
particular extension use the syntax:
 
.<extension>=<HTML code>
 
There are also some special filetypes:
 
dir=<HTML code> is used for directory icons
diropen=<HTML code> is used for open directory icons
*=<HTML code> is used for all filetypes which have no other definition
 
i-node - | shaped node of the tree view
t-node - T shaped node of the tree view
l-node - L shaped node of the tree view
e-node - Empty node of the tree view
 
Example from the BlueGrey scheme:
 
[websvn-defineicons]
dir=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[FOLDER]">
diropen=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder-open.png" alt="[FOLDER]">
*=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/file.png" alt="[FILE]">
.c=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filec.png" alt="[C-FILE]">
.h=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/fileh.png" alt="[H-FILE]">
.s=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/files.png" alt="[S-FILE]">
 
i-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt="[NODE]">
t-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt="[NODE]">
l-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt="[NODE]">
e-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt="[NODE]">
[websvn-enddefineicons]
 
Inside the [websvn-startlisting] block, the command [websvn-treeview] will
output the HTML code defined for the appropriate tree view icon.
[websvn-icon] will output the HTML code defined for the type of the current
file.
 
---
 
[websvn-getlisting] (used in file.tmpl only)
Get the contents of the file being viewed and output it exactly (surrounded
with <PRE> .. </PRE>).
 
VARIABLES
~~~~~~~~~
 
Variables are written in the form [websvn:varname] where varname is the name of
a variable passed to the template. The control is replaced with the variable
required.
 
The variables available are described below for each template.
You may also access the language file using [lang:varname] is order to keep your
templates international!
 
Take special notice of the use of the locwebsvnhttp variable. It should be used
to locate other files and graphics that your templates need. For example:
 
<link href="[websvn:locwebsvnhttp]/templates/tmptname/styles.css" ...
 
You may imagine that simply using . in place should work, however this isn't
the case when MultiViews are turned on. Using this variable gives you a way to
access your template files in all cases.
 
Variables defined for in all scripts
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
locwebsvnhttp - Root of websvn directory
charset - The charset requested by the user
 
projects_form - HTML <form> specification for the projects selection box
projects_select - HTML <select>...</select> specification for the project
options
projects_submit - HTML <input> specification for the projects selection GO
button
projects_endform - HTML </form> specification for the projects selection
box (includes hidden field declarations)
 
lang_form - HTML <form> specification for the language selection box
lang_select - HTML <select>...</select> specification for the language options
lang_submit - HTML <input> specification for the language selection GO button
lang_endform - HTML </form> specification for the language selection box
 
noaccess - True if the user should be blocked from accessing this page due
to insufficient access rights.
 
Variables defined for index.tmpl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
treeview - true if the index should be displayed as a tree of grouped projects
flatview - true if the index should be displayed as a simple list of projects
opentree - true if the tree viewed should be open by default
 
Used in [websvn-startlisting] ... [websvn-endlisting] block of a flat view:
 
projlink - Link to the project
rowparity - Parity of the row (0 or 1). Used to generate striped tables
 
Used in [websvn-startlisting] ... [websvn-endlisting] block of a tree view:
 
isprojlink - This item is a project link
isgrouphead - This item is a group name
rowparity - Parity of the row (0 or 1). Used to generate striped tables
listitem - The item to display
 
Variables defined for directory.tmpl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
restricted - True if the users has restricted access to this directory (to
allow access to a readable directory lower down only)
repname - Name of the repository
rev - Revision being viewed
path - Path of item being logged
author - Author of current revision
date - Date that revision was committed
log - Log message of revision
lastchangedrev - Revision of the last modification to current directory
goyoungestlink - Link to head revision of repository
 
showchanges - 1 if showing changes (for websvn-test)
hidechanges - 1 if hiding changes (for websvn-test)
showchangeslink - Link to page with changes hidden
hidechangeslink - Link to page with changes shown
 
newfilesbr - list of the new files separated by <BR>'s
changedfilesbr - list of the changed files separated by <BR>'s
deletedfilesbr - list of the deleted files separated by <BR>'s
 
newfiles - list of the new files separated by spaces
changedfiles - list of the changed files separated by spaces
deletedfiles - list of the deleted files separated by spaces
 
curdirlinks - List of the path of this directory with links to each one
curdirloglink - Link to the log view of current directory
curdirrsslink - Link to the RSS feed for the current directory
curdirrssanchor - The <a href=...> tag to the RSS feed for the current directory
curdirrsshref - URL of the feed for the current directory (without anchor tag)
curdirdllink - Link to the tarball of current directory
curdircomplink - Link to comparison with previously changed revision
 
allowdownload - True if downloading has been configured
 
compare_form - HTML <form> specification for the comparison form
compare_submit - HTML <input> specification for the comparison button
compare_endform - HTML </form> specification for the comparison form
 
Used in [websvn-startlisting] ... [websvn-endlisting] block:
 
compare_box - HTML checkbox specification for the comparison option
filelink - Link to the file
rowparity - Parity of the row (0 or 1). Used to generate striped tables
fileviewloglink - Link to the log page for the file
fileviewdllink - Link to the tarball of current directory
isDir - true if the current file is a directory (use with [websvn-test:isDir]
to display icons)
rsslink - Link to the RSS feed for this file/directory
rssanchor - The <a href=...> tag to the RSS feed for this file/directory
 
Variables defined for log.tmpl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
action - Action being performed ("Log")
 
repname - Name of the repository
rev - Revision being viewed
path - Path of item being logged
curdirlinks - List of the path of this directory with links to each one
error - Error message when results not available
 
pagelinks - List of list to all the pages of the log
showalllink - Link to show the entire log in one go
 
logsearch_form - HTML <form> specification for the log search box
logsearch_inputbox - HTML <input> specification for the log search box
logsearch_submit - HTML <input> specification for the log search GO button
logsearch_endform - HTML </form> specification for the log search box box
(includes hidden field declarations)
logsearch_clearloglink - Link to unfiltered display (remove current search
criteria)
logsearch_resultsfound - true when there are logs to display
logsearch_nomatches - true when there are no matches for the current request
logsearch_nomorematches - true when there are no further matches to the current
request (but there have been previous pages,
for example)
 
compare_form - HTML <form> specification for the comparison form
compare_submit - HTML <input> specification for the comparison button
compare_endform - HTML </form> specification for the comparison form
 
Used in [websvn-startlisting] ... [websvn-endlisting] block:
 
compare_box - HTML checkbox specification for the comparison option
revpathlink - Link to revision
revauthor - Author of this revision
revage - Age of revision
revlog - Log message of revision
 
 
Variables defined for file.tmpl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
repname - Name of the repository
rev - Revision being viewed
path - Path of item being logged
curdirlinks - List of the path of this directory with links to each one
 
prevdifflink - Link to comparison with previous revision
blamelink - Link to the blame information for this file
fileviewloglink - Link to the log page for the file
 
Note: Use command [websvn-getlisting] to display the listing.
 
 
Variables defined for diff.tmpl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
action - Action being performed ("Diff")
locwebsvnhttp - Root of websvn directory
charset - The charset requested by the user
 
repname - Name of the repository
rev - Revision being viewed
path - Path of item being logged
curdirlinks - List of the path of this directory with links to each one
 
rev1 - Revision of the older file
rev2 - Revision of the newer file
 
showcompactlink - Link to compact view
showalllink - Link to full view
 
Used in [websvn-startlisting] ... [websvn-endlisting] block:
 
rev1lineno / rev2lineno - Line number of the next difference block. Only
defined at the start of the block.
rev2diffclass / rev2diffclass - Class name of the diff block used for colouring
differences. The result is one of:
* diff (no changes)
* diffadded
* diffchanged
* diffdeleted
rev1line / rev2line - The line under comparison
 
Variables defined for blame.tmpl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
locwebsvnhttp - Root of websvn directory
charset - The charset requested by the user
 
repname - Name of the repository
rev - Revision being viewed
path - Path of item being logged
curdirlinks - List of the path of this directory with links to each one
 
Used in [websvn-startlisting] ... [websvn-endlisting] block:
 
lineno - Line number of the line
revision - Revision in which the line changed
author - Last author to modify the line
line - The line itself
 
Variables defined for compare.tmpl
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
action - Action being performed ("Path Comparison")
repname - Name of the repository
path1 - First path being compared
rev1 - Revision of first path
path2 - Second path being compared
rev2 - Revision of second path
 
success = true if the comparison succeeded
 
revlink - Link to reverse comparison
 
compare_form - HTML <form> specification for the comparison form
compare_path1input/compare_path2input - HTML specifications for the path input areas
compare_rev1input/compare_rev2input - HTML specifications for the revision input areas
compare_submit - HTML <input> specification for the comparison button
compare_endform - HTML </form> specification for the comparison form
 
Used in [websvn-startlisting] ... [websvn-endlisting] block:
 
newpath - Name of new file under comparison (only defined at start of block)
difflines - Lines changed information for this file. Start of diff lines.
(only defined after newpath)
diffclass - Class name of the diff block used for colouring
differences. The result is one of:
* diff (no changes)
* diffadded
* diffdeleted
line - The line under comparison
enddifflines - End of diff lines
properties - Property changes
endpath - End of current path
/WebSVN/wsvn.php
0,0 → 1,161
<?php
# vim:et:ts=3:sts=3:sw=3:fdm=marker:
 
// WebSVN - Subversion repository viewing via the web using PHP
// Copyright © 2004-2006 Tim Armes, Matt Sicker
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// --
//
// wsvn.php
//
// Glue for MultiViews
 
// --- CONFIGURE THESE VARIABLES ---
 
// Location of websvn directory via HTTP
//
// e.g. For http://servername/websvn use /websvn
//
// Note that wsvn.php need not be in the /websvn directory (and normally isn't).
// If you want to use the root server directory, just use a blank string ('').
#$locwebsvnhttp = "/websvn";
$locwebsvnhttp = '';
 
// Physical location of websvn directory
#$locwebsvnreal = "d:/websvn";
$locwebsvnreal = '/mnt/wsvn';
 
chdir($locwebsvnreal);
 
// --- DON'T CHANGE BELOW HERE ---
 
// this tells files that we are in multiviews if they are unable to access
// the $config variable
if (!defined('WSVN_MULTIVIEWS'))
define('WSVN_MULTIVIEWS', 1);
 
ini_set("include_path", $locwebsvnreal);
 
require_once("include/setup.inc");
require_once("include/svnlook.inc");
 
if (!isset($_REQUEST["sc"]))
$_REQUEST["sc"] = 1;
 
if ($config->multiViews)
{
// If this is a form handling request, deal with it
if (@$_REQUEST["op"] == "form")
{
include("$locwebsvnreal/form.php");
exit;
}
 
$path = @$_SERVER["PATH_INFO"];
 
// Remove initial slash
$path = substr($path, 1);
if (empty($path))
{
include("$locwebsvnreal/index.php");
exit;
}
// Split the path into repository and path elements
// Note: we have to cope with the repository name
// having a slash in it
 
$found = false;
 
foreach ($config->getRepositories() as $rep)
{
$pos = strlen($rep->getDisplayName());
if (strlen($path) < $pos)
continue;
$name = substr($path, 0, $pos);
if (strcasecmp($rep->getDisplayName(), $name) == 0)
{
$tpath = substr($path, $pos);
if ($tpath[0] == "/") {
$found = true;
$path = $tpath;
break;
}
}
}
 
if ($found == false)
{
include("$locwebsvnreal/index.php");
exit;
}
 
createProjectSelectionForm();
$vars["allowdownload"] = $rep->getAllowDownload();
 
// find the operation type
$op = @$_REQUEST["op"];
switch ($op)
{
case "dir":
$file = "listing.php";
break;
case "file":
$file = "filedetails.php";
break;
 
case "log":
$file = "log.php";
break;
 
case "diff":
$file = "diff.php";
break;
 
case "blame":
$file = "blame.php";
break;
 
case "rss":
$file = "rss.php";
break;
case "dl":
$file = "dl.php";
break;
 
case "comp":
$file = "comp.php";
break;
 
default:
if ($path[strlen($path) - 1] == "/")
$file = "listing.php";
else
$file = "filedetails.php";
}
// Now include the file that handles it
include("$locwebsvnreal/$file");
}
else
{
print "<p>MultiViews must be configured in config.inc in order to use this file";
exit;
}
/WebSVN/cache/tmp
1,0 → 0,0
This file is here so that the directory gets included in the ZIP files.
This file is here so that the directory gets included in the ZIP files