本文整理汇总了PHP中custom_field_get_definition函数的典型用法代码示例。如果您正苦于以下问题:PHP custom_field_get_definition函数的具体用法?PHP custom_field_get_definition怎么用?PHP custom_field_get_definition使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了custom_field_get_definition函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: display_bug_id
function display_bug_id($p_event, $p_text)
{
$p_bug_id = (int) $p_text;
if (!bug_exists($p_bug_id)) {
return $p_text;
}
$bug = bug_get($p_bug_id);
$project = $bug->__get("project_id");
if ($project != plugin_config_get('project_id')) {
return $p_text;
}
$p_field_id = plugin_config_get('field_id');
$prefix = plugin_config_get('prefix');
$has_parent = false;
$t_bugs_ids = relationship_get_all_src($p_bug_id);
foreach ($t_bugs_ids as $t_relaship) {
if ($t_relaship->type == BUG_BLOCKS) {
$has_parent = true;
break;
}
}
$t_bugs_ids = relationship_get_all_dest($p_bug_id);
foreach ($t_bugs_ids as $t_relaship) {
if ($t_relaship->type == BUG_DEPENDANT) {
$has_parent = true;
break;
}
}
$prefix_two = plugin_config_get('prefix_two');
if ($has_parent) {
$prefix = $prefix_two;
}
$p_def = custom_field_get_definition($p_field_id);
$t_custom_field_value = custom_field_get_value($p_field_id, $p_bug_id);
global $g_custom_field_type_definition;
if (isset($g_custom_field_type_definition[$p_def['type']]['#function_string_value'])) {
return $prefix . call_user_func($g_custom_field_type_definition[$p_def['type']]['#function_string_value'], $t_custom_field_value);
}
return $prefix . $t_custom_field_value;
}
示例2: custom_field_get_field
/**
* Return a single database field from a custom field definition row for the field
* if the database field does not exist, display a warning and return ''
* @param integer $p_field_id Custom field identifier.
* @param integer $p_field_name Custom field name.
* @return string
* @access public
*/
function custom_field_get_field($p_field_id, $p_field_name)
{
$t_row = custom_field_get_definition($p_field_id);
if (isset($t_row[$p_field_name])) {
return $t_row[$p_field_name];
} else {
error_parameters($p_field_name);
trigger_error(ERROR_DB_FIELD_NOT_FOUND, WARNING);
return '';
}
}
示例3: excel_format_custom_field
/**
* Gets the formatted value for the specified issue id, project and custom field.
* @param $p_issue_id The issue id.
* @param $p_project_id The project id.
* @param $p_custom_field The custom field name (without 'custom_' prefix).
* @returns The custom field value.
*/
function excel_format_custom_field($p_issue_id, $p_project_id, $p_custom_field)
{
$t_field_id = custom_field_get_id_from_name($p_custom_field);
if ($t_field_id === false) {
return excel_prepare_string('@' . $p_custom_field . '@');
}
if (custom_field_is_linked($t_field_id, $p_project_id)) {
$t_def = custom_field_get_definition($t_field_id);
return excel_prepare_string(string_custom_field_value($t_def, $t_field_id, $p_issue_id));
}
// field is not linked to project
return excel_prepare_string('');
}
示例4: custom_field_validate
/**
* Allows the validation of a custom field value without setting it
* or needing a bug to exist.
* @param integer $p_field_id Custom field identifier.
* @param string $p_value Custom field value.
* @return boolean
* @access public
*/
function custom_field_validate($p_field_id, $p_value)
{
$t_row = custom_field_get_definition($p_field_id);
$t_name = $t_row['name'];
$t_type = $t_row['type'];
$t_possible_values = $t_row['possible_values'];
$t_valid_regexp = $t_row['valid_regexp'];
$t_length_min = $t_row['length_min'];
$t_length_max = $t_row['length_max'];
$t_default_value = $t_row['default_value'];
$t_valid = true;
$t_length = utf8_strlen($p_value);
switch ($t_type) {
case CUSTOM_FIELD_TYPE_STRING:
case CUSTOM_FIELD_TYPE_TEXTAREA:
# Empty fields are valid
if ($t_length == 0) {
break;
}
# Regular expression string validation
if (!is_blank($t_valid_regexp)) {
$t_valid &= preg_match('/' . $t_valid_regexp . '/', $p_value);
}
# Check the length of the string
$t_valid &= 0 == $t_length_min || $t_length >= $t_length_min;
$t_valid &= 0 == $t_length_max || $t_length <= $t_length_max;
break;
case CUSTOM_FIELD_TYPE_NUMERIC:
# Empty fields are valid
if ($t_length == 0) {
break;
}
$t_valid &= is_numeric($p_value);
# Check the length of the number
$t_valid &= 0 == $t_length_min || $t_length >= $t_length_min;
$t_valid &= 0 == $t_length_max || $t_length <= $t_length_max;
break;
case CUSTOM_FIELD_TYPE_FLOAT:
# Empty fields are valid
if ($t_length == 0) {
break;
}
# Allow both integer and float numbers
$t_valid &= is_numeric($p_value) || is_float($p_value);
# Check the length of the number
$t_valid &= 0 == $t_length_min || $t_length >= $t_length_min;
$t_valid &= 0 == $t_length_max || $t_length <= $t_length_max;
break;
case CUSTOM_FIELD_TYPE_DATE:
# gpc_get_cf for date returns the value from strtotime
# For 32 bit systems, supported range will be 13 Dec 1901 20:45:54 UTC to 19 Jan 2038 03:14:07 UTC
$t_valid &= $p_value !== false;
break;
case CUSTOM_FIELD_TYPE_CHECKBOX:
case CUSTOM_FIELD_TYPE_MULTILIST:
# Checkbox fields can hold a null value (when no checkboxes are ticked)
if ($p_value === '') {
break;
}
# If checkbox field value is not null then we need to validate it
$t_values = explode('|', $p_value);
$t_possible_values = custom_field_prepare_possible_values($t_row['possible_values']);
$t_possible_values = explode('|', $t_possible_values);
$t_invalid_values = array_diff($t_values, $t_possible_values);
$t_valid &= count($t_invalid_values) == 0;
break;
case CUSTOM_FIELD_TYPE_ENUM:
case CUSTOM_FIELD_TYPE_LIST:
case CUSTOM_FIELD_TYPE_RADIO:
# List fields can be empty (when they are not shown on the
# form, or shown with no default values and never clicked)
if (is_blank($p_value)) {
break;
}
# If list field value is not empty then we need to validate it
$t_possible_values = custom_field_prepare_possible_values($t_row['possible_values']);
$t_values_arr = explode('|', $t_possible_values);
$t_valid &= in_array($p_value, $t_values_arr);
break;
case CUSTOM_FIELD_TYPE_EMAIL:
if ($p_value !== '') {
$t_valid &= email_is_valid($p_value);
}
break;
default:
break;
}
return (bool) $t_valid;
}
示例5: lang_get
<th class="category"><?php
echo lang_get('custom_field_type');
?>
</th>
<th class="category"><?php
echo lang_get('custom_field_possible_values');
?>
</th>
<th class="category"><?php
echo lang_get('custom_field_default_value');
?>
</th>
</tr><?php
$t_custom_fields = custom_field_get_ids();
foreach ($t_custom_fields as $t_field_id) {
$t_desc = custom_field_get_definition($t_field_id);
?>
<tr>
<td>
<a href="manage_custom_field_edit_page.php?field_id=<?php
echo $t_field_id;
?>
"><?php
echo custom_field_get_display_name($t_desc['name']);
?>
</a>
</td>
<td><?php
echo count(custom_field_get_project_ids($t_field_id));
?>
</td>
示例6: filter_get_bug_rows
//.........这里部分代码省略.........
foreach ($t_plugin_filters as $t_field_name => $t_filter_object) {
if (!filter_field_is_any($t_filter[$t_field_name]) || $t_filter_object->type == FILTER_TYPE_BOOLEAN) {
$t_filter_query = $t_filter_object->query($t_filter[$t_field_name]);
if (is_array($t_filter_query)) {
if (isset($t_filter_query['join'])) {
array_push($t_join_clauses, $t_filter_query['join']);
}
if (isset($t_filter_query['where'])) {
array_push($t_where_clauses, $t_filter_query['where']);
}
if (isset($t_filter_query['params']) && is_array($t_filter_query['params'])) {
$t_where_params = array_merge($t_where_params, $t_filter_query['params']);
}
}
}
}
# custom field filters
if (ON == config_get('filter_by_custom_fields')) {
# custom field filtering
# @@@ At the moment this gets the linked fields relating to the current project
# It should get the ones relating to the project in the filter or all projects
# if multiple projects.
$t_custom_fields = custom_field_get_linked_ids($t_project_id);
foreach ($t_custom_fields as $t_cfid) {
$t_field_info = custom_field_cache_row($t_cfid, true);
if (!$t_field_info['filter_by']) {
continue;
# skip this custom field it shouldn't be filterable
}
$t_field = $t_filter['custom_fields'][$t_cfid];
$t_custom_where_clause = '';
# Ignore all custom filters that are not set, or that are set to '' or "any"
if (!filter_field_is_any($t_field)) {
$t_def = custom_field_get_definition($t_cfid);
$t_table_name = '{custom_field_string}_' . $t_cfid;
# We need to filter each joined table or the result query will explode in dimensions
# Each custom field will result in a exponential growth like Number_of_Issues^Number_of_Custom_Fields
# and only after this process ends (if it is able to) the result query will be filtered
# by the WHERE clause and by the DISTINCT clause
$t_cf_join_clause = 'LEFT JOIN {custom_field_string} ' . $t_table_name . ' ON {bug}.id = ' . $t_table_name . '.bug_id AND ' . $t_table_name . '.field_id = ' . $t_cfid;
if ($t_def['type'] == CUSTOM_FIELD_TYPE_DATE) {
# Define the value field with type cast to integer
$t_value_field = 'CAST(COALESCE(NULLIF(' . $t_table_name . '.value, \'\'), \'0\') AS DECIMAL)';
switch ($t_field[0]) {
# Closing parenthesis intentionally omitted, will be added later on
case CUSTOM_FIELD_DATE_ANY:
break;
case CUSTOM_FIELD_DATE_NONE:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '( ' . $t_table_name . '.bug_id is null OR ' . $t_value_field . ' = 0 ';
break;
case CUSTOM_FIELD_DATE_BEFORE:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '( ' . $t_value_field . ' != 0 AND ' . $t_value_field . ' < ' . $t_field[2];
break;
case CUSTOM_FIELD_DATE_AFTER:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '( ' . $t_value_field . ' > ' . ($t_field[1] + 1);
break;
default:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '( ' . $t_value_field . ' BETWEEN ' . $t_field[1] . ' AND ' . $t_field[2];
break;
}
} else {
array_push($t_join_clauses, $t_cf_join_clause);
示例7: gpc_get_int
$f_custom_field_id = gpc_get_int('custom_field_id', 0);
$f_bug_arr = gpc_get_int_array('bug_arr', array());
$f_bug_notetext = gpc_get_string('bugnote_text', '');
$f_bug_noteprivate = gpc_get_bool('private');
$t_form_name = 'bug_actiongroup_' . $f_action;
form_security_validate($t_form_name);
$t_custom_group_actions = config_get('custom_group_actions');
foreach ($t_custom_group_actions as $t_custom_group_action) {
if ($f_action == $t_custom_group_action['action']) {
require_once $t_custom_group_action['action_page'];
exit;
}
}
$t_failed_ids = array();
if (0 != $f_custom_field_id) {
$t_custom_field_def = custom_field_get_definition($f_custom_field_id);
}
foreach ($f_bug_arr as $t_bug_id) {
bug_ensure_exists($t_bug_id);
$t_bug = bug_get($t_bug_id, true);
if ($t_bug->project_id != helper_get_current_project()) {
# in case the current project is not the same project of the bug we are viewing...
# ... override the current project. This to avoid problems with categories and handlers lists etc.
$g_project_override = $t_bug->project_id;
# @todo (thraxisp) the next line goes away if the cache was smarter and used project
config_flush_cache();
# flush the config cache so that configs are refetched
}
$t_status = $t_bug->status;
switch ($f_action) {
case 'CLOSE':
示例8: bug_group_action_get_commands
/**
* Get a list of bug group actions available to the current user for one or
* more projects.
* @param array $p_project_ids An array containing one or more project IDs.
* @return array
*/
function bug_group_action_get_commands(array $p_project_ids = null)
{
if ($p_project_ids === null || count($p_project_ids) == 0) {
$p_project_ids = array(ALL_PROJECTS);
}
$t_commands = array();
foreach ($p_project_ids as $t_project_id) {
if (!isset($t_commands['MOVE']) && access_has_project_level(config_get('move_bug_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['MOVE'] = lang_get('actiongroup_menu_move');
}
if (!isset($t_commands['COPY']) && access_has_any_project(config_get('report_bug_threshold', null, null, $t_project_id))) {
$t_commands['COPY'] = lang_get('actiongroup_menu_copy');
}
if (!isset($t_commands['ASSIGN']) && access_has_project_level(config_get('update_bug_assign_threshold', null, null, $t_project_id), $t_project_id)) {
if (ON == config_get('auto_set_status_to_assigned', null, null, $t_project_id) && access_has_project_level(access_get_status_threshold(config_get('bug_assigned_status', null, null, $t_project_id), $t_project_id), $t_project_id)) {
$t_commands['ASSIGN'] = lang_get('actiongroup_menu_assign');
} else {
$t_commands['ASSIGN'] = lang_get('actiongroup_menu_assign');
}
}
if (!isset($t_commands['CLOSE']) && access_has_project_level(config_get('update_bug_status_threshold', null, null, $t_project_id), $t_project_id) && (access_has_project_level(access_get_status_threshold(config_get('bug_closed_status_threshold', null, null, $t_project_id), $t_project_id), $t_project_id) || access_has_project_level(config_get('allow_reporter_close', null, null, $t_project_id), $t_project_id))) {
$t_commands['CLOSE'] = lang_get('actiongroup_menu_close');
}
if (!isset($t_commands['DELETE']) && access_has_project_level(config_get('delete_bug_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['DELETE'] = lang_get('actiongroup_menu_delete');
}
if (!isset($t_commands['RESOLVE']) && access_has_project_level(config_get('update_bug_status_threshold', null, null, $t_project_id), $t_project_id) && access_has_project_level(access_get_status_threshold(config_get('bug_resolved_status_threshold', null, null, $t_project_id), $t_project_id), $t_project_id)) {
$t_commands['RESOLVE'] = lang_get('actiongroup_menu_resolve');
}
if (!isset($t_commands['SET_STICKY']) && access_has_project_level(config_get('set_bug_sticky_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['SET_STICKY'] = lang_get('actiongroup_menu_set_sticky');
}
if (!isset($t_commands['UP_PRIOR']) && access_has_project_level(config_get('update_bug_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['UP_PRIOR'] = lang_get('actiongroup_menu_update_priority');
}
if (!isset($t_commands['EXT_UPDATE_SEVERITY']) && access_has_project_level(config_get('update_bug_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['EXT_UPDATE_SEVERITY'] = lang_get('actiongroup_menu_update_severity');
}
if (!isset($t_commands['UP_STATUS']) && access_has_project_level(config_get('update_bug_status_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['UP_STATUS'] = lang_get('actiongroup_menu_update_status');
}
if (!isset($t_commands['UP_CATEGORY']) && access_has_project_level(config_get('update_bug_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['UP_CATEGORY'] = lang_get('actiongroup_menu_update_category');
}
if (!isset($t_commands['VIEW_STATUS']) && access_has_project_level(config_get('change_view_status_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['VIEW_STATUS'] = lang_get('actiongroup_menu_update_view_status');
}
if (!isset($t_commands['EXT_UPDATE_PRODUCT_BUILD']) && config_get('enable_product_build', null, null, $t_project_id) == ON && access_has_project_level(config_get('update_bug_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['EXT_UPDATE_PRODUCT_BUILD'] = lang_get('actiongroup_menu_update_product_build');
}
if (!isset($t_commands['EXT_ADD_NOTE']) && access_has_project_level(config_get('add_bugnote_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['EXT_ADD_NOTE'] = lang_get('actiongroup_menu_add_note');
}
if (!isset($t_commands['EXT_ATTACH_TAGS']) && access_has_project_level(config_get('tag_attach_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['EXT_ATTACH_TAGS'] = lang_get('actiongroup_menu_attach_tags');
}
if (!isset($t_commands['UP_FIXED_IN_VERSION']) && version_should_show_product_version($t_project_id) && access_has_project_level(config_get('update_bug_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['UP_FIXED_IN_VERSION'] = lang_get('actiongroup_menu_update_fixed_in_version');
}
if (!isset($t_commands['UP_TARGET_VERSION']) && version_should_show_product_version($t_project_id) && access_has_project_level(config_get('roadmap_update_threshold', null, null, $t_project_id), $t_project_id)) {
$t_commands['UP_TARGET_VERSION'] = lang_get('actiongroup_menu_update_target_version');
}
$t_custom_field_ids = custom_field_get_linked_ids($t_project_id);
foreach ($t_custom_field_ids as $t_custom_field_id) {
if (!custom_field_has_write_access_to_project($t_custom_field_id, $t_project_id)) {
continue;
}
$t_custom_field_def = custom_field_get_definition($t_custom_field_id);
$t_command_id = 'custom_field_' . $t_custom_field_id;
$t_command_caption = sprintf(lang_get('actiongroup_menu_update_field'), lang_get_defaulted($t_custom_field_def['name']));
$t_commands[$t_command_id] = string_display($t_command_caption);
}
}
$t_custom_group_actions = config_get('custom_group_actions');
foreach ($t_custom_group_actions as $t_custom_group_action) {
# use label if provided to get the localized text, otherwise fallback to action name.
if (isset($t_custom_group_action['label'])) {
$t_commands[$t_custom_group_action['action']] = lang_get_defaulted($t_custom_group_action['label']);
} else {
$t_commands[$t_custom_group_action['action']] = lang_get_defaulted($t_custom_group_action['action']);
}
}
return $t_commands;
}
示例9: excel_format_custom_field
/**
* Gets the formatted value for the specified issue id, project and custom field.
* @param integer $p_issue_id The issue id.
* @param integer $p_project_id The project id.
* @param string $p_custom_field The custom field name (without 'custom_' prefix).
* @return string The custom field value.
*/
function excel_format_custom_field($p_issue_id, $p_project_id, $p_custom_field)
{
$t_field_id = custom_field_get_id_from_name($p_custom_field);
if ($t_field_id === false) {
return excel_prepare_string('@' . $p_custom_field . '@');
}
if (custom_field_is_linked($t_field_id, $p_project_id)) {
$t_def = custom_field_get_definition($t_field_id);
if ($t_def['type'] == CUSTOM_FIELD_TYPE_NUMERIC) {
return excel_prepare_number(string_custom_field_value($t_def, $t_field_id, $p_issue_id));
}
return excel_prepare_string(string_custom_field_value($t_def, $t_field_id, $p_issue_id));
}
# field is not linked to project
return excel_prepare_string('');
}
示例10: print_all_bug_action_option_list
function print_all_bug_action_option_list()
{
$commands = array('MOVE' => lang_get('actiongroup_menu_move'), 'COPY' => lang_get('actiongroup_menu_copy'), 'ASSIGN' => lang_get('actiongroup_menu_assign'), 'CLOSE' => lang_get('actiongroup_menu_close'), 'DELETE' => lang_get('actiongroup_menu_delete'), 'RESOLVE' => lang_get('actiongroup_menu_resolve'), 'SET_STICKY' => lang_get('actiongroup_menu_set_sticky'), 'UP_PRIOR' => lang_get('actiongroup_menu_update_priority'), 'UP_STATUS' => lang_get('actiongroup_menu_update_status'), 'UP_CATEGORY' => lang_get('actiongroup_menu_update_category'), 'VIEW_STATUS' => lang_get('actiongroup_menu_update_view_status'), 'EXT_ADD_NOTE' => lang_get('actiongroup_menu_add_note'), 'EXT_ATTACH_TAGS' => lang_get('actiongroup_menu_attach_tags'));
$t_project_id = helper_get_current_project();
if (ALL_PROJECTS != $t_project_id) {
$t_user_id = auth_get_current_user_id();
if (access_has_project_level(config_get('update_bug_threshold'), $t_project_id)) {
$commands['UP_FIXED_IN_VERSION'] = lang_get('actiongroup_menu_update_fixed_in_version');
}
if (access_has_project_level(config_get('roadmap_update_threshold'), $t_project_id)) {
$commands['UP_TARGET_VERSION'] = lang_get('actiongroup_menu_update_target_version');
}
$t_custom_field_ids = custom_field_get_linked_ids($t_project_id);
foreach ($t_custom_field_ids as $t_custom_field_id) {
# if user has not access right to modify the field, then there is no
# point in showing it.
if (!custom_field_has_write_access_to_project($t_custom_field_id, $t_project_id, $t_user_id)) {
continue;
}
$t_custom_field_def = custom_field_get_definition($t_custom_field_id);
$t_command_id = 'custom_field_' . $t_custom_field_id;
$t_command_caption = sprintf(lang_get('actiongroup_menu_update_field'), lang_get_defaulted($t_custom_field_def['name']));
$commands[$t_command_id] = string_display($t_command_caption);
}
}
$t_custom_group_actions = config_get('custom_group_actions');
foreach ($t_custom_group_actions as $t_custom_group_action) {
# use label if provided to get the localized text, otherwise fallback to action name.
if (isset($t_custom_group_action['label'])) {
$commands[$t_custom_group_action['action']] = lang_get_defaulted($t_custom_group_action['label']);
} else {
$commands[$t_custom_group_action['action']] = lang_get_defaulted($t_custom_group_action['action']);
}
}
while (list($key, $val) = each($commands)) {
print "<option value=\"" . $key . "\">" . $val . "</option>";
}
}
示例11: kanban_ajax_request_bug_update_status
/**
* updates the status field
* @return bool
* @access public
* @see bug_update.php
*/
function kanban_ajax_request_bug_update_status()
{
$p_bug_id = gpc_get_int('id');
$p_new_status = gpc_get_int('new_status');
$t_project_id = gpc_get_int('project_id');
$c_bug_id = (int) $p_bug_id;
$f_new_status = (int) $p_new_status;
$t_bug_data = bug_get($c_bug_id, true);
$f_update_mode = gpc_get_bool('update_mode', FALSE);
# set if called from generic update page
if (!(access_has_bug_level(access_get_status_threshold($f_new_status, $t_project_id), $c_bug_id) || access_has_bug_level(config_get('update_bug_threshold'), $c_bug_id) || bug_get_field($c_bug_id, 'reporter_id') == auth_get_current_user_id() && (ON == config_get('allow_reporter_reopen') || ON == config_get('allow_reporter_close')))) {
access_denied();
}
# extract current extended information
$t_old_bug_status = $t_bug_data->status;
log_event(LOG_AJAX, "Old bug status {$t_old_bug_status} - trying update to new status {$f_new_status}...");
$t_bug_data->reporter_id = gpc_get_int('reporter_id', $t_bug_data->reporter_id);
$t_bug_data->handler_id = gpc_get_int('handler_id', $t_bug_data->handler_id);
$t_bug_data->duplicate_id = gpc_get_int('duplicate_id', $t_bug_data->duplicate_id);
$t_bug_data->priority = gpc_get_int('priority', $t_bug_data->priority);
$t_bug_data->severity = gpc_get_int('severity', $t_bug_data->severity);
$t_bug_data->reproducibility = gpc_get_int('reproducibility', $t_bug_data->reproducibility);
$t_bug_data->status = gpc_get_int('new_status', $t_bug_data->status);
$t_bug_data->resolution = gpc_get_int('resolution', $t_bug_data->resolution);
$t_bug_data->projection = gpc_get_int('projection', $t_bug_data->projection);
$t_bug_data->category_id = gpc_get_int('category_id', $t_bug_data->category_id);
$t_bug_data->eta = gpc_get_int('eta', $t_bug_data->eta);
$t_bug_data->os = gpc_get_string('os', $t_bug_data->os);
$t_bug_data->os_build = gpc_get_string('os_build', $t_bug_data->os_build);
$t_bug_data->platform = gpc_get_string('platform', $t_bug_data->platform);
$t_bug_data->version = gpc_get_string('version', $t_bug_data->version);
$t_bug_data->build = gpc_get_string('build', $t_bug_data->build);
$t_bug_data->fixed_in_version = gpc_get_string('fixed_in_version', $t_bug_data->fixed_in_version);
$t_bug_data->view_state = gpc_get_int('view_state', $t_bug_data->view_state);
$t_bug_data->summary = gpc_get_string('summary', $t_bug_data->summary);
$t_due_date = gpc_get_string('due_date', null);
if (access_has_project_level(config_get('roadmap_update_threshold'), $t_bug_data->project_id)) {
$t_bug_data->target_version = gpc_get_string('target_version', $t_bug_data->target_version);
}
if ($t_due_date !== null) {
if (is_blank($t_due_date)) {
$t_bug_data->due_date = 1;
} else {
$t_bug_data->due_date = strtotime($t_due_date);
}
}
$t_bug_data->description = gpc_get_string('description', $t_bug_data->description);
$t_bug_data->steps_to_reproduce = gpc_get_string('steps_to_reproduce', $t_bug_data->steps_to_reproduce);
$t_bug_data->additional_information = gpc_get_string('additional_information', $t_bug_data->additional_information);
$f_private = gpc_get_bool('private');
$f_bugnote_text = gpc_get_string('bugnote_text', '');
$f_time_tracking = gpc_get_string('time_tracking', '0:00');
$f_close_now = gpc_get_string('close_now', false);
# Handle auto-assigning
if (config_get('bug_submit_status') == $t_bug_data->status && $t_bug_data->status == $t_old_bug_status && 0 != $t_bug_data->handler_id && ON == config_get('auto_set_status_to_assigned')) {
$t_bug_data->status = config_get('bug_assigned_status');
}
helper_call_custom_function('issue_update_validate', array($c_bug_id, $t_bug_data, $f_bugnote_text));
$t_resolved = config_get('bug_resolved_status_threshold');
$t_closed = config_get('bug_closed_status_threshold');
$t_custom_status_label = "update";
# default info to check
if ($t_bug_data->status == $t_resolved) {
$t_custom_status_label = "resolved";
}
if ($t_bug_data->status == $t_closed) {
$t_custom_status_label = "closed";
}
$t_related_custom_field_ids = custom_field_get_linked_ids($t_bug_data->project_id);
foreach ($t_related_custom_field_ids as $t_id) {
$t_def = custom_field_get_definition($t_id);
# Only update the field if it would have been display for editing
if (!(!$f_update_mode && $t_def['require_' . $t_custom_status_label] || !$f_update_mode && $t_def['display_' . $t_custom_status_label] && in_array($t_custom_status_label, array("resolved", "closed")) || $f_update_mode && $t_def['display_update'] || $f_update_mode && $t_def['require_update'])) {
continue;
}
# Do not set custom field value if user has no write access.
if (!custom_field_has_write_access($t_id, $c_bug_id)) {
continue;
}
if ($t_def['require_' . $t_custom_status_label] && !gpc_isset_custom_field($t_id, $t_def['type'])) {
error_parameters(lang_get_defaulted(custom_field_get_field($t_id, 'name')));
trigger_error(ERROR_EMPTY_FIELD, ERROR);
}
# Only update the field if it is posted,
# or if it is empty, and the current value isn't the default
if (!gpc_isset_custom_field($t_id, $t_def['type']) && custom_field_get_value($t_id, $c_bug_id) == $t_def['default_value']) {
continue;
}
if (!custom_field_set_value($t_id, $c_bug_id, gpc_get_custom_field("custom_field_{$t_id}", $t_def['type'], NULL))) {
error_parameters(lang_get_defaulted(custom_field_get_field($t_id, 'name')));
log_event(LOG_AJAX, "Error setting new status: " . ERROR_CUSTOM_FIELD_INVALID_VALUE . "\nBugdata: " . print_r($t_bug_data, true) . " Line: " . __LINE__);
trigger_error(ERROR_CUSTOM_FIELD_INVALID_VALUE, ERROR);
}
}
//.........这里部分代码省略.........
示例12: filter_get_bug_rows
//.........这里部分代码省略.........
$t_clauses = array();
$t_table_name = 'relationship';
array_push($t_from_clauses, $t_bug_relationship_table);
array_push($t_join_clauses, "LEFT JOIN {$t_bug_relationship_table} {$t_table_name} ON {$t_table_name}.destination_bug_id = {$t_bug_table}.id");
// get reverse relationships
if ($c_rel_type == 1) {
array_push($t_join_clauses, "LEFT JOIN {$t_bug_relationship_table} {$t_table_name}" . "2 ON {$t_table_name}" . "2.source_bug_id = {$t_bug_table}.id");
}
array_push($t_clauses, "({$t_table_name}.relationship_type='{$c_rel_type}' AND {$t_table_name}.source_bug_id='{$c_rel_bug}')");
// get reverse relationships
if ($c_rel_type == 1) {
array_push($t_clauses, "({$t_table_name}" . "2.relationship_type='{$c_rel_type}' AND {$t_table_name}" . "2.destination_bug_id='{$c_rel_bug}')");
}
array_push($t_where_clauses, '(' . implode(' OR ', $t_clauses) . ')');
}
# custom field filters
if (ON == config_get('filter_by_custom_fields')) {
# custom field filtering
$t_custom_fields = custom_field_get_linked_ids($t_project_id);
foreach ($t_custom_fields as $t_cfid) {
$t_first_time = true;
$t_custom_where_clause = '';
# Ignore all custom filters that are not set, or that are set to '' or "any"
$t_any_found = false;
foreach ($t_filter['custom_fields'][$t_cfid] as $t_filter_member) {
if (META_FILTER_ANY == $t_filter_member && is_numeric($t_filter_member)) {
$t_any_found = true;
}
}
if (!isset($t_filter['custom_fields'][$t_cfid])) {
$t_any_found = true;
}
if (!$t_any_found) {
$t_def = custom_field_get_definition($t_cfid);
$t_table_name = $t_custom_field_string_table . '_' . $t_cfid;
# We need to filter each joined table or the result query will explode in dimensions
# Each custom field will result in a exponential growth like Number_of_Issues^Number_of_Custom_Fields
# and only after this process ends (if it is able to) the result query will be filtered
# by the WHERE clause and by the DISTINCT clause
$t_cf_join_clause = "LEFT JOIN {$t_custom_field_string_table} {$t_table_name} ON {$t_table_name}.bug_id = {$t_bug_table}.id AND {$t_table_name}.field_id = {$t_cfid} ";
if ($t_def['type'] == CUSTOM_FIELD_TYPE_DATE) {
switch ($t_filter['custom_fields'][$t_cfid][0]) {
case CUSTOM_FIELD_DATE_ANY:
break;
case CUSTOM_FIELD_DATE_NONE:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '(( ' . $t_table_name . '.bug_id is null) OR ( ' . $t_table_name . '.value = 0)';
break;
case CUSTOM_FIELD_DATE_BEFORE:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '(( ' . $t_table_name . '.value != 0 AND (' . $t_table_name . '.value+0) < ' . $t_filter['custom_fields'][$t_cfid][2] . ')';
break;
case CUSTOM_FIELD_DATE_AFTER:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '(( ' . $t_table_name . '.field_id = ' . $t_cfid . ' AND (' . $t_table_name . '.value+0) > ' . ($t_filter['custom_fields'][$t_cfid][1] + 1) . ')';
break;
default:
array_push($t_join_clauses, $t_cf_join_clause);
$t_custom_where_clause = '(( ' . $t_table_name . '.field_id = ' . $t_cfid . ' AND (' . $t_table_name . '.value+0) BETWEEN ' . $t_filter['custom_fields'][$t_cfid][1] . ' AND ' . $t_filter['custom_fields'][$t_cfid][2] . ')';
break;
}
} else {
array_push($t_join_clauses, $t_cf_join_clause);
foreach ($t_filter['custom_fields'][$t_cfid] as $t_filter_member) {
$t_filter_member = stripslashes($t_filter_member);
if (META_FILTER_NONE === $t_filter_member) {
示例13: format_value
function format_value($bug, $field_name)
{
$values = array('id' => function ($bug) {
return sprintf('%s <%s>', $bug->id, string_get_bug_view_url_with_fqdn($bug->id));
}, 'project_id' => function ($bug) {
return project_get_name($bug->project_id);
}, 'reporter_id' => function ($bug) {
return '@' . user_get_name($bug->reporter_id);
}, 'handler_id' => function ($bug) {
return empty($bug->handler_id) ? plugin_lang_get('no_user') : '@' . user_get_name($bug->handler_id);
}, 'duplicate_id' => function ($bug) {
return sprintf('%s <%s>', $bug->duplicate_id, string_get_bug_view_url_with_fqdn($bug->duplicate_id));
}, 'priority' => function ($bug) {
return get_enum_element('priority', $bug->priority);
}, 'severity' => function ($bug) {
return get_enum_element('severity', $bug->severity);
}, 'reproducibility' => function ($bug) {
return get_enum_element('reproducibility', $bug->reproducibility);
}, 'status' => function ($bug) {
return get_enum_element('status', $bug->status);
}, 'resolution' => function ($bug) {
return get_enum_element('resolution', $bug->resolution);
}, 'projection' => function ($bug) {
return get_enum_element('projection', $bug->projection);
}, 'category_id' => function ($bug) {
return category_full_name($bug->category_id, false);
}, 'eta' => function ($bug) {
return get_enum_element('eta', $bug->eta);
}, 'view_state' => function ($bug) {
return $bug->view_state == VS_PRIVATE ? lang_get('private') : lang_get('public');
}, 'sponsorship_total' => function ($bug) {
return sponsorship_format_amount($bug->sponsorship_total);
}, 'os' => function ($bug) {
return $bug->os;
}, 'os_build' => function ($bug) {
return $bug->os_build;
}, 'platform' => function ($bug) {
return $bug->platform;
}, 'version' => function ($bug) {
return $bug->version;
}, 'fixed_in_version' => function ($bug) {
return $bug->fixed_in_version;
}, 'target_version' => function ($bug) {
return $bug->target_version;
}, 'build' => function ($bug) {
return $bug->build;
}, 'summary' => function ($bug) {
return HipChatPlugin::clean_summary(bug_format_summary($bug->id, SUMMARY_FIELD));
}, 'last_updated' => function ($bug) {
return date(config_get('short_date_format'), $bug->last_updated);
}, 'date_submitted' => function ($bug) {
return date(config_get('short_date_format'), $bug->date_submitted);
}, 'due_date' => function ($bug) {
return date(config_get('short_date_format'), $bug->due_date);
}, 'description' => function ($bug) {
return string_display_links($bug->description);
}, 'steps_to_reproduce' => function ($bug) {
return string_display_links($bug->steps_to_reproduce);
}, 'additional_information' => function ($bug) {
return string_display_links($bug->additional_information);
});
// Discover custom fields.
$t_related_custom_field_ids = custom_field_get_linked_ids($bug->project_id);
foreach ($t_related_custom_field_ids as $t_id) {
$t_def = custom_field_get_definition($t_id);
$values['custom_' . $t_def['name']] = function ($bug) use($t_id) {
return custom_field_get_value($t_id, $bug->id);
};
}
if (isset($values[$field_name])) {
$func = $values[$field_name];
return $func($bug);
} else {
return sprintf(plugin_lang_get('unknown_field'), $field_name);
}
}
示例14: save_bug
function save_bug($p_project_id, $p_user_id)
{
require 'ProfileAcraExt.php';
$t_project_id = $p_project_id;
global $g_cache_current_user_id;
$g_cache_current_user_id = $p_user_id;
$t_bug_data = new BugData();
$t_bug_data->project_id = $t_project_id;
$t_bug_data->reporter_id = $p_user_id;
$t_bug_data->build = gpc_get_string('APP_VERSION_CODE', '');
$t_bug_data->platform = "Android";
$t_bug_data->os = gpc_get_string('ANDROID_VERSION', '');
//gpc_get_string( 'os', '' );
$t_os_build = gpc_get_string('BUILD', '');
if (preg_match('/DISPLAY\\s*=\\s*(.*)/', $t_os_build, $t_match)) {
var_dump($t_match);
$t_os_build = $t_match[1];
} else {
$t_os_build = gpc_get_string('ANDROID_VERSION', '');
}
$t_bug_data->os_build = $t_os_build;
//gpc_get_string( 'os_build', '' );
$t_bug_data->version = gpc_get_string('APP_VERSION_NAME', '');
$t_bug_data->profile_id = profile_create_unique(ALL_USERS, $t_bug_data->platform, $t_bug_data->os, $t_bug_data->os_build, "");
$t_bug_data->handler_id = gpc_get_int('handler_id', 0);
$t_bug_data->view_state = gpc_get_int('view_state', config_get('default_bug_view_status', 'VS_PRIVATE', 'acra_reporter'));
$t_bug_data->category_id = $this->get_category_id($p_project_id);
//gpc_get_int( 'category_id', 0 );
$t_bug_data->reproducibility = 10;
//gpc_get_int( 'reproducibility', config_get( 'default_bug_reproducibility' ) );
$t_bug_data->severity = CRASH;
//gpc_get_int( 'severity', config_get( 'default_bug_severity' ) );
$t_bug_data->priority = HIGH;
//gpc_get_int( 'priority', config_get( 'default_bug_priority' ) );
$t_bug_data->projection = gpc_get_int('projection', config_get('default_bug_projection'));
$t_bug_data->eta = gpc_get_int('eta', config_get('default_bug_eta'));
$t_bug_data->resolution = OPEN;
//gpc_get_string('resolution', config_get( 'default_bug_resolution' ) );
$t_bug_data->status = NEW_;
//gpc_get_string( 'status', config_get( 'bug_submit_status' ) );
$t_bug_data->description = gpc_get_string('STACK_TRACE');
//gpc_get_string( 'description' );
$t_bug_data->summary = get_bug_summary_by_version(gpc_get_string('APP_VERSION_NAME', ''), $t_bug_data->description, $t_project_id);
$t_bug_data->steps_to_reproduce = gpc_get_string('LOGCAT', "");
$t_bug_data->additional_information = gpc_get_string('CRASH_CONFIGURATION', "");
$t_bug_data->due_date = gpc_get_string('USER_CRASH_DATE', '');
if (is_blank($t_bug_data->due_date)) {
$t_bug_data->due_date = date_get_null();
}
$f_files = gpc_get_file('ufile', null);
/** @todo (thraxisp) Note that this always returns a structure */
$f_report_stay = gpc_get_bool('report_stay', false);
$f_copy_notes_from_parent = gpc_get_bool('copy_notes_from_parent', false);
helper_call_custom_function('issue_create_validate', array($t_bug_data));
# Validate the custom fields before adding the bug.
$t_related_custom_field_ids = custom_field_get_linked_ids($t_bug_data->project_id);
foreach ($t_related_custom_field_ids as $t_id) {
$t_def = custom_field_get_definition($t_id);
# Produce an error if the field is required but wasn't posted
if (!gpc_isset_custom_field($t_id, $t_def['type']) && $t_def['require_report']) {
error_parameters(lang_get_defaulted(custom_field_get_field($t_id, 'name')));
trigger_error(ERROR_EMPTY_FIELD, ERROR);
}
if (!custom_field_validate($t_id, gpc_get_custom_field("custom_field_{$t_id}", $t_def['type'], NULL))) {
error_parameters(lang_get_defaulted(custom_field_get_field($t_id, 'name')));
trigger_error(ERROR_CUSTOM_FIELD_INVALID_VALUE, ERROR);
}
}
# Allow plugins to pre-process bug data
$t_bug_data = event_signal('EVENT_REPORT_BUG_DATA', $t_bug_data);
# Ensure that resolved bugs have a handler
if ($t_bug_data->handler_id == NO_USER && $t_bug_data->status >= config_get('bug_resolved_status_threshold')) {
$t_bug_data->handler_id = $this->get_user_id();
}
# Create the bug
$t_bug_id = $t_bug_data->create();
# Mark the added issue as visited so that it appears on the last visited list.
last_visited_issue($t_bug_id);
# Handle the file upload
if ($f_files != null) {
$t_files = helper_array_transpose($f_files);
if ($t_files != null) {
foreach ($t_files as $t_file) {
if (!empty($t_file['name'])) {
file_add($t_bug_id, $t_file, 'bug');
}
}
}
}
# Handle custom field submission
foreach ($t_related_custom_field_ids as $t_id) {
# Do not set custom field value if user has no write access
if (!custom_field_has_write_access($t_id, $t_bug_id)) {
continue;
}
$t_def = custom_field_get_definition($t_id);
if (!custom_field_set_value($t_id, $t_bug_id, gpc_get_custom_field("custom_field_{$t_id}", $t_def['type'], $t_def['default_value']), false)) {
error_parameters(lang_get_defaulted(custom_field_get_field($t_id, 'name')));
trigger_error(ERROR_CUSTOM_FIELD_INVALID_VALUE, ERROR);
}
//.........这里部分代码省略.........
示例15: mci_issue_get_custom_fields
/**
* Get the custom field values associated with the specified issue id.
*
* @param integer $p_issue_id Issue id to get the custom field values for.
*
* @return null if no custom field defined for the project that contains the issue, or if no custom
* fields are accessible to the current user.
*/
function mci_issue_get_custom_fields($p_issue_id)
{
$t_project_id = bug_get_field($p_issue_id, 'project_id');
$t_custom_fields = array();
$t_related_custom_field_ids = custom_field_get_linked_ids($t_project_id);
foreach ($t_related_custom_field_ids as $t_id) {
$t_def = custom_field_get_definition($t_id);
if (custom_field_has_read_access($t_id, $p_issue_id)) {
# user has not access to read this custom field.
$t_value = custom_field_get_value($t_id, $p_issue_id);
if ($t_value === false) {
continue;
}
# return a blank string if the custom field value is undefined
if ($t_value === null) {
$t_value = '';
}
$t_custom_field_value = array();
$t_custom_field_value['field'] = array();
$t_custom_field_value['field']['id'] = $t_id;
$t_custom_field_value['field']['name'] = $t_def['name'];
$t_custom_field_value['value'] = $t_value;
$t_custom_fields[] = $t_custom_field_value;
}
}
return count($t_custom_fields) == 0 ? null : $t_custom_fields;
}