Skip to content
Extraits de code Groupes Projets
Valider 622cc648 rédigé par marcimat@rezo.net's avatar marcimat@rezo.net
Parcourir les fichiers

Dans le cadre du ticket #3576 , l'analyse du code du marquage de document a...

Dans le cadre du ticket #3576 , l'analyse du code du marquage de document a révélé quelques défaillances.

L'une d'elle est corrigée ici : les champs manquant n'étaient pas pris en compte dans le texte analysé pour calculer si un document est utilisé
dans le texte d'un objet (pour marquer son lien 'vu' à 'oui'), et ce depuis r38899

Le ticket soulève cependant d'autres problèmes, qui ne sont pas corrigés encore.
parent 2f501afa
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -34,6 +34,10 @@ $GLOBALS['medias_liste_champs'][] = 'chapo'; ...@@ -34,6 +34,10 @@ $GLOBALS['medias_liste_champs'][] = 'chapo';
* indique que le document est utilisé et doit être lié à l'objet, avec le champ `vu=oui` * indique que le document est utilisé et doit être lié à l'objet, avec le champ `vu=oui`
* *
* S'il y avait des anciens liens avec vu=oui qui n'ont plus lieu d'être, ils passent à non. * S'il y avait des anciens liens avec vu=oui qui n'ont plus lieu d'être, ils passent à non.
*
* @note
* La fonction pourrait avoir bien moins d'arguments : seuls $champs, $id, $type ou $objet, $desc, $serveur
* sont nécessaires. On calcule $desc s'il est absent, et il contient toutes les infos…
* *
* @param array $champs * @param array $champs
* Couples [champ => valeur] connus de l'objet * Couples [champ => valeur] connus de l'objet
...@@ -54,59 +58,69 @@ $GLOBALS['medias_liste_champs'][] = 'chapo'; ...@@ -54,59 +58,69 @@ $GLOBALS['medias_liste_champs'][] = 'chapo';
* @return void|null * @return void|null
**/ **/
function inc_marquer_doublons_doc_dist($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, $desc=array(), $serveur=''){ function inc_marquer_doublons_doc_dist($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, $desc=array(), $serveur=''){
$champs_selection=array();
foreach ($GLOBALS['medias_liste_champs'] as $champs_choisis) { // On conserve uniquement les champs qui modifient le calcul des doublons de documents
if ( isset($champs[$champs_choisis]) ) // S'il n'il en a aucun, les doublons ne sont pas impactés, donc rien à faire d'autre..
array_push($champs_selection,$champs_choisis); if (!$champs = array_intersect_key($champs, array_flip($GLOBALS['medias_liste_champs']))) {
}
if (count($champs_selection) == 0)
return; return;
}
if (!$desc){ if (!$desc){
$trouver_table = charger_fonction('trouver_table', 'base'); $trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_objet, $serveur); $desc = $trouver_table($table_objet, $serveur);
} }
$load = "";
// charger le champ manquant en cas de modif partielle de l 'objet // Il faut récupérer toutes les données qui impactent les liens de documents vus
// seulement si le champ existe dans la table demande // afin de savoir lesquels sont présents dans les textes, et pouvoir actualiser avec
// les liens actuellement enregistrés.
$champs_a_traiter = ""; $absents = array();
foreach ($champs_selection as $champs_a_parcourir) {
if (isset($desc['field'][$champs_a_parcourir])) { // Récupérer chaque champ impactant qui existe dans la table de l'objet et qui nous manque
$load = $champs_a_parcourir; foreach ($GLOBALS['medias_liste_champs'] as $champ) {
$champs_a_traiter .= $champs[$champs_a_parcourir]; if (isset($desc['field'][$champ]) and !isset($champs[$champ])) {
$absents[] = $champ;
} }
} }
if ($load){ // Retrouver les textes des champs manquants
$champs[$load] = ""; if ($absents) {
$row = sql_fetsel($load, $spip_table_objet, "$id_table_objet=".sql_quote($id)); $row = sql_fetsel($absents, $spip_table_objet, "$id_table_objet=".sql_quote($id));
if ($row AND isset($row[$load])) if ($row) {
$champs[$load] = $row[$load]; $champs = array_merge($row, $champs);
}
} }
include_spip('inc/texte'); include_spip('inc/texte');
include_spip('base/abstract_sql'); include_spip('base/abstract_sql');
include_spip('action/editer_liens'); include_spip('action/editer_liens');
include_spip('base/objets'); include_spip('base/objets');
// récupérer la liste des modèles qui considèrent un document comme vu s'ils sont utilisés dans un texte
$modeles = lister_tables_objets_sql('spip_documents'); $modeles = lister_tables_objets_sql('spip_documents');
$modeles = $modeles['modeles']; $modeles = $modeles['modeles'];
// liste d'id_documents trouvés dans les textes
$GLOBALS['doublons_documents_inclus'] = array(); $GLOBALS['doublons_documents_inclus'] = array();
$env = array(
'objet' => $type, // detecter les doublons dans ces textes
'id_objet' => $id, traiter_modeles(implode(" ", $champs), array('documents' => $modeles), '', '', null, array(
'objet' => $type,
'id_objet' => $id,
$id_table_objet => $id $id_table_objet => $id
); ));
traiter_modeles($champs_a_traiter,array('documents'=>$modeles),'','',null,$env); // detecter les doublons
objet_qualifier_liens(array('document'=>'*'),array($type=>$id),array('vu'=>'non')); // tous les documents liés à l'article sont considérés non vus
objet_qualifier_liens(array('document'=>'*'), array($type=>$id), array('vu'=>'non'));
// ceux présents sont considérés comme vus
if (count($GLOBALS['doublons_documents_inclus'])){ if (count($GLOBALS['doublons_documents_inclus'])){
// on repasse par une requete sur spip_documents pour verifier que les documents existent bien ! // on repasse par une requete sur spip_documents pour verifier que les documents existent bien !
$in_liste = sql_in('id_document',$GLOBALS['doublons_documents_inclus']); $in_liste = sql_in('id_document', $GLOBALS['doublons_documents_inclus']);
$res = sql_allfetsel("id_document", "spip_documents", $in_liste); $res = sql_allfetsel("id_document", "spip_documents", $in_liste);
$res = array_map('reset',$res); $res = array_map('reset', $res);
// Creer le lien s'il n'existe pas deja // Creer le lien s'il n'existe pas deja
objet_associer(array('document'=>$res),array($type=>$id),array('vu'=>'oui')); objet_associer(array('document'=>$res),array($type=>$id),array('vu'=>'oui'));
objet_qualifier_liens(array('document'=>$res),array($type=>$id),array('vu'=>'oui')); objet_qualifier_liens(array('document'=>$res),array($type=>$id),array('vu'=>'oui'));
} }
} }
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter