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'])); }
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); } } } } }