Seditio Source
Root |
./othercms/GetSimpleCMS-3.3.16/admin/inc/caching_functions.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('page-restored', 'create_pagesxml',array(true));        // Create pages.array if page undo
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);
    if(!
$data) return;
   
$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 (isset(
$pagesArray[(string)$page]) && 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('<?xml version="1.0" encoding="UTF-8"?><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);
       
        if(!
$data){
           
// handle corrupt page xml
           
debugLog("page $file is corrupt");
            continue;
        }
       
       
$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 = XMLsave($xml,$filem);
      }    
     
// debugLog("create_pagesxml saved: ". $success);
     
exec_action('pagecache-aftersave');
      return
$success;
  }
}
}



?>