set('fieldid', $input->in['fieldid']); $field->set_condition(); $field->delete(); $admin->redirect('field.php?do=modify'); } // ################################################################### if ($_REQUEST['do'] == 'delete') { $admin->page_confirm(T('Are you sure you want to delete this bug field? Doing so will remove everything for this field and it cannot be undone!'), 'field.php', 'kill', array('fieldid' => $input->in['fieldid'])); } // ################################################################### if ($_REQUEST['do'] == 'update') { $edit = false; $add = true; $type = $input->in['type']; $field = new FieldAPI(); if ($input->in['fieldid']) { $field->set('fieldid', $input->in['fieldid']); $field->set_condition(); $field->fetch(); $edit = true; $add = false; $type = $field->record['type']; } else { $field->set('type', $type); } switch ($type) { case 'input_text': $field->set('defaultvalue', $input->in['defaultvalue']); $field->set('regexmatch', $input->in['regexmatch']); $field->set('maxlength', $input->in['maxlength']); break; case 'input_checkbox': $field->set('defaultvalue', $input->in['defaultvalue']); break; case 'select_single': $field->set('selects', $input->in['selects']); $field->set('usedefault', $input->in['usedefault']); break; } $field->set('name', $input->in['name']); $field->set('description', $input->in['description']); $field->set('required', $input->in['required']); $field->set('cansearch', $input->in['cansearch']); if ($add) { $field->insert(); $fieldid = $field->insertid; $db->query("ALTER TABLE " . TABLE_PREFIX . "bug ADD custom$fieldid MEDIUMTEXT NULL"); $db->query("OPTIMIZE TABLE " . TABLE_PREFIX . "bug"); } else { $field->update(); $fieldid = $field->values['fieldid']; } $input->inputClean('custom', TYPE_UINT); foreach ($input->in['custom'] AS $usergroupid => $mask) { $values[] = $bugsys->clean($usergroupid, TYPE_UINT) . ", $fieldid, " . $mask; } $db->query(" REPLACE INTO " . TABLE_PREFIX . "bugfieldpermission (usergroupid, fieldid, mask) VALUES (" . implode("),\n\t\t\t(", $values) . ")" ); $admin->redirect('field.php?do=modify', ($add ? T('The custom field has been added') : T('The custom field has been updated'))); } // ################################################################### if ($_REQUEST['do'] == 'add' OR $_REQUEST['do'] == 'edit') { $field = new FieldAPI(); $add = (($_REQUEST['do'] == 'add') ? true : false); $typeselect = (($add AND empty($input->in['step'])) ? true : false); $edit = (($add) ? false : true); if ($add) { NavLinks::fieldsAdd(); $navigator->set_focus('link', 'fields-add', 'fields'); } else { NavLinks::fieldsEdit($input->in['fieldid']); $navigator->set_focus('link', 'fields-pages-fields', 'fields-pages'); } $admin->page_start(($add ? T('Add New Custom Field') : T('Edit Custom Field'))); $admin->form_start('field.php', ($typeselect ? 'add' : 'update')); if ($add AND !$typeselect) { $admin->form_hidden_field('type', $input->in['type']); } if ($typeselect) { $admin->form_hidden_field('step', 1); $admin->table_start(true, '40%'); $admin->table_head(T('Select Type')); } else { $admin->table_start(); $admin->table_head(($add ? T('Add New Bug Field') . ' - ' . FieldAPI::field_types($input->in['type']) : T('Edit Field'))); } if ($edit) { $field->set('fieldid', $input->in['fieldid']); $field->set_condition(); $field->fetch(); $admin->form_hidden_field('fieldid', $field->record['fieldid']); } if (!$typeselect) { $type = (($add) ? $input->in['type'] : $field->record['type']); } // show type selector if (empty($input->in['step']) AND $add) { foreach (FieldAPI::field_types() AS $name => $description) { $admin->list_item($description, $name); } $admin->row_list(T('Field Type'), 'type', false); $admin->row_submit(); $admin->table_end(); } // have type, do that funkay thing! else { $field->set('type', $type); // global fields $admin->row_span(T('Global Fields'), 'thead', 'center'); $admin->row_text(T('Field Type'), FieldAPI::field_types($type)); $admin->row_input(T('Display Name'), 'name', $field->record['name']); $admin->row_textarea(T('Description'), 'description', $field->record['description']); $admin->row_yesno(T('Required'), 'required', $field->record['required']); $admin->row_yesno(T('Can Be Searched'), 'cansearch', ((isset($field->record['cansearch'])) ? $field->record['cansearch'] : true)); // type-specific fields $admin->row_span(T('Type-Specific Fields'), 'thead', 'center'); switch ($type) { case 'input_text': $admin->row_input(T('Default Value'), 'defaultvalue', $field->record['defaultvalue']); $admin->row_input(T('Regular Expression Match'), 'regexmatch', $field->record['regexmatch']); $admin->row_input(T('Maximum Length'), 'maxlength', $field->record['maxlength'], 2, 10); break; case 'input_checkbox': $admin->row_yesno(T('Checked By Default'), 'defaultvalue', $field->record['defaultvalue']); break; case 'select_single': $admin->row_textarea(T('Selection Values'), 'selects', stripslashes(implode("\n", (array)unserialize($field->record['selects'])))); $admin->row_yesno(T('Make the First Option Default'), 'usedefault', $field->record['usedefault']); break; } $admin->table_end(); // custom field permissions $admin->table_start(); $admin->table_head(T('Custom Field Permissions')); if ($edit) { $perms = $db->query("SELECT usergroupid, mask FROM " . TABLE_PREFIX . "bugfieldpermission WHERE fieldid = " . $field->record['fieldid']); foreach ($perms as $perm) { $permissions["$perm[usergroupid]"] = $perm['mask']; } } $usergroups = $db->query("SELECT * FROM " . TABLE_PREFIX . "usergroup ORDER BY usergroupid"); foreach ($usergroups as $usergroup) { unset($listitem); $admin->list_item(T('No Permission'), 0, $permissions["$usergroup[usergroupid]"] == 0); $admin->list_item(T('Can View Field'), 1, $permissions["$usergroup[usergroupid]"] == 1); $admin->list_item(T('Can View, Edit Field'), 2, $permissions["$usergroup[usergroupid]"] == 2); $admin->row_list($usergroup['title'], "custom[$usergroup[usergroupid]]"); } $admin->table_end(); // end table $admin->table_start(); $admin->row_submit(); $admin->table_end(); $admin->form_end(); } $admin->page_end(); } // ################################################################### if ($_REQUEST['do'] == 'modify') { $tpl = new BSTemplate('field'); $tpl->vars['fields'] = $db->query("SELECT * FROM " . TABLE_PREFIX . "bugfield ORDER BY fieldid ASC"); $tpl->evaluate()->flush(); } ?>