Skip to content
Extraits de code Groupes Projets
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
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -24,15 +24,8 @@ include_spip('inc/autoriser'); // necessaire si appel de l'espace public ...@@ -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) { function inc_article_select_dist($id_article, $id_rubrique=0, $lier_trad=0) {
global $connect_id_rubrique, $spip_lang; global $connect_id_rubrique, $spip_lang;
if (is_numeric($id_article)) { 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');
}
return sql_fetsel("*", "spip_articles", "id_article=$id_article"); return sql_fetsel("*", "spip_articles", "id_article=$id_article");
}
// id_article non numerique, c'est une demande de creation. // id_article non numerique, c'est une demande de creation.
// Si c'est une demande de nouvelle traduction, init specifique // Si c'est une demande de nouvelle traduction, init specifique
......
...@@ -12,18 +12,19 @@ ...@@ -12,18 +12,19 @@
if (!defined('_ECRIRE_INC_VERSION')) return; if (!defined('_ECRIRE_INC_VERSION')) return;
// Drapeau d'edition : on regarde qui a ouvert quel article en edition, // Drapeau d'edition : on regarde qui a ouvert quel objet editorial en
// et on le signale aux autres redacteurs pour eviter de se marcher sur // edition, et on le signale aux autres redacteurs pour eviter de se marcher
// les pieds // sur les pieds
// Le format est une meta drapeau_edition qui contient un tableau // 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 // a chaque mise a jour de ce tableau on oublie les enregistrements datant
// de plus d'une heure // de plus d'une heure
// Attention ce n'est pas un verrou "bloquant", juste un drapeau qui signale // 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) // (en cas de communication orale c'est plus pratique)
...@@ -107,60 +108,57 @@ function mention_qui_edite ($id, $type='article') { ...@@ -107,60 +108,57 @@ 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 // 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(); $edition = lire_tableau_edition();
$articles_ouverts = array(); $objets_ouverts = array();
foreach ($edition as $objet => $data) foreach ($edition as $objet => $data)
if ($objet == 'article') foreach ($data as $id => $auteurs)
foreach ($data as $id => $auteurs) {
{ if (isset($auteurs[$id_auteur])
if (isset($auteurs[$id_auteur]) AND (array_pop($auteurs[$id_auteur]) > time()-3600)) {
AND (array_pop($auteurs[$id_auteur]) > time()-3600)) { $objets_ouverts[] = array(
$row = sql_fetsel("titre, statut", "spip_articles", "id_article=".$id); 'objet'=>$objet,
$articles_ouverts[] = array( 'id_objet' => $id,
'id_article' => $id, );
'titre' => typo($row['titre']), }
'statut' => typo($row['statut'])
);
} }
} return $objets_ouverts;
return $articles_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 // http://doc.spip.org/@debloquer_tous
function debloquer_tous($id_auteur) { function debloquer_tous($id_auteur) {
$edition = lire_tableau_edition(); $edition = lire_tableau_edition();
foreach ($edition as $objet => $data) foreach ($edition as $objet => $data) {
if ($objet == 'article') foreach ($data as $id => $auteurs)
foreach ($data as $id => $auteurs) {
{ if (isset($auteurs[$id_auteur])) {
if (isset($auteurs[$id_auteur])) { unset ($edition[$objet][$id][$id_auteur]);
unset ($edition[$objet][$id][$id_auteur]); ecrire_tableau_edition($edition);
ecrire_tableau_edition($edition); }
} }
} }
} }
// quand l'auteur libere un article precis // quand l'auteur libere un objet precis
// http://doc.spip.org/@debloquer_edition // 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(); $edition = lire_tableau_edition();
foreach ($edition as $objet => $data) foreach ($edition as $objet => $data){
if ($objet == $type) if ($objet == $type) {
foreach ($data as $id => $auteurs) foreach ($data as $id => $auteurs)
{ {
if ($id == $debloquer_article if ($id == $id_objet
AND isset($auteurs[$id_auteur])) { AND isset($auteurs[$id_auteur])) {
unset ($edition[$objet][$id][$id_auteur]); unset ($edition[$objet][$id][$id_auteur]);
ecrire_tableau_edition($edition); ecrire_tableau_edition($edition);
}
}
} }
} }
} }
?> ?>
...@@ -98,7 +98,7 @@ function f_afficher_blocs_ecrire($flux) { ...@@ -98,7 +98,7 @@ function f_afficher_blocs_ecrire($flux) {
} }
if ($fond=="prive/squelettes/extra/$exec") { if ($fond=="prive/squelettes/extra/$exec") {
include_spip('inc/presentation_mini'); 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 ($fond=="prive/squelettes/contenu/$exec"){
if (!strpos($flux['data']['texte'],"<!--affiche_milieu-->")) if (!strpos($flux['data']['texte'],"<!--affiche_milieu-->"))
...@@ -139,7 +139,7 @@ function trouver_objet_exec($exec){ ...@@ -139,7 +139,7 @@ function trouver_objet_exec($exec){
include_spip('base/objets'); include_spip('base/objets');
$infos = lister_tables_objets_sql(); $infos = lister_tables_objets_sql();
foreach($infos as $t=>$info){ 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'])); 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']){ if ($exec==$info['url_voir']){
......
...@@ -90,7 +90,7 @@ function debut_droite($rubrique="", $return= false) { ...@@ -90,7 +90,7 @@ function debut_droite($rubrique="", $return= false) {
if ($spip_display == 4) $res .= " -->"; if ($spip_display == 4) $res .= " -->";
$res .= liste_objets_bloques(); $res .= liste_objets_bloques(_request('exec'));
$res .= creer_colonne_droite($rubrique, true) $res .= creer_colonne_droite($rubrique, true)
. "</div>"; . "</div>";
...@@ -106,14 +106,22 @@ function debut_droite($rubrique="", $return= false) { ...@@ -106,14 +106,22 @@ function debut_droite($rubrique="", $return= false) {
} }
// http://doc.spip.org/@liste_articles_bloques // http://doc.spip.org/@liste_articles_bloques
function liste_objets_bloques($id_auteur=null){ function liste_objets_bloques($exec,$contexte=array(),$auteur=null){
if (is_null($id_auteur))
$id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
$res = ''; $res = '';
if ($GLOBALS['meta']["articles_modif"] != "non") { if ($GLOBALS['meta']["articles_modif"] != "non") {
include_spip('inc/drapeau_edition'); 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)) { if (count($objets_ouverts)) {
$res .= recuperer_fond('prive/objets/liste/objets-en-edition',array(),array('ajax'=>true)); $res .= recuperer_fond('prive/objets/liste/objets-en-edition',array(),array('ajax'=>true));
} }
......
...@@ -429,7 +429,7 @@ Merci de votre participation ...@@ -429,7 +429,7 @@ Merci de votre participation
'info_copyright' => '@spip@ est un logiciel libre distribu&eacute; @lien_gpl@.', '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_doc' => 'Pour plus d\'informations, voir le site <a href="@spipnet@">http://www.spip.net/fr</a>.',
'info_copyright_gpl' => 'sous licence GPL', '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' => '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_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', 'info_creer_vignette' => 'cr&eacute;ation automatique de la vignette',
...@@ -579,7 +579,7 @@ Merci de votre participation ...@@ -579,7 +579,7 @@ Merci de votre participation
'lien_afficher_texte_icones' => 'Afficher les icones et le texte', 'lien_afficher_texte_icones' => 'Afficher les icones et le texte',
'lien_afficher_texte_seul' => 'Afficher uniquement le texte', 'lien_afficher_texte_seul' => 'Afficher uniquement le texte',
'lien_liberer' => 'lib&eacute;rer', '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_nouvea_pense_bete' => 'NOUVEAU PENSE-B&Ecirc;TE',
'lien_nouveau_message' => 'NOUVEAU MESSAGE', 'lien_nouveau_message' => 'NOUVEAU MESSAGE',
'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE', 'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE',
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
</li> </li>
</BOUCLE_objets> </BOUCLE_objets>
</ul> </ul>
[(#BOUTON_ACTION{<:lien_liberer_tous:>,#URL_ACTION_AUTEUR{debloquer_edition,tout,#SELF},ajax})] [(#COMPTEUR_BOUCLE|>{1}|oui)
[(#BOUTON_ACTION{<:lien_liberer_tous:>,#URL_ACTION_AUTEUR{debloquer_edition,tous,#SELF},ajax})]
]
#BOITE_FERMER #BOITE_FERMER
</B_objets> </B_objets>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter