2019-03-02 16:45:34 +00:00
|
|
|
<?php
|
2020-09-23 22:22:39 +00:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
|
2019-03-02 16:45:34 +00:00
|
|
|
|
|
|
|
//////////////////////////
|
|
|
|
///// Page id system /////
|
|
|
|
//////////////////////////
|
|
|
|
if(!file_exists($paths->idindex))
|
|
|
|
file_put_contents($paths->idindex, "{}");
|
|
|
|
$idindex_decode_start = microtime(true);
|
|
|
|
$idindex = json_decode(file_get_contents($paths->idindex));
|
|
|
|
$env->perfdata->idindex_decode_time = round((microtime(true) - $idindex_decode_start)*1000, 3);
|
|
|
|
/**
|
|
|
|
* Provides an interface to interact with page ids.
|
|
|
|
* @package core
|
|
|
|
*/
|
|
|
|
class ids
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Gets the page id associated with the given page name.
|
|
|
|
* If it doesn't exist in the id index, it will be added.
|
|
|
|
* @package core
|
|
|
|
* @param string $pagename The name of the page to fetch the id for.
|
|
|
|
* @return int The id for the specified page name.
|
|
|
|
*/
|
|
|
|
public static function getid($pagename)
|
|
|
|
{
|
|
|
|
global $idindex;
|
|
|
|
|
|
|
|
$pagename_norm = Normalizer::normalize($pagename, Normalizer::FORM_C);
|
|
|
|
foreach ($idindex as $id => $entry)
|
|
|
|
{
|
|
|
|
// We don't need to normalise here because we normralise when assigning ids
|
|
|
|
if($entry == $pagename_norm)
|
|
|
|
return $id;
|
|
|
|
}
|
|
|
|
|
|
|
|
// This pagename doesn't have an id - assign it one quick!
|
|
|
|
return self::assign($pagename);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the page name associated with the given page id.
|
|
|
|
* Be warned that if the id index is cleared (e.g. when the search index is
|
|
|
|
* rebuilt from scratch), the id associated with a page name may change!
|
|
|
|
* @package core
|
|
|
|
* @param int $id The id to fetch the page name for.
|
|
|
|
* @return string The page name currently associated with the specified id.
|
|
|
|
*/
|
|
|
|
public static function getpagename($id)
|
|
|
|
{
|
|
|
|
global $idindex;
|
|
|
|
|
|
|
|
if(!isset($idindex->$id))
|
|
|
|
return false;
|
|
|
|
else
|
|
|
|
return $idindex->$id;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Moves a page in the id index from $oldpagename to $newpagename.
|
|
|
|
* Note that this function doesn't perform any special checks to make sure
|
|
|
|
* that the destination name doesn't already exist.
|
|
|
|
* @package core
|
|
|
|
* @param string $oldpagename The old page name to move.
|
|
|
|
* @param string $newpagename The new page name to move the old page name to.
|
|
|
|
*/
|
|
|
|
public static function movepagename($oldpagename, $newpagename)
|
|
|
|
{
|
|
|
|
global $idindex, $paths;
|
|
|
|
|
|
|
|
$pageid = self::getid(Normalizer::normalize($oldpagename, Normalizer::FORM_C));
|
|
|
|
$idindex->$pageid = Normalizer::normalize($newpagename, Normalizer::FORM_C);
|
|
|
|
|
|
|
|
file_put_contents($paths->idindex, json_encode($idindex));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes the given page name from the id index.
|
|
|
|
* Note that this function doesn't handle multiple entries with the same
|
|
|
|
* name. Also note that it may get re-added during a search reindex if the
|
|
|
|
* page still exists.
|
|
|
|
* @package core
|
|
|
|
* @param string $pagename The page name to delete from the id index.
|
|
|
|
*/
|
|
|
|
public static function deletepagename($pagename)
|
|
|
|
{
|
|
|
|
global $idindex, $paths;
|
|
|
|
|
|
|
|
// Get the id of the specified page
|
|
|
|
$pageid = self::getid($pagename);
|
|
|
|
// Remove it from the pageindex
|
|
|
|
unset($idindex->$pageid);
|
|
|
|
// Save the id index
|
|
|
|
file_put_contents($paths->idindex, json_encode($idindex));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Clears the id index completely.
|
|
|
|
* Will break the inverted search index! Make sure you rebuild the search
|
|
|
|
* index (if the search module is installed, of course) if you want search
|
|
|
|
* to still work. Of course, note that will re-add all the pages to the id
|
|
|
|
* index.
|
|
|
|
* @package core
|
|
|
|
*/
|
|
|
|
public static function clear()
|
|
|
|
{
|
|
|
|
global $paths, $idindex;
|
|
|
|
// Delete the old id index
|
|
|
|
unlink($paths->idindex);
|
|
|
|
// Create the new id index
|
|
|
|
file_put_contents($paths->idindex, "{}");
|
|
|
|
// Reset the in-memory id index
|
|
|
|
$idindex = new stdClass();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Assigns an id to a pagename. Doesn't check to make sure that
|
|
|
|
* pagename doesn't already exist in the id index.
|
|
|
|
* @package core
|
|
|
|
* @param string $pagename The page name to assign an id to.
|
|
|
|
* @return int The id assigned to the specified page name.
|
|
|
|
*/
|
|
|
|
protected static function assign($pagename)
|
|
|
|
{
|
|
|
|
global $idindex, $paths;
|
|
|
|
|
|
|
|
$pagename = Normalizer::normalize($pagename, Normalizer::FORM_C);
|
|
|
|
|
|
|
|
$nextid = count(array_keys(get_object_vars($idindex)));
|
|
|
|
// Increment the generated id until it's unique
|
|
|
|
while(isset($idindex->nextid))
|
|
|
|
$nextid++;
|
|
|
|
|
|
|
|
// Update the id index
|
|
|
|
$idindex->$nextid = $pagename;
|
|
|
|
|
|
|
|
// Save the id index
|
|
|
|
file_put_contents($paths->idindex, json_encode($idindex));
|
|
|
|
|
|
|
|
return $nextid;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//////////////////////////
|
|
|
|
//////////////////////////
|