function render_ready_function() { $html = '<script type="text/javascript">' . "\n" . '//<![CDATA[' . "\n" . '$(document).ready(function() {' . "\n"; $parts = event_signal('EVENT_LAYOUT_RESOURCES_JQUERY_ONLOAD'); foreach ($parts as $part) { $html .= $part['onload']; } $html .= '});' . "\n" . '//]]>' . "\n" . '</script>' . "\n"; return $html; }
/** * Log an event * @param int $p_level * @param string $p_msg * @return null */ function log_event($p_level, $p_msg) { global $g_log_levels; # check to see if logging is enabled $t_sys_log = config_get_global('log_level'); if (0 == ($t_sys_log & $p_level)) { return; } $t_now = date(config_get_global('complete_date_format')); $t_level = $g_log_levels[$p_level]; $t_plugin_event = '[' . $t_level . '] ' . $p_msg; if (function_exists('event_signal')) { event_signal('EVENT_LOG', array($t_plugin_event)); } $t_php_event = $t_now . ' ' . $t_level . ' ' . $p_msg; $t_log_destination = config_get_global('log_destination'); if (is_blank($t_log_destination)) { $t_destination = ''; } else { # Use @ to avoid error when there is no delimiter in log destination @(list($t_destination, $t_modifiers) = explode(':', $t_log_destination, 2)); } switch ($t_destination) { case 'file': error_log($t_php_event . PHP_EOL, 3, $t_modifiers); break; case 'firebug': if (!class_exists('FirePHP')) { if (file_exists(BASE_PATH . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'FirePHPCore' . DIRECTORY_SEPARATOR . 'FirePHP.class.php')) { require_once BASE_PATH . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'FirePHPCore' . DIRECTORY_SEPARATOR . 'FirePHP.class.php'; } } if (class_exists('FirePHP')) { static $firephp; if ($firephp === null) { $firephp = FirePHP::getInstance(true); } $firephp->log($t_php_event); return; } // if firebug is not available, fall through // if firebug is not available, fall through default: # use default PHP error log settings error_log($t_php_event . PHP_EOL); break; } # If running from command line, echo log event to stdout if (php_sapi_name() == 'cli') { echo $t_php_event . PHP_EOL; } }
/** * Gets the avatar information for the user. The avatars are provided by * plugins that can integrate with a variety of services like gravatar.com, * LDAP, Social Identities, etc. * * If logged in user doesn't have access to view avatars or not avatar is found, * then a default avatar will be used. * * Note that the provided user id may no longer has a corresponding user in the * system, if the user was deleted. * * @param integer $p_user_id The user id. * @param integer $p_size The desired width/height of the avatar. * * @return array The array with avatar information. */ public static function get($p_user_id, $p_size = 80) { $t_enabled = config_get('show_avatar') !== OFF; $t_avatar = null; if ($t_enabled) { $t_user_exists = user_exists($p_user_id); if ($t_user_exists && access_has_project_level(config_get('show_avatar_threshold'), null, $p_user_id)) { $t_avatar = event_signal('EVENT_USER_AVATAR', array($p_user_id, $p_size)); } if ($t_avatar === null) { $t_avatar = new Avatar(); } $t_avatar->normalize($p_user_id, $t_user_exists); } return $t_avatar; }
/** * Allow plugins to define a set of class-based filters, and register/load * them here to be used by the rest of filter_api. * @return array Mapping of field name to filter object */ function filter_get_plugin_filters() { static $s_field_array = null; if (is_null($s_field_array)) { $s_field_array = array(); $t_all_plugin_filters = event_signal('EVENT_FILTER_FIELDS'); foreach ($t_all_plugin_filters as $t_plugin => $t_plugin_filters) { foreach ($t_plugin_filters as $t_callback => $t_plugin_filter_array) { if (is_array($t_plugin_filter_array)) { foreach ($t_plugin_filter_array as $t_filter_class) { if (class_exists($t_filter_class) && is_subclass_of($t_filter_class, 'MantisFilter')) { $t_filter_object = new $t_filter_class(); $t_field_name = $t_plugin . '_' . $t_filter_object->field; $s_field_array[$t_field_name] = $t_filter_object; } } } } } } return $s_field_array; }
/** * Allow plugins to define a set of class-based columns, and register/load * them here to be used by columns_api. * @return array Mapping of column name to column object */ function columns_get_plugin_columns() { static $s_column_array = null; if (is_null($s_column_array)) { $s_column_array = array(); $t_all_plugin_columns = event_signal('EVENT_FILTER_COLUMNS'); foreach ($t_all_plugin_columns as $t_plugin => $t_plugin_columns) { foreach ($t_plugin_columns as $t_callback => $t_plugin_column_array) { if (is_array($t_plugin_column_array)) { foreach ($t_plugin_column_array as $t_column_class) { if (class_exists($t_column_class) && is_subclass_of($t_column_class, 'MantisColumn')) { $t_column_object = new $t_column_class(); $t_column_name = utf8_strtolower($t_plugin . '_' . $t_column_object->column); $s_column_array[$t_column_name] = $t_column_object; } } } } } } return $s_column_array; }
</label> </th> <td> <select <?php echo helper_get_tab_index(); ?> id="target_version" name="target_version"> <?php print_version_option_list('', null, VERSION_FUTURE); ?> </select> </td> </tr> <?php } event_signal('EVENT_REPORT_BUG_FORM', array($t_project_id)); ?> <tr> <th class="category"> <span class="required">*</span><label for="summary"><?php print_documentation_link('summary'); ?> </label> </th> <td> <input <?php echo helper_get_tab_index(); ?> type="text" id="summary" name="summary" size="105" maxlength="128" value="<?php echo string_attribute($f_summary); ?>
/** * Initialize the extension cache. */ public static function init() { if (is_array(self::$cache) && !empty(self::$cache)) { return; } $t_raw_data = event_signal('EVENT_SOURCE_INTEGRATION'); foreach ($t_raw_data as $t_plugin => $t_callbacks) { foreach ($t_callbacks as $t_callback => $t_object) { if (is_subclass_of($t_object, 'MantisSourcePlugin') && is_string($t_object->type) && !is_blank($t_object->type)) { $t_type = strtolower($t_object->type); self::$cache[$t_type] = new SourceVCSWrapper($t_object); } } } ksort(self::$cache); }
/** * Prints a single textual line of information about an attachment including download link, file * size and upload timestamp. * @param array $p_attachment An attachment array from within the array returned by the file_get_visible_attachments() function. * @return void */ function print_bug_attachment_header(array $p_attachment) { echo "\n"; if ($p_attachment['exists']) { if ($p_attachment['can_download']) { echo '<a href="' . string_attribute($p_attachment['download_url']) . '">'; } print_file_icon($p_attachment['display_name']); if ($p_attachment['can_download']) { echo '</a>'; } echo lang_get('word_separator'); if ($p_attachment['can_download']) { echo '<a href="' . string_attribute($p_attachment['download_url']) . '">'; } echo string_display_line($p_attachment['display_name']); if ($p_attachment['can_download']) { echo '</a>'; } echo lang_get('word_separator') . '(' . number_format($p_attachment['size']) . lang_get('word_separator') . lang_get('bytes') . ')'; echo lang_get('word_separator') . '<span class="italic">' . date(config_get('normal_date_format'), $p_attachment['date_added']) . '</span>'; event_signal('EVENT_VIEW_BUG_ATTACHMENT', array($p_attachment)); } else { print_file_icon($p_attachment['display_name']); echo lang_get('word_separator') . '<span class="strike">' . string_display_line($p_attachment['display_name']) . '</span>' . lang_get('word_separator') . '(' . lang_get('attachment_missing') . ')'; } if ($p_attachment['can_delete']) { echo lang_get('word_separator') . '['; print_link('bug_file_delete.php?file_id=' . $p_attachment['id'] . form_security_param('bug_file_delete'), lang_get('delete_link'), false, 'small'); echo ']'; } }
break; } echo string_display_links($t_bugnote->note); ?> </td> </tr> <?php event_signal('EVENT_VIEW_BUGNOTE', array($f_bug_id, $t_bugnote->id, VS_PRIVATE == $t_bugnote->view_state)); ?> <tr class="spacer"> <td colspan="2"></td> </tr> <?php } # end for loop event_signal('EVENT_VIEW_BUGNOTES_END', $f_bug_id); ?> </table> <?php if ($t_total_time > 0 && access_has_bug_level(config_get('time_tracking_view_threshold'), $f_bug_id)) { echo '<p class="time-tracking-total">', sprintf(lang_get('total_time_for_issue'), '<span class="time-tracked">' . db_minutes_to_hhmm($t_total_time) . '</span>'), '</p>'; } collapse_closed('bugnotes'); ?> <table class="width100" cellspacing="1"> <tr> <td class="form-title" colspan="2"> <?php collapse_icon('bugnotes'); ?>
require_api('error_api.php'); require_api('event_api.php'); require_api('form_api.php'); require_api('gpc_api.php'); require_api('print_api.php'); require_api('string_api.php'); form_security_validate('bugnote_update'); $f_bugnote_id = gpc_get_int('bugnote_id'); $f_bugnote_text = gpc_get_string('bugnote_text', ''); $f_time_tracking = gpc_get_string('time_tracking', '0:00'); # Check if the current user is allowed to edit the bugnote $t_user_id = auth_get_current_user_id(); $t_reporter_id = bugnote_get_field($f_bugnote_id, 'reporter_id'); if ($t_user_id == $t_reporter_id) { access_ensure_bugnote_level(config_get('bugnote_user_edit_threshold'), $f_bugnote_id); } else { access_ensure_bugnote_level(config_get('update_bugnote_threshold'), $f_bugnote_id); } # Check if the bug is readonly $t_bug_id = bugnote_get_field($f_bugnote_id, 'bug_id'); if (bug_is_readonly($t_bug_id)) { error_parameters($t_bug_id); trigger_error(ERROR_BUG_READ_ONLY_ACTION_DENIED, ERROR); } $f_bugnote_text = trim($f_bugnote_text) . "\n\n"; bugnote_set_text($f_bugnote_id, $f_bugnote_text); bugnote_set_time_tracking($f_bugnote_id, $f_time_tracking); # Plugin integration event_signal('EVENT_BUGNOTE_EDIT', array($t_bug_id, $f_bugnote_id)); form_security_purge('bugnote_update'); print_successful_redirect(string_get_bug_view_url($t_bug_id) . '#bugnotes');
} if (is_null($obsolete)) { $version->obsolete = false; } else { if ($obsolete == 'on') { $version->obsolete = true; } } if (!is_null($date_order)) { $new_date_order = $date_order[$version_index]; $version->date_order = $new_date_order; } if (!is_null($type)) { $new_type = $type[$version_index]; if (strlen($new_type) > 0) { $new_type_id = $specmanagement_database_api->get_type_id($new_type); $specmanagement_database_api->update_version_associated_type($project_id, $version_ids[$version_index], $new_type_id); } else { $specmanagement_database_api->update_version_associated_type($project_id, $version_ids[$version_index], 9999); } } if (!is_null($description)) { $new_description = $description[$version_index]; $version->description = $new_description; } version_update($version); event_signal('EVENT_MANAGE_VERSION_UPDATE', array($version_id)); } } form_security_purge('plugin_SpecManagement_manage_versions_update'); print_successful_redirect(plugin_page('manage_versions', true));
/** * Add a bugnote to a bug * return the ID of the new bugnote * @param int $p_bug_id bug id * @param string $p_bugnote_text bugnote text * @param string $p_time_tracking hh:mm string * @param bool $p_private whether bugnote is private * @param int $p_type bugnote type * @param string $p_attr * @param int $p_user_id user id * @param bool $p_send_email generate email? * @return false|int false or indicating bugnote id added * @access public */ function bugnote_add($p_bug_id, $p_bugnote_text, $p_time_tracking = '0:00', $p_private = false, $p_type = BUGNOTE, $p_attr = '', $p_user_id = null, $p_send_email = TRUE, $p_log_history = TRUE) { $c_bug_id = db_prepare_int($p_bug_id); $c_time_tracking = helper_duration_to_minutes($p_time_tracking); $c_type = db_prepare_int($p_type); if (REMINDER !== $p_type) { # Check if this is a time-tracking note $t_time_tracking_enabled = config_get('time_tracking_enabled'); if (ON == $t_time_tracking_enabled && $c_time_tracking > 0) { $t_time_tracking_without_note = config_get('time_tracking_without_note'); if (is_blank($p_bugnote_text) && OFF == $t_time_tracking_without_note) { error_parameters(lang_get('bugnote')); trigger_error(ERROR_EMPTY_FIELD, ERROR); } $c_type = TIME_TRACKING; } else { if (is_blank($p_bugnote_text)) { # This is not time tracking (i.e. it's a normal bugnote) # @todo should we not trigger an error in this case ? return false; } } } $t_bugnote_text_table = db_get_table('mantis_bugnote_text_table'); $t_bugnote_table = db_get_table('mantis_bugnote_table'); # Event integration $t_bugnote_text = event_signal('EVENT_BUGNOTE_DATA', $p_bugnote_text, $c_bug_id); # insert bugnote text $query = 'INSERT INTO ' . $t_bugnote_text_table . ' ( note ) VALUES ( ' . db_param() . ' )'; db_query_bound($query, array($t_bugnote_text)); # retrieve bugnote text id number $t_bugnote_text_id = db_insert_id($t_bugnote_text_table); # get user information if ($p_user_id === null) { $c_user_id = auth_get_current_user_id(); } else { $c_user_id = db_prepare_int($p_user_id); } # Check for private bugnotes. # @@@ VB: Should we allow users to report private bugnotes, and possibly see only their own private ones if ($p_private && access_has_bug_level(config_get('private_bugnote_threshold'), $p_bug_id, $c_user_id)) { $t_view_state = VS_PRIVATE; } else { $t_view_state = VS_PUBLIC; } # insert bugnote info $query = "INSERT INTO {$t_bugnote_table}\n\t\t\t\t(bug_id, reporter_id, bugnote_text_id, view_state, date_submitted, last_modified, note_type, note_attr, time_tracking )\n\t\t\tVALUES\n\t\t\t\t(" . db_param() . ', ' . db_param() . ',' . db_param() . ', ' . db_param() . ', ' . db_param() . ',' . db_param() . ', ' . db_param() . ', ' . db_param() . ', ' . db_param() . ' )'; db_query_bound($query, array($c_bug_id, $c_user_id, $t_bugnote_text_id, $t_view_state, db_now(), db_now(), $c_type, $p_attr, $c_time_tracking)); # get bugnote id $t_bugnote_id = db_insert_id($t_bugnote_table); # update bug last updated bug_update_date($p_bug_id); # log new bug if (TRUE == $p_log_history) { history_log_event_special($p_bug_id, BUGNOTE_ADDED, bugnote_format_id($t_bugnote_id)); } # if it was FEEDBACK its NEW_ now if (config_get('reassign_on_feedback') && bug_get_field($p_bug_id, 'status') == config_get('bug_feedback_status') && bug_get_field($p_bug_id, 'reporter_id') == $c_user_id) { if (bug_get_field($p_bug_id, 'handler_id') == 0) { bug_set_field($p_bug_id, 'status', config_get('bug_submit_status')); } else { bug_set_field($p_bug_id, 'status', config_get('bug_assigned_status')); } } # Event integration event_signal('EVENT_BUGNOTE_ADD', array($p_bug_id, $t_bugnote_id)); # only send email if the text is not blank, otherwise, it is just recording of time without a comment. if (TRUE == $p_send_email && !is_blank($t_bugnote_text)) { email_bugnote_add($p_bug_id); } return $t_bugnote_id; }
} echo lang_get('viewing_bugs_title'); echo " ({$v_start} - {$v_end} / {$t_bug_count})"; ?> </span> <span class="floatleft small"> <?php # -- Print and Export links -- echo ' '; print_bracket_link('print_all_bug_page.php', lang_get('print_all_bug_page_link')); echo ' '; print_bracket_link('csv_export.php', lang_get('csv_export')); echo ' '; print_bracket_link('excel_xml_export.php', lang_get('excel_export')); $t_event_menu_options = $t_links = event_signal('EVENT_MENU_FILTER'); foreach ($t_event_menu_options as $t_plugin => $t_plugin_menu_options) { foreach ($t_plugin_menu_options as $t_callback => $t_callback_menu_options) { if (!is_array($t_callback_menu_options)) { $t_callback_menu_options = array($t_callback_menu_options); } foreach ($t_callback_menu_options as $t_menu_option) { if ($t_menu_option) { print_bracket_link_prepared($t_menu_option); } } } } ?> </span>
?> > <td class="category"> <?php echo lang_get('obsolete'); ?> </td> <td> <input type="checkbox" name="obsolete" <?php check_checked($t_version->obsolete, true); ?> /> </td> </tr> <?php event_signal('EVENT_MANAGE_VERSION_UPDATE_FORM', array($t_version->id)); ?> <tr> <td>   </td> <td> <input type="submit" class="button" value="<?php echo lang_get('update_version_button'); ?> " /> </td> </tr> </table> </form> </div>
/** * Initialize all installed plugins. * Post-signals EVENT_PLUGIN_INIT. */ function plugin_init_installed() { if (OFF == config_get_global('plugins_enabled') || !db_table_exists(db_get_table('plugin'))) { return; } global $g_plugin_cache, $g_plugin_current, $g_plugin_cache_priority, $g_plugin_cache_protected, $g_plugin_cache_init; $g_plugin_cache = array(); $g_plugin_current = array(); $g_plugin_cache_init = array(); $g_plugin_cache_priority = array(); $g_plugin_cache_protected = array(); plugin_register('MantisCore'); plugin_register_installed(); $t_plugins = array_keys($g_plugin_cache); do { $t_continue = false; $t_plugins_retry = array(); foreach ($t_plugins as $t_basename) { if (plugin_init($t_basename)) { $t_continue = true; } else { # Dependent plugin $t_plugins_retry[] = $t_basename; } } $t_plugins = $t_plugins_retry; } while ($t_continue); event_signal('EVENT_PLUGIN_INIT'); }
require_api('authentication_api.php'); if (auth_is_user_authenticated()) { require_api('user_pref_api.php'); $t_user_timezone = user_pref_get_pref(auth_get_current_user_id(), 'timezone'); if (!is_blank($t_user_timezone)) { date_default_timezone_set($t_user_timezone); } } } if (!defined('MANTIS_MAINTENANCE_MODE')) { require_api('collapse_api.php'); collapse_cache_token(); } # Load custom functions require_api('custom_function_api.php'); if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'custom_functions_inc.php')) { require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'custom_functions_inc.php'; } # Set HTTP response headers require_api('http_api.php'); http_all_headers(); # Push default language to speed calls to lang_get if (!defined('LANG_LOAD_DISABLED')) { require_api('lang_api.php'); lang_push(lang_get_default()); } # Signal plugins that the core system is loaded if (!defined('PLUGINS_DISABLED') && !defined('MANTIS_MAINTENANCE_MODE')) { require_api('event_api.php'); event_signal('EVENT_CORE_READY'); }
# copy notes from parent if ($f_copy_notes_from_parent) { $t_parent_bugnotes = bugnote_get_all_bugnotes($f_master_bug_id); foreach ($t_parent_bugnotes as $t_parent_bugnote) { $t_private = $t_parent_bugnote->view_state == VS_PRIVATE; bugnote_add($t_bug_id, $t_parent_bugnote->note, $t_parent_bugnote->time_tracking, $t_private, $t_parent_bugnote->note_type, $t_parent_bugnote->note_attr, $t_parent_bugnote->reporter_id, FALSE, FALSE); } } # copy attachments from parent if ($f_copy_attachments_from_parent) { file_copy_attachments($f_master_bug_id, $t_bug_id); } } helper_call_custom_function('issue_create_notify', array($t_bug_id)); # Allow plugins to post-process bug data with the new bug ID event_signal('EVENT_REPORT_BUG', array($t_bug_data, $t_bug_id)); email_new_bug($t_bug_id); // log status and resolution changes if they differ from the default if ($t_bug_data->status != config_get('bug_submit_status')) { history_log_event($t_bug_id, 'status', config_get('bug_submit_status')); } if ($t_bug_data->resolution != config_get('default_bug_resolution')) { history_log_event($t_bug_id, 'resolution', config_get('default_bug_resolution')); } form_security_purge('bug_report'); html_page_top1(); if (!$f_report_stay) { html_meta_redirect('view_all_bug_page.php'); } html_page_top2(); ?>
/** * Log an event * @param int $p_level Valid debug log level * @param string|array $p_msg Either a string, or an array structured as (string,execution time) * @param object $p_backtrace [Optional] debug_backtrace() stack to use * @return null */ function log_event($p_level, $p_msg, $p_backtrace = null) { global $g_log_levels; # check to see if logging is enabled $t_sys_log = config_get_global('log_level'); if (0 == ($t_sys_log & $p_level)) { return; } if (is_array($p_msg)) { $t_event = $p_msg; $s_msg = var_export($p_msg, true); } else { $t_event = array($p_msg, 0); $s_msg = $p_msg; } if ($p_backtrace === null) { $t_backtrace = debug_backtrace(); } else { $t_backtrace = $p_backtrace; } $t_caller = basename($t_backtrace[0]['file']); $t_caller .= ":" . $t_backtrace[0]['line']; # Is this called from another function? if (isset($t_backtrace[1])) { $t_caller .= ' ' . $t_backtrace[1]['function'] . '()'; } else { # or from a script directly? $t_caller .= ' ' . $_SERVER['SCRIPT_NAME']; } $t_now = date(config_get_global('complete_date_format')); $t_level = $g_log_levels[$p_level]; $t_plugin_event = '[' . $t_level . '] ' . $p_msg; if (function_exists('event_signal')) { event_signal('EVENT_LOG', array($t_plugin_event)); } $t_log_destination = config_get_global('log_destination'); if (is_blank($t_log_destination)) { $t_destination = ''; } else { @(list($t_destination, $t_modifiers) = explode(':', $t_log_destination, 2)); } switch ($t_destination) { case 'none': break; case 'file': $t_php_event = $t_now . ' ' . $t_level . ' ' . $s_msg; error_log($t_php_event . PHP_EOL, 3, $t_modifiers); break; case 'page': global $g_log_events; $g_log_events[] = array(time(), $p_level, $t_event, $t_caller); break; case 'firebug': if (!class_exists('FirePHP')) { if (file_exists(config_get_global('library_path') . 'FirePHPCore' . DIRECTORY_SEPARATOR . 'FirePHP.class.php')) { require_lib('FirePHPCore' . DIRECTORY_SEPARATOR . 'FirePHP.class.php'); } } if (class_exists('FirePHP')) { static $firephp; if ($firephp === null) { $firephp = FirePHP::getInstance(true); } $t_php_event = $t_now . ' ' . $t_level . ' ' . $s_msg; $firephp->log($p_msg, $t_php_event); return; } // if firebug is not available, fall through // if firebug is not available, fall through default: # use default PHP error log settings $t_php_event = $t_now . ' ' . $t_level . ' ' . $s_msg; error_log($t_php_event . PHP_EOL); break; } }
<span class="input"><input type="text" id="project-file-path" name="file_path" size="60" maxlength="250" value="<?php echo $t_file_path; ?> " /></span> <span class="label-style"></span> </div><?php } ?> <div class="field-container"> <label for="project-description"><span><?php echo lang_get('description'); ?> </span></label> <span class="textarea"><textarea id="project-description" name="description" cols="70" rows="5"></textarea></span> <span class="label-style"></span> </div> <?php event_signal('EVENT_MANAGE_PROJECT_CREATE_FORM'); ?> <span class="submit-button"><input type="submit" class="button" value="<?php echo lang_get('add_project_button'); ?> " /></span> </fieldset> </form> </div> <?php html_page_bottom();
?> </b></td> </tr> <tr <?php echo helper_alternate_class(); ?> > <td><?php echo plugin_lang_get('manage_settings_license_info'); ?> </td> <td class="left" style="height:230px"> <div class="applet-row"> <?php if (plugin_is_loaded('agileMantisExpert')) { event_signal('EVENT_LOAD_SETTINGS', array(auth_get_current_user_id())); } else { ?> <a href="<?php echo AGILEMANTIS_EXPERT_DOWNLOAD_LINK; ?> "><?php echo plugin_lang_get('license_download'); ?> </a> <a href="<?php echo AGILEMANTIS_ORDER_PAGE_URL; ?> " style="padding-left:20px"><?php echo plugin_lang_get('license_buy'); ?>
if (0 === $f_custom_field_id) { trigger_error(ERROR_GENERIC, ERROR); } # @todo we need to issue a helper_call_custom_function( 'issue_update_validate', array( $t_bug_id, $t_bug_data, $f_bugnote_text ) ); $t_form_var = 'custom_field_' . $f_custom_field_id; $t_custom_field_value = gpc_get_custom_field($t_form_var, $t_custom_field_def['type'], null); custom_field_set_value($f_custom_field_id, $t_bug_id, $t_custom_field_value); bug_update_date($t_bug_id); email_bug_updated($t_bug_id); helper_call_custom_function('issue_update_notify', array($t_bug_id)); break; default: trigger_error(ERROR_GENERIC, ERROR); } # Bug Action Event event_signal('EVENT_BUG_ACTION', array($f_action, $t_bug_id)); } form_security_purge($t_form_name); $t_redirect_url = 'view_all_bug_page.php'; if (count($t_failed_ids) > 0) { html_page_top(); echo '<div><br />'; echo '<table class="width75">'; $t_separator = lang_get('word_separator'); foreach ($t_failed_ids as $t_id => $t_reason) { $t_label = sprintf(lang_get('label'), string_get_bug_view_link($t_id)) . $t_separator; printf("<tr><td width=\"50%%\">%s%s</td><td>%s</td></tr>\n", $t_label, bug_get_field($t_id, 'summary'), $t_reason); } echo '</table><br />'; print_bracket_link($t_redirect_url, lang_get('proceed')); echo '</div>';
require_api('project_api.php'); require_api('project_hierarchy_api.php'); form_security_validate('manage_proj_create'); auth_reauthenticate(); access_ensure_global_level(config_get('create_project_threshold')); $f_name = gpc_get_string('name'); $f_description = gpc_get_string('description'); $f_view_state = gpc_get_int('view_state'); $f_status = gpc_get_int('status'); $f_file_path = gpc_get_string('file_path', ''); $f_inherit_global = gpc_get_bool('inherit_global', 0); $f_inherit_parent = gpc_get_bool('inherit_parent', 0); $f_parent_id = gpc_get_int('parent_id', 0); if (0 != $f_parent_id) { project_ensure_exists($f_parent_id); } $t_project_id = project_create(strip_tags($f_name), $f_description, $f_status, $f_view_state, $f_file_path, true, $f_inherit_global); if ($f_view_state == VS_PRIVATE && false === current_user_is_administrator()) { $t_access_level = access_get_global_level(); $t_current_user_id = auth_get_current_user_id(); project_add_user($t_project_id, $t_current_user_id, $t_access_level); } if (0 != $f_parent_id) { project_hierarchy_add($t_project_id, $f_parent_id, $f_inherit_parent); } event_signal('EVENT_MANAGE_PROJECT_CREATE', array($t_project_id)); form_security_purge('manage_proj_create'); $t_redirect_url = 'manage_proj_page.php'; html_page_top(null, $t_redirect_url); html_operation_successful($t_redirect_url); html_page_bottom();
/** * Display html form to edit account preferences * * @param integer $p_user_id A valid user identifier. * @param boolean $p_error_if_protected Whether to error if the account is protected. * @param boolean $p_accounts_menu Display account preferences menu. * @param string $p_redirect_url Redirect URI. * @return void */ function edit_account_prefs($p_user_id = null, $p_error_if_protected = true, $p_accounts_menu = true, $p_redirect_url = '') { if (null === $p_user_id) { $p_user_id = auth_get_current_user_id(); } $t_redirect_url = $p_redirect_url; if (is_blank($t_redirect_url)) { $t_redirect_url = 'account_prefs_page.php'; } # protected account check if (user_is_protected($p_user_id)) { if ($p_error_if_protected) { trigger_error(ERROR_PROTECTED_ACCOUNT, ERROR); } else { return; } } $t_pref = user_pref_get($p_user_id); # Account Preferences Form BEGIN ?> <div id="account-prefs-update-div" class="form-container"> <form id="account-prefs-update-form" method="post" action="account_prefs_update.php"> <fieldset> <legend><span><?php echo lang_get('default_account_preferences_title'); ?> </span></legend> <?php echo form_security_field('account_prefs_update'); ?> <input type="hidden" name="user_id" value="<?php echo $p_user_id; ?> " /> <input type="hidden" name="redirect_url" value="<?php echo $t_redirect_url; ?> " /> <?php if ($p_accounts_menu) { print_account_menu('account_prefs_page.php'); } ?> <div class="field-container"> <label for="default-project-id"><span><?php echo lang_get('default_project'); ?> </span></label> <span class="select"> <select id="default-project-id" name="default_project"> <?php # Count number of available projects $t_projects = current_user_get_accessible_projects(); $t_num_proj = count($t_projects); if ($t_num_proj == 1) { $t_num_proj += count(current_user_get_accessible_subprojects($t_projects[0])); } # Don't display "All projects" in selection list if there is only 1 print_project_option_list((int) $t_pref->default_project, $t_num_proj != 1); ?> </select> </span> <span class="label-style"></span> </div> <div class="field-container"> <label for="refresh-delay"><span><?php echo lang_get('refresh_delay'); ?> </span></label> <span class="input"><input id="refresh-delay" type="text" name="refresh_delay" size="4" maxlength="4" value="<?php echo $t_pref->refresh_delay; ?> " /> <?php echo lang_get('minutes'); ?> </span> <span class="label-style"></span> </div> <div class="field-container"> <label for="redirect-delay"><span><?php echo lang_get('redirect_delay'); ?> </span></label> <span class="input"><input id="redirect-delay" type="text" name="redirect_delay" size="4" maxlength="3" value="<?php echo $t_pref->redirect_delay; ?> " /> <?php echo lang_get('seconds'); ?> </span> <span class="label-style"></span> </div> <fieldset class="field-container"> <legend><span><?php echo lang_get('bugnote_order'); ?> </span></legend> <span class="radio"><input id="bugnote-order-desc" type="radio" name="bugnote_order" value="DESC" <?php check_checked($t_pref->bugnote_order, 'DESC'); ?> /></span> <label for="bugnote-order-desc"><span><?php echo lang_get('bugnote_order_desc'); ?> </span></label> <span class="radio"><input id="bugnote-order-asc" type="radio" name="bugnote_order" value="ASC" <?php check_checked($t_pref->bugnote_order, 'ASC'); ?> /></span> <label for="bugnote-order-asc"><span><?php echo lang_get('bugnote_order_asc'); ?> </span></label> <span class="label-style"></span> </fieldset> <?php if (ON == config_get('enable_email_notification')) { ?> <fieldset class="field-container"> <legend><label for="email-on-new"><?php echo lang_get('email_on_new'); ?> </label></legend> <span class="checkbox"><input id="email-on-new" type="checkbox" name="email_on_new" <?php check_checked((int) $t_pref->email_on_new, ON); ?> /></span> <label for="email-on-new-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-new-min-severity" name="email_on_new_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_new_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-assigned"><?php echo lang_get('email_on_assigned'); ?> </label></legend> <span class="checkbox"><input id="email-on-assigned" type="checkbox" name="email_on_assigned" <?php check_checked((int) $t_pref->email_on_assigned, ON); ?> /></span> <label for="email-on-assigned-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-assigned-min-severity" name="email_on_assigned_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_assigned_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-feedback"><?php echo lang_get('email_on_feedback'); ?> </label></legend> <span class="checkbox"><input id="email-on-feedback" type="checkbox" name="email_on_feedback" <?php check_checked((int) $t_pref->email_on_feedback, ON); ?> /></span> <label for="email-on-feedback-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-feedback-min-severity" name="email_on_feedback_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_feedback_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-resolved"><?php echo lang_get('email_on_resolved'); ?> </label></legend> <span class="checkbox"><input id="email-on-resolved" type="checkbox" name="email_on_resolved" <?php check_checked((int) $t_pref->email_on_resolved, ON); ?> /></span> <label for="email-on-resolved-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-resolved-min-severity" name="email_on_resolved_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_resolved_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-closed"><?php echo lang_get('email_on_closed'); ?> </label></legend> <span class="checkbox"><input id="email-on-closed" type="checkbox" name="email_on_closed" <?php check_checked((int) $t_pref->email_on_closed, ON); ?> /></span> <label for="email-on-closed-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-closed-min-severity" name="email_on_closed_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_closed_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-reopened"><?php echo lang_get('email_on_reopened'); ?> </label></legend> <span class="checkbox"><input id="email-on-reopened" type="checkbox" name="email_on_reopened" <?php check_checked((int) $t_pref->email_on_reopened, ON); ?> /></span> <label for="email-on-reopened-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-reopened-min-severity" name="email_on_reopened_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_reopened_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-bugnote-added"><?php echo lang_get('email_on_bugnote_added'); ?> </label></legend> <span class="checkbox"><input id="email-on-bugnote-added" type="checkbox" name="email_on_bugnote" <?php check_checked((int) $t_pref->email_on_bugnote, ON); ?> /></span> <label for="email-on-bugnote-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-bugnote-min-severity" name="email_on_bugnote_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_bugnote_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-status"><?php echo lang_get('email_on_status_change'); ?> </label></legend> <span class="checkbox"><input id="email-on-status" type="checkbox" name="email_on_status" <?php check_checked((int) $t_pref->email_on_status, ON); ?> /></span> <label for="email-on-status-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-status-min-severity" name="email_on_status_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_status_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <fieldset class="field-container"> <legend><label for="email-on-priority-change"><?php echo lang_get('email_on_priority_change'); ?> </label></legend> <span class="checkbox"><input id="email-on-priority-change" type="checkbox" name="email_on_priority" <?php check_checked((int) $t_pref->email_on_priority, ON); ?> /></span> <label for="email-on-priority-min-severity" class="email-on-severity-label"><span><?php echo lang_get('with_minimum_severity'); ?> </span></label> <span class="select email-on-severity"> <select id="email-on-priority-min-severity" name="email_on_priority_min_severity"> <option value="<?php echo OFF; ?> "><?php echo lang_get('any'); ?> </option> <option disabled="disabled">-----</option> <?php print_enum_string_option_list('severity', (int) $t_pref->email_on_priority_min_severity); ?> </select> </span> <span class="label-style"></span> </fieldset> <div class="field-container"> <label for="email-bugnote-limit"><span><?php echo lang_get('email_bugnote_limit'); ?> </span></label> <span class="input"><input id="email-bugnote-limit" type="text" name="email_bugnote_limit" maxlength="2" size="2" value="<?php echo $t_pref->email_bugnote_limit; ?> " /></span> <span class="label-style"></span> </div> <?php } else { ?> <input type="hidden" name="email_on_new" value="<?php echo $t_pref->email_on_new; ?> " /> <input type="hidden" name="email_on_assigned" value="<?php echo $t_pref->email_on_assigned; ?> " /> <input type="hidden" name="email_on_feedback" value="<?php echo $t_pref->email_on_feedback; ?> " /> <input type="hidden" name="email_on_resolved" value="<?php echo $t_pref->email_on_resolved; ?> " /> <input type="hidden" name="email_on_closed" value="<?php echo $t_pref->email_on_closed; ?> " /> <input type="hidden" name="email_on_reopened" value="<?php echo $t_pref->email_on_reopened; ?> " /> <input type="hidden" name="email_on_bugnote" value="<?php echo $t_pref->email_on_bugnote; ?> " /> <input type="hidden" name="email_on_status" value="<?php echo $t_pref->email_on_status; ?> " /> <input type="hidden" name="email_on_priority" value="<?php echo $t_pref->email_on_priority; ?> " /> <input type="hidden" name="email_on_new_min_severity" value="<?php echo $t_pref->email_on_new_min_severity; ?> " /> <input type="hidden" name="email_on_assigned_min_severity" value="<?php echo $t_pref->email_on_assigned_min_severity; ?> " /> <input type="hidden" name="email_on_feedback_min_severity" value="<?php echo $t_pref->email_on_feedback_min_severity; ?> " /> <input type="hidden" name="email_on_resolved_min_severity" value="<?php echo $t_pref->email_on_resolved_min_severity; ?> " /> <input type="hidden" name="email_on_closed_min_severity" value="<?php echo $t_pref->email_on_closed_min_severity; ?> " /> <input type="hidden" name="email_on_reopened_min_severity" value="<?php echo $t_pref->email_on_reopened_min_severity; ?> " /> <input type="hidden" name="email_on_bugnote_min_severity" value="<?php echo $t_pref->email_on_bugnote_min_severity; ?> " /> <input type="hidden" name="email_on_status_min_severity" value="<?php echo $t_pref->email_on_status_min_severity; ?> " /> <input type="hidden" name="email_on_priority_min_severity" value="<?php echo $t_pref->email_on_priority_min_severity; ?> " /> <input type="hidden" name="email_bugnote_limit" value="<?php echo $t_pref->email_bugnote_limit; ?> " /> <?php } ?> <div class="field-container"> <label for="timezone"><span><?php echo lang_get('timezone'); ?> </span></label> <span class="select"> <select id="timezone" name="timezone"> <?php print_timezone_option_list($t_pref->timezone ? $t_pref->timezone : config_get_global('default_timezone')); ?> </select> </span> <span class="label-style"></span> </div> <div class="field-container"> <label for="language"><span><?php echo lang_get('language'); ?> </span></label> <span class="select"> <select id="language" name="language"> <?php print_language_option_list($t_pref->language); ?> </select> </span> <span class="label-style"></span> </div> <?php event_signal('EVENT_ACCOUNT_PREF_UPDATE_FORM', array($p_user_id)); ?> <span class="submit-button"><input type="submit" class="button" value="<?php echo lang_get('update_prefs_button'); ?> " /></span> </fieldset> </form> </div> <div id="account-prefs-reset-div" class="form-container"> <form id="account-prefs-reset-form" method="post" action="account_prefs_reset.php"> <fieldset> <?php echo form_security_field('account_prefs_reset'); ?> <input type="hidden" name="user_id" value="<?php echo $p_user_id; ?> " /> <input type="hidden" name="redirect_url" value="<?php echo $t_redirect_url; ?> " /> <span class="submit-button"><input type="submit" class="button" value="<?php echo lang_get('reset_prefs_button'); ?> " /></span> </fieldset> </form> </div> <?php }
if ($t_ip == $t_address) { $t_valid = true; break; } } } } if (gpc_get_string('api_key') == plugin_config_get('api_key') && trim(plugin_config_get('api_key')) != '') { $t_valid = true; } # Not validated by this point gets the boot! if (!$t_valid) { die(plugin_lang_get('invalid_checkin_url')); } # Let plugins try to intepret POST data before we do $t_predata = event_signal('EVENT_SOURCE_PRECOMMIT'); # Expect plugin data in form of array( repo_name, data ) if (is_array($t_predata) && count($t_predata) == 2) { $t_repo = $t_predata['repo']; $f_data = $t_predata['data']; } else { $f_repo_name = gpc_get_string('repo_name', ''); $f_data = gpc_get_string('data'); # Try to find the repository by name $t_repo = SourceRepo::load_by_name($f_repo_name); } # Repo not found if (is_null($t_repo)) { die(plugin_lang_get('invalid_repo')); } $t_vcs = SourceVCS::repo($t_repo);
* @uses config_api.php * @uses event_api.php * @uses form_api.php * @uses gpc_api.php * @uses print_api.php * @uses project_api.php */ require_once 'core.php'; require_api('access_api.php'); require_api('authentication_api.php'); require_api('config_api.php'); require_api('event_api.php'); require_api('form_api.php'); require_api('gpc_api.php'); require_api('print_api.php'); require_api('project_api.php'); form_security_validate('manage_proj_update'); auth_reauthenticate(); $f_project_id = gpc_get_int('project_id'); $f_name = gpc_get_string('name'); $f_description = gpc_get_string('description'); $f_status = gpc_get_int('status'); $f_view_state = gpc_get_int('view_state'); $f_file_path = gpc_get_string('file_path', ''); $f_enabled = gpc_get_bool('enabled'); $f_inherit_global = gpc_get_bool('inherit_global', 0); access_ensure_project_level(config_get('manage_project_threshold'), $f_project_id); project_update($f_project_id, $f_name, $f_description, $f_status, $f_view_state, $f_file_path, $f_enabled, $f_inherit_global); event_signal('EVENT_MANAGE_PROJECT_UPDATE', array($f_project_id)); form_security_purge('manage_proj_update'); print_header_redirect('manage_proj_page.php');
echo '<input ', helper_get_tab_index(), ' type="checkbox" id="private" name="private" ', check_checked(config_get('default_bugnote_view_status'), VS_PRIVATE), ' />'; echo lang_get('private'); } else { echo get_enum_element('view_state', $t_default_bugnote_view_status); } echo '</td></tr>'; } # Time Tracking (if permitted) if (config_get('time_tracking_enabled')) { if (access_has_bug_level(config_get('time_tracking_edit_threshold'), $t_bug_id)) { echo '<tr>'; echo '<th class="category"><label for="time_tracking">' . lang_get('time_tracking') . '</label></th>'; echo '<td colspan="5"><input type="text" id="time_tracking" name="time_tracking" size="5" placeholder="hh:mm" /></td></tr>'; } } event_signal('EVENT_BUGNOTE_ADD_FORM', array($t_bug_id)); # Submit Button if ($t_bottom_buttons_enabled) { ?> <tfoot> <tr> <td class="center" colspan="6"> <input <?php helper_get_tab_index(); ?> type="submit" class="button" value="<?php echo lang_get('update_information_button'); ?> " /> </td>
# it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # MantisBT is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with MantisBT. If not, see <http://www.gnu.org/licenses/>. /** * @package MantisBT * @copyright Copyright (C) 2002 - 2013 MantisBT Team - mantisbt-dev@lists.sourceforge.net * @link http://www.mantisbt.org */ /** * MantisBT Core API's */ require_once 'core.php'; /** * requires tag_api */ require_once 'tag_api.php'; form_security_validate('tag_detach'); $f_tag_id = gpc_get_int('tag_id'); $f_bug_id = gpc_get_int('bug_id'); tag_bug_detach($f_tag_id, $f_bug_id); event_signal('EVENT_TAG_DETACHED', array($f_bug_id, array($f_tag_id))); form_security_purge('tag_detach'); print_successful_redirect_to_bug($f_bug_id);
/** * Generate wiki link to a project * @param int $p_project_id * @return string url * @access public */ function wiki_link_project($p_project_id) { return event_signal('EVENT_WIKI_LINK_PROJECT', $p_project_id); }
# check if available if (plugin_config_get('gadiv_ranking_order') == 0 && config_get('current_user_assume_userstories_filter', null, auth_get_current_user_id()) == 'rankingOrder') { config_set('current_user_assume_userstories_filter', '', auth_get_current_user_id()); config_set('current_user_assume_userstories_filter_direction', 'ASC', auth_get_current_user_id()); } if (plugin_config_get('gadiv_tracker_planned_costs') == 0 && config_get('current_user_assume_userstories_filter', null, auth_get_current_user_id()) == 'plannedWork') { config_set('current_user_assume_userstories_filter', '', auth_get_current_user_id()); config_set('current_user_assume_userstories_filter_direction', 'ASC', auth_get_current_user_id()); } # get all unresolved user stories $undone = $agilemantis_pb->getAllUndoneUserStories($product_backlog); if (empty($undone)) { echo '<br><center><span class="message_error">' . plugin_lang_get('assume_userstories_error_120C01') . '</span></center>'; } if (plugin_is_loaded('agileMantisExpert')) { event_signal('EVENT_LOAD_USERSTORY'); } else { } ?> <br> <form action="" method="post"> <input type="hidden" name="action" value="save"> <input type="hidden" name="product_backlog" value="<?php echo $product_backlog; ?> "> <input type="hidden" name="sprintName" value="<?php echo $sprintName; ?> "> <input
include AGILEMANTIS_PLUGIN_URI . 'pages/sprint_backlog_functions.php'; if ($show_all_sprints == true) { include AGILEMANTIS_PLUGIN_URI . 'pages/chose_sprint.php'; } else { include AGILEMANTIS_PLUGIN_URI . 'pages/sprint_backlog_header.php'; if ($no_sprints == false) { ?> <br> <?php include AGILEMANTIS_PLUGIN_URI . 'pages/sprint_backlog_actions.php'; ?> <br> <center> <?php if (plugin_is_loaded('agileMantisExpert')) { event_signal('EVENT_LOAD_TASKBOARD', array(auth_get_current_user_id(), $s['name'], 0)); } else { $images = array(); $images[] = AGILEMANTIS_PLUGIN_URL . 'images/taskboard_before_sprint_starts.png'; $images[] = AGILEMANTIS_PLUGIN_URL . 'images/taskboard_beginning_of_the_sprint.png'; $images[] = AGILEMANTIS_PLUGIN_URL . 'images/taskboard_during_of_the_sprint.png'; $images[] = AGILEMANTIS_PLUGIN_URL . 'images/taskboard_end_of_the_sprint.png'; $images[] = AGILEMANTIS_PLUGIN_URL . 'images/taskboard_end_resolved_userstories_of_the_sprint.png'; $images[] = AGILEMANTIS_PLUGIN_URL . 'images/taskboard_end_closed_userstories_of_the_sprint.png'; ?> <h2><?php echo plugin_lang_get('screenshot_title'); ?> </h2> <center> <a href="<?php