PageRenderTime 41ms CodeModel.GetById 9ms RepoModel.GetById 1ms app.codeStats 0ms

/_plugins_/get_info_spip/exec/get_infos_spip.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 450 lines | 351 code | 47 blank | 52 comment | 30 complexity | 8b42254e984e8ffa159e9514c5edad4d MD5 | raw file
  1. <?php
  2. // $LastChangedRevision$
  3. // $LastChangedBy$
  4. // $LastChangedDate$
  5. if (!defined('_ECRIRE_INC_VERSION')) return;
  6. define('_GINS_PREFIX', 'gins');
  7. define('_GINS_PAGINATION', 50);
  8. function exec_get_infos_spip_dist() {
  9. global $connect_statut;
  10. $eol = PHP_EOL;
  11. // Accès aux admins
  12. $flag_editable = ($connect_statut == '0minirezo');
  13. ////////////////////////////////////
  14. // PAGE CONTENU
  15. ////////////////////////////////////
  16. $titre_page = _T('gins:informations');
  17. $rubrique = 'infoconfig2';
  18. $sous_rubrique = _GINS_PREFIX;
  19. $commencer_page = charger_fonction('commencer_page', 'inc');
  20. echo($commencer_page(_T('gins:gins') . ' - ' . $titre_page, $rubrique, $sous_rubrique));
  21. // la configuration spiplistes est réservée aux admins
  22. if(!$flag_editable) {
  23. include_spip('inc/minipres');
  24. echo minipres();
  25. }
  26. else
  27. {
  28. include_spip('inc/plugin');
  29. $dir_icones = _DIR_PLUGIN_GINS.'images/';
  30. $is_mysql = defined('_MYSQL_SET_SQL_MODE') && _MYSQL_SET_SQL_MODE;
  31. $page_result = '<div style="margin-top:3em">' . $eol
  32. . gros_titre(_T('titre_configuration'),'', false)
  33. . '</div>' . $eol
  34. . debut_gauche($rubrique, true)
  35. . debut_boite_info(true)
  36. . '<div id="gins-logo" style="background-image: url('._DIR_PLUGIN_GINS.'/images/gins-128.png'.');"></div>'
  37. . _T('gins:info_gauche_info_spip')
  38. . fin_boite_info(true)
  39. . pipeline('affiche_gauche', array('args'=>array('exec'=>'info_spip'),'data'=>''))
  40. . creer_colonne_droite('', true)
  41. . bloc_des_raccourcis(
  42. _T('gins:t_inventaires')
  43. .
  44. icone_horizontale(
  45. _T('gins:inventaire_auteurs'),
  46. parametre_url(
  47. generer_url_public(
  48. 'lister_auteurs'
  49. ), 'pagination', _GINS_PAGINATION
  50. ),
  51. $dir_icones.'tableau-24.gif','rien.gif', false
  52. )
  53. .
  54. icone_horizontale(
  55. _T('gins:inventaire_doc_lies'),
  56. parametre_url(
  57. generer_url_public(
  58. 'lister_documents_liens'
  59. ), 'pagination', _GINS_PAGINATION
  60. ),
  61. $dir_icones.'tableau-24.gif','rien.gif', false
  62. )
  63. )
  64. . debut_droite($rubrique, true)
  65. ;
  66. $corps = array();
  67. //////////
  68. // Audit SPIP
  69. $onglet = 'configspip';
  70. $contexte = array();
  71. $comptes_auteurs = recuperer_fond('compter_auteurs', $contexte);
  72. $comptes_articles = recuperer_fond('compter_articles', $contexte);
  73. $comptes_rubriques = recuperer_fond('compter_rubriques', $contexte);
  74. $comptes_breves = recuperer_fond('compter_breves', $contexte);
  75. $comptes_forums = recuperer_fond('compter_forums', $contexte);
  76. $comptes_documents = recuperer_fond('compter_documents', $contexte);
  77. $comptes_sites_syndic = recuperer_fond('compter_sites_syndic', $contexte);
  78. $infos = array(
  79. _T('gins:SPIP_version_code_revision_base') => $GLOBALS['spip_version_affichee']
  80. . ' ('.$GLOBALS['spip_version_code'].') '
  81. . (
  82. ($svn_revision = version_svn_courante(_DIR_RACINE))
  83. ? '['.(($svn_revision < 0) ? 'SVN ' : '') . abs($svn_revision).'] '
  84. : ''
  85. )
  86. . '/' . $GLOBALS['spip_version_base'] . '/'
  87. , _T('gins:SPIP_plugins_actifs') => liste_plugin_actifs()
  88. , _T('gins:SPIP_plugins_librairies') => plugins_liste_librairies()
  89. , _T('gins:SPIP_nombre_auteurs_vali/tous') => $comptes_auteurs
  90. , _T('gins:SPIP_nombre_articles_publ/tous') => $comptes_articles
  91. , _T('gins:SPIP_nombre_rubriques_publ/tous') => $comptes_rubriques
  92. , _T('gins:SPIP_nombre_breves_publ/toutes') => $comptes_breves
  93. , _T('gins:SPIP_nombre_forums_publ/tous') => $comptes_forums
  94. , _T('gins:SPIP_nombre_documents_publ/tous') => $comptes_documents
  95. , _T('gins:SPIP_nombre_sites_syndic') => $comptes_sites_syndic
  96. );
  97. $corps[$onglet] = gins_lister_values(
  98. $infos
  99. , _T('gins:'.$onglet)
  100. );
  101. /**
  102. * Inventaire des squelettes disponibles
  103. * dans l'ordre utilisé par find_in_path()
  104. */
  105. $onglet = 'squelettes';
  106. $msg_html = $msg = '';
  107. $chemins = array();
  108. foreach (creer_chemin() as $chemin)
  109. {
  110. // les derniers chemins sont vides ?
  111. $chemin = trim($chemin);
  112. if (!empty($chemin)) { $chemins[] = $chemin; }
  113. }
  114. /**
  115. * Appelé en prive, semble oublier 'ecrire' ?
  116. * (qui doit être le dernier)
  117. */
  118. $ecrire = _DIR_RACINE . _DIR_RESTREINT_ABS;
  119. if (!in_array($ecrire, $chemins))
  120. {
  121. $chemins[] = $ecrire;
  122. }
  123. $squelettes = array();
  124. $url = $GLOBALS['meta']['adresse_site'];
  125. foreach ($chemins as $chemin)
  126. {
  127. if (is_dir($chemin))
  128. {
  129. if ($dh = opendir($chemin))
  130. {
  131. while (($file = readdir($dh)) !== FALSE)
  132. {
  133. if (substr($file, -5) == '.html')
  134. {
  135. if (!isset($squelettes[$file]))
  136. {
  137. $filename = $chemin.$file;
  138. $squelettes[$file] = array(
  139. 'chemin' => $filename .
  140. (filesize ($filename) ? '' : ' <span class="size">vide</span>'),
  141. 'url' => $url.'?page='.substr($file, 0, -5)
  142. );
  143. }
  144. }
  145. }
  146. closedir($dh);
  147. }
  148. ksort ($squelettes);
  149. $res = array();
  150. foreach ($squelettes as $key => $value)
  151. {
  152. $res[$key] =
  153. '<dl>' . PHP_EOL .
  154. '<df>'._T('gins:chemin_').'</df><dd class"chemin">' . $value['chemin'] . '</dd>' . PHP_EOL .
  155. '<df>'._T('gins:url_').'</df><dd class"url"><a href="'.$value['url'].'">' . $value['url'] . '</a></dd>' . PHP_EOL .
  156. '</dl>' . PHP_EOL
  157. ;
  158. }
  159. }
  160. else
  161. {
  162. $msg = $chemin.' manquant';
  163. spip_log('Erreur: '.$chemin.' manquant');
  164. $msg_html = '<li>' . $msg . '</li>';
  165. }
  166. }
  167. if (isset($res) && count($res))
  168. {
  169. $corps[$onglet] = gins_lister_values(
  170. $res,
  171. _T('gins:'.$onglet)
  172. );
  173. if (!empty($msg_html))
  174. {
  175. $corps[$onglet] .= '<h3>'._T('gins:err_skels').'</h3>' . PHP_EOL
  176. . '<ul class="erreurs">' . $msg_html . '</ul>' . PHP_EOL;
  177. }
  178. }
  179. unset($res);
  180. //////////
  181. // Audit systeme
  182. $onglet = 'configsyst';
  183. $infos = array(
  184. 'OS' => php_uname() . ' - ' . (PHP_INT_SIZE * 8).' bits'
  185. , 'Apache version' => (function_exists('apache_get_version') ? apache_get_version() : null)
  186. , 'Apache modules' => (function_exists('apache_get_modules') ? apache_get_modules() : null)
  187. , 'PHP version' => phpversion()
  188. , 'SQL version' => gins_sqlversion()
  189. , 'Zend version' => zend_version()
  190. , 'jQuery' => '<script type="text/javascript">' . $eol
  191. . '//<![CDATA[' . $eol
  192. . 'document.write("<span style=\"color:green\">" + jQuery.fn.jquery + "</span>")' . $eol
  193. . '//]]>' . $eol
  194. . '</script>' . $eol
  195. . '<noscript>'
  196. . '<span style="color:red">' . _T('gins:jquery_inactif') . '</span>'
  197. . '</noscript>' . $eol
  198. , 'Place disque libre' => gins_decodeSize(disk_free_space(_DIR_RACINE))
  199. );
  200. if(function_exists('memory_get_usage'))
  201. {
  202. $peak = function_exists('memory_get_peak_usage')
  203. ? ' / ' . gins_decodeSize(memory_get_peak_usage())
  204. : ''
  205. ;
  206. $ini = function_exists('ini_get')
  207. ? ' / ' . ini_get('memory_limit')
  208. : ''
  209. ;
  210. $infos['M&#233;moire allou&#233;e'] = gins_decodeSize(memory_get_usage())
  211. . $peak
  212. . $ini
  213. ;
  214. }
  215. $corps[$onglet] = gins_lister_values(
  216. $infos
  217. , _T('gins:'.$onglet)
  218. );
  219. //////////
  220. // Les constantes déclarées
  221. $onglet = 'constantes';
  222. $corps[$onglet] = gins_lister_values(
  223. get_defined_constants(1)
  224. , _T('gins:'.$onglet)
  225. );
  226. //////////
  227. // Les valeurs de configuration PHP (php.ini, ...)
  228. $onglet = 'phpconfig';
  229. $corps[$onglet] = gins_lister_values(
  230. ini_get_all()
  231. , _T('gins:'.$onglet)
  232. );
  233. //////////
  234. // Les tables SQL (toutes les tables, SPIP et autres)
  235. $onglet = 'tablessql';
  236. $res =
  237. ($is_mysql)
  238. ? sql_query('SHOW TABLE STATUS')
  239. : sql_showbase('%')
  240. ;
  241. if($res)
  242. {
  243. $arr = array();
  244. $sum = 0;
  245. while($row = sql_fetch($res))
  246. {
  247. if($is_mysql) {
  248. $dl = $row['Data_length'];
  249. $sum += $dl;
  250. $arr[] = $row['Name']
  251. . ' ('
  252. . _T('gins:n_row', array('n' => ($n = $row['Rows'])))
  253. . ($n ? ' : '.gins_decodeSize($dl) : '')
  254. . ')'
  255. ;
  256. }
  257. else {
  258. $arr[] = array_shift($row);
  259. }
  260. }
  261. // ajouter le résultat aux tableaux
  262. $corps[$onglet] = gins_lister_values(
  263. $arr
  264. , _T('gins:'.$onglet)
  265. , ($sum ? ' ('.gins_decodeSize($sum).')' : '')
  266. );
  267. }
  268. //////////
  269. // Menu de haut de page (onglets)
  270. $menu = '';
  271. $jamaisvu = true;
  272. $end = end(array_keys($corps));
  273. foreach($corps as $key=>$results)
  274. {
  275. $class = $jamaisvu ? 'on' : 'off';
  276. if ($end == $key) { $class .= ' end'; }
  277. if (!empty($class)) { $class = ' class="'.trim($class).'"'; }
  278. $menu .= '<li'.$class.'>'
  279. . '<a href="#gins-'.$key.'"'.$class.' name="'.$key.'">'
  280. . '<h3'.$class.' title="' . _T('gins:'.$key) . '">'
  281. . _T('gins:'.$key)
  282. . '</h3>'
  283. . '</a>'
  284. . '</li>'.$eol;
  285. $jamaisvu = false;
  286. }
  287. $page_result .=
  288. '<div id="gins-menu" >'.$eol
  289. . '<h2>'._T('gins:menu_proprietes').'</h2>'.$eol
  290. . '<ul>'.$eol
  291. . $menu . $eol
  292. . '</ul>'.$eol
  293. . '<div id="fin-onglets" class="hr"><hr /></div>'.$eol
  294. . '</div>'.$eol
  295. ;
  296. //////////
  297. // Préparation des vues
  298. $jamaisvu = true;
  299. foreach($corps as $key=>$results)
  300. {
  301. $page_result .=
  302. '<div id="gins-'.$key.'" class="gins-item '.$key.($jamaisvu ? ' on' : '').'">'
  303. . $results
  304. . '</div>'.$eol
  305. ;
  306. $jamaisvu = false;
  307. }
  308. //////////
  309. // Fin de la page
  310. echo(
  311. '<div id="gins-contenu">'.$eol
  312. . $page_result.$eol
  313. . '</div>'.$eol
  314. );
  315. echo pipeline('affiche_milieu', array('args'=>array('exec'=>$sous_rubrique),'data'=>''));
  316. }
  317. echo fin_gauche(), fin_page();
  318. } // fin exec_get_infos_spip_dist()
  319. /**
  320. * Les valeurs à afficher en listes
  321. * @return string html code
  322. **/
  323. function gins_lister_values($array, $titre, $stitre = '', $legend = '')
  324. {
  325. $eol = PHP_EOL;
  326. $result = '';
  327. foreach($array as $key => $val)
  328. {
  329. $result .= '<li><strong>'.$key.'</strong>: '.gins_dump_value($val).'</li>'.$eol;
  330. }
  331. $result = ''
  332. . debut_cadre_trait_couleur($icone, true, '', $titre.$stitre)
  333. . $legend
  334. . '<ul>' . $eol
  335. . $result
  336. . '</ul>' . $eol
  337. . fin_cadre_trait_couleur(true)
  338. ;
  339. return($result);
  340. }
  341. /**
  342. * (récursif) décortique les valeurs à afficher
  343. * @return string html code
  344. **/
  345. function gins_dump_value($value)
  346. {
  347. $eol = PHP_EOL;
  348. if(($g = gettype($value)) == 'array')
  349. {
  350. $r = '';
  351. foreach($value as $key=>$val)
  352. {
  353. $r .= '<li>'.$key.': '.gins_dump_value($val).'</li>'.$eol;
  354. }
  355. $value =
  356. '<ul>'.$eol
  357. . $r.$eol
  358. . '</ul>'.$eol
  359. ;
  360. }
  361. elseif($g == 'boolean')
  362. {
  363. $value = '<span style="color:blue">'.($value ? 'TRUE' : 'FALSE').'</span>'.$eol;
  364. }
  365. elseif($value === NULL)
  366. {
  367. $value = '<span style="color:grey">NULL</span>'.$eol;
  368. }
  369. return($value);
  370. }
  371. /**
  372. * Acronymes tailles (octets, etc.)
  373. * @return string résultat interprété taille en octets
  374. * @see: http://www.php.net/manual/fr/function.disk-free-space.php#81207
  375. * */
  376. function gins_decodeSize( $bytes )
  377. {
  378. $types = array(_T('gins:B'), _T('gins:KB'), _T('gins:MB'), _T('gins:GB'), _T('gins:TB'));
  379. for( $i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ );
  380. return( round($bytes, 2) . ' ' . $types[$i] );
  381. }
  382. /**
  383. * Identification SQL
  384. * */
  385. function gins_sqlversion()
  386. {
  387. $r = array();
  388. if(defined('MYSQL_ASSOC'))
  389. {
  390. $r['MySQL'] = mysql_get_server_info();
  391. }
  392. if(defined('PGSQL_ASSOC'))
  393. {
  394. // PostgreSQL 7.4 ou supérieur. ?
  395. // @todo: à compléter
  396. $r['PostgreSQL'] = ($s = @pg_version()) ? serialize($s) : 'inconnu';
  397. }
  398. if(defined('SQLITE_ASSOC'))
  399. {
  400. $r['SQLite'] = sqlite_libversion();
  401. }
  402. return($r);
  403. }