Вход Регистрация
Файл: admin/inc/caching_functions.php
Строк: 317
<?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->$fieldENT_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(!
$pagesArraygetPagesXmlValues();    
    
    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($contentENT_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(!
$pagesArraygetPagesXmlValues();    

    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(!
$pagesArraygetPagesXmlValues();        
    
$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(!
$pagesArraygetPagesXmlValues();        
    
$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($filenamestrrpos($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($filenamestrrpos($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);
        
        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 $xml->asXML($filem);
      }    
      
// debugLog("create_pagesxml saved: ". $success);
      
exec_action('pagecache-aftersave');
      return 
$success;
  }
}
}



?>
Онлайн: 2
Реклама