SourceForge logo
SourceForge logo
Menu

phpwiki-checkins

From: Arno H. <aho...@us...> - 2001年01月04日 18:32:23
Update of /cvsroot/phpwiki/phpwiki/lib
In directory usw-pr-cvs1:/tmp/cvs-serv8258
Modified Files:
	stdlib.php 
Log Message:
moved UpdateRecentChanges() to savepage.php
ZERO/SINGLE_DEPTH renamed into ZERO/NESTED_LEVEL
added and corrected some comments, some code cleanup
Index: stdlib.php
===================================================================
RCS file: /cvsroot/phpwiki/phpwiki/lib/stdlib.php,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -r1.18 -r1.19
*** stdlib.php	2001年01月01日 23:34:57	1.18
--- stdlib.php	2001年01月04日 18:32:25	1.19
***************
*** 1,22 ****
! <?php
! rcs_id('$Id$');
 /*
 Standard functions for Wiki functionality
! LinkRelatedPages($dbi, $pagename)
! 	 GeneratePage($template, $content, $name, $hash)
 LinkExistingWikiWord($wikiword) 
 LinkUnknownWikiWord($wikiword) 
! LinkURL($url)
! LinkImage($url)
! RenderQuickSearch() 
! RenderFullSearch() 
 RenderMostPopular()
 CookSpaces($pagearray) 
! class Stack
 SetHTMLOutputMode($newmode, $depth)
 UpdateRecentChanges($dbi, $pagename, $isnewpage) 
 ParseAndLink($bracketlink)
 ExtractWikiPageLinks($content)
! ExitWiki($errormsg)
 */
 
--- 1,22 ----
! <?php rcs_id('$Id$');
! 
 /*
 Standard functions for Wiki functionality
! ExitWiki($errormsg)
 LinkExistingWikiWord($wikiword) 
 LinkUnknownWikiWord($wikiword) 
! LinkURL($url, $linktext)
! LinkImage($url, $alt)
! RenderQuickSearch($value)
! RenderFullSearch($value)
 RenderMostPopular()
 CookSpaces($pagearray) 
! class Stack (push(), pop(), cnt(), top())
 SetHTMLOutputMode($newmode, $depth)
 UpdateRecentChanges($dbi, $pagename, $isnewpage) 
 ParseAndLink($bracketlink)
 ExtractWikiPageLinks($content)
! LinkRelatedPages($dbi, $pagename)
! 	 GeneratePage($template, $content, $name, $hash)
 */
 
***************
*** 42,171 ****
 
 
- function LinkRelatedPages($dbi, $pagename)
- {
- // currently not supported everywhere
- if(!function_exists('GetWikiPageLinks'))
- return '';
- 
- $links = GetWikiPageLinks($dbi, $pagename);
- 
- $txt = "<b>";
- $txt .= sprintf (gettext ("%d best incoming links:"), NUM_RELATED_PAGES);
- $txt .= "</b>\n";
- for($i = 0; $i < NUM_RELATED_PAGES; $i++) {
- if(isset($links['in'][$i])) {
- list($name, $score) = $links['in'][$i];
- 	 $txt .= LinkExistingWikiWord($name) . " ($score), ";
- }
- }
- 
- $txt .= "\n<br><b>";
- $txt .= sprintf (gettext ("%d best outgoing links:"), NUM_RELATED_PAGES);
- $txt .= "</b>\n";
- for($i = 0; $i < NUM_RELATED_PAGES; $i++) {
- if(isset($links['out'][$i])) {
- list($name, $score) = $links['out'][$i];
- 	 if(IsWikiPage($dbi, $name))
- 	 $txt .= LinkExistingWikiWord($name) . " ($score), ";
- }
- }
- 
- $txt .= "\n<br><b>";
- $txt .= sprintf (gettext ("%d most popular nearby:"), NUM_RELATED_PAGES);
- $txt .= "</b>\n";
- for($i = 0; $i < NUM_RELATED_PAGES; $i++) {
- if(isset($links['popular'][$i])) {
- list($name, $score) = $links['popular'][$i];
- 	 $txt .= LinkExistingWikiWord($name) . " ($score), ";
- }
- }
- 
- return $txt;
- }
- 
- 
- function GeneratePage($template, $content, $name, $hash)
- {
- global $ScriptUrl, $AllowedProtocols, $templates;
- global $datetimeformat, $dbi, $logo, $FieldSeparator;
- 
- if (!is_array($hash))
- unset($hash);
- 
- function _dotoken ($id, $val, &$page) {
- 	 global $FieldSeparator;
- $page = str_replace("$FieldSeparator#$id$FieldSeparator#",
- 				$val, $page);
- }
- 
- function _iftoken ($id, $condition, &$page) {
- global $FieldSeparator;
- 
- 	 // line based IF directive
- 	 $lineyes = "$FieldSeparator#IF $id$FieldSeparator#";
- 	 $lineno = "$FieldSeparator#IF !$id$FieldSeparator#";
- // block based IF directive
- 	 $blockyes = "$FieldSeparator#IF:$id$FieldSeparator#";
- 	 $blockyesend = "$FieldSeparator#ENDIF:$id$FieldSeparator#";
- 	 $blockno = "$FieldSeparator#IF:!$id$FieldSeparator#";
- 	 $blocknoend = "$FieldSeparator#ENDIF:!$id$FieldSeparator#";
- 
- 	 if ($condition) {
- 	 $page = str_replace($lineyes, '', $page);
- 	 $page = str_replace($blockyes, '', $page);
- 	 $page = str_replace($blockyesend, '', $page);
- 	 $page = preg_replace("/$blockno(.*?)$blocknoend/s", '', $page);
- 	 $page = ereg_replace("${lineno}[^\n]*\n", '', $page);
- } else {
- 	 $page = str_replace($lineno, '', $page);
- 	 $page = str_replace($blockno, '', $page);
- 	 $page = str_replace($blocknoend, '', $page);
- 	 $page = preg_replace("/$blockyes(.*?)$blockyesend/s", '', $page);
- 	 $page = ereg_replace("${lineyes}[^\n]*\n", '', $page);
- 	 }
- }
- 
- $page = join('', file($templates[$template]));
- $page = str_replace('###', "$FieldSeparator#", $page);
- 
- // valid for all pagetypes
- _iftoken('COPY', isset($hash['copy']), $page);
- _iftoken('LOCK',	(isset($hash['flags']) &&
- 			($hash['flags'] & FLAG_PAGE_LOCKED)), $page);
- _iftoken('ADMIN', defined('WIKI_ADMIN'), $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);
- 	 }
- 	 if (strstr($page, "$FieldSeparator#RELATEDPAGES$FieldSeparator#")) {
- _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);
- }
- }
- 
- _dotoken('CONTENT', $content, $page);
- print $page;
- }
- 
- 
 function LinkExistingWikiWord($wikiword, $linktext='') {
 global $ScriptUrl;
--- 42,45 ----
***************
*** 189,193 ****
 return "<b><u>BAD URL -- remove all of &lt;, &gt;, &quot;</u></b>";
 }
- 
 if(empty($linktext))
 $linktext = htmlspecialchars($url);
--- 63,66 ----
***************
*** 195,202 ****
 }
 
! 
! function LinkImage($url, $alt="[External Image]") {
 global $ScriptUrl;
! if(ereg("[<>\"]", $url)) {
 return "<b><u>BAD URL -- remove all of &lt;, &gt;, &quot;</u></b>";
 }
--- 68,74 ----
 }
 
! function LinkImage($url, $alt='[External Image]') {
 global $ScriptUrl;
! if(ereg('[<>"]', $url)) {
 return "<b><u>BAD URL -- remove all of &lt;, &gt;, &quot;</u></b>";
 }
***************
*** 205,209 ****
 
 
! function RenderQuickSearch($value = "") {
 global $ScriptUrl;
 return "<form action=\"$ScriptUrl\">\n" .
--- 77,81 ----
 
 
! function RenderQuickSearch($value = '') {
 global $ScriptUrl;
 return "<form action=\"$ScriptUrl\">\n" .
***************
*** 213,217 ****
 }
 
! function RenderFullSearch($value = "") {
 global $ScriptUrl;
 return "<form action=\"$ScriptUrl\">\n" .
--- 85,89 ----
 }
 
! function RenderFullSearch($value = '') {
 global $ScriptUrl;
 return "<form action=\"$ScriptUrl\">\n" .
***************
*** 234,242 ****
 }
 
 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> "
--- 106,115 ----
 }
 
+ 
 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> "
***************
*** 287,292 ****
 
 
! // I couldn't move this to lib/config.php because it 
! // wasn't declared yet.
 $stack = new Stack;
 
--- 160,164 ----
 
 
! // I couldn't move this to lib/config.php because it wasn't declared yet.
 $stack = new Stack;
 
***************
*** 296,310 ****
 plain text etc. When we change modes we have to issue close tags
 for one mode and start tags for another.
 */
 
! function SetHTMLOutputMode($tag, $tagdepth, $tabcount) {
 global $stack;
! $retvar = "";
 
! if ($tagdepth == SINGLE_DEPTH) {
! if ($tabcount < $stack->cnt()) {
! // there are fewer tabs than stack,
 	 // reduce stack to that tab count
! while ($stack->cnt() > $tabcount) {
 $closetag = $stack->pop();
 if ($closetag == false) {
--- 168,205 ----
 plain text etc. When we change modes we have to issue close tags
 for one mode and start tags for another.
+ 
+ $tag ... HTML tag to insert
+ $tagtype ... ZERO_LEVEL - close all open tags before inserting $tag
+ 		 NESTED_LEVEL - close tags until depths match
+ $level ... nesting level (depth) of $tag
+ 		 nesting is arbitrary limited to 10 levels
 */
 
! function SetHTMLOutputMode($tag, $tagtype, $level)
! {
 global $stack;
! $retvar = '';
! 
! if ($tagtype == ZERO_LEVEL) {
! // empty the stack until $level == 0;
! if ($tag == $stack->top()) {
! return; // same tag? -> nothing to do
! }
! while ($stack->cnt() > 0) {
! $closetag = $stack->pop();
! $retvar .= "</$closetag>\n";
! }
 
! if ($tag) {
! $retvar .= "<$tag>\n";
! $stack->push($tag);
! }
! 
! 
! } elseif ($tagtype == NESTED_LEVEL) {
! if ($level < $stack->cnt()) {
! // $tag has fewer nestings (old: tabs) than stack,
 	 // reduce stack to that tab count
! while ($stack->cnt() > $level) {
 $closetag = $stack->pop();
 if ($closetag == false) {
***************
*** 323,331 ****
 	 }
 
! } elseif ($tabcount > $stack->cnt()) {
 // we add the diff to the stack
 // stack might be zero
! while ($stack->cnt() < $tabcount) {
! #echo "<$tag>\n";
 $retvar .= "<$tag>\n";
 $stack->push($tag);
--- 218,225 ----
 	 }
 
! } elseif ($level > $stack->cnt()) {
 // we add the diff to the stack
 // stack might be zero
! while ($stack->cnt() < $level) {
 $retvar .= "<$tag>\n";
 $stack->push($tag);
***************
*** 336,377 ****
 }
 
! } else {
 if ($tag == $stack->top()) {
! return;
 } else {
 $closetag = $stack->pop();
- #echo "</$closetag>\n";
- #echo "<$tag>\n";
 $retvar .= "</$closetag>\n";
 $retvar .= "<$tag>\n";
 $stack->push($tag);
 }
- }
- 
- } elseif ($tagdepth == ZERO_DEPTH) {
- // empty the stack for $depth == 0;
- // what if the stack is empty?
- if ($tag == $stack->top()) {
- return;
 }
! while ($stack->cnt() > 0) {
! $closetag = $stack->pop();
! #echo "</$closetag>\n";
! $retvar .= "</$closetag>\n";
! }
! 
! if ($tag) {
! #echo "<$tag>\n";
! $retvar .= "<$tag>\n";
! $stack->push($tag);
! }
 
! } else {
! // error
! ExitWiki ("Passed bad tag depth value in SetHTMLOutputMode");
 }
 
 return $retvar;
- 
 }
 // end SetHTMLOutputMode
--- 230,251 ----
 }
 
! } else { // $level == $stack->cnt()
 if ($tag == $stack->top()) {
! return; // same tag? -> nothing to do
 } else {
+ 	 // different tag - close old one, add new one
 $closetag = $stack->pop();
 $retvar .= "</$closetag>\n";
 $retvar .= "<$tag>\n";
 $stack->push($tag);
 }
 }
! 
 
! } else { // unknown $tagtype
! ExitWiki ("Passed bad tag type value in SetHTMLOutputMode");
 }
 
 return $retvar;
 }
 // end SetHTMLOutputMode
***************
*** 379,455 ****
 
 
- // The Recent Changes file is solely handled here
- function UpdateRecentChanges($dbi, $pagename, $isnewpage) {
- 
- global $remoteuser; // this is set in the config
- global $dateformat;
- global $WikiPageStore;
- 
- $recentchanges = RetrievePage($dbi, gettext ("RecentChanges"), 
- 	$WikiPageStore);
- 
- // this shouldn't be necessary, since PhpWiki loads 
- // default pages if this is a new baby Wiki
- if ($recentchanges == -1) {
- $recentchanges = array(); 
- }
- 
- $now = time();
- $today = date($dateformat, $now);
- 
- if (date($dateformat, $recentchanges["lastmodified"]) != $today) {
- $isNewDay = TRUE;
- $recentchanges["lastmodified"] = $now;
- } else {
- $isNewDay = FALSE;
- }
- 
- $numlines = sizeof($recentchanges["content"]);
- $newpage = array();
- $k = 0;
- 
- // scroll through the page to the first date and break
- // dates are marked with "____" at the beginning of the line
- for ($i = 0; $i < $numlines; $i++) {
- if (preg_match("/^____/",
- $recentchanges["content"][$i])) {
- break;
- } else {
- $newpage[$k++] = $recentchanges["content"][$i];
- }
- }
- 
- // if it's a new date, insert it, else add the updated page's
- // name to the array
- 
- $newpage[$k++] = $isNewDay ? "____$today\r"
- 				 : $recentchanges["content"][$i++];
- if($isnewpage) {
- $newpage[$k++] = "* [$pagename] (new) ..... $remoteuser\r";
- } else {
- 	 $diffurl = "phpwiki:?diff=" . rawurlencode($pagename);
- $newpage[$k++] = "* [$pagename] ([diff|$diffurl]) ..... $remoteuser\r";
- }
- if ($isNewDay)
- $newpage[$k++] = "\r";
- 
- // copy the rest of the page into the new array
- $pagename = preg_quote($pagename);
- for (; $i < $numlines; $i++) {
- // skip previous entry for $pagename
- if (preg_match("|\[$pagename\]|", $recentchanges["content"][$i])) {
- continue;
- } else {
- $newpage[$k++] = $recentchanges["content"][$i];
- }
- }
- 
- $recentchanges["content"] = $newpage;
- 
- InsertPage($dbi, gettext ("RecentChanges"), $recentchanges);
- }
- 
- 
- 
 function ParseAndLink($bracketlink) {
 global $dbi, $ScriptUrl, $AllowedProtocols, $InlineImages;
--- 253,256 ----
***************
*** 509,513 ****
 for($l = 0; $l < $numlines; $l++)
 {
! $line = str_replace('[[', ' ', $content[$l]); // remove escaped '['
 	 $numBracketLinks = preg_match_all("/\[\s*([^\]|]+\|)?\s*(.+?)\s*\]/", $line, $brktlinks);
 	 for ($i = 0; $i < $numBracketLinks; $i++) {
--- 310,317 ----
 for($l = 0; $l < $numlines; $l++)
 {
! 	 // remove escaped '['
! $line = str_replace('[[', ' ', $content[$l]);
! 
! 	 // bracket links (only type wiki-* is of interest)
 	 $numBracketLinks = preg_match_all("/\[\s*([^\]|]+\|)?\s*(.+?)\s*\]/", $line, $brktlinks);
 	 for ($i = 0; $i < $numBracketLinks; $i++) {
***************
*** 520,523 ****
--- 324,328 ----
 	 }
 
+ // BumpyText old-style wiki links
 if (preg_match_all("/!?$WikiNameRegexp/", $line, $link)) {
 for ($i = 0; isset($link[0][$i]); $i++) {
***************
*** 529,531 ****
--- 334,462 ----
 return $wikilinks;
 } 
+ 
+ 
+ function LinkRelatedPages($dbi, $pagename)
+ {
+ // currently not supported everywhere
+ if(!function_exists('GetWikiPageLinks'))
+ return '';
+ 
+ $links = GetWikiPageLinks($dbi, $pagename);
+ 
+ $txt = "<b>";
+ $txt .= sprintf (gettext ("%d best incoming links:"), NUM_RELATED_PAGES);
+ $txt .= "</b>\n";
+ for($i = 0; $i < NUM_RELATED_PAGES; $i++) {
+ if(isset($links['in'][$i])) {
+ list($name, $score) = $links['in'][$i];
+ 	 $txt .= LinkExistingWikiWord($name) . " ($score), ";
+ }
+ }
+ 
+ $txt .= "\n<br><b>";
+ $txt .= sprintf (gettext ("%d best outgoing links:"), NUM_RELATED_PAGES);
+ $txt .= "</b>\n";
+ for($i = 0; $i < NUM_RELATED_PAGES; $i++) {
+ if(isset($links['out'][$i])) {
+ list($name, $score) = $links['out'][$i];
+ 	 if(IsWikiPage($dbi, $name))
+ 	 $txt .= LinkExistingWikiWord($name) . " ($score), ";
+ }
+ }
+ 
+ $txt .= "\n<br><b>";
+ $txt .= sprintf (gettext ("%d most popular nearby:"), NUM_RELATED_PAGES);
+ $txt .= "</b>\n";
+ for($i = 0; $i < NUM_RELATED_PAGES; $i++) {
+ if(isset($links['popular'][$i])) {
+ list($name, $score) = $links['popular'][$i];
+ 	 $txt .= LinkExistingWikiWord($name) . " ($score), ";
+ }
+ }
+ 
+ return $txt;
+ }
+ 
+ 
+ function GeneratePage($template, $content, $name, $hash)
+ {
+ global $ScriptUrl, $AllowedProtocols, $templates;
+ global $datetimeformat, $dbi, $logo, $FieldSeparator;
+ 
+ if (!is_array($hash))
+ unset($hash);
+ 
+ function _dotoken ($id, $val, &$page) {
+ 	 global $FieldSeparator;
+ $page = str_replace("$FieldSeparator#$id$FieldSeparator#",
+ 				$val, $page);
+ }
+ 
+ function _iftoken ($id, $condition, &$page) {
+ global $FieldSeparator;
+ 
+ 	 // line based IF directive
+ 	 $lineyes = "$FieldSeparator#IF $id$FieldSeparator#";
+ 	 $lineno = "$FieldSeparator#IF !$id$FieldSeparator#";
+ // block based IF directive
+ 	 $blockyes = "$FieldSeparator#IF:$id$FieldSeparator#";
+ 	 $blockyesend = "$FieldSeparator#ENDIF:$id$FieldSeparator#";
+ 	 $blockno = "$FieldSeparator#IF:!$id$FieldSeparator#";
+ 	 $blocknoend = "$FieldSeparator#ENDIF:!$id$FieldSeparator#";
+ 
+ 	 if ($condition) {
+ 	 $page = str_replace($lineyes, '', $page);
+ 	 $page = str_replace($blockyes, '', $page);
+ 	 $page = str_replace($blockyesend, '', $page);
+ 	 $page = preg_replace("/$blockno(.*?)$blocknoend/s", '', $page);
+ 	 $page = ereg_replace("${lineno}[^\n]*\n", '', $page);
+ } else {
+ 	 $page = str_replace($lineno, '', $page);
+ 	 $page = str_replace($blockno, '', $page);
+ 	 $page = str_replace($blocknoend, '', $page);
+ 	 $page = preg_replace("/$blockyes(.*?)$blockyesend/s", '', $page);
+ 	 $page = ereg_replace("${lineyes}[^\n]*\n", '', $page);
+ 	 }
+ }
+ 
+ $page = join('', file($templates[$template]));
+ $page = str_replace('###', "$FieldSeparator#", $page);
+ 
+ // valid for all pagetypes
+ _iftoken('COPY', isset($hash['copy']), $page);
+ _iftoken('LOCK',	(isset($hash['flags']) &&
+ 			($hash['flags'] & FLAG_PAGE_LOCKED)), $page);
+ _iftoken('ADMIN', defined('WIKI_ADMIN'), $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);
+ 	 }
+ 	 if (strstr($page, "$FieldSeparator#RELATEDPAGES$FieldSeparator#")) {
+ _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);
+ }
+ }
+ 
+ _dotoken('CONTENT', $content, $page);
+ print $page;
+ }
 ?>
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 によって変換されたページ (->オリジナル) /