]> git.llucax.com Git - personal/documentos.git/blob - glabels/videos.php
Enunciado e implementación de referencia del ejercicio 1 de 2008-2
[personal/documentos.git] / glabels / videos.php
1 #!/usr/bin/php4 -qC
2 <?php
3
4 require_once 'HTML/Template/Sigma.php';
5 PEAR::setErrorHandling(PEAR_ERROR_DIE);
6
7 define('X_BASE', 30);
8 define('X_COL2', 205);
9 define('Y_BASE', 40);
10 define('Y_MAX', 310);
11 define('PUNTOS', 6);
12
13 $extensiones = array('mpg', 'mpeg', 'avi', 'mov');
14
15 if ($argc < 2) {
16     $name = basename($argv[0]);
17     echo "Modo de uso:\n";
18     echo "  $name <volumen> [<directorio>] [<filename>]\n\n";
19     echo "Por defecto se usa el directorio actual y se guarda el resultado en videos-dvd-<volumen>.glabels\n";
20     exit;
21 }
22
23 $numero = $argv[1];
24 $dir = @$argv[2] ? $argv[2] : '.';
25 $filename = @$argv[3] ? $argv[3] : "videos-dvd-$numero.glabels";
26 $template = 'Template.VIDEOS.glabels';
27 $template_dir = '.';
28
29 $datos = array();
30 $d = dir($dir);
31 while (($f = $d->read()) !== false) {
32     if (is_dir("$dir/$f") and $f != '.' and $f != '..') {
33         $d2 = dir("$dir/$f");
34         while (($f2 = $d2->read()) !== false) {
35             if (in_array(strtolower(preg_replace('/.*\.(.*)/', '$1', $f2)), $extensiones)) {
36                 # Es un video
37                 $datos[ucwords($f)][] = ucwords(preg_replace('/(.*)\..*/', '$1', $f2));
38             }
39         }
40     } elseif (in_array(strtolower(preg_replace('/.*\.(.*)/', '$1', $f)), $extensiones)) {
41         # Es un video
42         if (preg_match('/(.*) - (.*)/', $f, $m)) {
43             $datos[ucwords(preg_replace('/(.*)\..*/', '$1', $m[1]))][] = ucwords(preg_replace('/(.*)\..*/', '$1', $m[2]));
44         } else {
45             $datos[ucwords(preg_replace('/(.*)\..*/', '$1', $f))] = array();
46         }
47     }
48 }
49
50 if ($datos) {
51
52     $tpl =& new HTML_Template_Sigma($template_dir);
53     $tpl->loadTemplateFile($template);
54     $tpl->setGlobalVariable(array(
55         'N'      => sprintf("%02d", $numero),
56         'PUNTOS' => PUNTOS,
57     ));
58
59     $x = X_BASE;
60     $y = Y_BASE;
61     ksort($datos);
62     foreach ($datos as $artista => $albums) {
63         if ($y > Y_MAX and !@$col2) {
64             $x = X_COL2;
65             $y = Y_BASE;
66             $col2 = true;
67         }
68         $tpl->setVariable(array(
69             'X'           => $x,
70             'TEXTO_Y'     => $y,
71             'LINEA_Y'     => $y + PUNTOS + 2.5,
72             'LINEA_ANCHO' => strlen($artista) * 2.5 + 25 / strlen($artista),
73             'ARTISTA'     => translate($artista),
74         ));
75         sort($albums);
76         for ($i = 0; $i < count($albums); $i++) {
77             // assign data
78             $tpl->setVariable('ALBUM', translate($albums[$i]));
79             // process the block
80             $tpl->parse('ALBUMS');
81         }
82         $y += PUNTOS * ($i + 2);
83         $tpl->parse('ARTISTAS');
84     }
85
86     $results = $tpl->get();
87     $fo = fopen($filename, 'w');
88     fputs($fo, $results);
89     fclose($fo);
90 }
91
92 function translate($str) {
93     static $tabla = array();
94     if (!@$tabla) {
95         $tabla = get_html_translation_table(HTML_ENTITIES);
96         array_shift($tabla);
97         foreach ($tabla as $char => $void) {
98             $tabla[$char] = '&#' . ord($char) . ';';
99         }
100     }
101     return strtr($str, $tabla);
102 }
103
104 # vim: set et sw=4 :
105 ?>