PEEL Shopping
Open source ecommerce : PEEL Shopping
sitemap.php
Go to the documentation of this file.
1 <?php
2 // This file should be in UTF8 without BOM - Accents examples: éèê
3 // +----------------------------------------------------------------------+
4 // | Copyright (c) 2004-2015 Advisto SAS, service PEEL - contact@peel.fr |
5 // +----------------------------------------------------------------------+
6 // | This file is part of PEEL Shopping 8.0.0, which is subject to an |
7 // | opensource GPL license: you are allowed to customize the code |
8 // | for your own needs, but must keep your changes under GPL |
9 // | More information: https://www.peel.fr/lire/licence-gpl-70.html |
10 // +----------------------------------------------------------------------+
11 // | Author: Advisto SAS, RCS 479 205 452, France, https://www.peel.fr/ |
12 // +----------------------------------------------------------------------+
13 // $Id: sitemap.php 46935 2015-09-18 08:49:48Z gboussin $
14 define('IN_PEEL_ADMIN', true);
15 include("../configuration.inc.php");
17 necessite_priv("admin_webmastering");
18 
19 if (empty($_SESSION['session_admin_multisite']) || $_SESSION['session_admin_multisite']!=$GLOBALS['site_id']) {
20  // Possibilité de générer le sitemap uniquement pour le domaine en cours d'utilisation, et pas pour le site administré.
21  redirect_and_die($GLOBALS['administrer_url'] . '/');
22 }
23 
24 if (!empty($_GET['encoding'])) {
25  $file_encoding = $_GET['encoding'];
26 } else {
27  $file_encoding = 'utf-8';
28 }
29 $GLOBALS['DOC_TITLE'] = $GLOBALS['STR_ADMIN_SITEMAP_TITLE'];
31 
32 include($GLOBALS['repertoire_modele'] . "/admin_haut.php");
33 
34 $tpl = $GLOBALS['tplEngine']->createTemplate('admin_sitemap.tpl');
35 $tpl->assign('href', $GLOBALS['wwwroot'] . '/sitemap.xml');
36 $tpl->assign('STR_ADMIN_SITEMAP_TITLE', $GLOBALS['STR_ADMIN_SITEMAP_TITLE']);
37 $tpl->assign('STR_ADMIN_SITEMAP_OPEN', $GLOBALS['STR_ADMIN_SITEMAP_OPEN']);
38 echo $tpl->fetch();
39 
40 
41 switch (vb($_REQUEST['mode'])) {
42  case "lire" :
43  if (!verify_token($_SERVER['PHP_SELF'])) {
44  $form_error_object->add('token', $GLOBALS['STR_INVALID_TOKEN']);
45  }
46  if (!$form_error_object->count()) {
47  // Création d'un fichier sitemap.xml par sous-domaine et domaine. Le fichier sitemap sera appeler en front office via le fichier php get_sitemap.php
48  // Les urls des sites dans un sous-dossier ne sont pas correctement générées.
49  $langs_array_by_subdomain = array();
50  foreach($GLOBALS['langs_array_by_wwwroot'] as $this_wwwroot=>$this_lang_array) {
51  // Création du tableau langue par sous domaine
52  $langs_array_by_subdomain[get_site_domain(false, $this_wwwroot, false)][] = $this_lang_array[0];
53  }
54  // Format du tableau
55  // $langs_array_by_subdomain = array(domain1 => array('lng1', 'lng2', 'lng3'), domain2 => array('lng4'), domain3 => array('lng5','lng6'));
56  foreach ($langs_array_by_subdomain as $this_domain=>$this_lang_array) {
57  // Création des fichiers sitemap.
58  create_google_sitemap($this_domain, $this_lang_array, $file_encoding);
59  }
60  } elseif ($form_error_object->has_error('token')) {
61  echo $form_error_object->text('token');
62  }
63  form2xml();
64  break;
65 
66  default :
67  form2xml();
68  break;
69 }
70 
71 include($GLOBALS['repertoire_modele'] . "/admin_bas.php");
72 
73 /* FONCTIONS */
74 
82 function create_google_sitemap($this_wwwroot, $this_wwwroot_lang_array, $file_encoding)
83 {
84  $tpl = $GLOBALS['tplEngine']->createTemplate('admin_google_sitemap.tpl');
85  $tpl->assign('GENERAL_ENCODING', GENERAL_ENCODING);
86  $sitemap = '';
87  $tpl_products = array();
88  $account_register_url_array = array();
89  $product_category_url_array = array();
90  $content_url_array = array();
91  $content_category_url_array = array();
92  $account_url_array = array();
93  $wwwroot_array = array();
94  $legal_url_array = array();
95  $tpl->assign('date', date("Y-m-d"));
96  $current_lang = $_SESSION['session_langue'];
97  foreach($this_wwwroot_lang_array as $this_lang) {
98  // Modification de l'environnement de langue
99  $_SESSION['session_langue'] = $this_lang;
100  set_lang_configuration_and_texts($this_lang, vb($GLOBALS['load_default_lang_files_before_main_lang_array_by_lang'][$this_lang]), true, false, !empty($GLOBALS['load_admin_lang']), true, defined('SKIP_SET_LANG'));
101 
102  // génération des liens pour les produits
103  $sql = "SELECT p.id AS produit_id, c.id AS categorie_id, p.nom_".(!empty($GLOBALS['site_parameters']['product_name_forced_lang'])?$GLOBALS['site_parameters']['product_name_forced_lang']:$this_lang)." AS name, c.nom_" . $this_lang . " AS categorie
104  FROM peel_produits p
105  INNER JOIN peel_produits_categories pc ON p.id = pc.produit_id
106  INNER JOIN peel_categories c ON c.id = pc.categorie_id AND " . get_filter_site_cond('categories', 'c') . "
107  WHERE p.etat=1 AND " . get_filter_site_cond('produits', 'p') . "
108  ORDER BY p.position ASC";
109  $created_report[] = $sql;
110  $query = query($sql);
111  while ($result = fetch_assoc($query)) {
112  $product_object = new Product($result['produit_id'], $result, true, null, true, !check_if_module_active('micro_entreprise'));
113  $tpl_products[] = $product_object->get_product_url();
114  unset($product_object);
115  }
116 
117  // génération des liens pour les categories de produit
118  if (empty($GLOBALS['site_parameters']['disallow_main_category'])) {
119  $product_category_url_array[] = get_product_category_url();
120  }
121  $sql = "SELECT c.id, c.nom_" .$_SESSION['session_langue']. " AS nom
122  FROM peel_categories c
123  WHERE c.etat=1 AND " . get_filter_site_cond('categories', 'c') . "
124  ORDER BY c.position ASC";
125  $created_report[] = $sql;
126  $query = query($sql);
127  while ($result = fetch_assoc($query)) {
128  $product_category_url_array[] = get_product_category_url($result['id'], $result['nom']);
129  }
130 
131  // génération des liens pour les articles de contenu
132  $sql = "SELECT p.id, c.id AS categorie_id, p.titre_".$this_lang." AS name, c.nom_" . $this_lang . " AS categorie
133  FROM peel_articles p
134  INNER JOIN peel_articles_rubriques pc ON p.id = pc.article_id
135  INNER JOIN peel_rubriques c ON c.id = pc.rubrique_id AND " . get_filter_site_cond('rubriques', 'c') . "
136  WHERE p.etat=1 AND " . get_filter_site_cond('produits', 'p') . "
137  ORDER BY p.position ASC";
138  $created_report[] = $sql;
139  $query = query($sql);
140  while ($result = fetch_assoc($query)) {
141  $content_url_array[] = get_content_url($result['id'], $result['name'], $result['categorie_id'], $result['categorie']);
142  }
143 
144  // génération des liens pour les rubriques de contenu
145  if (empty($GLOBALS['site_parameters']['disallow_main_content_category'])) {
146  $content_category_url_array[] = get_content_category_url();
147  }
148  $sql = "SELECT c.id, c.nom_" .$_SESSION['session_langue']. " AS nom
149  FROM peel_rubriques c
150  WHERE c.etat=1 AND " . get_filter_site_cond('rubriques', 'c') . "
151  ORDER BY c.position ASC";
152  $created_report[] = $sql;
153  $query = query($sql);
154  while ($result = fetch_assoc($query)) {
155  $content_category_url_array[] = get_content_category_url($result['id'], $result['nom']);
156  }
157  $content_url_array[] = get_url('/utilisateurs/contact.php');
158  $legal_url_array[] = get_url('legal');
159  $legal_url_array[] = get_url('cgv');
160  $account_register_url_array[] = get_account_register_url();
161  $account_url_array[] = get_account_url(false, false, false);
162  $account_url_array[] = get_url('/utilisateurs/oubli_mot_passe.php');
163  $wwwroot_array[] = get_url('/');
164  }
165  // rétablissement de la langue du back office pour l'affichage du message de confirmation
166  $_SESSION['session_langue'] = $current_lang;
167  set_lang_configuration_and_texts($_SESSION['session_langue'], vb($GLOBALS['load_default_lang_files_before_main_lang_array_by_lang'][$_SESSION['session_langue']]), true, false, !empty($GLOBALS['load_admin_lang']), true, defined('SKIP_SET_LANG'));
168 
169  $tpl->assign('account_register_url_array', $account_register_url_array);
170  $tpl->assign('product_category_url_array', $product_category_url_array);
171  $tpl->assign('content_url_array', $content_url_array);
172  $tpl->assign('content_category_url_array', $content_category_url_array);
173  $tpl->assign('account_url_array', $account_url_array);
174  $tpl->assign('wwwroot_array', $wwwroot_array);
175  $tpl->assign('products', $tpl_products);
176  $tpl->assign('legal_url_array', $legal_url_array);
177  $sitemap = $tpl->fetch();
178  // Création du fichier. Ce fichier sera lu par le fichier php /get_sitemap.xml. Une règle de réécriture dans le htaccess rend cet appel transparent pour le client.
179  $xml_filename = $GLOBALS['dirroot'] . "/sitemap_" . substr(md5($this_wwwroot), 0, 4) . ".xml";
180  $create_xml = String::fopen_utf8($xml_filename, "wb");
181  fwrite($create_xml, String::convert_encoding($sitemap, $file_encoding, GENERAL_ENCODING));
182  fclose($create_xml);
183 
184  echo $GLOBALS['tplEngine']->createTemplate('global_success.tpl', array('message' => $GLOBALS['STR_ADMIN_SITEMAP_MSG_CREATED_OK']))->fetch();
185  echo '<p>'.$GLOBALS['STR_ADMIN_SITEMAP_CREATED_REPORT'].'<br /><br />' . nl2br(implode('<hr />', $created_report)) . '</p>';
186 }
187 
193 function form2xml()
194 {
195  $tpl = $GLOBALS['tplEngine']->createTemplate('admin_sitemap_form2xml.tpl');
196  $tpl->assign('action', get_current_url(false));
197  $tpl->assign('form_token', get_form_token_input($_SERVER['PHP_SELF']));
198  $tpl->assign('STR_ADMIN_SITEMAP_CREATE_BUTTON', $GLOBALS['STR_ADMIN_SITEMAP_CREATE_BUTTON']);
199  echo $tpl->fetch();
200 }
201 
set_lang_configuration_and_texts($lang, $load_default_lang_files_before_main_lang_array=null, $general_setup=true, $load_modules_files=true, $load_general_admin_files=true, $exclude_empty_string=true, $skip_load_files=false)
On charge les variables de langue, en complétant éventuellement avec la langue de référence...
Definition: fonctions.php:1941
$result
static convert_encoding($string, $new_encoding, $original_encoding=null)
Converts the character encoding of string $string to $new_encoding from optionally $original_encoding...
Definition: String.php:375
get_current_url($with_get=true, $get_short_url=false, $take_away_get_args_array=null)
get_current_url()
Definition: fonctions.php:1743
create_google_sitemap($this_wwwroot, $this_wwwroot_lang_array, $file_encoding)
Definition: sitemap.php:82
static fopen_utf8($filename, $mode, $force_filename_in_iso_8859=false, $try_filename_in_iso_8859_if_file_not_found=true)
Ouvre un fichier.
Definition: String.php:793
redirect_and_die($url, $permanent_redirection=false, $avoid_loop=false)
Redirige vers l'URL demandée et arrête le programme.
Definition: fonctions.php:1551
$GLOBALS['DOC_TITLE']
Definition: sitemap.php:29
form2xml()
form2xml()
Definition: sitemap.php:193
if(empty($_GET['id'])) if(!empty($GLOBALS['site_parameters']['allow_multiple_product_url_with_category'])) $product_object
$tpl
Definition: sitemap.php:34
necessite_priv($priv, $demo_allowed=true, $configuration_modification=false)
Cette fonction vérifie si l'utilisateur a les privilèges de $priv.
Definition: fonctions.php:1575
get_filter_site_cond($table_technical_code, $table_alias=null, $use_strict_rights_if_in_admin=false, $specific_site_id=null, $exclude_public_items=false, $admin_force_multisite_if_allowed=false)
Retourne la condition SQL permettant de filtrer les données pour une table.
Definition: fonctions.php:4643
query($query, $die_if_error=false, $database_object=null, $silent_if_error=false, $security_sql_filter=true)
The query() function is meant to be called anywhere you want to make a query.
Definition: database.php:158
vb(&$var, $default=null)
Variable blanche if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:97
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
Definition: chart-data.php:160
necessite_identification()
Si l'utilisateur n'est pas connecté à un compte, on affiche une page d'identification et arrête le sc...
Definition: fonctions.php:1596
$form_error_object
Definition: sitemap.php:30
fetch_assoc($query_result)
fetch_assoc()
Definition: database.php:283
get_form_token_input($name= 'general', $use_existing_token=true, $return_as_input_form=true)
get_form_token_input()
Definition: fonctions.php:94
verify_token($name= 'general', $delay_in_minutes=60, $check_referer_if_set_by_server=true, $cancel_token=true, $minimum_wait_in_seconds_before_use=0)
Vérification de la validité d'un token Par défaut, un token est valide 1h, et utilisable 1 seule fois...
Definition: fonctions.php:118
check_if_module_active($module_name, $specific_file_name=null)
Renvoie si un module est présent et activé ou non - Peut être appelé avant ou après le chargement d'u...
get_site_domain($return_only_domains=false, $domain=null, $strip_subdomain=true)
Récupère le nom de domaine du site sans http:// et sans sous-domaine.
Definition: fonctions.php:3632
if(defined('IN_PEEL_ADMIN')||IN_INSTALLATION) $_SESSION['session_langue']

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:29:27 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.