=')); break; case 'install': if (function_exists($upgrade = $prefix . "_upgrade")) { $upgrade($nom_meta, $version_cible, $table); } break; case 'uninstall': if (function_exists($vider_tables = $prefix . "_vider_tables")) { $vider_tables($nom_meta, $table); } break; } } /** * Compare 2 numéros de version entre elles. * * Cette fonction est identique (arguments et retours) a la fonction PHP * version_compare() qu'elle appelle. Cependant, cette fonction reformate * les numeros de versions pour ameliorer certains usages dans SPIP ou bugs * dans PHP. On permet ainsi de comparer 3.0.4 à 3.0.* par exemple. * * @param string $v1 * Numero de version servant de base a la comparaison. * Ce numero ne peut pas comporter d'etoile. * @param string $v2 * Numero de version a comparer. * Il peut posseder des etoiles tel que 3.0.* * @param string $op * Un operateur eventuel (<, >, <=, >=, =, == ...) * @return int|bool * Sans operateur : int. -1 pour inferieur, 0 pour egal, 1 pour superieur * Avec operateur : bool. **/ function spip_version_compare($v1, $v2, $op = null) { $v1 = strtolower(preg_replace(',([0-9])[\s-.]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v1)); $v2 = strtolower(preg_replace(',([0-9])[\s-.]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v2)); $v1 = str_replace('rc', 'RC', $v1); // certaines versions de PHP ne comprennent RC qu'en majuscule $v2 = str_replace('rc', 'RC', $v2); // certaines versions de PHP ne comprennent RC qu'en majuscule $v1 = explode('.', $v1); $v2 = explode('.', $v2); // $v1 est toujours une version, donc sans etoile while (count($v1) < count($v2)) { $v1[] = '0'; } // $v2 peut etre une borne, donc accepte l'etoile $etoile = false; foreach ($v1 as $k => $v) { if (!isset($v2[$k])) { $v2[] = ($etoile and (is_numeric($v) or $v == 'pl' or $v == 'p')) ? $v : '0'; } else { if ($v2[$k] == '*') { $etoile = true; $v2[$k] = $v; } } } $v1 = implode('.', $v1); $v2 = implode('.', $v2); return $op ? version_compare($v1, $v2, $op) : version_compare($v1, $v2); } /** * Retourne un tableau des plugins activés sur le site * * Retourne la meta `plugin` désérialisée. * Chaque élément du tableau est lui-même un tableau contenant * les détails du plugin en question : répertoire et version. * * @note * Si le contenu de la meta n’est pas un tableau, cette fonction transforme * l’ancien format en tableau sérialisé pour être conforme au nouveau fonctionnement (SPIP >= 1.9.2) * * @return array Tableau des plugins actifs **/ function liste_plugin_actifs() { $liste = isset($GLOBALS['meta']['plugin']) ? $GLOBALS['meta']['plugin'] : ''; if (!$liste) { return array(); } if (!is_array($liste = unserialize($liste))) { // compatibilite pre 1.9.2, mettre a jour la meta spip_log("MAJ meta plugin vieille version : $liste", "plugin"); $new = true; list(, $liste) = liste_plugin_valides(explode(",", $liste)); } else { $new = false; // compat au moment d'une migration depuis version anterieure // si pas de dir_type, alors c'est _DIR_PLUGINS foreach ($liste as $prefix => $infos) { if (!isset($infos['dir_type'])) { $liste[$prefix]['dir_type'] = "_DIR_PLUGINS"; $new = true; } } } if ($new) { ecrire_meta('plugin', serialize($liste)); } return $liste; }