/** * Après modification en base d'un lien, versionner l'objet si nécessaire * * @param array $x Données du pipeline * @return array $x Données du pipeline */ function revisions_post_edition_lien($x) { /*pipeline('post_edition_lien', array( 'args' => array( 'table_lien' => $table_lien, 'objet_source' => $objet_source, 'id_objet_source' => $l[$primary], 'objet' => $l['objet'], 'id_objet' => $id_o, 'action'=>'delete', ), 'data' => $couples ) */ if (intval($x['args']['id_objet_source']) > 0 and intval($x['args']['id_objet']) > 0) { $table = table_objet_sql($x['args']['objet']); $id_objet = $x['args']['id_objet']; include_spip('inc/revisions'); if (isset($GLOBALS['premiere_revision']["{$table}:" . $id_objet])) { $GLOBALS['premiere_revision']["{$table}:" . $id_objet] = 0; } elseif ($versionnes = liste_champs_versionnes($table) and in_array($j = 'jointure_' . table_objet($x['args']['objet_source']), $versionnes)) { $champs = array($j => recuperer_valeur_champ_jointure($x['args']['objet'], $id_objet, $x['args']['objet_source'])); ajouter_version($id_objet, $x['args']['objet'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']); } $table = table_objet_sql($x['args']['objet_source']); $id_objet = $x['args']['id_objet_source']; if (isset($GLOBALS['premiere_revision']["{$table}:" . $id_objet])) { $GLOBALS['premiere_revision']["{$table}:" . $id_objet] = 0; } elseif ($versionnes = liste_champs_versionnes($table) and in_array($j = 'jointure_' . table_objet($x['args']['objet']), $versionnes)) { $champs = array($j => recuperer_valeur_champ_jointure($x['args']['objet_source'], $id_objet, $x['args']['objet'])); ajouter_version($id_objet, $x['args']['objet_source'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']); } } return $x; }
/** * Créer la première révision d'un objet si nécessaire * * À faire notamment si on vient d'activer l'extension et qu'on fait une modif * sur un objet qui était déjà en base, mais non versionné * * La fonction renvoie le numéro de la dernière version de l'objet, * et 0 si pas de version pour cet objet * * @param string $table * @param string $objet * @param int $id_objet * @param array $champs * @param int $id_auteur * @return int */ function verifier_premiere_revision($table, $objet, $id_objet, $champs = null, $id_auteur = 0) { $id_table_objet = id_table_objet($objet); if (!$champs) { $champs = liste_champs_versionnes($table); } if (!$champs) { return false; } if (!($id_version = sql_getfetsel('id_version', 'spip_versions', "id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet), '', 'id_version DESC', '0,1'))) { // recuperer toutes les valeurs actuelles des champs // pour l'objet $originaux = sql_fetsel("*", $table, "{$id_table_objet}=" . intval($id_objet)); $premiere = false; foreach ($champs as $v) { if (isset($originaux[$v])) { $champs_originaux[$v] = $originaux[$v]; } else { if (strncmp($v, 'jointure_', 9) == 0) { $champs_originaux[$v] = recuperer_valeur_champ_jointure($objet, $id_objet, substr($v, 9)); } } if (isset($champs_originaux[$v]) and strlen($originaux[$v])) { $premiere = true; } } // Si un champ est non vide, // il faut creer une premiere revision if ($premiere) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); // "trouver" une date raisonnable pour la version initiale $date_modif = ""; foreach (array('date_modif', 'maj') as $d) { if (!$date_modif and isset($originaux[$d]) and $t = strtotime($d)) { $date_modif = date("Y-m-d H:i:s", $t); } } if (!$date_modif and isset($desc['date']) and isset($originaux[$desc['date']])) { $date_modif = $originaux[$desc['date']]; } elseif (!$date_modif) { $date_modif = date("Y-m-d H:i:s", time() - 7200); } if ($id_version = ajouter_version($id_objet, $objet, $champs_originaux, _T('revisions:version_initiale'), $id_auteur)) { sql_updateq('spip_versions', array('date' => $date_modif), "id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet) . " AND id_version={$id_version}"); } } } return $id_version; }
function enregistrer_nouvelle_revision($x) { if ($GLOBALS['meta']["articles_versions"] != 'oui') return $x; // Regarder si au moins une des modifs est versionnable $champs = array(); foreach (liste_champs_versionnes($x['args']['table']) as $key) if (isset($x['data'][$key])) $champs[$key] = $x['data'][$key]; // A moins qu'il ne s'agisse d'operation (ajout/suppr) sur les mots-cles? if ($x['args']['operation'] == 'editer_mots' AND $x['args']['table'] == 'spip_articles') { include_spip('inc/texte'); $mots = array(); foreach( sql_allfetsel('id_mot', 'spip_mots_articles', 'id_article='.sql_quote($x['args']['id_objet'])) as $mot) $mots[] = "[->mot".$mot['id_mot']."]"; $champs['j_mots'] = join(' ', $mots); } if (count($champs)) ajouter_version($x['args']['id_objet'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']); return $x; }