Browse Source

Générer un sommaire des plugins générés pour la commande from:file

svn/root/trunk
marcimat@rezo.net 9 years ago
parent
commit
883e2ecc95
  1. 1
      .gitattributes
  2. 5
      installation.md
  3. 111
      src/autodoc/Helpers/Generator.php
  4. 103
      src/autodoc/Helpers/Template/index.html
  5. 62
      templates/zora/inclure/nav.twig

1
.gitattributes vendored

@ -11,6 +11,7 @@ src/autodoc/Helpers/Command/FromSpip.php -text
src/autodoc/Helpers/Command/FromSvn.php -text
src/autodoc/Helpers/Command/FromZone.php -text
src/autodoc/Helpers/Generator.php -text
src/autodoc/Helpers/Template/index.html -text
src/autodoc/Helpers/phpdoc_helper.xml -text
src/autodoc/Plugin/Core/Compiler/Pass/ApisCollector.php -text
src/autodoc/Plugin/Core/Compiler/Pass/DirectoryTreeBuilder.php -text

5
installation.md

@ -189,8 +189,11 @@ Générer la documentation depuis le svn _plugins_ de la zone
#### from:file
Générer des documentations dont les sources sont indiquées dans un fichier
Générer des documentations dont les sources sont indiquées dans un fichier.
Par défaut, utilise le fichier svn de la zone.
php autodoc/bin/autodoc_helper.php from:file
php autodoc/bin/autodoc_helper.php from:file autodoc.txt
php autodoc/bin/autodoc_helper.php from:file svn://zone.spip.org/spip-zone/autodoc.txt

111
src/autodoc/Helpers/Generator.php

@ -23,6 +23,9 @@ class Generator
private $options = array('dirs' => array()); // forcer des répertoires en dehors des options de ligne de commande
private $commands = array(); // forcer des commandes spécifiques à phpdocumentor
// les infos de plugins sont enregistrées dedans pour l'index.html de la commande generateFromFile()
private $infos_plugins = array();
/**
* Description de la documentation à générer
* @var string $description */
@ -191,7 +194,7 @@ class Generator
$presents = $this->parseFile($this->files['autodoc.txt']);
$output_base = $this->input->getOption('sorties');
if (!$output_base) $output = $this->dirs['work'] . '/output';
if (!$output_base) $output_base = $this->dirs['work'] . '/output';
if ($anciens) {
$absents = array_diff_key($anciens, $presents);
@ -232,11 +235,63 @@ class Generator
$this->output->writeln("\n\n\n");
if ($nb_erreur) {
$this->output->writeln("<comment>$nb_erreur documentation(s) non générée(s) sur "
. count($presents) . ". Fin.</comment>");
. count($presents) . ".</comment>");
} else {
$this->output->writeln("<comment>Toutes les documentations ("
. count($presents) . ") ont été générées. Fin.</comment>\n");
. count($presents) . ") ont été générées.</comment>\n");
}
// générer un sommaire de toutes ces documentations
$this->output->writeln("Création du sommaire des documentations");
// ajouter les dépendances du fichier html
if (!is_dir($data = $output_base . '/__data')) {
mkdir($data);
$template = $this->dirs['template'];
foreach (array('bootstrap', 'images', 'css', 'js') as $dir) {
exec("cp -r '$template/$dir' '$data/$dir'");
}
copy("$template/favicon.png", "$output_base/favicon.png");
}
if (file_exists($index = "$output_base/index.html")) {
unlink($index);
}
// obtenir les description des plugins
$plugins = array();
foreach ($presents as $prefixe => $present) {
if (isset($this->infos_plugins[$prefixe])) {
$plugins[$prefixe] = $this->infos_plugins[$prefixe];
} else {
// ce n'était pas un plugin ou erreur
$plugins[$prefixe] = array(
'prefixe' => $prefixe,
'nom' => $prefixe,
'slogan' => '',
'description' => '',
'annuaire' => '',
'documentation' => '',
'developpement' => '',
);
}
}
usort($plugins, function($a, $b) {
return ($a['nom'] < $b['nom']) ? -1 : 1;
});
// charger Twig, générer la page et l'enregitrer
$loader = new \Twig_Loader_Filesystem( $this->dirs['helper'] . '/Template' );
$twig = new \Twig_Environment($loader);
$content = $twig->render('index.html', array(
'titre' => 'Documentation automatique des plugins SPIP',
'plugins' => $plugins,
));
file_put_contents($index, $content);
$this->output->writeln("Fin");
}
@ -316,7 +371,7 @@ class Generator
$this->dirs['helper'] = realpath(__DIR__);
# executable php de l'application autodoc (extension de l'application phpdocumentor)
$this->dirs['bin'] = realpath( $this->dirs['helper'] . '/../bin');
$this->dirs['bin'] = realpath( $this->dirs['helper'] . '/../../../bin');
# répertoire racine (celui depuis lequel on execute ce script).
exec('pwd', $output);
@ -325,6 +380,10 @@ class Generator
# répertoire de travail (celui où on écrira tout).
$this->dirs['work'] = $this->dirs['root'] . '/work';
# répertoire du template zora
$this->dirs['template'] = realpath( $this->dirs['helper'] . '/../../../templates/zora');
# fichier de config xml pour phpdocumentor
$this->files['phpdoc.xml'] = $this->dirs['work'] . '/phpdoc.xml';
}
@ -585,7 +644,7 @@ class Generator
* Retrouver des infos du paquet.xml si on le trouve
*
* Définir avec le titre, et une présentation (si ce n'est déjà fait).
*
*
* @return bool true si on a trouvé un paquet.xml
**/
private function retrouverInfoPaquetXml() {
@ -606,27 +665,49 @@ class Generator
$nom = (string)$paquet->nom;
$version = (string)$paquet['version'];
$prefixe = (string)$paquet['prefix'];
$this->infos_plugins[$prefixe] = array(
'nom' => $nom,
'prefixe' => $prefixe,
'slogan' => '',
'description' => '',
'annuaire' => '',
'documentation' => '',
'developpement' => '',
);
$documentation = $developpement = $lien_plugins_spip = '';
if (isset($paquet['documentation'])) {
$documentation = $paquet['documentation'];
$this->infos_plugins[$prefixe]['documentation'] = $documentation;
}
if (isset($paquet['developpement'])) {
$developpement = $paquet['developpement'];
$this->infos_plugins[$prefixe]['developpement'] = $developpement;
}
if (!$is_spip) {
$lien_plugins_spip = "http://plugins.spip.net/$prefixe.html";
// si le nom n'est pas renseigné, chercher dans la chaîne de langue.
if (!$nom) {
$langue = $source . "/lang/paquet-$prefixe"."_fr.php";
if (file_exists($langue)) {
$GLOBALS['idx_lang'] = 'pour_autodoc';
defined('_ECRIRE_INC_VERSION') || define('_ECRIRE_INC_VERSION', 1);
@include $langue;
$infos = $GLOBALS['pour_autodoc'];
if (is_array($infos) and isset($infos["$prefixe" . "_nom"])) {
$this->infos_plugins[$prefixe]['annuaire'] = $lien_plugins_spip;
// récupérer les infos dans les chaînes de langue.
$langue = $source . "/lang/paquet-$prefixe"."_fr.php";
if (file_exists($langue)) {
$GLOBALS['idx_lang'] = 'pour_autodoc';
defined('_ECRIRE_INC_VERSION') || define('_ECRIRE_INC_VERSION', 1);
@include $langue;
$infos = $GLOBALS['pour_autodoc'];
if (is_array($infos)) {
if (!$nom and isset($infos["$prefixe" . "_nom"])) {
$nom = $infos["$prefixe" . "_nom"];
$this->infos_plugins[$prefixe]['nom'] = $nom;
}
if (isset($infos["$prefixe" . "_slogan"])) {
$this->infos_plugins[$prefixe]['slogan'] = $infos["$prefixe" . "_slogan"];
}
if (isset($infos["$prefixe" . "_descriptif"])) {
$this->infos_plugins[$prefixe]['descriptif'] = $infos["$prefixe" . "_descriptif"];
}
}
}

103
src/autodoc/Helpers/Template/index.html

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html>
<head>
<title>{{ titre }}</title>
<meta charset="utf-8" />
<link href="__data/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<link href="__data/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />
<link rel="stylesheet" href="__data/css/perso.css" />
<link rel="shortcut icon" type="image/png" href="favicon.png" />
<script src="__data/js/jquery.min.js"></script>
<script src="__data/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
<header class="header subhead" id="header">
<div class='container'>
<div class="heading row">
<div class="titre span12">
<h1><span></span>{{ titre }}</h1>
</div>
</div>
</div><!-- .container -->
</header>
<div class="nav hornav clearfix" id="nav">
<div class="navbar navbar-static-top">
<div class="navbar-inner">
<div class="container">
<div class='babarre'>
<!--
<div class="nav-collapse collapse">
<ul class="nav nav-tabs">
<li>Statistiques</li>
</ul>
</div><!-- /.nav-collapse -->
</div><!-- /.babarre -->
</div>
</div><!-- /navbar-inner -->
</div>
</div><!-- #nav -->
{%- block principal %}
<div class='container'>
<div class="principal row">
<div class="content" id="content">
<h1 class='hide'>{{ titre }}</h1>
<h2>Liste des documentations du code PHP des plugins présentes :</h2>
<table class="table">
<thead>
<tr><th>Nom</th><th>Description</th><th>Autres liens</th></tr>
</thead>
<tbody>
{% for plugin in plugins %}
<tr>
<th><a href="{{ plugin.prefixe ~ '/'}}">
{{ plugin.nom }}</a></th>
<td>{{ plugin.slogan }}</td>
<td>
{%- if plugin.annuaire %}
<a href="{{ plugin.annuaire }}">Annuaire</a>
{%- endif %}
{%- if plugin.documentation %}
{{- plugin.annuaire ? ' <span class="sep">/</span> '}}
<a href="{{ plugin.documentation }}">Documentation</a>
{%- endif %}
{%- if plugin.developpement %}
{{- (plugin.annuaire or plugin.documentation) ? ' <span class="sep">/</span> '}}
<a href="{{ plugin.developpement }}">Suivi</a>
{%- endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div><!-- #content -->
</div><!-- .principal -->
</div><!-- .container -->
{% endblock %}
{%- block footer %}
<footer class="footer" id="footer">
<div class='container'>
Liste automatique créée avec
<a href="http://zone.spip.org/trac/spip-zone/browser/_galaxie_/code.spip.net/autodoc/trunk">Autodoc</a>,
utilisant les logiciels <a href="http://cilex.github.io/">Cilex</a>
et <a href="http://twig.sensiolabs.org/">Twig</a>.<br />
Les documentations liées sont générées avec <a href="http://www.phpdoc.org/">PHPDocumentor</a><br />
Fichier généré le {{ "now"|date("j/m/Y à H:i") }}
</div><!-- .container -->
</footer>
{% endblock %}
</body>
</html>

62
templates/zora/inclure/nav.twig

@ -33,49 +33,47 @@
<a href="{{ path(project) }}" class="brand">Autodoc</a>
<div class="nav-collapse collapse navbar-responsive-collapse">
<ul class="nav">
<ul class="nav nav-tabs">
<ul class="nav nav-tabs">
{%- for e in elements %}
{%- if e.elements.count %}
{%- for e in elements %}
{%- if e.elements.count %}
<li>{{ '' -}}
<a href="{{ path(e.path) }}" title="{{ e.elements.count ~ ' ' ~ e.nom|lower }}">
{{- e.nom -}}
</a>{{ '' -}}
</li>
{%- endif %}
{%- endfor %}
<li>{{ '' -}}
<a href="{{ path(e.path) }}" title="{{ e.elements.count ~ ' ' ~ e.nom|lower }}">
{{- e.nom -}}
</a>{{ '' -}}
</li>
{%- endif %}
{%- endfor %}
{%- if classes.afficher %}
{%- if classes.afficher %}
<li>
{%- set virgule = false -%}
<a href="{{ path( classes.path ) }}" title="
{%- for type,collection in classes.elements if collection.count -%}
{%- if virgule %}, {% endif -%}
{%- set virgule = true -%}
{{ collection.count ~ ' ' ~ type }}
{%- endfor -%}
">
{{- classes.nom -}}
</a>{{ '' -}}
</li>
{%- endif %}
<li>
{%- set virgule = false -%}
<a href="{{ path( classes.path ) }}" title="
{%- for type,collection in classes.elements if collection.count -%}
{%- if virgule %}, {% endif -%}
{%- set virgule = true -%}
{{ collection.count ~ ' ' ~ type }}
{%- endfor -%}
">
{{- classes.nom -}}
</a>{{ '' -}}
</li>
{%- endif %}
<li><a href="{{ path('statistiques.html') }}">Statistiques</a></li>
<li><a href="{{ path('statistiques.html') }}">Statistiques</a></li>
{#- <!-- lien temporaire -->
<li><a href="{{ path('debug.html') }}">Debug</a></li>
#}
</ul>
{#- <!-- lien temporaire -->
<li><a href="{{ path('debug.html') }}">Debug</a></li>
#}
</ul>
<form action="{{ path('recherche.html') }}" class="navbar-search pull-right">
<input type="text" name="q" placeholder="Recherche" class="search-query span2">
</form>
</div><!-- /.babarre -->
</div><!-- /.nav-collapse -->
</div><!-- /.nav-collapse -->
</div><!-- /.babarre -->
</div>
</div><!-- /navbar-inner -->
</div>

Loading…
Cancel
Save