Пример #1
0
/**
 * Sets the monitors of the specified issue
 *
 * <p>This functions performs access level checks and only performs operations which would
 * modify the existing monitors list.</p>
 *
 * @param integer $p_issue_id           The issue id to set the monitors for.
 * @param integer $p_requesting_user_id The user which requests the monitor change.
 * @param array   $p_monitors           An array of arrays with the <em>id</em> field set to the id
 *                                      of the users which should monitor this issue.
 * @return mixed
 */
function mci_issue_set_monitors($p_issue_id, $p_requesting_user_id, array $p_monitors)
{
    if (bug_is_readonly($p_issue_id)) {
        return mci_soap_fault_access_denied($p_requesting_user_id, 'Issue \'' . $p_issue_id . '\' is readonly');
    }
    # 1. get existing monitor ids
    $t_existing_monitor_ids = bug_get_monitors($p_issue_id);
    # 2. build new monitors ids
    $t_new_monitor_ids = array();
    foreach ($p_monitors as $t_monitor) {
        $t_monitor = SoapObjectsFactory::unwrapObject($t_monitor);
        $t_new_monitor_ids[] = $t_monitor['id'];
    }
    # 3. for each of the new monitor ids, add it if it does not already exist
    foreach ($t_new_monitor_ids as $t_user_id) {
        if ($p_requesting_user_id == $t_user_id) {
            if (!access_has_bug_level(config_get('monitor_bug_threshold'), $p_issue_id)) {
                continue;
            }
        } else {
            if (!access_has_bug_level(config_get('monitor_add_others_bug_threshold'), $p_issue_id)) {
                continue;
            }
        }
        if (in_array($t_user_id, $t_existing_monitor_ids)) {
            continue;
        }
        bug_monitor($p_issue_id, $t_user_id);
    }
    # 4. for each of the existing monitor ids, remove it if it is not found in the new monitor ids
    foreach ($t_existing_monitor_ids as $t_user_id) {
        if ($p_requesting_user_id == $t_user_id) {
            if (!access_has_bug_level(config_get('monitor_bug_threshold'), $p_issue_id)) {
                continue;
            }
        } else {
            if (!access_has_bug_level(config_get('monitor_delete_others_bug_threshold'), $p_issue_id)) {
                continue;
            }
        }
        if (in_array($t_user_id, $t_new_monitor_ids)) {
            continue;
        }
        bug_unmonitor($p_issue_id, $t_user_id);
    }
}
Пример #2
0
 function addBugMonitor($p_user_id, $p_bug_id)
 {
     bug_monitor($p_bug_id, $p_user_id);
 }
Пример #3
0
if ( bug_is_readonly( $f_bug_id ) ) {
	error_parameters( $f_bug_id );
	trigger_error( ERROR_BUG_READ_ONLY_ACTION_DENIED, ERROR );
}

access_ensure_bug_level( config_get( 'bug_reminder_threshold' ), $f_bug_id );

# Automically add recipients to monitor list if they are above the monitor
# threshold, option is enabled, and not reporter or handler.
foreach ( $f_to as $t_recipient )
{
	if ( ON == config_get( 'reminder_recipients_monitor_bug' ) &&
		access_has_bug_level( config_get( 'monitor_bug_threshold' ), $f_bug_id ) &&
		!bug_is_user_handler( $f_bug_id, $t_recipient ) &&
		!bug_is_user_reporter( $f_bug_id, $t_recipient ) ) {
		bug_monitor( $f_bug_id, $t_recipient );
	}
}

$result = email_bug_reminder( $f_to, $f_bug_id, $f_body );

# Add reminder as bugnote if store reminders option is ON.
if ( ON == config_get( 'store_reminders' ) ) {
	if ( count( $f_to ) > 50 ) {		# too many recipients to log, truncate the list
		$t_to = array();
		for ( $i=0; $i<50; $i++ ) {
			$t_to[] = $f_to[$i];
		}
		$f_to = $t_to;
	}
	$t_attr = '|' . implode( '|', $f_to ) . '|';
Пример #4
0
/**
 * if sponsorship contains a non-zero id, then update the corresponding record.
 * if sponsorship contains a zero id, search for bug_id/user_id, if found, then update the entry
 * otherwise add a new entry
 * @param int $p_sponsorship
 * @return int
 */
function sponsorship_set($p_sponsorship)
{
    $t_min_sponsorship = config_get('minimum_sponsorship_amount');
    if ($p_sponsorship->amount < $t_min_sponsorship) {
        error_parameters($p_sponsorship->amount, $t_min_sponsorship);
        trigger_error(ERROR_SPONSORSHIP_AMOUNT_TOO_LOW, ERROR);
    }
    # if id == 0, check if the specified user is already sponsoring the bug, if so, overwrite
    if ($p_sponsorship->id == 0) {
        $t_sponsorship_id = sponsorship_get_id($p_sponsorship->bug_id, $p_sponsorship->user_id);
        if ($t_sponsorship_id !== false) {
            $p_sponsorship->id = $t_sponsorship_id;
        }
    }
    $t_sponsorship_table = db_get_table('sponsorship');
    $c_id = db_prepare_int($p_sponsorship->id);
    $c_bug_id = db_prepare_int($p_sponsorship->bug_id);
    $c_user_id = db_prepare_int($p_sponsorship->user_id);
    $c_amount = db_prepare_int($p_sponsorship->amount);
    $c_logo = $p_sponsorship->logo;
    $c_url = $p_sponsorship->url;
    $c_now = db_now();
    # if new sponsorship
    if ($c_id == 0) {
        # Insert
        $query = "INSERT INTO {$t_sponsorship_table}\n\t\t\t\t    ( bug_id, user_id, amount, logo, url, date_submitted, last_updated )\n\t\t\t\t  VALUES\n\t\t\t\t    (" . 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, $c_amount, $c_logo, $c_url, $c_now, $c_now));
        $t_sponsorship_id = db_insert_id($t_sponsorship_table);
        history_log_event_special($c_bug_id, BUG_ADD_SPONSORSHIP, $c_user_id, $c_amount);
    } else {
        $t_old_amount = sponsorship_get_amount($c_id);
        $t_sponsorship_id = $c_id;
        if ($t_old_amount == $c_amount) {
            return $t_sponsorship_id;
        }
        # Update
        $query = "UPDATE {$t_sponsorship_table}\n\t\t\t\t\tSET\tbug_id = " . db_param() . ",\n\t\t\t\t\t\tuser_id = " . db_param() . ",\n\t\t\t\t\t\tamount = " . db_param() . ",\n\t\t\t\t\t\tlogo = " . db_param() . ",\n\t\t\t\t\t\turl = " . db_param() . ",\n\t\t\t\t\t\tlast_updated = " . db_param() . "\n\t\t\t\t\tWHERE\tid = " . db_param();
        sponsorship_clear_cache($c_id);
        db_query_bound($query, array($c_bug_id, $c_user_id, $c_amount, $c_logo, $c_url, $c_now, $c_id));
        history_log_event_special($c_bug_id, BUG_UPDATE_SPONSORSHIP, $c_user_id, $c_amount);
    }
    sponsorship_update_bug($c_bug_id);
    bug_monitor($c_bug_id, $c_user_id);
    if ($c_id == 0) {
        email_sponsorship_added($c_bug_id);
    } else {
        email_sponsorship_updated($c_bug_id);
    }
    return $t_sponsorship_id;
}
Пример #5
0
    custom_field_set_value($t_custom_field_to_set['id'], $f_bug_id, $t_custom_field_to_set['value']);
}
# Add a bug note if there is one.
if ($t_bug_note->note || helper_duration_to_minutes($t_bug_note->time_tracking) > 0) {
    bugnote_add($f_bug_id, $t_bug_note->note, $t_bug_note->time_tracking, $t_bug_note->view_state == VS_PRIVATE, 0, '', null, false);
}
# Add a duplicate relationship if requested.
if ($t_updated_bug->duplicate_id !== 0) {
    relationship_add($f_bug_id, $t_updated_bug->duplicate_id, BUG_DUPLICATE);
    history_log_event_special($f_bug_id, BUG_ADD_RELATIONSHIP, BUG_DUPLICATE, $t_updated_bug->duplicate_id);
    history_log_event_special($t_updated_bug->duplicate_id, BUG_ADD_RELATIONSHIP, BUG_HAS_DUPLICATE, $f_bug_id);
    if (user_exists($t_existing_bug->reporter_id)) {
        bug_monitor($f_bug_id, $t_existing_bug->reporter_id);
    }
    if (user_exists($t_existing_bug->handler_id)) {
        bug_monitor($f_bug_id, $t_existing_bug->handler_id);
    }
    bug_monitor_copy($f_bug_id, $t_updated_bug->duplicate_id);
}
event_signal('EVENT_UPDATE_BUG', array($t_existing_bug, $t_updated_bug));
# Allow a custom function to respond to the modifications made to the bug. Note
# that custom functions are being deprecated in MantisBT. You should migrate to
# the new plugin system instead.
helper_call_custom_function('issue_update_notify', array($f_bug_id));
# Send a notification of changes via email.
if ($t_resolve_issue) {
    email_resolved($f_bug_id);
    email_relationship_child_resolved($f_bug_id);
} else {
    if ($t_close_issue) {
        email_close($f_bug_id);
Пример #6
0
/**
 * Sets the monitors of the specified issue
 * 
 * <p>This functions performs access level checks and only performs operations which would
 * modify the existing monitors list.</p>
 * 
 * @param int $p_issue_id the issue id to set the monitors for
 * @param int $p_user_id the user which requests the monitor change
 * @param array $p_monitors An array of arrays with the <em>id</em> field set to the id 
 *  of the users which should monitor this issue.
 */
function mci_issue_set_monitors( $p_issue_id , $p_user_id, $p_monitors ) {
    
    $t_existing_monitors = bug_get_monitors( $p_issue_id );

    $t_monitors = array();
    foreach ( $p_monitors as $t_monitor ) 
        $t_monitors[] = $t_monitor['id'];
    
    foreach ( $t_monitors as $t_user_id ) {
        
    	if ( $p_user_id == $t_user_id ) {
    		if ( ! access_has_bug_level( config_get( 'monitor_bug_threshold' ), $p_issue_id ) )
    		    continue;
	    } else {
	    	if ( !access_has_bug_level( config_get( 'monitor_add_others_bug_threshold' ), $p_issue_id ) )
	    	    continue;
	    }
	        
       if ( in_array( $p_user_id, $t_existing_monitors) )
           continue;
	        
        bug_monitor( $p_issue_id, $t_user_id);
    }
    
    foreach ( $t_existing_monitors as $t_user_id ) {

    	if ( $p_user_id == $t_user_id ) {
    		if ( ! access_has_bug_level( config_get( 'monitor_bug_threshold' ), $p_issue_id ) )
    		    continue;
	    } else {
	    	if ( !access_has_bug_level( config_get( 'monitor_delete_others_bug_threshold' ), $p_issue_id ) )
	    	    continue;
	    }
        
        if ( in_array( $p_user_id, $t_monitors) )
            continue;
            
        bug_unmonitor( $p_issue_id, $t_user_id);
    }
}
Пример #7
0
/**
 * resolve the given bug
 * @return bool (alawys true)
 * @access public
 */
function bug_resolve($p_bug_id, $p_resolution, $p_fixed_in_version = '', $p_bugnote_text = '', $p_duplicate_id = null, $p_handler_id = null, $p_bugnote_private = false, $p_time_tracking = '0:00')
{
    $c_resolution = (int) $p_resolution;
    $p_bugnote_text = trim($p_bugnote_text);
    # Add bugnote if supplied
    # Moved bugnote_add before bug_set_field calls in case time_tracking_no_note is off.
    # Error condition stopped execution but status had already been changed
    bugnote_add($p_bug_id, $p_bugnote_text, $p_time_tracking, $p_bugnote_private, 0, '', NULL, FALSE);
    $t_duplicate = !is_blank($p_duplicate_id) && $p_duplicate_id != 0;
    if ($t_duplicate) {
        if ($p_bug_id == $p_duplicate_id) {
            trigger_error(ERROR_BUG_DUPLICATE_SELF, ERROR);
            # never returns
        }
        # the related bug exists...
        bug_ensure_exists($p_duplicate_id);
        # check if there is other relationship between the bugs...
        $t_id_relationship = relationship_same_type_exists($p_bug_id, $p_duplicate_id, BUG_DUPLICATE);
        if ($t_id_relationship > 0) {
            # Update the relationship
            relationship_update($t_id_relationship, $p_bug_id, $p_duplicate_id, BUG_DUPLICATE);
            # Add log line to the history (both bugs)
            history_log_event_special($p_bug_id, BUG_REPLACE_RELATIONSHIP, BUG_DUPLICATE, $p_duplicate_id);
            history_log_event_special($p_duplicate_id, BUG_REPLACE_RELATIONSHIP, BUG_HAS_DUPLICATE, $p_bug_id);
        } else {
            if ($t_id_relationship != -1) {
                # Add the new relationship
                relationship_add($p_bug_id, $p_duplicate_id, BUG_DUPLICATE);
                # Add log line to the history (both bugs)
                history_log_event_special($p_bug_id, BUG_ADD_RELATIONSHIP, BUG_DUPLICATE, $p_duplicate_id);
                history_log_event_special($p_duplicate_id, BUG_ADD_RELATIONSHIP, BUG_HAS_DUPLICATE, $p_bug_id);
            }
        }
        # else relationship is -1 - same type exists, do nothing
        # Copy list of users monitoring the duplicate bug to the original bug
        $t_old_reporter_id = bug_get_field($p_bug_id, 'reporter_id');
        $t_old_handler_id = bug_get_field($p_bug_id, 'handler_id');
        if (user_exists($t_old_reporter_id)) {
            bug_monitor($p_duplicate_id, $t_old_reporter_id);
        }
        if (user_exists($t_old_handler_id)) {
            bug_monitor($p_duplicate_id, $t_old_handler_id);
        }
        bug_monitor_copy($p_bug_id, $p_duplicate_id);
        bug_set_field($p_bug_id, 'duplicate_id', (int) $p_duplicate_id);
    }
    bug_set_field($p_bug_id, 'status', config_get('bug_resolved_status_threshold'));
    bug_set_field($p_bug_id, 'fixed_in_version', $p_fixed_in_version);
    bug_set_field($p_bug_id, 'resolution', $c_resolution);
    # only set handler if specified explicitly or if bug was not assigned to a handler
    if (null == $p_handler_id) {
        if (bug_get_field($p_bug_id, 'handler_id') == 0) {
            $p_handler_id = auth_get_current_user_id();
            bug_set_field($p_bug_id, 'handler_id', $p_handler_id);
        }
    } else {
        bug_set_field($p_bug_id, 'handler_id', $p_handler_id);
    }
    email_resolved($p_bug_id);
    email_relationship_child_resolved($p_bug_id);
    if ($c_resolution >= config_get('bug_resolution_fixed_threshold') && $c_resolution < config_get('bug_resolution_not_fixed_threshold')) {
        twitter_issue_resolved($p_bug_id);
    }
    return true;
}
Пример #8
0
$f_username = gpc_get_string('username', '');
$t_logged_in_user_id = auth_get_current_user_id();
if (is_blank($f_username)) {
    $t_user_id = $t_logged_in_user_id;
} else {
    $t_user_id = user_get_id_by_name($f_username);
    if ($t_user_id === false) {
        $t_user_id = user_get_id_by_realname($f_username);
        if ($t_user_id === false) {
            error_parameters($f_username);
            trigger_error(ERROR_USER_BY_NAME_NOT_FOUND, E_USER_ERROR);
        }
    }
}
if (user_is_anonymous($t_user_id)) {
    trigger_error(ERROR_PROTECTED_ACCOUNT, E_USER_ERROR);
}
bug_ensure_exists($f_bug_id);
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;
}
if ($t_logged_in_user_id == $t_user_id) {
    access_ensure_bug_level(config_get('monitor_bug_threshold'), $f_bug_id);
} else {
    access_ensure_bug_level(config_get('monitor_add_others_bug_threshold'), $f_bug_id);
}
bug_monitor($f_bug_id, $t_user_id);
form_security_purge('bug_monitor_add');
print_successful_redirect_to_bug($f_bug_id);
Пример #9
0
 private function add_monitors($p_bug_id, $p_email)
 {
     if ($this->_mail_add_users_from_cc_to) {
         $t_emails = array_merge($p_email['To'], $p_email['Cc']);
         foreach ($t_emails as $t_email) {
             $t_user_id = $this->get_userid_from_email($t_email);
             if ($t_user_id !== FALSE) {
                 // Make sure that mail_reporter_id and reporter_id are not added as a monitors.
                 if ($this->_mail_reporter_id != $t_user_id && $p_email['Reporter_id'] != $t_user_id) {
                     bug_monitor($p_bug_id, $t_user_id);
                     $this->custom_error('Monitor: ' . $t_user_id . ' - ' . $t_email . ' --> Issue ID: #' . $p_bug_id, FALSE);
                 }
             }
         }
     }
 }
Пример #10
0
/**
 * if sponsorship contains a non-zero id, then update the corresponding record.
 * if sponsorship contains a zero id, search for bug_id/user_id, if found, then update the entry
 * otherwise add a new entry
 * @param SponsorshipData $p_sponsorship The sponsorship data object to set.
 * @return integer
 */
function sponsorship_set(SponsorshipData $p_sponsorship)
{
    $t_min_sponsorship = config_get('minimum_sponsorship_amount');
    if ($p_sponsorship->amount < $t_min_sponsorship) {
        error_parameters($p_sponsorship->amount, $t_min_sponsorship);
        trigger_error(ERROR_SPONSORSHIP_AMOUNT_TOO_LOW, ERROR);
    }
    # if id == 0, check if the specified user is already sponsoring the bug, if so, overwrite
    if ($p_sponsorship->id == 0) {
        $t_sponsorship_id = sponsorship_get_id($p_sponsorship->bug_id, $p_sponsorship->user_id);
        if ($t_sponsorship_id !== false) {
            $p_sponsorship->id = $t_sponsorship_id;
        }
    }
    $c_id = (int) $p_sponsorship->id;
    $c_bug_id = (int) $p_sponsorship->bug_id;
    $c_user_id = (int) $p_sponsorship->user_id;
    $c_amount = (int) $p_sponsorship->amount;
    $c_logo = $p_sponsorship->logo;
    $c_url = $p_sponsorship->url;
    $c_now = db_now();
    # if new sponsorship
    if ($c_id == 0) {
        # Insert
        $t_query = 'INSERT INTO {sponsorship}
				    ( bug_id, user_id, amount, logo, url, date_submitted, last_updated )
				  VALUES
				    (' . db_param() . ',' . db_param() . ',' . db_param() . ',' . db_param() . ',' . db_param() . ',' . db_param() . ',' . db_param() . ')';
        db_query($t_query, array($c_bug_id, $c_user_id, $c_amount, $c_logo, $c_url, $c_now, $c_now));
        $t_sponsorship_id = db_insert_id(db_get_table('sponsorship'));
        history_log_event_special($c_bug_id, BUG_ADD_SPONSORSHIP, $c_user_id, $c_amount);
    } else {
        $t_old_amount = sponsorship_get_amount($c_id);
        $t_sponsorship_id = $c_id;
        if ($t_old_amount == $c_amount) {
            return $t_sponsorship_id;
        }
        # Update
        $t_query = 'UPDATE {sponsorship}
					SET	bug_id = ' . db_param() . ',
						user_id = ' . db_param() . ',
						amount = ' . db_param() . ',
						logo = ' . db_param() . ',
						url = ' . db_param() . ',
						last_updated = ' . db_param() . '
					WHERE	id = ' . db_param();
        sponsorship_clear_cache($c_id);
        db_query($t_query, array($c_bug_id, $c_user_id, $c_amount, $c_logo, $c_url, $c_now, $c_id));
        history_log_event_special($c_bug_id, BUG_UPDATE_SPONSORSHIP, $c_user_id, $c_amount);
    }
    sponsorship_update_bug($c_bug_id);
    bug_monitor($c_bug_id, $c_user_id);
    if ($c_id == 0) {
        email_sponsorship_added($c_bug_id);
    } else {
        email_sponsorship_updated($c_bug_id);
    }
    return $t_sponsorship_id;
}
Пример #11
0
# Mantis 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 Mantis.  If not, see <http://www.gnu.org/licenses/>.
# --------------------------------------------------------
# $Id: bug_monitor.php,v 1.28.16.1 2007-10-13 22:32:42 giallu Exp $
# --------------------------------------------------------
# This file turns monitoring on or off for a bug for the current user
require_once 'core.php';
$t_core_path = config_get('core_path');
require_once $t_core_path . 'bug_api.php';
# helper_ensure_post();
$f_bug_id = gpc_get_int('bug_id');
$t_bug = bug_get($f_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;
}
$f_action = gpc_get_string('action');
access_ensure_bug_level(config_get('monitor_bug_threshold'), $f_bug_id);
if ('delete' == $f_action) {
    bug_unmonitor($f_bug_id, auth_get_current_user_id());
} else {
    # should be 'add' but we have to account for other values
    bug_monitor($f_bug_id, auth_get_current_user_id());
}
print_successful_redirect_to_bug($f_bug_id);
Пример #12
0
/**
 * Sets the monitors of the specified issue
 *
 * <p>This functions performs access level checks and only performs operations which would
 * modify the existing monitors list.</p>
 *
 * @param int $p_issue_id the issue id to set the monitors for
 * @param int $p_user_id the user which requests the monitor change
 * @param array $p_monitors An array of arrays with the <em>id</em> field set to the id
 *  of the users which should monitor this issue.
 */
function mci_issue_set_monitors($p_issue_id, $p_user_id, $p_monitors)
{
    if (bug_is_readonly($p_issue_id)) {
        return mci_soap_fault_access_denied($p_user_id, "Issue '{$p_issue_id}' is readonly");
    }
    $t_existing_monitors = bug_get_monitors($p_issue_id);
    $t_monitors = array();
    foreach ($p_monitors as $t_monitor) {
        $t_monitors[] = $t_monitor['id'];
    }
    foreach ($t_monitors as $t_user_id) {
        if ($p_user_id == $t_user_id) {
            if (!access_has_bug_level(config_get('monitor_bug_threshold'), $p_issue_id)) {
                continue;
            }
        } else {
            if (!access_has_bug_level(config_get('monitor_add_others_bug_threshold'), $p_issue_id)) {
                continue;
            }
        }
        if (in_array($p_user_id, $t_existing_monitors)) {
            continue;
        }
        bug_monitor($p_issue_id, $t_user_id);
    }
    foreach ($t_existing_monitors as $t_user_id) {
        if ($p_user_id == $t_user_id) {
            if (!access_has_bug_level(config_get('monitor_bug_threshold'), $p_issue_id)) {
                continue;
            }
        } else {
            if (!access_has_bug_level(config_get('monitor_delete_others_bug_threshold'), $p_issue_id)) {
                continue;
            }
        }
        if (in_array($p_user_id, $t_monitors)) {
            continue;
        }
        bug_unmonitor($p_issue_id, $t_user_id);
    }
}