Seditio Source
Root |
./othercms/Just-CMS v1.3.2 Valentina/plugins/i18n_base/sitemap.class.php
<?php
require_once(GSPLUGINPATH.'i18n_base/frontend.class.php');

class
I18nSitemap {
   
  public static function
generateSitemap() {
    global
$SITEURL;

   
$filenames = getFiles(GSDATAPAGESPATH);
    if (
count($filenames)) {
      foreach (
$filenames as $file) {
        if (
isFile($file, GSDATAPAGESPATH, 'xml')) {
         
$data = getXML(GSDATAPAGESPATH . $file);
          if (
$data->url != '404' && $data->private != 'Y') {
           
$pagesArray[] = array(
             
'url' => (string) $data->url,
             
'parent' => (string) $data->parent,
             
'date' => (string) $data->pubDate,
             
'menuStatus' => (string) $data->menuStatus
           
);
          }
        }
      }
    }
   
$pagesSorted = subval_sort($pagesArray,'menuStatus');
   
   
$languages = return_i18n_available_languages();
   
$deflang = return_i18n_default_language();
   
   
$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');
    if (
count($pagesSorted)) {
      foreach (
$pagesSorted as $page) {
       
// set <loc>
       
if (count($languages) > 1) {
         
$pos = strrpos($page['url'],'_');
          if (
$pos !== false) {
           
$pageLoc = find_i18n_url(substr($page['url'],0,$pos), $page['parent'], substr($page['url'],$pos+1));
          } else {
           
$pageLoc = find_i18n_url($page['url'], $page['parent'], $deflang);
          }
        } else {
         
$pageLoc = find_url($page['url'], $page['parent']);
        }      
       
// set <lastmod>
       
$pageLastMod = makeIso8601TimeStamp(date("Y-m-d H:i:s", strtotime($page['date'])));
       
// set <changefreq>
       
$pageChangeFreq = 'weekly';
       
// set <priority>
       
$pagePriority = $page['menuStatus'] == 'Y' ? '1.0' : '0.5';
       
//add to sitemap
       
$url_item = $xml->addChild('url');
       
$url_item->addChild('loc', htmlspecialchars($pageLoc));
       
$url_item->addChild('lastmod', $pageLastMod);
       
$url_item->addChild('changefreq', $pageChangeFreq);
       
$url_item->addChild('priority', $pagePriority);
      }
    }
   
//create xml file
   
$file = GSROOTPATH .'sitemap.xml';
   
XMLsave($xml, $file);
   
    if (!
defined('GSDONOTPING') || !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;
    }
  }
 
  public static function
isMultipleLanguages() {
    global
$PERMALINK;
    if (@
strpos(@$PERMALINK,'%language%') !== false || @strpos(@$PERMALINK,'%nondefaultlanguage%') !== false) {
      return
true;
    } else {
     
$languages = return_i18n_available_languages();
      return
count($languages) > 1;
    }
  }
 
  public static function
isAutoSitemap() {
    return !
defined('GSNOSITEMAP') || !GSNOSITEMAP;
  }

 
// execute action for all registered functions after the given one
 
public static function executeOtherFunctions($action, $function) {
    global
$plugins;
   
$done = true;
    foreach (
$plugins as $hook) {
      if (
$hook['hook'] == $action) {
        if (!
$done) {
         
call_user_func_array($hook['function'], $hook['args']);
        } else if (
$hook['function'] == $function) {
         
$done = false;
        }
      }
    }
  }
 
  public static function
patchSaveFile() {
    global
$url;
    if (!
self::isAutoSitemap()) return;
   
self::generateSitemap();
   
// redirect user back to edit page
   
if (isset($_POST['autosave']) && $_POST['autosave'] == 'true') {
      echo
'OK';
    } else {
     
      if (@
$_POST['redirectto'] != '') {
       
$redirect_url = $_POST['redirectto'];
      } else {
       
$redirect_url = 'edit.php';
      }
     
      if (!@
$_POST['existing-url'] || $url == $_POST['existing-url']) {
       
redirect($redirect_url."?id=". $url ."&upd=edit-success&type=edit");
      } else {
       
redirect($redirect_url."?id=". $url ."&old=".$_POST['existing-url']."&upd=edit-success&type=edit");
      }
    }
    die;
  }
 
  public static function
patchDeleteFile() {
    global
$id;
    if (!
self::isAutoSitemap()) return;
   
// (re)generate sitemap if there are multiple languages, as it was just generated incorrectly
   
if (self::isMultipleLanguages()) self::generateSitemap();
   
redirect("pages.php?upd=edit-success&id=". $id ."&type=delete");
    die;
  }
 
  public static function
patchSettings() {
    if (!
self::isAutoSitemap()) return;
   
// (re)generate sitemap if there are multiple languages, as it was just generated incorrectly
   
if (self::isMultipleLanguages()) self::generateSitemap();
  }
 
}