source: spip-zone/_plugins_/acs/inc/acs_page_get_infos.php @ 45452

Last change on this file since 45452 was 45452, checked in by webmaster@…, 10 years ago

Passage en version 0.8.0

Nouveau parametre de composant preview_type + divers. Cf. log.

File size: 5.4 KB
Line 
1<?php
2#              ACS
3#          (Plugin Spip)
4#     http://acs.geomaticien.org
5#
6# Copyright Daniel FAIVRE, 2007-2011
7# Copyleft: licence GPL - Cf. LICENCES.txt
8
9/**
10 * Retourne des informations détaillées sur une page
11 * Utilise le cache ACS
12 */
13
14include_spip('inc/acs_presentation');
15include_spip('inc/composant/page_source');
16
17function acs_page_get_infos($page, $mode, $detail) {
18  include_spip('inc/acs_cache');
19  $mode_source = ($mode == 'source');
20  $mode = $mode_source ? '_source' : '_infos';
21  $r = cache('page_get_infos', 'pg_'.$GLOBALS['meta']['acsModel'].'_'.urlencode($page).$mode, array($page, $mode_source, $detail));
22 
23  // Si le fichier a été modifié depuis la mise en cache, on force le recalcul
24  $pg = find_in_path($page.'.html');
25  $pg_derniere_modif = filemtime($pg);
26  if ($r[2] < $pg_derniere_modif)
27    $r = cache('page_get_infos', 'pg_'.$GLOBALS['meta']['acsModel'].'_'.urlencode($page).$mode, array($page, $mode_source, $detail), true);
28  return $r[0];
29}
30
31// renvoie un widget avec les options d'affichage d'une page
32function page_modes($page, $mode_source, $detail) {
33  // Plieur
34  if ($detail && ($detail > 1)) {
35    $on = true;
36    $detail ='';
37  }
38  else {
39    $on = false;
40    $detail = '&detail=2';
41   
42  }
43  // Mode schema / source
44  $link = '<a style="color: white" title="'.$page.'" href="?exec=acs&onglet=pages&pg='.$page;
45  if ($mode_source) {
46    $lblsrc = '<a id="mode_source" name="srcon" title="'.$page.'"><b>'._T('acs:source').'</b></a>';
47    $lblsch = $link.'" id="mode_schema">'._T('acs:schema').'</a>';
48  }
49  else {
50    $lblsrc = $link.'&mode=source" id="mode_source" name="srcoff">'._T('acs:source').'</a>';
51    $lblsch =  '<a id="mode_schema"><b>'._T('acs:schema').'</b></a>';
52  }
53  // Rendu
54  $r = '<table><tr><td>';
55  $r .= $lblsch.'</td><td> / </td><td> '.$lblsrc.' </td><td> ';
56  $r .= acs_plieur('plieur_spip_params', 'spip_params', '?exec=acs&onglet=pages&pg='.$page.$detail, $on);
57  $r .= '</td></tr></table>';
58  return $r;
59}
60
61function page_get_infos($page, $mode_source=false, $detail='') {
62  include_spip('inc/acs_widgets');
63
64  $pg = find_in_path($page.'.html');
65  $pg_derniere_modif = filemtime($pg);
66  $pageContent = @file_get_contents($pg);
67  $includes = analyse_page($pageContent, $mode_source);
68
69  if (!$mode_source && (count($includes['vars']) > 0)) {
70    $r .= '<div class="onlinehelp">'._T('acs:variables').' : '.
71          implode(' ', $includes['vars']).
72          '</div><br />';
73    $infos = true;
74  }
75  ksort($includes['tags']);
76  if ($mode_source) {
77    $r .= '<div class="onlinehelp">'._T('acs:source_page').' : </div><div style="line-height: 1.5em;">';
78    $dejalu = 0;
79    $srcol = array();
80    foreach ($includes['tags'] as $debut=>$tag) {
81      //echo '<br/><div class="alert">¤ '.$tag['type'].' : '.$debut.'-'.$tag['fin'].'</div><br/>'
82            //.htmlspecialchars(substr($pageContent, $debut, $tag['fin'] - $debut)).'' // debug code
83
84      $source_tag = substr($pageContent, $debut, $tag['fin'] - $debut);
85      if ($tag['contenu'])
86        $spip_tag = $tag['contenu'];
87      else
88        $spip_tag = $source_tag;
89      if ($debut > $dejalu) {
90        $srcol[] = affiche_source($pageContent, $dejalu, $debut - $dejalu).'<span class="col_'.$tag['type'].'">'.affiche_source($spip_tag).'</span>';
91        $dejalu = $tag['fin'];
92      }
93      else {  // il faut réécrire par dessus la dernière balise acs-spip (on espère que c'est la dernière ! ;-)
94        $pos = strpos(end($srcol), $source_tag);
95        if ($pos !== false) {
96          $db = count($srcol) - 1;
97          $srcol[$db] = substr($srcol[$db], 0, $pos).'<span class="col_'.$tag['type'].'">'.$spip_tag.'</span>'.substr($srcol[$db], $pos + strlen($source_tag));
98        }
99      }
100    }
101    $pagid = str_replace('/', '_slash_', str_replace('-', '_tiret_', $page));
102    $src = '<div class="spip_source crayon source-'.$pagid.'-1">';
103    $src .= ' '.nl2br(implode('',$srcol));
104    if ($dejalu < strlen($pageContent))
105      $src .= affiche_source($pageContent, $dejalu);
106    $src .= '</div>';
107    $r .= $src;
108  }
109  else {
110    if (count($includes['tags'])) {
111      $r .= '<div class="onlinehelp">'._T('acs:structure_page').' : </div><div>';
112      foreach ($includes['tags'] as $debut=>$tag) {
113        $schema .= ' '.$tag['contenu'];
114      }
115      $r .= $schema;
116    }
117    else
118      $no_infos = true;
119  }
120  $r .= '</div><br />';
121
122  if (isset($no_infos))
123    $r = '<div>'._T('acs:page_rien_a_signaler').'</div><br />';
124
125  $r .= '<table width="100%"><tr><td><span class="onlinehelp">'._T('acs:source').' : </span><a class="lien_source" href="?exec=acs&onglet=pages&pg='.$page.'&mode=source" title="'.read_perms($pg).'">'.substr($pg, 3).'</a></td>';
126  $r .= '<td style="text-align:'.$GLOBALS['spip_lang_right'].'">'._T('acs:acsDerniereModif').' '.date('Y-m-d H:i:s', $pg_derniere_modif).'</td>';
127  $r .= '</tr></table>';
128
129  $r = acs_box(_T('acs:page').' '.$page, $r, _DIR_PLUGIN_ACS."images/page-24.gif", false, page_modes($page, $mode_source, $detail));
130  return $r;
131}
132
133function affiche_source($txt, $debut=0, $longueur=0) {
134  if ($longueur == 0)
135    $longueur = strlen($txt) - $debut;
136
137  $txt = substr($txt, $debut, $longueur);
138  $txt = preg_replace(array('/</', '/>/'), array('&lt;', '&gt;'), $txt);
139
140// Indentation et sauts de lignes
141  $txt = explode("\n", $txt);
142  foreach($txt as $n => $line) {
143    $txt[$n] =  preg_replace('/ (?= )/s', '&nbsp;', $line);
144  }
145  $txt = implode('<br />', $txt);
146  return $txt;
147}
148
149function read_perms($f) {
150        $perms = fileperms($f);
151  return substr(decoct($perms), 3);
152}
153?>
Note: See TracBrowser for help on using the repository browser.