Changeset 110434 in spip-zone
- Timestamp:
- May 28, 2018, 11:18:08 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/rang/branches/automatique/rang_pipelines.php
r110319 r110434 63 63 //and in_array(_request('exec'), rang_get_contextes()) 64 64 ) { 65 // Si pas déjà présent, on ajoute l'info de l'objet sur le tableau 66 if (strpos($flux['data']['texte'], 'data-objet=') === false) { 67 $flux['data']['texte'] = preg_replace('/<table/i', '<table data-objet="'.$objet_info['objet'].'"', $flux['data']['texte']); 68 } 69 70 // Si pas déjà, on ajoute l'info d'identifiant sur chaque ligne 71 if ( 72 // Si pas de id_objet déjà dans le tableau 73 strpos($flux['data']['texte'], 'data-id_objet') === false 74 // Et qu'il y a des cellules avec les ids 75 and preg_match('%<td[^>]+?class=("|\')[^>]*?id%is', $flux['data']['texte']) 76 ) { 77 include_spip('inc/filtres'); 78 79 $flux['data']['texte'] = preg_replace_callback( 80 '%(<tbody[^>]*?>)(.*?)</tbody>%is', 81 function ($matches) { 82 $lignes = preg_replace_callback( 83 '%<tr([^>]*?)>(.*?)</tr>%is', 84 function ($matches) { 85 // On cherche le numéro d'id 86 preg_match('%<td[^>]+?class=("|\')[^>]*?id[^>]*?>(.*?)</td>%is', $matches[2], $trouver); 87 $id = supprimer_tags($trouver[2]); 88 89 return '<tr' . $matches[1] . "data-id_objet=\"$id\"" . '>' . $matches[2] . '</tr>'; 90 }, 91 $matches[2] 92 ); 65 //var_dump(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)); 66 67 // On teste rapide pour les choses à ajouter 68 $ajouter_objet = (strpos($flux['data']['texte'], 'data-objet=') === false); 69 $ajouter_ids = (strpos($flux['data']['texte'], 'data-id_objet') === false); 70 $ajouter_rangs = !preg_match('%<th[^>]+?class=("|\')[\w ]*?rang%is', $flux['data']['texte']); 71 72 // On continue et on fait de l'analyse de DOM seulement si au moins un des trois 73 if ($ajouter_objet or $ajouter_ids or $ajouter_rangs) { 74 // On charge le DOM de la liste 75 libxml_use_internal_errors(true); 76 $dom = new DOMDocument; 77 $dom->loadHTML('<?xml encoding="utf-8" ?>' . $flux['data']['texte']); 78 $finder = new DomXPath($dom); 79 80 // Si pas déjà présent, on ajoute l'info de l'objet sur le tableau 81 if ($ajouter_objet and $table = $dom->getElementsByTagName('table')->item(0)) { 82 $table->setAttribute('data-objet', $objet_info['objet']); 83 } 84 85 // On voit si on doit ajouter un th de rang 86 if ( 87 $ajouter_rangs 88 and $thead_tr = $finder->query('//thead/tr')->item(0) 89 and $th_premier = $dom->getElementsByTagName('th')->item(0) 90 ) { 91 $url_trier_rang = parametre_url(self(), 'par', 'rang', '&'); 92 $lien_tri = $dom->createElement('a', 'Rang'); 93 $lien_tri->setAttribute('href', $url_trier_rang); 94 $lien_tri->setAttribute('class', 'ajax'); 95 $th = $dom->createElement('th'); 96 $th->appendChild($lien_tri); 97 $thead_tr->insertBefore($th, $th_premier); 98 } 99 100 // On parcourt toutes les lignes de contenu 101 $tbody_trs = $finder->query('//tbody/tr'); 102 foreach ($tbody_trs as $tr) { 103 // Il faut toujours avoir l'id sous la main 104 if ($td_id = $finder->query('.//td[contains(@class, "id")]', $tr)->item(0)) { 105 $id_objet = intval($td_id->textContent); 93 106 94 return $matches[1] . $lignes . '</tbody>'; 95 }, 96 $flux['data']['texte'] 97 ); 107 // Si on doit ajouter les ids 108 if ($ajouter_ids) { 109 $tr->setAttribute('data-id_objet', $id_objet); 110 } 111 112 // Si on doit ajouter les rangs 113 if ( 114 $ajouter_rangs 115 and $td_premier = $tr->getElementsByTagName('td')->item(0) 116 ) { 117 $rang = sql_getfetsel('rang', $objet_info['table_objet_sql'], $objet_info['cle_objet'].'='.$id_objet); 118 $tr->insertBefore($dom->createElement('td', $rang), $td_premier); 119 } 120 } 121 } 122 123 // S'il a un tfoot on rajoute aussi 124 if ( 125 $ajouter_rangs 126 and $tfoot_trs = $finder->query('//tfoot/tr') 127 ) { 128 foreach ($tfoot_trs as $tr) { 129 $td_premier = $tr->getElementsByTagName('td')->item(0); 130 $tr->insertBefore($dom->createElement('td'), $td_premier); 131 } 132 } 133 134 // On retransforme en HTML à la fin 135 $flux['data']['texte'] = $dom->saveHTML(); 98 136 } 99 137
Note: See TracChangeset
for help on using the changeset viewer.