[pmwiki-devel] modifying $pagename upon first Save - FREQ

J. Meijer commentgg at hotmail.com
Sat Dec 2 09:26:12 CST 2006


Tested it now and my script is working. BUT I needed to patch pmwiki.php. Read on. 


----------------------------------------
> Date: Thu, 30 Nov 2006 18:22:09 -0600
> From: pmichaud at pobox.com
> To: commentgg at hotmail.com
> CC: pmwiki-devel at pmichaud.com
> Subject: Re: [pmwiki-devel] modifying $pagename upon first Save - FREQ
> 
> On Thu, Nov 30, 2006 at 10:34:24PM +0000, J. Meijer wrote:
> > 
> > What I want is to start of with a pagename like this:
> >  
> >   Event.2006-11-30___xx
> >  
> > and have it transformed into 
> >  
> >   Event.2006-11-30_01
> >  
> > when it is saved. I can't fix the pagename before a Save because 
> > multiple users would end up competing for the same pagename. 
> >
> > I found I can't do it decently. I have to resolve to hacks. These 
> > hacks don't guarantee that that all page actions that result in 
> > page creation have the pagename fixed. 
> >  
> > What I really want is a hook to HandleEdit(), so actions that do 
> > some preprocessing and then revert to standard HandleEdit() 
> > processing have a single point where $pagename can be set/changed, 
> > just before the page is created first time. This hook may go into 
> > UpdatePage() instead. The point is I can't get things done properly. 
> > Replacing HandleEdit in $EditFunctions with my own version just 
> > makes sure that any recipy that reverts to HandleEdit won't call mine. 
> 
> 
> And this thus answers your question -- what you really want
> to do is to modify pagename just before the page gets saved.
> For that you just need to insert a special function in
> $EditFunctions that will correct the pagename just before
> the page gets saved.  Something like:
> 
>     function TransformPageName(&$pagename, &$page, &$new) {
>       global $EnablePost;
>       ## adjust $pagename if page is about to be saved
>       if ($EnablePost) {
>         $pagename = preg_replace('/___.*$/', '_01', $pagename);
>       }
>     }
> 
>     ## Insert 'TransformPageName' immediately before 'PostPage'
>     array_splice($EditFunctions,
>                  array_search('PostPage', $EditFunctions), 
>                  0, 'TransformPageName');
> 
> So, the TransformPageName function will be called *immediately*
> before PostPage, and set value of $pagename (which PostPage and
> subsequent functions will use to actually save the page).
> 

This works after adding '&' to the declaration of UpdatePage():

  UpdatePage(  &  $pagename, etc

Because otherwise any changes to pagename don't revert back to the caller (HandleEdit) and it'll do things the wrong way. 


Furthermore, after modifying the pagename, I needed to migrate $PCache[$pagename] data to its new name. 

Maybe there is additional cached information that need to be migrated? 

I also thought it would be a good idea to change the $pagename global to the new name. 

That's it. 

/jm










_________________________________________________________________
Express yourself with gadgets on Windows Live Spaces
http://discoverspaces.live.com?source=hmtag1&loc=us


More information about the pmwiki-devel mailing list