lang::p('single_line_text_box'), 'input_checkbox' => lang::p('checkbox_flag'), 'select_single' => lang::p('drop_dwon_menu'), ); // ################################################################### if (empty($_REQUEST['do'])) { $_REQUEST['do'] = 'modify'; } // ################################################################### if ($_REQUEST['do'] == 'kill') { $field = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bugfield WHERE fieldid = " . intval($bugsys->in['fieldid'])); if (!$field) { $admin->error(lang::p('error_invalid_id')); } $db->query("DELETE FROM " . TABLE_PREFIX . "bugfield WHERE fieldid = $field[fieldid]"); $db->query("DELETE FROM " . TABLE_PREFIX . "bugfieldpermission WHERE fieldid = $field[fieldid]"); $db->query("ALTER TABLE " . TABLE_PREFIX . "bugvaluefill DROP field$field[fieldid]"); $db->query("OPTIMIZE TABLE " . TABLE_PREFIX . "bugvaluefill"); $admin->redirect('field.php?do=modify'); } // ################################################################### if ($_REQUEST['do'] == 'delete') { $field = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bugfield WHERE fieldid = " . intval($bugsys->in['fieldid'])); if (!$field) { $admin->error(lang::p('error_invalid_id')); } $admin->page_confirm(lang::p('confirm_custom_field_delete'), "field.php?do=kill&fieldid=$field[fieldid]"); } // ################################################################### if ($_REQUEST['do'] == 'update') { $edit = false; $add = true; $type = $bugsys->in['type']; if ($bugsys->in['fieldid']) { $field = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bugfield WHERE fieldid = " . intval($bugsys->in['fieldid'])); if (!$field) { $admin->error(lang::p('error_invalid_id')); } $edit = true; $add = false; $type = $field['type']; } if (empty($bugsys->in['name'])) { $admin->error(lang::p('error_need_display_name')); } if (!isset($TYPES["$type"]) AND $add) { $admin->error(lang::p('invalid_field_type')); } switch ($type) { case 'input_text': $extrafields = 'defaultvalue, regexmatch, maxlength'; $extradata = "'" . $bugsys->in['defaultvalue'] . "', '" . $bugsys->in['regexmatch'] . "', " . intval($bugsys->in['maxlength']); $extraupdate = "defaultvalue = '" . $bugsys->in['defaultvalue'] . "', regexmatch = '" . $bugsys->in['regexmatch'] . "', maxlength = " . intval($bugsys->in['maxlength']); break; case 'input_checkbox': $extrafields = 'defaultvalue'; $extradata = intval($bugsys->in['defaultvalue']); $extraupdate = "defaultvalue = " . intval($bugsys->in['defaultvalue']); break; case 'select_single': $extrafields = 'selects, usedefault'; // can't use explode() here because explode() returns !empty() when splitting an empty string // so we have to use preg_split with the PREG_SPLIT_NO_EMPTY flag to prevent this $selects = preg_split("#\n#", trim($bugsys->in['selects']), 0, PREG_SPLIT_NO_EMPTY); array_walk($selects, 'trim'); if (count($selects) < 1) { $admin->error(lang::p('custom_field_need_values')); } $extradata = "'" . $bugsys->escape(serialize($selects)) . "', " . intval($bugsys->in['usedefault']); $extraupdate = "selects = '" . $bugsys->escape(serialize($selects)) . "', usedefault = " . intval($bugsys->in['usedefault']); break; } if ($add) { $db->query(" INSERT INTO bugfield (name, description, type, required, cansearch, $extrafields) VALUES ('" . $bugsys->in['name'] . "', '" . $bugsys->in['description'] . "', '$type', " . intval($bugsys->in['required']) . ", " . intval($bugsys->in['cansearch']) . ", $extradata )" ); $fieldid = $db->insert_id(); $db->query("ALTER TABLE " . TABLE_PREFIX . "bugvaluefill ADD field$fieldid MEDIUMTEXT NULL"); $db->query("OPTIMIZE TABLE " . TABLE_PREFIX . "bugvaluefill"); } else { $db->query(" UPDATE " . TABLE_PREFIX . "bugfield SET name = '" . $bugsys->in['name'] . "', description = '" . $bugsys->in['description'] . "', required = " . intval($bugsys->in['required']) . ", cansearch = " . intval($bugsys->in['cansearch']) . ", $extraupdate WHERE fieldid = " . intval($bugsys->in['fieldid']) ); } $admin->redirect('field.php?do=modify', lang::p((($add) ? 'custom_field_added' : 'custom_field_updated'))); } // ################################################################### if ($_REQUEST['do'] == 'add' OR $_REQUEST['do'] == 'edit') { $add = (($_REQUEST['do'] == 'add') ? true : false); $typeselect = (($add AND empty($bugsys->in['step'])) ? true : false); $edit = (($add) ? false : true); $admin->page_start(lang::p((($add) ? 'add_new_field' : 'edit_field'))); $admin->form_start('field.php', (($typeselect) ? 'add' : 'update')); if ($add AND !$typeselect) { $admin->form_hidden_field('type', $bugsys->in['type']); } if ($typeselect) { $admin->form_hidden_field('step', 1); $admin->table_start(true, '40%'); $admin->table_head(lang::p('select_type')); } else { $admin->table_start(); $admin->table_head((($add) ? lang::p('add_new_field') . ' - ' . $TYPES[ $bugsys->in['type'] ] : lang::p('edit_field'))); } if ($edit) { $field = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "bugfield WHERE fieldid = " . intval($bugsys->in['fieldid'])); if (!$field) { $admin->error(lang::p('error_invalid_id')); } $admin->form_hidden_field('fieldid', $field['fieldid']); } if (!$typeselect) { $type = (($add) ? $bugsys->in['type'] : $field['type']); } // show type selector if (empty($bugsys->in['step']) AND $add) { foreach ($TYPES AS $name => $description) { $admin->list_item($description, $name); } $admin->row_list(lang::p('field_type'), 'type', false); $admin->row_submit(); $admin->table_end(); } // have type, do that funkay thing! else { if (!isset($TYPES["$type"])) { $admin->error(lang::p('error_invalid_id')); } // global fields $admin->row_span(lang::p('global_fields'), 'thead', 'center'); $admin->row_text(lang::p('field_type'), $TYPES["$type"]); $admin->row_input(lang::p('display_name'), 'name', $field['name']); $admin->row_textarea(lang::p('description'), 'description', $field['description']); $admin->row_yesno(lang::p('required'), 'required', $field['required']); $admin->row_yesno(lang::p('can_be_searched'), 'cansearch', ((isset($field['cansearch'])) ? $field['cansearch'] : true)); // type-specific fields $admin->row_span(lang::p('type_specific_fields'), 'thead', 'center'); switch ($type) { case 'input_text': $admin->row_input(lang::p('default_value'), 'defaultvalue', $field['defaultvalue']); $admin->row_input(lang::p('regex_match'), 'regexmatch', $field['regexmatch']); $admin->row_input(lang::p('max_length'), 'maxlength', $field['maxlength'], 2, 10); break; case 'input_checkbox': $admin->row_yesno(lang::p('checked_by_default'), 'defaultvalue', $field['defaultvalue']); break; case 'select_single': $admin->row_textarea(lang::p('selection_values'), 'selects', stripslashes(implode("\n", unserialize($field['selects'])))); $admin->row_yesno(lang::p('make_first_option_default'), 'usedefault', $field['usedefault']); break; } // end table $admin->row_submit((($edit) ? '[' . lang::p('delete_field') . ']' : '')); $admin->table_end(); $admin->form_end(); } $admin->page_end(); } // ################################################################### if ($_REQUEST['do'] == 'modify') { $admin->page_start(lang::p('additional_bug_fields')); $admin->table_start(); $admin->table_head(lang::p('additional_bug_fields'), 3); $admin->table_column_head(array(lang::p('display_name_description'), lang::p('field_id'), lang::p('actions'))); $fields = $db->query("SELECT * FROM " . TABLE_PREFIX . "bugfield ORDER BY fieldid ASC"); while ($field = $db->fetch_array($fields)) { $admin->row_multi_item( array( "$field[name]
$field[description]
" => 'l', "(fieldid: $field[fieldid])" => 'c', "[" . lang::p('edit') . "] [" . lang::p('delete') . "]" => 'c' ) ); } $admin->row_span('[' . lang::p('add_new_field') . ']', 'tfoot', 'center', 3); $admin->table_end(); $admin->page_end(); } /*=====================================================================*\ || ################################################################### || # $HeadURL$ || # $Id$ || ################################################################### \*=====================================================================*/ ?>