Table of contents
    No headers
    /***
        USAGE:
    
        ReleaseStatus(release)
            show status for a given MindTouch release
    ***/
    var release = $0 ?? $release ?? "";
    var maxstatus = $2 ?? $maxstatus ?? 100;
    var default_days_left = 0.5;
    
    if(string.startswith(release, 'tag:')) {
        let release = string.substr(release, 4);
        var query = 
            "SELECT
                mantis_bug_table.id AS id,
                mantis_project_table.name AS project,
                category,
                summary,
                priority,
                severity,
                username,
                release_name.value AS release_name,
                DATEDIFF(CURDATE(), date_submitted) AS days_open,
                IFNULL(days_left.value, $defaultdaysleft) AS days_left,
                mantis_bug_table.status AS status
            FROM mantis_bug_table
            LEFT JOIN mantis_user_table ON handler_id = mantis_user_table.id
            LEFT JOIN mantis_project_table ON project_id = mantis_project_table.id
            LEFT JOIN mantis_custom_field_string_table AS release_name ON mantis_bug_table.id = release_name.bug_id AND release_name.field_id = 2
            LEFT JOIN mantis_custom_field_string_table AS days_left ON mantis_bug_table.id = days_left.bug_id AND days_left.field_id = 18
            LEFT JOIN mantis_bug_tag_table AS tagids ON mantis_bug_table.id = tagids.bug_id
            LEFT JOIN mantis_tag_table AS tags ON tagids.tag_id = tags.id
            WHERE mantis_bug_table.status < $maxstatus AND tags.name = '$release'";
    } else {
        var query = 
            "SELECT
                mantis_bug_table.id AS id,
                mantis_project_table.name AS project,
                category,
                summary,
                priority,
                severity,
                username,
                release_name.value AS release_name,
                DATEDIFF(CURDATE(), date_submitted) AS days_open,
                IFNULL(days_left.value, $defaultdaysleft) AS days_left,
                mantis_bug_table.status AS status
            FROM mantis_bug_table
            LEFT JOIN mantis_user_table ON handler_id = mantis_user_table.id
            LEFT JOIN mantis_project_table ON project_id = mantis_project_table.id
            LEFT JOIN mantis_custom_field_string_table AS release_name ON mantis_bug_table.id = release_name.bug_id AND release_name.field_id = 2
            LEFT JOIN mantis_custom_field_string_table AS days_left ON mantis_bug_table.id = days_left.bug_id AND days_left.field_id = 18
            WHERE mantis_bug_table.status < $maxstatus AND release_name.value='$release'";
    }
    
    var issues = bugs.recordlist(query % { release: string.sqlescape(release), defaultdaysleft: default_days_left, maxstatus: maxstatus });
    
    var groups = list.groupby(issues, '($status >= 80) ? 80 : 50');
    var active = groups[50];
    var closed = groups[80];
    var days_left = list.sum([ (#open_issue.days_left > 0) ? open_issue.days_left : default_days_left foreach var open_issue in active ]);
    
    // show status table
    <table class="progress" width="600px" border="1">
        <tr>
            <td class="closed" style=("width: $width; background-color: $color" % { color: "rgb(204, 255, 204)", width: web.size(num.min(0.999, #closed / #issues)) }) >
                var info = { count: #closed, total: #issues };
                <a rel="bug" href=(site.uri) title=("$count out of $total issues closed" % info) >
                    "$count out of $total issues closed" % info;
                </a>
            </td>
            <td class="active" style=("width: $width; background-color: $color" % { color: "rgb(255, 255, 255)", width: web.size(num.min(0.999, #active / #issues)) }) >
                var info = { count: #active, total: #issues };
                <a rel="bug" href=(site.uri) title=("$count out of $total issues active" % { count: #active, total: #issues }) >
                    "$count out of $total issues active" % info;
                </a>
            </td>
        </tr>
    </table>
    
    // show status summary
    var sum_bugs_by_dev = [ 
        { 
            dev: dev, 
            sum: sum
        }
        foreach 
            var dev : bugs in list.groupby(issues, '$username'),
            var sum = list.sum([ (#bug.days_left > 0) ? bug.days_left : default_days_left foreach var bug in bugs where bug.status < 80 ]),
            if sum > 0
    ];
    let sum_bugs_by_dev = list.sort(sum_bugs_by_dev, "dev");
    var eta = list.max([ 0 ] .. [ item.sum foreach var item in sum_bugs_by_dev ]);
    <span>
        "Active issues: "; #active; ", ";
        "Closed issues: "; #closed; ", ";
        "Total issues: "; #issues; " ";
        <strong> "("; num.format(#closed / #issues * 100, "#0"); "% completed; "; days_left; " man-days left, ETA: "; eta; " days)"; </strong> 
    </span>
    if(#sum_bugs_by_dev > 0) {
        <br/>
        google.barchart(
            300, (#sum_bugs_by_dev + 1) * 27, 
            [ [ item.sum ] foreach var item in sum_bugs_by_dev ], 
            [ "bugs" ], 
            [ "ff9900" ], 
            false, true, [ 0, eta/2, eta ], 
            list.reverse([ item.dev foreach var item in sum_bugs_by_dev ])
        );
    }
    Tag page
    You must login to post a comment.

    Copyright © 2011 MindTouch, Inc. Powered by