root/dev/common/class.options.php @ 177

Revision 177, 6.4 KB (checked in by exi, 16 years ago)

Removed unneeded admin_rental.php and maintenance.php.
Converted the first admin page to a new format, see class.options.php for details.

Line 
1<?php
2
3/*
4* This is the class which should make it easier to add new options to the admin menu
5* It may only be invoked statically like: options::add(...);
6* Do NOT try to call $options = new options()!!!!!!
7*/
8
9class options
10{
11    // i just want to make sure....
12    function options()
13    {
14        trigger_error('The class "options" may only be invoked statically.', E_USER_ERROR);
15    }
16
17    // field = generic, subfield = look and feel, name = banner, type = select
18    function add($field, $subfield, $set, $description, $name, $type, $buildcallback = '', $onchange = '', $hint = '')
19    {
20        $data = &options::_getData();
21        $data[$field][$subfield][$set][] = array('descr' => $description, 'name' => $name, 'type' => $type,
22                                                 'callback' => $buildcallback,
23                                                 'onchange' => $onchange, 'hint' => $hint);
24    }
25
26    // fast add uses the last used category by options::cat so you don't have to retype everything
27    function fadd($description, $name, $type, $buildcallback = '', $onchange = '', $hint = '')
28    {
29        global $options_faddcat;
30
31        $data = &options::_getData();
32        $data[$options_faddcat[0]][$options_faddcat[1]][$options_faddcat[2]][] = array('descr' => $description, 'name' => $name, 'type' => $type,
33                                                 'callback' => $buildcallback,
34                                                 'onchange' => $onchange, 'hint' => $hint);
35    }
36
37    function cat($field, $subfield, $set)
38    {
39        global $options_faddcat;
40
41        $options_faddcat = array($field, $subfield, $set);
42    }
43
44    function oldMenu($field, $subfield, $link)
45    {
46        $data = &options::_getData();
47
48        $data[$field][$subfield] = $link;
49    }
50
51    function handlePost()
52    {
53        global $config;
54        $data = &options::_getData();
55
56        $current = &$data[$_POST['field']][$_POST['sub']];
57        foreach ($current as $elements)
58        {
59            foreach ($elements as $element)
60            {
61                if ($element['callback'])
62                {
63                    if (!is_callable($element['callback']))
64                    {
65                        trigger_error('Unable to callback to '.$element['callback'][0].'::'.$element['callback'][1], E_USER_ERROR);
66                        return false;
67                    }
68                    call_user_func($element['callback']);
69                    continue;
70                }
71                if ($element['type'] == 'checkbox')
72                {
73                    if ($_POST['option'][$element['name']] == 'on')
74                    {
75                        $config->setConfig($element['name'], '1');
76                    }
77                    else
78                    {
79                        $config->setConfig($element['name'], '0');
80                    }
81                }
82                else
83                {
84                     $config->setConfig($element['name'], $_POST['option'][$element['name']]);
85                }
86            }
87        }
88    }
89
90    function genOptionsPage()
91    {
92        $data = &options::_getData();
93
94        $field = $_REQUEST['field'];
95        $sub = $_REQUEST['sub'];
96
97        global $smarty;
98
99        $smarty->assign('field', $field);
100        $smarty->assign('sub', $sub);
101        $html = $smarty->fetch(get_tpl('admin_options_field_head'));
102        foreach ($data[$field][$sub] as $set => $options)
103        {
104            $smarty->assign('set', $set);
105            $html .= $smarty->fetch(get_tpl('admin_options_set_head'));
106            foreach ($options as $option)
107            {
108                $html .= options::assembleElement($option);
109            }
110            $html .= $smarty->fetch(get_tpl('admin_options_set_foot'));
111        }
112        $html .= $smarty->fetch(get_tpl('admin_options_field_foot'));
113        return $html;
114    }
115
116    function assembleElement(&$element)
117    {
118        global $smarty;
119
120        if ($element['type'] == 'select')
121        {
122            if (!is_callable($element['callback']))
123            {
124                trigger_error('Unable to callback to '.$element['callback'][0].'::'.$element['callback'][1], E_USER_ERROR);
125                return false;
126            }
127
128            $option = call_user_func($element['callback']);
129            $smarty->assign('options', $option);
130            $smarty->assign_by_ref('opt', $element);
131            return $smarty->fetch(get_tpl('admin_options_select'));
132        }
133
134        if ($element['type'] == 'checkbox')
135        {
136            $smarty->assign_by_ref('opt', $element);
137            return $smarty->fetch(get_tpl('admin_options_checkbox'));
138        }
139
140        if ($element['type'] == 'edit')
141        {
142            $smarty->assign_by_ref('opt', $element);
143            return $smarty->fetch(get_tpl('admin_options_edit'));
144        }
145
146        if ($element['type'] == 'custom')
147        {
148            if (!is_callable($element['callback']))
149            {
150                trigger_error('Unable to callback to '.$element['callback'][0].'::'.$element['callback'][1], E_USER_ERROR);
151                return false;
152            }
153
154            $element['html'] = call_user_func($element['callback']);
155            $smarty->assign_by_ref('opt', $element);
156            return $smarty->fetch(get_tpl('admin_options_custom'));
157        }
158
159        // unknown/not implemented element type
160        return $element['name'];
161    }
162
163    function genAdminMenu()
164    {
165        $data = &options::_getData();
166
167        ksort($data);
168        $menubox = new Box('Options');
169        $menubox->setIcon('menu-item.gif');
170        foreach ($data as $field => $subfields)
171        {
172            $menubox->addOption('caption', $field);
173
174            foreach ($subfields as $subfield => $array)
175            {
176                if (!is_array($array))
177                {
178                    $menubox->addOption('link', $subfield, $array);
179                    continue;
180                }
181                $menubox->addOption('link', $subfield, '?a=admin&amp;field='.$field.'&amp;sub='.$subfield);
182            }
183            $lastfield = $field;
184        }
185        return $menubox->generate();
186    }
187
188    function &_getData()
189    {
190        static $data;
191
192        if (!isset($data))
193        {
194            $data = array();
195        }
196        return $data;
197    }
198}
199?>
Note: See TracBrowser for help on using the browser.