[Rt-commit] rt branch, 4.6/canned-reports, updated. rt-4.4.1-163-g8da8ce3
Dustin Collins
strega at bestpractical.com
Tue Jan 3 04:04:49 EST 2017
The branch, 4.6/canned-reports has been updated
via 8da8ce303dd4f425af079c6e7abd5b4c607203a4 (commit)
from 00d21de47feba129ab408135f2a267a79e7ff9e8 (commit)
Summary of changes:
lib/RT/CannedReport/FieldByField.pm | 1 -
share/html/CannedReport/Elements/Menu | 1 +
share/html/CannedReport/Elements/MenuItem | 2 +-
.../MenuItems/{ReportSelect => OptionSelect} | 26 +++++--
.../CannedReport/Elements/MenuItems/ReportSelect | 2 +-
share/html/Helpers/CannedReports | 17 ++++-
share/static/js/canned-reports.js | 82 +++++++++++++++++++---
7 files changed, 112 insertions(+), 19 deletions(-)
copy share/html/CannedReport/Elements/MenuItems/{ReportSelect => OptionSelect} (72%)
- Log -----------------------------------------------------------------
commit 8da8ce303dd4f425af079c6e7abd5b4c607203a4
Author: Dustin Collins <strega at bestpractical.com>
Date: Tue Jan 3 04:04:30 2017 -0500
Add report option menus
diff --git a/lib/RT/CannedReport/FieldByField.pm b/lib/RT/CannedReport/FieldByField.pm
index 0e50731..9fe3ec4 100644
--- a/lib/RT/CannedReport/FieldByField.pm
+++ b/lib/RT/CannedReport/FieldByField.pm
@@ -62,7 +62,6 @@ sub Reports {
sub Options {
my $self = shift;
- my $report = shift;
return [{Option => "field2", Values => [{Name => "By Owner", Key => 'owner'},
{Name => "By Queue", Key => 'queue'}]
},
diff --git a/share/html/CannedReport/Elements/Menu b/share/html/CannedReport/Elements/Menu
index b3a9a37..4f8d7ff 100644
--- a/share/html/CannedReport/Elements/Menu
+++ b/share/html/CannedReport/Elements/Menu
@@ -42,5 +42,6 @@
</div>
<div class="reports-menu">
<& MenuItems/ReportSelect, Name => "Time Worked" &>
+ <span class="reports-menu-options"></span>
</div>
</div>
diff --git a/share/html/CannedReport/Elements/MenuItem b/share/html/CannedReport/Elements/MenuItem
index eff4b89..928c6fc 100644
--- a/share/html/CannedReport/Elements/MenuItem
+++ b/share/html/CannedReport/Elements/MenuItem
@@ -50,7 +50,7 @@ my $content = $m->content;
<span><% $title %></span>
<image src="/static/images/disclosure-down.png" width="24" height="14" />
</div>
- <div id="ReportDropdown" class="reports-menu-item-content">
+ <div id="<% $id %>" class="reports-menu-item-content">
% if ($content) {
<% $content | n %>
% }
diff --git a/share/html/CannedReport/Elements/MenuItems/ReportSelect b/share/html/CannedReport/Elements/MenuItems/OptionSelect
similarity index 72%
copy from share/html/CannedReport/Elements/MenuItems/ReportSelect
copy to share/html/CannedReport/Elements/MenuItems/OptionSelect
index 3a81242..b4d19fc 100644
--- a/share/html/CannedReport/Elements/MenuItems/ReportSelect
+++ b/share/html/CannedReport/Elements/MenuItems/OptionSelect
@@ -37,20 +37,36 @@
%# END BPS TAGGED BLOCK }}}
<%ARGS>
-$name => undef
+$name
+$option
+$value => undef
</%ARGS>
<%INIT>
use RT::CannedReports;
my $reports = RT::CannedReports->new($session{'CurrentUser'});
+my $report = $reports->ReportFromReportName($name);
-my @names = $reports->AllReportNames();
+my $selectedOption;
+for my $availableOption (@{$report->Options}) {
+ if (!$option || $availableOption->{Option} eq $option) {
+ $selectedOption = $availableOption;
+ last;
+ }
+}
+my $selectedValue;
+for my $availableValue (@{$selectedOption->{Values}}) {
+ if (!$value || $availableValue->{Key} eq $value) {
+ $selectedValue = $availableValue;
+ last;
+ }
+}
</%INIT>
-<&| ../MenuItem, title => $names[0], id => "name" &>
-% for my $aReportName (@names) {
- <a onclick="setParameter('name', '<% $aReportName %>')"><% $aReportName %></a>
+<&| ../MenuItem, title => $selectedValue->{Name}, id => $option &>
+% for my $optionValue (@{$selectedOption->{Values}}) {
+ <a onclick="setParameter('<% $selectedOption->{Option} %>', '<% $optionValue->{Key} %>')"><% $optionValue->{Name} %></a>
% }
</&>
diff --git a/share/html/CannedReport/Elements/MenuItems/ReportSelect b/share/html/CannedReport/Elements/MenuItems/ReportSelect
index 3a81242..8113b00 100644
--- a/share/html/CannedReport/Elements/MenuItems/ReportSelect
+++ b/share/html/CannedReport/Elements/MenuItems/ReportSelect
@@ -48,7 +48,7 @@ my @names = $reports->AllReportNames();
</%INIT>
-<&| ../MenuItem, title => $names[0], id => "name" &>
+<&| ../MenuItem, title => "", id => "name" &>
% for my $aReportName (@names) {
<a onclick="setParameter('name', '<% $aReportName %>')"><% $aReportName %></a>
% }
diff --git a/share/html/Helpers/CannedReports b/share/html/Helpers/CannedReports
index e25718f..695d408 100644
--- a/share/html/Helpers/CannedReports
+++ b/share/html/Helpers/CannedReports
@@ -48,7 +48,8 @@
<%ARGS>
$cmd => "results"
$name
-$kind => undef
+$key => undef
+$value => undef
</%ARGS>
<%init>
@@ -66,7 +67,7 @@ my $report = $reports->ReportFromReportName($name);
if ($cmd eq "results") {
if (ref $report) {
my $results = $report->Results(\%ARGS);
- if ($kind && $kind eq "table") {
+ if ($key && $key eq "table") {
my $html = "<table>";
for my $hashRef (@$results) {
$html .= "\n";
@@ -80,6 +81,18 @@ if ($cmd eq "results") {
$object{code} = 200;
}
}
+}elsif ($cmd eq "options") {
+ if (ref $report) {
+ my $options = $report->Options;
+ $object{content} = $options;
+ $object{code} = 200;
+ }
+}elsif ($cmd eq "optionsMenuItem") {
+ if (ref $report) {
+ my $options = $report->Options;
+ $object{content} = $m->scomp('/CannedReport/Elements/MenuItems/OptionSelect', name => $name, option => $key, value => $value);
+ $object{code} = 200;
+ }
}
$m->out(encode_json(\%object));
diff --git a/share/static/js/canned-reports.js b/share/static/js/canned-reports.js
index 502939c..2ba94ca 100644
--- a/share/static/js/canned-reports.js
+++ b/share/static/js/canned-reports.js
@@ -3,21 +3,43 @@
function getReportResults(parameters, kind, completion) {
var url = "/Helpers/CannedReports?cmd=results";
if (kind) {
- url += "&kind=" + kind;
+ url += "&key=" + kind;
}
for (var key in parameters) {
url += "&" + key + "=" + parameters[key];
}
submit(url, null, null, function(code, message, content) {
- completion(code == 200, content);
+ completion(code == 200, content);
})
}
-function submit(path, pairs, data, completion) {
-// jQuery.post(path, pairs, function(object) {
-// completion(object["code"], object["message"], object["content"])
-// },'json');
+function getReportOptions(parameters, completion) {
+ var url = "/Helpers/CannedReports?cmd=options";
+ for (var key in parameters) {
+ url += "&" + key + "=" + parameters[key];
+ }
+ submit(url, null, null, function(code, message, content) {
+ completion(code == 200, content);
+ })
+}
+function getReportOptionsMenuItem(option, optionKey, parameters, completion) {
+ var url = "/Helpers/CannedReports?cmd=optionsMenuItem";
+ if (option) {
+ url += "&key=" + option;
+ }
+ if (optionKey) {
+ url += "&value=" + optionKey;
+ }
+ for (var key in parameters) {
+ url += "&" + key + "=" + parameters[key];
+ }
+ submit(url, null, null, function(code, message, content) {
+ completion(code == 200, content);
+ })
+}
+
+function submit(path, pairs, data, completion) {
jQuery.ajax({url: path,
success: function(object) {
completion(object["code"], object["message"], object["content"])
@@ -68,21 +90,63 @@ jQuery(document).ready(function() {
//MARK: Menu
-
+var _options;//set from within replaceOptionsMenuItems()
function updateMenu() {
//Report name menu item
var menu = jQuery("#name.reports-menu-item")
var label = menu.find("div").find("span")
- label.text(_parameters["name"])
+ if (_parameters["name"] !== label.text()) {
+ label.text(_parameters["name"])
+ replaceOptionsMenuItems()
+ }else{
+ var optionElements = jQuery(".reports-menu-options").children()
+ for (e in optionElements) {
+ var element = optionElements[e];
+ for (i in _options) {
+ var option = _options[i]
+ if (option.Option === element.id) {
+ var label = jQuery(element).find("div").find("span")
+ for (v in option.Values) {
+ var value = option.Values[v]
+ if (value.Key === _parameters[option.Option]) {
+ label.text(value.Name)
+ break;
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+}
+
+function replaceOptionsMenuItems() {
+ jQuery(".reports-menu-options").children().slideUp(300, function() { jQuery(this).remove() })
+ getReportOptions(_parameters, function (success, content) {
+ _options = content;
+ for (i in content) {
+ var option = content[i].Option
+ if (option) {
+ getReportOptionsMenuItem(option, _parameters[option], _parameters, function (success, content) {
+ jQuery(".reports-menu-options").append(content)
+ updateMenuActions()
+ })
+ }
+ }
+ })
}
jQuery(document).ready(function() {
+ updateMenuActions()
+})
+
+function updateMenuActions() {
jQuery(".reports-menu-item-btn").on('click', '*', function() {
jQuery('.reports-menu-item-content').hide();
var menu = jQuery(this).parents(".reports-menu-item");
menu.find(".reports-menu-item-content").toggle();
})
-})
+}
window.onclick = function(event) {
//Close open menus
-----------------------------------------------------------------------
More information about the rt-commit
mailing list