[code.view]

[top] / php / GetSimpleCMS-3.2.3 / admin / inc / template_functions.php

     <?php if(!defined('IN_GS')){ die('you cannot load this page directly.'); }
     /**
      * Template Functions
      *
      * These functions are used within the back-end of a GetSimple installation
      *
      * @package GetSimple
      * @subpackage Zip
      */ 
     	
     	
     /**
      * Get Template
      *
      * @since 1.0
      *
      * @param string $name Name of template file to get
      * @param string $title Title to place on page
      * @return string
      */
     function get_template($name, $title='** Change Me - Default Page Title **') {
     	ob_start();
     	$file = "template/" . $name . ".php";
     	include($file);
     	$template = ob_get_contents();
     	ob_end_clean(); 
     	echo $template;
     }
     
     /**
      * Filename ID
      *
      * Generates HTML code to place on the body tag of a page
      *
      * @since 1.0
      * @uses myself
      *
      * @return string
      */
     function filename_id() {
     	$path = myself(FALSE);
     	$file = basename($path,".php");	
     	echo "id=\"". $file ."\"";	
     }
     
     /**
      * Get Filename ID
      *
      * Returns the filename of the current file, minus .php
      *
      * @since 1.0
      * @uses myself
      *
      * @return string
      */
     function get_filename_id() {
     	$path = myself(FALSE);
     	$file = basename($path,".php");	
     	return $file;	
     }
     
     /**
      * Delete Pages File
      *
      * Deletes pages data file afer making backup
      *
      * @since 1.0
      * @uses GSBACKUPSPATH
      * @uses GSDATAPAGESPATH
      *
      * @param string $id File ID to delete
      */
     function delete_file($id) {
     
     	$bakfilepath = GSBACKUPSPATH . 'pages' . DIRECTORY_SEPARATOR;
     	$bakfile = $bakfilepath . $id .'.bak.xml';
     
     	$filepath = GSDATAPAGESPATH;
     	$file = $filepath . $id .'.xml';
     
     	if(filepath_is_safe($file,$filepath)){
     		$successbak = copy($file, $bakfile);
     		$successdel = unlink($file);
     		if($successdel && $successbak) return 'success';
     	}
     	return 'error';
     }
     
     /**
      * Check Permissions
      *
      * Returns the CHMOD value of a particular file or path
      *
      * @since 2.0
      *
      * @param string $path File and/or path
      */
     function check_perms($path) { 
       clearstatcache(); 
       $configmod = substr(sprintf('%o', fileperms($path)), -4);  
     	return $configmod;
     } 
     
     /**
      * Delete Zip File
      *
      * @since 1.0
      * @uses GSBACKUPSPATH
      *
      * @param string $id Zip filename to delete
      * @return string
      */
     function delete_zip($id) { 
     	$filepath = GSBACKUPSPATH . 'zip' . DIRECTORY_SEPARATOR;
     	$file = $filepath . $id;
     
     	if(filepath_is_safe($file,$filepath)){
     		$success =  unlink($file);
     		if($success) return 'success';
     	}
     	return 'error';
     } 
     
     /**
      * Delete Uploaded File
      *
      * @since 1.0
      * @uses GSTHUMBNAILPATH
      * @uses GSDATAUPLOADPATH
      *
      * @param string $id Uploaded filename to delete
      * @param string $path Path to uploaded file folder
      * @return string
      */
     function delete_upload($id, $path = "") { 
     	$filepath = GSDATAUPLOADPATH . $path;
     	$file =  $filepath . $id;
     
     	if(path_is_safe($filepath,GSDATAUPLOADPATH) && filepath_is_safe($file,$filepath)){
     		$status = unlink(GSDATAUPLOADPATH . $path . $id);
     		if (file_exists(GSTHUMBNAILPATH.$path."thumbnail.". $id)) {
     			unlink(GSTHUMBNAILPATH.$path."thumbnail.". $id);
     		}
     		if (file_exists(GSTHUMBNAILPATH.$path."thumbsm.". $id)) {
     			unlink(GSTHUMBNAILPATH.$path."thumbsm.". $id);
     		}
     		if($status) return 'success';
     	}	
     
     	return 'error';
     } 
     
     /**
      * Delete Cache Files
      *
      * @since 3.1.3
      * @uses GSCACHEPATH
      *
      * @returns deleted count on success, null if there are any errors
      */
     function delete_cache() { 
     	$cachepath = GSCACHEPATH;
     	
     	$cnt = 0;	
     	$success = null;
     	
     	foreach(glob($cachepath.'*.txt') as $file){
     		if(unlink($file)) $cnt++;
     		else $success = false;
     	}	
     
     	if($success == false) return null;
     	return $cnt;
     } 
     
     /**
      * Delete Pages Backup File
      *
      * @since 1.0
      * @uses GSBACKUPSPATH
      *
      * @param string $id File ID to delete
      * @return string
      */
     function delete_bak($id) { 
     	unlink(GSBACKUPSPATH."pages/". $id .".bak.xml");
     	return 'success';
     } 
     
     /**
      * Restore Pages Backup File
      *
      * @since 1.0
      * @uses GSBACKUPSPATH
      * @uses GSDATAPAGESPATH
      *
      * @param string $id File ID to restore
      */
     function restore_bak($id) { 
     	$file = GSBACKUPSPATH."pages/". $id .".bak.xml";
     	$newfile = GSDATAPAGESPATH . $id .".xml";
     	$tmpfile = GSBACKUPSPATH."pages/". $id .".tmp.xml";
     	if ( !file_exists($newfile) ) { 
     		copy($file, $newfile);
     		unlink($file);
     	} else {
     		copy($file, $tmpfile);
     		copy($newfile, $file);
     		copy($tmpfile, $newfile);
     		unlink($tmpfile);
     	}
     	generate_sitemap();
     } 
     
     /**
      * Create Random Password
      *
      * @since 1.0
      *
      * @return string
      */
     function createRandomPassword() {
         $chars = "Ayz23mFGHBxPQefgnopRScdqrTU4CXYZabstuDEhijkIJKMNVWvw56789";
         srand((double)microtime()*1000000);
         $i = 0;
         $pass = '' ;
         while ($i <= 5) {
             $num = rand() % 33;
             $tmp = substr($chars, $num, 1);
             $pass = $pass . $tmp;
             $i++;
         }
         return $pass;
     }
     
     /**
      * File Type Category
      *
      * Returns the category of an file based on its extension
      *
      * @since 1.0
      * @uses i18n_r
      *
      * @param string $ext
      * @return string
      */
     function get_FileType($ext) {
     
     	$ext = lowercase($ext);
     	if ($ext == 'jpg' || $ext == 'jpeg' || $ext == 'pct' || $ext == 'gif' || $ext == 'bmp' || $ext == 'png' ) {
     		return i18n_r('IMAGES') .' Images';
     	} elseif ( $ext == 'zip' || $ext == 'gz' || $ext == 'rar' || $ext == 'tar' || $ext == 'z' || $ext == '7z' || $ext == 'pkg' ) {
     		return i18n_r('FTYPE_COMPRESSED');
     	} elseif ( $ext == 'ai' || $ext == 'psd' || $ext == 'eps' || $ext == 'dwg' || $ext == 'tif' || $ext == 'tiff' || $ext == 'svg' ) {
     		return i18n_r('FTYPE_VECTOR');
     	} elseif ( $ext == 'swf' || $ext == 'fla' ) {
     		return i18n_r('FTYPE_FLASH');	
     	} elseif ( $ext == 'mov' || $ext == 'mpg' || $ext == 'avi' || $ext == 'mpeg' || $ext == 'rm' || $ext == 'wmv' ) {
     		return i18n_r('FTYPE_VIDEO');
     	} elseif ( $ext == 'mp3' || $ext == 'wav' || $ext == 'wma' || $ext == 'midi' || $ext == 'mid' || $ext == 'm3u' || $ext == 'ra' || $ext == 'aif' ) {
     		return i18n_r('FTYPE_AUDIO');
     	} elseif ( $ext == 'php' || $ext == 'phps' || $ext == 'asp' || $ext == 'xml' || $ext == 'js' || $ext == 'jsp' || $ext == 'sql' || $ext == 'css' || $ext == 'htm' || $ext == 'html' || $ext == 'xhtml' || $ext == 'shtml' ) {
     		return i18n_r('FTYPE_WEB');
     	} elseif ( $ext == 'mdb' || $ext == 'accdb' || $ext == 'pdf' || $ext == 'xls' || $ext == 'xlsx' || $ext == 'csv' || $ext == 'tsv' || $ext == 'ppt' || $ext == 'pps' || $ext == 'pptx' || $ext == 'txt' || $ext == 'log' || $ext == 'dat' || $ext == 'text' || $ext == 'doc' || $ext == 'docx' || $ext == 'rtf' || $ext == 'wks' ) {
     		return i18n_r('FTYPE_DOCUMENTS');
     	} elseif ( $ext == 'exe' || $ext == 'msi' || $ext == 'bat' || $ext == 'download' || $ext == 'dll' || $ext == 'ini' || $ext == 'cab' || $ext == 'cfg' || $ext == 'reg' || $ext == 'cmd' || $ext == 'sys' ) {
     		return i18n_r('FTYPE_SYSTEM');
     	} else {
     		return i18n_r('FTYPE_MISC');
     	}
     }
     
     /**
      * Create Backup Pages File
      *
      * @since 1.0
      * @uses tsl
      *
      * @param string $file
      * @param string $filepath
      * @param string $bakpath
      * @return bool
      */
     function createBak($file, $filepath, $bakpath) {
     	$bakfile = '';
     	if ( file_exists(tsl($filepath) . $file) ) {
     		$bakfile = $file .".bak";
     		copy($filepath . $file, $bakpath . $bakfile);
     	}
     	
     	if ( file_exists($bakfile) ) {
     		return true;
     	} else {
     		return false;
     	} 
     }
     
     /**
      * ISO Timestamp
      *
      * @since 1.0
      *
      * @param string $dateTime
      * @return string
      */
     function makeIso8601TimeStamp($dateTime) {
         if (!$dateTime) {
             $dateTime = date('Y-m-d H:i:s');
         }
         if (is_numeric(substr($dateTime, 11, 1))) {
             $isoTS = substr($dateTime, 0, 10) ."T".substr($dateTime, 11, 8) ."+00:00";
         } else {
             $isoTS = substr($dateTime, 0, 10);
         }
         return $isoTS;
     }
     
     /**
      * Ping Sitemaps
      *
      * @since 1.0
      *
      * @param string $url_xml XML sitemap
      * @return bool
      */
     function pingGoogleSitemaps($url_xml) {
        $status = 0;
        $google = 'www.google.com';
        $yahoo  = 'search.yahooapis.com';
        $bing 	 = 'www.bing.com';
        $ask 	 = 'submissions.ask.com';
        if( $fp=@fsockopen($google, 80) ) {
           $req =  'GET /webmasters/sitemaps/ping?sitemap=' .
                   urlencode( $url_xml ) . " HTTP/1.1\r\n" .
                   "Host: $google\r\n" .
                   "User-Agent: Mozilla/5.0 (compatible; " .
                   PHP_OS . ") PHP/" . PHP_VERSION . "\r\n" .
                   "Connection: Close\r\n\r\n";
           fwrite( $fp, $req );
           while( !feof($fp) ) {
              if( @preg_match('~^HTTP/\d\.\d (\d+)~i', fgets($fp, 128), $m) ) {
                 $status = intval( $m[1] );
                 break;
              }
           }
           fclose( $fp );
        }
        
        if( $fp=@fsockopen($yahoo, 80) ) {
           $req =  'GET /SiteExplorerService/V1/updateNotification?appid=simpleManage&url=' .
                   urlencode( $url_xml ) . " HTTP/1.1\r\n" .
                   "Host: $yahoo\r\n" .
                   "User-Agent: Mozilla/5.0 (compatible; " .
                   PHP_OS . ") PHP/" . PHP_VERSION . "\r\n" .
                   "Connection: Close\r\n\r\n";
           fwrite( $fp, $req );
           while( !feof($fp) ) {
              if( @preg_match('~^HTTP/\d\.\d (\d+)~i', fgets($fp, 128), $m) ) {
                 $status = intval( $m[1] );
                 break;
              }
           }
           fclose( $fp );
        }
        
        if( $fp=@fsockopen($bing, 80) ) {
           $req =  'GET /webmaster/ping.aspx?sitemap=' .
                   urlencode( $url_xml ) . " HTTP/1.1\r\n" .
                   "Host: $bing\r\n" .
                   "User-Agent: Mozilla/5.0 (compatible; " .
                   PHP_OS . ") PHP/" . PHP_VERSION . "\r\n" .
                   "Connection: Close\r\n\r\n";
           fwrite( $fp, $req );
           while( !feof($fp) ) {
              if( @preg_match('~^HTTP/\d\.\d (\d+)~i', fgets($fp, 128), $m) ) {
                 $status = intval( $m[1] );
                 break;
              }
           }
           fclose( $fp );
        }
        
        if( $fp=@fsockopen($ask, 80) ) {
           $req =  'GET /ping?sitemap=' .
                   urlencode( $url_xml ) . " HTTP/1.1\r\n" .
                   "Host: $ask\r\n" .
                   "User-Agent: Mozilla/5.0 (compatible; " .
                   PHP_OS . ") PHP/" . PHP_VERSION . "\r\n" .
                   "Connection: Close\r\n\r\n";
           fwrite( $fp, $req );
           while( !feof($fp) ) {
              if( @preg_match('~^HTTP/\d\.\d (\d+)~i', fgets($fp, 128), $m) ) {
                 $status = intval( $m[1] );
                 break;
              }
           }
           fclose( $fp );
        }
        
        return( $status );
     }
     
     /**
      * Undo
      *
      * @since 1.0
      * @uses tsl
      *
      * @param string $file
      * @param string $filepath
      * @param string $bakpath
      * @return bool
      */
     function undo($file, $filepath, $bakpath) {
     	$old_file = $filepath . $file;
     	$new_file = tsl($bakpath) . $file .".bak";
     	$tmp_file = tsl($bakpath) . $file .".tmp";
     	copy($old_file, $tmp_file);
     	copy($new_file, $old_file);
     	copy($tmp_file, $new_file);
     	unlink($tmp_file);
     	
     	if (file_exists($tmp_file)) {
     		return false;
     	} else {
     		return true;
     	}
     }
     
     /**
      * File Size
      *
      * @since 1.0
      *
      * @param string $s 
      * @return string
      */
     function fSize($s) {
     	$size = '<span>'. ceil(round(($s / 1024), 1)) .'</span> KB'; // in kb
     	if ($s >= "1000000") {
     		$size = '<span>'. round(($s / 1048576), 1) .'</span> MB'; // in mb
     	}
     	if ($s <= "999") {
     		$size = '<span>< 1</span> KB'; // in kb
     	}
     	
     	return $size;
     }
     
     /**
      * Validate Email Address
      *
      * @since 1.0
      *
      * @param string $email 
      * @return bool
      */
     function check_email_address($email) {
         if (function_exists('filter_var')) {
         	// PHP 5.2 or higher
         	return (!filter_var((string)$email,FILTER_VALIDATE_EMAIL)) ? false: true;
         } else {
         	// old way
     	    if (!preg_match("/[^@]{1,64}@[^@]{1,255}$/", $email)) {
     	        return false;
     	    }
     	    $email_array = explode("@", $email);
     	    $local_array = explode(".", $email_array[0]);
     	    for ($i = 0; $i < sizeof($local_array); $i++) {
     	        if (!preg_match("/(([A-Za-z0-9!#$%&'*+\/\=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/\=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
     	            return false;
     	        }
     	    }
     	    if (!preg_match("/\[?[0-9\.]+\]?$/", $email_array[1])) {
     	        $domain_array = explode(".", $email_array[1]);
     	        if (sizeof($domain_array) < 2) {
     	            return false; // Not enough parts to domain
     	        }
     	        for ($i = 0; $i < sizeof($domain_array); $i++) {
     	            if (!preg_match("/(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
     	                return false;
     	            }
     	        }
     	    }
     	    return true;
     	  }
     }
     
     /**
      * Do Regex
      *
      * @since 1.0
      *
      * @param string $text Text to perform regex on
      * @param string $regex Regex format to use
      * @return bool
      */
     function do_reg($text, $regex) {
     	if (preg_match($regex, $text)) {
     		return true;
     	} else {
     		return false;
     	}
     }
     
     /**
      * Validate XML
      *
      * @since 1.0
      * @uses i18n_r
      * @uses getXML
      *
      * @param string $file File to validate
      * @return string
      */
     function valid_xml($file) {
     	$xmlv = getXML($file);
     	global $i18n;
     	if ($xmlv) {
     		return '<span class="OKmsg" >'.i18n_r('XML_VALID').' - '.i18n_r('OK').'</span>';
     	} else {
     		return '<span class="ERRmsg" >'.i18n_r('XML_INVALID').' - '.i18n_r('ERROR').'!</span>';
     	}
     }
     
     /**
      * Generate Salt
      *
      * Returns a new unique salt
      * @updated 3.0
      *
      * @return string
      */
     function generate_salt() {
     	return substr(sha1(mt_rand()),0,22);
     }
     
     /**
      * Get Admin Path
      *
      * Gets the path of the admin directory
      *
      * @since 1.0
      * @uses $GSADMIN
      * @uses GSROOTPATH
      * @uses tsl
      *
      * @return string
      */
     function get_admin_path() {
     	global $GSADMIN;
     	return tsl(GSROOTPATH . $GSADMIN);
     }
     
     /**
      * Get Root Install Path
      *
      * Gets the path of the root installation directory
      *
      * @since 1.0
      *
      * @return string
      */
     function get_root_path() {
       $pos = strrpos(dirname(__FILE__),DIRECTORY_SEPARATOR.'inc');
       $adm = substr(dirname(__FILE__), 0, $pos);
       $pos2 = strrpos($adm,DIRECTORY_SEPARATOR);
       return tsl(substr(__FILE__, 0, $pos2));
     }
     
     
     
     /**
      * Check Current Menu
      *
      * Checks to see if a menu item matches the current page
      *
      * @since 1.0
      *
      * @param string $text
      * @return string
      */
     function check_menu($text) {
     	if(get_filename_id()===$text){
     		echo 'class="current"';
     	}
     }
     
     /**
      * Password Hashing
      *
      * Default function to create a hashed password for GetSimple
      *
      * @since 2.0
      * @uses GSLOGINSALT
      *
      * @param string $p 
      * @return string
      */
     function passhash($p) {
     	if(defined('GSLOGINSALT') && GSLOGINSALT != '') { 
     		$logsalt = sha1(GSLOGINSALT);
     	} else { 
     		$logsalt = null; 
     	}
     	
     	return sha1($p . $logsalt);
     }
     
     /**
      * Get Available Pages
      *
      * Lists all available pages for plugin/api use
      *
      * @since 2.0
      * @uses GSDATAPAGESPATH
      * @uses find_url
      * @uses getXML
      * @uses subval_sort
      *
      * @return array|string Type 'string' in this case will be XML 
      */
     function get_available_pages() {
         $menu_extract = '';
         
         $path = GSDATAPAGESPATH;
         $dir_handle = @opendir($path) or die("Unable to open $path");
         $filenames = array();
         while ($filename = readdir($dir_handle)) {
             $filenames[] = $filename;
         }
         closedir($dir_handle);
         
         $count="0";
         $pagesArray = array();
         if (count($filenames) != 0) {
             foreach ($filenames as $file) {
                 if ($file == "." || $file == ".." || is_dir($path . $file) || $file == ".htaccess"  ) {
                     // not a page data file
                 } else {
     								$data = getXML($path . $file);
                     if ($data->private != 'Y') {
                         $pagesArray[$count]['menuStatus'] = $data->menuStatus;
                         $pagesArray[$count]['menuOrder'] = $data->menuOrder;
                         $pagesArray[$count]['menu'] = strip_decode($data->menu);
                         $pagesArray[$count]['parent'] = $data->parent;
                         $pagesArray[$count]['title'] = strip_decode($data->title);
                         $pagesArray[$count]['url'] = $data->url;
                         $pagesArray[$count]['private'] = $data->private;
                         $pagesArray[$count]['pubDate'] = $data->pubDate;
                         $count++;
                     }
                 }
             }
         }
         
         $pagesSorted = subval_sort($pagesArray,'title');
         if (count($pagesSorted) != 0) { 
           $count = 0;
           foreach ($pagesSorted as $page) {
             $text = (string)$page['menu'];
             $pri = (string)$page['menuOrder'];
             $parent = (string)$page['parent'];
             $title = (string)$page['title'];
             $slug = (string)$page['url'];
             $menuStatus = (string)$page['menuStatus'];
             $private = (string)$page['private'];
     				$pubDate = (string)$page['pubDate'];
             
             $url = find_url($slug,$parent);
             
             $specific = array("slug"=>$slug,"url"=>$url,"parent_slug"=>$parent,"title"=>$title,"menu_priority"=>$pri,"menu_text"=>$text,"menu_status"=>$menuStatus,"private"=>$private,"pub_date"=>$pubDate);
             
             $extract[] = $specific;
           } 
           return $extract;
         }
     }
     
       
     /**
      * Update Slugs
      *
      * @since 2.04
      * @uses $url
      * @uses GSDATAPAGESPATH
      * @uses XMLsave
      *
      */
     function updateSlugs($existingUrl, $newurl=null){
           
           if (!$newurl){
           	global $url;
           } else {
           	$url = $newurl;
           }
     
           $path = GSDATAPAGESPATH;
           $dir_handle = @opendir($path) or die("Unable to open $path");
           $filenames = array();
           while ($filename = readdir($dir_handle)) {
             $ext = substr($filename, strrpos($filename, '.') + 1);
             if ($ext=="xml"){
               $filenames[] = $filename;
             }
           }
     
           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(GSDATAPAGESPATH.$file);
                 $data = simplexml_load_string($thisfile);
                 if ($data->parent==$existingUrl){
                   $data->parent=$url;
                   XMLsave($data, GSDATAPAGESPATH.$file);
                 }   
               } 
             }
           }
     } 
     
     
     /**
      * List Pages Json
      *
      * This is used by the CKEditor link-local plguin function: ckeditor_add_page_link()
      *
      * @author Joshas: mailto:joshas@gmail.com
      *
      * @since 3.0
      * @uses subval_sort
      * @uses GSDATAPAGESPATH
      * @uses getXML
      *
      * @returns array
      */
     function list_pages_json() {
     	// get local pages list for ckeditor local page link selector
     	$path = GSDATAPAGESPATH;
     	$filenames = getFiles($path);
     	$count="0";
     	$pagesArray = array();
     	if (count($filenames) != 0) { 
     		foreach ($filenames as $file) {
     			if (isFile($file, $path, 'xml')) {
     				$data = getXML($path .$file);
     				$pagesArray[$count]['title'] = html_entity_decode($data->title, ENT_QUOTES, 'UTF-8');
     				$pagesArray[$count]['parent'] = $data->parent;
     			if ($data->parent != '') { 
     				$parentdata = getXML($path . $data->parent .'.xml');
     				$parentTitle = $parentdata->title;
     				$pagesArray[$count]['sort'] = $parentTitle .' '. $data->title;
     			} else {
     				$pagesArray[$count]['sort'] = $data->title;
     			}
     			$pagesArray[$count]['url'] = $data->url;
     			$parentTitle = '';
     			$count++;
     			}
     		}
     	}
     	$pagesSorted = subval_sort($pagesArray,'sort');
     	$pageList = array();
     	if (count($pagesSorted) != 0) { 
     		foreach ($pagesSorted as $page) {
     			if ($page['parent'] != '') {$page['parent'] = $page['parent']."/"; $dash = '- '; } else { $dash = ""; }
     			if ($page['title'] == '' ) { $page['title'] = '[No Title] '.$page['url']; }
     			array_push($pageList, array( $dash . $page['title'], find_url($page['url'],$page['parent'])));
     		}
     	}
     	return json_encode($pageList);
     }
     
     /**
      * CKEditor Add Local Page Link
      *
      * This is used by the CKEditor to link to internal pages
      *
      * @author Joshas: mailto:joshas@gmail.com
      *
      * @since 3.0
      * @uses list_pages_json
      *
      * @returns array
      */
     function ckeditor_add_page_link(){
     	echo "
     	<script type=\"text/javascript\">
     	//<![CDATA[
     	// Get a CKEDITOR.dialog.contentDefinition object by its ID.
     	var getById = function(array, id, recurse) {
     		for (var i = 0, item; (item = array[i]); i++) {
     			if (item.id == id) return item;
     				if (recurse && item[recurse]) {
     					var retval = getById(item[recurse], id, recurse);
     					if (retval) return retval;
     				}
     		}
     		return null;
     	};
     
     	// modify existing Link dialog
     	CKEDITOR.on( 'dialogDefinition', function( ev )	{
     		if ((ev.editor != editor) || (ev.data.name != 'link')) return;
     
     		// Overrides definition.
     		var definition = ev.data.definition;
     		definition.onFocus = CKEDITOR.tools.override(definition.onFocus, function(original) {
     			return function() {
     				original.call(this);
     					if (this.getValueOf('info', 'linkType') == 'localPage') {
     						this.getContentElement('info', 'localPage_path').select();
     					}
     			};
     		});
     
     		// Overrides linkType definition.
     		var infoTab = definition.getContents('info');
     		var content = getById(infoTab.elements, 'linkType');
     
     		content.items.unshift(['Link to local page', 'localPage']);
     		content['default'] = 'localPage';
     		infoTab.elements.push({
     			type: 'vbox',
     			id: 'localPageOptions',
     			children: [{
     				type: 'select',
     				id: 'localPage_path',
     				label: 'Select page:',
     				required: true,
     				items: " . list_pages_json() . ",
     				setup: function(data) {
     					if ( data.localPage )
     						this.setValue( data.localPage );
     				}
     			}]
     		});
     		content.onChange = CKEDITOR.tools.override(content.onChange, function(original) {
     			return function() {
     				original.call(this);
     				var dialog = this.getDialog();
     				var element = dialog.getContentElement('info', 'localPageOptions').getElement().getParent().getParent();
     				if (this.getValue() == 'localPage') {
     					element.show();
     					if (editor.config.linkShowTargetTab) {
     						dialog.showPage('target');
     					}
     					var uploadTab = dialog.definition.getContents('upload');
     					if (uploadTab && !uploadTab.hidden) {
     						dialog.hidePage('upload');
     					}
     				}
     				else {
     					element.hide();
     				}
     			};
     		});
     		content.setup = function(data) {
     			if (!data.type || (data.type == 'url') && !data.url) {
     				data.type = 'localPage';
     			}
     			else if (data.url && !data.url.protocol && data.url.url) {
     				if (path) {
     					data.type = 'localPage';
     					data.localPage_path = path;
     					delete data.url;
     				}
     			}
     			this.setValue(data.type);
     		};
     		content.commit = function(data) {
     			data.type = this.getValue();
     			if (data.type == 'localPage') {
     				data.type = 'url';
     				var dialog = this.getDialog();
     				dialog.setValueOf('info', 'protocol', '');
     				dialog.setValueOf('info', 'url', dialog.getValueOf('info', 'localPage_path'));
     			}
     		};
     	});
     	//]]>
     	</script>";
     }
     
     
     /**
      * Recursive list of pages
      *
      * Returns a recursive list of items for the main page
      *
      * @author Mike
      *
      * @since 3.0
      * @uses $pagesSorted
      *
      * @param string $parent
      * @param string $menu
      * @param int $level
      * 
      * @returns string
      */
     function get_pages_menu($parent, $menu,$level) {
     	global $pagesSorted;
     	
     	$items=array();
     	foreach ($pagesSorted as $page) {
     		if ($page['parent']==$parent){
     			$items[(string)$page['url']]=$page;
     		}	
     	}	
     	if (count($items)>0){
     		foreach ($items as $page) {
     		  	$dash="";
     		  	if ($page['parent'] != '') {
     	  			$page['parent'] = $page['parent']."/";
     	  		}
     			for ($i=0;$i<=$level-1;$i++){
     				if ($i!=$level-1){
     	  				$dash .= '<span>      </span>';
     				} else {
     					$dash .= '<span>  –   </span>';
     				}
     			} 
     			$menu .= '<tr id="tr-'.$page['url'] .'" >';
     			if ($page['title'] == '' ) { $page['title'] = '[No Title]  »  <em>'. $page['url'] .'</em>'; }
     			if ($page['menuStatus'] != '' ) { $page['menuStatus'] = ' <sup>['.i18n_r('MENUITEM_SUBTITLE').']</sup>'; } else { $page['menuStatus'] = ''; }
     			if ($page['private'] != '' ) { $page['private'] = ' <sup>['.i18n_r('PRIVATE_SUBTITLE').']</sup>'; } else { $page['private'] = ''; }
     			if ($page['url'] == 'index' ) { $homepage = ' <sup>['.i18n_r('HOMEPAGE_SUBTITLE').']</sup>'; } else { $homepage = ''; }
     			$menu .= '<td class="pagetitle">'. $dash .'<a title="'.i18n_r('EDITPAGE_TITLE').': '. var_out($page['title']) .'" href="edit.php?id='. $page['url'] .'" >'. cl($page['title']) .'</a><span class="showstatus toggle" >'. $homepage . $page['menuStatus'] . $page['private'] .'</span></td>';
     			$menu .= '<td style="width:80px;text-align:right;" ><span>'. shtDate($page['pubDate']) .'</span></td>';
     			$menu .= '<td class="secondarylink" >';
     			$menu .= '<a title="'.i18n_r('VIEWPAGE_TITLE').': '. var_out($page['title']) .'" target="_blank" href="'. find_url($page['url'],$page['parent']) .'">#</a>';
     			$menu .= '</td>';
     			if ($page['url'] != 'index' ) {
     				$menu .= '<td class="delete" ><a class="delconfirm" href="deletefile.php?id='. $page['url'] .'&nonce='.get_nonce("delete", "deletefile.php").'" title="'.i18n_r('DELETEPAGE_TITLE').': '. cl($page['title']) .'" >×</a></td>';
     			} else {
     				$menu .= '<td class="delete" ></td>';
     			}
     			$menu .= '</tr>';
     			$menu = get_pages_menu((string)$page['url'], $menu,$level+1);	  	
     		}
     	}
     	return $menu;
     }
     
     /**
      * Recursive list of pages for Dropdown menu
      *
      * Returns a recursive list of items for the main page
      *
      * @author Mike
      *
      * @since 3.0
      * @uses $pagesSorted
      *
      * @param string $parent
      * @param string $menu
      * @param int $level
      * 
      * @returns string
      */
     function get_pages_menu_dropdown($parentitem, $menu,$level) {
     	
     	global $pagesSorted;
     	global $parent; 
     	
     	$items=array();
     	foreach ($pagesSorted as $page) {
     		if ($page['parent']==$parentitem){
     			$items[(string)$page['url']]=$page;
     		}	
     	}	
     	if (count($items)>0){
     		foreach ($items as $page) {
     		  	$dash="";
     		  	if ($page['parent'] != '') {
     	  			$page['parent'] = $page['parent']."/";
     	  		}
     			for ($i=0;$i<=$level-1;$i++){
     				if ($i!=$level-1){
     	  				$dash .= '<span>      </span>';
     				} else {
     					$dash .= '<span>  –   </span>';
     				}
     			} 
     			if ($parent == (string)$page['url']) { $sel="selected"; } else { $sel=""; }
     			$menu .= '<option '.$sel.' value="'.$page['url'] .'" >'.$dash.$page['url'].'</option>';
     			$menu = get_pages_menu_dropdown((string)$page['url'], $menu,$level+1);	  	
     		}
     	}
     	return $menu;
     }
     
     /**
      * Get API Details
      *
      * Returns the contents of an API url request
      *
      * This is needed because of the "XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin"
      * error that javascript gets when trying to access outside domains sometimes. 
      *
      * @since 3.1
      * @uses GSADMININCPATH
      * @uses GSCACHEPATH
      *
      * @param string $type, default is 'core'
      * @param array $args, default is empty
      * 
      * @returns string
      */
     
     function get_api_details($type='core', $args=null) {
     	GLOBAL $debugApi,$nocache,$nocurl;
     
     	include(GSADMININCPATH.'configuration.php');
     
     	# core api details
     	if ($type=='core') {
     		$fetch_this_api = $api_url .'?v='.GSVERSION;
     	}
     	
     	# plugin api details. requires a passed plugin id
     	if ($type=='plugin' && $args) {
     		$apiurl = $site_link_back_url.'api/extend/?file=';
     		$fetch_this_api = $apiurl.$args;
     	}
     	
     	# custom api details. requires a passed url
     	if ($type=='custom' && $args) {
     		$fetch_this_api = $args;
     	}
     	
     	// get_execution_time();
     	debug_api_details("get_api_details: " . $type. " " .$args);
     	debug_api_details("get_api_details: " . $fetch_this_api);
     
     	# debug_api_details(debug_backtrace());
     
     	if(!isset($api_timeout) or (int)$api_timeout<100) $api_timeout = 500; // default and clamp min to 100ms
     	debug_api_details("API timeout: " .$api_timeout);
     
     	# check to see if cache is available for this
     	$cachefile = md5($fetch_this_api).'.txt';
     	debug_api_details('cache check for ' . $fetch_this_api.' ' .$cachefile);
     
     	if (file_exists(GSCACHEPATH.$cachefile) && time() - 40000 < filemtime(GSCACHEPATH.$cachefile) and !$nocache) {
     		# grab the api request from the cache
     		$data = file_get_contents(GSCACHEPATH.$cachefile);
     		debug_api_details('Returning api cache ' . GSCACHEPATH.$cachefile);
     	} else {	
     		# make the api call
     		if (function_exists('curl_exec') and !$nocurl) {
     
     			// USE CURL
     			$ch = curl_init();
     			
     			// define missing curlopts php<5.2.3
     			if(!defined('CURLOPT_CONNECTTIMEOUT_MS')) define('CURLOPT_CONNECTTIMEOUT_MS',156);
     			if(!defined('CURLOPT_TIMEOUT_MS')) define('CURLOPT_TIMEOUT_MS',155);			
     			
     			// min cURL 7.16.2
     			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $api_timeout); // define the maximum amount of time that cURL can take to connect to the server 
     			curl_setopt($ch, CURLOPT_TIMEOUT_MS, $api_timeout); // define the maximum amount of time cURL can execute for.
     			curl_setopt($ch, CURLOPT_NOSIGNAL, 1); // prevents SIGALRM during dns allowing timeouts to work http://us2.php.net/manual/en/function.curl-setopt.php#104597
     			curl_setopt($ch, CURLOPT_HEADER, false); // ensures header is not in output
     			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     			curl_setopt($ch, CURLOPT_URL, $fetch_this_api);
     
     			if($debugApi){
     				// $verbose = fopen(GSDATAOTHERPATH .'logs/curllog.txt', 'w+');			
     				$verbose = tmpfile();				
     				// curl_setopt($ch, CURLOPT_WRITEHEADER, $verbose );
     				curl_setopt($ch, CURLOPT_HEADER, true); 
     				curl_setopt($ch, CURLOPT_VERBOSE, true);
     				curl_setopt($ch, CURLOPT_STDERR, $verbose );
     				curl_setopt($ch, CURLINFO_HEADER_OUT, true);								
     			}
     				
     			$data = curl_exec($ch);
     
     			if($debugApi){
     				debug_api_details("API via curl");
     				debug_api_details("curl version: ");
     				debug_api_details(print_r(curl_version(),true));	
     			
     				debug_api_details("Curl info:");
     				debug_api_details(print_r(curl_getinfo($ch),true));
     			
     				if (!$data) {
     					debug_api_details("cURL error number:" .curl_errno($ch));
     					debug_api_details("cURL error:" . curl_error($ch));
     				}
     
     				debug_api_details("Curl Verbose: ");
     				debug_api_details(!rewind($verbose) . nl2br(htmlspecialchars(stream_get_contents($verbose))) );
     				fclose($verbose);
     				
     				// output header and response then remove header from data
     				$dataparts = explode("\r\n",$data);
     				debug_api_details("Curl Data: ");
     				debug_api_details($data);
     				$data = end($dataparts);
     
     			}	
     
     			curl_close($ch);
     
     		} else if(ini_get('allow_url_fopen')) {  
     			// USE FOPEN
     			debug_api_details("API via fopen");			
     			$timeout = $api_timeout / 1000; // ms to float seconds
     			// $context = stream_context_create();
     			// stream_context_set_option ( $context, array('http' => array('timeout' => $timeout)) );
     			$context = stream_context_create(array('http' => array('timeout' => $timeout))); 
     			$data = @file_get_contents($fetch_this_api,false,$context);	
     			debug_api_details("fopen data: " .$data);		
     		} else {
     			debug_api_details("No api methods available");						
     			return;
     		}	
     	
     		// debug_api_details("Duration: ".get_execution_time());	
     
     		$response = json_decode($data);		
     		debug_api_details('API JSON:');
     		debug_api_details(print_r($response,true));
     
     		// if response is invalid do not write to cache and return false
     		// this keep proxy and malicious responses out of downstream code
     		if($response){
     			file_put_contents(GSCACHEPATH.$cachefile, $data);
     			chmod(GSCACHEPATH.$cachefile, 0644);
     			return $data;
     		} else {
     			return;
     		}	
     	}
     	return $data;
     }
     
     function debug_api_details($msg){
     	GLOBAL $debugApi;
     	if(!$debugApi) return;
     	debugLog($msg);
     }
     
     /**
      * Get GetSimple Version
      *
      * Returns the version of this GetSimple installation
      *
      * @since 3.1
      * @uses GSADMININCPATH
      * @uses GSVERSION
      * 
      * @returns string
      */
     function get_gs_version() {
     	include(GSADMININCPATH.'configuration.php');
     	return GSVERSION;
     }
     
     
     /**
      * Creates Sitemap
      *
      * Creates sitemap.xml in the site's root.
      */
     function generate_sitemap() {
     	
     	if(getDef('GSNOSITEMAP',true)) return;
     
     	// Variable settings
     	global $SITEURL;
     	$path = GSDATAPAGESPATH;
     	$count="0";
     	
     	$filenames = getFiles($path);
     	
     	if (count($filenames) != 0)	{ 
     		foreach ($filenames as $file)	{
     			if ( isFile($file, $path, 'xml')) {
     				$data = getXML($path . $file);
     				if ($data->url != '404') {
     					$status = $data->menuStatus;
     					$pagesArray[$count]['url'] = $data->url;
     					$pagesArray[$count]['parent'] = $data->parent;
     					$pagesArray[$count]['date'] = $data->pubDate;
     					$pagesArray[$count]['private'] = $data->private;
     					$pagesArray[$count]['menuStatus'] = $data->menuStatus;
     					$count++;
     				}
     			}
     		}
     	}
     	
     	$pagesSorted = subval_sort($pagesArray,'menuStatus');
     	
     	if (count($pagesSorted) != 0)
     	{ 
     		$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset></urlset>');
     		$xml->addAttribute('xsi:schemaLocation', 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd', 'http://www.w3.org/2001/XMLSchema-instance');
     		$xml->addAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
     		
     		foreach ($pagesSorted as $page)
     		{	
     			if ($page['private'] != 'Y')
     			{
     				// set <loc>
     				$pageLoc = find_url($page['url'], $page['parent']);
     				
     				// set <lastmod>
     				$tmpDate = date("Y-m-d H:i:s", strtotime($page['date']));
     				$pageLastMod = makeIso8601TimeStamp($tmpDate);
     				
     				// set <changefreq>
     				$pageChangeFreq = 'weekly';
     				
     				// set <priority>
     				if ($page['menuStatus'] == 'Y') {
     					$pagePriority = '1.0';
     				} else {
     					$pagePriority = '0.5';
     				}
     				
     				//add to sitemap
     				$url_item = $xml->addChild('url');
     				$url_item->addChild('loc', $pageLoc);
     				$url_item->addChild('lastmod', $pageLastMod);
     				$url_item->addChild('changefreq', $pageChangeFreq);
     				$url_item->addChild('priority', $pagePriority);
     				exec_action('sitemap-additem');
     			}
     		}
     		
     		//create xml file
     		$file = GSROOTPATH .'sitemap.xml';
     		exec_action('save-sitemap');
     		XMLsave($xml, $file);
     	}
     	
     	if (!defined('GSDONOTPING')) {
     		if (file_exists(GSROOTPATH .'sitemap.xml')){
     			if( 200 === ($status=pingGoogleSitemaps($SITEURL.'sitemap.xml')))	{
     				#sitemap successfully created & pinged
     				return true;
     			} else {
     				error_log(i18n_r('SITEMAP_ERRORPING'));
     				return i18n_r('SITEMAP_ERRORPING');
     			}
     		} else {
     			error_log(i18n_r('SITEMAP_ERROR'));
     			return i18n_r('SITEMAP_ERROR');
     		}
     	} else {
     		#sitemap successfully created - did not ping
     		return true;
     	}
     }
     
     
     /**
      * Creates tar.gz Archive 
      */
     function archive_targz() {
     	if(!function_exists('exec')) {
         return false;
         exit;
     	}
     	$timestamp = gmdate('Y-m-d-Hi_s');
     	$saved_zip_file_path = GSBACKUPSPATH.'zip/';
     	$saved_zip_file = $timestamp .'_archive.tar.gz';	
     	$script_contents = "tar -cvzf ".$saved_zip_file_path.$saved_zip_file." ".GSROOTPATH.".htaccess ".GSROOTPATH."gsconfig.php ".GSROOTPATH."data ".GSROOTPATH."plugins ".GSROOTPATH."theme ".GSROOTPATH."admin/lang > /dev/null 2>&1";
     	exec($script_contents, $output, $rc);
     	if (file_exists($saved_zip_file_path.$saved_zip_file)) {
     		return true;
     	} else {
     		return false;
     	}
     }
     
     /**
      * Check if a page is a public admin page
      * @return boolean true if page is non protected admin page
      */
     function isAuthPage(){
     	$page = get_filename_id(); 
     	return $page == 'index' || $page == 'resetpassword';
     }
     
     
     ?>
     

[top] / php / GetSimpleCMS-3.2.3 / admin / inc / template_functions.php

contact | logmethods.com