Esempio n. 1
0
/**
 * 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;
}
/**
 * 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;
}