From: Reini U. <ru...@us...> - 2004-03-24 19:49:44
|
Update of /cvsroot/phpwiki/phpwiki/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6445 Modified Files: BlockParser.php DbaDatabase.php HtmlElement.php PageType.php Request.php Theme.php WikiDB.php WikiUserNew.php XmlElement.php editpage.php main.php stdlib.php Log Message: php5 workaround code (plus some interim debugging code in XmlElement) php5 doesn't work yet with the current XmlElement class constructors, WikiUserNew does work better than php4. rewrote WikiUserNew user upgrading to ease php5 update fixed pref handling in WikiUserNew added Email Notification added simple Email verification removed emailVerify userpref subclass: just a email property changed pref binary storage layout: numarray => hash of non default values print optimize message only if really done. forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. prefs should be stored in db or homepage, besides the current session. Index: BlockParser.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/BlockParser.php,v retrieving revision 1.41 retrieving revision 1.42 diff -u -2 -b -p -d -r1.41 -r1.42 --- BlockParser.php 17 Mar 2004 17:42:54 -0000 1.41 +++ BlockParser.php 24 Mar 2004 19:39:02 -0000 1.42 @@ -822,4 +822,44 @@ class Block_oldlists extends Block_list } else { + // this is where php5 breaks + if (DEBUG && check_php_version(5)) { + if (function_exists("xdebug_get_function_stack")) { + var_dump (xdebug_get_function_stack()); + } elseif (count($this->_content) != 2) { + echo "<pre>"; + /* + $class = new Reflection_Class('XmlElement'); + // Print out basic information + printf( + "===> The %s%s%s %s '%s' [extends %s]\n". + " declared in %s\n". + " lines %d to %d\n". + " having the modifiers %d [%s]\n", + $class->isInternal() ? 'internal' : 'user-defined', + $class->isAbstract() ? ' abstract' : '', + $class->isFinal() ? ' final' : '', + $class->isInterface() ? 'interface' : 'class', + $class->getName(), + var_export($class->getParentClass(), 1), + $class->getFileName(), + $class->getStartLine(), + $class->getEndline(), + $class->getModifiers(), + implode(' ', Reflection::getModifierNames($class->getModifiers())) + ); + // Print class properties + printf("---> Properties: %s\n", var_export($class->getProperties(), 1)); + */ + echo 'count($this->_content): ', count($this->_content),"\n"; + echo "\$this->_content[0]: "; var_dump ($this->_content[0]); + foreach ($this->_content as $c) { + echo "_tag: "; var_dump ($c->_tag); + echo "_content: "; var_dump ($c->_content); + echo "_properties: "; var_dump ($c->_properties); + } + debug_print_backtrace(); + echo "</pre>"; + } + } assert(count($this->_content) == 2); $dt = &$this->_content[0]; @@ -993,4 +1033,7 @@ function TransformText ($text, $markup = $output = new WikiText($text); + if (0 && DEBUG && check_php_version(5)) { + echo "<pre>"; var_dump($output); echo "</pre>"; + } if ($basepage) { Index: DbaDatabase.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/DbaDatabase.php,v retrieving revision 1.5 retrieving revision 1.6 diff -u -2 -b -p -d -r1.5 -r1.6 --- DbaDatabase.php 31 Dec 2002 02:32:28 -0000 1.5 +++ DbaDatabase.php 24 Mar 2004 19:39:02 -0000 1.6 @@ -128,4 +128,5 @@ class DbaDatabase if (!dba_optimize($this->_dbh)) return $this->_error("optimize()"); + return 1; } Index: HtmlElement.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/HtmlElement.php,v retrieving revision 1.33 retrieving revision 1.34 diff -u -2 -b -p -d -r1.33 -r1.34 --- HtmlElement.php 18 Mar 2004 22:32:33 -0000 1.33 +++ HtmlElement.php 24 Mar 2004 19:39:02 -0000 1.34 @@ -2,19 +2,21 @@ /** * Code for writing the HTML subset of XML. + * @author: Jeff Dairiki * - * FIXME: This code is not php5 compatible. + * FIXME: This code is not (yet) php5 compatible. */ require_once("lib/XmlElement.php"); + /** * An XML element. */ +//apd_set_session_trace(35); class HtmlElement extends XmlElement { - //function HtmlElement ($tagname /* , $attr_or_content , ...*/) { - // $this->_init(func_get_args()); - // $this->_properties = HTML::getTagProperties($tagname); - //} - + function __construct ($tagname /* , $attr_or_content , ...*/) { + $this->_init(func_get_args()); + //$this->_properties = HTML::getTagProperties($tagname); + } function _init ($args) { @@ -496,4 +498,18 @@ function IfJavaScript($if_content = fals /** $Log$ + Revision 1.34 2004/03/24 19:39:02 rurban + php5 workaround code (plus some interim debugging code in XmlElement) + php5 doesn't work yet with the current XmlElement class constructors, + WikiUserNew does work better than php4. + rewrote WikiUserNew user upgrading to ease php5 update + fixed pref handling in WikiUserNew + added Email Notification + added simple Email verification + removed emailVerify userpref subclass: just a email property + changed pref binary storage layout: numarray => hash of non default values + print optimize message only if really done. + forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. + prefs should be stored in db or homepage, besides the current session. + Revision 1.33 2004/03/18 22:32:33 rurban work to make it php5 compatible Index: PageType.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/PageType.php,v retrieving revision 1.22 retrieving revision 1.23 diff -u -2 -b -p -d -r1.22 -r1.23 --- PageType.php 12 Mar 2004 17:32:43 -0000 1.22 +++ PageType.php 24 Mar 2004 19:39:02 -0000 1.23 @@ -391,5 +391,5 @@ class PageFormatter_pdf extends PageForm // one page or set of pages? - // here we format only a single page + // here we try to format only a single page function format($text) { include_once('lib/Template.php'); @@ -399,4 +399,9 @@ class PageFormatter_pdf extends PageForm // this is a XmlElement tree, which must be converted to PDF + // We can make use of several pdf extensions. This one - fpdf + // - is pure php and very easy, but looks quite ugly and has a + // terrible interface, as terrible as most of the othes. The + // closest to HTML is htmldoc which needs an external cgi + // binary. require_once('lib/fpdf.php'); $pdf = new FPDF(); Index: Request.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/Request.php,v retrieving revision 1.44 retrieving revision 1.45 diff -u -2 -b -p -d -r1.44 -r1.45 --- Request.php 14 Mar 2004 16:26:22 -0000 1.44 +++ Request.php 24 Mar 2004 19:39:02 -0000 1.45 @@ -382,6 +382,6 @@ class Request { return $this->cookies->get($key); } - function setCookieVar($key, $val, $lifetime_in_days = false) { - return $this->cookies->set($key, $val, $lifetime_in_days); + function setCookieVar($key, $val, $lifetime_in_days = false, $path = false) { + return $this->cookies->set($key, $val, $lifetime_in_days, $path); } function deleteCookieVar($key) { @@ -478,11 +478,29 @@ class Request_CookieVars { if (!empty($val)) return $val; + @$val = urldecode($vars[$key]); + if (!empty($val)) + return $val; } return false; } - function set($key, $val, $persist_days = false) { + function get_old($key) { $vars = &$GLOBALS['HTTP_COOKIE_VARS']; + if (isset($vars[$key])) { + @$val = unserialize(base64_decode($vars[$key])); + if (!empty($val)) + return $val; + @$val = unserialize($vars[$key]); + if (!empty($val)) + return $val; + @$val = $vars[$key]; + if (!empty($val)) + return $val; + } + return false; + } + function set($key, $val, $persist_days = false, $path = false) { + $vars = &$GLOBALS['HTTP_COOKIE_VARS']; if (is_numeric($persist_days)) { $expires = time() + (24 * 3600) * $persist_days; @@ -491,8 +509,13 @@ class Request_CookieVars { $expires = 0; } - + if (is_array($val) or is_object($val)) $packedval = base64_encode(serialize($val)); + else + $packedval = urlencode($val); $vars[$key] = $packedval; - setcookie($key, $packedval, $expires, '/'); + if ($path) + setcookie($key, $packedval, $expires, $path); + else + setcookie($key, $packedval, $expires); } @@ -927,4 +950,18 @@ class HTTP_ValidatorSet { // $Log$ +// Revision 1.45 2004/03/24 19:39:02 rurban +// php5 workaround code (plus some interim debugging code in XmlElement) +// php5 doesn't work yet with the current XmlElement class constructors, +// WikiUserNew does work better than php4. +// rewrote WikiUserNew user upgrading to ease php5 update +// fixed pref handling in WikiUserNew +// added Email Notification +// added simple Email verification +// removed emailVerify userpref subclass: just a email property +// changed pref binary storage layout: numarray => hash of non default values +// print optimize message only if really done. +// forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. +// prefs should be stored in db or homepage, besides the current session. +// // Revision 1.44 2004/03/14 16:26:22 rurban // copyright line Index: Theme.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/Theme.php,v retrieving revision 1.78 retrieving revision 1.79 diff -u -2 -b -p -d -r1.78 -r1.79 --- Theme.php 18 Mar 2004 22:32:33 -0000 1.78 +++ Theme.php 24 Mar 2004 19:39:02 -0000 1.79 @@ -1042,9 +1042,10 @@ class Button extends HtmlElement { function Button ($text, $url, $class = false) { global $request; - //FIXME: php5 incompatible - if (check_php_version(5)) + //php5 workaround + if (check_php_version(5)) { $this->_init('a', array('href' => $url)); - else + } else { $this->HtmlElement('a', array('href' => $url)); + } if ($class) $this->setAttr('class', $class); @@ -1132,4 +1133,18 @@ class SubmitImageButton extends SubmitBu // $Log$ +// Revision 1.79 2004/03/24 19:39:02 rurban +// php5 workaround code (plus some interim debugging code in XmlElement) +// php5 doesn't work yet with the current XmlElement class constructors, +// WikiUserNew does work better than php4. +// rewrote WikiUserNew user upgrading to ease php5 update +// fixed pref handling in WikiUserNew +// added Email Notification +// added simple Email verification +// removed emailVerify userpref subclass: just a email property +// changed pref binary storage layout: numarray => hash of non default values +// print optimize message only if really done. +// forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. +// prefs should be stored in db or homepage, besides the current session. +// // Revision 1.78 2004/03/18 22:32:33 rurban // work to make it php5 compatible Index: WikiDB.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB.php,v retrieving revision 1.37 retrieving revision 1.38 diff -u -2 -b -p -d -r1.37 -r1.38 --- WikiDB.php 1 Mar 2004 13:48:45 -0000 1.37 +++ WikiDB.php 24 Mar 2004 19:39:02 -0000 1.38 @@ -759,6 +759,56 @@ class WikiDB_Page // postgres can't optimize while locked. if (time() % 50 == 0) { + if ($backend->optimize()) trigger_error(sprintf(_("Optimizing %s"),'backend'), E_USER_NOTICE); - $backend->optimize(); + } + + /* Generate notification emails */ + if (isa($newrevision, 'wikidb_pagerevision')) { + // Save didn't fail because of concurrent updates. + $notify = $this->get('notify'); + if (!empty($notify) and is_array($notify)) { + foreach ($notify as $page => $users) { + if (ereg($page,$this->_pagename)) { + $emails = array(); + foreach ($users as $userid => $user) { + if (!empty($user['verified']) and !empty($user['email'])) + $emails[] = $user['email']; + elseif (DEBUG and !empty($user['email'])) { + global $request; + //do a dynamic emailVerified check update + $u = $request->getUser(); + if ($u->UserName() == $userid) { + if ($request->_prefs->get('emailVerified')) { + $emails[] = $user['email']; + $notify[$page][$userid]['verified'] = 1; + $request->_dbi->set('notify',$notify); + } + } else { + $u = WikiUser($userid); + if ($u->_prefs->get('emailVerified')) { + $emails[] = $user['email']; + $notify[$page][$userid]['verified'] = 1; + $request->_dbi->set('notify',$notify); + } + } + // do no verification + if (DEBUG and !in_array($user['email'],$emails)) + $emails[] = $user['email']; + } + } + if (!empty($emails)) { + $subject = sprintf(_("PageChange Notification %s"),$page); + $diff = WikiUrl($this->_pagename, array('action'=>'diff',true)); + $emails = join(',',$emails); + if (mail($emails,"[".WIKI_NAME."] ".$subject,$subject."\n".$diff)) + trigger_error(sprintf(_("PageChange Notification of %s sent to %s"), + $this->_pagename, $emails), E_USER_NOTICE); + else + trigger_error(sprintf(_("PageChange Notification Error: Couldn't send %s to %s"), + $this->_pagename, $emails), E_USER_WARNING); + } + } + } + } } @@ -1238,5 +1288,5 @@ class WikiDB_PageRevision else { // else revision has been deleted... What to do? - return __sprintf("Acck! Revision %s of %s seems to have been deleted!", + return __sprintf("Oops! Revision %s of %s seems to have been deleted!", $version, $pagename); } @@ -1372,5 +1422,5 @@ class WikiDB_PageIterator } - // Not yet used. + // Not yet used. See PageList::sortby function setSortby ($arg = false) { if (!$arg) { Index: WikiUserNew.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiUserNew.php,v retrieving revision 1.35 retrieving revision 1.36 diff -u -2 -b -p -d -r1.35 -r1.36 --- WikiUserNew.php 18 Mar 2004 22:18:31 -0000 1.35 +++ WikiUserNew.php 24 Mar 2004 19:39:02 -0000 1.36 @@ -239,12 +239,26 @@ function WikiUserClassname() { * Upgrade olduser by copying properties from user to olduser. * We are not sure yet, for which php's a simple $this = $user works reliably, - * That's why try it the hard way. + * (on php4 it works ok, on php5 it's currently disallowed on the parser level) + * that's why try it the hard way. */ function UpgradeUser ($olduser, $user) { if (isa($user,'_WikiUser') and isa($olduser,'_WikiUser')) { // populate the upgraded class $olduser with the values from the new user object + //only _auth_level, _current_method, _current_index, + if (!empty($user->_level) and + $user->_level > $olduser->_level) + $olduser->_level = $user->_level; + if (!empty($user->_current_index) and + $user->_current_index > $olduser->_current_index) { + $olduser->_current_index = $user->_current_index; + $olduser->_current_method = $user->_current_method; + } + if (!empty($user->_authmethod)) + $olduser->_authmethod = $user->_authmethod; + /* foreach (get_object_vars($user) as $k => $v) { if (!empty($v)) $olduser->$k = $v; } + */ $olduser->hasHomePage(); // revive db handle, because these don't survive sessions $GLOBALS['request']->_user = $olduser; @@ -287,5 +301,4 @@ class _WikiUser { var $_userid = ''; - var $_level = WIKIAUTH_FORBIDDEN; var $_prefs = false; @@ -296,8 +309,10 @@ class _WikiUser $this->_userid = $UserName; + $this->_HomePagehandle = false; if ($UserName) { $this->hasHomePage(); } - if (!$this->_prefs) { + $this->_level = WIKIAUTH_FORBIDDEN; + if (empty($this->_prefs)) { if ($prefs) $this->_prefs = $prefs; else $this->getPreferences(); @@ -509,5 +524,5 @@ class _AnonUser extends _WikiUser { - var $_level = WIKIAUTH_ANON; + var $_level = WIKIAUTH_ANON; // var in php-5.0.0RC1 deprecated /** Anon only gets to load and save prefs in a cookie, that's it. @@ -519,5 +534,7 @@ extends _WikiUser $this->_prefs = new UserPreferences; $UserName = $this->UserName(); - if ($cookie = $request->getCookieVar(WIKI_NAME)) { + + // Try to read deprecated 1.3.x style cookies + if ($cookie = $request->cookies->get_old(WIKI_NAME)) { if (! $unboxedcookie = $this->_prefs->retrieve($cookie)) { trigger_error(_("Format of UserPreferences cookie not recognised.") . " " @@ -525,14 +542,6 @@ extends _WikiUser E_USER_WARNING); } - // TODO: try reading userid from old PhpWiki cookie - // formats, then delete old cookie from browser! - // - //else { - // try old cookie format. - //$cookie = $request->getCookieVar('WIKI_ID'); - //} - /** - * Only keep the cookie if it matches the UserName who is + * Only set if it matches the UserName who is * signing in or if this really is an Anon login (no * username). (Remember, _BogoUser and higher inherit this @@ -540,33 +549,77 @@ extends _WikiUser */ if (! $UserName || $UserName == $unboxedcookie['userid']) { - $this->_prefs = new UserPreferences($unboxedcookie); + $updated = $this->_prefs->updatePrefs($unboxedcookie); + //$this->_prefs = new UserPreferences($unboxedcookie); + $this->_userid = $unboxedcookie['userid']; + $UserName = $this->_userid; + } + // v1.3.8 policy: don't set PhpWiki cookies, only plaintext WIKI_ID cookies + $request->deleteCookieVar(WIKI_NAME); + } + // Try to read deprecated 1.3.4 style cookies + if (! $UserName and ($cookie = $request->cookies->get_old("WIKI_PREF2"))) { + if (! $unboxedcookie = $this->_prefs->retrieve($cookie)) { + if (! $UserName || $UserName == $unboxedcookie['userid']) { + $updated = $this->_prefs->updatePrefs($unboxedcookie); + //$this->_prefs = new UserPreferences($unboxedcookie); $this->_userid = $unboxedcookie['userid']; + $UserName = $this->_userid; + } + $request->deleteCookieVar("WIKI_PREF2"); + } } + if (! $UserName ) { + // Try reading userid from old PhpWiki cookie formats: + if ($cookie = $request->cookies->get_old('WIKI_ID')) { + if (is_string($cookie)) + $this->_userid = $cookie; + elseif (is_array($cookie) and !empty($cookie['userid'])) + $this->_userid = $cookie['userid']; } + $UserName = $this->_userid; + } + // initializeTheme() needs at least an empty object - if (! $this->_prefs ) + /* + if (empty($this->_prefs)) $this->_prefs = new UserPreferences; + */ return $this->_prefs; } - /** Save prefs in a cookie + /** _AnonUser::setPreferences(): Save prefs in a cookie and session and update all global vars + * + * Allow for multiple wikis in same domain. Encode only the + * _prefs array of the UserPreference object. Ideally the + * prefs array should just be imploded into a single string or + * something so it is completely human readable by the end + * user. In that case stricter error checking will be needed + * when loading the cookie. */ function setPreferences($prefs, $id_only=false) { - global $request; - // Allow for multiple wikis in same domain. Encode only the - // _prefs array of the UserPreference object. Ideally the - // prefs array should just be imploded into a single string or - // something so it is completely human readable by the end - // user. In that case stricter error checking will be needed - // when loading the cookie. if (!is_object($prefs)) { + if (is_object($this->_prefs)) { + $updated = $this->_prefs->updatePrefs($prefs); + $prefs =& $this->_prefs; + } else { + // update the prefs values from scratch. This could leed to unnecessary + // side-effects: duplicate emailVerified, ... $prefs = new UserPreferences($prefs); - } // check if different from the current prefs $updated = $this->_prefs->isChanged($prefs); + } + } else { + $updated = $this->_prefs->isChanged($prefs); + } if ($updated) { if ($id_only) { - $request->setCookieVar(WIKI_NAME, serialize(array('userid' => $prefs->get('userid'))), + global $request; + // new 1.3.8 policy: no array cookies, only plain userid string as in + // the pre 1.3.x versions. + // prefs should be stored besides the session in the homepagehandle or in a db. + $request->setCookieVar('WIKI_ID', $this->_userid, COOKIE_EXPIRATION_DAYS, COOKIE_DOMAIN); + //$request->setCookieVar(WIKI_NAME, array('userid' => $prefs->get('userid')), + // COOKIE_EXPIRATION_DAYS, COOKIE_DOMAIN); } } @@ -575,4 +628,8 @@ extends _WikiUser if (count($unpacked)) { global $request; + foreach (array('_method','_select','_update') as $param) { + if (!empty($this->_prefs->{$param})) + $prefs->{$param} = $this->_prefs->{$param}; + } $this->_prefs = $prefs; $request->_prefs =& $this->_prefs; @@ -698,5 +755,5 @@ extends _AnonUser $this->_authmethod = substr(get_class($this),1,-8); if ($this->_authmethod == 'a') $this->_authmethod = 'admin'; - if (!$this->_prefs) { + if (! $this->_prefs) { if ($prefs) $this->_prefs = $prefs; else $this->getPreferences(); @@ -712,4 +769,6 @@ extends _AnonUser //} else { // unset($this->_prefs->_select); + } else { + $this->_prefs->_method = 'HomePage'; } if ( !isset($this->_prefs->_update) and !empty($DBAuthParams['pref_update']) @@ -742,4 +801,6 @@ extends _AnonUser elseif (USER_AUTH_POLICY === 'old') { // default: try to be smart + // On php5 we can directly return and upgrade the Object, + // before we have to upgrade it manually. if (!empty($GLOBALS['PHP_AUTH_USER'])) { if (check_php_version(5)) @@ -747,4 +808,6 @@ extends _AnonUser else { $user = new _HttpAuthPassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line. + $this = $user; return UpgradeUser($user,$this); } @@ -755,4 +818,6 @@ extends _AnonUser else { $user = new _DbPassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line. + $this = $user; return UpgradeUser($user,$this); } @@ -762,4 +827,6 @@ extends _AnonUser else { $user = new _LDAPPassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line. + $this = $user; return UpgradeUser($user,$this); } @@ -769,4 +836,6 @@ extends _AnonUser else { $user = new _IMAPPassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line. + $this = $user; return UpgradeUser($user,$this); } @@ -776,4 +845,6 @@ extends _AnonUser else { $user = new _FilePassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line. + $this = $user; return UpgradeUser($user,$this); } @@ -783,4 +854,6 @@ extends _AnonUser else { $user = new _PersonalPagePassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line. + $this = $user; return UpgradeUser($user,$this); } @@ -865,7 +938,8 @@ extends _AnonUser // User may have deleted cookie, retrieve from his // PersonalPage if there is one. - if (! $this->_prefs && $this->_HomePagehandle) { + if ($this->_HomePagehandle) { if ($restored_from_page = $this->_prefs->retrieve($this->_HomePagehandle->get('pref'))) { - $this->_prefs = new UserPreferences($restored_from_page); + $updated = $this->_prefs->updatePrefs($restored_from_page); + //$this->_prefs = new UserPreferences($restored_from_page); return $this->_prefs; } @@ -885,13 +959,5 @@ extends _AnonUser } } - - if (!is_object($prefs)) { - $prefs = new UserPreferences($prefs); - } if (_AnonUser::setPreferences($prefs, $id_only)) { - global $request; - $this->_prefs = $prefs; - $request->_prefs =& $this->_prefs; - $request->_user->_prefs =& $this->_prefs; // Encode only the _prefs array of the UserPreference object if ($this->_HomePagehandle and !$id_only) @@ -911,4 +977,6 @@ extends _AnonUser $class = $this->nextClass(); while ($user = new $class($this->_userid,$this->_prefs)) { + //todo: with php5 comment the following line: + $this = $user; UpgradeUser($this,$user); if ($user->userExists()) { @@ -957,4 +1025,5 @@ extends _AnonUser // Todo. hmm... trigger_error(_("The length of the stored password is shorter than the system policy allows. Sorry, you cannot login.\n You have to ask the System Administrator to reset your password.")); + return false; } if (strlen($submitted_password) < PASSWORD_LENGTH_MINIMUM) @@ -1034,4 +1103,6 @@ extends _AnonUser $class = $this->nextClass(); while ($user = new $class($this->_userid,$this->_prefs)) { + //todo: with php5 comment the following line: + $this = $user; $user = UpgradeUser($this, $user); if ($user->userExists()) { @@ -1070,4 +1141,6 @@ extends _PassUser $user = new _PersonalPagePassUser($this->_userid); if ($user->checkPass($submitted_password)) { + //todo: with php5 comment the following line: + $this = $user; $user = UpgradeUser($this, $user); //if (!check_php_version(5)) @@ -1108,5 +1181,5 @@ extends _PassUser if (empty($stored_password)) { trigger_error(sprintf( - _("\nYou stored an empty password in your %s page.\n"). + _("\nYou stored an empty password in your '%s' page.\n"). _("Your access permissions are only for a BogoUser.\n"). _("Please set your password in UserPreferences."), @@ -1238,6 +1311,7 @@ extends _PassUser if (!$this->_prefs) { if ($prefs) $this->_prefs = $prefs; - else _PassUser::_PassUser($UserName); } + if (!isset($this->_prefs->_method)) + _PassUser::_PassUser($UserName); $this->_authmethod = 'Db'; //$this->getAuthDbh(); @@ -1248,4 +1322,6 @@ extends _PassUser else { $user = new _AdoDbPassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line: + $this = $user; return UpgradeUser($user, $this); } @@ -1256,4 +1332,6 @@ extends _PassUser else { $user = new _PearDbPassUser($UserName,$this->_prefs); + //todo: with php5 comment the following line: + $this = $user; return UpgradeUser($user, $this); } @@ -1283,6 +1361,7 @@ extends _DbPassUser if (!$this->_prefs and isa($this,"_PearDbPassUser")) { if ($prefs) $this->_prefs = $prefs; - else _PassUser::_PassUser($UserName); } + if (!isset($this->_prefs->_method)) + _PassUser::_PassUser($UserName); $this->_userid = $UserName; // make use of session data. generally we only initialize this every time, @@ -1298,16 +1377,20 @@ extends _DbPassUser _AnonUser::getPreferences(); $this->getAuthDbh(); + if (isset($this->_prefs->_select)) { $dbh = &$this->_auth_dbi; - if ((! $this->_prefs) and isset($this->_prefs->_select)) { $db_result = $dbh->query(sprintf($this->_prefs->_select,$dbh->quote($this->_userid))); - list($prefs_blob) = $db_result->fetchRow(); + // patched by fre...@pa... + $prefs = $db_result->fetchRow(); + $prefs_blob = $prefs["prefs"]; if ($restored_from_db = $this->_prefs->retrieve($prefs_blob)) { - $this->_prefs = new UserPreferences($restored_from_db); + $updated = $this->_prefs->updatePrefs($restored_from_db); + //$this->_prefs = new UserPreferences($restored_from_db); return $this->_prefs; } } - if ((! $this->_prefs) && $this->_HomePagehandle) { + if ($this->_HomePagehandle) { if ($restored_from_page = $this->_prefs->retrieve($this->_HomePagehandle->get('pref'))) { - $this->_prefs = new UserPreferences($restored_from_page); + $updated = $this->_prefs->updatePrefs($restored_from_page); + //$this->_prefs = new UserPreferences($restored_from_page); return $this->_prefs; } @@ -1317,30 +1400,15 @@ extends _DbPassUser function setPreferences($prefs, $id_only=false) { - // Encode only the _prefs array of the UserPreference object - if (!is_object($prefs)) { - $prefs = new UserPreferences($prefs); - } // if the prefs are changed if (_AnonUser::setPreferences($prefs, 1)) { global $request; - $packed = $prefs->store(); - // $unpacked = $prefs->unpack($packed); - if (isset($this->_prefs->_method)) - $prefs->_method = $this->_prefs->_method; - if (isset($this->_prefs->_select)) - $prefs->_select = $this->_prefs->_select; - if (isset($this->_prefs->_update)) - $prefs->_update = $this->_prefs->_update; - $this->_prefs = $prefs; - $request->_prefs =& $this->_prefs; - $request->_user->_prefs =& $this->_prefs; - //$request->setSessionVar('wiki_prefs', $this->_prefs); - //We don't store the dbi chain. DB connections don't survive sessions. $user = $request->_user; - unset($user->_auth_dbi); - $request->setSessionVar('wiki_user', $user); - if (isset($this->_prefs->_update)) { + //unset($user->_auth_dbi); + //$request->setSessionVar('wiki_user', $user); $this->getAuthDbh(); + $packed = $this->_prefs->store(); + if (!$id_only and isset($this->_prefs->_update)) { $dbh = &$this->_auth_dbi; + $dbh->simpleQuery(sprintf($this->_prefs->_update, $dbh->quote($packed), @@ -1351,5 +1419,5 @@ extends _DbPassUser $this->_HomePagehandle->set('pref', $packed); } - return count($prefs->unpack($packed)); + return count($this->_prefs->unpack($packed)); } return 0; @@ -1478,5 +1546,6 @@ extends _DbPassUser if (!$this->_prefs and isa($this,"_AdoDbPassUser")) { if ($prefs) $this->_prefs = $prefs; - else _PassUser::_PassUser($UserName); + if (!isset($this->_prefs->_method)) + _PassUser::_PassUser($UserName); } $this->_userid = $UserName; @@ -1490,6 +1559,6 @@ extends _DbPassUser // override the generic slow method here for efficiency _AnonUser::getPreferences(); - //$this->getAuthDbh(); - if ((! $this->_prefs) and isset($this->_prefs->_select)) { + $this->getAuthDbh(); + if (isset($this->_prefs->_select)) { $dbh = & $this->_auth_dbi; $rs = $dbh->Execute(sprintf($this->_prefs->_select,$dbh->qstr($this->_userid))); @@ -1497,15 +1566,17 @@ extends _DbPassUser $rs->Close(); } else { - $prefs_blob = $rs->fields['pref_blob']; + $prefs_blob = $rs->fields['prefs']; $rs->Close(); if ($restored_from_db = $this->_prefs->retrieve($prefs_blob)) { - $this->_prefs = new UserPreferences($restored_from_db); + $updated = $this->_prefs->updatePrefs($restored_from_db); + //$this->_prefs = new UserPreferences($restored_from_db); return $this->_prefs; } } } - if ((! $this->_prefs) && $this->_HomePagehandle) { + if ($this->_HomePagehandle) { if ($restored_from_page = $this->_prefs->retrieve($this->_HomePagehandle->get('pref'))) { - $this->_prefs = new UserPreferences($restored_from_page); + $updated = $this->_prefs->updatePrefs($restored_from_page); + //$this->_prefs = new UserPreferences($restored_from_page); return $this->_prefs; } @@ -1515,29 +1586,11 @@ extends _DbPassUser function setPreferences($prefs, $id_only=false) { - // Encode only the _prefs array of the UserPreference object - if (!is_object($prefs)) { - $prefs = new UserPreferences($prefs); - } // if the prefs are changed if (_AnonUser::setPreferences($prefs, 1)) { global $request; - $packed = $prefs->store(); - // $unpacked = $prefs->unpack($packed); - - if (isset($this->_prefs->_method)) - $prefs->_method = $this->_prefs->_method; - if (isset($this->_prefs->_select)) - $prefs->_select = $this->_prefs->_select; - if (isset($this->_prefs->_update)) - $prefs->_update = $this->_prefs->_update; - $this->_prefs = $prefs; - $request->_prefs =& $this->_prefs; - $request->_user->_prefs =& $this->_prefs; - //$request->setSessionVar('wiki_prefs', $this->_prefs); - //We don't store the dbi chain. DB connections don't survive sessions. + $packed = $this->_prefs->store(); $user = $request->_user; unset($user->_auth_dbi); - $request->setSessionVar('wiki_user', $user); - if (isset($this->_prefs->_update)) { + if (!$id_only and isset($this->_prefs->_update)) { $this->getAuthDbh(); $dbh = &$this->_auth_dbi; @@ -1551,5 +1604,5 @@ extends _DbPassUser $this->_HomePagehandle->set('pref', $packed); } - return count($prefs->unpack($packed)); + return count($this->_prefs->unpack($packed)); } return 0; @@ -2025,6 +2078,5 @@ extends _UserPreference_numeric { function _UserPreference_int ($default, $minval = false, $maxval = false) { - $this->_UserPreference_numeric((int)$default, (int)$minval, - (int)$maxval); + $this->_UserPreference_numeric((int)$default, (int)$minval, (int)$maxval); } @@ -2088,5 +2140,5 @@ extends _UserPreference function sanify ($value) { - if (FindFile($this->_themefile($value))) + if (!empty($value) and FindFile($this->_themefile($value))) return $value; return $this->default_value; @@ -2106,4 +2158,164 @@ extends _UserPreference } +class _UserPreference_notify +extends _UserPreference +{ + function sanify ($value) { + if (!empty($value)) + return $value; + else + return $this->default_value; + } + + /** update to global user prefs: side-effect on set notify changes + * use a global_data notify hash: + * notify = array('pagematch' => array(userid => ('email' => mail, + * 'verified' => 0|1), + * ...), + * ...); + */ + function update ($value) { + $dbh = $GLOBALS['request']->getDbh(); + $notify = $dbh->get('notify'); + if (empty($notify)) + $data = array(); + else + $data = & $notify; + // expand to existing pages only or store matches? + // for now we store (glob-style) matches which is easier for the user + $pages = $this->_page_split($value); + $user = $GLOBALS['request']->getUser(); + $userid = $user->UserName(); + $email = $user->_prefs->get('email'); + $verified = $user->_prefs->_prefs['email']->getraw('emailVerified'); + // check existing notify hash and possibly delete pages for email + if (!empty($data)) { + foreach ($data as $page => $users) { + if (isset($data[$page][$userid]) and !in_array($page, $pages)) { + unset($data[$page][$userid]); + } + if (count($data[$page]) == 0) + unset($data[$page]); + } + } + // add the new pages + if (!empty($pages)) { + foreach ($pages as $page) { + if (!isset($data[$page])) + $data[$page] = array(); + if (!isset($data[$page][$userid])) { + // should we really store the verification notice here or + // check it dynamically at every page->save? + if ($verified) { + $data[$page][$userid] = array('email' => $email, + 'verified' => $verified); + } else { + $data[$page][$userid] = array('email' => $email); + } + } + } + } + // store users changes + $dbh->set('notify',$data); + } + + /** split the user-given comma or whitespace delimited pagenames + * to array + */ + function _page_split($value) { + return preg_split('/[\s,]+/',$value,-1,PREG_SPLIT_NO_EMPTY); + } +} + +class _UserPreference_email +extends _UserPreference +{ + function sanify ($value) { + // check for valid email address + if ($this->get('email') == $value and $this->getraw('emailVerified')) + return $value; + list($ok,$msg) = ValidateMail($value,'noconnect'); + if ($ok) { + return $value; + } else { + trigger_error($msg, E_USER_WARNING); + return $this->default_value; + } + } + + /** Side-effect on email changes: + * Send a verification mail or for now just a notification email. + * For true verification (value = 2), we'd need a mailserver hook. + */ + function update ($value) { + $verified = $this->getraw('emailVerified'); + if (!empty($value) and !$verified) { + list($ok,$msg) = ValidateMail($value); + if ($ok and mail($value,"[".WIKI_NAME ."] "._("Email Verification"), + sprintf(_("Welcome to %s!\nYou email account is verified and\nwill be used to send pagechange notifications.\nSee %s"), + WIKI_NAME, WikiUrl($GLOBALS['request']->getArg('pagename'),'',true)))) + $this->set('emailVerified',1); + } + } +} + +/** Check for valid email address + fixed version from http://www.zend.com/zend/spotlight/ev12apr.php + */ +function ValidateMail($email, $noconnect=false) { + $HTTP_HOST = $_SERVER['HTTP_HOST']; + $result = array(); + // well, technically ".a.a.@host.com" is also valid + if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { + $result[0] = false; + $result[1] = "$email is not properly formatted"; + return $result; + } + if ($noconnect) + return array(true,"$email is properly formatted"); + + list ( $Username, $Domain ) = split ("@",$email); + //Todo: getmxrr workaround on windows or manual input field to verify it manually + if (!isWindows() and getmxrr($Domain, $MXHost)) { // avoid warning on Windows. + $ConnectAddress = $MXHost[0]; + } else { + $ConnectAddress = $Domain; + } + $Connect = fsockopen ( $ConnectAddress, 25 ); + if ($Connect) { + if (ereg("^220", $Out = fgets($Connect, 1024))) { + fputs ($Connect, "HELO $HTTP_HOST\r\n"); + $Out = fgets ( $Connect, 1024 ); + fputs ($Connect, "MAIL FROM: <".$email.">\r\n"); + $From = fgets ( $Connect, 1024 ); + fputs ($Connect, "RCPT TO: <".$email.">\r\n"); + $To = fgets ($Connect, 1024); + fputs ($Connect, "QUIT\r\n"); + fclose($Connect); + if (!ereg ("^250", $From)) { + $result[0]=false; + $result[1]="Server rejected address: ". $From; + return $result; + } + if (!ereg ( "^250", $To )) { + $result[0]=false; + $result[1]="Server rejected address: ". $To; + return $result; + } + } else { + $result[0] = false; + $result[1] = "No response from server"; + return $result; + } + } else { + $result[0]=false; + $result[1]="Can not connect E-Mail server."; + return $result; + } + $result[0]=true; + $result[1]="$email appears to be valid."; + return $result; +} // end of function + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -2121,5 +2333,5 @@ extends _UserPreference class UserPreferences { - function UserPreferences ($saved_prefs = false) { + function UserPreferences($saved_prefs = false) { // userid stored too, to ensure the prefs are being loaded for // the correct (currently signing in) userid if stored in a @@ -2130,7 +2342,8 @@ class UserPreferences 'passwd' => new _UserPreference(''), 'autologin' => new _UserPreference_bool(), - 'email' => new _UserPreference(''), - 'emailVerified' => new _UserPreference_bool(), - 'notifyPages' => new _UserPreference(''), + //'emailVerified' => new _UserPreference_emailVerified(), + //fixed: store emailVerified as email parameter + 'email' => new _UserPreference_email(''), + 'notifyPages' => new _UserPreference_notify(''), 'theme' => new _UserPreference_theme(THEME), 'lang' => new _UserPreference_language(DEFAULT_LANGUAGE), @@ -2154,5 +2367,7 @@ class UserPreferences } - function _getPref ($name) { + function _getPref($name) { + if ($name == 'emailVerified') + $name = 'email'; if (!isset($this->_prefs[$name])) { if ($name == 'passwd2') return false; @@ -2164,22 +2379,16 @@ class UserPreferences // get the value or default_value of the subobject - function get ($name) { + function get($name) { if ($_pref = $this->_getPref($name)) + if ($name == 'emailVerified') + return $_pref->getraw($name); + else return $_pref->get($name); else return false; - /* - if (is_object($this->_prefs[$name])) - return $this->_prefs[$name]->get($name); - elseif (($value = $this->_getPref($name)) === false) - return false; - elseif (!isset($value)) - return $this->_prefs[$name]->default_value; - else return $value; - */ } // check and set the new value in the subobject - function set ($name, $value) { + function set($name, $value) { $pref = $this->_getPref($name); if ($pref === false) @@ -2193,19 +2402,34 @@ class UserPreferences return false; } + /* if ($name == 'theme' and $value == '') return true; + */ + if (!isset($pref->{$value}) or $pref->{$value} != $pref->default_value) { $newvalue = $pref->sanify($value); $pref->set($name,$newvalue); + } $this->_prefs[$name] = $pref; return true; + } - // don't set default values to save space (in cookies, db and - // sesssion) - /* - if ($value == $pref->default_value) - unset($this->_prefs[$name]); - else - $this->_prefs[$name] = $pref; - */ + function updatePrefs($prefs) { + $count = 0; + if (is_object($prefs)) { + foreach ($this->_prefs as $type => $obj) { + if ($obj->get($type) !== $prefs->get($type)) { + $this->_prefs[$type]->set($type,$prefs->get($type)); + $count++; + } + } + } elseif (is_array($prefs)) { + foreach ($this->_prefs as $type => $obj) { + if (isset($prefs[$type]) and $obj->get($type) != $prefs[$type]) { + $this->_prefs[$type]->set($type,$prefs[$type]); + $count++; + } + } + } + return $count; } @@ -2216,5 +2440,7 @@ class UserPreferences foreach ($this->_prefs as $name => $object) { if ($value = $object->getraw($name)) - $prefs[] = array($name => $value); + $prefs[$name] = $value; + if ($name == 'email' and ($value = $object->getraw('emailVerified'))) + $prefs['emailVerified'] = $value; } return $this->pack($prefs); @@ -2229,5 +2455,5 @@ class UserPreferences $prefs = array(); foreach ($packed as $name => $packed_pref) { - if (substr($packed_pref, 0, 2) == "O:") { + if (is_string($packed_pref) and substr($packed_pref, 0, 2) == "O:") { //legacy: check if it's an old array of objects // Looks like a serialized object. @@ -2242,4 +2468,7 @@ class UserPreferences if (empty($prefs[$name])) $prefs[$name] = @unserialize(base64_decode($packed_pref)); + // patched by fre...@pa... + if (empty($prefs[$name])) + $prefs[$name] = $packed_pref; } } @@ -2288,4 +2517,8 @@ class UserPreferences } +/** TODO: new pref storage classes + * These are currently user specific and should be rewritten to be pref specific. + * i.e. $this == $user->_prefs + */ class CookieUserPreferences extends UserPreferences @@ -2323,7 +2556,7 @@ extends UserPreferences _AnonUser::getPreferences(); $this->getAuthDbh(); - if ((! $this->_prefs) and isset($this->_prefs->_select)) { + if (isset($this->_select)) { $dbh = & $this->_auth_dbi; - $rs = $dbh->Execute(sprintf($this->_prefs->_select,$dbh->qstr($this->_userid))); + $rs = $dbh->Execute(sprintf($this->_select,$dbh->qstr($this->_userid))); if ($rs->EOF) { $rs->Close(); @@ -2332,12 +2565,14 @@ extends UserPreferences $rs->Close(); if ($restored_from_db = $this->_prefs->retrieve($prefs_blob)) { - $this->_prefs = new UserPreferences($restored_from_db); + $updated = $this->_prefs->updatePrefs($restored_from_db); + //$this->_prefs = new UserPreferences($restored_from_db); return $this->_prefs; } } } - if ((! $this->_prefs) && $this->_HomePagehandle) { + if (empty($this->_prefs->_prefs) and $this->_HomePagehandle) { if ($restored_from_page = $this->_prefs->retrieve($this->_HomePagehandle->get('pref'))) { - $this->_prefs = new UserPreferences($restored_from_page); + $updated = $this->_prefs->updatePrefs($restored_from_page); + //$this->_prefs = new UserPreferences($restored_from_page); return $this->_prefs; } @@ -2349,4 +2584,18 @@ extends UserPreferences // $Log$ +// Revision 1.36 2004/03/24 19:39:02 rurban +// php5 workaround code (plus some interim debugging code in XmlElement) +// php5 doesn't work yet with the current XmlElement class constructors, +// WikiUserNew does work better than php4. +// rewrote WikiUserNew user upgrading to ease php5 update +// fixed pref handling in WikiUserNew +// added Email Notification +// added simple Email verification +// removed emailVerify userpref subclass: just a email property +// changed pref binary storage layout: numarray => hash of non default values +// print optimize message only if really done. +// forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. +// prefs should be stored in db or homepage, besides the current session. +// // Revision 1.35 2004/03/18 22:18:31 rurban // workaround for php5 object upgrading problem Index: XmlElement.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/XmlElement.php,v retrieving revision 1.25 retrieving revision 1.26 diff -u -2 -b -p -d -r1.25 -r1.26 --- XmlElement.php 18 Mar 2004 22:32:33 -0000 1.25 +++ XmlElement.php 24 Mar 2004 19:39:02 -0000 1.26 @@ -2,6 +2,7 @@ /** * Code for writing XML. + * @author: Jeff Dairiki * - * FIXME: This code is not php5 compatible. + * FIXME: This code is not (yet) php5 compatible. */ @@ -174,8 +175,4 @@ class XmlElement extends XmlContent function XmlElement ($tagname /* , $attr_or_content , ...*/) { //FIXME: php5 incompatible - if (check_php_version(5)) { - $this->_content = array(); - $this->_pushContent_array(func_get_args()); - } else $this->XmlContent(); $this->_init(func_get_args()); Index: editpage.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/editpage.php,v retrieving revision 1.62 retrieving revision 1.63 diff -u -2 -b -p -d -r1.62 -r1.63 --- editpage.php 17 Mar 2004 18:41:05 -0000 1.62 +++ editpage.php 24 Mar 2004 19:39:02 -0000 1.63 @@ -275,4 +275,7 @@ function speich() { $cleaner->cleanPageRevisions($page); + /* generate notification emails done in WikiDB::save to catch all direct calls + (admin plugins) */ + $dbi = $request->getDbh(); $warnings = $dbi->GenericWarnings(); @@ -622,4 +625,18 @@ extends PageEditor /** $Log$ + Revision 1.63 2004/03/24 19:39:02 rurban + php5 workaround code (plus some interim debugging code in XmlElement) + php5 doesn't work yet with the current XmlElement class constructors, + WikiUserNew does work better than php4. + rewrote WikiUserNew user upgrading to ease php5 update + fixed pref handling in WikiUserNew + added Email Notification + added simple Email verification + removed emailVerify userpref subclass: just a email property + changed pref binary storage layout: numarray => hash of non default values + print optimize message only if really done. + forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. + prefs should be stored in db or homepage, besides the current session. + Revision 1.62 2004/03/17 18:41:05 rurban initial_content and template support for CreatePage Index: main.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/main.php,v retrieving revision 1.125 retrieving revision 1.126 diff -u -2 -b -p -d -r1.125 -r1.126 --- main.php 14 Mar 2004 16:30:52 -0000 1.125 +++ main.php 24 Mar 2004 19:39:03 -0000 1.126 @@ -41,12 +41,14 @@ class WikiRequest extends Request { // users might switch in a session between the two objects. // restore old auth level here or in updateAuthAndPrefs? - $user = $this->getSessionVar('wiki_user'); + //$user = $this->getSessionVar('wiki_user'); // revive db handle, because these don't survive sessions unset($this->_user->_HomePagehandle); $this->_user->hasHomePage(); - if (!isa($user,WikiUserClassname()) or empty($user->_level)) { + /* + if (!isa($user,WikiUserClassname()) or empty($this->_user->_level)) { $user = UpgradeUser($this->_user,$user); } - $this->_prefs = $this->_user->_prefs; + */ + $this->_prefs = & $this->_user->_prefs; } else { $user = WikiUser($userid); @@ -55,5 +57,5 @@ class WikiRequest extends Request { $user = UpgradeUser($this->_user,$user); $this->_user = $user; - $this->_prefs = $this->_user->_prefs; + $this->_prefs = & $this->_user->_prefs; } } else { @@ -256,4 +258,5 @@ class WikiRequest extends Request { // would be a situation which is not really handled with the // current code. + if (empty($GLOBALS['LANG'])) update_locale(DEFAULT_LANGUAGE); @@ -538,4 +541,6 @@ class WikiRequest extends Request { if (!empty($_SERVER['PHP_AUTH_USER'])) return $_SERVER['PHP_AUTH_USER']; + if (!empty($_ENV['REMOTE_USER'])) + return $_ENV['REMOTE_USER']; if ($user = $this->getSessionVar('wiki_user')) { @@ -850,4 +855,18 @@ main(); // $Log$ +// Revision 1.126 2004/03/24 19:39:03 rurban +// php5 workaround code (plus some interim debugging code in XmlElement) +// php5 doesn't work yet with the current XmlElement class constructors, +// WikiUserNew does work better than php4. +// rewrote WikiUserNew user upgrading to ease php5 update +// fixed pref handling in WikiUserNew +// added Email Notification +// added simple Email verification +// removed emailVerify userpref subclass: just a email property +// changed pref binary storage layout: numarray => hash of non default values +// print optimize message only if really done. +// forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. +// prefs should be stored in db or homepage, besides the current session. +// // Revision 1.125 2004/03/14 16:30:52 rurban // db-handle session revivification, dba fixes Index: stdlib.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/stdlib.php,v retrieving revision 1.164 retrieving revision 1.165 diff -u -2 -b -p -d -r1.164 -r1.165 --- stdlib.php 18 Mar 2004 21:41:09 -0000 1.164 +++ stdlib.php 24 Mar 2004 19:39:03 -0000 1.165 @@ -267,4 +267,5 @@ class Stack { var $items = array(); var $size = 0; + // var in php5.0.0.rc1 deprecated function push($item) { @@ -1105,4 +1106,5 @@ class ListRegexExpand { $this->list = &$list; $this->case_sensitive = $case_sensitive; + //$this->index = false; } function listMatchCallback ($item, $key) { @@ -1374,4 +1376,18 @@ function obj2hash ($obj, $exclude = fals // $Log$ +// Revision 1.165 2004/03/24 19:39:03 rurban +// php5 workaround code (plus some interim debugging code in XmlElement) +// php5 doesn't work yet with the current XmlElement class constructors, +// WikiUserNew does work better than php4. +// rewrote WikiUserNew user upgrading to ease php5 update +// fixed pref handling in WikiUserNew +// added Email Notification +// added simple Email verification +// removed emailVerify userpref subclass: just a email property +// changed pref binary storage layout: numarray => hash of non default values +// print optimize message only if really done. +// forced new cookie policy: delete pref cookies, use only WIKI_ID as plain string. +// prefs should be stored in db or homepage, besides the current session. +// // Revision 1... [truncated message content] |