SourceForge logo
SourceForge logo
Menu

phpwiki-checkins

Update of /cvsroot/phpwiki/phpwiki/lib
In directory usw-pr-cvs1:/tmp/cvs-serv20420/lib
Modified Files:
	config.php diff.php display.php editpage.php fullsearch.php 
	mysql.php pageinfo.php savepage.php search.php stdlib.php 
	transform.php ziplib.php 
Added Files:
	userauth.php 
Removed Files:
	editlinks.php 
Log Message:
Jeff hacks again: LOT's of changes. 
Highlights:
 * Pagename in PATH_INFO support added.
 * Redid the user (admin) authentication stuff.
 All access now through index.php.
See HISTORY for (a few) more details.
--- NEW FILE ---
<?php rcs_id('$Id');
// It is anticipated that when userid support is added to phpwiki,
// this object will hold much more information (e-mail, home(wiki)page,
// etc.) about the user.
 
// There seems to be no clean way to "log out" a user when using
// HTTP authentication.
// So we'll hack around this by storing the currently logged
// in username and other state information in a cookie.
class WikiUser 
{
 // Arg $login_mode:
 // default: Anonymous users okay.
 // 'LOGOUT': Force logout.
 // 'REQUIRE_AUTH': Force authenticated login.
 function WikiUser ($auth_mode = '') {
 // Restore from cookie.
 global $WIKI_AUTH;
 if (empty($WIKI_AUTH)) 
 {
	 $this->userid = '';
	 $this->state = 'login';
	 $this->realm = 'PhpWiki0000';
 }
 else
	 $this = unserialize(fix_magic_quotes_gpc($WIKI_AUTH));
 
 if ($auth_mode != 'LOGOUT')
 {
	 $user = $this->_get_authenticated_userid();
	 if (!$user && $auth_mode == 'REQUIRE_AUTH')
	 $warning = $this->_demand_http_authentication(); //NORETURN
 }
 if (empty($user))
 {
	 // Authentication failed
	 if ($this->state == 'authorized')
	 $this->realm++;
	 $this->state = 'loggedout';
	 $this->userid = get_remote_host(); // Anonymous user id is hostname.
 }
 else
 {
	 // Successful authentication
	 $this->state = 'authorized';
	 $this->userid = $user;
 }
 // Save state to cookie.
 setcookie('WIKI_AUTH', serialize($this), 0, '/');
 if (isset($warning))
	 echo $warning;
 }
 function id () {
 return $this->userid;
 }
 function is_authenticated () {
 return $this->state == 'authorized';
 }
	 
 function is_admin () {
 return $this->is_authenticated() && $this->userid == ADMIN_USER;
 }
 function must_be_admin ($action = "do that") {
 if (! $this->is_admin())
	 ExitWiki("You must be logged in as an administrator to $action.");
 }
 
 function _get_authenticated_userid () {
 if ( ! ($user = $this->_get_http_authenticated_userid()) )
	 return false;
 
 switch ($this->state) {
 case 'login':
	 // Either we just asked for a password, or cookies are not enabled.
	 // In either case, proceed with successful login.
	 return $user;
 case 'loggedout':
	 // We're logged out. Ignore http authed user.
	 return false;
 default:
	 // Else, as long as the user hasn't changed, fine.
	 if ($user && $user != $this->userid)
	 return false;
	 return $user;
 }
 }
 function _get_http_authenticated_userid () {
 global $PHP_AUTH_USER, $PHP_AUTH_PW;
 if (empty($PHP_AUTH_USER) || empty($PHP_AUTH_PW))
	 return false;
 if (($PHP_AUTH_USER != ADMIN_USER) || ($PHP_AUTH_PW != ADMIN_PASSWD))
	 return false;
	 
 return $PHP_AUTH_USER;
 }
 
 function _demand_http_authentication () {
 if (!defined('ADMIN_USER') || !defined('ADMIN_PASSWD')
	 || ADMIN_USER == '' || ADMIN_PASSWD =='') {
	 return "<p><b>You must set the administrator account and password"
	 . "before you can log in.</b></p>\n";
 }
 // Request password
 $this->userid = '';
 $this->state = 'login';
 setcookie('WIKI_AUTH', serialize($this), 0, '/');
 header('WWW-Authenticate: Basic realm="' . $this->realm . '"');
 header("HTTP/1.0 401 Unauthorized");
 echo gettext ("You entered an invalid login or password.");
 exit;
 }
}
?>
Index: config.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/config.php,v
retrieving revision 1.28
retrieving revision 1.29
diff -C2 -r1.28 -r1.29
*** config.php	2001年02月08日 18:19:16	1.28
--- config.php	2001年02月10日 22:15:08	1.29
***************
*** 1,3 ****
--- 1,4 ----
 <?php
+ rcs_id('$Id$');
 
 // essential internal stuff -- skip it. Go down to Part One. There
***************
*** 8,18 ****
 error_reporting(E_ALL ^ E_NOTICE);
 
- if (!function_exists('rcs_id')) {
- function rcs_id($id) { echo "<!-- $id -->\n"; };
- }
- rcs_id('$Id$');
- // end essential internal stuff
- 
- 
 /////////////////////////////////////////////////////////////////////
 // Part One:
--- 9,12 ----
***************
*** 24,31 ****
 // you can leave this empty - it will be calculated automatically
 $ScriptUrl = "";
- // URL of admin.php e.g. http://yoursite.com/phpwiki/admin.php
- // you can leave this empty - it will be calculated automatically
- // if you fill in $ScriptUrl you *MUST* fill in $AdminUrl as well!
- $AdminUrl = "";
 
 // Select your language - default language "C": English
--- 18,21 ----
***************
*** 34,37 ****
--- 24,46 ----
 $LANG="C";
 
+ // Define to 'true' to use PATH_INFO to pass the pagename's.
+ // e.g. http://www.some.where/index.php/FrontPage instead
+ // of http://www.some.where/index.php?pagename=FrontPage
+ define('USE_PATH_INFO', true);
+ 
+ // Username and password of administrator.
+ // Set these to your preferences. For heaven's sake
+ // pick a good password!
+ define('ADMIN_USER', "");
+ define('ADMIN_PASSWD', "");
+ 
+ // If true, only the admin user can make zip dumps, else
+ // zip dumps require no authentication.
+ define('ZIPDUMP_AUTH', false);
+ 
+ // If set, we will perform reverse dns lookups to try to convert the users
+ // IP number to a host name, even if the http server didn't do it for us.
+ define('ENABLE_REVERSE_DNS', true);
+ 
 /////////////////////////////////////////////////////////////////////
 // Part Two:
***************
*** 153,159 ****
 define("NUM_RELATED_PAGES", 5);
 
- // number of user-defined external references, i.e. "[1]"
- define("NUM_LINKS", 12);
- 
 // allowed protocols for links - be careful not to allow "javascript:"
 // within a named link [name|uri] one more protocol is defined: phpwiki
--- 162,165 ----
***************
*** 163,167 ****
 $InlineImages = "png|jpg|gif";
 
- 
 // If the last edit is older than MINOR_EDIT_TIMEOUT seconds, the default
 // state for the "minor edit" checkbox on the edit page form will be off
--- 169,172 ----
***************
*** 169,173 ****
 define("MINOR_EDIT_TIMEOUT", 7 * 24 * 3600);
 
- 
 // Perl regexp for WikiNames
 // (?<!..) & (?!...) used instead of '\b' because \b matches '_' as well
--- 174,177 ----
***************
*** 216,220 ****
 	"BROWSE" => gettext("templates/browse.html"),
 	"EDITPAGE" => gettext("templates/editpage.html"),
- 	"EDITLINKS" => gettext("templates/editlinks.html"),
 	"MESSAGE" => gettext("templates/message.html")
 	);
--- 220,223 ----
***************
*** 243,247 ****
 
 
- 
 //////////////////////////////////////////////////////////////////////
 // you shouldn't have to edit anyting below this line
--- 246,249 ----
***************
*** 251,269 ****
 $ScriptUrl = "http://$SERVER_NAME$port$SCRIPT_NAME";
 }
! if (defined('WIKI_ADMIN') && !empty($AdminUrl))
! $ScriptUrl = $AdminUrl;
 
! $FieldSeparator = "263円";
! 
! if (isset($PHP_AUTH_USER)) {
! $remoteuser = $PHP_AUTH_USER;
! } else {
! 
! // Apache won't show REMOTE_HOST unless the admin configured it
! // properly. We'll be nice and see if it's there.
! 
! getenv('REMOTE_HOST') ? ($remoteuser = getenv('REMOTE_HOST'))
! : ($remoteuser = getenv('REMOTE_ADDR'));
! }
 
 // constants used for HTML output. HTML tags may allow nesting
--- 253,262 ----
 $ScriptUrl = "http://$SERVER_NAME$port$SCRIPT_NAME";
 }
! $ScriptName = preg_replace('@^.*/@', '', $ScriptUrl);
 
! // "\x80"-"\x9f" (and "\x00" - "\x1f") are non-printing control
! // chars in iso-8859-*
! // $FieldSeparator = "263円"; //this is a superscript 3 in ISO-8859-1.
! $FieldSeparator = "\x81";
 
 // constants used for HTML output. HTML tags may allow nesting
Index: diff.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/diff.php,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** diff.php	2001年02月07日 18:35:09	1.5
--- diff.php	2001年02月10日 22:15:08	1.6
***************
*** 159,162 ****
--- 159,164 ----
 function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
 {
+ 	$flip = false;
+ 	
 	if ($xlim - $xoff > $ylim - $yoff)
 	 {
***************
*** 196,200 ****
 		reset($matches);
 		while (list ($junk, $y) = each($matches))
! 		 if (! $this->in_seq[$y])
 		 {
 			$k = $this->_lcs_pos($y);
--- 198,202 ----
 		reset($matches);
 		while (list ($junk, $y) = each($matches))
! 		 if (empty($this->in_seq[$y]))
 		 {
 			$k = $this->_lcs_pos($y);
***************
*** 214,218 ****
 			$this->in_seq[$y] = 1;
 		 }
! 		 else if (! $this->in_seq[$y])
 		 {
 			$k = $this->_lcs_pos($y);
--- 216,220 ----
 			$this->in_seq[$y] = 1;
 		 }
! 		 else if (empty($this->in_seq[$y]))
 		 {
 			$k = $this->_lcs_pos($y);
***************
*** 818,832 ****
 function format ($diff, $from_lines)
 {
! 	$html = '<table width="100%" bgcolor="black"' .
! 		"cellspacing=2 cellpadding=2 border=0>\n";
! 	$html .= $this->_format($diff->edits, $from_lines);
! 	$html .= "</table>\n";
! 
! 	return $html;
 }
 
 function _format ($edits, $from_lines)
 {
! 	$html = '';
 	$x = 0; $y = 0;
 	$xlim = sizeof($from_lines);
--- 820,835 ----
 function format ($diff, $from_lines)
 {
! 	return Element('table',
! 		 array('width' => '100%',
! 			 'bgcolor' => 'black',
! 			 'cellspacing' => 2,
! 			 'cellpadding' => 2,
! 			 'border' => 0),
! 		 $this->_format($diff->edits, $from_lines));
 }
 
 function _format ($edits, $from_lines)
 {
! 	$rows = '';
 	$x = 0; $y = 0;
 	$xlim = sizeof($from_lines);
***************
*** 898,903 ****
 			 = array($ybeg, $ylen, $xbeg, $xlen);
 
! 		 $html .= $this->_emit_diff($xbeg,$xlen,$ybeg,$ylen,
! 					 $hunks);
 		 unset($hunks);
 		 }
--- 901,905 ----
 			 = array($ybeg, $ylen, $xbeg, $xlen);
 
! 		 $rows .= $this->_emit_diff($xbeg,$xlen,$ybeg,$ylen, $hunks);
 		 unset($hunks);
 		 }
***************
*** 917,921 ****
 	 $y += $ncopy;
 	 }
! 	return $html;
 }
 
--- 919,923 ----
 	 $y += $ncopy;
 	 }
! 	return $rows;
 }
 
***************
*** 923,931 ****
 {
 	$html = '';
 	reset($lines);
 	while (list ($junk, $line) = each($lines))
 	 {
! 	 $html .= "<tr bgcolor=\"$color\"><td><tt>$prefix</tt>";
! 	 $html .= "<tt>" . htmlspecialchars($line) . "</tt></td></tr>\n";
 	 }
 	return $html;
--- 925,936 ----
 {
 	$html = '';
+ 	$prefix = Element('td', array('bgcolor' => '#cccccc'), $prefix);
 	reset($lines);
 	while (list ($junk, $line) = each($lines))
 	 {
! 	 $line = empty($line) ? '&nbsp;' : htmlspecialchars($line);
! 	 $html .= Element('tr', 
! 			 $prefix . Element('td', array('bgcolor' => $color),
! 					 Element('tt', $line)));
 	 }
 	return $html;
***************
*** 934,944 ****
 function _emit_diff ($xbeg,$xlen,$ybeg,$ylen,$hunks)
 {
! 	$html = '<tr><td><table width="100%" bgcolor="white"'
! 	 . " cellspacing=0 border=0 cellpadding=4>\n"
! 	 . '<tr bgcolor="#cccccc"><td><tt>'
! 	 . $this->_diff_header($xbeg, $xlen, $ybeg, $ylen)
! 	 . "</tt></td></tr>\n<tr><td>\n"
! 	 . "<table width=\"100%\" cellspacing=0 border=0 cellpadding=2>\n";
! 
 	$prefix = array('c' => $this->context_prefix,
 			'a' => $this->adds_prefix,
--- 939,947 ----
 function _emit_diff ($xbeg,$xlen,$ybeg,$ylen,$hunks)
 {
! 	$header = Element('tr', array('bgcolor' => '#cccccc'),
! 			 Element('td', array('colspan' => 2),
! 				 QElement('tt',
! 					 $this->_diff_header($xbeg, $xlen, $ybeg, $ylen))));
! 	
 	$prefix = array('c' => $this->context_prefix,
 			'a' => $this->adds_prefix,
***************
*** 948,966 ****
 		 'd' => '#ccffcc');
 
 	for (reset($hunks); $hunk = current($hunks); next($hunks))
 	 {
 	 if (!empty($hunk['c']))
! 		$html .= $this->_emit_lines($hunk['c'],
 		 $this->context_prefix, '#ffffff');
 	 if (!empty($hunk['d']))
! 		$html .= $this->_emit_lines($hunk['d'],
 		 $this->deletes_prefix, '#ccffcc');
 	 if (!empty($hunk['a']))
! 		$html .= $this->_emit_lines($hunk['a'],
 		 $this->adds_prefix, '#ffcccc');
 	 }
 
! 	$html .= "</table></td></tr></table></td></tr>\n";
! 	return $html;
 }
 
--- 951,978 ----
 		 'd' => '#ccffcc');
 
+ 	$diff = '';
 	for (reset($hunks); $hunk = current($hunks); next($hunks))
 	 {
 	 if (!empty($hunk['c']))
! 		$diff .= $this->_emit_lines($hunk['c'],
 		 $this->context_prefix, '#ffffff');
 	 if (!empty($hunk['d']))
! 		$diff .= $this->_emit_lines($hunk['d'],
 		 $this->deletes_prefix, '#ccffcc');
 	 if (!empty($hunk['a']))
! 		$diff .= $this->_emit_lines($hunk['a'],
 		 $this->adds_prefix, '#ffcccc');
 	 }
 
! 
! 	return Element('tr', Element('td',
! 				 Element('table',
! 					 array('width' => '100%',
! 						 'bgcolor' => 'white',
! 						 'cellspacing' => 0,
! 						 'cellpadding' => 4,
! 						 'border' => 0),
! 					 $header. $diff)));
! 	
 }
 
***************
*** 1009,1061 ****
 /////////////////////////////////////////////////////////////////
 
! if ($diff)
 {
! if (get_magic_quotes_gpc()) {
! $diff = stripslashes($diff);
! }
! 
! $pagename = $diff;
 
 $wiki = RetrievePage($dbi, $pagename, $WikiPageStore);
- // $dba = OpenDataBase($ArchivePageStore);
 $archive= RetrievePage($dbi, $pagename, $ArchivePageStore);
- 
- $html = '<table><tr><td align="right">';
- $html .= gettext ("Current page:");
- $html .= '</td>';
- if (is_array($wiki)) {
- $html .= "<td>";
- $html .= sprintf(gettext ("version %s"), $wiki['version']);
- $html .= "</td><td>";
- $html .= sprintf(gettext ("last modified on %s"),
- 	date($datetimeformat, $wiki['lastmodified']));
- $html .= "</td><td>";
- $html .= sprintf (gettext ("by %s"), $wiki['author']);
- $html .= "</td>";
- } else {
- $html .= "<td colspan=3><em>";
- $html .= gettext ("None");
- $html .= "</em></td>";
- }
- $html .= "</tr>\n";
- $html .= '<tr><td align="right">';
- $html .= gettext ("Archived page:");
- $html .= '</td>';
- if (is_array($archive)) {
- $html .= "<td>";
- $html .= sprintf(gettext ("version %s"), $archive['version']);
- $html .= "</td><td>";
- $html .= sprintf(gettext ("last modified on %s"),
- 	date($datetimeformat, $archive['lastmodified']));
- $html .= "</td><td>";
- $html .= sprintf(gettext ("by %s"), $archive['author']);
- $html .= "</td>";
- } else {
- $html .= "<td colspan=3><em>";
- $html .= gettext ("None");
- $html .= "</em></td>";
- }
- $html .= "</tr></table><p>\n";
 
 if (is_array($wiki) && is_array($archive))
 {
--- 1021,1058 ----
 /////////////////////////////////////////////////////////////////
 
! function PageInfoRow ($label, $hash)
 {
! global $datetimeformat;
! 
! $cols = QElement('td', array('align' => 'right'), $label);
! 
! 
! if (is_array($hash)) {
! extract($hash);
! $cols .= QElement('td',
! 			sprintf(gettext ("version %s"), $version));
! $cols .= QElement('td',
! 			sprintf(gettext ("last modified on %s"),
! 				date($datetimeformat, $lastmodified)));
! $cols .= QElement('td',
! 			sprintf(gettext ("by %s"), $author));
! } else {
! $cols .= QElement('td', array('colspan' => '3'),
! 			gettext ("None"));
! }
! return Element('tr', $cols);
! }
 
+ if (isset($pagename))
+ {
 $wiki = RetrievePage($dbi, $pagename, $WikiPageStore);
 $archive= RetrievePage($dbi, $pagename, $ArchivePageStore);
 
+ $html = Element('table',
+ 		 PageInfoRow(gettext ("Current page:"), $wiki)
+ 		 . PageInfoRow(gettext ("Archived page:"), $archive));
+ 		 
+ $html .= "<p>\n";
+ 
 if (is_array($wiki) && is_array($archive))
 {
Index: display.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/display.php,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** display.php	2001年02月07日 21:11:46	1.6
--- display.php	2001年02月10日 22:15:08	1.7
***************
*** 4,26 ****
 rcs_id('$Id$');
 
- // if we got GET data, the first item is always a page name
- // if it wasn't this file would not have been included
- 
- if (empty($QUERY_STRING) && isset($argv[0]))
- $QUERY_STRING = $argv[0];
- 
- if (isset($QUERY_STRING) && preg_match('/^[-+%\w]+$/', $QUERY_STRING)) {
- $pagename = urldecode($QUERY_STRING);
- } else { 
- $pagename = gettext("FrontPage");
- 
- // if there is no FrontPage, create a basic set of Wiki pages
- if (! IsWikiPage($dbi, $pagename)) {
- include "lib/setupwiki.php";
- }
- }
- 
 $html = "";
! $enc_name = rawurlencode($pagename);
 $pagehash = RetrievePage($dbi, $pagename, $WikiPageStore);
 
--- 4,9 ----
 rcs_id('$Id$');
 
 $html = "";
! 
 $pagehash = RetrievePage($dbi, $pagename, $WikiPageStore);
 
***************
*** 31,35 ****
 } else {
 $html .= sprintf(gettext("Describe %s here."),
! 		 "$pagename<a href='$ScriptUrl?edit=$enc_name'>?</a>");
 }
 
--- 14,18 ----
 } else {
 $html .= sprintf(gettext("Describe %s here."),
! 		 LinkUnknownWikiWord($pagename));
 }
 
Index: editpage.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/editpage.php,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** editpage.php	2001年02月07日 22:14:35	1.9
--- editpage.php	2001年02月10日 22:15:08	1.10
***************
*** 4,31 ****
 // editpage relies on $pagename and $ScriptUrl
 
! if ($edit) {
! $pagename = rawurldecode($edit);
! if (get_magic_quotes_gpc()) {
! $pagename = stripslashes($pagename);
! }
! $banner = htmlspecialchars($pagename);
! $pagehash = RetrievePage($dbi, $pagename, $WikiPageStore);
 
! } elseif ($copy) {
! $pagename = rawurldecode($copy);
! if (get_magic_quotes_gpc()) {
! $pagename = stripslashes($pagename);
! }
 $banner = htmlspecialchars (sprintf (gettext ("Copy of %s"), $pagename));
 $pagehash = RetrievePage($dbi, $pagename, $ArchivePageStore);
- 
 } else {
! ExitWiki(gettext ("No page name passed into editpage!"));
 }
 
- 
 if (is_array($pagehash)) {
 
! if (($pagehash['flags'] & FLAG_PAGE_LOCKED) && !defined('WIKI_ADMIN')) {
 	 $html = "<p>";
 	 $html .= gettext ("This page has been locked by the administrator and cannot be edited.");
--- 4,21 ----
 // editpage relies on $pagename and $ScriptUrl
 
! $currentpage = RetrievePage($dbi, $pagename, $WikiPageStore);
! $editing_copy = isset($version) && $version == 'archive';
 
! if ($editing_copy) { 
 $banner = htmlspecialchars (sprintf (gettext ("Copy of %s"), $pagename));
 $pagehash = RetrievePage($dbi, $pagename, $ArchivePageStore);
 } else {
! $banner = htmlspecialchars($pagename);
! $pagehash = $currentpage;
 }
 
 if (is_array($pagehash)) {
 
! if (($pagehash['flags'] & FLAG_PAGE_LOCKED) && $user->is_admin()) {
 	 $html = "<p>";
 	 $html .= gettext ("This page has been locked by the administrator and cannot be edited.");
***************
*** 38,44 ****
 
 $textarea = implode("\n", $pagehash["content"]);
! if (isset($copy)) {
! 	 // $cdbi = OpenDataBase($WikiPageStore);
! 	 $currentpage = RetrievePage($dbi, $pagename, $WikiPageStore);
 $pagehash["version"] = $currentpage["version"];
 }
--- 28,32 ----
 
 $textarea = implode("\n", $pagehash["content"]);
! if ($editing_copy) {
 $pagehash["version"] = $currentpage["version"];
 }
***************
*** 47,51 ****
 	 $pagehash["copy"] = 1;
 	 }
- 	 $currentpage = $pagehash;
 }
 } else {
--- 35,38 ----
***************
*** 59,67 ****
 }
 
! if ($currentpage['author'] == $remoteuser) {
 $page_age = time() - $currentpage['lastmodified'];
! if ($page_age < MINOR_EDIT_TIMEOUT) {
! 	 $pagehash['minor_edit'] = 1;
! }
 }
 
--- 46,58 ----
 }
 
! 
! if ($user->id() == $currentpage['author'] || $user->is_admin()) {
! $ckbox = element('input', array('type' => 'checkbox',
! 				 'name' => 'minor_edit',
! 				 'value' => 'yes'));
 $page_age = time() - $currentpage['lastmodified'];
! if ($user->id() == $currentpage['author'] && $page_age < MINOR_EDIT_TIMEOUT)
! 	 $ckbox .= " checked";
! $pagehash['minor_edit_checkbox'] = $ckbox . '>';
 }
 
Index: fullsearch.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/fullsearch.php,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** fullsearch.php	2000年12月30日 21:09:13	1.4
--- fullsearch.php	2001年02月10日 22:15:08	1.5
***************
*** 3,19 ****
 rcs_id('$Id$');
 
! if(get_magic_quotes_gpc())
! $full = stripslashes($full);
 
 $html = "<P><B>"
 	 . sprintf(gettext ("Searching for \"%s\" ....."),
! 		 htmlspecialchars($full))
 	 . "</B></P>\n<DL>\n";
 
 // search matching pages
! $query = InitFullSearch($dbi, $full);
 
 // quote regexp chars (space are treated as "or" operator)
! $full = preg_replace("/\s+/", "|", preg_quote($full));
 
 $found = 0;
--- 3,21 ----
 rcs_id('$Id$');
 
! if (empty($searchterm))
! $searchterm = '';		// FIXME: do something better here?
 
+ fix_magic_quotes_gpc($searchterm);
+ 
 $html = "<P><B>"
 	 . sprintf(gettext ("Searching for \"%s\" ....."),
! 		 htmlspecialchars($searchterm))
 	 . "</B></P>\n<DL>\n";
 
 // search matching pages
! $query = InitFullSearch($dbi, $searchterm);
 
 // quote regexp chars (space are treated as "or" operator)
! $qterm = preg_replace("/\s+/", "|", preg_quote($searchterm));
 
 $found = 0;
***************
*** 25,30 ****
 // print out all matching lines, highlighting the match
 for ($j = 0; $j < (count($pagehash["content"])); $j++) {
! if ($hits = preg_match_all("/$full/i", $pagehash["content"][$j], $dummy)) {
! $matched = preg_replace("/$full/i",
 				"${FieldSeparator}OT\0円${FieldSeparator}CT",
 $pagehash["content"][$j]);
--- 27,32 ----
 // print out all matching lines, highlighting the match
 for ($j = 0; $j < (count($pagehash["content"])); $j++) {
! if ($hits = preg_match_all("/$qterm/i", $pagehash["content"][$j], $dummy)) {
! $matched = preg_replace("/$qterm/i",
 				"${FieldSeparator}OT\0円${FieldSeparator}CT",
 $pagehash["content"][$j]);
Index: mysql.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/mysql.php,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** mysql.php	2001年01月04日 18:37:56	1.10
--- mysql.php	2001年02月10日 22:15:08	1.11
***************
*** 119,125 ****
 if (!mysql_query("replace into $dbi[table] ($COLUMNS) values ($VALUES)",
 			$dbi['dbc'])) {
! $msg = sprintf(gettext ("Error writing page '%s'"), $pagename);
 	 $msg .= "<BR>";
! 	 $msg .= sprintf(gettext ("MySQL error: %s"), mysql_error());
 ExitWiki($msg);
 }
--- 119,125 ----
 if (!mysql_query("replace into $dbi[table] ($COLUMNS) values ($VALUES)",
 			$dbi['dbc'])) {
! $msg = htmlspecialchars(sprintf(gettext ("Error writing page '%s'"), $pagename));
 	 $msg .= "<BR>";
! 	 $msg .= htmlspecialchars(sprintf(gettext ("MySQL error: %s"), mysql_error()));
 ExitWiki($msg);
 }
***************
*** 294,298 ****
 function GetWikiPageLinks($dbi, $pagename) {
 global $WikiLinksStore, $WikiScoreStore, $HitCountStore;
! 
 $pagename = addslashes($pagename);
 $res = mysql_query("select topage, score from $WikiLinksStore, $WikiScoreStore where topage=pagename and frompage='$pagename' order by score desc, topage");
--- 294,299 ----
 function GetWikiPageLinks($dbi, $pagename) {
 global $WikiLinksStore, $WikiScoreStore, $HitCountStore;
! $links = array();
! 
 $pagename = addslashes($pagename);
 $res = mysql_query("select topage, score from $WikiLinksStore, $WikiScoreStore where topage=pagename and frompage='$pagename' order by score desc, topage");
Index: pageinfo.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/pageinfo.php,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** pageinfo.php	2000年11月01日 11:31:41	1.5
--- pageinfo.php	2001年02月10日 22:15:08	1.6
***************
*** 2,76 ****
 <!-- Display the internal structure of a page. Steve Wainstead, June 2000 -->
 <?php
- if (get_magic_quotes_gpc()) {
- $info = stripslashes($info);
- }
 
- $encname = htmlspecialchars($info);
- $enter = gettext ("Enter a page name");
- $go = gettext ("Go");
- $html = "<form action=\"$ScriptUrl\" METHOD=GET>\n" .
- 	 "<input name=\"info\" value=\"$encname\">" .
- 	 " $enter\n" .
- 	 "<input type=submit value=$go><br>\n" .
- 	 "<input type=checkbox name=showpagesource";
 
! if (isset($showpagesource) && ($showpagesource == "on")) {
! $html .= " checked";
! }
! $html .= "> ";
! $html .= gettext ("Show the page source and references");
! $html .= "\n</form>\n";
! 
! // don't bother unless we were asked
! if (! $info) {
! GeneratePage('MESSAGE', $html, gettext("PageInfo"), 0);
! exit;
 }
 
! function ViewpageProps($name, $pagestore)
! {
! global $dbi, $showpagesource, $datetimeformat, $FieldSeparator;
! 
! $pagehash = RetrievePage($dbi, $name, $pagestore);
! if ($pagehash == -1) {
! $table = sprintf (gettext ("Page name '%s' is not in the database"),
! 		$name) . "\n";
 }
! else {
! 	 $table = "<table border=1 bgcolor=white>\n";
 
! 	 while (list($key, $val) = each($pagehash)) {
! 	 if ($key > 0 || !$key) #key is an array index
! 	 continue;
! if ((gettype($val) == "array") && ($showpagesource == "on")) {
! $val = implode($val, "$FieldSeparator#BR#$FieldSeparator\n");
! 	 $val = htmlspecialchars($val);
! 	 $val = str_replace("$FieldSeparator#BR#$FieldSeparator", "<br>", $val);
! }
! 	 elseif (($key == 'lastmodified') || ($key == 'created'))
! 	 $val = date($datetimeformat, $val);
! 	 else
! 	 $val = htmlspecialchars($val);
 
- $table .= "<tr><td>$key</td><td>$val</td></tr>\n";
- 	 }
 
! 	 $table .= "</table>";
! }
! return $table;
! }
 
! $html .= "<P><B>";
! $html .= gettext ("Current version");
! $html .= "</B></p>";
! // $dbi = OpenDataBase($WikiPageStore); --- done by index.php
! $html .= ViewPageProps($info, $WikiPageStore);
! 
! $html .= "<P><B>";
! $html .= gettext ("Archived version");
! $html .= "</B></p>";
! // $dbi = OpenDataBase($ArchivePageStore);
! $html .= ViewPageProps($info, $ArchivePageStore);
 
! GeneratePage('MESSAGE', $html, gettext("PageInfo").": '$info'", 0);
 ?>
--- 2,61 ----
 <!-- Display the internal structure of a page. Steve Wainstead, June 2000 -->
 <?php
 
 
! 
! function ViewpageProps($name, $pagestore)
! {
! global $dbi, $showpagesource, $datetimeformat, $FieldSeparator;
! 
! $pagehash = RetrievePage($dbi, $name, $pagestore);
! if ($pagehash == -1) {
! return QElement('p',
! 		 sprintf (gettext ("Page name '%s' is not in the database"),
! 			 $name));
 }
 
! $rows = '';
! while (list($key, $val) = each($pagehash)) {
! if ($key > 0 || !$key)
! 	 continue; //key is an array index
! $cols = QElement('td', array('align' => 'right'), $key);
! 
! if (is_array($val))
! {
! 	 if (empty($showpagesource))
! 	 continue;
! 	 $cols .= Element('td',
! 			 nl2br(htmlspecialchars(join("\n", $val))));
 }
! elseif (($key == 'lastmodified') || ($key == 'created'))
! 	 $cols .= QElement('td',
! 			 date($datetimeformat, $val));
! else
! 	 $cols .= QElement('td', $val);
! 
! $rows .= Element('tr', $cols);
! }
 
! return Element('table', array('border' => 1, 'bgcolor' => 'white'), $rows);
! }
 
 
! $html = '';
! 
! if (empty($showpagesource))
! {
! $text = gettext ("Show the page source");
! $url = WikiURL($pagename, array('action' => 'info',
! 				 'showpagesource' => 'on'));
! $html .= QElement('a', array('href' => $url), $text);
! }
! 
! $html .= Element('p', QElement('b', gettext ("Current version")));
! $html .= ViewPageProps($pagename, $WikiPageStore);
 
! $html .= Element('p', QElement('b', gettext ("Archived version")));
! $html .= ViewPageProps($pagename, $ArchivePageStore);
 
! GeneratePage('MESSAGE', $html, gettext("PageInfo").": '$pagename'", 0);
 ?>
Index: savepage.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/savepage.php,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** savepage.php	2001年02月08日 18:19:16	1.9
--- savepage.php	2001年02月10日 22:15:08	1.10
***************
*** 10,14 ****
 function UpdateRecentChanges($dbi, $pagename, $isnewpage)
 {
! global $remoteuser; // this is set in the config
 global $dateformat;
 global $WikiPageStore;
--- 10,14 ----
 function UpdateRecentChanges($dbi, $pagename, $isnewpage)
 {
! global $user;
 global $dateformat;
 global $WikiPageStore;
***************
*** 51,60 ****
 				 : $recentchanges['content'][$i++];
 
 // add the updated page's name to the array
 if($isnewpage) {
! $newpage[$k++] = "* [$pagename] (new) ..... $remoteuser\r";
 } else {
! 	 $diffurl = "phpwiki:?diff=" . rawurlencode($pagename);
! $newpage[$k++] = "* [$pagename] ([diff|$diffurl]) ..... $remoteuser\r";
 }
 if ($isNewDay)
--- 51,62 ----
 				 : $recentchanges['content'][$i++];
 
+ $userid = $user->id();
+ 
 // add the updated page's name to the array
 if($isnewpage) {
! $newpage[$k++] = "* [$pagename] (new) ..... $userid\r";
 } else {
! 	 $diffurl = "phpwiki:" . rawurlencode($pagename) . "?action=diff";
! $newpage[$k++] = "* [$pagename] ([diff|$diffurl]) ..... $userid\r";
 }
 if ($isNewDay)
***************
*** 106,111 ****
 
 
- 
- $pagename = rawurldecode($post);
 $pagehash = RetrievePage($dbi, $pagename, $WikiPageStore);
 
--- 108,111 ----
***************
*** 118,122 ****
 $newpage = 1;
 } else {
! if (($pagehash['flags'] & FLAG_PAGE_LOCKED) && !defined('WIKI_ADMIN')) {
 	 $html = "<p>" . gettext ("This page has been locked by the administrator and cannot be edited.");
 	 $html .= "\n<p>" . gettext ("Sorry for the inconvenience.");
--- 118,122 ----
 $newpage = 1;
 } else {
! if (($pagehash['flags'] & FLAG_PAGE_LOCKED) && ! $user->is_admin()) {
 	 $html = "<p>" . gettext ("This page has been locked by the administrator and cannot be edited.");
 	 $html .= "\n<p>" . gettext ("Sorry for the inconvenience.");
***************
*** 129,136 ****
 }
 
! // archive it if it's a new author
! if (empty($minor_edit)) {
! SaveCopyToArchive($dbi, $pagename, $pagehash);
! }
 $newpage = 0;
 }
--- 129,138 ----
 }
 
! if ($user->id() != $pagehash['author'] && ! $user->is_admin())
! 	 unset($minor_edit); // Force archive
! 
! if (empty($minor_edit))
! 	 SaveCopyToArchive($dbi, $pagename, $pagehash);
! 
 $newpage = 0;
 }
***************
*** 139,155 ****
 $pagehash['lastmodified'] = time();
 $pagehash['version']++;
! $pagehash['author'] = $remoteuser;
 
 // create page header
- $enc_url = rawurlencode($pagename);
- $enc_name = htmlspecialchars($pagename);
 $html = sprintf(gettext("Thank you for editing %s."),
! 		 "<a href=\"$ScriptUrl?$enc_url\">$enc_name</a>");
 $html .= "<br>\n";
 
 if (! empty($content)) {
 // patch from Grant Morgan <gr...@ry...> for magic_quotes_gpc
! if (get_magic_quotes_gpc())
! $content = stripslashes($content);
 
 $pagehash['content'] = preg_split('/[ \t\r]*\n/', chop($content));
--- 141,154 ----
 $pagehash['lastmodified'] = time();
 $pagehash['version']++;
! $pagehash['author'] = $user->id();
 
 // create page header
 $html = sprintf(gettext("Thank you for editing %s."),
! 		 WikiURL($pagename));
 $html .= "<br>\n";
 
 if (! empty($content)) {
 // patch from Grant Morgan <gr...@ry...> for magic_quotes_gpc
! fix_magic_quotes_gpc($content);
 
 $pagehash['content'] = preg_split('/[ \t\r]*\n/', chop($content));
***************
*** 161,174 ****
 }
 
- for ($i = 1; $i <= NUM_LINKS; $i++) {
- if (! empty(${'r'.$i})) {
- 	 if (preg_match("#^($AllowedProtocols):#", ${'r'.$i}))
- $pagehash['refs'][$i] = ${'r'.$i};
- 	 else
- 	 $html .= "<P>Link [$i]: <B>unknown protocol</B>" .
- 	 " - use one of $AllowedProtocols - link discarded.</P>\n";
- 	}
- }
- 
 InsertPage($dbi, $pagename, $pagehash);
 UpdateRecentChanges($dbi, $pagename, $newpage);
--- 160,163 ----
***************
*** 186,191 ****
 
 if (!empty($SignatureImg))
! $html .= "<P><img src=\"$SignatureImg\"></P>\n";
! 
 $html .= "<hr noshade><P>";
 include('lib/transform.php');
--- 175,180 ----
 
 if (!empty($SignatureImg))
! $html .= sprintf("<P><img src=\"%s\"></P>\n", MakeURLAbsolute($SignatureImg));
! 
 $html .= "<hr noshade><P>";
 include('lib/transform.php');
Index: search.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/search.php,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** search.php	2001年01月02日 00:10:28	1.3
--- search.php	2001年02月10日 22:15:08	1.4
***************
*** 3,19 ****
 rcs_id('$Id$');
 
! if(get_magic_quotes_gpc())
! $search = stripslashes($search);
 
 $html = "<P><B>"
 	 . sprintf(gettext ("Searching for \"%s\" ....."),
! 		 htmlspecialchars($search))
 	 . "</B></P>\n";
 
 // quote regexp chars
! $search = preg_quote($search);
 
 // search matching pages
! $query = InitTitleSearch($dbi, $search);
 $found = 0;
 while ($page = TitleSearchNextMatch($dbi, $query)) {
--- 3,21 ----
 rcs_id('$Id$');
 
! if (empty($searchterm))
! $searchterm = '';		// FIXME: do something better here?
 
+ fix_magic_quotes_gpc($searchterm);
+ 
 $html = "<P><B>"
 	 . sprintf(gettext ("Searching for \"%s\" ....."),
! 		 htmlspecialchars($searchterm))
 	 . "</B></P>\n";
 
 // quote regexp chars
! $search = preg_quote($searchterm);
 
 // search matching pages
! $query = InitTitleSearch($dbi, $searchterm);
 $found = 0;
 while ($page = TitleSearchNextMatch($dbi, $query)) {
Index: stdlib.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/stdlib.php,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -r1.26 -r1.27
*** stdlib.php	2001年02月08日 18:18:10	1.26
--- stdlib.php	2001年02月10日 22:15:08	1.27
***************
*** 1,7 ****
--- 1,11 ----
 <?php rcs_id('$Id$');
 
+ 
 /*
 Standard functions for Wiki functionality
 ExitWiki($errormsg)
+ MakeURLAbsolute($url, $base = false)
+ WikiURL($pagename, $args, $abs)
+ 	 
 LinkExistingWikiWord($wikiword, $linktext) 
 LinkUnknownWikiWord($wikiword, $linktext) 
***************
*** 19,22 ****
--- 23,46 ----
 */
 
+ function fix_magic_quotes_gpc (&$text)
+ {
+ if (get_magic_quotes_gpc()) {
+ $text = stripslashes($text);
+ }
+ return $text;
+ }
+ 
+ 
+ function get_remote_host () {
+ // Apache won't show REMOTE_HOST unless the admin configured it
+ // properly. We'll be nice and see if it's there.
+ if (getenv('REMOTE_HOST'))
+ return getenv('REMOTE_HOST');
+ $host = getenv('REMOTE_ADDR');
+ if (ENABLE_REVERSE_DNS)
+ return gethostbyaddr($host);
+ return $host;
+ }
+ 
 
 function ExitWiki($errormsg)
***************
*** 39,75 ****
 }
 
! 
! function LinkExistingWikiWord($wikiword, $linktext='') {
 global $ScriptUrl;
! $enc_word = rawurlencode($wikiword);
! if(empty($linktext))
! $linktext = htmlspecialchars($wikiword);
! return "<a href=\"$ScriptUrl?$enc_word\">$linktext</a>";
 }
 
! function LinkUnknownWikiWord($wikiword, $linktext='') {
! global $ScriptUrl;
! $enc_word = rawurlencode($wikiword);
! if(empty($linktext))
! $linktext = htmlspecialchars($wikiword);
! return "<u>$linktext</u><a href=\"$ScriptUrl?edit=$enc_word\">?</a>";
 }
 
 function LinkURL($url, $linktext='') {
! global $ScriptUrl;
 if(ereg("[<>\"]", $url)) {
 return "<b><u>BAD URL -- remove all of &lt;, &gt;, &quot;</u></b>";
 }
! if(empty($linktext))
! $linktext = htmlspecialchars($url);
! return "<a href=\"$url\">$linktext</a>";
 }
 
 function LinkImage($url, $alt='[External Image]') {
! global $ScriptUrl;
 if(ereg('[<>"]', $url)) {
 return "<b><u>BAD URL -- remove all of &lt;, &gt;, &quot;</u></b>";
 }
! return "<img src=\"$url\" ALT=\"$alt\">";
 }
 
--- 63,172 ----
 }
 
! function MakeURLAbsolute($url, $base = false) {
 global $ScriptUrl;
! 
! if (preg_match('@^(\w+:|/)@', $url))
! 	 return $url;
! 
! return preg_replace('@[^/]*$@', '', empty($base) ? $ScriptUrl : $base) . $url;
 }
+ 	 
 
! function WikiURL($pagename, $args = '', $make_abs_url = false) {
! global $ScriptName, $ScriptUrl;
! 
! if (is_array($args))
! {
! 	 reset($args);
! 	 $enc_args = array();
! 	 while (list ($key, $val) = each($args)) {
! 	 $enc_args[] = urlencode($key) . '=' . urlencode($val);
! 	 }
! 	 $args = join('&', $enc_args);
! }
! 
! if (USE_PATH_INFO) {
! 	 $url = $make_abs_url ? "$ScriptUrl/" : '';
! $url .= rawurlencode($pagename);
! 	 if ($args)
! 	 $url .= "?$args";
! }
! else {
! 	 $url = $make_abs_url ? $ScriptUrl : $ScriptName;
! $url .= "?pagename=" . rawurlencode($pagename);
! 	 if ($args)
! 	 $url .= "&$args";
! }
! return $url;
 }
 
+ define('NO_END_TAG_PAT',
+ 	 '/^' . join('|', array('area', 'base', 'basefont',
+ 				 'br', 'col', 'frame',
+ 				 'hr', 'image', 'input',
+ 				 'isindex', 'link', 'meta',
+ 				 'param')) . '$/i');
+ 	 
+ function Element($tag, $args = '', $content = '')
+ {
+ $html = "<$tag";
+ if (is_array($args))
+ {
+ 	 while (list($key, $val) = each($args)) 
+ 	 $html .= sprintf(' %s="%s"', $key, htmlspecialchars($val));
+ }
+ else
+ 	 $content = $args;
+ 
+ $html .= '>';
+ if (!preg_match(NO_END_TAG_PAT, $tag))
+ {
+ 	 $html .= $content;
+ 	 $html .= "</$tag>";
+ }
+ return $html;
+ }
+ 
+ function QElement($tag, $args = '', $content = '')
+ {
+ if (is_array($args))
+ 	 return Element($tag, $args, htmlspecialchars($content));
+ else
+ {
+ 	 $content = $args;
+ 	 return Element($tag, htmlspecialchars($content));
+ }
+ }
+ 
 function LinkURL($url, $linktext='') {
! // FIXME: Is this needed (or sufficient?)
 if(ereg("[<>\"]", $url)) {
 return "<b><u>BAD URL -- remove all of &lt;, &gt;, &quot;</u></b>";
 }
! return QElement('a', array('href' => $url), ($linktext ? $linktext : $url));
 }
 
+ function LinkExistingWikiWord($wikiword, $linktext='') {
+ return LinkURL(WikiURL($wikiword),
+ 		 $linktext ? $linktext : $wikiword);
+ }
+ 
+ function LinkUnknownWikiWord($wikiword, $linktext='') {
+ if (empty($linktext))
+ 	 $linktext = $wikiword;
+ 
+ return QElement('u', $linktext)
+ 	 . QElement('a', array('href' => WikiURL($wikiword, array('action' => 'edit'))),
+ 		 '?');
+ }
+ 
+ 
 function LinkImage($url, $alt='[External Image]') {
! // FIXME: Is this needed (or sufficient?)
! // As long as the src in htmlspecialchars()ed I think it's safe.
 if(ereg('[<>"]', $url)) {
 return "<b><u>BAD URL -- remove all of &lt;, &gt;, &quot;</u></b>";
 }
! return Element('img', array('src' => $url, 'alt' => $alt));
 }
 
***************
*** 78,102 ****
 
 list( $wiki, $page ) = split( ":", $link );
- if(empty($linktext))
- $linktext = htmlspecialchars($link);
- $page = urlencode($page);
- return "<a href=\"$interwikimap[$wiki]$page\">$linktext</a>";
- }
- 
- 
- function ParseAdminTokens($line) {
- global $ScriptUrl;
 
! while (preg_match("/%%ADMIN-INPUT-(.*?)-(\w+)%%/", $line, $matches)) {
! 	 $head = str_replace('_', ' ', $matches[2]);
! $form = "<FORM ACTION=\"$ScriptUrl\" METHOD=POST>"
! 		."$head: <INPUT NAME=$matches[1] SIZE=20> "
! 		."<INPUT TYPE=SUBMIT VALUE=\"" . gettext("Go") . "\">"
! 		."</FORM>";
! 	 $line = str_replace($matches[0], $form, $line);
! }
! return $line;
 }
 
 // converts spaces to tabs
 function CookSpaces($pagearray) {
--- 175,184 ----
 
 list( $wiki, $page ) = split( ":", $link );
 
! $url = $interwikimap[$wiki] . urlencode($page);
! return LinkURL($url, $linktext ? $linktext : $link);
 }
 
+ 
 // converts spaces to tabs
 function CookSpaces($pagearray) {
***************
*** 138,141 ****
--- 220,296 ----
 
 
+ function MakeWikiForm ($pagename, $args, $button_text = '') {
+ global $ScriptUrl;
+ 
+ $formargs['action'] = USE_PATH_INFO ? WikiURL($pagename) : $ScriptUrl;
+ $formargs['method'] = 'post';
+ $contents = '';
+ $input_seen = 0;
+ 
+ while (list($key, $val) = each($args))
+ {
+ 	 $a = array('name' => $key, 'value' => $val, 'type' => 'hidden');
+ 	 
+ 	 if (preg_match('/^ (\d*) \( (.*) \) $/x', $val, $m))
+ 	 {
+ 	 $input_seen++;
+ 	 $a['type'] = 'text';
+ 	 $a['size'] = $m[1] ? $m[1] : 30;
+ 	 $a['value'] = $m[2];
+ 	 }
+ 
+ 	 $contents .= Element('input', $a);
+ }
+ 
+ if (!empty($button_text)) {
+ 	 if ($input_seen)
+ 	 $contents .= '&nbsp;&nbsp;';
+ 	 $contents .= Element('input', array('type' => 'submit',
+ 					 'value' => $button_text));
+ }
+ 
+ return Element('form', $formargs, $contents);
+ }
+ 
+ function SplitQueryArgs ($query_args = '') 
+ {
+ $split_args = split('&', $query_args);
+ $args = array();
+ while (list($key, $val) = each($split_args))
+ 	 if (preg_match('/^ ([^=]+) =? (.*) /x', $val, $m))
+ 	 $args[$m[1]] = $m[2];
+ return $args;
+ }
+ 
+ function LinkPhpwikiURL($url, $text = '') {
+ global $pagename;
+ $args = array();
+ $page = $pagename;
+ 
+ if (!preg_match('/^ phpwiki: ([^?]*) [?]? (.*) $/x', $url, $m))
+ return "<b><u>BAD phpwiki: URL</u></b>";
+ 
+ if ($m[1])
+ 	 $page = urldecode($m[1]);
+ $qargs = $m[2];
+ 
+ if (!$page && preg_match('/^(diff|edit|links|info|diff)=([^&]+)$/', $qargs, $m))
+ {
+ 	 // Convert old style links (to not break diff links in RecentChanges).
+ 	 $page = urldecode($m[2]);
+ 	 $args = array("action" => $m[1]);
+ }
+ else
+ {
+ 	 $args = SplitQueryArgs($qargs);
+ }
+ 
+ // FIXME: ug, don't like this
+ if (preg_match('/=\d*\(/', $qargs))
+ 	 return MakeWikiForm($page, $args, $text);
+ else
+ 	 return LinkURL(WikiURL($page, $args), $text ? $text : $url);
+ }
+ 
 function ParseAndLink($bracketlink) {
 global $dbi, $ScriptUrl, $AllowedProtocols, $InlineImages;
***************
*** 153,157 ****
 // named link of the form "[some link name | http://blippy.com/]"
 $URL = trim($matches[3]);
! $linkname = htmlspecialchars(trim($matches[1]));
 	 $linktype = 'named';
 } else {
--- 308,312 ----
 // named link of the form "[some link name | http://blippy.com/]"
 $URL = trim($matches[3]);
! $linkname = trim($matches[1]);
 	 $linktype = 'named';
 } else {
***************
*** 176,182 ****
 } elseif (preg_match("#^phpwiki:(.*)#", $URL, $match)) {
 	 $link['type'] = "url-wiki-$linktype";
! 	 if(empty($linkname))
! 	 $linkname = htmlspecialchars($URL);
! 	 $link['link'] = "<a href=\"$ScriptUrl$match[1]\">$linkname</a>";
 } elseif (preg_match("#^\d+$#", $URL)) {
 $link['type'] = "footnote-$linktype";
--- 331,335 ----
 } elseif (preg_match("#^phpwiki:(.*)#", $URL, $match)) {
 	 $link['type'] = "url-wiki-$linktype";
! 	 $link['link'] = LinkPhpwikiURL($URL, $linkname);
 } elseif (preg_match("#^\d+$#", $URL)) {
 $link['type'] = "footnote-$linktype";
***************
*** 285,289 ****
 global $ScriptUrl, $AllowedProtocols, $templates;
 global $datetimeformat, $dbi, $logo, $FieldSeparator;
! 
 if (!is_array($hash))
 unset($hash);
--- 438,443 ----
 global $ScriptUrl, $AllowedProtocols, $templates;
 global $datetimeformat, $dbi, $logo, $FieldSeparator;
! global $user;
! 
 if (!is_array($hash))
 unset($hash);
***************
*** 329,347 ****
 _iftoken('LOCK',	(isset($hash['flags']) &&
 			($hash['flags'] & FLAG_PAGE_LOCKED)), $page);
! _iftoken('ADMIN', defined('WIKI_ADMIN'), $page);
! _iftoken('MINOR_EDIT', isset($hash['minor_edit']), $page);	
 
! _dotoken('SCRIPTURL', $ScriptUrl, $page);
 _dotoken('PAGE', htmlspecialchars($name), $page);
! _dotoken('ALLOWEDPROTOCOLS', $AllowedProtocols, $page);
! _dotoken('LOGO', $logo, $page);
 
 // invalid for messages (search results, error messages)
 if ($template != 'MESSAGE') {
 _dotoken('PAGEURL', rawurlencode($name), $page);
! _dotoken('LASTMODIFIED',
! 			date($datetimeformat, $hash['lastmodified']), $page);
! _dotoken('LASTAUTHOR', $hash['author'], $page);
! _dotoken('VERSION', $hash['version'], $page);
 	 if (strstr($page, "$FieldSeparator#HITS$FieldSeparator#")) {
 _dotoken('HITS', GetHitCount($dbi, $name), $page);
--- 483,522 ----
 _iftoken('LOCK',	(isset($hash['flags']) &&
 			($hash['flags'] & FLAG_PAGE_LOCKED)), $page);
! _iftoken('ADMIN', $user->is_admin(), $page);
! _iftoken('ANONYMOUS', !$user->is_authenticated(), $page);
 
! if (empty($hash['minor_edit_checkbox']))
! 	 $hash['minor_edit_checkbox'] = '';
! _iftoken('MINOR_EDIT_CHECKBOX', $hash['minor_edit_checkbox'], $page);
! 
! _dotoken('MINOR_EDIT_CHECKBOX', $hash['minor_edit_checkbox'], $page);
! 
! _dotoken('USERID', htmlspecialchars($user->id()), $page);
! _dotoken('SCRIPTURL', htmlspecialchars($ScriptUrl), $page);
 _dotoken('PAGE', htmlspecialchars($name), $page);
! _dotoken('LOGO', htmlspecialchars(MakeURLAbsolute($logo)), $page);
! global $RCS_IDS;
! _dotoken('RCS_IDS', join("\n", $RCS_IDS), $page);
 
+ // FIXME: Clean up this stuff
+ $browse_page = WikiURL($name);
+ _dotoken('BROWSE_PAGE', $browse_page, $page);
+ $arg_sep = strstr($browse_page, '?') ? '&amp;' : '?';
+ _dotoken('ACTION', $browse_page . $arg_sep . "action=", $page);
+ _dotoken('BROWSE', WikiURL(''), $page);
+ 
+ // FIXME: this is possibly broken.
+ _dotoken('BASE_URL', WikiURL($name, '', 'absolute_url'), $page);
+ 
 // invalid for messages (search results, error messages)
 if ($template != 'MESSAGE') {
 _dotoken('PAGEURL', rawurlencode($name), $page);
! 	 if (!empty($hash['lastmodified']))
! 	 _dotoken('LASTMODIFIED',
! 		 date($datetimeformat, $hash['lastmodified']), $page);
! 	 if (!empty($hash['author']))
! 	 _dotoken('LASTAUTHOR', $hash['author'], $page);
! 	 if (!empty($hash['version']))
! 	 _dotoken('VERSION', $hash['version'], $page);
 	 if (strstr($page, "$FieldSeparator#HITS$FieldSeparator#")) {
 _dotoken('HITS', GetHitCount($dbi, $name), $page);
***************
*** 350,361 ****
 _dotoken('RELATEDPAGES', LinkRelatedPages($dbi, $name), $page);
 	 }
- }
- 
- // valid only for EditLinks
- if ($template == 'EDITLINKS') {
- 	 for ($i = 1; $i <= NUM_LINKS; $i++) {
- $ref = isset($hash['refs'][$i]) ? $hash['refs'][$i] : '';
- 	 _dotoken("R$i", $ref, $page);
- }
 }
 
--- 525,528 ----
Index: transform.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/transform.php,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** transform.php	2001年02月09日 04:00:25	1.13
--- transform.php	2001年02月10日 22:15:08	1.14
***************
*** 205,209 ****
 
 $transform->register(WT_SIMPLE_MARKUP, 'wtm_htmlchars');
- $transform->register(WT_SIMPLE_MARKUP, 'wtm_hr');
 $transform->register(WT_SIMPLE_MARKUP, 'wtm_linebreak');
 $transform->register(WT_SIMPLE_MARKUP, 'wtm_bold_italics');
--- 205,208 ----
***************
*** 217,220 ****
--- 216,220 ----
 $transform->register(WT_MODE_MARKUP, 'wtm_preformatted');
 $transform->register(WT_MODE_MARKUP, 'wtm_headings');
+ $transform->register(WT_MODE_MARKUP, 'wtm_hr');
 $transform->register(WT_MODE_MARKUP, 'wtm_paragraph');
 
***************
*** 387,394 ****
 }
 
- // four or more dashes to <hr>
- function wtm_hr($line, &$transformer) {
- return ereg_replace("^-{4,}", '<hr>', $line);
- }
 
 // %%% are linebreaks
--- 387,390 ----
***************
*** 411,420 ****
 // wiki token: title search dialog
 function wtm_title_search($line, &$transformer) {
- global $ScriptUrl;
 if (strpos($line, '%%Search%%') !== false) {
! $html = "<form action=\"$ScriptUrl\">\n" .
! 	 "<input type=text size=30 name=search>\n" .
! 	 "<input type=submit value=\"". htmlspecialchars(gettext("Search")) .
! 	 "\"></form>\n";
 	 $line = str_replace('%%Search%%', $html, $line);
 }
--- 407,415 ----
 // wiki token: title search dialog
 function wtm_title_search($line, &$transformer) {
 if (strpos($line, '%%Search%%') !== false) {
! 	 $html = LinkPhpwikiURL(
! 	 "phpwiki:?action=search&searchterm=()&searchtype=title",
! 	 gettext("Search"));
! 
 	 $line = str_replace('%%Search%%', $html, $line);
 }
***************
*** 424,433 ****
 // wiki token: fulltext search dialog
 function wtm_fulltext_search($line, &$transformer) {
- global $ScriptUrl;
 if (strpos($line, '%%Fullsearch%%') !== false) {
! $html = "<form action=\"$ScriptUrl\">\n" .
! 	 "<input type=text size=30 name=full>\n" .
! 	 "<input type=submit value=\"". htmlspecialchars(gettext("Search")) .
! 	 "\"></form>\n";
 	 $line = str_replace('%%Fullsearch%%', $html, $line);
 }
--- 419,427 ----
 // wiki token: fulltext search dialog
 function wtm_fulltext_search($line, &$transformer) {
 if (strpos($line, '%%Fullsearch%%') !== false) {
! 	 $html = LinkPhpwikiURL(
! 	 "phpwiki:?action=search&searchterm=()&searchtype=full",
! 	 gettext("Search"));
! 
 	 $line = str_replace('%%Fullsearch%%', $html, $line);
 }
***************
*** 513,516 ****
--- 507,522 ----
 	 $line = preg_replace("/^!+/", '', $line);
 	 $line = $trfrm->SetHTMLMode($heading, ZERO_LEVEL, 0) . $line;
+ }
+ return $line;
+ }
+ 
+ // four or more dashes to <hr>
+ // Note this is of type WT_MODE_MARKUP becuase <hr>'s aren't
+ // allowed within <p>'s. (e.g. "<p><hr></p>" is not valid HTML.)
+ function wtm_hr($line, &$trfrm) {
+ if (preg_match('/^-{4,}(.*)$/', $line, $m)) {
+ 	 $line = $trfrm->SetHTMLMode('', ZERO_LEVEL, 0) . '<hr>';
+ 	 if ($m[1])
+ 	 $line .= $trfrm->SetHTMLMode('p', ZERO_LEVEL, 0) . $m[1];
 }
 return $line;
Index: ziplib.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/ziplib.php,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** ziplib.php	2001年02月08日 02:34:32	1.4
--- ziplib.php	2001年02月10日 22:15:08	1.5
***************
*** 67,70 ****
--- 67,71 ----
 if (!($fp = gzopen($filename, "rb")))
 die("gzopen failed");
+ $unz = '';
 while ($buf = gzread($fp, 4096))
 $unz .= $buf;
***************
*** 265,269 ****
 }
 
! if ($attrib['write_protected'])
 	$atx = (0100444 << 16) | 1; // S_IFREG + read permissions to everybody.
 else
--- 266,270 ----
 }
 
! if (!empty($attrib['write_protected']))
 	$atx = (0100444 << 16) | 1; // S_IFREG + read permissions to everybody.
 else
***************
*** 272,276 ****
 $ati = $attrib['is_ascii'] ? 1 : 0;
 
! if (!$attrib['mtime'])
 	$attrib['mtime'] = time();
 list ($mod_date, $mod_time) = unixtime2dostime($attrib['mtime']);
--- 273,277 ----
 $ati = $attrib['is_ascii'] ? 1 : 0;
 
! if (empty($attrib['mtime']))
 	$attrib['mtime'] = time();
 list ($mod_date, $mod_time) = unixtime2dostime($attrib['mtime']);
***************
*** 278,282 ****
 // Construct parts common to "Local file header" and "Central
 // directory file header."
! 
 $head = pack("vvvvvVVVvv",
 		 20,	// Version needed to extract (FIXME: is this right?)
--- 279,287 ----
 // Construct parts common to "Local file header" and "Central
 // directory file header."
! if (!isset($attrib['extra_field']))
! 	$attrib['extra_field'] = '';
! if (!isset($attrib['file_comment']))
! 	$attrib['file_comment'] = '';
! 
 $head = pack("vvvvvVVVvv",
 		 20,	// Version needed to extract (FIXME: is this right?)
***************
*** 456,460 ****
 preg_match('/^([ !-<>-~]*)(?:([!-<>-~]$)|(.))/s', $string, $match);
 $quoted .= $match[1] . $match[2];
! if ($match[3])
 	 $quoted .= sprintf("=%02X", ord($match[3]));
 $string = substr($string, strlen($match[0]));
--- 461,465 ----
 preg_match('/^([ !-<>-~]*)(?:([!-<>-~]$)|(.))/s', $string, $match);
 $quoted .= $match[1] . $match[2];
! if (!empty($match[3]))
 	 $quoted .= sprintf("=%02X", ord($match[3]));
 $string = substr($string, strlen($match[0]));
***************
*** 522,528 ****
 {
 // phpwiki's with versions > 1.2.x shouldn't have references.
! for ($i = 1; $i <= NUM_LINKS; $i++) 
! 	 if ($ref = $refs[$i])
! 	 $params["ref$i"] = rawurlencode($ref);
 }
 
--- 527,533 ----
 {
 // phpwiki's with versions > 1.2.x shouldn't have references.
! for ($i = 1; $i <= 12 /*NUM_LINKS*/; $i++) 
! 	 if (!empty($refs[$i]))
! 	 $params["ref$i"] = rawurlencode($refs[$i]);
 }
 
***************
*** 570,575 ****
 
 if (! preg_match("/^\r?\n/", $string, $match))
! die("No blank line after headers:\n '"
! 	 . htmlspecialchars($string) . "'");
 $string = substr($string, strlen($match[0]));
 
--- 575,583 ----
 
 if (! preg_match("/^\r?\n/", $string, $match))
! {
! // No blank line after headers.
! return false;
! }
! 
 $string = substr($string, strlen($match[0]));
 
***************
*** 638,641 ****
--- 646,675 ----
 }
 
+ function GenerateFootnotesFromRefs($params)
+ {
+ $footnotes = array();
+ reset($params);
+ while (list($p, $reference) = each($params))
+ {
+ if (preg_match('/^ref([1-9][0-9]*)$/', $p, $m))
+ 	 $footnotes[$m[1]] = sprintf(gettext ("[%d] See [%s]"),
+ 				 $m[1], rawurldecode($reference));
+ }
+ 
+ if (sizeof($footnotes) > 0)
+ {
+ ksort($footnotes);
+ return "-----\n"
+ 	 . gettext ("!References") . "\n"
+ 	 . join("\n%%%\n", $footnotes) . "\n";
+ }
+ else
+ return "";
+ }
+ 
+ 
+ // Convert references in meta-data to footnotes.
+ // Only zip archives generated by phpwiki 1.2.x or earlier should have
+ // references.
 function ParseMimeifiedPages ($data)
 {
***************
*** 677,699 ****
 die("Unknown encoding type: $encoding");
 
! // Convert references in meta-data to footnotes.
! // Only zip archives generated by phpwiki 1.2.x or earlier should have
! // references.
! $footnotes = '';
! for ($i = 1; $i <= NUM_LINKS; $i++)
! {
! if (empty($params["ref$i"]))
! 	 continue;
! $footnotes .= sprintf(gettext ("[%d] See [%s]"),
! 			 $i, rawurldecode($params["ref$i"])) . "\n%%%\n";
! }
 
- if ($footnotes)
- {
- $data .= "-----\n";
- $data .= gettext ("!References") . "\n";
- $data .= $footnotes;
- }
- 
 $pagehash['content'] = preg_split('/[ \t\r]*\n/', chop($data));
 
--- 711,716 ----
 die("Unknown encoding type: $encoding");
 
! $data .= GenerateFootnotesFromRefs($params);
 
 $pagehash['content'] = preg_split('/[ \t\r]*\n/', chop($data));
 
--- editlinks.php DELETED ---
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /