Valider 8a1e81c0 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Drapeaux d'edition generalises :

- integration du patch de sylvain sur inc/drapeau_edition
- branchement automatique sur tous les objets :
* qui ont un bloc extra
* qui sont declares via declarer_tables_objets_sql (pour connaitre leur page d'edition)

Fonctionne en l'etat sur breve, article, rubrique, sites, documents. Les mots et groupes n'ayant pas de bloc extra propres a la page d'edition,
ils ne sont pas signales. A voir si on fait evoluer ce pre-requis ou si on laisse en l'etat

La boite qui signale l'edition est brute, et necessitera une passe d'habillage, comme tout le reste de l'espace prive quand on aura fini le recodage. On laisse donc telle quelle pour le moment
parent 2d52ad95
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,15 +24,8 @@ include_spip('inc/autoriser'); // necessaire si appel de l'espace public
function inc_article_select_dist($id_article, $id_rubrique=0, $lier_trad=0) {
	global $connect_id_rubrique, $spip_lang; 

	if (is_numeric($id_article)) {
		// marquer le fait que l'article est ouvert en edition par toto
		// a telle date ; une alerte sera donnee aux autres redacteurs
		if ($GLOBALS['meta']['articles_modif'] != 'non') {
			include_spip('inc/drapeau_edition');
			signale_edition ($id_article,  $GLOBALS['visiteur_session'], 'article');
		}
	if (is_numeric($id_article))
		return sql_fetsel("*", "spip_articles", "id_article=$id_article");
	}

	// id_article non numerique, c'est une demande de creation.
	// Si c'est une demande de nouvelle traduction, init specifique
+39 −41
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,18 +12,19 @@

if (!defined('_ECRIRE_INC_VERSION')) return;

// Drapeau d'edition : on regarde qui a ouvert quel article en edition,
// et on le signale aux autres redacteurs pour eviter de se marcher sur
// les pieds
// Drapeau d'edition : on regarde qui a ouvert quel objet editorial en 
// edition, et on le signale aux autres redacteurs pour eviter de se marcher 
// sur les pieds

// Le format est une meta drapeau_edition qui contient un tableau
// serialise id_article => (id_auteur_modif, date_modif)
// serialise
// type_objet => (id_objet => (id_auteur => (nom_auteur => (date_modif))))

// a chaque mise a jour de ce tableau on oublie les enregistrements datant
// de plus d'une heure

// Attention ce n'est pas un verrou "bloquant", juste un drapeau qui signale
// que l'on bosse sur un article ; les autres peuvent passer outre
// que l'on bosse sur cet objet editorial ; les autres peuvent passer outre
// (en cas de communication orale c'est plus pratique)


@@ -107,35 +108,31 @@ function mention_qui_edite ($id, $type='article') {
	}
}

// Quels sont les articles en cours d'edition par X ?
// Quels sont les objets en cours d'edition par X ?
// http://doc.spip.org/@liste_drapeau_edition
function liste_drapeau_edition ($id_auteur, $type = 'article') {
function liste_drapeau_edition ($id_auteur) {
	$edition = lire_tableau_edition();
	$articles_ouverts = array();
	$objets_ouverts = array();

	foreach ($edition as $objet => $data)
	if ($objet == 'article')
		foreach ($data as $id => $auteurs)
		{
			if (isset($auteurs[$id_auteur])
			AND (array_pop($auteurs[$id_auteur]) > time()-3600)) {
			$row = sql_fetsel("titre, statut", "spip_articles", "id_article=".$id);
			$articles_ouverts[] = array(
				'id_article' => $id,
				'titre' => typo($row['titre']),
				'statut' => typo($row['statut'])
				$objets_ouverts[] = array(
					'objet'=>$objet,
					'id_objet' => $id,
				);
			}
		}
	return $articles_ouverts;
	return $objets_ouverts;
}

// Quand l'auteur veut liberer tous ses articles
// Quand l'auteur veut liberer tous ses objets (tous types)
// http://doc.spip.org/@debloquer_tous
function debloquer_tous($id_auteur) {
	$edition = lire_tableau_edition();
	foreach ($edition as $objet => $data)
	if ($objet == 'article')
	foreach ($edition as $objet => $data) {
		foreach ($data as $id => $auteurs)
		{
			if (isset($auteurs[$id_auteur])) {
@@ -144,23 +141,24 @@ function debloquer_tous($id_auteur) {
			}
		}
	}
}

// quand l'auteur libere un article precis
// quand l'auteur libere un objet precis
// http://doc.spip.org/@debloquer_edition
function debloquer_edition($id_auteur, $debloquer_article, $type='article') {
function debloquer_edition($id_auteur, $id_objet, $type='article') {
	$edition = lire_tableau_edition();

	foreach ($edition as $objet => $data)
	if ($objet == $type)
	foreach ($edition as $objet => $data){
		if ($objet == $type) {
			foreach ($data as $id => $auteurs)
			{
		if ($id == $debloquer_article
				if ($id == $id_objet
				AND isset($auteurs[$id_auteur])) {
					unset ($edition[$objet][$id][$id_auteur]);
					ecrire_tableau_edition($edition);
				}
			}
		}


	}
}
?>
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -98,7 +98,7 @@ function f_afficher_blocs_ecrire($flux) {
		}
		if ($fond=="prive/squelettes/extra/$exec") {
			include_spip('inc/presentation_mini');
			$flux['data']['texte'] = pipeline('affiche_droite',array('args'=>$flux['args']['contexte'],'data'=>$flux['data']['texte'])).liste_objets_bloques();
			$flux['data']['texte'] = pipeline('affiche_droite',array('args'=>$flux['args']['contexte'],'data'=>$flux['data']['texte'])).liste_objets_bloques($exec,$flux['args']['contexte']);
		}
		if ($fond=="prive/squelettes/contenu/$exec"){
			if (!strpos($flux['data']['texte'],"<!--affiche_milieu-->"))
@@ -139,7 +139,7 @@ function trouver_objet_exec($exec){
		include_spip('base/objets');
		$infos = lister_tables_objets_sql();
		foreach($infos as $t=>$info){
			if ($objet_exec[$exec]==$info['url_edit']){
			if ($exec==$info['url_edit']){
				return $objet_exec[$exec] = array('edition'=>true,'table_objet_sql'=>$t,'table'=>$info['type'],'type'=>$info['type'],'id_table_objet'=>id_table_objet($info['type']));
			}
			if ($exec==$info['url_voir']){
+14 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -90,7 +90,7 @@ function debut_droite($rubrique="", $return= false) {

	if ($spip_display == 4) $res .= " -->";

	$res .= liste_objets_bloques();
	$res .= liste_objets_bloques(_request('exec'));

	$res .= creer_colonne_droite($rubrique, true)
	. "</div>";
@@ -106,14 +106,22 @@ function debut_droite($rubrique="", $return= false) {
}

// http://doc.spip.org/@liste_articles_bloques
function liste_objets_bloques($id_auteur=null){
	if (is_null($id_auteur))
		$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];

function liste_objets_bloques($exec,$contexte=array(),$auteur=null){
	$res = '';
	if ($GLOBALS['meta']["articles_modif"] != "non") {
		include_spip('inc/drapeau_edition');
		$objets_ouverts = liste_drapeau_edition($id_auteur);
		if (is_null($auteur))
			$auteur = $GLOBALS['visiteur_session'];
		if ($en_cours=trouver_objet_exec($exec)
			AND $en_cours['edition']
			AND $type = $en_cours['type']
		  AND ($id = $contexte[$en_cours['id_table_objet']] OR $id = _request($en_cours['id_table_objet']))) {
			// marquer le fait que l'objet est ouvert en edition par toto
			// a telle date ; une alerte sera donnee aux autres redacteurs
			signale_edition ($id,  $auteur, $type);
		}

		$objets_ouverts = liste_drapeau_edition($auteur['id_auteur']);
		if (count($objets_ouverts)) {
			$res .= recuperer_fond('prive/objets/liste/objets-en-edition',array(),array('ajax'=>true));
		}
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -429,7 +429,7 @@ Merci de votre participation
'info_copyright' => '@spip@ est un logiciel libre distribu&eacute; @lien_gpl@.',
'info_copyright_doc' => 'Pour plus d\'informations, voir le site <a href="@spipnet@">http://www.spip.net/fr</a>.',
'info_copyright_gpl' => 'sous licence GPL',
'info_cours_edition' => 'Vos articles en cours de r&eacute;daction',
'info_cours_edition' => 'En cours de r&eacute;daction',
'info_creer_repertoire' => 'Veuillez cr&eacute;er un fichier ou un r&eacute;pertoire nomm&eacute;&nbsp;:',
'info_creer_repertoire_2' => '&agrave; l\'int&eacute;rieur du sous-r&eacute;pertoire <b>@repertoire@</b>, puis&nbsp;:',
'info_creer_vignette' => 'cr&eacute;ation automatique de la vignette',
@@ -579,7 +579,7 @@ Merci de votre participation
'lien_afficher_texte_icones' => 'Afficher les icones et le texte',
'lien_afficher_texte_seul' => 'Afficher uniquement le texte',
'lien_liberer' => 'lib&eacute;rer',
'lien_liberer_tous' => 'lib&eacute;rer ces articles',
'lien_liberer_tous' => 'Tout lib&eacute;rer',
'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-B&Ecirc;TE',
'lien_nouveau_message' => 'NOUVEAU MESSAGE',
'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE',
Chargement en cours