phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_profile.php

History | View | Annotate | Download (49.5 kB)

1 5325 acydburn
<?php
2 7736 acydburn
/**
3 5325 acydburn
*
4 5325 acydburn
* @package acp
5 5325 acydburn
* @version $Id$
6 7736 acydburn
* @copyright (c) 2005 phpBB Group
7 7736 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5325 acydburn
*
9 5325 acydburn
*/
10 5325 acydburn
11 5325 acydburn
/**
12 8147 acydburn
* @ignore
13 8147 acydburn
*/
14 8147 acydburn
if (!defined('IN_PHPBB'))
15 8147 acydburn
{
16 8147 acydburn
        exit;
17 8147 acydburn
}
18 8147 acydburn
19 8147 acydburn
/**
20 5325 acydburn
* @package acp
21 5325 acydburn
*/
22 5325 acydburn
class acp_profile
23 5325 acydburn
{
24 5558 acydburn
        var $u_action;
25 5325 acydburn
26 6839 acydburn
        var $edit_lang_id;
27 6839 acydburn
        var $lang_defs;
28 6839 acydburn
29 5325 acydburn
        function main($id, $mode)
30 5325 acydburn
        {
31 5325 acydburn
                global $config, $db, $user, $auth, $template, $cache;
32 6015 acydburn
                global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
33 5325 acydburn
34 5325 acydburn
                include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
35 5325 acydburn
                include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
36 5325 acydburn
                include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx);
37 5325 acydburn
38 5325 acydburn
                $user->add_lang(array('ucp', 'acp/profile'));
39 5325 acydburn
                $this->tpl_name = 'acp_profile';
40 5325 acydburn
                $this->page_title = 'ACP_CUSTOM_PROFILE_FIELDS';
41 5325 acydburn
42 5325 acydburn
                $action = (isset($_POST['create'])) ? 'create' : request_var('action', '');
43 5325 acydburn
44 5325 acydburn
                $error = array();
45 5325 acydburn
                $s_hidden_fields = '';
46 5325 acydburn
47 5325 acydburn
                // Define some default values for each field type
48 5325 acydburn
                $default_values = array(
49 5325 acydburn
                        FIELD_STRING        => array('field_length' => 10, 'field_minlen' => 0, 'field_maxlen' => 20, 'field_validation' => '.*', 'field_novalue' => '', 'field_default_value' => ''),
50 5325 acydburn
                        FIELD_TEXT                => array('field_length' => '5|80', 'field_minlen' => 0, 'field_maxlen' => 1000, 'field_validation' => '.*', 'field_novalue' => '', 'field_default_value' => ''),
51 5325 acydburn
                        FIELD_INT                => array('field_length' => 5, 'field_minlen' => 0, 'field_maxlen' => 100, 'field_validation' => '', 'field_novalue' => 0, 'field_default_value' => 0),
52 5325 acydburn
                        FIELD_DATE                => array('field_length' => 10, 'field_minlen' => 10, 'field_maxlen' => 10, 'field_validation' => '', 'field_novalue' => ' 0- 0-   0', 'field_default_value' => ' 0- 0-   0'),
53 5325 acydburn
                        FIELD_BOOL                => array('field_length' => 1, 'field_minlen' => 0, 'field_maxlen' => 0, 'field_validation' => '', 'field_novalue' => 0, 'field_default_value' => 0),
54 5325 acydburn
                        FIELD_DROPDOWN        => array('field_length' => 0, 'field_minlen' => 0, 'field_maxlen' => 5, 'field_validation' => '', 'field_novalue' => 0, 'field_default_value' => 0),
55 5325 acydburn
                );
56 5325 acydburn
57 5325 acydburn
                $cp = new custom_profile_admin();
58 5325 acydburn
59 5325 acydburn
                // Build Language array
60 5325 acydburn
                // Based on this, we decide which elements need to be edited later and which language items are missing
61 6839 acydburn
                $this->lang_defs = array();
62 5325 acydburn
63 5325 acydburn
                $sql = 'SELECT lang_id, lang_iso
64 6165 acydburn
                        FROM ' . LANG_TABLE . '
65 6165 acydburn
                        ORDER BY lang_english_name';
66 5325 acydburn
                $result = $db->sql_query($sql);
67 5325 acydburn
68 5325 acydburn
                while ($row = $db->sql_fetchrow($result))
69 5325 acydburn
                {
70 5325 acydburn
                        // Make some arrays with all available languages
71 6839 acydburn
                        $this->lang_defs['id'][$row['lang_id']] = $row['lang_iso'];
72 6839 acydburn
                        $this->lang_defs['iso'][$row['lang_iso']] = $row['lang_id'];
73 5325 acydburn
                }
74 5325 acydburn
                $db->sql_freeresult($result);
75 5325 acydburn
76 5325 acydburn
                $sql = 'SELECT field_id, lang_id
77 5325 acydburn
                        FROM ' . PROFILE_LANG_TABLE . '
78 6165 acydburn
                        ORDER BY lang_id';
79 5325 acydburn
                $result = $db->sql_query($sql);
80 9127 acydburn
81 5325 acydburn
                while ($row = $db->sql_fetchrow($result))
82 5325 acydburn
                {
83 5325 acydburn
                        // Which languages are available for each item
84 6839 acydburn
                        $this->lang_defs['entry'][$row['field_id']][] = $row['lang_id'];
85 5325 acydburn
                }
86 5325 acydburn
                $db->sql_freeresult($result);
87 5325 acydburn
88 5325 acydburn
                // Have some fields been defined?
89 6839 acydburn
                if (isset($this->lang_defs['entry']))
90 5325 acydburn
                {
91 6839 acydburn
                        foreach ($this->lang_defs['entry'] as $field_id => $field_ary)
92 5325 acydburn
                        {
93 5325 acydburn
                                // Fill an array with the languages that are missing for each field
94 6839 acydburn
                                $this->lang_defs['diff'][$field_id] = array_diff(array_values($this->lang_defs['iso']), $field_ary);
95 5325 acydburn
                        }
96 5325 acydburn
                }
97 5325 acydburn
98 5325 acydburn
                switch ($action)
99 5325 acydburn
                {
100 5325 acydburn
                        case 'delete':
101 5325 acydburn
                                $field_id = request_var('field_id', 0);
102 5325 acydburn
103 5325 acydburn
                                if (!$field_id)
104 5325 acydburn
                                {
105 6320 acydburn
                                        trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
106 5325 acydburn
                                }
107 5325 acydburn
108 5325 acydburn
                                if (confirm_box(true))
109 5325 acydburn
                                {
110 8147 acydburn
                                        $sql = 'SELECT field_ident
111 8147 acydburn
                                                FROM ' . PROFILE_FIELDS_TABLE . "
112 5325 acydburn
                                                WHERE field_id = $field_id";
113 5325 acydburn
                                        $result = $db->sql_query($sql);
114 5699 acydburn
                                        $field_ident = (string) $db->sql_fetchfield('field_ident');
115 5325 acydburn
                                        $db->sql_freeresult($result);
116 5325 acydburn
117 6712 davidmj
                                        $db->sql_transaction('begin');
118 6712 davidmj
119 5325 acydburn
                                        $db->sql_query('DELETE FROM ' . PROFILE_FIELDS_TABLE . " WHERE field_id = $field_id");
120 5325 acydburn
                                        $db->sql_query('DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . " WHERE field_id = $field_id");
121 5325 acydburn
                                        $db->sql_query('DELETE FROM ' . PROFILE_LANG_TABLE . " WHERE field_id = $field_id");
122 5325 acydburn
123 6497 acydburn
                                        switch ($db->sql_layer)
124 6082 davidmj
                                        {
125 6082 davidmj
                                                case 'sqlite':
126 6082 davidmj
                                                        $sql = "SELECT sql
127 8147 acydburn
                                                                FROM sqlite_master
128 8147 acydburn
                                                                WHERE type = 'table'
129 6082 davidmj
                                                                        AND name = '" . PROFILE_FIELDS_DATA_TABLE . "'
130 6082 davidmj
                                                                ORDER BY type DESC, name;";
131 6082 davidmj
                                                        $result = $db->sql_query($sql);
132 6082 davidmj
                                                        $row = $db->sql_fetchrow($result);
133 6082 davidmj
                                                        $db->sql_freeresult($result);
134 6082 davidmj
135 6082 davidmj
                                                        // Create a temp table and populate it, destroy the existing one
136 6140 davidmj
                                                        $db->sql_query(preg_replace('#CREATE\s+TABLE\s+"?' . PROFILE_FIELDS_DATA_TABLE . '"?#i', 'CREATE TEMPORARY TABLE ' . PROFILE_FIELDS_DATA_TABLE . '_temp', $row['sql']));
137 6082 davidmj
                                                        $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . '_temp SELECT * FROM ' . PROFILE_FIELDS_DATA_TABLE);
138 6082 davidmj
                                                        $db->sql_query('DROP TABLE ' . PROFILE_FIELDS_DATA_TABLE);
139 6082 davidmj
140 6082 davidmj
                                                        preg_match('#\((.*)\)#s', $row['sql'], $matches);
141 6082 davidmj
142 6098 davidmj
                                                        $new_table_cols = trim($matches[1]);
143 6345 acydburn
                                                        $old_table_cols = preg_split('/,(?=[\\sa-z])/im', $new_table_cols);
144 6082 davidmj
                                                        $column_list = array();
145 6345 acydburn
146 6312 acydburn
                                                        foreach ($old_table_cols as $declaration)
147 6082 davidmj
                                                        {
148 6140 davidmj
                                                                $entities = preg_split('#\s+#', trim($declaration));
149 8101 davidmj
150 8101 davidmj
                                                                if ($entities[0] == 'PRIMARY')
151 8101 davidmj
                                                                {
152 8101 davidmj
                                                                        continue;
153 8101 davidmj
                                                                }
154 8101 davidmj
155 6449 davidmj
                                                                if ($entities[0] !== 'pf_' . $field_ident)
156 6082 davidmj
                                                                {
157 6082 davidmj
                                                                        $column_list[] = $entities[0];
158 6082 davidmj
                                                                }
159 6082 davidmj
                                                        }
160 6082 davidmj
161 6082 davidmj
                                                        $columns = implode(',', $column_list);
162 6082 davidmj
163 6449 davidmj
                                                        $new_table_cols = preg_replace('/' . 'pf_' . $field_ident . '[^,]+,/', '', $new_table_cols);
164 6082 davidmj
165 6082 davidmj
                                                        // create a new table and fill it up. destroy the temp one
166 6082 davidmj
                                                        $db->sql_query('CREATE TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $new_table_cols . ');');
167 6082 davidmj
                                                        $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . PROFILE_FIELDS_DATA_TABLE . '_temp;');
168 6082 davidmj
                                                        $db->sql_query('DROP TABLE ' . PROFILE_FIELDS_DATA_TABLE . '_temp');
169 6082 davidmj
                                                break;
170 6082 davidmj
171 6082 davidmj
                                                default:
172 6712 davidmj
                                                        $db->sql_query('ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " DROP COLUMN pf_$field_ident");
173 6082 davidmj
                                        }
174 6082 davidmj
175 5325 acydburn
                                        $order = 0;
176 5325 acydburn
177 5325 acydburn
                                        $sql = 'SELECT *
178 5325 acydburn
                                                FROM ' . PROFILE_FIELDS_TABLE . '
179 5325 acydburn
                                                ORDER BY field_order';
180 5325 acydburn
                                        $result = $db->sql_query($sql);
181 5325 acydburn
182 5325 acydburn
                                        while ($row = $db->sql_fetchrow($result))
183 5325 acydburn
                                        {
184 5325 acydburn
                                                $order++;
185 5325 acydburn
                                                if ($row['field_order'] != $order)
186 5325 acydburn
                                                {
187 8147 acydburn
                                                        $sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . "
188 8147 acydburn
                                                                SET field_order = $order
189 5325 acydburn
                                                                WHERE field_id = {$row['field_id']}";
190 5325 acydburn
                                                        $db->sql_query($sql);
191 5325 acydburn
                                                }
192 5325 acydburn
                                        }
193 5325 acydburn
                                        $db->sql_freeresult($result);
194 5325 acydburn
195 6712 davidmj
                                        $db->sql_transaction('commit');
196 6712 davidmj
197 5325 acydburn
                                        add_log('admin', 'LOG_PROFILE_FIELD_REMOVED', $field_ident);
198 5325 acydburn
                                        trigger_error($user->lang['REMOVED_PROFILE_FIELD'] . adm_back_link($this->u_action));
199 5325 acydburn
                                }
200 5325 acydburn
                                else
201 5325 acydburn
                                {
202 5325 acydburn
                                        confirm_box(false, 'DELETE_PROFILE_FIELD', build_hidden_fields(array(
203 5325 acydburn
                                                'i'                        => $id,
204 5325 acydburn
                                                'mode'                => $mode,
205 5325 acydburn
                                                'action'        => $action,
206 5325 acydburn
                                                'field_id'        => $field_id,
207 5325 acydburn
                                        )));
208 5325 acydburn
                                }
209 9127 acydburn
210 5325 acydburn
                        break;
211 5325 acydburn
212 5325 acydburn
                        case 'activate':
213 5325 acydburn
                                $field_id = request_var('field_id', 0);
214 5325 acydburn
215 5325 acydburn
                                if (!$field_id)
216 5325 acydburn
                                {
217 6320 acydburn
                                        trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
218 5325 acydburn
                                }
219 9127 acydburn
220 8147 acydburn
                                $sql = 'SELECT lang_id
221 8147 acydburn
                                        FROM ' . LANG_TABLE . "
222 5699 acydburn
                                        WHERE lang_iso = '" . $db->sql_escape($config['default_lang']) . "'";
223 5325 acydburn
                                $result = $db->sql_query($sql);
224 5699 acydburn
                                $default_lang_id = (int) $db->sql_fetchfield('lang_id');
225 5325 acydburn
                                $db->sql_freeresult($result);
226 5325 acydburn
227 6839 acydburn
                                if (!in_array($default_lang_id, $this->lang_defs['entry'][$field_id]))
228 5325 acydburn
                                {
229 6320 acydburn
                                        trigger_error($user->lang['DEFAULT_LANGUAGE_NOT_FILLED'] . adm_back_link($this->u_action), E_USER_WARNING);
230 5325 acydburn
                                }
231 5325 acydburn
232 8147 acydburn
                                $sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . "
233 8147 acydburn
                                        SET field_active = 1
234 5325 acydburn
                                        WHERE field_id = $field_id";
235 5325 acydburn
                                $db->sql_query($sql);
236 5325 acydburn
237 8147 acydburn
                                $sql = 'SELECT field_ident
238 8147 acydburn
                                        FROM ' . PROFILE_FIELDS_TABLE . "
239 5325 acydburn
                                        WHERE field_id = $field_id";
240 5325 acydburn
                                $result = $db->sql_query($sql);
241 5699 acydburn
                                $field_ident = (string) $db->sql_fetchfield('field_ident');
242 5325 acydburn
                                $db->sql_freeresult($result);
243 5325 acydburn
244 5325 acydburn
                                add_log('admin', 'LOG_PROFILE_FIELD_ACTIVATE', $field_ident);
245 5325 acydburn
                                trigger_error($user->lang['PROFILE_FIELD_ACTIVATED'] . adm_back_link($this->u_action));
246 5325 acydburn
247 5325 acydburn
                        break;
248 5325 acydburn
249 5325 acydburn
                        case 'deactivate':
250 5325 acydburn
                                $field_id = request_var('field_id', 0);
251 5325 acydburn
252 5325 acydburn
                                if (!$field_id)
253 5325 acydburn
                                {
254 6320 acydburn
                                        trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
255 5325 acydburn
                                }
256 9127 acydburn
257 5325 acydburn
                                $sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . "
258 8147 acydburn
                                        SET field_active = 0
259 5325 acydburn
                                        WHERE field_id = $field_id";
260 5325 acydburn
                                $db->sql_query($sql);
261 5325 acydburn
262 8147 acydburn
                                $sql = 'SELECT field_ident
263 8147 acydburn
                                        FROM ' . PROFILE_FIELDS_TABLE . "
264 5325 acydburn
                                        WHERE field_id = $field_id";
265 5325 acydburn
                                $result = $db->sql_query($sql);
266 5699 acydburn
                                $field_ident = (string) $db->sql_fetchfield('field_ident');
267 5325 acydburn
                                $db->sql_freeresult($result);
268 5325 acydburn
269 5325 acydburn
                                add_log('admin', 'LOG_PROFILE_FIELD_DEACTIVATE', $field_ident);
270 5325 acydburn
                                trigger_error($user->lang['PROFILE_FIELD_DEACTIVATED'] . adm_back_link($this->u_action));
271 5325 acydburn
272 5325 acydburn
                        break;
273 5325 acydburn
274 5325 acydburn
                        case 'move_up':
275 5325 acydburn
                        case 'move_down':
276 5325 acydburn
                                $field_order = request_var('order', 0);
277 5325 acydburn
                                $order_total = $field_order * 2 + (($action == 'move_up') ? -1 : 1);
278 5325 acydburn
279 5325 acydburn
                                $sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . "
280 5325 acydburn
                                        SET field_order = $order_total - field_order
281 5325 acydburn
                                        WHERE field_order IN ($field_order, " . (($action == 'move_up') ? $field_order - 1 : $field_order + 1) . ')';
282 5325 acydburn
                                $db->sql_query($sql);
283 5325 acydburn
284 5325 acydburn
                        break;
285 5325 acydburn
286 5325 acydburn
                        case 'create':
287 5325 acydburn
                        case 'edit':
288 9127 acydburn
289 5325 acydburn
                                $field_id = request_var('field_id', 0);
290 5325 acydburn
                                $step = request_var('step', 1);
291 5325 acydburn
292 5325 acydburn
                                $submit = (isset($_REQUEST['next']) || isset($_REQUEST['prev'])) ? true : false;
293 5325 acydburn
                                $save = (isset($_REQUEST['save'])) ? true : false;
294 5325 acydburn
295 6839 acydburn
                                // The language id of default language
296 6839 acydburn
                                $this->edit_lang_id = $this->lang_defs['iso'][$config['default_lang']];
297 6839 acydburn
298 5325 acydburn
                                // We are editing... we need to grab basic things
299 5325 acydburn
                                if ($action == 'edit')
300 5325 acydburn
                                {
301 5325 acydburn
                                        if (!$field_id)
302 5325 acydburn
                                        {
303 6320 acydburn
                                                trigger_error($user->lang['NO_FIELD_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
304 5325 acydburn
                                        }
305 5325 acydburn
306 5325 acydburn
                                        $sql = 'SELECT l.*, f.*
307 8147 acydburn
                                                FROM ' . PROFILE_LANG_TABLE . ' l, ' . PROFILE_FIELDS_TABLE . ' f
308 6839 acydburn
                                                WHERE l.lang_id = ' . $this->edit_lang_id . "
309 5325 acydburn
                                                        AND f.field_id = $field_id
310 5325 acydburn
                                                        AND l.field_id = f.field_id";
311 5325 acydburn
                                        $result = $db->sql_query($sql);
312 5325 acydburn
                                        $field_row = $db->sql_fetchrow($result);
313 5325 acydburn
                                        $db->sql_freeresult($result);
314 5325 acydburn
315 5325 acydburn
                                        if (!$field_row)
316 5325 acydburn
                                        {
317 6839 acydburn
                                                // Some admin changed the default language?
318 6839 acydburn
                                                $sql = 'SELECT l.*, f.*
319 8147 acydburn
                                                        FROM ' . PROFILE_LANG_TABLE . ' l, ' . PROFILE_FIELDS_TABLE . ' f
320 6839 acydburn
                                                        WHERE l.lang_id <> ' . $this->edit_lang_id . "
321 6839 acydburn
                                                        AND f.field_id = $field_id
322 6839 acydburn
                                                        AND l.field_id = f.field_id";
323 6839 acydburn
                                                $result = $db->sql_query($sql);
324 6839 acydburn
                                                $field_row = $db->sql_fetchrow($result);
325 6839 acydburn
                                                $db->sql_freeresult($result);
326 6839 acydburn
327 6839 acydburn
                                                if (!$field_row)
328 6839 acydburn
                                                {
329 6839 acydburn
                                                        trigger_error($user->lang['FIELD_NOT_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
330 6839 acydburn
                                                }
331 6839 acydburn
332 6839 acydburn
                                                $this->edit_lang_id = $field_row['lang_id'];
333 5325 acydburn
                                        }
334 5325 acydburn
                                        $field_type = $field_row['field_type'];
335 5325 acydburn
336 5325 acydburn
                                        // Get language entries
337 6165 acydburn
                                        $sql = 'SELECT *
338 8147 acydburn
                                                FROM ' . PROFILE_FIELDS_LANG_TABLE . '
339 6839 acydburn
                                                WHERE lang_id = ' . $this->edit_lang_id . "
340 5325 acydburn
                                                        AND field_id = $field_id
341 6165 acydburn
                                                ORDER BY option_id ASC";
342 5325 acydburn
                                        $result = $db->sql_query($sql);
343 5325 acydburn
344 5325 acydburn
                                        $lang_options = array();
345 5325 acydburn
                                        while ($row = $db->sql_fetchrow($result))
346 5325 acydburn
                                        {
347 6177 acydburn
                                                $lang_options[$row['option_id']] = $row['lang_value'];
348 5325 acydburn
                                        }
349 5325 acydburn
                                        $db->sql_freeresult($result);
350 5325 acydburn
351 5325 acydburn
                                        $s_hidden_fields = '<input type="hidden" name="field_id" value="' . $field_id . '" />';
352 5325 acydburn
                                }
353 5325 acydburn
                                else
354 5325 acydburn
                                {
355 5325 acydburn
                                        // We are adding a new field, define basic params
356 5325 acydburn
                                        $lang_options = $field_row = array();
357 9127 acydburn
358 5325 acydburn
                                        $field_type = request_var('field_type', 0);
359 9127 acydburn
360 5325 acydburn
                                        if (!$field_type)
361 5325 acydburn
                                        {
362 6320 acydburn
                                                trigger_error($user->lang['NO_FIELD_TYPE'] . adm_back_link($this->u_action), E_USER_WARNING);
363 5325 acydburn
                                        }
364 5325 acydburn
365 5325 acydburn
                                        $field_row = array_merge($default_values[$field_type], array(
366 9127 acydburn
                                                'field_ident'                => str_replace(' ', '_', utf8_clean_string(request_var('field_ident', '', true))),
367 5325 acydburn
                                                'field_required'        => 0,
368 5325 acydburn
                                                'field_hide'                => 0,
369 9127 acydburn
                                                'field_show_profile'=> 0,
370 5325 acydburn
                                                'field_no_view'                => 0,
371 5325 acydburn
                                                'field_show_on_reg'        => 0,
372 9916 Kellanved
                                                'field_show_on_vt'        => 0,
373 7920 acydburn
                                                'lang_name'                        => utf8_normalize_nfc(request_var('field_ident', '', true)),
374 5325 acydburn
                                                'lang_explain'                => '',
375 6022 acydburn
                                                'lang_default_value'=> '')
376 5325 acydburn
                                        );
377 5325 acydburn
378 5325 acydburn
                                        $s_hidden_fields = '<input type="hidden" name="field_type" value="' . $field_type . '" />';
379 5325 acydburn
                                }
380 5325 acydburn
381 5965 acydburn
                                // $exclude contains the data we gather in each step
382 5325 acydburn
                                $exclude = array(
383 9916 Kellanved
                                        1        => array('field_ident', 'lang_name', 'lang_explain', 'field_option_none', 'field_show_on_reg', 'field_show_on_vt', 'field_required', 'field_hide', 'field_show_profile', 'field_no_view'),
384 6022 acydburn
                                        2        => array('field_length', 'field_maxlen', 'field_minlen', 'field_validation', 'field_novalue', 'field_default_value'),
385 5325 acydburn
                                        3        => array('l_lang_name', 'l_lang_explain', 'l_lang_default_value', 'l_lang_options')
386 5325 acydburn
                                );
387 5325 acydburn
388 5325 acydburn
                                // Text-based fields require the lang_default_value to be excluded
389 5325 acydburn
                                if ($field_type == FIELD_STRING || $field_type == FIELD_TEXT)
390 5325 acydburn
                                {
391 5325 acydburn
                                        $exclude[1][] = 'lang_default_value';
392 5325 acydburn
                                }
393 5325 acydburn
394 5325 acydburn
                                // option-specific fields require lang_options to be excluded
395 5325 acydburn
                                if ($field_type == FIELD_BOOL || $field_type == FIELD_DROPDOWN)
396 5325 acydburn
                                {
397 5325 acydburn
                                        $exclude[1][] = 'lang_options';
398 5325 acydburn
                                }
399 5325 acydburn
400 7881 acydburn
                                $cp->vars['field_ident']                = ($action == 'create' && $step == 1) ? utf8_clean_string(request_var('field_ident', $field_row['field_ident'], true)) : request_var('field_ident', $field_row['field_ident']);
401 7920 acydburn
                                $cp->vars['lang_name']                        = utf8_normalize_nfc(request_var('lang_name', $field_row['lang_name'], true));
402 7920 acydburn
                                $cp->vars['lang_explain']                = utf8_normalize_nfc(request_var('lang_explain', $field_row['lang_explain'], true));
403 7920 acydburn
                                $cp->vars['lang_default_value']        = utf8_normalize_nfc(request_var('lang_default_value', $field_row['lang_default_value'], true));
404 6510 davidmj
405 9127 acydburn
                                // Visibility Options...
406 9127 acydburn
                                $visibility_ary = array(
407 9127 acydburn
                                        'field_required',
408 9127 acydburn
                                        'field_show_on_reg',
409 9916 Kellanved
                                        'field_show_on_vt',
410 9127 acydburn
                                        'field_show_profile',
411 9127 acydburn
                                        'field_hide',
412 9127 acydburn
                                );
413 5325 acydburn
414 9127 acydburn
                                foreach ($visibility_ary as $val)
415 5965 acydburn
                                {
416 9127 acydburn
                                        $cp->vars[$val] = ($submit || $save) ? request_var($val, 0) : $field_row[$val];
417 5965 acydburn
                                }
418 5965 acydburn
419 9127 acydburn
                                $cp->vars['field_no_view'] = request_var('field_no_view', (int) $field_row['field_no_view']);
420 5965 acydburn
421 5923 acydburn
                                // A boolean field expects an array as the lang options
422 5923 acydburn
                                if ($field_type == FIELD_BOOL)
423 5923 acydburn
                                {
424 7920 acydburn
                                        $options = utf8_normalize_nfc(request_var('lang_options', array(''), true));
425 5923 acydburn
                                }
426 5923 acydburn
                                else
427 5923 acydburn
                                {
428 7920 acydburn
                                        $options = utf8_normalize_nfc(request_var('lang_options', '', true));
429 5923 acydburn
                                }
430 5325 acydburn
431 5325 acydburn
                                // If the user has submitted a form with options (i.e. dropdown field)
432 5325 acydburn
                                if ($options)
433 5325 acydburn
                                {
434 5923 acydburn
                                        $exploded_options = (is_array($options)) ? $options : explode("\n", $options);
435 5325 acydburn
436 5325 acydburn
                                        if (sizeof($exploded_options) == sizeof($lang_options) || $action == 'create')
437 5325 acydburn
                                        {
438 5325 acydburn
                                                // The number of options in the field is equal to the number of options already in the database
439 5325 acydburn
                                                // Or we are creating a new dropdown list.
440 6839 acydburn
                                                $cp->vars['lang_options'] = $exploded_options;
441 5325 acydburn
                                        }
442 5325 acydburn
                                        else if ($action == 'edit')
443 5325 acydburn
                                        {
444 5325 acydburn
                                                // Changing the number of options? (We remove and re-create the option fields)
445 6839 acydburn
                                                $cp->vars['lang_options'] = $exploded_options;
446 5325 acydburn
                                        }
447 5325 acydburn
                                }
448 5325 acydburn
                                else
449 5325 acydburn
                                {
450 6839 acydburn
                                        $cp->vars['lang_options'] = $lang_options;
451 5325 acydburn
                                }
452 5325 acydburn
453 5325 acydburn
                                // step 2
454 5325 acydburn
                                foreach ($exclude[2] as $key)
455 5325 acydburn
                                {
456 7920 acydburn
                                        $var = utf8_normalize_nfc(request_var($key, $field_row[$key], true));
457 5325 acydburn
458 5325 acydburn
                                        // Manipulate the intended variables a little bit if needed
459 5325 acydburn
                                        if ($field_type == FIELD_DROPDOWN && $key == 'field_maxlen')
460 5325 acydburn
                                        {
461 5325 acydburn
                                                // Get the number of options if this key is 'field_maxlen'
462 7920 acydburn
                                                $var = sizeof(explode("\n", utf8_normalize_nfc(request_var('lang_options', '', true))));
463 5325 acydburn
                                        }
464 7727 kellanved
                                        else if ($field_type == FIELD_TEXT && $key == 'field_length')
465 5325 acydburn
                                        {
466 5325 acydburn
                                                if (isset($_REQUEST['rows']))
467 5325 acydburn
                                                {
468 5325 acydburn
                                                        $cp->vars['rows'] = request_var('rows', 0);
469 5325 acydburn
                                                        $cp->vars['columns'] = request_var('columns', 0);
470 5325 acydburn
                                                        $var = $cp->vars['rows'] . '|' . $cp->vars['columns'];
471 5325 acydburn
                                                }
472 5325 acydburn
                                                else
473 5325 acydburn
                                                {
474 5325 acydburn
                                                        $row_col = explode('|', $var);
475 5325 acydburn
                                                        $cp->vars['rows'] = $row_col[0];
476 5325 acydburn
                                                        $cp->vars['columns'] = $row_col[1];
477 5325 acydburn
                                                }
478 5325 acydburn
                                        }
479 7727 kellanved
                                        else if ($field_type == FIELD_DATE && $key == 'field_default_value')
480 5325 acydburn
                                        {
481 8236 kellanved
                                                $always_now = request_var('always_now', -1);
482 9127 acydburn
483 8236 kellanved
                                                if ($always_now == 1 || ($always_now === -1 && $var == 'now'))
484 5325 acydburn
                                                {
485 5325 acydburn
                                                        $now = getdate();
486 5325 acydburn
487 5325 acydburn
                                                        $cp->vars['field_default_value_day'] = $now['mday'];
488 5325 acydburn
                                                        $cp->vars['field_default_value_month'] = $now['mon'];
489 5325 acydburn
                                                        $cp->vars['field_default_value_year'] = $now['year'];
490 5325 acydburn
                                                        $var = $_POST['field_default_value'] = 'now';
491 5325 acydburn
                                                }
492 5325 acydburn
                                                else
493 5325 acydburn
                                                {
494 5325 acydburn
                                                        if (isset($_REQUEST['field_default_value_day']))
495 5325 acydburn
                                                        {
496 5325 acydburn
                                                                $cp->vars['field_default_value_day'] = request_var('field_default_value_day', 0);
497 5325 acydburn
                                                                $cp->vars['field_default_value_month'] = request_var('field_default_value_month', 0);
498 5325 acydburn
                                                                $cp->vars['field_default_value_year'] = request_var('field_default_value_year', 0);
499 5325 acydburn
                                                                $var = $_POST['field_default_value'] = sprintf('%2d-%2d-%4d', $cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']);
500 5325 acydburn
                                                        }
501 5325 acydburn
                                                        else
502 5325 acydburn
                                                        {
503 5325 acydburn
                                                                list($cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']) = explode('-', $var);
504 5325 acydburn
                                                        }
505 9127 acydburn
                                                }
506 8147 acydburn
                                        }
507 8033 acydburn
                                        /* else if ($field_type == FIELD_BOOL && $key == 'field_default_value')
508 7957 kellanved
                                        {
509 7957 kellanved
                                                // Get the number of options if this key is 'field_maxlen'
510 7957 kellanved
                                                $var = request_var('field_default_value', 0);
511 8033 acydburn
                                        }*/
512 10216 toonarmy
                                        else if ($field_type == FIELD_INT && $key == 'field_default_value')
513 10216 toonarmy
                                        {
514 10216 toonarmy
                                                // Permit an empty string
515 10967 git-gate
                                                if ($action == 'create' && request_var('field_default_value', '') === '')
516 10216 toonarmy
                                                {
517 10216 toonarmy
                                                        $var = '';
518 10216 toonarmy
                                                }
519 10216 toonarmy
                                        }
520 5325 acydburn
521 5325 acydburn
                                        $cp->vars[$key] = $var;
522 5325 acydburn
                                }
523 5325 acydburn
524 5325 acydburn
                                // step 3 - all arrays
525 5325 acydburn
                                if ($action == 'edit')
526 5325 acydburn
                                {
527 5325 acydburn
                                        // Get language entries
528 6165 acydburn
                                        $sql = 'SELECT *
529 8147 acydburn
                                                FROM ' . PROFILE_FIELDS_LANG_TABLE . '
530 6839 acydburn
                                                WHERE lang_id <> ' . $this->edit_lang_id . "
531 5325 acydburn
                                                        AND field_id = $field_id
532 5325 acydburn
                                                ORDER BY option_id ASC";
533 5325 acydburn
                                        $result = $db->sql_query($sql);
534 5325 acydburn
535 5325 acydburn
                                        $l_lang_options = array();
536 5325 acydburn
                                        while ($row = $db->sql_fetchrow($result))
537 5325 acydburn
                                        {
538 6177 acydburn
                                                $l_lang_options[$row['lang_id']][$row['option_id']] = $row['lang_value'];
539 5325 acydburn
                                        }
540 5325 acydburn
                                        $db->sql_freeresult($result);
541 5325 acydburn
542 9127 acydburn
543 6165 acydburn
                                        $sql = 'SELECT lang_id, lang_name, lang_explain, lang_default_value
544 8147 acydburn
                                                FROM ' . PROFILE_LANG_TABLE . '
545 6839 acydburn
                                                WHERE lang_id <> ' . $this->edit_lang_id . "
546 5325 acydburn
                                                        AND field_id = $field_id
547 5325 acydburn
                                                ORDER BY lang_id ASC";
548 5325 acydburn
                                        $result = $db->sql_query($sql);
549 5325 acydburn
550 5325 acydburn
                                        $l_lang_name = $l_lang_explain = $l_lang_default_value = array();
551 5325 acydburn
                                        while ($row = $db->sql_fetchrow($result))
552 5325 acydburn
                                        {
553 5325 acydburn
                                                $l_lang_name[$row['lang_id']] = $row['lang_name'];
554 5325 acydburn
                                                $l_lang_explain[$row['lang_id']] = $row['lang_explain'];
555 5325 acydburn
                                                $l_lang_default_value[$row['lang_id']] = $row['lang_default_value'];
556 5325 acydburn
                                        }
557 5325 acydburn
                                        $db->sql_freeresult($result);
558 5325 acydburn
                                }
559 9127 acydburn
560 5325 acydburn
                                foreach ($exclude[3] as $key)
561 5325 acydburn
                                {
562 7920 acydburn
                                        $cp->vars[$key] = utf8_normalize_nfc(request_var($key, array(0 => ''), true));
563 5325 acydburn
564 5325 acydburn
                                        if (!$cp->vars[$key] && $action == 'edit')
565 5325 acydburn
                                        {
566 5325 acydburn
                                                $cp->vars[$key] = $$key;
567 5325 acydburn
                                        }
568 7730 kellanved
                                        else if ($key == 'l_lang_options' && $field_type == FIELD_BOOL)
569 5325 acydburn
                                        {
570 7920 acydburn
                                                $cp->vars[$key] = utf8_normalize_nfc(request_var($key, array(0 => array('')), true));
571 7730 kellanved
                                        }
572 7730 kellanved
                                        else if ($key == 'l_lang_options' && is_array($cp->vars[$key]))
573 7730 kellanved
                                        {
574 5325 acydburn
                                                foreach ($cp->vars[$key] as $lang_id => $options)
575 5325 acydburn
                                                {
576 5325 acydburn
                                                        $cp->vars[$key][$lang_id] = explode("\n", $options);
577 5325 acydburn
                                                }
578 9127 acydburn
579 5325 acydburn
                                        }
580 5325 acydburn
                                }
581 5325 acydburn
582 6544 acydburn
                                // Check for general issues in every step
583 6544 acydburn
                                if ($submit) //  && $step == 1
584 5325 acydburn
                                {
585 5325 acydburn
                                        // Check values for step 1
586 5325 acydburn
                                        if ($cp->vars['field_ident'] == '')
587 5325 acydburn
                                        {
588 5325 acydburn
                                                $error[] = $user->lang['EMPTY_FIELD_IDENT'];
589 5325 acydburn
                                        }
590 5325 acydburn
591 5325 acydburn
                                        if (!preg_match('/^[a-z_]+$/', $cp->vars['field_ident']))
592 5325 acydburn
                                        {
593 5325 acydburn
                                                $error[] = $user->lang['INVALID_CHARS_FIELD_IDENT'];
594 5325 acydburn
                                        }
595 5325 acydburn
596 6520 acydburn
                                        if (strlen($cp->vars['field_ident']) > 17)
597 6520 acydburn
                                        {
598 6520 acydburn
                                                $error[] = $user->lang['INVALID_FIELD_IDENT_LEN'];
599 6520 acydburn
                                        }
600 6520 acydburn
601 5325 acydburn
                                        if ($cp->vars['lang_name'] == '')
602 5325 acydburn
                                        {
603 6114 acydburn
                                                $error[] = $user->lang['EMPTY_USER_FIELD_NAME'];
604 5325 acydburn
                                        }
605 5325 acydburn
606 6544 acydburn
                                        if ($field_type == FIELD_DROPDOWN && !sizeof($cp->vars['lang_options']))
607 5325 acydburn
                                        {
608 6544 acydburn
                                                $error[] = $user->lang['NO_FIELD_ENTRIES'];
609 6232 acydburn
                                        }
610 6351 acydburn
611 6544 acydburn
                                        if ($field_type == FIELD_BOOL && (empty($cp->vars['lang_options'][0]) || empty($cp->vars['lang_options'][1])))
612 6544 acydburn
                                        {
613 6544 acydburn
                                                $error[] = $user->lang['NO_FIELD_ENTRIES'];
614 6544 acydburn
                                        }
615 6544 acydburn
616 6351 acydburn
                                        // Check for already existing field ident
617 6351 acydburn
                                        if ($action != 'edit')
618 6351 acydburn
                                        {
619 8147 acydburn
                                                $sql = 'SELECT field_ident
620 8147 acydburn
                                                        FROM ' . PROFILE_FIELDS_TABLE . "
621 6351 acydburn
                                                        WHERE field_ident = '" . $db->sql_escape($cp->vars['field_ident']) . "'";
622 6351 acydburn
                                                $result = $db->sql_query($sql);
623 6351 acydburn
                                                $row = $db->sql_fetchrow($result);
624 6351 acydburn
                                                $db->sql_freeresult($result);
625 6351 acydburn
626 6351 acydburn
                                                if ($row)
627 6351 acydburn
                                                {
628 6351 acydburn
                                                        $error[] = $user->lang['FIELD_IDENT_ALREADY_EXIST'];
629 6351 acydburn
                                                }
630 6351 acydburn
                                        }
631 5325 acydburn
                                }
632 5325 acydburn
633 5325 acydburn
                                $step = (isset($_REQUEST['next'])) ? $step + 1 : ((isset($_REQUEST['prev'])) ? $step - 1 : $step);
634 5325 acydburn
635 5325 acydburn
                                if (sizeof($error))
636 5325 acydburn
                                {
637 5325 acydburn
                                        $step--;
638 5325 acydburn
                                        $submit = false;
639 5325 acydburn
                                }
640 5325 acydburn
641 5325 acydburn
                                // Build up the specific hidden fields
642 5325 acydburn
                                foreach ($exclude as $num => $key_ary)
643 5325 acydburn
                                {
644 5325 acydburn
                                        if ($num == $step)
645 5325 acydburn
                                        {
646 5325 acydburn
                                                continue;
647 5325 acydburn
                                        }
648 5965 acydburn
649 5325 acydburn
                                        $_new_key_ary = array();
650 5965 acydburn
651 5325 acydburn
                                        foreach ($key_ary as $key)
652 5325 acydburn
                                        {
653 7729 kellanved
                                                if ($field_type == FIELD_TEXT && $key == 'field_length' && isset($_REQUEST['rows']))
654 5325 acydburn
                                                {
655 7729 kellanved
                                                        $cp->vars['rows'] = request_var('rows', 0);
656 7729 kellanved
                                                        $cp->vars['columns'] = request_var('columns', 0);
657 7729 kellanved
                                                        $_new_key_ary[$key] = $cp->vars['rows'] . '|' . $cp->vars['columns'];
658 5325 acydburn
                                                }
659 7934 kellanved
                                                else if ($field_type == FIELD_DATE && $key == 'field_default_value')
660 7934 kellanved
                                                {
661 7934 kellanved
                                                        $always_now = request_var('always_now', 0);
662 7920 acydburn
663 7934 kellanved
                                                        if ($always_now)
664 7934 kellanved
                                                        {
665 7934 kellanved
                                                                $_new_key_ary[$key] = 'now';
666 7934 kellanved
                                                        }
667 7934 kellanved
                                                        else if (isset($_REQUEST['field_default_value_day']))
668 7934 kellanved
                                                        {
669 7934 kellanved
                                                                $cp->vars['field_default_value_day'] = request_var('field_default_value_day', 0);
670 7934 kellanved
                                                                $cp->vars['field_default_value_month'] = request_var('field_default_value_month', 0);
671 7934 kellanved
                                                                $cp->vars['field_default_value_year'] = request_var('field_default_value_year', 0);
672 7934 kellanved
                                                                $_new_key_ary[$key]  = sprintf('%2d-%2d-%4d', $cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']);
673 7934 kellanved
                                                        }
674 7934 kellanved
                                                }
675 7934 kellanved
                                                else if ($field_type == FIELD_BOOL && $key == 'l_lang_options' && isset($_REQUEST['l_lang_options']))
676 7730 kellanved
                                                {
677 7920 acydburn
                                                        $_new_key_ary[$key] = utf8_normalize_nfc(request_var($key, array(array('')), true));
678 7730 kellanved
                                                }
679 5923 acydburn
                                                else
680 5923 acydburn
                                                {
681 7729 kellanved
                                                        if (!isset($_REQUEST[$key]))
682 7729 kellanved
                                                        {
683 7729 kellanved
                                                                $var = false;
684 7729 kellanved
                                                        }
685 8028 kellanved
                                                        else if ($key == 'field_ident' && isset($cp->vars[$key]))
686 8028 kellanved
                                                        {
687 8028 kellanved
                                                                $_new_key_ary[$key]= $cp->vars[$key];
688 8028 kellanved
                                                        }
689 7729 kellanved
                                                        else
690 7729 kellanved
                                                        {
691 7920 acydburn
                                                                $_new_key_ary[$key] = (is_array($_REQUEST[$key])) ? utf8_normalize_nfc(request_var($key, array(''), true)) : utf8_normalize_nfc(request_var($key, '', true));
692 7729 kellanved
                                                        }
693 5923 acydburn
                                                }
694 5325 acydburn
                                        }
695 5325 acydburn
696 5325 acydburn
                                        $s_hidden_fields .= build_hidden_fields($_new_key_ary);
697 5325 acydburn
                                }
698 5325 acydburn
699 5325 acydburn
                                if (!sizeof($error))
700 5325 acydburn
                                {
701 6839 acydburn
                                        if ($step == 3 && (sizeof($this->lang_defs['iso']) == 1 || $save))
702 5325 acydburn
                                        {
703 6839 acydburn
                                                $this->save_profile_field($cp, $field_type, $action);
704 5325 acydburn
                                        }
705 5965 acydburn
                                        else if ($action == 'edit' && $save)
706 5965 acydburn
                                        {
707 6839 acydburn
                                                $this->save_profile_field($cp, $field_type, $action);
708 5965 acydburn
                                        }
709 5325 acydburn
                                }
710 5325 acydburn
711 5325 acydburn
                                $template->assign_vars(array(
712 5325 acydburn
                                        'S_EDIT'                        => true,
713 5965 acydburn
                                        'S_EDIT_MODE'                => ($action == 'edit') ? true : false,
714 5325 acydburn
                                        'ERROR_MSG'                        => (sizeof($error)) ? implode('<br />', $error) : '',
715 5325 acydburn
716 5325 acydburn
                                        'L_TITLE'                        => $user->lang['STEP_' . $step . '_TITLE_' . strtoupper($action)],
717 5325 acydburn
                                        'L_EXPLAIN'                        => $user->lang['STEP_' . $step . '_EXPLAIN_' . strtoupper($action)],
718 9127 acydburn
719 5325 acydburn
                                        'U_ACTION'                        => $this->u_action . "&amp;action=$action&amp;step=$step",
720 5325 acydburn
                                        'U_BACK'                        => $this->u_action)
721 5325 acydburn
                                );
722 5325 acydburn
723 5325 acydburn
                                // Now go through the steps
724 5325 acydburn
                                switch ($step)
725 5325 acydburn
                                {
726 5325 acydburn
                                        // Create basic options - only small differences between field types
727 8147 acydburn
                                        case 1:
728 9127 acydburn
729 5325 acydburn
                                                // Build common create options
730 5325 acydburn
                                                $template->assign_vars(array(
731 5325 acydburn
                                                        'S_STEP_ONE'                => true,
732 5965 acydburn
                                                        'S_FIELD_REQUIRED'        => ($cp->vars['field_required']) ? true : false,
733 5965 acydburn
                                                        'S_SHOW_ON_REG'                => ($cp->vars['field_show_on_reg']) ? true : false,
734 9916 Kellanved
                                                        'S_SHOW_ON_VT'                => ($cp->vars['field_show_on_vt']) ? true : false,
735 5965 acydburn
                                                        'S_FIELD_HIDE'                => ($cp->vars['field_hide']) ? true : false,
736 9127 acydburn
                                                        'S_SHOW_PROFILE'        => ($cp->vars['field_show_profile']) ? true : false,
737 5965 acydburn
                                                        'S_FIELD_NO_VIEW'        => ($cp->vars['field_no_view']) ? true : false,
738 5325 acydburn
739 5325 acydburn
                                                        'L_LANG_SPECIFIC'        => sprintf($user->lang['LANG_SPECIFIC_OPTIONS'], $config['default_lang']),
740 5325 acydburn
                                                        'FIELD_TYPE'                => $user->lang['FIELD_' . strtoupper($cp->profile_types[$field_type])],
741 5325 acydburn
                                                        'FIELD_IDENT'                => $cp->vars['field_ident'],
742 5325 acydburn
                                                        'LANG_NAME'                        => $cp->vars['lang_name'],
743 5325 acydburn
                                                        'LANG_EXPLAIN'                => $cp->vars['lang_explain'])
744 5325 acydburn
                                                );
745 5325 acydburn
746 5325 acydburn
                                                // String and Text needs to set default values here...
747 5325 acydburn
                                                if ($field_type == FIELD_STRING || $field_type == FIELD_TEXT)
748 5325 acydburn
                                                {
749 5325 acydburn
                                                        $template->assign_vars(array(
750 5325 acydburn
                                                                'S_TEXT'                => ($field_type == FIELD_TEXT) ? true : false,
751 5325 acydburn
                                                                'S_STRING'                => ($field_type == FIELD_STRING) ? true : false,
752 5325 acydburn
753 5325 acydburn
                                                                'L_DEFAULT_VALUE_EXPLAIN'        => $user->lang[strtoupper($cp->profile_types[$field_type]) . '_DEFAULT_VALUE_EXPLAIN'],
754 5325 acydburn
                                                                'LANG_DEFAULT_VALUE'                => $cp->vars['lang_default_value'])
755 5325 acydburn
                                                        );
756 5325 acydburn
                                                }
757 9127 acydburn
758 5325 acydburn
                                                if ($field_type == FIELD_BOOL || $field_type == FIELD_DROPDOWN)
759 5325 acydburn
                                                {
760 5325 acydburn
                                                        // Initialize these array elements if we are creating a new field
761 5325 acydburn
                                                        if (!sizeof($cp->vars['lang_options']))
762 5325 acydburn
                                                        {
763 5325 acydburn
                                                                if ($field_type == FIELD_BOOL)
764 5325 acydburn
                                                                {
765 5325 acydburn
                                                                        // No options have been defined for a boolean field.
766 5325 acydburn
                                                                        $cp->vars['lang_options'][0] = '';
767 5325 acydburn
                                                                        $cp->vars['lang_options'][1] = '';
768 5325 acydburn
                                                                }
769 5325 acydburn
                                                                else
770 5325 acydburn
                                                                {
771 5325 acydburn
                                                                        // No options have been defined for the dropdown menu
772 5325 acydburn
                                                                        $cp->vars['lang_options'] = array();
773 5325 acydburn
                                                                }
774 5325 acydburn
                                                        }
775 5325 acydburn
776 5325 acydburn
                                                        $template->assign_vars(array(
777 5325 acydburn
                                                                'S_BOOL'                => ($field_type == FIELD_BOOL) ? true : false,
778 5325 acydburn
                                                                'S_DROPDOWN'        => ($field_type == FIELD_DROPDOWN) ? true : false,
779 5325 acydburn
780 5325 acydburn
                                                                'L_LANG_OPTIONS_EXPLAIN'        => $user->lang[strtoupper($cp->profile_types[$field_type]) . '_ENTRIES_EXPLAIN'],
781 5325 acydburn
                                                                'LANG_OPTIONS'                                => ($field_type == FIELD_DROPDOWN) ? implode("\n", $cp->vars['lang_options']) : '',
782 5325 acydburn
                                                                'FIRST_LANG_OPTION'                        => ($field_type == FIELD_BOOL) ? $cp->vars['lang_options'][0] : '',
783 5325 acydburn
                                                                'SECOND_LANG_OPTION'                => ($field_type == FIELD_BOOL) ? $cp->vars['lang_options'][1] : '')
784 5325 acydburn
                                                        );
785 5325 acydburn
                                                }
786 9127 acydburn
787 5325 acydburn
                                        break;
788 5325 acydburn
789 5325 acydburn
                                        case 2:
790 9127 acydburn
791 5325 acydburn
                                                $template->assign_vars(array(
792 5325 acydburn
                                                        'S_STEP_TWO'                => true,
793 7944 kellanved
                                                        'L_NEXT_STEP'                        => (sizeof($this->lang_defs['iso']) == 1) ? $user->lang['SAVE'] : $user->lang['PROFILE_LANG_OPTIONS'])
794 5325 acydburn
                                                );
795 5325 acydburn
796 5325 acydburn
                                                // Build options based on profile type
797 5325 acydburn
                                                $function = 'get_' . $cp->profile_types[$field_type] . '_options';
798 5325 acydburn
                                                $options = $cp->$function();
799 5325 acydburn
800 5325 acydburn
                                                foreach ($options as $num => $option_ary)
801 5325 acydburn
                                                {
802 5325 acydburn
                                                        $template->assign_block_vars('option', $option_ary);
803 5325 acydburn
                                                }
804 5325 acydburn
805 5325 acydburn
                                        break;
806 5325 acydburn
807 5325 acydburn
                                        // Define remaining language variables
808 8147 acydburn
                                        case 3:
809 5325 acydburn
810 5965 acydburn
                                                $template->assign_var('S_STEP_THREE', true);
811 5325 acydburn
                                                $options = $this->build_language_options($cp, $field_type, $action);
812 5325 acydburn
813 5325 acydburn
                                                foreach ($options as $lang_id => $lang_ary)
814 5325 acydburn
                                                {
815 5325 acydburn
                                                        $template->assign_block_vars('options', array(
816 6839 acydburn
                                                                'LANGUAGE'                => sprintf($user->lang[(($lang_id == $this->edit_lang_id) ? 'DEFAULT_' : '') . 'ISO_LANGUAGE'], $lang_ary['lang_iso']))
817 5325 acydburn
                                                        );
818 5325 acydburn
819 5325 acydburn
                                                        foreach ($lang_ary['fields'] as $field_ident => $field_ary)
820 5325 acydburn
                                                        {
821 5325 acydburn
                                                                $template->assign_block_vars('options.field', array(
822 5325 acydburn
                                                                        'L_TITLE'                => $field_ary['TITLE'],
823 5325 acydburn
                                                                        'L_EXPLAIN'                => (isset($field_ary['EXPLAIN'])) ? $field_ary['EXPLAIN'] : '',
824 5325 acydburn
                                                                        'FIELD'                        => $field_ary['FIELD'])
825 5325 acydburn
                                                                );
826 5325 acydburn
                                                        }
827 5325 acydburn
                                                }
828 9127 acydburn
829 5325 acydburn
                                        break;
830 5325 acydburn
                                }
831 5965 acydburn
832 5965 acydburn
                                $template->assign_vars(array(
833 5965 acydburn
                                        'S_HIDDEN_FIELDS'        => $s_hidden_fields)
834 5965 acydburn
                                );
835 5965 acydburn
836 5325 acydburn
                                return;
837 5325 acydburn
838 5325 acydburn
                        break;
839 5325 acydburn
                }
840 9127 acydburn
841 5325 acydburn
                $sql = 'SELECT *
842 5325 acydburn
                        FROM ' . PROFILE_FIELDS_TABLE . '
843 5325 acydburn
                        ORDER BY field_order';
844 5325 acydburn
                $result = $db->sql_query($sql);
845 5325 acydburn
846 6544 acydburn
                $s_one_need_edit = false;
847 5325 acydburn
                while ($row = $db->sql_fetchrow($result))
848 5325 acydburn
                {
849 5325 acydburn
                        $active_lang = (!$row['field_active']) ? 'ACTIVATE' : 'DEACTIVATE';
850 5325 acydburn
                        $active_value = (!$row['field_active']) ? 'activate' : 'deactivate';
851 5325 acydburn
                        $id = $row['field_id'];
852 5325 acydburn
853 6839 acydburn
                        $s_need_edit = (sizeof($this->lang_defs['diff'][$row['field_id']])) ? true : false;
854 6544 acydburn
855 6544 acydburn
                        if ($s_need_edit)
856 6544 acydburn
                        {
857 6544 acydburn
                                $s_one_need_edit = true;
858 6544 acydburn
                        }
859 6544 acydburn
860 5325 acydburn
                        $template->assign_block_vars('fields', array(
861 5325 acydburn
                                'FIELD_IDENT'                => $row['field_ident'],
862 5325 acydburn
                                'FIELD_TYPE'                => $user->lang['FIELD_' . strtoupper($cp->profile_types[$row['field_type']])],
863 5325 acydburn
864 5325 acydburn
                                'L_ACTIVATE_DEACTIVATE'                => $user->lang[$active_lang],
865 5325 acydburn
                                'U_ACTIVATE_DEACTIVATE'                => $this->u_action . "&amp;action=$active_value&amp;field_id=$id",
866 5325 acydburn
                                'U_EDIT'                                        => $this->u_action . "&amp;action=edit&amp;field_id=$id",
867 6544 acydburn
                                'U_TRANSLATE'                                => $this->u_action . "&amp;action=edit&amp;field_id=$id&amp;step=3",
868 5325 acydburn
                                'U_DELETE'                                        => $this->u_action . "&amp;action=delete&amp;field_id=$id",
869 5325 acydburn
                                'U_MOVE_UP'                                        => $this->u_action . "&amp;action=move_up&amp;order={$row['field_order']}",
870 5325 acydburn
                                'U_MOVE_DOWN'                                => $this->u_action . "&amp;action=move_down&amp;order={$row['field_order']}",
871 5325 acydburn
872 6544 acydburn
                                'S_NEED_EDIT'                                => $s_need_edit)
873 5325 acydburn
                        );
874 5325 acydburn
                }
875 5325 acydburn
                $db->sql_freeresult($result);
876 5325 acydburn
877 6544 acydburn
                // At least one option field needs editing?
878 6544 acydburn
                if ($s_one_need_edit)
879 6544 acydburn
                {
880 6544 acydburn
                        $template->assign_var('S_NEED_EDIT', true);
881 6544 acydburn
                }
882 6544 acydburn
883 5325 acydburn
                $s_select_type = '';
884 5325 acydburn
                foreach ($cp->profile_types as $key => $value)
885 5325 acydburn
                {
886 5325 acydburn
                        $s_select_type .= '<option value="' . $key . '">' . $user->lang['FIELD_' . strtoupper($value)] . '</option>';
887 5325 acydburn
                }
888 5325 acydburn
889 5325 acydburn
                $template->assign_vars(array(
890 5325 acydburn
                        'U_ACTION'                        => $this->u_action,
891 5325 acydburn
                        'S_TYPE_OPTIONS'        => $s_select_type)
892 5325 acydburn
                );
893 5325 acydburn
        }
894 5325 acydburn
895 5325 acydburn
        /**
896 5325 acydburn
        * Build all Language specific options
897 5325 acydburn
        */
898 5325 acydburn
        function build_language_options(&$cp, $field_type, $action = 'create')
899 5325 acydburn
        {
900 5325 acydburn
                global $user, $config, $db;
901 5325 acydburn
902 6839 acydburn
                $default_lang_id = (!empty($this->edit_lang_id)) ? $this->edit_lang_id : $this->lang_defs['iso'][$config['default_lang']];
903 6839 acydburn
904 8147 acydburn
                $sql = 'SELECT lang_id, lang_iso
905 6839 acydburn
                        FROM ' . LANG_TABLE . '
906 6839 acydburn
                        WHERE lang_id <> ' . (int) $default_lang_id . '
907 6839 acydburn
                        ORDER BY lang_english_name';
908 5325 acydburn
                $result = $db->sql_query($sql);
909 5325 acydburn
910 5325 acydburn
                $languages = array();
911 5325 acydburn
                while ($row = $db->sql_fetchrow($result))
912 5325 acydburn
                {
913 5325 acydburn
                        $languages[$row['lang_id']] = $row['lang_iso'];
914 5325 acydburn
                }
915 5325 acydburn
                $db->sql_freeresult($result);
916 9127 acydburn
917 5325 acydburn
                $options = array();
918 5325 acydburn
                $options['lang_name'] = 'string';
919 5325 acydburn
                if ($cp->vars['lang_explain'])
920 5325 acydburn
                {
921 5325 acydburn
                        $options['lang_explain'] = 'text';
922 5325 acydburn
                }
923 9127 acydburn
924 5325 acydburn
                switch ($field_type)
925 5325 acydburn
                {
926 5325 acydburn
                        case FIELD_BOOL:
927 5325 acydburn
                                $options['lang_options'] = 'two_options';
928 5325 acydburn
                        break;
929 5325 acydburn
930 5325 acydburn
                        case FIELD_DROPDOWN:
931 5325 acydburn
                                $options['lang_options'] = 'optionfield';
932 5325 acydburn
                        break;
933 9127 acydburn
934 5325 acydburn
                        case FIELD_TEXT:
935 5325 acydburn
                        case FIELD_STRING:
936 9516 terrafrost
                                if (strlen($cp->vars['lang_default_value']))
937 5325 acydburn
                                {
938 5325 acydburn
                                        $options['lang_default_value'] = ($field_type == FIELD_STRING) ? 'string' : 'text';
939 5325 acydburn
                                }
940 5325 acydburn
                        break;
941 5325 acydburn
                }
942 9127 acydburn
943 5325 acydburn
                $lang_options = array();
944 5325 acydburn
945 5325 acydburn
                foreach ($options as $field => $field_type)
946 5325 acydburn
                {
947 6839 acydburn
                        $lang_options[1]['lang_iso'] = $this->lang_defs['id'][$default_lang_id];
948 5325 acydburn
                        $lang_options[1]['fields'][$field] = array(
949 5325 acydburn
                                'TITLE'                => $user->lang['CP_' . strtoupper($field)],
950 8050 naderman
                                'FIELD'                => '<dd>' . ((is_array($cp->vars[$field])) ? implode('<br />', $cp->vars[$field]) : bbcode_nl2br($cp->vars[$field])) . '</dd>'
951 5325 acydburn
                        );
952 5325 acydburn
953 5325 acydburn
                        if (isset($user->lang['CP_' . strtoupper($field) . '_EXPLAIN']))
954 5325 acydburn
                        {
955 5325 acydburn
                                $lang_options[1]['fields'][$field]['EXPLAIN'] = $user->lang['CP_' . strtoupper($field) . '_EXPLAIN'];
956 5325 acydburn
                        }
957 5325 acydburn
                }
958 5325 acydburn
959 5325 acydburn
                foreach ($languages as $lang_id => $lang_iso)
960 5325 acydburn
                {
961 5325 acydburn
                        $lang_options[$lang_id]['lang_iso'] = $lang_iso;
962 5325 acydburn
                        foreach ($options as $field => $field_type)
963 5325 acydburn
                        {
964 7920 acydburn
                                $value = ($action == 'create') ? utf8_normalize_nfc(request_var('l_' . $field, array(0 => ''), true)) : $cp->vars['l_' . $field];
965 5325 acydburn
                                if ($field == 'lang_options')
966 5325 acydburn
                                {
967 7941 kellanved
                                        $var = (!isset($cp->vars['l_lang_options'][$lang_id]) || !is_array($cp->vars['l_lang_options'][$lang_id])) ? $cp->vars['lang_options'] : $cp->vars['l_lang_options'][$lang_id];
968 9127 acydburn
969 5325 acydburn
                                        switch ($field_type)
970 5325 acydburn
                                        {
971 5325 acydburn
                                                case 'two_options':
972 5325 acydburn
973 5325 acydburn
                                                        $lang_options[$lang_id]['fields'][$field] = array(
974 5325 acydburn
                                                                'TITLE'                => $user->lang['CP_' . strtoupper($field)],
975 5325 acydburn
                                                                'FIELD'                => '
976 5325 acydburn
                                                                                        <dd><input class="medium" name="l_' . $field . '[' . $lang_id . '][]" value="' . ((isset($value[$lang_id][0])) ? $value[$lang_id][0] : $var[0]) . '" /> ' . $user->lang['FIRST_OPTION'] . '</dd>
977 5325 acydburn
                                                                                        <dd><input class="medium" name="l_' . $field . '[' . $lang_id . '][]" value="' . ((isset($value[$lang_id][1])) ? $value[$lang_id][1] : $var[1]) . '" /> ' . $user->lang['SECOND_OPTION'] . '</dd>'
978 5325 acydburn
                                                        );
979 5325 acydburn
                                                break;
980 5325 acydburn
981 5325 acydburn
                                                case 'optionfield':
982 7941 kellanved
                                                        $value = ((isset($value[$lang_id])) ? ((is_array($value[$lang_id])) ?  implode("\n", $value[$lang_id]) : $value[$lang_id]) : implode("\n", $var));
983 5325 acydburn
                                                        $lang_options[$lang_id]['fields'][$field] = array(
984 5325 acydburn
                                                                'TITLE'                => $user->lang['CP_' . strtoupper($field)],
985 7941 kellanved
                                                                'FIELD'                => '<dd><textarea name="l_' . $field . '[' . $lang_id . ']" rows="7" cols="80">' . $value . '</textarea></dd>'
986 5325 acydburn
                                                        );
987 5325 acydburn
                                                break;
988 5325 acydburn
                                        }
989 9127 acydburn
990 5325 acydburn
                                        if (isset($user->lang['CP_' . strtoupper($field) . '_EXPLAIN']))
991 5325 acydburn
                                        {
992 5325 acydburn
                                                $lang_options[$lang_id]['fields'][$field]['EXPLAIN'] = $user->lang['CP_' . strtoupper($field) . '_EXPLAIN'];
993 5325 acydburn
                                        }
994 5325 acydburn
                                }
995 5325 acydburn
                                else
996 5325 acydburn
                                {
997 5325 acydburn
                                        $var = ($action == 'create' || !is_array($cp->vars[$field])) ? $cp->vars[$field] : $cp->vars[$field][$lang_id];
998 5325 acydburn
999 5325 acydburn
                                        $lang_options[$lang_id]['fields'][$field] = array(
1000 5325 acydburn
                                                'TITLE'                => $user->lang['CP_' . strtoupper($field)],
1001 5325 acydburn
                                                'FIELD'                => ($field_type == 'string') ? '<dd><input class="medium" type="text" name="l_' . $field . '[' . $lang_id . ']" value="' . ((isset($value[$lang_id])) ? $value[$lang_id] : $var) . '" /></dd>' : '<dd><textarea name="l_' . $field . '[' . $lang_id . ']" rows="3" cols="80">' . ((isset($value[$lang_id])) ? $value[$lang_id] : $var) . '</textarea></dd>'
1002 5325 acydburn
                                        );
1003 9127 acydburn
1004 5325 acydburn
                                        if (isset($user->lang['CP_' . strtoupper($field) . '_EXPLAIN']))
1005 5325 acydburn
                                        {
1006 5325 acydburn
                                                $lang_options[$lang_id]['fields'][$field]['EXPLAIN'] = $user->lang['CP_' . strtoupper($field) . '_EXPLAIN'];
1007 5325 acydburn
                                        }
1008 5325 acydburn
                                }
1009 5325 acydburn
                        }
1010 5325 acydburn
                }
1011 5325 acydburn
1012 5325 acydburn
                return $lang_options;
1013 5325 acydburn
        }
1014 5325 acydburn
1015 5325 acydburn
        /**
1016 5325 acydburn
        * Save Profile Field
1017 5325 acydburn
        */
1018 6839 acydburn
        function save_profile_field(&$cp, $field_type, $action = 'create')
1019 5325 acydburn
        {
1020 5325 acydburn
                global $db, $config, $user;
1021 5325 acydburn
1022 5325 acydburn
                $field_id = request_var('field_id', 0);
1023 5325 acydburn
1024 6650 acydburn
                // Collect all information, if something is going wrong, abort the operation
1025 5325 acydburn
                $profile_sql = $profile_lang = $empty_lang = $profile_lang_fields = array();
1026 5325 acydburn
1027 6839 acydburn
                $default_lang_id = (!empty($this->edit_lang_id)) ? $this->edit_lang_id : $this->lang_defs['iso'][$config['default_lang']];
1028 5325 acydburn
1029 5325 acydburn
                if ($action == 'create')
1030 5325 acydburn
                {
1031 5699 acydburn
                        $sql = 'SELECT MAX(field_order) as max_field_order
1032 5699 acydburn
                                FROM ' . PROFILE_FIELDS_TABLE;
1033 5699 acydburn
                        $result = $db->sql_query($sql);
1034 5699 acydburn
                        $new_field_order = (int) $db->sql_fetchfield('max_field_order');
1035 5325 acydburn
                        $db->sql_freeresult($result);
1036 5699 acydburn
1037 5325 acydburn
                        $field_ident = $cp->vars['field_ident'];
1038 5325 acydburn
                }
1039 5325 acydburn
1040 5325 acydburn
                // Save the field
1041 5325 acydburn
                $profile_fields = array(
1042 5973 acydburn
                        'field_length'                        => $cp->vars['field_length'],
1043 5973 acydburn
                        'field_minlen'                        => $cp->vars['field_minlen'],
1044 5973 acydburn
                        'field_maxlen'                        => $cp->vars['field_maxlen'],
1045 5973 acydburn
                        'field_novalue'                        => $cp->vars['field_novalue'],
1046 5325 acydburn
                        'field_default_value'        => $cp->vars['field_default_value'],
1047 5973 acydburn
                        'field_validation'                => $cp->vars['field_validation'],
1048 5973 acydburn
                        'field_required'                => $cp->vars['field_required'],
1049 5973 acydburn
                        'field_show_on_reg'                => $cp->vars['field_show_on_reg'],
1050 9916 Kellanved
                        'field_show_on_vt'                => $cp->vars['field_show_on_vt'],
1051 5973 acydburn
                        'field_hide'                        => $cp->vars['field_hide'],
1052 9127 acydburn
                        'field_show_profile'        => $cp->vars['field_show_profile'],
1053 5973 acydburn
                        'field_no_view'                        => $cp->vars['field_no_view']
1054 5325 acydburn
                );
1055 6099 davidmj
1056 5325 acydburn
                if ($action == 'create')
1057 5325 acydburn
                {
1058 5325 acydburn
                        $profile_fields += array(
1059 5325 acydburn
                                'field_type'                => $field_type,
1060 5325 acydburn
                                'field_ident'                => $field_ident,
1061 5973 acydburn
                                'field_name'                => $field_ident,
1062 5325 acydburn
                                'field_order'                => $new_field_order + 1,
1063 5325 acydburn
                                'field_active'                => 1
1064 5325 acydburn
                        );
1065 5325 acydburn
1066 6232 acydburn
                        $sql = 'INSERT INTO ' . PROFILE_FIELDS_TABLE . ' ' . $db->sql_build_array('INSERT', $profile_fields);
1067 6232 acydburn
                        $db->sql_query($sql);
1068 5325 acydburn
1069 5325 acydburn
                        $field_id = $db->sql_nextid();
1070 5325 acydburn
                }
1071 5325 acydburn
                else
1072 5325 acydburn
                {
1073 6232 acydburn
                        $sql = 'UPDATE ' . PROFILE_FIELDS_TABLE . '
1074 6232 acydburn
                                SET ' . $db->sql_build_array('UPDATE', $profile_fields) . "
1075 6232 acydburn
                                WHERE field_id = $field_id";
1076 6232 acydburn
                        $db->sql_query($sql);
1077 5325 acydburn
                }
1078 9127 acydburn
1079 5325 acydburn
                if ($action == 'create')
1080 5325 acydburn
                {
1081 6449 davidmj
                        $field_ident = 'pf_' . $field_ident;
1082 6232 acydburn
                        $profile_sql[] = $this->add_field_ident($field_ident, $field_type);
1083 5325 acydburn
                }
1084 5325 acydburn
1085 5325 acydburn
                $sql_ary = array(
1086 6177 acydburn
                        'lang_name'                                => $cp->vars['lang_name'],
1087 6177 acydburn
                        'lang_explain'                        => $cp->vars['lang_explain'],
1088 5325 acydburn
                        'lang_default_value'        => $cp->vars['lang_default_value']
1089 5325 acydburn
                );
1090 5325 acydburn
1091 5325 acydburn
                if ($action == 'create')
1092 5325 acydburn
                {
1093 5325 acydburn
                        $sql_ary['field_id'] = $field_id;
1094 5325 acydburn
                        $sql_ary['lang_id'] = $default_lang_id;
1095 9127 acydburn
1096 5325 acydburn
                        $profile_sql[] = 'INSERT INTO ' . PROFILE_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
1097 5325 acydburn
                }
1098 5325 acydburn
                else
1099 5325 acydburn
                {
1100 5325 acydburn
                        $this->update_insert(PROFILE_LANG_TABLE, $sql_ary, array('field_id' => $field_id, 'lang_id' => $default_lang_id));
1101 5325 acydburn
                }
1102 5325 acydburn
1103 5325 acydburn
                if (is_array($cp->vars['l_lang_name']) && sizeof($cp->vars['l_lang_name']))
1104 5325 acydburn
                {
1105 5325 acydburn
                        foreach ($cp->vars['l_lang_name'] as $lang_id => $data)
1106 5325 acydburn
                        {
1107 5325 acydburn
                                if (($cp->vars['lang_name'] != '' && $cp->vars['l_lang_name'][$lang_id] == '')
1108 5325 acydburn
                                        || ($cp->vars['lang_explain'] != '' && $cp->vars['l_lang_explain'][$lang_id] == '')
1109 5325 acydburn
                                        || ($cp->vars['lang_default_value'] != '' && $cp->vars['l_lang_default_value'][$lang_id] == ''))
1110 5325 acydburn
                                {
1111 5325 acydburn
                                        $empty_lang[$lang_id] = true;
1112 5325 acydburn
                                        break;
1113 5325 acydburn
                                }
1114 5325 acydburn
1115 5325 acydburn
                                if (!isset($empty_lang[$lang_id]))
1116 5325 acydburn
                                {
1117 5325 acydburn
                                        $profile_lang[] = array(
1118 5325 acydburn
                                                'field_id'                => $field_id,
1119 5325 acydburn
                                                'lang_id'                => $lang_id,
1120 5325 acydburn
                                                'lang_name'                => $cp->vars['l_lang_name'][$lang_id],
1121 5325 acydburn
                                                'lang_explain'        => (isset($cp->vars['l_lang_explain'][$lang_id])) ? $cp->vars['l_lang_explain'][$lang_id] : '',
1122 5325 acydburn
                                                'lang_default_value'        => (isset($cp->vars['l_lang_default_value'][$lang_id])) ? $cp->vars['l_lang_default_value'][$lang_id] : ''
1123 5325 acydburn
                                        );
1124 5325 acydburn
                                }
1125 5325 acydburn
                        }
1126 5325 acydburn
1127 5325 acydburn
                        foreach ($empty_lang as $lang_id => $NULL)
1128 5325 acydburn
                        {
1129 8147 acydburn
                                $sql = 'DELETE FROM ' . PROFILE_LANG_TABLE . "
1130 5325 acydburn
                                        WHERE field_id = $field_id
1131 5325 acydburn
                                        AND lang_id = " . (int) $lang_id;
1132 5325 acydburn
                                $db->sql_query($sql);
1133 5325 acydburn
                        }
1134 5325 acydburn
                }
1135 5325 acydburn
1136 6342 acydburn
                // These are always arrays because the key is the language id...
1137 7920 acydburn
                $cp->vars['l_lang_name']                        = utf8_normalize_nfc(request_var('l_lang_name', array(0 => ''), true));
1138 7920 acydburn
                $cp->vars['l_lang_explain']                        = utf8_normalize_nfc(request_var('l_lang_explain', array(0 => ''), true));
1139 7920 acydburn
                $cp->vars['l_lang_default_value']        = utf8_normalize_nfc(request_var('l_lang_default_value', array(0 => ''), true));
1140 7920 acydburn
1141 7730 kellanved
                if ($field_type != FIELD_BOOL)
1142 7730 kellanved
                {
1143 7920 acydburn
                        $cp->vars['l_lang_options']                        = utf8_normalize_nfc(request_var('l_lang_options', array(0 => ''), true));
1144 7730 kellanved
                }
1145 7730 kellanved
                else
1146 7730 kellanved
                {
1147 7920 acydburn
                        /**
1148 7920 acydburn
                        * @todo check if this line is correct...
1149 7730 kellanved
                        $cp->vars['l_lang_default_value']        = request_var('l_lang_default_value', array(0 => array('')), true);
1150 7920 acydburn
                        */
1151 7920 acydburn
                        $cp->vars['l_lang_options']        = utf8_normalize_nfc(request_var('l_lang_options', array(0 => array('')), true));
1152 7730 kellanved
                }
1153 7920 acydburn
1154 5325 acydburn
                if ($cp->vars['lang_options'])
1155 5325 acydburn
                {
1156 5325 acydburn
                        if (!is_array($cp->vars['lang_options']))
1157 5325 acydburn
                        {
1158 5325 acydburn
                                $cp->vars['lang_options'] = explode("\n", $cp->vars['lang_options']);
1159 5325 acydburn
                        }
1160 5325 acydburn
1161 5325 acydburn
                        if ($action != 'create')
1162 5325 acydburn
                        {
1163 8147 acydburn
                                $sql = 'DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . "
1164 5325 acydburn
                                        WHERE field_id = $field_id
1165 5325 acydburn
                                                AND lang_id = " . (int) $default_lang_id;
1166 5325 acydburn
                                $db->sql_query($sql);
1167 5325 acydburn
                        }
1168 9127 acydburn
1169 5325 acydburn
                        foreach ($cp->vars['lang_options'] as $option_id => $value)
1170 5325 acydburn
                        {
1171 5325 acydburn
                                $sql_ary = array(
1172 5325 acydburn
                                        'field_type'        => (int) $field_type,
1173 6177 acydburn
                                        'lang_value'        => $value
1174 5325 acydburn
                                );
1175 5325 acydburn
1176 5325 acydburn
                                if ($action == 'create')
1177 5325 acydburn
                                {
1178 5325 acydburn
                                        $sql_ary['field_id'] = $field_id;
1179 5325 acydburn
                                        $sql_ary['lang_id'] = $default_lang_id;
1180 5325 acydburn
                                        $sql_ary['option_id'] = (int) $option_id;
1181 5325 acydburn
1182 5325 acydburn
                                        $profile_sql[] = 'INSERT INTO ' . PROFILE_FIELDS_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
1183 5325 acydburn
                                }
1184 5325 acydburn
                                else
1185 5325 acydburn
                                {
1186 5325 acydburn
                                        $this->update_insert(PROFILE_FIELDS_LANG_TABLE, $sql_ary, array(
1187 6232 acydburn
                                                'field_id'        => $field_id,
1188 6232 acydburn
                                                'lang_id'        => (int) $default_lang_id,
1189 6232 acydburn
                                                'option_id'        => (int) $option_id)
1190 5325 acydburn
                                        );
1191 5325 acydburn
                                }
1192 5325 acydburn
                        }
1193 5325 acydburn
                }
1194 5325 acydburn
1195 5325 acydburn
                if (is_array($cp->vars['l_lang_options']) && sizeof($cp->vars['l_lang_options']))
1196 5325 acydburn
                {
1197 5325 acydburn
                        $empty_lang = array();
1198 5325 acydburn
1199 5325 acydburn
                        foreach ($cp->vars['l_lang_options'] as $lang_id => $lang_ary)
1200 5325 acydburn
                        {
1201 5325 acydburn
                                if (!is_array($lang_ary))
1202 5325 acydburn
                                {
1203 5325 acydburn
                                        $lang_ary = explode("\n", $lang_ary);
1204 5325 acydburn
                                }
1205 5325 acydburn
1206 5325 acydburn
                                if (sizeof($lang_ary) != sizeof($cp->vars['lang_options']))
1207 5325 acydburn
                                {
1208 5325 acydburn
                                        $empty_lang[$lang_id] = true;
1209 5325 acydburn
                                }
1210 5325 acydburn
1211 5325 acydburn
                                if (!isset($empty_lang[$lang_id]))
1212 5325 acydburn
                                {
1213 5325 acydburn
                                        if ($action != 'create')
1214 5325 acydburn
                                        {
1215 8147 acydburn
                                                $sql = 'DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . "
1216 5325 acydburn
                                                        WHERE field_id = $field_id
1217 5325 acydburn
                                                        AND lang_id = " . (int) $lang_id;
1218 5325 acydburn
                                                $db->sql_query($sql);
1219 5325 acydburn
                                        }
1220 5325 acydburn
1221 5325 acydburn
                                        foreach ($lang_ary as $option_id => $value)
1222 5325 acydburn
                                        {
1223 5325 acydburn
                                                $profile_lang_fields[] = array(
1224 5325 acydburn
                                                        'field_id'                => (int) $field_id,
1225 5325 acydburn
                                                        'lang_id'                => (int) $lang_id,
1226 5325 acydburn
                                                        'option_id'                => (int) $option_id,
1227 5325 acydburn
                                                        'field_type'        => (int) $field_type,
1228 6177 acydburn
                                                        'lang_value'        => $value
1229 5325 acydburn
                                                );
1230 5325 acydburn
                                        }
1231 5325 acydburn
                                }
1232 5325 acydburn
                        }
1233 5325 acydburn
1234 5325 acydburn
                        foreach ($empty_lang as $lang_id => $NULL)
1235 5325 acydburn
                        {
1236 8147 acydburn
                                $sql = 'DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . "
1237 5325 acydburn
                                        WHERE field_id = $field_id
1238 5325 acydburn
                                        AND lang_id = " . (int) $lang_id;
1239 5325 acydburn
                                $db->sql_query($sql);
1240 5325 acydburn
                        }
1241 5325 acydburn
                }
1242 5325 acydburn
1243 5325 acydburn
                foreach ($profile_lang as $sql)
1244 5325 acydburn
                {
1245 5325 acydburn
                        if ($action == 'create')
1246 5325 acydburn
                        {
1247 5325 acydburn
                                $profile_sql[] = 'INSERT INTO ' . PROFILE_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql);
1248 5325 acydburn
                        }
1249 5325 acydburn
                        else
1250 5325 acydburn
                        {
1251 5325 acydburn
                                $lang_id = $sql['lang_id'];
1252 5325 acydburn
                                unset($sql['lang_id'], $sql['field_id']);
1253 5325 acydburn
1254 5325 acydburn
                                $this->update_insert(PROFILE_LANG_TABLE, $sql, array('lang_id' => (int) $lang_id, 'field_id' => $field_id));
1255 5325 acydburn
                        }
1256 5325 acydburn
                }
1257 5325 acydburn
1258 5325 acydburn
                if (sizeof($profile_lang_fields))
1259 5325 acydburn
                {
1260 5325 acydburn
                        foreach ($profile_lang_fields as $sql)
1261 5325 acydburn
                        {
1262 5325 acydburn
                                if ($action == 'create')
1263 5325 acydburn
                                {
1264 5325 acydburn
                                        $profile_sql[] = 'INSERT INTO ' . PROFILE_FIELDS_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql);
1265 5325 acydburn
                                }
1266 5325 acydburn
                                else
1267 5325 acydburn
                                {
1268 5325 acydburn
                                        $lang_id = $sql['lang_id'];
1269 5325 acydburn
                                        $option_id = $sql['option_id'];
1270 5325 acydburn
                                        unset($sql['lang_id'], $sql['field_id'], $sql['option_id']);
1271 9127 acydburn
1272 5325 acydburn
                                        $this->update_insert(PROFILE_FIELDS_LANG_TABLE, $sql, array(
1273 8147 acydburn
                                                'lang_id'        => $lang_id,
1274 5325 acydburn
                                                'field_id'        => $field_id,
1275 5325 acydburn
                                                'option_id'        => $option_id)
1276 5325 acydburn
                                        );
1277 5325 acydburn
                                }
1278 5325 acydburn
                        }
1279 5325 acydburn
                }
1280 5325 acydburn
1281 6099 davidmj
1282 6015 acydburn
                $db->sql_transaction('begin');
1283 5325 acydburn
1284 5325 acydburn
                if ($action == 'create')
1285 5325 acydburn
                {
1286 5325 acydburn
                        foreach ($profile_sql as $sql)
1287 5325 acydburn
                        {
1288 5325 acydburn
                                $db->sql_query($sql);
1289 5325 acydburn
                        }
1290 5325 acydburn
                }
1291 9127 acydburn
1292 5325 acydburn
                $db->sql_transaction('commit');
1293 5325 acydburn
1294 5325 acydburn
                if ($action == 'edit')
1295 5325 acydburn
                {
1296 5325 acydburn
                        add_log('admin', 'LOG_PROFILE_FIELD_EDIT', $cp->vars['field_ident'] . ':' . $cp->vars['lang_name']);
1297 5325 acydburn
                        trigger_error($user->lang['CHANGED_PROFILE_FIELD'] . adm_back_link($this->u_action));
1298 5325 acydburn
                }
1299 5325 acydburn
                else
1300 5325 acydburn
                {
1301 6449 davidmj
                        add_log('admin', 'LOG_PROFILE_FIELD_CREATE', substr($field_ident, 3) . ':' . $cp->vars['lang_name']);
1302 5325 acydburn
                        trigger_error($user->lang['ADDED_PROFILE_FIELD'] . adm_back_link($this->u_action));
1303 5325 acydburn
                }
1304 5325 acydburn
        }
1305 5325 acydburn
1306 5325 acydburn
        /**
1307 5325 acydburn
        * Update, then insert if not successfull
1308 5325 acydburn
        */
1309 5325 acydburn
        function update_insert($table, $sql_ary, $where_fields)
1310 5325 acydburn
        {
1311 5325 acydburn
                global $db;
1312 5325 acydburn
1313 5325 acydburn
                $where_sql = array();
1314 5325 acydburn
                $check_key = '';
1315 5325 acydburn
1316 5325 acydburn
                foreach ($where_fields as $key => $value)
1317 5325 acydburn
                {
1318 5325 acydburn
                        $check_key = (!$check_key) ? $key : $check_key;
1319 5325 acydburn
                        $where_sql[] = $key . ' = ' . ((is_string($value)) ? "'" . $db->sql_escape($value) . "'" : (int) $value);
1320 5325 acydburn
                }
1321 5325 acydburn
1322 5723 acydburn
                if (!sizeof($where_sql))
1323 5723 acydburn
                {
1324 5723 acydburn
                        return;
1325 5723 acydburn
                }
1326 5723 acydburn
1327 8147 acydburn
                $sql = "SELECT $check_key
1328 5325 acydburn
                        FROM $table
1329 5325 acydburn
                        WHERE " . implode(' AND ', $where_sql);
1330 5325 acydburn
                $result = $db->sql_query($sql);
1331 5723 acydburn
                $row = $db->sql_fetchrow($result);
1332 5723 acydburn
                $db->sql_freeresult($result);
1333 5723 acydburn
1334 5723 acydburn
                if (!$row)
1335 5325 acydburn
                {
1336 5325 acydburn
                        $sql_ary = array_merge($where_fields, $sql_ary);
1337 9127 acydburn
1338 5723 acydburn
                        if (sizeof($sql_ary))
1339 5723 acydburn
                        {
1340 5723 acydburn
                                $db->sql_query("INSERT INTO $table " . $db->sql_build_array('INSERT', $sql_ary));
1341 5723 acydburn
                        }
1342 5325 acydburn
                }
1343 5325 acydburn
                else
1344 5325 acydburn
                {
1345 5723 acydburn
                        if (sizeof($sql_ary))
1346 5723 acydburn
                        {
1347 8147 acydburn
                                $sql = "UPDATE $table SET " . $db->sql_build_array('UPDATE', $sql_ary) . '
1348 5723 acydburn
                                        WHERE ' . implode(' AND ', $where_sql);
1349 5723 acydburn
                                $db->sql_query($sql);
1350 5723 acydburn
                        }
1351 5325 acydburn
                }
1352 5325 acydburn
        }
1353 6232 acydburn
1354 6232 acydburn
        /**
1355 6232 acydburn
        * Return sql statement for adding a new field ident (profile field) to the profile fields data table
1356 6232 acydburn
        */
1357 6232 acydburn
        function add_field_ident($field_ident, $field_type)
1358 6232 acydburn
        {
1359 6232 acydburn
                global $db;
1360 6232 acydburn
1361 6497 acydburn
                switch ($db->sql_layer)
1362 6232 acydburn
                {
1363 6232 acydburn
                        case 'mysql':
1364 6232 acydburn
                        case 'mysql4':
1365 6232 acydburn
                        case 'mysqli':
1366 6232 acydburn
1367 6232 acydburn
                                // We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
1368 6232 acydburn
                                $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD `$field_ident` ";
1369 6232 acydburn
1370 6232 acydburn
                                switch ($field_type)
1371 6232 acydburn
                                {
1372 6232 acydburn
                                        case FIELD_STRING:
1373 6232 acydburn
                                                $sql .= ' VARCHAR(255) ';
1374 6232 acydburn
                                        break;
1375 6232 acydburn
1376 6232 acydburn
                                        case FIELD_DATE:
1377 6232 acydburn
                                                $sql .= 'VARCHAR(10) ';
1378 6232 acydburn
                                        break;
1379 6232 acydburn
1380 6232 acydburn
                                        case FIELD_TEXT:
1381 6232 acydburn
                                                $sql .= "TEXT";
1382 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
1383 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_bitfield INT(11) UNSIGNED";
1384 6232 acydburn
                                        break;
1385 6232 acydburn
1386 6232 acydburn
                                        case FIELD_BOOL:
1387 6232 acydburn
                                                $sql .= 'TINYINT(2) ';
1388 6232 acydburn
                                        break;
1389 9127 acydburn
1390 6232 acydburn
                                        case FIELD_DROPDOWN:
1391 6232 acydburn
                                                $sql .= 'MEDIUMINT(8) ';
1392 6232 acydburn
                                        break;
1393 6232 acydburn
1394 6232 acydburn
                                        case FIELD_INT:
1395 6232 acydburn
                                                $sql .= 'BIGINT(20) ';
1396 6232 acydburn
                                        break;
1397 6232 acydburn
                                }
1398 6232 acydburn
1399 6232 acydburn
                        break;
1400 6232 acydburn
1401 6232 acydburn
                        case 'sqlite':
1402 6232 acydburn
1403 6232 acydburn
                                switch ($field_type)
1404 6232 acydburn
                                {
1405 6232 acydburn
                                        case FIELD_STRING:
1406 6232 acydburn
                                                $type = ' VARCHAR(255) ';
1407 6232 acydburn
                                        break;
1408 6232 acydburn
1409 6232 acydburn
                                        case FIELD_DATE:
1410 6232 acydburn
                                                $type = 'VARCHAR(10) ';
1411 6232 acydburn
                                        break;
1412 6232 acydburn
1413 6232 acydburn
                                        case FIELD_TEXT:
1414 6232 acydburn
                                                $type = "TEXT(65535)";
1415 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
1416 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_bitfield INT(11) UNSIGNED";
1417 6232 acydburn
                                        break;
1418 6232 acydburn
1419 6232 acydburn
                                        case FIELD_BOOL:
1420 6232 acydburn
                                                $type = 'TINYINT(2) ';
1421 6232 acydburn
                                        break;
1422 6232 acydburn
1423 6232 acydburn
                                        case FIELD_DROPDOWN:
1424 6232 acydburn
                                                $type = 'MEDIUMINT(8) ';
1425 6232 acydburn
                                        break;
1426 6232 acydburn
1427 6232 acydburn
                                        case FIELD_INT:
1428 6232 acydburn
                                                $type = 'BIGINT(20) ';
1429 6232 acydburn
                                        break;
1430 6232 acydburn
                                }
1431 6232 acydburn
1432 6232 acydburn
                                // We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
1433 6232 acydburn
                                if (version_compare(sqlite_libversion(), '3.0') == -1)
1434 6232 acydburn
                                {
1435 6232 acydburn
                                        $sql = "SELECT sql
1436 8147 acydburn
                                                FROM sqlite_master
1437 8147 acydburn
                                                WHERE type = 'table'
1438 6232 acydburn
                                                        AND name = '" . PROFILE_FIELDS_DATA_TABLE . "'
1439 6232 acydburn
                                                ORDER BY type DESC, name;";
1440 6232 acydburn
                                        $result = $db->sql_query($sql);
1441 6232 acydburn
                                        $row = $db->sql_fetchrow($result);
1442 6232 acydburn
                                        $db->sql_freeresult($result);
1443 6232 acydburn
1444 6232 acydburn
                                        // Create a temp table and populate it, destroy the existing one
1445 6232 acydburn
                                        $db->sql_query(preg_replace('#CREATE\s+TABLE\s+"?' . PROFILE_FIELDS_DATA_TABLE . '"?#i', 'CREATE TEMPORARY TABLE ' . PROFILE_FIELDS_DATA_TABLE . '_temp', $row['sql']));
1446 6232 acydburn
                                        $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . '_temp SELECT * FROM ' . PROFILE_FIELDS_DATA_TABLE);
1447 6232 acydburn
                                        $db->sql_query('DROP TABLE ' . PROFILE_FIELDS_DATA_TABLE);
1448 6232 acydburn
1449 6232 acydburn
                                        preg_match('#\((.*)\)#s', $row['sql'], $matches);
1450 6232 acydburn
1451 6232 acydburn
                                        $new_table_cols = trim($matches[1]);
1452 6232 acydburn
                                        $old_table_cols = explode(',', $new_table_cols);
1453 6232 acydburn
                                        $column_list = array();
1454 6232 acydburn
1455 6232 acydburn
                                        foreach ($old_table_cols as $declaration)
1456 6232 acydburn
                                        {
1457 6232 acydburn
                                                $entities = preg_split('#\s+#', trim($declaration));
1458 8101 davidmj
                                                if ($entities[0] == 'PRIMARY')
1459 6232 acydburn
                                                {
1460 6232 acydburn
                                                        continue;
1461 6232 acydburn
                                                }
1462 6232 acydburn
                                                $column_list[] = $entities[0];
1463 6232 acydburn
                                        }
1464 6232 acydburn
1465 6232 acydburn
                                        $columns = implode(',', $column_list);
1466 6232 acydburn
1467 6232 acydburn
                                        $new_table_cols = $field_ident . ' ' . $type . ',' . $new_table_cols;
1468 6232 acydburn
1469 6232 acydburn
                                        // create a new table and fill it up. destroy the temp one
1470 6232 acydburn
                                        $db->sql_query('CREATE TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $new_table_cols . ');');
1471 6232 acydburn
                                        $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_DATA_TABLE . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . PROFILE_FIELDS_DATA_TABLE . '_temp;');
1472 6232 acydburn
                                        $db->sql_query('DROP TABLE ' . PROFILE_FIELDS_DATA_TABLE . '_temp');
1473 6232 acydburn
                                }
1474 6232 acydburn
                                else
1475 6232 acydburn
                                {
1476 6232 acydburn
                                        $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident [$type]";
1477 6232 acydburn
                                }
1478 6232 acydburn
1479 6232 acydburn
                        break;
1480 6232 acydburn
1481 6232 acydburn
                        case 'mssql':
1482 6232 acydburn
                        case 'mssql_odbc':
1483 10603 git-gate
                        case 'mssqlnative':
1484 6232 acydburn
1485 6232 acydburn
                                // We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
1486 6232 acydburn
                                $sql = 'ALTER TABLE [' . PROFILE_FIELDS_DATA_TABLE . "] ADD [$field_ident] ";
1487 6232 acydburn
1488 6232 acydburn
                                switch ($field_type)
1489 6232 acydburn
                                {
1490 6232 acydburn
                                        case FIELD_STRING:
1491 6232 acydburn
                                                $sql .= ' [VARCHAR] (255) ';
1492 6232 acydburn
                                        break;
1493 6232 acydburn
1494 6232 acydburn
                                        case FIELD_DATE:
1495 6232 acydburn
                                                $sql .= '[VARCHAR] (10) ';
1496 6232 acydburn
                                        break;
1497 6232 acydburn
1498 6232 acydburn
                                        case FIELD_TEXT:
1499 6232 acydburn
                                                $sql .= "[TEXT]";
1500 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_uid [VARCHAR] (5) NOT NULL,
1501 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_bitfield [INT] UNSIGNED";
1502 6232 acydburn
                                        break;
1503 6232 acydburn
1504 6232 acydburn
                                        case FIELD_BOOL:
1505 6232 acydburn
                                        case FIELD_DROPDOWN:
1506 6232 acydburn
                                                $sql .= '[INT] ';
1507 6232 acydburn
                                        break;
1508 6232 acydburn
1509 6232 acydburn
                                        case FIELD_INT:
1510 6232 acydburn
                                                $sql .= '[FLOAT] ';
1511 6232 acydburn
                                        break;
1512 6232 acydburn
                                }
1513 6232 acydburn
1514 6232 acydburn
                        break;
1515 6232 acydburn
1516 6232 acydburn
                        case 'postgres':
1517 6232 acydburn
1518 6232 acydburn
                                // We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
1519 6232 acydburn
                                $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD COLUMN \"$field_ident\" ";
1520 6232 acydburn
1521 6232 acydburn
                                switch ($field_type)
1522 6232 acydburn
                                {
1523 6232 acydburn
                                        case FIELD_STRING:
1524 6232 acydburn
                                                $sql .= ' VARCHAR(255) ';
1525 6232 acydburn
                                        break;
1526 6232 acydburn
1527 6232 acydburn
                                        case FIELD_DATE:
1528 6232 acydburn
                                                $sql .= 'VARCHAR(10) ';
1529 6232 acydburn
                                        break;
1530 6232 acydburn
1531 6232 acydburn
                                        case FIELD_TEXT:
1532 6232 acydburn
                                                $sql .= "TEXT";
1533 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
1534 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_bitfield INT4 UNSIGNED";
1535 6232 acydburn
                                        break;
1536 6232 acydburn
1537 6232 acydburn
                                        case FIELD_BOOL:
1538 6232 acydburn
                                                $sql .= 'INT2 ';
1539 6232 acydburn
                                        break;
1540 6232 acydburn
1541 6232 acydburn
                                        case FIELD_DROPDOWN:
1542 6232 acydburn
                                                $sql .= 'INT4 ';
1543 6232 acydburn
                                        break;
1544 6232 acydburn
1545 6232 acydburn
                                        case FIELD_INT:
1546 6232 acydburn
                                                $sql .= 'INT8 ';
1547 6232 acydburn
                                        break;
1548 6232 acydburn
                                }
1549 6232 acydburn
1550 6232 acydburn
                        break;
1551 6232 acydburn
1552 6232 acydburn
                        case 'firebird':
1553 6232 acydburn
1554 6232 acydburn
                                // We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
1555 9492 acydburn
                                $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . ' ADD "' . strtoupper($field_ident) . '" ';
1556 6232 acydburn
1557 6232 acydburn
                                switch ($field_type)
1558 6232 acydburn
                                {
1559 6232 acydburn
                                        case FIELD_STRING:
1560 6232 acydburn
                                                $sql .= ' VARCHAR(255) ';
1561 6232 acydburn
                                        break;
1562 6232 acydburn
1563 6232 acydburn
                                        case FIELD_DATE:
1564 6232 acydburn
                                                $sql .= 'VARCHAR(10) ';
1565 6232 acydburn
                                        break;
1566 6232 acydburn
1567 6232 acydburn
                                        case FIELD_TEXT:
1568 6232 acydburn
                                                $sql .= "BLOB SUB_TYPE TEXT";
1569 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_uid VARCHAR(5) NOT NULL,
1570 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_bitfield INTEGER UNSIGNED";
1571 6232 acydburn
                                        break;
1572 6232 acydburn
1573 6232 acydburn
                                        case FIELD_BOOL:
1574 6232 acydburn
                                        case FIELD_DROPDOWN:
1575 6232 acydburn
                                                $sql .= 'INTEGER ';
1576 6232 acydburn
                                        break;
1577 6232 acydburn
1578 6232 acydburn
                                        case FIELD_INT:
1579 6232 acydburn
                                                $sql .= 'DOUBLE PRECISION ';
1580 6232 acydburn
                                        break;
1581 6232 acydburn
                                }
1582 6232 acydburn
1583 6232 acydburn
                        break;
1584 6232 acydburn
1585 6232 acydburn
                        case 'oracle':
1586 6232 acydburn
1587 6232 acydburn
                                // We are defining the biggest common value, because of the possibility to edit the min/max values of each field.
1588 7721 davidmj
                                $sql = 'ALTER TABLE ' . PROFILE_FIELDS_DATA_TABLE . " ADD $field_ident ";
1589 6232 acydburn
1590 6232 acydburn
                                switch ($field_type)
1591 6232 acydburn
                                {
1592 6232 acydburn
                                        case FIELD_STRING:
1593 6232 acydburn
                                                $sql .= ' VARCHAR2(255) ';
1594 6232 acydburn
                                        break;
1595 6232 acydburn
1596 6232 acydburn
                                        case FIELD_DATE:
1597 6232 acydburn
                                                $sql .= 'VARCHAR2(10) ';
1598 6232 acydburn
                                        break;
1599 6232 acydburn
1600 6232 acydburn
                                        case FIELD_TEXT:
1601 6232 acydburn
                                                $sql .= "CLOB";
1602 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_uid VARCHAR2(5) NOT NULL,
1603 6232 acydburn
                //                                                ADD {$field_ident}_bbcode_bitfield NUMBER(11) UNSIGNED";
1604 6232 acydburn
                                        break;
1605 6232 acydburn
1606 6232 acydburn
                                        case FIELD_BOOL:
1607 6232 acydburn
                                                $sql .= 'NUMBER(2) ';
1608 6232 acydburn
                                        break;
1609 6232 acydburn
1610 6232 acydburn
                                        case FIELD_DROPDOWN:
1611 6232 acydburn
                                                $sql .= 'NUMBER(8) ';
1612 6232 acydburn
                                        break;
1613 6232 acydburn
1614 6232 acydburn
                                        case FIELD_INT:
1615 6232 acydburn
                                                $sql .= 'NUMBER(20) ';
1616 6232 acydburn
                                        break;
1617 6232 acydburn
                                }
1618 6232 acydburn
1619 6232 acydburn
                        break;
1620 6232 acydburn
                }
1621 6232 acydburn
1622 6232 acydburn
                return $sql;
1623 6232 acydburn
        }
1624 5325 acydburn
}
1625 5325 acydburn
1626 9127 acydburn
?>