
LCARS is a template for the GetSimple CMS that mimics the monitor appearance in the television series Star Trek: The Next Generation
326 lines
8.8 KiB
PHP
326 lines
8.8 KiB
PHP
<?php if(!defined('IN_GS')){ die('you cannot load this page directly.'); }
|
|
/****************************************************
|
|
*
|
|
* @File: caching_functions.php
|
|
* @Package: GetSimple
|
|
* @since 3.1
|
|
* @Action: Plugin to create pages.xml and new functions
|
|
*
|
|
*****************************************************/
|
|
|
|
$pagesArray = array();
|
|
|
|
add_action('index-header','getPagesXmlValues',array(false)); // make $pagesArray available to the front
|
|
add_action('header', 'getPagesXmlValues',array(get_filename_id() != 'pages')); // make $pagesArray available to the back
|
|
add_action('page-delete', 'create_pagesxml',array(true)); // Create pages.array if page deleted
|
|
add_action('changedata-aftersave', 'create_pagesxml',array(true)); // Create pages.array if page is updated
|
|
|
|
/**
|
|
* Get Page Content
|
|
*
|
|
* Retrieve and display the content of the requested page.
|
|
* As the Content is not cahed the file is read in.
|
|
*
|
|
* @since 2.0
|
|
* @param $page - slug of the page to retrieve content
|
|
*
|
|
*/
|
|
function getPageContent($page,$field='content'){
|
|
$thisfile = file_get_contents(GSDATAPAGESPATH.$page.'.xml');
|
|
$data = simplexml_load_string($thisfile);
|
|
$content = stripslashes(htmlspecialchars_decode($data->$field, ENT_QUOTES));
|
|
if ($field=='content'){
|
|
$content = exec_filter('content',$content);
|
|
}
|
|
echo $content;
|
|
}
|
|
|
|
/**
|
|
* Get Page Field
|
|
*
|
|
* Retrieve and display the requested field from the given page.
|
|
*
|
|
* @since 3.1
|
|
* @param $page - slug of the page to retrieve content
|
|
* @param $field - the Field to display
|
|
*
|
|
*/
|
|
function getPageField($page,$field){
|
|
global $pagesArray;
|
|
if(!$pagesArray) getPagesXmlValues();
|
|
|
|
if ($field=="content"){
|
|
getPageContent($page);
|
|
} else {
|
|
if (array_key_exists($field, $pagesArray[(string)$page])){
|
|
echo strip_decode($pagesArray[(string)$page][(string)$field]);
|
|
} else {
|
|
getPageContent($page,$field);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Echo Page Field
|
|
*
|
|
* Retrieve and display the requested field from the given page.
|
|
*
|
|
* @since 3.1
|
|
* @param $page - slug of the page to retrieve content
|
|
* @param $field - the Field to display
|
|
*
|
|
*/
|
|
function echoPageField($page,$field){
|
|
getPageField($page,$field);
|
|
}
|
|
|
|
|
|
/**
|
|
* Return Page Content
|
|
*
|
|
* Return the content of the requested page.
|
|
* As the Content is not cahed the file is read in.
|
|
*
|
|
* @since 3.1
|
|
* @param $page - slug of the page to retrieve content
|
|
* @param $raw false - if true return raw xml
|
|
* @param $nofilter false - if true skip content filter execution
|
|
*
|
|
*/
|
|
function returnPageContent($page, $field='content', $raw = false, $nofilter = false){
|
|
$thisfile = file_get_contents(GSDATAPAGESPATH.$page.'.xml');
|
|
$data = simplexml_load_string($thisfile);
|
|
$content = $data->$field;
|
|
if(!$raw) $content = stripslashes(htmlspecialchars_decode($content, ENT_QUOTES));
|
|
if ($field=='content' and !$nofilter){
|
|
$content = exec_filter('content',$content);
|
|
}
|
|
return $content;
|
|
}
|
|
|
|
/**
|
|
* Get Page Field
|
|
*
|
|
* Retrieve and display the requested field from the given page.
|
|
* If the field is "content" it will call returnPageContent()
|
|
*
|
|
* @since 3.1
|
|
* @param $page - slug of the page to retrieve content
|
|
* @param $field - the Field to display
|
|
*
|
|
*/
|
|
function returnPageField($page,$field){
|
|
global $pagesArray;
|
|
if(!$pagesArray) getPagesXmlValues();
|
|
|
|
if ($field=="content"){
|
|
$ret=returnPageContent($page);
|
|
} else {
|
|
if (array_key_exists($field, $pagesArray[(string)$page])){
|
|
$ret=strip_decode(@$pagesArray[(string)$page][(string)$field]);
|
|
} else {
|
|
$ret = returnPageContent($page,$field);
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get Page Children
|
|
*
|
|
* Return an Array of pages that are children of the requested page/slug
|
|
*
|
|
* @since 3.1
|
|
* @param $page - slug of the page to retrieve content
|
|
*
|
|
* @returns - Array of slug names
|
|
*
|
|
*/
|
|
function getChildren($page){
|
|
global $pagesArray;
|
|
if(!$pagesArray) getPagesXmlValues();
|
|
$returnArray = array();
|
|
foreach ($pagesArray as $key => $value) {
|
|
if ($pagesArray[$key]['parent']==$page){
|
|
$returnArray[]=$key;
|
|
}
|
|
}
|
|
return $returnArray;
|
|
}
|
|
|
|
/**
|
|
* Get Page Children - returns multi fields
|
|
*
|
|
* Return an Array of pages that are children of the requested page/slug with optional fields.
|
|
*
|
|
* @since 3.1
|
|
* @param $page - slug of the page to retrieve content
|
|
* @param options - array of optional fields to return
|
|
*
|
|
* @returns - Array of slug names and optional fields.
|
|
*
|
|
*/
|
|
|
|
function getChildrenMulti($page,$options=array()){
|
|
global $pagesArray;
|
|
if(!$pagesArray) getPagesXmlValues();
|
|
$count=0;
|
|
$returnArray = array();
|
|
foreach ($pagesArray as $key => $value) {
|
|
if ($pagesArray[$key]['parent']==$page){
|
|
$returnArray[$count]=array();
|
|
$returnArray[$count]['url']=$key;
|
|
foreach ($options as $option){
|
|
$returnArray[$count][$option]=returnPageField($key,$option);
|
|
}
|
|
$count++;
|
|
}
|
|
}
|
|
return $returnArray;
|
|
}
|
|
|
|
/**
|
|
* Get Cached Pages XML Values
|
|
*
|
|
* Loads the Cached XML data into the Array $pagesArray
|
|
* If the file does not exist it is created the first time.
|
|
*
|
|
* @since 3.1
|
|
*
|
|
*/
|
|
function getPagesXmlValues($chkcount=false){
|
|
global $pagesArray;
|
|
|
|
// debugLog(__FUNCTION__.": chkcount - " .(int)$chkcount);
|
|
|
|
// if page cache not load load it
|
|
if(!$pagesArray){
|
|
$pagesArray=array();
|
|
$file=GSDATAOTHERPATH."pages.xml";
|
|
if (file_exists($file)){
|
|
// load the xml file and setup the array.
|
|
// debugLog(__FUNCTION__.": load pages.xml");
|
|
$thisfile = file_get_contents($file);
|
|
$data = simplexml_load_string($thisfile);
|
|
$pages = $data->item;
|
|
foreach ($pages as $page) {
|
|
$key=$page->url;
|
|
$pagesArray[(string)$key]=array();
|
|
foreach ($page->children() as $opt=>$val) {
|
|
$pagesArray[(string)$key][(string)$opt]=(string)$val;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// no page cache, regen and then load it
|
|
// debugLog(__FUNCTION__.": pages.xml not exist");
|
|
if(create_pagesxml(true)) getPagesXmlValues(false);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// if checking cache sync, regen cache if pages differ.
|
|
if ($chkcount==true){
|
|
$path = GSDATAPAGESPATH;
|
|
$dir_handle = @opendir($path) or die("getPageXmlValues: Unable to open $path");
|
|
$filenames = array();
|
|
while ($filename = readdir($dir_handle)) {
|
|
$ext = substr($filename, strrpos($filename, '.') + 1);
|
|
if ($ext=="xml"){
|
|
$filenames[] = $filename;
|
|
}
|
|
}
|
|
if (count($pagesArray)!=count($filenames)) {
|
|
// debugLog(__FUNCTION__.": count differs regen pages.xml");
|
|
if(create_pagesxml(true)) getPagesXmlValues(false);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Create the Cached Pages XML file
|
|
*
|
|
* Reads in each page of the site and creates a single XML file called
|
|
* data/pages/pages.array
|
|
*
|
|
* @since 3.1
|
|
*
|
|
*/
|
|
function create_pagesxml($flag){
|
|
global $pagesArray;
|
|
|
|
$success = '';
|
|
|
|
// debugLog("create_pagesxml: " . $flag);
|
|
if ((isset($_GET['upd']) && $_GET['upd']=="edit-success") || $flag===true || $flag=='true'){
|
|
$pagesArray = array();
|
|
// debugLog("create_pagesxml proceeding");
|
|
$menu = '';
|
|
$filem=GSDATAOTHERPATH."pages.xml";
|
|
|
|
$path = GSDATAPAGESPATH;
|
|
$dir_handle = @opendir($path) or die("create_pagesxml: Unable to open $path");
|
|
$filenames = array();
|
|
while ($filename = readdir($dir_handle)) {
|
|
$ext = substr($filename, strrpos($filename, '.') + 1);
|
|
if ($ext=="xml"){
|
|
$filenames[] = $filename;
|
|
}
|
|
}
|
|
|
|
$count=0;
|
|
$xml = @new SimpleXMLExtended('<channel></channel>');
|
|
if (count($filenames) != 0) {
|
|
foreach ($filenames as $file) {
|
|
if ($file == "." || $file == ".." || is_dir(GSDATAPAGESPATH.$file) || $file == ".htaccess" ) {
|
|
// not a page data file
|
|
} else {
|
|
$thisfile = file_get_contents($path.$file);
|
|
$data = simplexml_load_string($thisfile);
|
|
$count++;
|
|
$id=$data->url;
|
|
|
|
$pages = $xml->addChild('item');
|
|
// $pages->addChild('url', $id);
|
|
// $pagesArray[(string)$id]['url']=(string)$id;
|
|
|
|
foreach ($data->children() as $item => $itemdata) {
|
|
if ($item!="content"){
|
|
$note = $pages->addChild($item);
|
|
$note->addCData($itemdata);
|
|
$pagesArray[(string)$id][$item]=(string)$itemdata;
|
|
}
|
|
}
|
|
|
|
$note = $pages->addChild('slug');
|
|
$note->addCData($id);
|
|
$pagesArray[(string)$id]['slug']=(string)$id;
|
|
|
|
$pagesArray[(string)$id]['filename']=$file;
|
|
$note = $pages->addChild('filename');
|
|
$note->addCData($file);
|
|
|
|
} // else
|
|
} // end foreach
|
|
} // endif
|
|
if ($flag===true || $flag == 'true'){
|
|
|
|
// Plugin Authors should add custom fields etc.. here
|
|
$xml = exec_filter('pagecache',$xml);
|
|
|
|
// sanity check in case the filter does not come back properly or returns null
|
|
if($xml){
|
|
$success = $xml->asXML($filem);
|
|
}
|
|
// debugLog("create_pagesxml saved: ". $success);
|
|
exec_action('pagecache-aftersave');
|
|
return $success;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
?>
|