/** * Met à jour les tables SQL paquets et plugins pour qui concerne * les paquets locaux (ceux présents sur le site). * * On ne met à jour que ce qui a changé, sauf si on force le recalcule * de toutes les informations locales avec var_mode=vider_paquets_locaux * dans l'URL ou en mettant le paramètre $force à true. * * @param bool $force * - false : n'actualise que les paquets modifiés * - true : efface et recrée la liste de tous les paquets locaux * @param array $erreurs_xml * Si des erreurs XML sont présentes, elles se retrouvent dans ce tableau * @return string * Temps d'exécution **/ function svp_actualiser_paquets_locaux($force = false, &$erreurs_xml = array()) { spip_timer('paquets_locaux'); $paquets = svp_descriptions_paquets_locaux($erreurs_xml); // un mode pour tout recalculer sans désinstaller le plugin... ! if ($force or _request('var_mode') == 'vider_paquets_locaux') { svp_base_supprimer_paquets_locaux(); svp_base_inserer_paquets_locaux($paquets); } else { svp_base_modifier_paquets_locaux($paquets); } svp_base_actualiser_paquets_actifs(); $temps = spip_timer('paquets_locaux'); #spip_log('svp_actualiser_paquets_locaux', 'SVP'); #spip_log($temps, 'SVP'); return "Éxécuté en : " . $temps; }
/** * Suppression d'un dépot et de son contenu (paquets, plugins) dans la base de données * * Cette suppression entraîne des recalcul comme les versions maximales * des plugins téléchargeables qui peuvent changer. * * @param int $id * Identifiant du dépot * @return bool * false si le dépot n'est pas trouvé, true sinon */ function svp_supprimer_depot($id) { $id = intval($id); // Pas de depot a cet id ? if (!($id_depot = sql_getfetsel('id_depot', 'spip_depots', 'id_depot=' . sql_quote($id)))) { return false; } // on calcule les versions max des plugins heberges par le depot $vmax = array(); if ($resultats = sql_allfetsel('id_plugin, version', 'spip_paquets', 'id_depot=' . sql_quote($id))) { foreach ($resultats as $paquet) { $id_plugin = $paquet['id_plugin']; if (!isset($vmax[$id_plugin]) or spip_version_compare($vmax[$id_plugin], $paquet['version'], '<')) { $vmax[$id_plugin] = $paquet['version']; } } } // On supprime les paquets heberges par le depot sql_delete('spip_paquets', 'id_depot=' . sql_quote($id_depot)); // Si on est pas en mode runtime, on utilise surement l'espace public pour afficher les plugins. // Il faut donc verifier que les urls suivent bien la mise à jour // Donc avant de nettoyer la base des plugins du depot ayant disparus on supprime toutes les urls // associees a ce depot : on les recreera apres le nettoyage if (!_SVP_MODE_RUNTIME) { svp_actualiser_url_plugins($id_depot); } // Nettoyer les autres relations à ce dépot svp_nettoyer_apres_suppression($id_depot, $vmax); // Si on est pas en mode runtime, on utilise surement l'espace public pour afficher les plugins. // Il faut donc s'assurer que les urls suivent bien la mise à jour // - on supprime toutes les urls plugin // - on les regenere pour la liste des plugins mise a jour if (!_SVP_MODE_RUNTIME) { svp_actualiser_url_plugins($id_depot); } // On supprime le depot lui-meme sql_delete('spip_depots', 'id_depot=' . sql_quote($id_depot)); // on supprime les paquets locaux pour reactualisation include_spip('inc/svp_depoter_local'); svp_base_supprimer_paquets_locaux(); return true; }