43b56d599ff1f4dfb60504744b9632376d548741
[atutor.git] / mods / wiki / plugins / lib / http_cache.php
1 <?php
2 /*
3   Creates a cache entry in the database for retrieved objects.
4
5   @depends: http
6 */
7
8
9 #-- retrieve URL, but always create/check cache entry
10 function ewiki_cache_url($url, $cache_min=1200) {
11    global $ewiki_cache_ctype;
12    
13    #-- check if fresh enough in cache (20min)
14    $data = ewiki_db::GET($url);
15    if (time() <= $data["lastmodified"] + $cache_min) {
16       $ewiki_cache_ctype = $data["Content-Type"];
17       return($data["content"]);
18    }
19
20    #-- retrieve
21    $req = new http_request("GET", $url);
22    $req->header["Accept"] = "application/atom+xml, application/rss+xml, text/rss, xml/*, */*rss*";
23    if ($data["meta"]["Last-Modified"]) {
24       $req->headers["If-Modified-Since"] = $data["meta"]["Last-Modified"];
25    }
26    if ($data["meta"]["Etag"]) {
27       $req->headers["If-None-Match"] = $data["meta"]["Etag"];
28    }
29    $result = $req->go();
30    
31    #-- create/overwrite cache entry
32    if ($result->status == 200) {
33       $data = ewiki_db::CREATE($url, 0x0000, "ewiki_cache_url");
34       $data["flags"] = 0x0000;
35       $data["content"] = $result->body;
36       foreach ($result->headers as $i=>$v) {
37          $data["meta"][$i] = $v;
38       }
39       $data["meta"]["class"] = "temp";
40       $data["meta"]["kill-after"] = time() + $cache_min;
41       if ($t = $data["meta"]["Last-Modified"]) {
42    //    $data["lastmodified"] = ewiki_decode_datetime($t);
43       }
44       ewiki_db::WRITE($data,"_OVERWRITE=1");
45    }
46
47    $ewiki_cache_ctype = $data["Content-Type"];
48    return($data["content"]);
49 }
50
51 ?>