3 class sml_data_sources_cache extends mw_data
7 * retourne le contenu XML dont l'URL d'origine est $url
9 * si le contenu n'est pas dans le cache, cette fonction
10 * ira le lire et l'ajoutera dans le cache
12 * si le contenu est dans cache mais que sa date de validite
13 * est depassee, le contenu sera mis a jour
15 * $url : l'URL d'origine du fichier XML
17 * $IGNORE_UPDATE : si VRAI et qu'un contenu correspondant est
18 * dans le cache, c'est ce contenu qui sera fourni, meme si
19 * sa date de validite est depassee
22 function get_source_xml_from_cache($url, $IGNORE_UPDATE = false)
23 { $env = $this->env();
24 $sgbd = $this->sgbd();
25 if(($cache_infos = $this->source_cache_infos_db($url)) !== false)
27 { if($env->config("cache_maj_auto"))
28 { if(($need_update = $this->cache_need_update($cache_infos["last_update"], $env->config("cache_time") * 60 * 60)) !== false)
29 { if(!$IGNORE_UPDATE && $need_update)
30 { if($this->buffer = @file_get_contents($url))
31 { if($this->parse_source_xml($this->buffer))
32 { if($this->del_source_cache($cache_infos["id"], $cache_infos["id_source"]))
33 { if($this->add_source_cache($url, $this->buffer)) return $this->buffer;
40 else return @file_get_contents($env->path("content")."cache/sources/".$cache_infos["id_source"].".xml");
45 { if($this->buffer = @file_get_contents($url))
46 { if($this->parse_source_xml($this->buffer))
47 { if(!$this->add_source_cache($url, $this->buffer)) return false;
57 * retourne 1 si $last_update + $cache_time est
58 * superieur ou egal a la date courante, 0 sinon
60 * retourne FAUX si le formta de $last_update ou
61 * de $cache_time est incorrect
63 * $last_update : date au format Y-m-d H:i:s
65 * $cache_time : duree, en secondes
68 function cache_need_update($last_update, $cache_time)
69 { $v_last_update = explode(" ", $last_update);
70 if(count($v_last_update) == 2)
71 { $v_date = explode("-", $v_last_update[0]);
72 if(count($v_date) == 3)
73 { $v_time = explode(":", $v_last_update[1]);
74 if(count($v_time) == 3)
76 ( preg_match("/^[0-9]+$/", $v_date[0])
77 && preg_match("/^[0-9]+$/", $v_date[1])
78 && preg_match("/^[0-9]+$/", $v_date[2])
79 && preg_match("/^[0-9]+$/", $v_time[0])
80 && preg_match("/^[0-9]+$/", $v_time[1])
81 && preg_match("/^[0-9]+$/", $v_time[2])
82 && preg_match("/^[0-9]+$/", $cache_time)
84 { return (time() - mktime($v_time[0], $v_time[1], $v_time[2], $v_date[1], $v_date[2], $v_date[0])) < $cache_time ? 0 : 1;
93 * ajoute un contenu xml dans le cache
95 * $url : l'URL du fichier XML d'origine
97 * $xml_content : le contenu du fichier XML
100 function add_source_cache($url, $xml_content)
101 { $env = $this->env();
102 $sgbd = $this->sgbd();
103 if(($cache_index = $this->inc_sources_cache_index()) !== false)
104 { if($fh = @fopen($env->path("content")."cache/sources/".$cache_index.".xml", "w+"))
106 if(@fwrite($fh, $this->buffer))
108 $res = $this->add_source_cache_db($url, $cache_index);
118 * met a jour le cache pour le fichier XML dont l'URL d'origine est $url
122 * VRAI si tout se passe bien
123 * -1 si l'URL est introuvable
124 * -2 si le contenu a cette URL n'est pas un fichier XML de source
125 * FAUX si le cache n'a pas pu etre mis a jour avec les nouvelles infos
128 function maj_source_cache($url)
129 { if($this->buffer = @file_get_contents($url))
130 { if($this->parse_source_xml($this->buffer))
131 { if(($cache_infos = $this->source_cache_infos_db($url)) !== false)
133 { if($this->del_source_cache($cache_infos["id"], $cache_infos["id_source"]))
134 { if($this->add_source_cache($url, $this->buffer)) return true;
138 { if($this->add_source_cache($url, $this->buffer)) return true;
152 function empty_source_cache()
154 if(($cache = $this->source_cache_db()) !== false)
155 { foreach($cache as $id_cache => $cache_infos)
156 { if(!$this->del_source_cache($id_cache, $cache_infos["id_source"]))
167 * efface un contenu XML du cache
169 * $id_cache_data : l'index des informations de cache
170 * dans le dossier data
172 * $id_xml_cache : l'index du contenu XML dans le cache
175 function del_source_cache($id_cache_data, $id_xml_cache)
176 { $env = $this->env();
177 if($this->del_source_cache_db($id_cache_data))
178 { if(@unlink($env->path("content")."cache/sources/".$id_xml_cache.".xml")) return true;
184 * initialise le cache
185 * cette fonction verifie que les dossiers du cache existent
189 function init_sources_cache()
190 { $env = $this->env();
191 if(!is_dir($env->path("content")."cache")) @mkdir($env->path("content")."cache");
192 if(is_dir($env->path("content")."cache"))
193 { if(!is_dir($env->path("content")."cache/sources")) @mkdir($env->path("content")."cache/sources");
194 if(is_dir($env->path("content")."cache/sources"))
198 return "impossible d'initialiser le cache";
202 * incremente l'index du cache et retourne le nouvel index
205 function inc_sources_cache_index()
208 $cache_index = false;
209 if(is_dir($env->path("content")."cache/sources") && is_writable($env->path("content")."cache/sources"))
210 { if(!file_exists($env->path("content")."cache/sources/.index"))
211 { if($fh = @fopen($env->path("content")."cache/sources/.index", "w+"))
212 { if(@fwrite($fh, "0")) $cache_index = 0;
217 { if(($cache_index = @file_get_contents($env->path("content")."cache/sources/.index")) !== false)
218 { if(preg_match("/^[0-9]+$/", $cache_index))
219 { $cache_index = (int)$cache_index;
221 else $cache_index = false;
225 if($cache_index !== false)
227 if($fh = @fopen($env->path("content")."cache/sources/.index", "w+"))
228 { if(!@fwrite($fh, (string)$cache_index)) $cache_index = false;
231 else $cache_index = false;