]> git.llucax.com Git - software/bife/bife-all.git/blob - index.php
aabb4e9111541916494a00e3ec526acf9bc552de
[software/bife/bife-all.git] / index.php
1 <?
2 // BIFE: Build It FastEr - draft 4
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('templates');
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 process(&$template) {
74         trigger_error('Method not implemented '.get_class($this).
75             '::addContents().', E_USER_ERROR);
76     }
77
78 }
79
80 class BIFE_Container extends BIFE_Base {
81
82     function BIFE_Container() {
83         trigger_error('Can\'t instanciate abstract class BIFE_Container.',
84             E_USER_ERROR);
85     }
86
87     function addContents($contents) {
88         trigger_error('Method not implemented '.get_class($this).
89             '::addContents().', E_USER_ERROR);
90     }
91
92 }
93
94 class BIFE_Generic extends BIFE_Container {
95
96     var $attrs;
97     var $contents;
98
99     function BIFE_Generic($attrs) {
100         $this->attrs    = $attrs;
101         $this->contents = '';
102     }
103
104     function addContents($contents) {
105         $this->contents .= trim($contents);
106     }
107
108     function process(&$template) {
109         $template->loadTemplateFile(get_class($this).'.html');
110         $template->setVariable($this->attrs);
111         $template->setVariable('CONTENTS', $this->contents);
112         return $template->get();
113     }
114
115 }
116
117 class BIFE_Page extends BIFE_Generic {
118     function BIFE_Page($attrs) {
119         $this->BIFE_Generic($attrs);
120     }
121 }
122
123 class BIFE_Title extends BIFE_Generic {
124     function BIFE_Title($attrs) {
125         $this->BIFE_Generic($attrs);
126     }
127 }
128
129 class BIFE_Album extends BIFE_Base {
130     var $attrs;
131     function BIFE_Album($attrs) {
132         $defaults = array(
133             'DIR'           => '.',
134             'RECURSIVE'     => true,
135             'THUMBSFORMAT'  => 'jpeg',
136             'THUMBSDIR'     => '.thumbs',
137             'EXTENSIONS'    => 'png,jpg,jpeg,gif',
138             'SELECTED'      => '',
139             'MAXROWS'       => 0,
140             'COLUMNS'       => 4,
141         );
142         $this->attrs = array_merge($defaults, $attrs);
143     }
144     function addContents($contents) {
145         trigger_error('BIFE_Album is not a container, you can\'t add contents.',
146             E_USER_ERROR);
147     }
148     function process(&$template) {
149         extract($this->attrs, EXTR_SKIP);
150         $album =& new Hook_Album($DIR, $RECURSIVE, $THUMBSFORMAT, $THUMBSDIR, $EXTENSIONS);
151         return $album->album($template, $SELECTED, $MAXROWS, $COLUMNS);
152     }
153 }
154
155 echo $output;
156
157 ?>