Update of /cvsroot/pn-modules/modules_development/phpWiki/lib In directory usw-pr-cvs1:/tmp/cvs-serv19798/phpWiki/lib Modified Files: Template.php TextSearchQuery.php WikiCallback.php WikiDB.php WikiPlugin.php WikiUser.php transform.php ziplib.php Log Message: Changes from phpWiki 1.3.2 Index: Template.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/Template.php,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Template.php 2001/11/30 15:27:44 1.7 --- Template.php 2002/01/08 16:55:44 1.8 *************** *** 1,3 **** --- 1,4 ---- <?php rcs_id('$Id$'); + require_once("lib/ErrorManager.php"); require_once("lib/WikiPlugin.php"); *************** *** 144,148 **** function printExpansion($args = false) { ! echo $this->getExpansion($args); } --- 145,154 ---- function printExpansion($args = false) { ! // Postnuke mod ! $output = $this->getExpansion($args); ! $CSStext = "<link rel=\"stylesheet\" title=\"phpwiki\" href=\"".DataURL(CSS_URL)."\" type=\"text/css\" />"; ! $output = preg_replace ('/(<LINK REL="StyleSheet".*>)/i', "$CSStext"."\\1", $output); ! echo $output; ! } *************** *** 277,280 **** --- 283,287 ---- $this->qreplace('BROWSE', WikiURL('')); $this->qreplace('CSS_URL', DataURL(CSS_URL)); + $this->qreplace('WIKI_NAME', WIKI_NAME); if (isset($wikiuser)) *************** *** 325,327 **** // indent-tabs-mode: nil // End: ! ?> \ No newline at end of file --- 332,334 ---- // indent-tabs-mode: nil // End: ! ?> Index: TextSearchQuery.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/TextSearchQuery.php,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** TextSearchQuery.php 2001/11/27 10:44:32 1.4 --- TextSearchQuery.php 2002/01/08 16:55:44 1.5 *************** *** 171,174 **** --- 171,191 ---- } + /** + * This is a TextSearchQuery which matches nothing. + */ + class NullTextSearchQuery extends TextSearchQuery { + /** + * Create a new query. + * + * @see TextSearchQuery + */ + function NullTextSearchQuery() {} + function asRegexp() { return '/^(?!a)a/x'; } + function match($string) { return false; } + function getHighlightRegexp() { return ""; } + function makeSqlClause($make_sql_clause_cb) { return "(1 = 0)"; } + function asString() { return "NullTextSearchQuery"; } + }; + //////////////////////////////////////////////////////////////// Index: WikiCallback.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/WikiCallback.php,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -C2 -d -r1.1.1.2 -r1.2 *** WikiCallback.php 2001/12/14 17:08:53 1.1.1.2 --- WikiCallback.php 2002/01/08 16:55:44 1.2 *************** *** 1,196 **** ! <?php //-*-php-*- ! rcs_id('$Id$'); ! ! /** ! * A callback ! * ! * This is a virtual class. ! * ! * Subclases of WikiCallback can be used to represent either ! * global function callbacks, or object method callbacks. ! * ! * @see WikiFunctionCb, WikiMethodCb. ! */ ! class WikiCallback ! { ! /** ! * Convert from Pear-style callback specification to a WikiCallback. ! * ! * This is a static member function. ! * ! * @param $pearCb mixed ! * For a global function callback, $pearCb should be a string containing ! * the name of the function. ! * For an object method callback, $pearCb should be a array of length two: ! * the first element should contain (a reference to) the object, the second ! * element should be a string containing the name of the method to be invoked. ! * @return object Returns the appropriate subclass of WikiCallback. ! * @access public ! */ ! function callback ($pearCb) { ! if (is_string($pearCb)) ! return new WikiFunctionCb($pearCb); ! else if (is_array($pearCb)) { ! list($object, $method) = $handler; ! return new WikiMethodCb($object, $method); ! } ! trigger_error("WikiCallback::new: bad arg", E_USER_ERROR); ! } ! ! /** ! * Call callback. ! * ! * @param ? mixed This method takes a variable number of arguments (zero or more). ! * The callback function is called with the specified arguments. ! * @return mixed The return value of the callback. ! * @access public ! */ ! function call () { ! return $this->call_array(func_get_args()); ! } ! ! /** ! * Call callback (with args in array). ! * ! * @param $args array Contains the arguments to be passed to the callback. ! * @return mixed The return value of the callback. ! * @see call_user_func_array. ! * @access public ! */ ! function call_array ($args) { ! trigger_error('pure virtual', E_USER_ERROR); ! } ! ! /** ! * Convert to Pear callback. ! * ! * @return string The name of the callback function. ! * (This value is suitable for passing as the callback parameter ! * to a number of different Pear functions and methods.) ! * @access public ! */ ! function toPearCb() { ! trigger_error('pure virtual', E_USER_ERROR); ! } ! } ! ! /** ! * Global function callback. ! */ ! class WikiFunctionCb ! extends WikiCallback ! { ! /** ! * Constructor ! * ! * @param $functionName string Name of global function to call. ! * @access public ! */ ! function WikiFunctionCb ($functionName) { ! $this->functionName = $functionName; ! } ! ! function call_array ($args) { ! return call_user_func_array($this->functionName, $args); ! } ! ! function toPearCb() { ! return $this->functionName; ! } ! } ! ! /** ! * Object Method Callback. ! */ ! class WikiMethodCb ! extends WikiCallback ! { ! /** ! * Constructor ! * ! * @param $object object Object on which to invoke method. ! * @param $methodName string Name of method to call. ! * @access public ! */ ! function WikiMethodCb(&$object, $methodName) { ! $this->object = &$object; ! $this->methodName = $methodName; ! } ! ! function call_array ($args) { ! $method = &$this->methodName; ! $obj = &$this->object; ! ! // This should work, except PHP's before 4.0.5 (which includes mine) ! // don't have 'call_user_method_array'. ! /* ! return call_user_method_array($method, $obj, $args); ! */ ! ! // This should work, but doesn't. At least in my PHP, the object seems ! // to get passed by value, rather than reference, so any changes to the ! // object made by the called method get lost. ! /* ! switch (count($args)) { ! case 0: return call_user_method($method, $obj); ! case 1: return call_user_method($method, $obj, $args[0]); ! case 2: return call_user_method($method, $obj, $args[0], $args[1]); ! case 3: return call_user_method($method, $obj, $args[0], $args[1], $args[2]); ! case 4: return call_user_method($method, $obj, $args[0], $args[1], $args[2], $args[3]); ! default: trigger_error("Too many arguments to method callback", E_USER_ERROR); ! } ! */ ! ! // This seems to work, at least for me (so far): ! switch (count($args)) { ! case 0: return $obj->$method(); ! case 1: return $obj->$method($args[0]); ! case 2: return $obj->$method($args[0], $args[1]); ! case 3: return $obj->$method($args[0], $args[1], $args[2]); ! case 4: return $obj->$method($args[0], $args[1], $args[2], $args[3]); ! default: trigger_error("Too many arguments to method callback", E_USER_ERROR); ! } ! } ! ! function toPearCb() { ! return array($this->object, $this->methodName); ! } ! } ! ! /** ! * Anonymous function callback. ! */ ! class WikiAnonymousCb ! extends WikiCallback ! { ! /** ! * Constructor ! * ! * @param $args string Argument declarations ! * @param $code string Function body ! * @see create_function(). ! * @access public ! */ ! function WikiAnonymousCb ($args, $code) { ! $this->function = create_function($args, $code); ! } ! ! function call_array ($args) { ! return call_user_func_array($this->function, $args); ! } ! ! function toPearCb() { ! trigger_error("Can't convert WikiAnonymousCb to Pear callback", ! E_USER_ERROR); ! } ! } ! ! // (c-file-style: "gnu") ! // Local Variables: ! // mode: php ! // tab-width: 8 ! // c-basic-offset: 4 ! // c-hanging-comment-ender-p: nil ! // indent-tabs-mode: nil ! // End: ! ?> --- 1,196 ---- ! <?php //-*-php-*- ! rcs_id('$Id$'); ! ! /** ! * A callback ! * ! * This is a virtual class. ! * ! * Subclases of WikiCallback can be used to represent either ! * global function callbacks, or object method callbacks. ! * ! * @see WikiFunctionCb, WikiMethodCb. ! */ ! class WikiCallback ! { ! /** ! * Convert from Pear-style callback specification to a WikiCallback. ! * ! * This is a static member function. ! * ! * @param $pearCb mixed ! * For a global function callback, $pearCb should be a string containing ! * the name of the function. ! * For an object method callback, $pearCb should be a array of length two: ! * the first element should contain (a reference to) the object, the second ! * element should be a string containing the name of the method to be invoked. ! * @return object Returns the appropriate subclass of WikiCallback. ! * @access public ! */ ! function callback ($pearCb) { ! if (is_string($pearCb)) ! return new WikiFunctionCb($pearCb); ! else if (is_array($pearCb)) { ! list($object, $method) = $handler; ! return new WikiMethodCb($object, $method); ! } ! trigger_error("WikiCallback::new: bad arg", E_USER_ERROR); ! } ! ! /** ! * Call callback. ! * ! * @param ? mixed This method takes a variable number of arguments (zero or more). ! * The callback function is called with the specified arguments. ! * @return mixed The return value of the callback. ! * @access public ! */ ! function call () { ! return $this->call_array(func_get_args()); ! } ! ! /** ! * Call callback (with args in array). ! * ! * @param $args array Contains the arguments to be passed to the callback. ! * @return mixed The return value of the callback. ! * @see call_user_func_array. ! * @access public ! */ ! function call_array ($args) { ! trigger_error('pure virtual', E_USER_ERROR); ! } ! ! /** ! * Convert to Pear callback. ! * ! * @return string The name of the callback function. ! * (This value is suitable for passing as the callback parameter ! * to a number of different Pear functions and methods.) ! * @access public ! */ ! function toPearCb() { ! trigger_error('pure virtual', E_USER_ERROR); ! } ! } ! ! /** ! * Global function callback. ! */ ! class WikiFunctionCb ! extends WikiCallback ! { ! /** ! * Constructor ! * ! * @param $functionName string Name of global function to call. ! * @access public ! */ ! function WikiFunctionCb ($functionName) { ! $this->functionName = $functionName; ! } ! ! function call_array ($args) { ! return call_user_func_array($this->functionName, $args); ! } ! ! function toPearCb() { ! return $this->functionName; ! } ! } ! ! /** ! * Object Method Callback. ! */ ! class WikiMethodCb ! extends WikiCallback ! { ! /** ! * Constructor ! * ! * @param $object object Object on which to invoke method. ! * @param $methodName string Name of method to call. ! * @access public ! */ ! function WikiMethodCb(&$object, $methodName) { ! $this->object = &$object; ! $this->methodName = $methodName; ! } ! ! function call_array ($args) { ! $method = &$this->methodName; ! $obj = &$this->object; ! ! // This should work, except PHP's before 4.0.5 (which includes mine) ! // don't have 'call_user_method_array'. ! /* ! return call_user_method_array($method, $obj, $args); ! */ ! ! // This should work, but doesn't. At least in my PHP, the object seems ! // to get passed by value, rather than reference, so any changes to the ! // object made by the called method get lost. ! /* ! switch (count($args)) { ! case 0: return call_user_method($method, $obj); ! case 1: return call_user_method($method, $obj, $args[0]); ! case 2: return call_user_method($method, $obj, $args[0], $args[1]); ! case 3: return call_user_method($method, $obj, $args[0], $args[1], $args[2]); ! case 4: return call_user_method($method, $obj, $args[0], $args[1], $args[2], $args[3]); ! default: trigger_error("Too many arguments to method callback", E_USER_ERROR); ! } ! */ ! ! // This seems to work, at least for me (so far): ! switch (count($args)) { ! case 0: return $obj->$method(); ! case 1: return $obj->$method($args[0]); ! case 2: return $obj->$method($args[0], $args[1]); ! case 3: return $obj->$method($args[0], $args[1], $args[2]); ! case 4: return $obj->$method($args[0], $args[1], $args[2], $args[3]); ! default: trigger_error("Too many arguments to method callback", E_USER_ERROR); ! } ! } ! ! function toPearCb() { ! return array($this->object, $this->methodName); ! } ! } ! ! /** ! * Anonymous function callback. ! */ ! class WikiAnonymousCb ! extends WikiCallback ! { ! /** ! * Constructor ! * ! * @param $args string Argument declarations ! * @param $code string Function body ! * @see create_function(). ! * @access public ! */ ! function WikiAnonymousCb ($args, $code) { ! $this->function = create_function($args, $code); ! } ! ! function call_array ($args) { ! return call_user_func_array($this->function, $args); ! } ! ! function toPearCb() { ! trigger_error("Can't convert WikiAnonymousCb to Pear callback", ! E_USER_ERROR); ! } ! } ! ! // (c-file-style: "gnu") ! // Local Variables: ! // mode: php ! // tab-width: 8 ! // c-basic-offset: 4 ! // c-hanging-comment-ender-p: nil ! // indent-tabs-mode: nil ! // End: ! ?> Index: WikiDB.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/WikiDB.php,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 Index: WikiPlugin.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/WikiPlugin.php,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** WikiPlugin.php 2001/11/27 11:11:09 1.4 --- WikiPlugin.php 2002/01/08 16:55:44 1.5 *************** *** 15,20 **** } function getName() { ! return $this->name; } --- 15,39 ---- } + /** + * Get name of plugin. + * + * This is used (by default) by getDefaultLinkArguments and + * getDefaultFormArguments to compute the default link/form + * targets. + * + * If you want to gettextify the name (probably a good idea), + * override this method in your plugin class, like: + * <pre> + * function getName() { return _("MyPlugin"); } + * </pre> + * + * @return string plugin name/target. + */ function getName() { ! return preg_replace('/^.*_/', '', get_class($this)); ! } ! ! function getDescription() { ! return $this->getName(); } *************** *** 29,33 **** if (isset($argstr_args[$arg])) $args[$arg] = $argstr_args[$arg]; ! elseif ( ($argval = $request->getArg($arg)) ) $args[$arg] = $argval; elseif (isset($argstr_defaults[$arg])) --- 48,52 ---- if (isset($argstr_args[$arg])) $args[$arg] = $argstr_args[$arg]; ! elseif ( ($argval = $request->getArg($arg)) !== false ) $args[$arg] = $argval; elseif (isset($argstr_defaults[$arg])) *************** *** 95,99 **** return array('targetpage' => $this->getName(), 'linktext' => $this->getName(), ! 'description' => false, 'class' => 'wikiaction'); } --- 114,118 ---- return array('targetpage' => $this->getName(), 'linktext' => $this->getName(), ! 'description' => $this->getDescription(), 'class' => 'wikiaction'); } *************** *** 103,107 **** $link_defaults = $this->getDefaultLinkArguments(); $defaults = array_merge($defaults, $link_defaults); ! $args = $this->getArgs($argstr, $request, $defaults); $plugin = $this->getName(); --- 122,126 ---- $link_defaults = $this->getDefaultLinkArguments(); $defaults = array_merge($defaults, $link_defaults); ! $args = $this->getArgs($argstr, $request, $defaults); $plugin = $this->getName(); Index: WikiUser.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/WikiUser.php,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** WikiUser.php 2001/12/12 22:03:28 1.11 --- WikiUser.php 2002/01/08 16:55:44 1.12 *************** *** 1,12 **** <?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: --- 1,13 ---- <?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: *************** *** 22,25 **** --- 23,43 ---- $this->_restore(); + // don't check for HTTP auth if there's nothing to worry about + // + // FIXME: the addition of this short-cut introduced a security hole. + // Since $this->_restore can potentially restore $this from a + // user provided cookie, a carefully constructed cookie can + // be used to effectively log in (even as admin) without + // a password. + // + // For now, I'm disabling the code which saves/restores $this + // in a cookie. (Login state is still preserved in session vars.) + // I'll work on a longer term solution. + + if ( $this->state == 'authorized' + && $auth_mode != 'LOGIN' + && $auth_mode != 'LOGOUT' ) + return; + if ($this->state == 'authorized' && $auth_mode == 'LOGIN') { // ...logout *************** *** 27,31 **** $this->state = 'loggedout'; } ! if ($auth_mode != 'LOGOUT') { $wikiuser = $this->_get_authenticated_userid(); --- 45,49 ---- $this->state = 'loggedout'; } ! if ($auth_mode != 'LOGOUT') { $wikiuser = $this->_get_authenticated_userid(); *************** *** 133,137 **** return $this->state == 'authorized'; } ! function is_admin () { // Postnuke mods - this seems to be used only for seeing if a locked page can be accessed. --- 151,155 ---- return $this->state == 'authorized'; } ! function is_admin () { // Postnuke mods - this seems to be used only for seeing if a locked page can be accessed. *************** *** 165,174 **** $saved = $req->getCookieVar('WIKI_PREFS'); ! if (is_array($saved)) { - foreach ($saved as $key => $val) { if (isset($prefs[$key]) && !empty($val)) - $prefs[$key] = $val; } --- 183,190 ---- $saved = $req->getCookieVar('WIKI_PREFS'); ! if (is_array($saved)) { foreach ($saved as $key => $val) { if (isset($prefs[$key]) && !empty($val)) $prefs[$key] = $val; } *************** *** 201,205 **** // so for now, just trust the saved state return $this->userid; ! // Else, as long as the user hasn't changed, fine. if ($wikiuser && $wikiuser != $this->userid) --- 217,221 ---- // so for now, just trust the saved state return $this->userid; ! // Else, as long as the user hasn't changed, fine. if ($wikiuser && $wikiuser != $this->userid) *************** *** 226,230 **** return false; } ! function _demand_http_authentication () { if (!defined('ADMIN_USER') || !defined('ADMIN_PASSWD') --- 242,246 ---- return false; } ! function _demand_http_authentication () { if (!defined('ADMIN_USER') || !defined('ADMIN_PASSWD') *************** *** 239,243 **** $this->userid = ''; $this->state = 'login'; ! $this->_save(); $request = &$this->_request; --- 255,259 ---- $this->userid = ''; $this->state = 'login'; ! $this->_save(); $request = &$this->_request; *************** *** 250,276 **** echo gettext ("(Any password will work, except, of course for the admin user.)") . "\n"; } ! ExitWiki(); } ! function _copy($object) { ! if (!is_object($object)) ! return false; ! if (strtolower(get_class($object)) != 'wikiuser') return false; ! $this->userid = $object->userid; ! $this->state = $object->state; ! $this->realm = $object->realm; return true; } ! function _restore() { $req = &$this->_request; ! if ( $this->_copy($req->getSessionVar('auth_state')) ) - return; - elseif ( $this->_copy($req->getCookieVar('WIKI_AUTH')) ) return; else { // Default state. --- 266,291 ---- echo gettext ("(Any password will work, except, of course for the admin user.)") . "\n"; } ! ExitWiki(); } ! function _copy($saved) { ! if (!is_array($saved) || !isset($saved['state']) || !isset($saved['realm'])) return false; ! $this->userid = $saved['userid']; ! $this->state = $saved['state']; ! $this->realm = $saved['realm']; return true; } ! function _restore() { $req = &$this->_request; ! if ( $this->_copy($req->getSessionVar('auth_state')) ) return; + // FIXME: Disable restore from cookie (see note in WikiUser().) + //elseif ( $this->_copy($req->getCookieVar('WIKI_AUTH')) ) + // return; else { // Default state. *************** *** 284,289 **** $req = &$this->_request; ! $req->setSessionVar('auth_state', $this); ! $req->setCookieVar('WIKI_AUTH', $this); } */ --- 299,309 ---- $req = &$this->_request; ! $saved = array('userid' => $this->userid, ! 'state' => $this->state, ! 'realm' => $this->realm); ! ! $req->setSessionVar('auth_state', $saved); ! // FIXME: Disable restore from cookie (see note in WikiUser().) ! //$req->setCookieVar('WIKI_AUTH', $saved); } */ *************** *** 296,299 **** // c-hanging-comment-ender-p: nil // indent-tabs-mode: nil ! // End: ?> --- 316,319 ---- // c-hanging-comment-ender-p: nil // indent-tabs-mode: nil ! // End: ?> Index: transform.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/transform.php,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** transform.php 2001/11/27 10:44:32 1.4 --- transform.php 2002/01/08 16:55:44 1.5 *************** *** 186,189 **** --- 186,191 ---- function ListItem($list_type, $level, $defn_term = '') { + $level = min($level, 10); + $retval = $this->SetHTMLMode($list_type, 2 * $level - 1); if ($list_type == 'dl') { *************** *** 305,356 **** ////////////////////////////////////////////////////////// ! function do_transform ($lines) { ! global $WikiNameRegexp, $AllowedProtocols, $InterWikiLinkRegexp; ! if (is_string($lines)) ! $lines = preg_split('/[ \t\r]*\n/', trim($lines)); ! ! ! $transform = new WikiTransform; ! // register functions ! // functions are applied in order of registering ! $transform->register(WT_SIMPLE_MARKUP, 'wtm_plugin_link'); ! $transform->register(WT_MODE_MARKUP, 'wtm_plugin'); ! $transform->register(WT_TOKENIZER, 'wtt_doublebrackets', '\[\['); ! $transform->register(WT_TOKENIZER, 'wtt_footnotes', '^\[\d+\]'); ! $transform->register(WT_TOKENIZER, 'wtt_footnoterefs', '\[\d+\]'); ! $transform->register(WT_TOKENIZER, 'wtt_bracketlinks', '\[.+?\]'); ! $transform->register(WT_TOKENIZER, 'wtt_urls', ! "!?\b($AllowedProtocols):[^\s<>\[\]\"'()]*[^\s<>\[\]\"'(),.?]"); ! if (function_exists('wtt_interwikilinks')) { ! $transform->register(WT_TOKENIZER, 'wtt_interwikilinks', ! pcre_fix_posix_classes("!?(?<![[:alnum:]])") . ! "$InterWikiLinkRegexp:[^\\s.,;?]+"); ! } ! $transform->register(WT_TOKENIZER, 'wtt_bumpylinks', "!?$WikiNameRegexp"); ! if (function_exists('wtm_table')) { ! $transform->register(WT_MODE_MARKUP, 'wtm_table', '^\|'); ! } ! $transform->register(WT_SIMPLE_MARKUP, 'wtm_htmlchars'); ! $transform->register(WT_SIMPLE_MARKUP, 'wtm_linebreak'); ! $transform->register(WT_SIMPLE_MARKUP, 'wtm_bold_italics'); ! $transform->register(WT_MODE_MARKUP, 'wtm_list_ul'); ! $transform->register(WT_MODE_MARKUP, 'wtm_list_ol'); ! $transform->register(WT_MODE_MARKUP, 'wtm_list_dl'); ! $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'); ! //$html = $transform->do_transform($html, $pagehash['content']); ! return $transform->do_transform('', $lines); } /* Requirements for functions registered to WikiTransform: --- 307,388 ---- ////////////////////////////////////////////////////////// ! class WikiPageTransform ! extends WikiTransform { ! function WikiPageTransform() { ! global $WikiNameRegexp, $AllowedProtocols, $InterWikiLinkRegexp; ! $this->WikiTransform(); ! // register functions ! // functions are applied in order of registering ! $this->register(WT_SIMPLE_MARKUP, 'wtm_plugin_link'); ! $this->register(WT_MODE_MARKUP, 'wtm_plugin'); ! $this->register(WT_TOKENIZER, 'wtt_doublebrackets', '\[\['); ! $this->register(WT_TOKENIZER, 'wtt_footnotes', '^\[\d+\]'); ! $this->register(WT_TOKENIZER, 'wtt_footnoterefs', '\[\d+\]'); ! $this->register(WT_TOKENIZER, 'wtt_bracketlinks', '\[.+?\]'); ! $this->register(WT_TOKENIZER, 'wtt_urls', ! "!?\b($AllowedProtocols):[^\s<>\[\]\"'()]*[^\s<>\[\]\"'(),.?]"); ! if (function_exists('wtt_interwikilinks')) { ! $this->register(WT_TOKENIZER, 'wtt_interwikilinks', ! pcre_fix_posix_classes("!?(?<![[:alnum:]])") . ! "$InterWikiLinkRegexp:[^\\s.,;?()]+"); ! } ! $this->register(WT_TOKENIZER, 'wtt_bumpylinks', "!?$WikiNameRegexp"); ! if (function_exists('wtm_table')) { ! $this->register(WT_MODE_MARKUP, 'wtm_table', '^\|'); ! } ! $this->register(WT_SIMPLE_MARKUP, 'wtm_htmlchars'); ! $this->register(WT_SIMPLE_MARKUP, 'wtm_linebreak'); ! $this->register(WT_SIMPLE_MARKUP, 'wtm_bold_italics'); ! ! $this->register(WT_MODE_MARKUP, 'wtm_list_ul'); ! $this->register(WT_MODE_MARKUP, 'wtm_list_ol'); ! $this->register(WT_MODE_MARKUP, 'wtm_list_dl'); ! $this->register(WT_MODE_MARKUP, 'wtm_preformatted'); ! $this->register(WT_MODE_MARKUP, 'wtm_headings'); ! $this->register(WT_MODE_MARKUP, 'wtm_hr'); ! $this->register(WT_MODE_MARKUP, 'wtm_paragraph'); ! } ! }; ! function do_transform ($lines, $class = 'WikiPageTransform') { ! if (is_string($lines)) ! $lines = preg_split('/[ \t\r]*\n/', trim($lines)); ! $trfm = new $class; ! return $trfm->do_transform('', $lines); } + class LinkTransform + extends WikiTransform { + function LinkTransform() { + global $WikiNameRegexp, $AllowedProtocols, $InterWikiLinkRegexp; + + $this->WikiTransform(); + + // register functions + // functions are applied in order of registering + + $this->register(WT_TOKENIZER, 'wtt_doublebrackets', '\[\['); + $this->register(WT_TOKENIZER, 'wtt_quotetoken', '\[\d+\]'); + $this->register(WT_TOKENIZER, 'wtt_bracketlinks', '\[.+?\]'); + $this->register(WT_TOKENIZER, 'wtt_urls', + "!?\b($AllowedProtocols):[^\s<>\[\]\"'()]*[^\s<>\[\]\"'(),.?]"); + + if (function_exists('wtt_interwikilinks')) { + $this->register(WT_TOKENIZER, 'wtt_interwikilinks', + pcre_fix_posix_classes("!?(?<![[:alnum:]])") . + "$InterWikiLinkRegexp:[^\\s.,;?()]+"); + } + $this->register(WT_TOKENIZER, 'wtt_bumpylinks', "!?$WikiNameRegexp"); + $this->register(WT_SIMPLE_MARKUP, 'wtm_htmlchars'); + } + }; + /* Requirements for functions registered to WikiTransform: *************** *** 435,444 **** function wtt_bracketlinks($match, &$trfrm) { ! $link = ParseAndLink($match); ! if (strstr($link['link'], "</form>")) { ! // FIXME: BIG HACK: see note in wtm_plugin. ! return "</p>" . $link['link'] . "<p>"; ! } ! return $link["link"]; } --- 467,480 ---- function wtt_bracketlinks($match, &$trfrm) { ! if (preg_match('/^\[\s*\]$/', $match)) { ! return htmlspecialchars($match); ! } ! ! $link = ParseAndLink($match); ! if (strstr($link['link'], "</form>")) { ! // FIXME: BIG HACK: see note in wtm_plugin. ! return "</p>" . $link['link'] . "<p>"; ! } ! return $link["link"]; } *************** *** 465,468 **** --- 501,513 ---- } + + // Just quote the token. + function wtt_quotetoken($match, &$trfrm) + { + return htmlspecialchars($match); + } + + + // end of tokenizer functions ////////////////////////////////////////////////////////// Index: ziplib.php =================================================================== RCS file: /cvsroot/pn-modules/modules_development/phpWiki/lib/ziplib.php,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ziplib.php 2001/11/30 16:47:30 1.4 --- ziplib.php 2002/01/08 16:55:44 1.5 *************** *** 239,243 **** $zipname = addslashes($zipname); header("Content-Type: application/zip; name=\"$zipname\""); ! header("Content-Disposition: save; filename=\"$zipname\""); } --- 239,243 ---- $zipname = addslashes($zipname); header("Content-Type: application/zip; name=\"$zipname\""); ! header("Content-Disposition: attachment; filename=\"$zipname\""); } *************** *** 427,451 **** * Routines for Mime mailification of pages. */ ! //FIXME: these should go elsewhere (stdlib.php). ! function ctime ($unix_time) ! { ! return date("D M j H:i:s Y", $unix_time); ! } ! ! function rfc1123date ($unix_time) ! { ! $zone = ' +'; ! ! $zonesecs = date("Z", $unix_time); ! if ($zonesecs < 0) ! $zone = ' -'; ! ! $zonemins = (int)((abs($zonesecs) + 30) / 60); ! $zonehrs = (int)(($zonemins + 30) / 60); ! $zonemins -= $zonehrs * 60; ! $zone .= sprintf("%02d%02d", $zonehrs, $zonemins); ! ! return date("D, j M Y H:i:s", $unix_time) . $zone; ! } /** --- 427,431 ---- * Routines for Mime mailification of pages. */ ! //FIXME: these should go elsewhere (libmime?). /** *************** *** 602,605 **** --- 582,586 ---- $string = substr($string, strlen($match[0])); } + //" <--(kludge for dumb syntax coloring) return array($type, $subtype, $param); *************** *** 662,666 **** if (!($headers = ParseRFC822Headers($data)) || empty($headers['content-type'])) { ! //trigger_error("Can't find content-type header", E_USER_WARNING); return false; } --- 643,647 ---- if (!($headers = ParseRFC822Headers($data)) || empty($headers['content-type'])) { ! //trigger_error( sprintf(_("Can't find %s"),'content-type header'), E_USER_WARNING); return false; } *************** *** 668,673 **** if (!(list ($type, $subtype, $params) = ParseMimeContentType($typeheader))) { ! trigger_error("Can't parse content-type: (" ! . htmlspecialchars($typeheader) . ")", E_USER_WARNING); return false; } --- 649,654 ---- if (!(list ($type, $subtype, $params) = ParseMimeContentType($typeheader))) { ! trigger_error( sprintf(_("Can't parse %s"),'content-type:') ! . " (" . htmlspecialchars($typeheader) . ")", E_USER_WARNING); return false; } *************** *** 676,680 **** } else if ("$type/$subtype" != 'application/x-phpwiki') { ! trigger_error("Bad content-type: $type/$subtype", E_USER_WARNING); return false; } --- 657,661 ---- } else if ("$type/$subtype" != 'application/x-phpwiki') { ! trigger_error( sprintf(_("Bad %s"),"content-type: $type/$subtype"), E_USER_WARNING); return false; } *************** *** 721,725 **** $data = QuotedPrintableDecode($data); else if ($encoding && $encoding != 'binary') ! ExitWiki("Unknown encoding type: $encoding"); $data .= GenerateFootnotesFromRefs($params); --- 702,706 ---- $data = QuotedPrintableDecode($data); else if ($encoding && $encoding != 'binary') ! ExitWiki( sprintf(_("Unknown %s"), 'encoding type: $encoding') ); $data .= GenerateFootnotesFromRefs($params); |