source: spip-zone/_outils_/spip-cli/trunk/spip.php @ 93662

Last change on this file since 93662 was 93662, checked in by fil@…, 5 years ago

pas d'erreur date_default_timezone_set sur le spip cli svp

  • Property svn:executable set to *
File size: 5.5 KB
Line 
1#!/usr/bin/env php
2<?php
3// spip
4
5$dossier_cli = dirname(__FILE__);
6
7include_once "$dossier_cli/vendor/autoload.php";
8use Symfony\Component\Console\Application;
9if( ! ini_get('date.timezone') ) { date_default_timezone_set('GMT'); }
10
11/**
12 * Trouver toutes les sous-classes qui étendent une classe donnée
13 *
14 * @param string $parent
15 *              Nom de la classe dont on veut chercher les extensions.
16 * @return array
17 *              Retourne un tableau de chaînes contenant chacune le nom d'une classe.
18 */
19function getSubclassesOf($parent) {
20        $result = array();
21        foreach (get_declared_classes() as $class) {
22                if (is_subclass_of($class, $parent)) {
23                        $result[] = $class;
24                }
25        }
26        return $result;
27}
28
29/**
30 * Transforme un chemin avec les bons séparateurs de dossiers
31 *
32 * Si on est sur un OS qui n'utilise pas des / comme séparateur de
33 * dossier dans les chemins, on remplace les / par le bon
34 * séparateur.
35 *
36 * @param string $path
37 *              Un chemin au format UNIX.
38 * @return string
39 *              Retourne le même chemin au format approprié à
40 *              l'environnement dans lequel on se trouve.
41 */
42function prep_path($path) {
43        if (DIRECTORY_SEPARATOR !== '/') {
44                return str_replace('/', DIRECTORY_SEPARATOR, $path);
45        } else {
46                return $path;
47        }
48}
49
50/**
51 * Cherche la racine d'un site SPIP
52 *
53 * Retourne le chemin absolu vers la racine du site SPIP dans
54 * lequel se trouve le répertoire courant. Retourne FALSE si l'on
55 * est pas dans l'arborescence d'un site SPIP.
56 *
57 * @return string|bool
58 *              Retourne le chemin vers la racine du SPIP dans lequel on se trouve.
59 *              Retourne false si on n'est pas dans l'arborescence d'une installation SPIP.
60 */
61function spip_chercher_racine() {
62        $cwd = getcwd();
63
64        while ($cwd) {
65                if (file_exists(prep_path("$cwd/ecrire/inc_version.php"))) {
66                    return $cwd;
67                } else {
68                        /* On remonte d'un dossier dans l'arborescence */
69                        $cwd_array = explode(DIRECTORY_SEPARATOR, $cwd);
70                        array_pop($cwd_array);
71                        $cwd = implode(DIRECTORY_SEPARATOR, $cwd_array);
72                }
73        }
74
75        return false;
76}
77
78/**
79 * Lance le SPIP dans lequel on se trouve
80 *
81 * Inclut ecrire/inc_version.php, ce qui permet ensuite d'utiliser
82 * toutes les fonctions de SPIP comme lors du chargement d'une
83 * page.
84 *
85 * @param string $spip_racine
86 *              Le chemin vers la racine du SPIP que l'on veut charger.
87 * @return bool
88 *              Retourne true si on a pu charger SPIP correctement, false sinon.
89 */
90function spip_charger($spip_racine) {
91        // On liste toutes les globales déclarées au démarrage de SPIP (55 !!)
92        global
93                $nombre_de_logs,
94                $taille_des_logs,
95                $table_prefix,
96                $cookie_prefix,
97                $dossier_squelettes,
98                $filtrer_javascript,
99                $type_urls,
100                $debut_date_publication,
101                $ip,
102                $mysql_rappel_connexion,
103                $mysql_rappel_nom_base,
104                $test_i18n,
105                $ignore_auth_http,
106                $ignore_remote_user,
107                $derniere_modif_invalide,
108                $quota_cache,
109                $home_server,
110                $help_server,
111                $url_glossaire_externe,
112                $tex_server,
113                $traiter_math,
114                $xhtml,
115                $xml_indent,
116                $source_vignettes,
117                $formats_logos,
118                $controler_dates_rss,
119                $spip_pipeline,
120                $spip_matrice,
121                $plugins,
122                $surcharges,
123                $exceptions_des_tables,
124                $tables_principales,
125                $table_des_tables,
126                $tables_auxiliaires,
127                $table_primary,
128                $table_date,
129                $table_titre,
130                $tables_jointures,
131                $liste_des_statuts,
132                $liste_des_etats,
133                $liste_des_authentifications,
134                $spip_version_branche,
135                $spip_version_code,
136                $spip_version_base,
137                $spip_sql_version,
138                $spip_version_affichee,
139                $visiteur_session,
140                $auteur_session,
141                $connect_statut,
142                $connect_toutes_rubriques,
143                $hash_recherche,
144                $hash_recherche_strict,
145                $ldap_present,
146                $meta,
147                $connect_id_rubrique;
148
149        // Pour que les include dans les fichiers php de SPIP fonctionnent correctement,
150        // il faut être à la racine du site.
151        // On change de répertoire courant le temps de charger tout ça.
152        $cwd = getcwd();
153        chdir($spip_racine);
154       
155        // Si jamais la base n'est pas installé on anhile la redirection et on affirme qu'on est sur la page d'installation
156        if (!is_file('config/connect.php')) {
157                $_GET['exec'] = 'install';
158                define('_FILE_CONNECT', 'config/connect.tmp.php');
159        }
160       
161        // TIMEOUT de 24h…
162        define('_UPGRADE_TIME_OUT', 24*3600);
163       
164        // On charge la machinerie de SPIP
165        include_once prep_path("$spip_racine/ecrire/inc_version.php");
166
167        // On revient dans le répertoire dans lequel la commande a été appelée
168        chdir($cwd);
169
170        // Si _ECRIRE_INC_VERSION existe, inc_version.php a été chargé correctement
171        if (_ECRIRE_INC_VERSION) {
172                // Charge l'API SQL, pour être sûr de l'avoir déjà
173                include_spip('base/abstract_sql');
174                // Tout s'est bien passé
175                return TRUE;
176        } else {
177                // Mauvais chargement
178                return FALSE;
179        }
180}
181
182// Création de la ligne de commande
183$spip = new Application('Ligne de commande pour SPIP', '0.2.2');
184
185// Inclusion des fichiers contenant les commandes de base
186foreach (glob("$dossier_cli/spip-cli/*.php") as $commande_fichier) {
187        include_once $commande_fichier;
188}
189
190if (($spip_racine = spip_chercher_racine()) and spip_charger($spip_racine)) {
191    $spip_loaded = TRUE;
192
193    // charger toutes les commandes qui se trouvent dans le path de SPIP.
194    $cwd = getcwd();
195    chdir($spip_racine);
196    $commandes = find_all_in_path('spip-cli/', '.*[.]php$');
197    foreach ($commandes as $commande_fichier) {
198        include_once $commande_fichier;
199    }
200    chdir($cwd);
201} else {
202    $spip_loaded = FALSE;
203}
204
205// Ajouter automatiquement toutes les commandes trouvées (= un objet de chaque classe Command)
206if ($commandes = getSubclassesOf('Symfony\Component\Console\Command\Command')){
207        foreach ($commandes as $class){
208        $spip->add(new $class);
209        }
210}
211
212// Lancement de l'application
213$spip->run();
214
Note: See TracBrowser for help on using the repository browser.