<?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#require_once 'php5compat.inc';// {{{ createDirLinks//// Create a list of links to the current path that'll be available from the templatefunction 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 fileif (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&sc=$showchanged\">".$subs[$n]."/]</a> ";}if ($dir){$vars["curdirlinks"] .= "[<b>".$subs[$n]."</b>/]";}else{$vars["curdirlinks"] .= "[<b>".$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);}// }}}// {{{ getFullURLfunction 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>'.$s.'</code>';}// }}}// {{{ 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(" ", " ", $text) : $text;}// }}}// {{{ getParameterisedSelfUrl//// Get the relative URL (PHP_SELF) with GET and POST datafunction getParameterisedSelfUrl($params = true){$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 .= '?'.http_build_query($arr);}return $url;}// }}}?>