source: spip-zone/_plugins_/job_queue/base/queue.php @ 38162

Last change on this file since 38162 was 38162, checked in by cedric@…, 10 years ago

le type de champ text binary ne permet pas de s'affranchir du charset et continue a rejeter des caracteres invalides.
On passe en BLOB, ce qui permet d'inserer le contenu en binaire pur et de le relire sans alteration

File size: 4.1 KB
Line 
1<?php
2/*
3 * Plugin Job Queue
4 * (c) 2009 Cedric&Fil
5 * Distribue sous licence GPL
6 *
7 */
8
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11function queue_declarer_tables_interfaces($interface){
12        // 'spip_' dans l'index de $tables_principales
13        $interface['table_des_tables']['jobs']='jobs';
14
15        $interface['tables_jointures']['spip_jobs'][] = 'jobs_liens';
16
17        return $interface;
18}
19
20function queue_declarer_tables_principales($tables_principales){
21
22        $spip_jobs = array(
23                "id_job"        => "bigint(21) NOT NULL",
24                "descriptif"    => "text DEFAULT '' NOT NULL",
25                "fonction"      => "varchar(255) NOT NULL", //nom de la fonction
26                "args"=> "longblob DEFAULT '' NOT NULL", // arguments
27                "md5args"=> "char(32) NOT NULL default ''", // signature des arguments
28                "inclure" => "varchar(255) NOT NULL", // fichier a inclure ou path/ pour charger_fonction
29                "priorite"      => "smallint(6) NOT NULL default 0",
30                "date" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date au plus tot
31                "status" => "varchar(15) NOT NULL default 'scheduled'",
32                );
33
34        $spip_jobs_key = array(
35                "PRIMARY KEY"   => "id_job",
36                "KEY date" => "date",
37                "KEY status" => "status",
38        );
39
40        $tables_principales['spip_jobs'] = array(
41                'field' => &$spip_jobs,
42                'key' => &$spip_jobs_key);
43
44        return $tables_principales;
45}
46
47
48function queue_declarer_tables_auxiliaires($tables_auxiliaires){
49        $spip_jobs_liens = array(
50                "id_job"        => "bigint(21) DEFAULT '0' NOT NULL",
51                "id_objet"      => "bigint(21) DEFAULT '0' NOT NULL",
52                "objet" => "VARCHAR (25) DEFAULT '' NOT NULL",
53        );
54
55$spip_documents_liens_key = array(
56                "PRIMARY KEY"           => "id_job,id_objet,objet",
57                "KEY id_job"    => "id_job");
58
59        $tables_auxiliaires['spip_jobs_liens'] = array(
60                'field' => &$spip_jobs_liens,
61                'key' => &$spip_documents_liens_key);
62        return $tables_auxiliaires;
63}
64
65function queue_upgrade($nom_meta_base_version,$version_cible){
66        $current_version = 0.0;
67        if (   (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
68                        || (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
69                include_spip('base/abstract_sql');
70                if (version_compare($current_version,"0.2.0",'<')){
71                        include_spip('base/serial');
72                        include_spip('base/auxiliaires');
73                        include_spip('base/create');
74                        creer_base();
75                        ecrire_meta($nom_meta_base_version,$current_version=$version_cible,'non');
76                }
77                if (version_compare($current_version,"0.3.0",'<')){
78                        include_spip('base/serial');
79                        include_spip('base/auxiliaires');
80                        include_spip('base/create');
81                        maj_tables(array('spip_jobs'));
82                        // mettre a jour les md5args
83                        $res = sql_select("id_job,args", "spip_jobs", "md5args=''");
84                        while ($row = sql_fetch($res)){
85                                sql_updateq('spip_jobs', array('md5args'=>md5($row['args'])),"id_job=".intval($row['id_job']));
86                        }
87                        ecrire_meta($nom_meta_base_version,$current_version="0.3.0",'non');
88                }
89                if (version_compare($current_version,"0.3.1",'<')){
90                        sql_alter("table spip_jobs change md5args md5args char(32) NOT NULL default ''");
91                        ecrire_meta($nom_meta_base_version,$current_version="0.3.1",'non');
92                }
93                if (version_compare($current_version,"0.3.2",'<')){
94                        sql_alter("table spip_jobs change args args longblob DEFAULT '' NOT NULL");
95                        sql_alter("table spip_jobs add index status (status)");
96                        ecrire_meta($nom_meta_base_version,$current_version="0.3.2",'non');
97                }
98
99        }
100        // replanifier les taches cron quand on passe ici
101        include_spip('inc/genie');
102        genie_queue_watch_dist();
103}
104
105function queue_vider_tables($nom_meta_base_version) {
106        effacer_meta('queue_next_job_time');
107        effacer_meta($nom_meta_base_version);
108        sql_drop_table("spip_jobs");
109}
110
111
112function queue_install($action,$prefix,$version_cible){
113        $version_base = $GLOBALS[$prefix."_base_version"];
114        switch ($action){
115                case 'test':
116                        $ok = (isset($GLOBALS['meta'][$prefix."_base_version"])
117                                AND version_compare($GLOBALS['meta'][$prefix."_base_version"],$version_cible,">="));
118                        if ($ok){
119                                // replanifier les taches cron quand on passe ici
120                                include_spip('inc/genie');
121                                genie_queue_watch_dist();
122                        }
123                        return $ok;
124                        break;
125                case 'install':
126                        queue_upgrade($prefix."_base_version",$version_cible);
127                        break;
128                case 'uninstall':
129                        queue_vider_tables($prefix."_base_version");
130                        break;
131        }
132}
133
134?>
Note: See TracBrowser for help on using the repository browser.