Ejemplo n.º 1
0
/**
 * Un parametre permet de forcer le statut (exemple: plugin antispam)
 *
 * http://code.spip.net/@inc_forum_insert_dist
 *
 * @param $objet
 * @param $id_objet
 * @param $id_forum
 *   en reponse a
 * @param null $force_statut
 * @return bool
 */
function inc_forum_insert_dist($objet, $id_objet, $id_forum, $force_statut = null)
{
    if (!in_array($force_statut, array('privrac', 'privadm'))) {
        if (!strlen($objet) or !intval($id_objet)) {
            spip_log("Erreur insertion forum sur objet='{$objet}', id_objet={$id_objet}", 'forum.' . _LOG_ERREUR);
            return 0;
        }
    }
    spip_log("insertion de forum {$force_statut} sur {$objet} {$id_objet} (+{$id_forum})", 'forum');
    include_spip('inc/filtres');
    include_spip('inc/modifier');
    include_spip('inc/session');
    $champs = objet_info('forum', 'champs_editables');
    $c = collecter_requests($champs, array());
    $c['statut'] = 'off';
    $c['objet'] = $objet;
    $c['id_objet'] = $id_objet;
    $c['auteur'] = sinon(session_get('nom'), session_get('session_nom'));
    $c['email_auteur'] = sinon(session_get('email'), session_get('session_email'));
    $c = pipeline('pre_edition', array('args' => array('table' => 'spip_forum', 'id_objet' => $id_forum, 'action' => 'instituer'), 'data' => forum_insert_statut($c, $force_statut)));
    $id_reponse = forum_insert_base($c, $id_forum, $objet, $id_objet, $c['statut'], _request('ajouter_mot'));
    if (!$id_reponse) {
        spip_log("Echec insertion forum sur {$objet} {$id_objet} (+{$id_forum})", 'forum.' . _LOG_ERREUR);
    } else {
        spip_log("forum insere' {$id_reponse} sur {$objet} {$id_objet} (+{$id_forum})", 'forum');
    }
    return $id_reponse;
}
Ejemplo n.º 2
0
/**
 * Modifier un mot
 * @param int $id_mot
 * @param array $set
 * @return string
 */
function mot_modifier($id_mot, $set = null)
{
    include_spip('inc/modifier');
    $c = collecter_requests(array('titre', 'descriptif', 'texte', 'id_groupe'), array('id_groupe'), $set);
    if ($err = objet_modifier_champs('mot', $id_mot, array('nonvide' => array('titre' => _T('info_sans_titre'))), $c)) {
        return $err;
    }
    $c = collecter_requests(array('id_groupe', 'type'), array(), $set);
    $err = mot_instituer($id_mot, $c);
    return $err;
}
/**
 * Modifier une souscription
 *
 * $c est un contenu (par defaut on prend le contenu via _request())
 *
 * @param int $id_souscription
 * @param array|bool $set
 * @return string
 */
function souscription_modifier($id_souscription, $set = false)
{
    include_spip('inc/modifier');
    $c = collecter_requests(objet_info('souscription', 'champs_editables'), array(), $set);
    /* Récupération du nom du pays */
    $code_pays = _request('pays');
    $pays = sql_getfetsel(sql_multi("nom", $GLOBALS['spip_lang']), 'spip_pays', "code=" . sql_quote($code_pays));
    $c = array_merge($c, array("pays" => $pays));
    if ($err = objet_modifier_champs('souscription', $id_souscription, array(), $c)) {
        return $err;
    }
}
Ejemplo n.º 4
0
/**
 * Mettre a jour une petition existante
 * 
 * @param int $id_petition
 * @param array $set
 * @return string
 */
function petition_modifier($id_petition, $set = null)
{
    $err = '';
    include_spip('inc/modifier');
    $c = collecter_requests(array("email_unique", "site_obli", "site_unique", "message", "texte"), array('statut', 'id_article'), $set);
    if ($err = objet_modifier_champs('petition', $id_petition, array(), $c)) {
        return $err;
    }
    // changement d'article ou de statut ?
    $c = collecter_requests(array('statut', 'id_article'), array(), $set);
    $err .= petition_instituer($id_petition, $c);
    return $err;
}
Ejemplo n.º 5
0
/**
 * Mettre a jour une signature existante
 * 
 * @param int $id_signature
 * @param array $set
 * @return string
 */
function signature_modifier($id_signature, $set = null)
{
    $err = '';
    include_spip('inc/modifier');
    $c = collecter_requests(array("nom_email", "ad_email", "nom_site", "url_site", "message", "statut"), array('statut', 'id_petition', 'date_time'), $set);
    if ($err = objet_modifier_champs('signature', $id_signature, array('nonvide' => array('nom_email' => _T('info_sans_titre'))), $c)) {
        return $err;
    }
    // Modification de statut
    $c = collecter_requests(array('statut', 'id_petition', 'date_time'), array(), $set);
    $err .= signature_instituer($id_signature, $c);
    return $err;
}
Ejemplo n.º 6
0
/**
 * Modifier une breve en base
 * $c est un contenu (par defaut on prend le contenu via _request())
 *
 * http://code.spip.net/@revisions_breves
 *
 * @param int $id_breve
 * @param array $set
 * @return string|bool
 */
function breve_modifier($id_breve, $set = null)
{
    include_spip('inc/modifier');
    $c = collecter_requests(array('titre', 'texte', 'lien_titre', 'lien_url'), array('id_parent', 'statut'), $set);
    // Si la breve est publiee, invalider les caches et demander sa reindexation
    $t = sql_getfetsel("statut", "spip_breves", "id_breve={$id_breve}");
    if ($t == 'publie') {
        $invalideur = "id='breve/{$id_breve}'";
        $indexation = true;
    }
    if ($err = objet_modifier_champs('breve', $id_breve, array('nonvide' => array('titre' => _T('breves:titre_nouvelle_breve') . " " . _T('info_numero_abbreviation') . $id_breve), 'invalideur' => $invalideur, 'indexation' => $indexation), $c)) {
        return $err;
    }
    $c = collecter_requests(array('id_parent', 'statut'), array(), $set);
    $err = breve_instituer($id_breve, $c);
    return $err;
}
Ejemplo n.º 7
0
/**
 * Modifier une zone en base
 * $c est un contenu (par defaut on prend le contenu via _request())
 *
 * @param int $id_zone
 * @param array $set
 * @return string|bool
 */
function zone_modifier($id_zone, $set = null)
{
    include_spip('inc/modifier');
    $c = collecter_requests(array('titre', 'descriptif', 'publique', 'privee'), array(), $set);
    // Si la zone est publiee, invalider les caches et demander sa reindexation
    $invalideur = $indexation = '';
    $t = sql_getfetsel("statut", "spip_zones", "id_zone={$id_zone}");
    if ($t == 'publie') {
        $invalideur = "id='zone/{$id_zone}'";
        $indexation = true;
    }
    if ($err = objet_modifier_champs('zone', $id_zone, array('nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation), $c)) {
        return $err;
    }
    zone_lier($id_zone, 'rubrique', _request('rubriques'), 'set');
    return $err;
}
Ejemplo n.º 8
0
/**
 * Modifier un groupe de mot
 * @param int $id_groupe
 * @param array|null $set
 * @return string
 */
function groupemots_modifier($id_groupe, $set = null)
{
    $err = '';
    include_spip('inc/modifier');
    $c = collecter_requests(array('titre', 'descriptif', 'texte', 'tables_liees', 'obligatoire', 'unseul', 'comite', 'forum', 'minirezo'), array(), $set);
    // normaliser les champ oui/non
    foreach (array('obligatoire', 'unseul', 'comite', 'forum', 'minirezo') as $champ) {
        if (isset($c[$champ])) {
            $c[$champ] = $c[$champ] == 'oui' ? 'oui' : 'non';
        }
    }
    if (isset($c['tables_liees']) and is_array($c['tables_liees'])) {
        $c['tables_liees'] = implode(',', array_diff($c['tables_liees'], array('')));
    }
    $err = objet_modifier_champs('groupe_mot', $id_groupe, array('nonvide' => array('titre' => _T('info_sans_titre'))), $c);
    return $err;
}
/**
 * Appelle toutes les fonctions de modification d'un objet
 * $err est un message d'erreur eventuelle
 *
 * @param string 'spip_reservation_credit_mouvement'
 * @param int $id
 * @param array|null $set
 * @return mixed|string
 */
function reservation_credit_modifier($id, $set = null)
{
    spip_log($ste, 'teste');
    $table_sql = 'spip_reservation_credits';
    $trouver_table = charger_fonction('trouver_table', 'base');
    $desc = $trouver_table($table_sql);
    if (!$desc or !isset($desc['field'])) {
        spip_log("Objet 'spip_reservation_credit_mouvement' inconnu dans objet_modifier", _LOG_ERREUR);
        return _L("Erreur objet 'spip_reservation_credit_mouvement' inconnu");
    }
    include_spip('inc/modifier');
    $champ_date = 'date_creation';
    $white = array_keys($desc['field']);
    // on ne traite pas la cle primaire par defaut, notamment car
    // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
    $white = array_diff($white, array($desc['key']['PRIMARY KEY']));
    if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) {
        $white = $desc['champs_editables'];
    }
    $c = collecter_requests($white, array($champ_date, 'statut', 'id_parent', 'id_secteur'), $set);
    $c['id_reservation_credit'] = $id_reservation_credit;
    // Si l'objet est publie, invalider les caches et demander sa reindexation
    if (objet_test_si_publie('reservation_credit', $id)) {
        $invalideur = "id='reservation_credit_mouvement/{$id}'";
        $indexation = true;
    } else {
        $invalideur = "";
        $indexation = false;
    }
    if ($err = objet_modifier_champs('reservation_credit', $id, array('nonvide' => '', 'invalideur' => $invalideur, 'indexation' => $indexation, 'date_modif' => isset($desc['field']['date_modif']) ? 'date_modif' : ''), $c)) {
        return $err;
    }
    // Modification de statut, changement de rubrique ?
    // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
    //         le tableau $set hors black liste, mais du coup on a possiblement des champs en trop.
    $c = collecter_requests(array($champ_date, 'statut', 'id_parent'), array(), $set);
    $err = objet_instituer('reservation_credit', $id, $c);
    return $err;
}
Ejemplo n.º 10
0
/**
 * Appelle toutes les fonctions de modification d'un article
 * $err est de la forme chaine de langue ou vide si pas d'erreur
 * http://doc.spip.org/@articles_set
 *
 * @param  $id_article
 * @param null $set
 * @return string
 */
function article_modifier($id_article, $set = null)
{
    // unifier $texte en cas de texte trop long
    trop_longs_articles();
    include_spip('inc/modifier');
    include_spip('inc/filtres');
    $c = collecter_requests(objet_info('article', 'champs_editables'), array('date', 'statut', 'id_parent'), $set);
    // Si l'article est publie, invalider les caches et demander sa reindexation
    $t = sql_getfetsel("statut", "spip_articles", "id_article=" . intval($id_article));
    $invalideur = $indexation = false;
    if ($t == 'publie') {
        $invalideur = "id='article/{$id_article}'";
        $indexation = true;
    }
    if ($err = objet_modifier_champs('article', $id_article, array('nonvide' => array('titre' => _T('info_nouvel_article') . " " . _T('info_numero_abbreviation') . $id_article), 'invalideur' => $invalideur, 'indexation' => $indexation, 'date_modif' => 'date_modif'), $c)) {
        return $err;
    }
    // Modification de statut, changement de rubrique ?
    $c = collecter_requests(array('date', 'statut', 'id_parent'), array(), $set);
    $err = article_instituer($id_article, $c);
    return $err;
}
Ejemplo n.º 11
0
/**
 * Appelle toutes les fonctions de modification d'un auteur
 *
 * @param int $id_auteur
 * @param array $set
 * @param bool $force_update
 *   permet de forcer la maj en base des champs fournis, sans passer par instancier
 *   utilise par auth/spip
 * @return string
 */
function auteur_modifier($id_auteur, $set = null, $force_update = false)
{
    include_spip('inc/modifier');
    include_spip('inc/filtres');
    $c = collecter_requests(objet_info('auteur', 'champs_editables'), $force_update ? array() : array('webmestre', 'pass', 'login'), $set);
    if ($err = objet_modifier_champs('auteur', $id_auteur, array('nonvide' => array('nom' => _T('ecrire:item_nouvel_auteur'))), $c)) {
        return $err;
    }
    $session = $c;
    $err = '';
    if (!$force_update) {
        // Modification de statut, changement de rubrique ?
        $c = collecter_requests(array('statut', 'new_login', 'new_pass', 'login', 'pass', 'webmestre', 'restreintes', 'id_parent'), array(), $set);
        if (isset($c['new_login']) and !isset($c['login'])) {
            $c['login'] = $c['new_login'];
        }
        if (isset($c['new_pass']) and !isset($c['pass'])) {
            $c['pass'] = $c['new_pass'];
        }
        $err = auteur_instituer($id_auteur, $c);
        $session = array_merge($session, $c);
    }
    // .. mettre a jour les sessions de cet auteur
    include_spip('inc/session');
    $session['id_auteur'] = $id_auteur;
    unset($session['new_login']);
    unset($session['new_pass']);
    actualiser_sessions($session);
    return $err;
}
Ejemplo n.º 12
0
/**
 * Modifier une rubrique en base
 *
 * @param int $id_rubrique
 *     Identifiant de la rubrique modifiée
 * @param array|null $set
 *     Tableau qu'on peut proposer en lieu et place de _request()
 * @return bool|string
 *     - false  : Aucune modification, aucun champ n'est à modifier
 *     - chaîne vide : Vide si tout s'est bien passé
 *     - chaîne : Texte d'un message d'erreur
 */
function rubrique_modifier($id_rubrique, $set = null)
{
    include_spip('inc/autoriser');
    include_spip('inc/filtres');
    include_spip('inc/modifier');
    $c = collecter_requests(objet_info('rubrique', 'champs_editables'), array('id_parent', 'confirme_deplace'), $set);
    if ($err = objet_modifier_champs('rubrique', $id_rubrique, array('data' => $set, 'nonvide' => array('titre' => _T('titre_nouvelle_rubrique') . " " . _T('info_numero_abbreviation') . $id_rubrique)), $c)) {
        return $err;
    }
    $c = collecter_requests(array('id_parent', 'confirme_deplace'), array(), $set);
    // Deplacer la rubrique
    if (isset($c['id_parent'])) {
        $err = rubrique_instituer($id_rubrique, $c);
    }
    // invalider les caches marques de cette rubrique
    include_spip('inc/invalideur');
    suivre_invalideur("id='rubrique/{$id_rubrique}'");
    // et celui de menu_rubriques
    effacer_meta("date_calcul_rubriques");
    return $err;
}
/**
 * Appelle toutes les fonctions de modification d'un objet
 * $err est un message d'erreur eventuelle
 *
 * @param int $id
 * @param array|null $set
 * @return mixed|string
 */
function reservation_credit_mouvement_modifier($id, $set = null)
{
    $table_sql = 'spip_reservation_credit_mouvements';
    $trouver_table = charger_fonction('trouver_table', 'base');
    $desc = $trouver_table($table_sql);
    if (!$desc or !isset($desc['field'])) {
        spip_log("Objet 'spip_reservation_credit_mouvement' inconnu dans objet_modifier", _LOG_ERREUR);
        return _L("Erreur objet 'spip_reservation_credit_mouvement' inconnu");
    }
    include_spip('inc/modifier');
    $champ_date = '';
    if (isset($desc['date']) and $desc['date']) {
        $champ_date = $desc['date'];
    } elseif (isset($desc['field']['date'])) {
        $champ_date = 'date';
    }
    $white = array_keys($desc['field']);
    // on ne traite pas la cle primaire par defaut, notamment car
    // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
    $white = array_diff($white, array($desc['key']['PRIMARY KEY']));
    if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) {
        $white = $desc['champs_editables'];
    }
    // Si il n'y pas encore de compte crédit pour l'email en question, on le crée
    $id_reservation_credit = _request('id_reservation_credit') ? _request('id_reservation_credit') : (isset($set['id_reservation_credit']) ? $set['id_reservation_credit'] : '');
    $email = _request('email') ? _request('email') : (isset($set['email']) ? $set['email'] : '');
    if (!$id_reservation_credit) {
        if (!($id_reservation_credit = sql_getfetsel('id_reservation_credit', 'spip_reservation_credits', 'email = ' . sql_quote($email)))) {
            $action = charger_fonction('editer_objet', 'action');
            $reservation_credit = $action('new', 'reservation_credit');
            $id_reservation_credit = $reservation_credit[0];
        }
    }
    $c = collecter_requests($white, array($champ_date, 'statut', 'id_parent', 'id_secteur'), $set);
    $c['id_reservation_credit'] = $id_reservation_credit;
    // Si l'objet est publie, invalider les caches et demander sa reindexation
    if (objet_test_si_publie('reservation_credit_mouvement', $id)) {
        $invalideur = "id='reservation_credit_mouvement/{$id}'";
        $indexation = true;
    } else {
        $invalideur = "";
        $indexation = false;
    }
    if ($err = objet_modifier_champs('reservation_credit_mouvement', $id, array('nonvide' => '', 'invalideur' => $invalideur, 'indexation' => $indexation, 'date_modif' => isset($desc['field']['date_modif']) ? 'date_modif' : ''), $c)) {
        return $err;
    }
    // Modification de statut, changement de rubrique ?
    // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
    //         le tableau $set hors black liste, mais du coup on a possiblement des champs en trop.
    $c = collecter_requests(array($champ_date, 'statut', 'id_parent'), array(), $set);
    $err = objet_instituer('reservation_credit_mouvement', $id, $c);
    // Actualiser le montant de crédit
    $sql = sql_select('montant,type,devise', 'spip_reservation_credit_mouvements', 'id_reservation_credit=' . $id_reservation_credit);
    $montant = array();
    while ($data = sql_fetch($sql)) {
        $id = isset($data['devise']) ? $data['devise'] : 'sans_devise';
        if ($data['type'] == 'credit') {
            $montant[$id] = $montant[$id] + $data['montant'];
        } elseif ($data['type'] == 'debit') {
            $montant[$id] = $montant[$id] - $data['montant'];
        }
    }
    sql_updateq('spip_reservation_credits', array('credit' => serialize($montant)), 'id_reservation_credit=' . $id_reservation_credit);
    return $err;
}
Ejemplo n.º 14
0
function agenda_action_update_repetitions($id_evenement, $repetitions)
{
    // evenement source
    if ($row = sql_fetsel('*', 'spip_evenements', 'id_evenement=' . intval($id_evenement))) {
        // Si ce n'est pas un événement source, on n'a rien à faire ici
        if ($row['id_evenement_source'] != 0) {
            return;
        }
        // On ne garde que les données correctes pour une modification
        $c = collecter_requests(objet_info('evenement', 'champs_editables'), array('id_evenement', 'id_evenement_source'), $row);
        // Savoir si la source était publiée ou pas
        $publie = $row['statut'] == 'publie';
        // On calcule la durée en secondes de l'événement source pour la reporter telle quelle aux répétitions
        $date_debut = strtotime($row['date_debut']);
        $date_fin = strtotime($row['date_fin']);
        $duree = $date_fin - $date_debut;
        $repetitions_updated = array();
        // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu
        $res = sql_select('id_evenement,date_debut', 'spip_evenements', 'id_evenement_source=' . intval($id_evenement));
        while ($row = sql_fetch($res)) {
            $date = strtotime(date('Y-m-d', strtotime($row['date_debut'])));
            if (in_array($date, $repetitions)) {
                // Cette répétition existe déjà, on la met à jour
                $repetitions_updated[] = $date;
                // On calcule les nouvelles dates/heures en reportant la durée de la source
                $update_date_debut = date('Y-m-d', $date) . ' ' . date('H:i:s', $date_debut);
                $update_date_fin = date('Y-m-d H:i:s', strtotime($update_date_debut) + $duree);
                // Seules les dates sont changées dans les champs de la source
                // TODO : prendre en charge la mise a jour uniquement si conforme a l'original
                $c['date_debut'] = $update_date_debut;
                $c['date_fin'] = $update_date_fin;
                // mettre a jour l'evenement
                sql_updateq('spip_evenements', $c, 'id_evenement = ' . $row['id_evenement']);
            } else {
                // il est supprime
                sql_delete('spip_evenements', 'id_evenement=' . $row['id_evenement']);
            }
        }
        // regarder les repetitions a ajouter
        foreach ($repetitions as $date) {
            if (!in_array($date, $repetitions_updated)) {
                // On calcule les dates/heures en reportant la durée de la source
                $update_date_debut = date('Y-m-d', $date) . ' ' . date('H:i:s', $date_debut);
                $update_date_fin = date('Y-m-d H:i:s', strtotime($update_date_debut) + $duree);
                // Seules les dates sont changées dans les champs de la source
                $c['date_debut'] = $update_date_debut;
                $c['date_fin'] = $update_date_fin;
                // On crée la nouvelle répétition
                if ($id_evenement_new = agenda_action_insert_evenement($c['id_article'], $id_evenement)) {
                    // Si c'est bon, on ajoute tous les champs
                    sql_updateq('spip_evenements', $c, 'id_evenement = ' . $id_evenement_new);
                    // Pour les créations il ne faut pas oublier de dupliquer les liens
                    // En effet, sinon les documents insérés avant la création (0-id_auteur) ne seront pas dupliqués
                    include_spip('action/editer_liens');
                    objet_dupliquer_liens('evenement', $id_evenement, $id_evenement_new);
                }
            }
        }
    }
}
Ejemplo n.º 15
0
/**
 * Enregistre une revision de document.
 * $set est un contenu (par defaut on prend le contenu via _request())
 *
 * @param int $id_document
 * @param array|bool $set
 */
function document_modifier($id_document, $set = false)
{
    include_spip('inc/modifier');
    include_spip('inc/filtres');
    // champs normaux
    $champs = collecter_requests(objet_info('document', 'champs_editables'), array('parents', 'ajout_parents'), $set);
    $invalideur = "";
    $indexation = false;
    // Si le document est publie, invalider les caches et demander sa reindexation
    $t = sql_getfetsel("statut", "spip_documents", 'id_document=' . intval($id_document));
    if ($t == 'publie') {
        $invalideur = "id='id_document/{$id_document}'";
        $indexation = true;
    }
    $ancien_fichier = "";
    // si le fichier est modifie, noter le nom de l'ancien pour faire le menage
    if (isset($champs['fichier'])) {
        $ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document));
    }
    if ($err = objet_modifier_champs('document', $id_document, array('invalideur' => $invalideur, 'indexation' => $indexation), $champs)) {
        return $err;
    }
    // nettoyer l'ancien fichier si necessaire
    if ($champs['fichier'] and $ancien_fichier and $ancien_fichier !== $champs['fichier'] and @file_exists($f = get_spip_doc($ancien_fichier))) {
        spip_unlink($f);
    }
    // Changer le statut du document ?
    // le statut n'est jamais fixe manuellement mais decoule de celui des objets lies
    $champs = collecter_requests(array('parents', 'ajouts_parents'), array(), $set);
    if (document_instituer($id_document, $champs)) {
        //
        // Post-modifications
        //
        // Invalider les caches
        include_spip('inc/invalideur');
        suivre_invalideur("id='id_document/{$id_document}'");
    }
}
Ejemplo n.º 16
0
/**
 * Modifier un site
 *
 * $c est un contenu (par defaut on prend le contenu via _request())
 *
 * @param int $id_syndic
 * @param array|bool $set
 * @return string
 */
function site_modifier($id_syndic, $set = false)
{
    $resyndiquer = false;
    include_spip('inc/rubriques');
    include_spip('inc/modifier');
    $c = collecter_requests(array('nom_site', 'url_site', 'descriptif', 'url_syndic', 'syndication', 'moderation', 'miroir', 'oubli', 'resume'), array('statut', 'id_parent', 'date'), $set);
    // resyndiquer si un element de syndication modifie
    if ($t = sql_fetsel('url_syndic,syndication,resume', 'spip_syndic', "id_syndic=" . intval($id_syndic))) {
        foreach ($t as $k => $v) {
            if (isset($c[$k]) and $v != $c[$k]) {
                $resyndiquer = true;
            }
        }
    }
    // Si le site est publie, invalider les caches et demander sa reindexation
    $t = sql_getfetsel("statut", "spip_syndic", "id_syndic=" . intval($id_syndic));
    if ($t == 'publie') {
        $invalideur = "id='site/{$id_syndic}'";
        $indexation = true;
    }
    if ($err = objet_modifier_champs('site', $id_syndic, array('nonvide' => array('nom_site' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation), $c)) {
        return $err;
    }
    if ($resyndiquer and sql_getfetsel('syndication', 'spip_syndic', "id_syndic=" . intval($id_syndic)) !== 'non') {
        $syndiquer_site = charger_fonction('syndiquer_site', 'action');
        $syndiquer_site($id_syndic);
    }
    // Modification de statut, changement de rubrique ?
    $c = collecter_requests(array('date', 'statut', 'id_parent'), array(), $set);
    include_spip('action/editer_objet');
    $err = objet_instituer('site', $id_syndic, $c);
    return $err;
}