Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Taskodrome/Taskodrome.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public function config()
}

return array(
"status_board_first" => false,
"status_board_order_default" => $status_list,
"status_board_order" => $status_list,
"cooldown_period_days" => 14,
Expand Down
2 changes: 1 addition & 1 deletion Taskodrome/files/scripts/block/block.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ function Block(name, /** @type {ColumnHandler} */columnHandler, /** @type {Page}
};

this.setTop = function(top) {
var width = columnHandler.getColumnWidth();
if (this.toBeDrawn()) {
m_blockGr.setPos(new Position(0, top + V_OFFSET));
var width = columnHandler.getColumnWidth();
this.m_bounds = { top : top, bottom : m_blockGr.m_bounds.bottom, left : this.m_bounds.left, right : this.m_bounds.left + width * columnHandler.getColumnNumber() };
for (var i = 0; i != columnHandler.getColumnNumber(); ++i) {
var pos = new Position(this.m_bounds.left + width * i, m_blockGr.m_bounds.bottom);
Expand Down
12 changes: 11 additions & 1 deletion Taskodrome/files/scripts/column_handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,17 @@ function ColumnHandler(/** @type {Array.<String>} */headers, canvasWidth) {

this.getColumnWidth = function() {
if (m_columnWidth == 0) {
var MIN_WIDTH = Math.floor(canvasWidth / 7);
var MIN_COL;
if (canvasWidth < 1320) {
MIN_COL = 5;
} else if (canvasWidth < 1540) {
MIN_COL = 6;
} else if (canvasWidth < 1760) {
MIN_COL = 7;
} else {
MIN_COL = 8;
}
var MIN_WIDTH = Math.floor(canvasWidth / MIN_COL);
if (this.getColumnNumber() != 0) {
m_columnWidth = Math.max(Math.floor(canvasWidth / this.getColumnNumber()), MIN_WIDTH);
} else {
Expand Down
19 changes: 17 additions & 2 deletions Taskodrome/files/scripts/data_source.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ var DataSource = (function() {
var m_inst = null;

var m_issues_raw = null;
var m_status_board_first = false;
var m_cooldown_period = 0;
var m_allowed_statuses_map = null;
var m_statuses = null;
Expand Down Expand Up @@ -49,6 +50,15 @@ var DataSource = (function() {
return m_issues_raw;
};

function getStatusBoardFirst() {
var statusBoardFirst = document.getElementById("status_board_first").getAttribute("value") == "1";
return statusBoardFirst;
};

var StatusBoardFirst = function() {
return m_status_board_first;
};

function getCooldownPeriod() {
var cooldownPeriodDays = parseInt(document.getElementById("cooldown_period_days").getAttribute("value"), 10);
var cooldownPeriodHours = parseInt(document.getElementById("cooldown_period_hours").getAttribute("value"), 10);
Expand Down Expand Up @@ -175,10 +185,13 @@ var DataSource = (function() {
};

function getVersions() {
var ret = [""];
var ret = [{version:""}];
var versions = document.getElementsByClassName("version");
for (var i = 0; i != versions.length; ++i) {
ret.push(versions[i].getAttribute("value"));
ret.push({
version: versions[i].getAttribute("value"),
timestamp: versions[i].getAttribute("timestamp")
});
}
return ret;
};
Expand Down Expand Up @@ -299,6 +312,7 @@ var DataSource = (function() {

var CreateInst = function() {
m_issues_raw = getIssuesRaw();
m_status_board_first = getStatusBoardFirst();
m_cooldown_period = getCooldownPeriod();
m_allowed_statuses_map = getStatusesAllowanceMap();
m_status_color_map = getStatusColors();
Expand All @@ -314,6 +328,7 @@ var DataSource = (function() {
m_dependencies = getDependencies();
return {
IssuesRaw: IssuesRaw,
StatusBoardFirst: StatusBoardFirst,
CooldownPeriod: CooldownPeriod,
IsTransferAllowed: IsTransferAllowed,
GetColorOfStatus: GetColorOfStatus,
Expand Down
27 changes: 20 additions & 7 deletions Taskodrome/files/scripts/dev_page.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ var DevPage = (function() {
return m_columnHandler.getColumnIndex(card.getOwner());
};

var versions = DataSource.Inst().Versions();
function versionSorter(a, b) {
if(a > b) return 1; else return -1;
};
versions.sort(versionSorter);
var versions = DataSource.Inst().Versions().sort(function (a, b) {
if(a.timestamp > b.timestamp) return 1; else return -1;
}).map(function (e) {
return e.version;
});

m_cardTransferNotifier = new CardTransferNotifier();
m_cardTransferHandler = new CardTransferHandler(m_cardTransferNotifier);
Expand Down Expand Up @@ -57,7 +57,9 @@ var DevPage = (function() {
m_cardTransferHandler, columnHandler, page));
}
};
DataSource.Inst().IssuesRaw().forEach(addIssue);
DataSource.Inst().IssuesRaw().sort(function (a, b) {
if(a.priorityCode < b.priorityCode) return 1; else return -1;
}).forEach(addIssue);
};
versions.forEach(addVersion);
};
Expand Down Expand Up @@ -85,6 +87,7 @@ var DevPage = (function() {
card.setStatus(50);
}

var oldOwner = card.getOwner();
if (src.m_column != dst.m_column) {
card.setOwner(m_columnHandler.getColumnName(dst.m_column));
}
Expand All @@ -94,7 +97,17 @@ var DevPage = (function() {

var data = new IssueData();
data.Init(card.getId(), DataSource.Inst().UserId(card.getOwner()), card.getVersion());
m_updater.send(data);
m_updater.send(data, function() {
var newVersion = card.getVersion();
card.setVersion(oldVersion);
var newStatus = card.getStatus();
card.setStatus(oldStatus);
var newOwner = card.getOwner();
card.setOwner(oldOwner);
DevPage.Inst().UpdateCard(newVersion, newOwner, card);
StatusPage.Inst().UpdateCard(newVersion, newStatus, card);
RelPage.Inst().UpdateCard(card);
});
};
};

Expand Down
24 changes: 17 additions & 7 deletions Taskodrome/files/scripts/issue_updater.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ function IssueData() {
function IssueUpdater() {
var HTTP_REQUEST_TIMEOUT = 4000;

this.send = function(/** @type {IssueData} */issue_data) {
requestViewPage(issue_data);
this.send = function(/** @type {IssueData} */issue_data, rollback_fn) {
requestViewPage(issue_data, rollback_fn);
};

function requestViewPage(/** @type {IssueData} */issue_data) {
function requestViewPage(/** @type {IssueData} */issue_data, rollback_fn) {
var request = new XMLHttpRequest();
var address = getPathToMantisFile(window, "view.php");
address = address + "?id=" + issue_data.m_issue_id;
Expand All @@ -33,7 +33,7 @@ function IssueUpdater() {
function onReadyStateChange() {
if (request.readyState == 4 && request.status == 200) {
console.log("requestViewPage OK");
requesBugUpdatePage(request, issue_data);
requesBugUpdatePage(request, issue_data, rollback_fn);
} else if (request.readyState == 0 || request.status == 404) {
request.onreadystatechange = null;
request.abort();
Expand All @@ -50,7 +50,7 @@ function IssueUpdater() {
request.send(null);
};

function requesBugUpdatePage(requestPrev, /** @type {IssueData} */issue_data) {
function requesBugUpdatePage(requestPrev, /** @type {IssueData} */issue_data, rollback_fn) {
var page_text = requestPrev.responseText;
var security_token = getValueByName(page_text, "bug_update_page_token");

Expand All @@ -63,7 +63,7 @@ function IssueUpdater() {
function onReadyStateChange() {
if (request.readyState == 4 && request.status == 200) {
console.log("requesBugUpdatePage OK");
requestBugUpdate(request, issue_data);
requestBugUpdate(request, issue_data, rollback_fn);
} else if (request.readyState == 0 || request.status == 404) {
request.onreadystatechange = null;
request.abort();
Expand All @@ -82,7 +82,7 @@ function IssueUpdater() {
request.send(parameters);
};

function requestBugUpdate(requestPrev, /** @type {IssueData} */issue_data) {
function requestBugUpdate(requestPrev, /** @type {IssueData} */issue_data, rollback_fn) {
var page_text = requestPrev.responseText;
var security_token = getValueByName(page_text, "bug_update_token");
var last_updated = getValueByName(page_text, "last_updated");
Expand All @@ -95,6 +95,12 @@ function IssueUpdater() {

function onReadyStateChange() {
if (request.readyState == 4 && request.status == 200) {
if (request.responseURL == address) {
console.log("requestBugUpdate failed");
if (rollback_fn) {
rollback_fn();
}
}
console.log("requestBugUpdate OK");
} else if (request.readyState == 0 || request.status == 404) {
request.onreadystatechange = null;
Expand All @@ -116,6 +122,10 @@ function IssueUpdater() {
+ "&last_updated=" + last_updated;
if (issue_data.m_status) {
parameters += "&status=" + issue_data.m_status;
if (issue_data.m_status == 80) {
parameters += "&resolution=" + 20;
parameters += "&fixed_in_version=" + issue_data.m_version;
}
}
request.send(parameters);
};
Expand Down
7 changes: 2 additions & 5 deletions Taskodrome/files/scripts/starter.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
function pageOnLoad() {
openPage();

DataSource.Inst();

openPage();
initVersionVisibility();

DevPage.Inst();
StatusPage.Inst();
RelPage.Inst();
Expand All @@ -18,7 +15,7 @@ function openPage() {
var prevGrid = window.location.href.substr(markIndex + 1, 2);
openBoard(prevGrid);
} else {
openBoard("dg");
openBoard(DataSource.Inst().StatusBoardFirst()?"sg":"dg");
}
};

Expand Down
25 changes: 18 additions & 7 deletions Taskodrome/files/scripts/status_page.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ var StatusPage = (function() {
return m_columnHandler.getColumnIndex(DataSource.Inst().StatusName(card.getStatus()));
};

var versions = DataSource.Inst().Versions();
function versionSorter(a, b) {
if(a > b) return 1; else return -1;
};
versions.sort(versionSorter);
var versions = DataSource.Inst().Versions().sort(function (a, b) {
if(a.timestamp > b.timestamp) return 1; else return -1;
}).map(function (e) {
return e.version;
});

m_cardTransferNotifier = new CardTransferNotifier();
m_cardTransferHandler = new CardTransferHandler(m_cardTransferNotifier);
Expand Down Expand Up @@ -53,7 +53,9 @@ var StatusPage = (function() {
grid.addCard(card);
}
};
DataSource.Inst().IssuesRaw().forEach(addIssue);
DataSource.Inst().IssuesRaw().sort(function (a, b) {
if(a.priorityCode < b.priorityCode) return 1; else return -1;
}).forEach(addIssue);
};
versions.forEach(addVersion);
};
Expand Down Expand Up @@ -98,6 +100,7 @@ var StatusPage = (function() {
card.setVersion(m_versions[dst.m_block]);
}

var oldStatus = card.getStatus();
if (src.m_column != dst.m_column) {
card.setStatus(DataSource.Inst().StatusId(m_columnHandler.getColumnName(dst.m_column)));
}
Expand All @@ -107,7 +110,15 @@ var StatusPage = (function() {

var data = new IssueData();
data.InitWStatus(card.getId(), DataSource.Inst().UserId(card.getOwner()), card.getVersion(), card.getStatus());
m_updater.send(data);
m_updater.send(data, function() {
var newVersion = card.getVersion();
card.setVersion(oldVersion);
var newStatus = card.getStatus();
card.setStatus(oldStatus);
DevPage.Inst().UpdateCard(newVersion, card.getOwner(), card);
StatusPage.Inst().UpdateCard(newVersion, newStatus, card);
RelPage.Inst().UpdateCard(card);
});
};
};

Expand Down
2 changes: 2 additions & 0 deletions Taskodrome/lang/strings_english.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ $s_plugin_Taskodrome_config_title = 'Taskodrome Plugin Configuration';

$s_plugin_Taskodrome_default_value = 'Default value:<br>%s<br>';

$s_plugin_Taskodrome_status_board_first_label = 'Status board view preferred';

$s_plugin_Taskodrome_status_board_order_label = 'Status board order';

$s_plugin_Taskodrome_cooldown_period_label = 'Cooldown period';
Expand Down
6 changes: 6 additions & 0 deletions Taskodrome/pages/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
access_ensure_global_level( config_get( 'manage_plugin_threshold' ) );
require_once( config_get( 'plugin_path' ) . 'Taskodrome/core/config_helper.php' );

$f_status_first = gpc_get_bool( 'status_board_first' );

if( plugin_config_get( 'status_board_first', null, false, null, helper_get_current_project() ) != $f_status_first ) {
plugin_config_set( 'status_board_first', $f_status_first, NO_USER, helper_get_current_project() );
}

$f_status_order = gpc_get_string( 'status_board_order' );

if( plugin_config_get( 'status_board_order', null, false, null, helper_get_current_project() ) != $f_status_order ) {
Expand Down
25 changes: 25 additions & 0 deletions Taskodrome/pages/config_page.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,31 @@
<div class="widget-main no-padding">
<div class="table-responsive">
<table class="table table-bordered table-condensed table-striped">
<tr>
<?php $t_field = 'status_board_first'; ?>
<th class="category width-40">
<span>
<?php echo plugin_lang_get( $t_field . '_label' )?>
</span>
</br>
<span class="small">
<?php printf( plugin_lang_get( 'default_value' ),
string_attribute( "false" ) );
?>
</span>
</th>
<td class="center" width="20%">
<span class="input">
<input name="<?php echo $t_field; ?>" type="checkbox" <?php
$t_config = plugin_config_get( $t_field, null, false, null, helper_get_current_project());
if ($t_config) {
echo 'checked="checked"';
}
?>></input>
</span>
</td>
</tr>

<tr>
<?php $t_field = 'status_board_order'; ?>
<th class="category width-40">
Expand Down
3 changes: 2 additions & 1 deletion Taskodrome/pages/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -185,11 +185,12 @@ function write_bug_rows( $p_rows )
$t_versions_cnt = count( $t_versions );
for( $k=0; $k < $t_versions_cnt; $k++ ) {
$ver_id = $t_versions[$k]['id'];
print '<p class="version" value="'.version_get_field($ver_id, "version").'"></p>';
print '<p class="version" value="'.version_get_field($ver_id, "version").'" timestamp="'.version_get_field($ver_id, "date_order").'"></p>';
}

print '<p class="status_board_order" value="'.$status_order.'"></p>';
print '<p id="autoassign" value="'. config_get( "auto_set_status_to_assigned" ) .'"></p>';
print '<p id="status_board_first" value="'. plugin_config_get("status_board_first", null, false, null, $current_project_id) .'"></p>';
print '<p id="cooldown_period_days" value="'. plugin_config_get("cooldown_period_days", null, false, null, $current_project_id) .'"></p>';
print '<p id="cooldown_period_hours" value="'. plugin_config_get("cooldown_period_hours", null, false, null, $current_project_id) .'"></p>';
print '<p id="lang_description" value="'. lang_get("description") .'"></p>';
Expand Down