Пример #1
0
function inc_profils_fusionner_dist($id_auteur, $id_import)
{
    spip_log($s = "Fusion auteur #{$id_import} => #{$id_auteur}", "profils" . _LOG_INFO_IMPORTANTE);
    // dupliquer les liens
    include_spip('action/editer_liens');
    objet_dupliquer_liens('auteur', $id_import, $id_auteur);
    // supprimer les liens
    objet_dissocier(array('auteur' => $id_import), '*');
    objet_dissocier('*', array('auteur' => $id_import));
    // changer le id_auteur dans toutes les tables qui en ont un
    $tables = lister_tables_objets_sql();
    foreach ($tables as $table_sql => $desc) {
        if (isset($desc['field']['id_auteur'])) {
            spip_log("{$table_sql} : id_auteur #{$id_import} => #{$id_auteur}", "profils" . _LOG_INFO_IMPORTANTE);
            sql_updateq($table_sql, array('id_auteur' => $id_auteur), 'id_auteur=' . intval($id_import));
        }
    }
    // log/poubelle sur l'import
    $log = date('Y-m-d H:i:s') . ' par #' . $GLOBALS['visiteur_session']['id_auteur'] . ' : ' . $s . "\n";
    $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_import));
    $set = array("statut" => "5poubelle", "email" => $auteur['email'] . "-xxdoublon", "login" => $auteur['login'] . "-xxdoublon", 'log' => $auteur['log'] . $log);
    sql_updateq("spip_auteurs", $set, "id_auteur=" . intval($auteur['id_auteur']));
    // log sur le nouveau
    $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
    $set = array('log' => $auteur['log'] . $log);
    sql_updateq("spip_auteurs", $set, "id_auteur=" . intval($auteur['id_auteur']));
}
Пример #2
0
function formulaires_editer_objet_traiter($type, $id = 'new', $id_parent = 0, $lier_trad = 0, $retour = '', $config_fonc = 'articles_edit_config', $row = array(), $hidden = '')
{
    $res = array();
    // eviter la redirection forcee par l'action...
    set_request('redirect');
    if ($action_editer = charger_fonction("editer_{$type}", 'action', true)) {
        list($id, $err) = $action_editer($id);
    } else {
        $action_editer = charger_fonction("editer_objet", 'action');
        list($id, $err) = $action_editer($id, $type);
    }
    $id_table_objet = id_table_objet($type);
    $res[$id_table_objet] = $id;
    if ($err or !$id) {
        $res['message_erreur'] = $err ? $err : _T('erreur');
    } else {
        // Un lien de trad a prendre en compte
        if ($lier_trad) {
            // referencer la traduction
            $referencer_traduction = charger_fonction('referencer_traduction', 'action');
            $referencer_traduction($type, $id, $lier_trad);
            // dupliquer tous les liens sauf les auteurs : le nouvel auteur est celui qui traduit
            // cf API editer_liens
            include_spip('action/editer_liens');
            objet_dupliquer_liens($type, $lier_trad, $id, null, array('auteur'));
        }
        $res['message_ok'] = _T('info_modification_enregistree');
        if ($retour) {
            if (strncmp($retour, 'javascript:', 11) == 0) {
                $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>';
                $res['editable'] = true;
            } else {
                $res['redirect'] = parametre_url($retour, $id_table_objet, $id);
            }
        }
    }
    return $res;
}
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);
                }
            }
        }
    }
}