<?php

/*  Copyright 2003 John Rankin (john.rankin@affinity.co.nz)

    This file adds a page rename capability to pmwiki
    Changements
    2003 Dec 26 pog $WikiLibDirs
*/

SDV($RedirectToRenameFmt,"[[redirect:{{\$RenameText}}]]");
SDV($PageRenameFmt,"<h1>$[Rename] <a href='\$PageUrl'>\$PageName</a></h1>
    <form action='\$ScriptUrl' method='post'>
    <input type='hidden' name='pagename' value='\$PageName' />
    <input type='hidden' name='action' value='postrename' />
    <input type='text' name='renametext' value='' size='27' />
    <input type='submit' value='$[Rename]' /></form>");
SDV($HandleRenameFmt,array(&$HTMLStartFmt,&$PageRenameFmt,&$HTMLEndFmt));
SDV($HandleActions['rename'],'HandleRename');
SDV($HandleActions['postrename'],'HandlePostRename');

function HandleRename($pagename) {
  global $HandleRenameFmt;
  $page = RetrieveAuthPage($pagename,'read');
  if (!$page) { Abort("?cannot rename $pagename"); }
  PrintFmt($pagename,$HandleRenameFmt);
}

function HandlePostRename($pagename) {
  global $WikiLibDirs, $WikiDir,$HTTP_POST_VARS,$PageTitlePattern,$PageNameSpace,
         $RedirectToRenameFmt,$PageFileFmt;
  $newpagetitle = str_replace(' ',$PageNameSpace,
           ucwords(trim(stripmagic($HTTP_POST_VARS['renametext']))));
  if (preg_match("/^($PageTitlePattern)\$/",$newpagetitle)) {
      $newpagename = FmtPageName('$Group',$pagename) . ".$newpagetitle"; 
      if (PageExists($newpagename)) { Abort("?$newpagename already exists"); }
      else { 
          Lock(2);
          TestLog("\n --rename $pagename to $newpagename");
          $page = RetrieveAuthPage($pagename,"edit");
          if (!$page) { Abort("?cannot get $pagename"); }
          $oldpagefile = FmtPageName($PageFileFmt,$pagename);
          $newpagefile = FmtPageName($PageFileFmt,$newpagename);
## 
          foreach ($WikiLibDirs as $dir) {
          $fp = @fopen("$dir/$oldpagefile","r");     /* not $pagefile */ 
      /*  TestLog("\n dir: $dir/$pagefile -$fp-");  */
          if ($fp) break;
          }
           if ($fp) {
      /*     TestLog("\n $dir/$oldpagefile | $WikiDir/$newpagefile"); */
             if (!copy("$dir/$oldpagefile","$WikiDir/$newpagefile")) 
                { Abort("copy failed: $dir/$oldpagefile to $WikiDir/$newpagefile") ;} 
 
          }
## 



          $page['text'] = 
                str_replace('$RenameText',$newpagetitle,$RedirectToRenameFmt);
          WritePage($pagename,$page);
      }
  } else { Abort("?'$newpagetitle' is not a valid page title"); }
  Redirect($pagename); 
}

?>