mirror of
https://github.com/sbrl/Pepperminty-Wiki.git
synced 2024-11-21 16:13:00 +00:00
Starbeamrainbowlabs
62a3ea9d1e
Note that this commit does **not** build. I'm in the middle of something - please build the previous commit instead until I'm finished :P
129 lines
4.6 KiB
PHP
129 lines
4.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Sort out the pageindex. Create it if it doesn't exist, and load + parse it
|
|
* if it does.
|
|
*/
|
|
if(!file_exists($paths->pageindex))
|
|
{
|
|
$glob_str = $env->storage_prefix . "*.md";
|
|
$existingpages = glob_recursive($glob_str);
|
|
$existingpages_count = count($existingpages);
|
|
// Debug statements. Uncomment when debugging the pageindex regenerator.
|
|
// var_dump($env->storage_prefix);
|
|
// var_dump($glob_str);
|
|
// var_dump($existingpages);
|
|
$pageindex = new stdClass();
|
|
// We use a for loop here because foreach doesn't loop over new values inserted
|
|
// while we were looping
|
|
for($i = 0; $i < $existingpages_count; $i++)
|
|
{
|
|
$pagefilename = $existingpages[$i];
|
|
|
|
// Create a new entry
|
|
$newentry = new stdClass();
|
|
$newentry->filename = substr( // Store the filename, whilst trimming the storage prefix
|
|
$pagefilename,
|
|
mb_strlen(preg_replace("/^\.\//iu", "", $env->storage_prefix)) // glob_recursive trim the ./ from returned filenames , so we need to as well
|
|
);
|
|
// Remove the `./` from the beginning if it's still hanging around
|
|
if(substr($newentry->filename, 0, 2) == "./")
|
|
$newentry->filename = substr($newentry->filename, 2);
|
|
$newentry->size = filesize($pagefilename); // Store the page size
|
|
$newentry->lastmodified = filemtime($pagefilename); // Store the date last modified
|
|
// Todo find a way to keep the last editor independent of the page index
|
|
$newentry->lasteditor = "unknown"; // Set the editor to "unknown"
|
|
|
|
|
|
|
|
// POTENTIAL BUG: If $env->storage_prefix is not ., then this we need to be more intelligent here
|
|
|
|
|
|
// Extract the name of the (sub)page without the ".md"
|
|
$pagekey = mb_substr($newentry->filename, 0, -3);
|
|
|
|
if(file_exists($env->storage_prefix . $pagekey) && // If it exists...
|
|
!is_dir($env->storage_prefix . $pagekey)) // ...and isn't a directory
|
|
{
|
|
// This page (potentially) has an associated file!
|
|
// Let's investigate.
|
|
|
|
// Blindly add the file to the pageindex for now.
|
|
// Future We might want to do a security check on the file later on.
|
|
// File a bug if you think we should do this.
|
|
$newentry->uploadedfile = true; // Yes this page does have an uploaded file associated with it
|
|
$newentry->uploadedfilepath = $pagekey; // It's stored here
|
|
|
|
// Work out what kind of file it really is
|
|
$mimechecker = finfo_open(FILEINFO_MIME_TYPE);
|
|
$newentry->uploadedfilemime = finfo_file($mimechecker, $env->storage_prefix . $pagekey);
|
|
}
|
|
|
|
// Debug statements. Uncomment when debugging the pageindex regenerator.
|
|
// echo("pagekey: ");
|
|
// var_dump($pagekey);
|
|
// echo("newentry: ");
|
|
// var_dump($newentry);
|
|
|
|
// Subpage parent checker
|
|
if(strpos($pagekey, "/") !== false)
|
|
{
|
|
// We have a sub page people
|
|
// Work out what our direct parent's key must be in order to check to
|
|
// make sure that it actually exists. If it doesn't, then we need to
|
|
// create it.
|
|
$subpage_parent_key = substr($pagekey, 0, strrpos($pagekey, "/"));
|
|
$subpage_parent_filename = "$env->storage_prefix$subpage_parent_key.md";
|
|
if(array_search($subpage_parent_filename, $existingpages) === false)
|
|
{
|
|
// Our parent page doesn't actually exist - create it
|
|
touch($subpage_parent_filename, 0);
|
|
// Furthermore, we should add this page to the list of existing pages
|
|
// in order for it to be indexed
|
|
$existingpages[] = $subpage_parent_filename;
|
|
}
|
|
}
|
|
|
|
if(function_exists("history_add_revision") && !file_exists("{$pagefilename}.r0")) { // Can't use module_exists - too early
|
|
copy($pagefilename, "{$pagefilename}.r0");
|
|
$newentry->history = [ (object) [
|
|
"type" => "edit",
|
|
"rid" => 0,
|
|
"timestamp" => $newentry->lastmodified,
|
|
"filename" => "{$pagefilename}.r0",
|
|
"newsize" => $newentry->size,
|
|
"sizediff" => $newentry->size,
|
|
"editor" => "unknown"
|
|
] ];
|
|
}
|
|
|
|
// Store the new entry in the new page index
|
|
$pageindex->$pagekey = $newentry;
|
|
}
|
|
|
|
if(function_exists("history_add_revision")) {
|
|
$history_revs = glob_recursive($env->storage_prefix . "*.r*");
|
|
foreach($history_revs as $filename) {
|
|
preg_match("/[0-9]+$/", "Main Page.md.r0", $revid);
|
|
if(count($revid) === 0) continue;
|
|
$revid = intval($revid[0]);
|
|
|
|
// TODO: Extract the pagename here (maybe a function is worth implementing if we haven't already?)
|
|
|
|
if($revid == 0 && ) {
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
save_pageindex();
|
|
unset($existingpages);
|
|
}
|
|
else
|
|
{
|
|
$pageindex_read_start = microtime(true);
|
|
$pageindex = json_decode(file_get_contents($paths->pageindex));
|
|
$env->perfdata->pageindex_decode_time = round((microtime(true) - $pageindex_read_start)*1000, 3);
|
|
header("x-pageindex-decode-time: " . $env->perfdata->pageindex_decode_time . "ms");
|
|
unset($pageindex_read_start);
|
|
}
|