]> git.llucax.com Git - software/bife/bife-all.git/blob - index.php
Draft 2.
[software/bife/bife-all.git] / index.php
1 <?
2 // BIFE: Build It FastEr - draft 2
3
4 require_once 'HTML/Template/Sigma.php';
5 require_once 'Album.php';
6
7 $file = "simple.xml";
8
9 $template =& new HTML_Template_Sigma('.');
10 $template->setErrorHandling(PEAR_ERROR_PRINT);
11
12 $output = '';
13 $stack = array();
14
15 function startElement($parser, $name, $attrs) {
16     global $stack;
17     $class = "BIFE_$name";
18     if (class_exists($class)) {
19         $obj =& new $class($attrs);
20         if (!is_a($obj, 'bife_base')) {
21             trigger_error("Class '$class' is not a BIFE_Base.", E_USER_WARNING);
22         }
23         $stack[] =& $obj;
24     } else {
25         trigger_error("Class not found '$class'.", E_USER_ERROR);
26     }
27 }
28
29 function endElement($parser, $name) {
30     global $stack, $template, $output;
31     end($stack);
32     $current =& $stack[key($stack)];
33     array_pop($stack);
34     end($stack);
35     $parent =& $stack[key($stack)];
36     if ($parent) {
37         $parent->addContents($current->process($template));
38     } else {
39         $output = $current->process($template);
40     }
41 }
42
43 function characterData($parser, $data) {
44     global $stack;
45     end($stack);
46     $current =& $stack[key($stack)];
47     $current->addContents($data);
48 }
49
50 $xml_parser = xml_parser_create();
51 xml_set_element_handler($xml_parser, "startElement", "endElement");
52 xml_set_character_data_handler($xml_parser, "characterData");
53 if (!($fp = @fopen($file, "r"))) {
54     die("could not open XML input\n");
55 }
56
57 while ($data = fread($fp, 4096)) {
58     if (!xml_parse($xml_parser, $data, feof($fp))) {
59         die(sprintf("XML error: %s at line %d\n",
60                     xml_error_string(xml_get_error_code($xml_parser)),
61                     xml_get_current_line_number($xml_parser)));
62     }
63 }
64 xml_parser_free($xml_parser);
65
66 class BIFE_Base {
67
68     function BIFE_Base() {
69         trigger_error('Can\'t instanciate abstract class BIFE_Base.',
70             E_USER_ERROR);
71     }
72
73     function addContents($contents) {
74         trigger_error('Method not implemented '.get_class($this).
75             '::addContents().', E_USER_ERROR);
76     }
77
78     function process(&$template) {
79         trigger_error('Method not implemented '.get_class($this).
80             '::addContents().', E_USER_ERROR);
81     }
82
83 }
84
85 class BIFE_Common extends BIFE_Base {
86
87     var $attrs;
88     var $contents;
89
90     function BIFE_Common($attrs) {
91         $this->attrs    = $attrs;
92         $this->contents = '';
93     }
94
95     function addContents($contents) {
96         $this->contents .= trim($contents);
97     }
98
99     function process(&$template) {
100         $template->loadTemplateFile(get_class($this).'.html');
101         $template->setVariable($this->attrs);
102         $template->setVariable('CONTENTS', $this->contents);
103         return $template->get();
104     }
105
106 }
107
108 class BIFE_Page extends BIFE_Common {
109     function BIFE_Page($attrs) {
110         $this->BIFE_Common($attrs);
111     }
112 }
113
114 class BIFE_Title extends BIFE_Common {
115     function BIFE_Title($attrs) {
116         $this->BIFE_Common($attrs);
117     }
118 }
119
120 class BIFE_Album extends BIFE_Base {
121     var $attrs;
122     function BIFE_Album($attrs) {
123         $defaults = array(
124             'DIR'           => '.',
125             'RECURSIVE'     => true,
126             'THUMBSFORMAT'  => 'jpeg',
127             'THUMBSDIR'     => '.thumbs',
128             'EXTENSIONS'    => 'png,jpg,jpeg,gif',
129             'SELECTED'      => '',
130             'MAXROWS'       => 0,
131             'COLUMNS'       => 4,
132         );
133         $this->attrs = array_merge($defaults, $attrs);
134     }
135     function addContents($contents) {
136         trigger_error('BIFE_Album is not a container, you can\'t add contents.',
137             E_USER_ERROR);
138     }
139     function process(&$template) {
140         extract($this->attrs, EXTR_SKIP);
141         $album =& new Hook_Album($DIR, $RECURSIVE, $THUMBSFORMAT, $THUMBSDIR, $EXTENSIONS);
142         return $album->album($template, $SELECTED, $MAXROWS, $COLUMNS);
143     }
144 }
145
146 echo $output;
147
148 ?>