e2926d6295eece1fc6c6c619b5de2eda14f09b21
[atutor.git] / mods / wiki / tools / cron.d / S67versionholes.php
1 <?php
2 /*
3    Automatically deletes historic page versions, but leaves out the first,
4    a few versions from the end and every Nth version (to be configured)
5    also. DOES NOT ENGAGE without configuring it first.
6 */
7
8
9 // define("VERHOLES_INTERLEAVE", 10);   // keep every Nth version, off==0
10 // define("VERHOLES_KEEP_END", 3);      // always keep last num versions
11 // define("VERHOLES_KEEP_START", 1);    // you SHOULD keep .1 for flat_files!
12 // define("VERHOLES_NOTOUCH_TIME", 30); // keep versions younger than 30 days
13
14
15 #-- start, if
16 if (defined("VERHOLES_INTERLEAVE") and defined("VERHOLES_KEEP_END")) {
17
18    #-- built-in defaultz for these two
19    define("VERHOLES_KEEP_START", 1);
20    if (defined("KEPTPAGES")) {
21       define("VERHOLES_NOTOUCH_TIME", KEPTPAGES);
22    }
23    else {
24       define("VERHOLES_NOTOUCH_TIME", 30);
25    }
26    define("EWIKI_DB_F_ARCHIVE", 1<<11);
27    $start = VERHOLES_KEEP_START;
28    $end = VERHOLES_KEEP_END;
29    $leave = VERHOLES_INTERLEAVE;
30    $ignore = VERHOLES_NOTOUCH_TIME;
31    echo "[$cron]: deleting all page versions $start..-$end with interleave of $leave, without touching versions younger than $ignore days\n";
32    $t_skip = time() - $ignore*24*2600;
33
34    #-- visit each page
35    $result = ewiki_db::GETALL(array("id", "version"));
36    while ($row = $result->get()) {
37
38       $id = $row["id"];
39       if ($row["flags"] & EWIKI_DB_F_ARCHIVE) { continue; }
40
41       $verZ = $row["version"] - $end;
42       $verA = $start;
43
44       #-- walk versions (top..down)
45       for ($ver=$verZ; $ver>=$verA; $v--) {
46
47          #-- interleave      
48          if ($leave && !($ver % $leave)) {
49             continue;
50          }
51
52          #-- skip if too fresh
53          $row = ewiki_db::GET($id, $ver);
54          if ($row["lastmodified"] >= $t_skip) {
55             continue;
56          }
57          
58          #-- check flags
59          if ($row["flags"] & EWIKI_DB_F_ARCHIVE) {
60             continue;
61          }
62          if ($row["flags"] & EWIKI_DB_F_READONLY) {
63             // has no meaning here(?!)
64          }
65
66          #-- else really delete it
67          ewiki_db::DELETE($id, $ver);
68          echo "   $id[$ver]\n";
69          
70       }
71
72    } // GETALL
73 }
74
75 ?>