function ThumbShoeHandleDelete($pagename, $auth = 'delete') { global $WikiLibDirs, $WikiDir, $LastModFile; $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT); if (!$page) { Abort("?cannot delete {$pagename}"); return; } $deleted = false; foreach ((array) $WikiLibDirs as $dir) { if ($dir->exists($pagename) and $dir->iswrite) { $dir->delete($pagename); $deleted = true; break; } } if (!$deleted) { // look in the default WikiDir if ($WikiDir->exists($pagename)) { $WikiDir->delete($pagename); $deleted = true; } } if ($deleted && $LastModFile) { touch($LastModFile); fixperms($LastModFile); } Redirect($pagename); exit; }
function HandleGuestDelete($pagename, $auth) { global $WikiDir, $LastModFile; $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT); if (!$page) { Abort("?cannot delete {$pagename}"); return; } $WikiDir->delete($pagename); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } Redirect(substr($pagename, 0, strlen($pagename) - 22)); }
function HandlePostUpload($pagename, $auth = 'upload') { global $UploadVerifyFunction, $UploadFileFmt, $LastModFile, $EnableUploadVersions, $Now; $page = RetrieveAuthPage($pagename, $auth, true, READPAGE_CURRENT); if (!$page) Abort("?cannot upload to $pagename"); $uploadfile = $_FILES['uploadfile']; $upname = $_REQUEST['upname']; if ($upname=='') $upname=$uploadfile['name']; $upname = MakeUploadName($pagename,$upname); if (!function_exists($UploadVerifyFunction)) Abort('?no UploadVerifyFunction available'); $filepath = FmtPageName("$UploadFileFmt/$upname",$pagename); $result = $UploadVerifyFunction($pagename,$uploadfile,$filepath); if ($result=='') { $filedir = preg_replace('#/[^/]*$#','',$filepath); mkdirp($filedir); if (IsEnabled($EnableUploadVersions, 0)) @rename($filepath, "$filepath,$Now"); if (!move_uploaded_file($uploadfile['tmp_name'],$filepath)) { Abort("?cannot move uploaded file to $filepath"); return; } fixperms($filepath,0444); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $result = "upresult=success"; } Redirect($pagename,"{\$PageUrl}?action=upload&uprname=$upname&$result"); }
function LinkIndexUpdate($pagelist) { global $LinkIndexFile, $PCache, $LinkIndexTime; SDV($LinkIndexTime, 10); if (!$pagelist || !$LinkIndexFile) { return; } StopWatch('LinkIndexUpdate begin'); $pagelist = (array) $pagelist; Lock(2); $ofp = fopen("{$LinkIndexFile},new", 'w'); $timeout = time() + $LinkIndexTime; foreach ($pagelist as $n) { if (time() > $timeout) { break; } if (isset($PCache[$n]['targets'])) { $targets = $PCache[$n]['targets']; } else { $page = ReadPage($n, READPAGE_CURRENT); if (!$page) { continue; } $targets = @$page['targets']; } fputs($ofp, "{$n}={$targets}\n"); } $ifp = @fopen($LinkIndexFile, 'r'); if ($ifp) { while (!feof($ifp)) { $line = fgets($ifp, 4096); while (substr($line, -1, 1) != "\n" && !feof($ifp)) { $line .= fgets($ifp, 4096); } $i = strpos($line, '='); if ($i === false) { continue; } $n = substr($line, 0, $i); if (in_array($n, $pagelist)) { continue; } fputs($ofp, $line); } fclose($ifp); } fclose($ofp); if (file_exists($LinkIndexFile)) { unlink($LinkIndexFile); } rename("{$LinkIndexFile},new", $LinkIndexFile); fixperms($LinkIndexFile); StopWatch('LinkIndexUpdate end'); }
function write($pagename,$page) { global $Now, $Version; $page['name'] = $pagename; $page['time'] = $Now; $page['host'] = $_SERVER['REMOTE_ADDR']; $page['agent'] = @$_SERVER['HTTP_USER_AGENT']; $page['rev'] = @$page['rev']+1; unset($page['version']); unset($page['newline']); uksort($page, 'CmpPageAttr'); $s = false; $pagefile = $this->pagefile($pagename); $dir = dirname($pagefile); mkdirp($dir); if (!file_exists("$dir/.htaccess") && $fp = @fopen("$dir/.htaccess", "w")) { fwrite($fp, "Order Deny,Allow\nDeny from all\n"); fclose($fp); } if ($pagefile && ($fp=fopen("$pagefile,new","w"))) { $r0 = array('%', "\n", '<'); $r1 = array('%25', '%0a', '%3c'); $x = "version=$Version ordered=1 urlencoded=1\n"; $s = true && fputs($fp, $x); $sz = strlen($x); foreach($page as $k=>$v) if ($k > '' && $k{0} != '=') { $x = str_replace($r0, $r1, "$k=$v") . "\n"; $s = $s && fputs($fp, $x); $sz += strlen($x); } $s = fclose($fp) && $s; $s = $s && (filesize("$pagefile,new") > $sz * 0.95); if (file_exists($pagefile)) $s = $s && unlink($pagefile); $s = $s && rename("$pagefile,new", $pagefile); } $s && fixperms($pagefile); if (!$s) Abort("Cannot write page to $pagename ($pagefile)...changes not saved"); PCache($pagename, $page); }
function write($pagename, $page) { global $Now, $Version, $Newline; $page['name'] = $pagename; $page['time'] = $Now; $page['host'] = $_SERVER['REMOTE_ADDR']; $page['agent'] = $_SERVER['HTTP_USER_AGENT']; $page['rev'] = @$page['rev'] + 1; unset($page['version']); unset($page['newline']); $s = false; $pagefile = FmtPageName($this->dirfmt, $pagename); mkdirp(dirname($pagefile)); if ($pagefile && ($fp = fopen("{$pagefile},new", "w"))) { $s = true && fputs($fp, "version={$Version}\nnewline={$Newline}\n"); foreach ($page as $k => $v) { if ($k > '') { $s = $s && fputs($fp, str_replace("\n", $Newline, "{$k}={$v}") . "\n"); } } $s = fclose($fp) && $s; if (file_exists($pagefile)) { $s = $s && unlink($pagefile); } $s = $s && rename("{$pagefile},new", $pagefile); } $s && fixperms($pagefile); if (!$s) { Abort("Cannot write page to {$pagename} ({$pagefile})...changes not saved"); } }
function write($pagename, $page) { global $Now, $Version, $Newline; $page['name'] = $pagename; $page['time'] = $Now; $page['host'] = $_SERVER['REMOTE_ADDR']; $page['agent'] = @$_SERVER['HTTP_USER_AGENT']; $page['rev'] = @$page['rev'] + 1; unset($page['version']); unset($page['newline']); uksort($page, 'CmpPageAttr'); $s = false; $pagefile = $this->pagefile($pagename); $dir = dirname($pagefile); mkdirp($dir); if (!file_exists("{$dir}/.htaccess") && ($fp = @fopen("{$dir}/.htaccess", "w"))) { fwrite($fp, "Order Deny,Allow\nDeny from all\n"); fclose($fp); } if ($pagefile && ($fp = fopen("{$pagefile},new", "w"))) { $s = true && fputs($fp, "version={$Version} ordered=1\nnewline={$Newline}\n"); foreach ($page as $k => $v) { if ($k > '' && $k[0] != '=') { $s = $s && fputs($fp, str_replace("\n", $Newline, "{$k}={$v}") . "\n"); } } $s = fclose($fp) && $s; if (file_exists($pagefile)) { $s = $s && unlink($pagefile); } $s = $s && rename("{$pagefile},new", $pagefile); } $s && fixperms($pagefile); if (!$s) { Abort("Cannot write page to {$pagename} ({$pagefile})...changes not saved"); } PCache($pagename, $page); }
function PageIndexUpdate($pagelist = NULL, $dir = '') { global $EnableReadOnly, $PageIndexUpdateList, $PageIndexFile, $PageIndexTime, $Now; if (IsEnabled($EnableReadOnly, 0)) return; $abort = ignore_user_abort(true); if ($dir) { flush(); chdir($dir); } if (is_null($pagelist)) { $pagelist = (array)$PageIndexUpdateList; $PageIndexUpdateList = array(); } if (!$pagelist || !$PageIndexFile) return; SDV($PageIndexTime, 10); $c = count($pagelist); $updatecount = 0; StopWatch("PageIndexUpdate begin ($c pages to update)"); $pagelist = (array)$pagelist; $timeout = time() + $PageIndexTime; $cmpfn = create_function('$a,$b', 'return strlen($b)-strlen($a);'); Lock(2); $ofp = fopen("$PageIndexFile,new", 'w'); foreach($pagelist as $pn) { if (@$updated[$pn]) continue; @$updated[$pn]++; if (time() > $timeout) continue; $page = ReadPage($pn, READPAGE_CURRENT); if ($page) { $targets = str_replace(',', ' ', @$page['targets']); $terms = PageIndexTerms(array(@$page['text'], $targets, $pn)); usort($terms, $cmpfn); $x = ''; foreach($terms as $t) { if (strpos($x, $t) === false) $x .= " $t"; } fputs($ofp, "$pn:$Now: $targets :$x\n"); } $updatecount++; } $ifp = @fopen($PageIndexFile, 'r'); if ($ifp) { while (!feof($ifp)) { $line = fgets($ifp, 4096); while (substr($line, -1, 1) != "\n" && !feof($ifp)) $line .= fgets($ifp, 4096); $i = strpos($line, ':'); if ($i === false) continue; $n = substr($line, 0, $i); if (@$updated[$n]) continue; fputs($ofp, $line); } fclose($ifp); } fclose($ofp); if (file_exists($PageIndexFile)) unlink($PageIndexFile); rename("$PageIndexFile,new", $PageIndexFile); fixperms($PageIndexFile); StopWatch("PageIndexUpdate end ($updatecount updated)"); ignore_user_abort($abort); }
function HandlePostUpload($pagename, $auth = 'upload') { global $UploadVerifyFunction, $UploadFileFmt, $LastModFile, $EnableUploadVersions, $Now, $RecentUploadsFmt, $FmtV, $NotifyItemUploadFmt, $NotifyItemFmt, $IsUploadPosted, $UploadRedirectFunction; UploadAuth($pagename, $auth); $uploadfile = $_FILES['uploadfile']; $upname = $_REQUEST['upname']; if ($upname=='') $upname=$uploadfile['name']; $upname = MakeUploadName($pagename,$upname); if (!function_exists($UploadVerifyFunction)) Abort('?no UploadVerifyFunction available'); $filepath = FmtPageName("$UploadFileFmt/$upname",$pagename); $result = $UploadVerifyFunction($pagename,$uploadfile,$filepath); if ($result=='') { $filedir = preg_replace('#/[^/]*$#','',$filepath); mkdirp($filedir); if (IsEnabled($EnableUploadVersions, 0)) @rename($filepath, "$filepath,$Now"); if (!move_uploaded_file($uploadfile['tmp_name'],$filepath)) { Abort("?cannot move uploaded file to $filepath"); return; } fixperms($filepath,0444); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $result = "upresult=success"; $FmtV['$upname'] = $upname; $FmtV['$upsize'] = $uploadfile['size']; if (IsEnabled($RecentUploadsFmt, 0)) { PostRecentChanges($pagename, '', '', $RecentUploadsFmt); } if (IsEnabled($NotifyItemUploadFmt, 0) && function_exists('NotifyUpdate')) { $NotifyItemFmt = $NotifyItemUploadFmt; $IsUploadPosted = 1; register_shutdown_function('NotifyUpdate', $pagename, getcwd()); } } SDV($UploadRedirectFunction, 'Redirect'); $UploadRedirectFunction($pagename,"{\$PageUrl}?action=upload&uprname=$upname&$result"); }
function HandlePostUpload($pagename) { global $UploadVerifyFunction, $UploadFileFmt, $LastModFile; $page = RetrieveAuthPage($pagename, 'upload'); if (!$page) { Abort("?cannot upload to {$pagename}"); } $uploadfile = $_FILES['uploadfile']; $upname = $_REQUEST['upname']; if ($upname == '') { $upname = $uploadfile['name']; } $upname = MakeUploadName($pagename, $upname); if (!function_exists($UploadVerifyFunction)) { Abort('?no UploadVerifyFunction available'); } $filepath = FmtPageName("{$UploadFileFmt}/{$upname}", $pagename); $result = $UploadVerifyFunction($pagename, $uploadfile, $filepath); if ($result == '') { $filedir = preg_replace('#/[^/]*$#', '', $filepath); mkdirp($filedir); if (!move_uploaded_file($uploadfile['tmp_name'], $filepath)) { Abort("?cannot move uploaded file to {$filepath}"); return; } fixperms($filepath); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $result = "upresult=success"; } Redirect($pagename, "\$PageUrl?action=upload&upname={$upname}&{$result}"); }
function PageIndexUpdate($pagelist, $dir = '') { global $PageIndexFile, $PageIndexTime, $Now; $abort = ignore_user_abort(true); if ($dir) { chdir($dir); } SDV($PageIndexTime, 10); if (!$pagelist || !$PageIndexFile) { return; } $c = count($pagelist); StopWatch("PageIndexUpdate begin ({$c} pages to update)"); $pagelist = (array) $pagelist; $timeout = time() + $PageIndexTime; $cmpfn = create_function('$a,$b', 'return strlen($b)-strlen($a);'); Lock(2); $ofp = fopen("{$PageIndexFile},new", 'w'); foreach ($pagelist as $pn) { if (time() > $timeout) { break; } $page = ReadPage($pn, READPAGE_CURRENT); if ($page) { $targets = str_replace(',', ' ', @$page['targets']); $terms = PageIndexTerms(array(@$page['text'], $targets, $pn)); usort($terms, $cmpfn); $x = ''; foreach ($terms as $t) { if (strpos($x, $t) === false) { $x .= " {$t}"; } } fputs($ofp, "{$pn}:{$Now}: {$targets} :{$x}\n"); } $updated[$pn]++; } $ifp = @fopen($PageIndexFile, 'r'); if ($ifp) { while (!feof($ifp)) { $line = fgets($ifp, 4096); while (substr($line, -1, 1) != "\n" && !feof($ifp)) { $line .= fgets($ifp, 4096); } $i = strpos($line, ':'); if ($i === false) { continue; } $n = substr($line, 0, $i); if (@$updated[$n]) { continue; } fputs($ofp, $line); } fclose($ifp); } fclose($ofp); if (file_exists($PageIndexFile)) { unlink($PageIndexFile); } rename("{$PageIndexFile},new", $PageIndexFile); fixperms($PageIndexFile); $c = count($updated); StopWatch("PageIndexUpdate end ({$c} updated)"); ignore_user_abort($abort); }
/** * Handle the .draw file format */ function HandlePostDrawing_draw($pagename) { global $UploadVerifyFunction, $UploadFileFmt, $LastModFile, $Now; global $RecentChangesFmt, $IsPagePosted, $EnableDrawingRecentChanges; $page = RetrieveAuthPage($pagename, 'upload'); if (!$page) { Abort("?cannot upload to {$pagename}"); } $uploadImage = $_FILES['uploadImage']; $uploadDrawing = $_FILES['uploadDrawing']; $uploadMap = $_FILES['uploadMap']; $drawingBaseTime = $_POST['drawingbasetime']; // The time the user began editing this drawing. $imageupname = $uploadImage['name']; $drawingupname = $uploadDrawing['name']; $mapupname = $uploadMap['name']; $imageupname = MakeUploadName($pagename, $imageupname); $drawingupname = MakeUploadName($pagename, $drawingupname); $mapupname = MakeUploadName($pagename, $mapupname); $imageFilePath = FmtPageName("{$UploadFileFmt}/{$imageupname}", $pagename); $drawingFilePath = FmtPageName("{$UploadFileFmt}/{$drawingupname}", $pagename); $mapFilePath = FmtPageName("{$UploadFileFmt}/{$mapupname}", $pagename); if (file_exists($drawingFilePath)) { // Only worth checking timestamps if a drawing actually currently exists! if (filemtime($drawingFilePath) > $drawingBaseTime) { // Assign a new timestamp to the client... hopefully this time they'll be ok... header("PmWikiDraw-DrawingChanged: {$Now}"); exit; } } // If we've got to here then we can assume its safe to overwrite the current file // Note: we should do the history archival/recent changes stuff here. if ($EnableDrawingRecentChanges == true && isset($_POST['drawingname'])) { $imageModified = $_POST['drawingname']; $RecentChangesFmt = array('Main.AllRecentChanges' => '* [[$Group/$Name]] Drawing - ' . $imageModified . ' modified . . . $CurrentTime', '$Group.RecentChanges' => '* [[$Group/$Name]] Drawing - ' . $imageModified . ' modified . . . $CurrentTime'); $IsPagePosted = true; $x = ""; $y = ""; PostRecentChanges($pagename, $x, $y); $IsPagePosted = false; } $filedir = preg_replace('#/[^/]*$#', '', $imageFilePath); mkdirp($filedir); if (!move_uploaded_file($uploadImage['tmp_name'], $imageFilePath)) { Abort("?cannot move uploaded image to {$imageFilePath}"); return; } fixperms($imageFilePath, 0444); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $filedir = preg_replace('#/[^/]*$#', '', $drawingFilePath); mkdirp($filedir); if (!move_uploaded_file($uploadDrawing['tmp_name'], $drawingFilePath)) { Abort("?cannot move uploaded drawing to {$drawingFilePath}"); return; } fixperms($drawingFilePath, 0444); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $filedir = preg_replace('#/[^/]*$#', '', $mapFilePath); mkdirp($filedir); if (!move_uploaded_file($uploadMap['tmp_name'], $mapFilePath)) { Abort("?cannot move uploaded map to {$mapFilePath}"); return; } fixperms($mapFilePath, 0444); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } // Sets the drawingBaseTime header for incremental save support. header("PmWikiDraw-DrawingBaseTime: " . filemtime($drawingFilePath)); exit; }
function write_cache_file($pagename, $imgdata) { global $Version; $cachefile = $this->cachefile($pagename); $dir = dirname($cachefile); mkdirp($dir); if (!file_exists("{$dir}/.htaccess") && ($fp = @fopen("{$dir}/.htaccess", 'w'))) { fwrite($fp, "Order Deny,Allow\nDeny from all\n"); fclose($fp); } $st = false; if ($cachefile && ($fp = fopen("{$cachefile},new", 'w'))) { $st = true; if ($imgdata) { $st = $st && fwrite($fp, "[image]\n"); foreach ($imgdata as $k => $v) { $st = $st && fwrite($fp, "{$k} = " . '"' . $v . '"' . "\n"); } $st = $st && fwrite($fp, "\n"); } $st = fclose($fp) && $st; if (file_exists($cachefile)) { $st = $st && unlink($cachefile); } $st = $st && rename("{$cachefile},new", $cachefile); } if ($st) { fixperms($cachefile); } else { Abort("Cannot write page {$pagename} cache to ({$cachefile})..."); } }
function write_xml($pagename, $page) { global $Now, $Version, $Charset; $page['name'] = $pagename; $page['time'] = $Now; $page['host'] = $_SERVER['REMOTE_ADDR']; $page['agent'] = @$_SERVER['HTTP_USER_AGENT']; $page['rev'] = @$page['rev'] + 1; unset($page['version']); unset($page['newline']); uksort($page, 'CmpPageAttr'); $s = false; $pagefile = $this->pagefile($pagename); $dir = dirname($pagefile); mkdirp($dir); if ($pagefile && ($fp = fopen("{$pagefile},new", "w"))) { $x = "<?xml version=\"1.0\" encoding=\"{$Charset}\"?>\n<page xmlns=\"http://www.pmwiki.org/cookbook/xmlpage\" version=\"{$Version}\">\n"; $s = true && fputs($fp, $x); $sz = strlen($x); foreach ($page as $k => $v) { if ($k > '' && $k[0] != '=') { $v = htmlspecialchars($v, ENT_NOQUOTES, $Charset); if (preg_match("/^([a-z]+)(?::(\\d+))(?::(\\d+):)?\$/", $k, $m)) { $p = empty($m[3]) ? "" : " prev=\"{$m[3]}\""; $x = "<{$m[1]} time=\"{$m[2]}\"{$p}>{$v}</{$m[1]}>\n"; } else { $x = "<{$k}>{$v}</{$k}>\n"; } $s = $s && fputs($fp, $x); $sz += strlen($x); } } $x = "</page>\n"; $s = $s && fputs($fp, $x); $sz += strlen($x); $s = fclose($fp) && $s; $s = $s && filesize("{$pagefile},new") > $sz * 0.95; if (file_exists($pagefile)) { $s = $s && unlink($pagefile); } $s = $s && rename("{$pagefile},new", $pagefile); } $s && fixperms($pagefile); if (!$s) { Abort("Cannot write page to {$pagename} ({$pagefile})...changes not saved"); } PCache($pagename, $page); }
function bi_HandleDelete($src, $auth = 'comment-edit') { #action=bi_del global $WikiDir, $LastModFile; $result = array('msg' => XL('Unable to perform delete operation.'), 'result' => 'error'); $entrytype = PageTextVar($src, 'entrytype'); if (($entrytype == 'comment' || $entrytype == 'blog') && (bi_Auth(($entrytype == 'comment' ? 'comment-edit' : 'blog-edit') . ' ' . $src) && RetrieveAuthPage($src, 'read', false, READPAGE_CURRENT))) { $WikiDir->delete($src); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $result = array('msg' => XL('Delete successful.'), 'result' => 'success'); } bi_Redirect(bi_Clean('mode', $_GET['bi_Mode']), $result); }
function HandlePostUpload($pagename, $auth = 'upload') { global $UploadVerifyFunction, $UploadFileFmt, $LastModFile, $EnableUploadVersions, $Now, $RecentUploadsFmt, $FmtV; UploadAuth($pagename, $auth); $uploadfile = $_FILES['uploadfile']; $upname = $_REQUEST['upname']; if ($upname == '') { $upname = $uploadfile['name']; } $upname = MakeUploadName($pagename, $upname); if (!function_exists($UploadVerifyFunction)) { Abort('?no UploadVerifyFunction available'); } $filepath = FmtPageName("{$UploadFileFmt}/{$upname}", $pagename); $result = $UploadVerifyFunction($pagename, $uploadfile, $filepath); if ($result == '') { $filedir = preg_replace('#/[^/]*$#', '', $filepath); mkdirp($filedir); if (IsEnabled($EnableUploadVersions, 0)) { @rename($filepath, "{$filepath},{$Now}"); } if (!move_uploaded_file($uploadfile['tmp_name'], $filepath)) { Abort("?cannot move uploaded file to {$filepath}"); return; } fixperms($filepath, 0444); if ($LastModFile) { touch($LastModFile); fixperms($LastModFile); } $result = "upresult=success"; if (IsEnabled($RecentUploadsFmt, 0)) { $FmtV['$upname'] = $upname; $FmtV['$upsize'] = $uploadfile['size']; PostRecentChanges($pagename, '', '', $RecentUploadsFmt); } } Redirect($pagename, "{\$PageUrl}?action=upload&uprname={$upname}&{$result}"); }