mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-24 11:08:45 +02:00
advanced search - merged commit (since sourceforge has lost our commit, this is a manual merge all all losts)
SVN:trunk[5638]
This commit is contained in:
@@ -175,12 +175,6 @@ class DataTable
|
|||||||
$sJSOptions = json_encode($aOptions);
|
$sJSOptions = json_encode($aOptions);
|
||||||
$oPage->add_ready_script("$('#datatable_{$this->iListId}').datatable($sJSOptions);");
|
$oPage->add_ready_script("$('#datatable_{$this->iListId}').datatable($sJSOptions);");
|
||||||
|
|
||||||
if (isset($aExtraParams['update_history']) && true == $aExtraParams['update_history'])
|
|
||||||
{
|
|
||||||
$sFilter = json_encode(array('filter' => $this->oSet->GetFilter()->serialize()));
|
|
||||||
$oPage->add_ready_script("$('body').trigger('update_history.itop', [$sFilter])");
|
|
||||||
}
|
|
||||||
|
|
||||||
return $sHtml;
|
return $sHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -706,6 +706,20 @@ class DisplayBlock
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($aExtraParams['update_history']) && true == $aExtraParams['update_history'])
|
||||||
|
{
|
||||||
|
|
||||||
|
$seventAttachedData = json_encode(array(
|
||||||
|
'filter' => $this->m_oSet->GetFilter()->serialize(),
|
||||||
|
'breadcrumb_id' => "ui-search-".$this->m_oSet->GetClass(),
|
||||||
|
'breadcrumb_label' => MetaModel::GetName($this->m_oSet->GetClass()),
|
||||||
|
'breadcrumb_max_count' => utils::GetConfig()->Get('breadcrumb.max_count'),
|
||||||
|
'breadcrumb_instance_id'=> MetaModel::GetConfig()->GetItopInstanceid(),
|
||||||
|
'breadcrumb_icon' => utils::GetAbsoluteUrlAppRoot().'images/breadcrumb-search.png'
|
||||||
|
));
|
||||||
|
$oPage->add_ready_script("$('body').trigger('update_history.itop', [$seventAttachedData])");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1842,12 +1856,23 @@ class MenuBlock extends DisplayBlock
|
|||||||
{
|
{
|
||||||
$sHtml .= "<div class=\"itop_popup actions_menu\"><ul>\n<li>".Dict::S('UI:Menu:Actions')."\n<ul>\n";
|
$sHtml .= "<div class=\"itop_popup actions_menu\"><ul>\n<li>".Dict::S('UI:Menu:Actions')."\n<ul>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$sHtml .= $oPage->RenderPopupMenuItems($aActions, $aFavoriteActions);
|
$sHtml .= $oPage->RenderPopupMenuItems($aActions, $aFavoriteActions);
|
||||||
|
|
||||||
|
if ($this->m_sStyle == 'details')
|
||||||
|
{
|
||||||
|
$sSearchAction = "window.location=\"{$sRootUrl}pages/UI.php?operation=search_form&class=$sClass{$sContext}\"";
|
||||||
|
$sHtml .= "<div class=\"actions_button icon_actions_button\" title=\"".htmlentities(Dict::Format('UI:SearchFor_Class', MetaModel::GetName($sClass)), ENT_QUOTES, 'UTF-8')."\"><span class=\"search-button fa fa-search\" onclick='$sSearchAction'></span></div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!$oPage->IsPrintableVersion() && ($sRefreshAction!=''))
|
if (!$oPage->IsPrintableVersion() && ($sRefreshAction!=''))
|
||||||
{
|
{
|
||||||
$sHtml .= "<div class=\"actions_button\" title=\"".htmlentities(Dict::S('UI:Button:Refresh'), ENT_QUOTES, 'UTF-8')."\"><span class=\"refresh-button\" onclick=\"$sRefreshAction\"></span></div>";
|
$sHtml .= "<div class=\"actions_button icon_actions_button\" title=\"".htmlentities(Dict::S('UI:Button:Refresh'), ENT_QUOTES, 'UTF-8')."\"><span class=\"refresh-button fa fa-refresh\" onclick=\"$sRefreshAction\"></span></div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static $bPopupScript = false;
|
static $bPopupScript = false;
|
||||||
|
|||||||
@@ -922,6 +922,9 @@ input.dp-applied {
|
|||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
.search_form_handler .sf_criterion_area .search_form_criteria .sfc_title .values {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
.search_form_handler .sf_criterion_area .search_form_criteria .sfc_form_group {
|
.search_form_handler .sf_criterion_area .search_form_criteria .sfc_form_group {
|
||||||
/* Form group (operators) is displayed only when the criteria is toggled to opened state */
|
/* Form group (operators) is displayed only when the criteria is toggled to opened state */
|
||||||
display: none;
|
display: none;
|
||||||
@@ -2426,12 +2429,18 @@ h2.printable-tab-title {
|
|||||||
select.multiselect {
|
select.multiselect {
|
||||||
max-width: 150px;
|
max-width: 150px;
|
||||||
}
|
}
|
||||||
span.refresh-button {
|
span.search-button, span.refresh-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 21px;
|
width: 21px;
|
||||||
height: 18px;
|
height: 18px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background: transparent url(../images/refresh-fff.png?v=v2.5.0) left center no-repeat;
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 3px;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
.actions_button.icon_actions_button {
|
||||||
|
padding: 0 2px 0 2px;
|
||||||
}
|
}
|
||||||
.case-log-history-entry {
|
.case-log-history-entry {
|
||||||
display: block;
|
display: block;
|
||||||
|
|||||||
@@ -1038,6 +1038,11 @@ input.dp-applied {
|
|||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
|
.values {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.sfc_form_group{
|
.sfc_form_group{
|
||||||
/* Form group (operators) is displayed only when the criteria is toggled to opened state */
|
/* Form group (operators) is displayed only when the criteria is toggled to opened state */
|
||||||
@@ -2751,12 +2756,25 @@ h2.printable-tab-title {
|
|||||||
select.multiselect {
|
select.multiselect {
|
||||||
max-width: 150px;
|
max-width: 150px;
|
||||||
}
|
}
|
||||||
span.refresh-button {
|
//span.refresh-button {
|
||||||
|
// display: inline-block;
|
||||||
|
// width: 21px;
|
||||||
|
// height: 18px;
|
||||||
|
// cursor: pointer;
|
||||||
|
// background: transparent url(../images/refresh-fff.png?v=#{$version}) left center no-repeat;
|
||||||
|
//}
|
||||||
|
span.search-button, span.refresh-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 21px;
|
width: 21px;
|
||||||
height: 18px;
|
height: 18px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
background: transparent url(../images/refresh-fff.png?v=#{$version}) left center no-repeat;
|
color: #FFFFFF;
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 3px;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
.actions_button.icon_actions_button {
|
||||||
|
padding: 0 2px 0 2px;
|
||||||
}
|
}
|
||||||
.case-log-history-entry {
|
.case-log-history-entry {
|
||||||
display: block;
|
display: block;
|
||||||
|
|||||||
@@ -537,7 +537,7 @@ $(function()
|
|||||||
sDictEntry = 'UI:Search:Criteria:Title:Default:' + this._toCamelCase(sOperator);
|
sDictEntry = 'UI:Search:Criteria:Title:Default:' + this._toCamelCase(sOperator);
|
||||||
}
|
}
|
||||||
|
|
||||||
sTitle = Dict.Format(sDictEntry, this.options.field.label, sValueAsText);
|
sTitle = Dict.Format(sDictEntry, this.options.field.label, '<span class="values">'+sValueAsText+'</span>');
|
||||||
|
|
||||||
// Last chande fallback
|
// Last chande fallback
|
||||||
if(sTitle === sDictEntry)
|
if(sTitle === sDictEntry)
|
||||||
@@ -551,9 +551,11 @@ $(function()
|
|||||||
_setTitle: function(sTitle)
|
_setTitle: function(sTitle)
|
||||||
{
|
{
|
||||||
sTitle = this._computeTitle(sTitle);
|
sTitle = this._computeTitle(sTitle);
|
||||||
this.element.find('.sfc_title')
|
|
||||||
.html(sTitle)
|
var titleElemnt = this.element.find('.sfc_title');
|
||||||
.attr('title', sTitle);
|
|
||||||
|
titleElemnt.html(sTitle);
|
||||||
|
titleElemnt.attr('title', titleElemnt.text());
|
||||||
},
|
},
|
||||||
|
|
||||||
// Operators helpers
|
// Operators helpers
|
||||||
|
|||||||
@@ -34,8 +34,14 @@ $(function()
|
|||||||
// "onclose_show" : "until", => on x_picker close, should we open another one (on "from" close shall we show "until")
|
// "onclose_show" : "until", => on x_picker close, should we open another one (on "from" close shall we show "until")
|
||||||
// "value_index": 0, => the widget communicate with an array of values, the index 0 is "from" the index 1 is "until"
|
// "value_index": 0, => the widget communicate with an array of values, the index 0 is "from" the index 1 is "until"
|
||||||
|
|
||||||
// Date_time widget specifi settings :
|
// Date_time widget specific settings :
|
||||||
|
// > Beware : a lot of those parameters are unused (the intial dev. tested several different UI before the final choice)
|
||||||
// "x_picker" : 'datetimepicker', => the plugin used either datepicker or datetimepicker
|
// "x_picker" : 'datetimepicker', => the plugin used either datepicker or datetimepicker
|
||||||
|
// "picker_extra_params": { => extram init params for the datepicker, use by the datetime to force the time of the "until" at 23:59:59
|
||||||
|
// "hour": 23,
|
||||||
|
// "minute":59,
|
||||||
|
// "second":59
|
||||||
|
// },
|
||||||
// "default_time_add": false, => either false to disable it or number of second to add (used by the datetimepicker to choose the right time on synched datepicker change, its value change from 0 for "from" to +1d-1s for "until"
|
// "default_time_add": false, => either false to disable it or number of second to add (used by the datetimepicker to choose the right time on synched datepicker change, its value change from 0 for "from" to +1d-1s for "until"
|
||||||
// "show_on_advanced": true, => is the input displaye on "more" or "less" mode advanced is an lais for "more" in the css
|
// "show_on_advanced": true, => is the input displaye on "more" or "less" mode advanced is an lais for "more" in the css
|
||||||
// "synced_with": "from_time", => from and until has both two input (datepicker and datetimepicker). each time one input change, the other one has to change
|
// "synced_with": "from_time", => from and until has both two input (datepicker and datetimepicker). each time one input change, the other one has to change
|
||||||
@@ -301,21 +307,54 @@ $(function()
|
|||||||
if (sTitle === undefined)
|
if (sTitle === undefined)
|
||||||
{
|
{
|
||||||
var aValues = me._getValues();
|
var aValues = me._getValues();
|
||||||
|
// switch (true)
|
||||||
|
// {
|
||||||
|
// case (typeof aValues[0] == 'undefined' && typeof aValues[1] == 'undefined'):
|
||||||
|
// case (typeof aValues[0].label == 'undefined' && typeof aValues[1].label == 'undefined'):
|
||||||
|
// case (aValues[0].label.trim() == '' && aValues[1].label.trim() == ''):
|
||||||
|
// var sDictEntrySuffix = ':All';
|
||||||
|
// break;
|
||||||
|
// case (typeof aValues[0] == 'undefined' ):
|
||||||
|
// case (typeof aValues[0].label == 'undefined' ):
|
||||||
|
// case (aValues[0].label.trim() == '' ):
|
||||||
|
// var sDictEntrySuffix = ':Until';
|
||||||
|
// break;
|
||||||
|
// case (typeof aValues[1] == 'undefined'):
|
||||||
|
// case (typeof aValues[1].label == 'undefined' ):
|
||||||
|
// case (aValues[1].label.trim() == ''):
|
||||||
|
// var sDictEntrySuffix = ':From';
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// var sDictEntrySuffix = '';
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
switch (true)
|
switch (true)
|
||||||
{
|
{
|
||||||
case (typeof aValues[0] == 'undefined' && typeof aValues[1] == 'undefined'):
|
case (typeof aValues[0] == 'undefined' && typeof aValues[1] == 'undefined'):
|
||||||
case (typeof aValues[0].label == 'undefined' && typeof aValues[1].label == 'undefined'):
|
|
||||||
case (aValues[0].label.trim() == '' && aValues[1].label.trim() == ''):
|
|
||||||
var sDictEntrySuffix = ':All';
|
var sDictEntrySuffix = ':All';
|
||||||
break;
|
break;
|
||||||
case (typeof aValues[0] == 'undefined' ):
|
case (typeof aValues[0] == 'undefined' ):
|
||||||
case (typeof aValues[0].label == 'undefined' ):
|
|
||||||
case (aValues[0].label.trim() == '' ):
|
|
||||||
var sDictEntrySuffix = ':Until';
|
var sDictEntrySuffix = ':Until';
|
||||||
break;
|
break;
|
||||||
case (typeof aValues[1] == 'undefined'):
|
case (typeof aValues[1] == 'undefined'):
|
||||||
|
var sDictEntrySuffix = ':From';
|
||||||
|
break;
|
||||||
|
case (typeof aValues[0].label == 'undefined' && typeof aValues[1].label == 'undefined'):
|
||||||
|
var sDictEntrySuffix = ':All';
|
||||||
|
break;
|
||||||
|
case (typeof aValues[0].label == 'undefined' ):
|
||||||
|
var sDictEntrySuffix = ':Until';
|
||||||
|
break;
|
||||||
case (typeof aValues[1].label == 'undefined' ):
|
case (typeof aValues[1].label == 'undefined' ):
|
||||||
case (aValues[1].label.trim() == ''):
|
var sDictEntrySuffix = ':From';
|
||||||
|
break;
|
||||||
|
case ((typeof aValues[0].label == 'string' && aValues[0].label.trim() == '') && (typeof aValues[1].label == 'string' && aValues[1].label.trim() == '')):
|
||||||
|
var sDictEntrySuffix = ':All';
|
||||||
|
break;
|
||||||
|
case (typeof aValues[0].label == 'string' && aValues[0].label.trim() == ''):
|
||||||
|
var sDictEntrySuffix = ':Until';
|
||||||
|
break;
|
||||||
|
case (typeof aValues[1].label == 'string' && aValues[1].label.trim() == ''):
|
||||||
var sDictEntrySuffix = ':From';
|
var sDictEntrySuffix = ':From';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -330,7 +369,7 @@ $(function()
|
|||||||
sDictEntry = 'UI:Search:Criteria:Title:Default:' + this._toCamelCase(me.options.operator) + sDictEntrySuffix;
|
sDictEntry = 'UI:Search:Criteria:Title:Default:' + this._toCamelCase(me.options.operator) + sDictEntrySuffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
sTitle = Dict.Format(sDictEntry, this.options.field.label, this._getValuesAsText());
|
sTitle = Dict.Format(sDictEntry, this.options.field.label, '<span class="values">'+this._getValuesAsText()+'</span>');
|
||||||
return sTitle;
|
return sTitle;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -344,6 +383,8 @@ $(function()
|
|||||||
{
|
{
|
||||||
var me = this;
|
var me = this;
|
||||||
|
|
||||||
|
var keepTime = true;
|
||||||
|
|
||||||
if (aRawValues == undefined)
|
if (aRawValues == undefined)
|
||||||
{
|
{
|
||||||
aRawValues = me._getValues();
|
aRawValues = me._getValues();
|
||||||
@@ -358,8 +399,17 @@ $(function()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// aRawValues[1].label = aRawValues[1].label.replace(/(\s\d{2}:\d{2}:\d{2})/, '');
|
if (
|
||||||
aRawValues[1].label = aRawValues[1].label.replace('23:59:59', '');
|
null == aRawValues[1].label.match('23:59:59')
|
||||||
|
||
|
||||||
|
(typeof aRawValues[0] != 'undefined' && typeof aRawValues[0].label != 'undefined' && aRawValues[0].label != '' && null == aRawValues[0].label.match('00:00:00'))
|
||||||
|
)
|
||||||
|
{
|
||||||
|
keepTime = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aRawValues[1].label = aRawValues[1].label.replace('23:59:59', '');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (typeof aRawValues[0] == 'undefined' || typeof aRawValues[0].label == 'undefined' || aRawValues[0].label == '')
|
if (typeof aRawValues[0] == 'undefined' || typeof aRawValues[0].label == 'undefined' || aRawValues[0].label == '')
|
||||||
{
|
{
|
||||||
@@ -367,8 +417,10 @@ $(function()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// aRawValues[0].label = aRawValues[0].label.replace(/(\s\d{2}:\d{2}:\d{2})/, '');
|
if (keepTime)
|
||||||
aRawValues[0].label = aRawValues[0].label.replace('00:00:00', '');
|
{
|
||||||
|
aRawValues[0].label = aRawValues[0].label.replace('00:00:00', '');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return me._super(aRawValues);
|
return me._super(aRawValues);
|
||||||
|
|||||||
@@ -439,7 +439,11 @@ $(function()
|
|||||||
aFirstValues.push(this.options.values[i].label);
|
aFirstValues.push(this.options.values[i].label);
|
||||||
}
|
}
|
||||||
|
|
||||||
sTitle = Dict.Format('UI:Search:Criteria:Title:Enum:In:Many', this.options.field.label, aFirstValues.join(', '), (iValCount - iValLimit+1));
|
sTitle = Dict.Format(
|
||||||
|
'UI:Search:Criteria:Title:Enum:In:Many',
|
||||||
|
'<span class="values">'+this.options.field.label, aFirstValues.join(', ')+'</span>',
|
||||||
|
'<span class="values">'+(iValCount - iValLimit+1)+'</span>'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._super(sTitle);
|
return this._super(sTitle);
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ $(function()
|
|||||||
sDictEntry = 'UI:Search:Criteria:Title:Default:' + this._toCamelCase(me.options.operator) + sDictEntrySuffix;
|
sDictEntry = 'UI:Search:Criteria:Title:Default:' + this._toCamelCase(me.options.operator) + sDictEntrySuffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
sTitle = Dict.Format(sDictEntry, this.options.field.label, this._getValuesAsText());
|
sTitle = Dict.Format(sDictEntry, this.options.field.label, '<span class="values">'+this._getValuesAsText()+'</span>');
|
||||||
return sTitle;
|
return sTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,12 +28,14 @@ $(function()
|
|||||||
'code': 'ends_with',
|
'code': 'ends_with',
|
||||||
'rank': 30,
|
'rank': 30,
|
||||||
},
|
},
|
||||||
|
'=': {
|
||||||
|
'rank': 40,//pre-existing, reordered
|
||||||
|
},
|
||||||
'REGEXP': {
|
'REGEXP': {
|
||||||
'label': Dict.S('UI:Search:Criteria:Operator:String:RegExp'),
|
'label': Dict.S('UI:Search:Criteria:Operator:String:RegExp'),
|
||||||
'code': 'reg_exp',
|
'code': 'reg_exp',
|
||||||
'rank': 40,
|
'rank': 50,
|
||||||
},
|
},
|
||||||
'=': null, // Remove this one from string widget.
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ $(function()
|
|||||||
me._onCriteriaErrorOccured(oData);
|
me._onCriteriaErrorOccured(oData);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('body').on('update_history.itop', function(event, filter) {
|
$('body').on('update_history.itop', function(event, eventData) {
|
||||||
|
|
||||||
if (! me.element.is(':visible'))
|
if (! me.element.is(':visible'))
|
||||||
{
|
{
|
||||||
@@ -183,14 +183,31 @@ $(function()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
me._trace('history update', filter);
|
me._trace('history update', eventData);
|
||||||
|
|
||||||
var newUrl = GetAbsoluteUrlAppRoot()+'pages/UI.php?operation=search';
|
var newUrl = GetAbsoluteUrlAppRoot()+'pages/UI.php?operation=search';
|
||||||
newUrl = newUrl + '&filter='+filter['filter'];
|
newUrl = newUrl + '&filter='+eventData['filter'];
|
||||||
newUrl = newUrl + '&c[menu]='+me._extractURLParameter(window.location.href, "c[menu]");
|
newUrl = newUrl + '&c[menu]='+me._extractURLParameter(window.location.href, "c[menu]");
|
||||||
|
if ('' != me._extractURLParameter(window.location.href, "debug"))
|
||||||
|
{
|
||||||
|
newUrl = newUrl + '&debug='+me._extractURLParameter(window.location.href, "debug");
|
||||||
|
}
|
||||||
|
|
||||||
history.replaceState(null, null, newUrl);
|
history.replaceState(null, null, newUrl);
|
||||||
$('#itop-breadcrumb').breadcrumb('RefreshLatestEntry', newUrl);
|
|
||||||
|
$('#itop-breadcrumb')
|
||||||
|
.breadcrumb('destroy')
|
||||||
|
.breadcrumb({
|
||||||
|
itop_instance_id: eventData['breadcrumb_instance_id'],
|
||||||
|
max_count: eventData['breadcrumb_max_count'],
|
||||||
|
new_entry: {
|
||||||
|
"id": eventData['breadcrumb_id'],
|
||||||
|
"label": eventData['breadcrumb_label'],
|
||||||
|
"url": newUrl,
|
||||||
|
'icon': eventData['breadcrumb_icon'],
|
||||||
|
'description': ''
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -214,7 +231,7 @@ $(function()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return '';
|
||||||
},
|
},
|
||||||
// - Update search option of the widget
|
// - Update search option of the widget
|
||||||
_updateSearch: function()
|
_updateSearch: function()
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ $(function()
|
|||||||
{
|
{
|
||||||
"itop_root_class": null,
|
"itop_root_class": null,
|
||||||
"preference_code": undefined, // if undefined, it is computed on _create
|
"preference_code": undefined, // if undefined, it is computed on _create
|
||||||
"history_max_length": 10, // if the history is longer, the older entries are removed
|
"history_max_length": 5, // if the history is longer, the older entries are removed
|
||||||
"history_backend_store_timeout": 5000, // wait for this time before storing the new history in the backend
|
"history_backend_store_timeout": 5000, // wait for this time before storing the new history in the backend
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
15
pages/UI.php
15
pages/UI.php
@@ -128,12 +128,15 @@ function ReloadAndDisplay($oPage, $oObj, $sMessageId = '', $sMessage = '', $sSev
|
|||||||
function DisplayDetails($oP, $sClass, $oObj, $id)
|
function DisplayDetails($oP, $sClass, $oObj, $id)
|
||||||
{
|
{
|
||||||
$sClassLabel = MetaModel::GetName($sClass);
|
$sClassLabel = MetaModel::GetName($sClass);
|
||||||
$oSearch = new DBObjectSearch($sClass);
|
|
||||||
$oBlock = new DisplayBlock($oSearch, 'search', false);
|
// 2018-04-11 : removal of the search block
|
||||||
$oBlock->Display($oP, 0, array(
|
// $oSearch = new DBObjectSearch($sClass);
|
||||||
'table_id' => 'search-widget-results-outer',
|
// $oBlock = new DisplayBlock($oSearch, 'search', false);
|
||||||
'open' => false,
|
// $oBlock->Display($oP, 0, array(
|
||||||
));
|
// 'table_id' => 'search-widget-results-outer',
|
||||||
|
// 'open' => false,
|
||||||
|
// 'update_history' => false,
|
||||||
|
// ));
|
||||||
|
|
||||||
// The object could be listed, check if it is actually allowed to view it
|
// The object could be listed, check if it is actually allowed to view it
|
||||||
$oSet = CMDBObjectSet::FromObject($oObj);
|
$oSet = CMDBObjectSet::FromObject($oObj);
|
||||||
|
|||||||
@@ -57,9 +57,10 @@ $sOperation = utils::ReadParam('operation', '');
|
|||||||
|
|
||||||
$oP->SetBreadCrumbEntry('ui-tool-universalsearch', Dict::S('Menu:UniversalSearchMenu'), Dict::S('Menu:UniversalSearchMenu+'), '', utils::GetAbsoluteUrlAppRoot().'images/wrench.png');
|
$oP->SetBreadCrumbEntry('ui-tool-universalsearch', Dict::S('Menu:UniversalSearchMenu'), Dict::S('Menu:UniversalSearchMenu+'), '', utils::GetAbsoluteUrlAppRoot().'images/wrench.png');
|
||||||
|
|
||||||
// First part: select the class to search for
|
|
||||||
$oP->add("<form>");
|
|
||||||
$oP->add(Dict::S('UI:UniversalSearch:LabelSelectTheClass')."<select style=\"width: 150px;\" id=\"select_class\" name=\"baseClass\" onChange=\"this.form.submit();\">");
|
//$sSearchHeaderForceDropdown
|
||||||
|
$sSearchHeaderForceDropdown = '<select id="select_class" name="baseClass" onChange="this.form.submit();">';
|
||||||
$aClassLabels = array();
|
$aClassLabels = array();
|
||||||
foreach(MetaModel::GetClasses('bizmodel') as $sCurrentClass)
|
foreach(MetaModel::GetClasses('bizmodel') as $sCurrentClass)
|
||||||
{
|
{
|
||||||
@@ -70,11 +71,11 @@ foreach($aClassLabels as $sCurrentClass => $sLabel)
|
|||||||
{
|
{
|
||||||
$sDescription = MetaModel::GetClassDescription($sCurrentClass);
|
$sDescription = MetaModel::GetClassDescription($sCurrentClass);
|
||||||
$sSelected = ($sCurrentClass == $sBaseClass) ? " SELECTED" : "";
|
$sSelected = ($sCurrentClass == $sBaseClass) ? " SELECTED" : "";
|
||||||
$oP->add("<option value=\"$sCurrentClass\" title=\"$sDescription\"$sSelected>$sLabel</option>");
|
$sSearchHeaderForceDropdown .= "<option value=\"$sCurrentClass\" title=\"$sDescription\"$sSelected>$sLabel</option>";
|
||||||
}
|
}
|
||||||
$oP->add("</select>\n");
|
$sSearchHeaderForceDropdown .= "</select>\n";
|
||||||
$oP->add($oAppContext->GetForForm());
|
//end of $sSearchHeaderForceDropdown
|
||||||
$oP->add("</form>\n");
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -111,6 +112,7 @@ if ($oFilter != null)
|
|||||||
$aExtraParams['baseClass'] = $sBaseClass;
|
$aExtraParams['baseClass'] = $sBaseClass;
|
||||||
$aExtraParams['action'] = utils::GetAbsoluteUrlAppRoot().'pages/UniversalSearch.php';
|
$aExtraParams['action'] = utils::GetAbsoluteUrlAppRoot().'pages/UniversalSearch.php';
|
||||||
$aExtraParams['table_id'] = '1';
|
$aExtraParams['table_id'] = '1';
|
||||||
|
$aExtraParams['search_header_force_dropdown'] = $sSearchHeaderForceDropdown;
|
||||||
//$aExtraParams['class'] = $sClassName;
|
//$aExtraParams['class'] = $sClassName;
|
||||||
$oBlock->Display($oP, 0, $aExtraParams);
|
$oBlock->Display($oP, 0, $aExtraParams);
|
||||||
|
|
||||||
|
|||||||
@@ -104,9 +104,14 @@ try
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isset($aExtraParams['update_history']))
|
||||||
|
{
|
||||||
|
$aExtraParams['update_history'] = true;
|
||||||
|
}
|
||||||
|
|
||||||
$aExtraParams['display_limit'] = true;
|
$aExtraParams['display_limit'] = true;
|
||||||
$aExtraParams['truncated'] = true;
|
$aExtraParams['truncated'] = true;
|
||||||
$aExtraParams['update_history'] = true;
|
|
||||||
if (isset($sListId))
|
if (isset($sListId))
|
||||||
{
|
{
|
||||||
$oDisplayBlock->Display($oPage, $sListId, $aExtraParams);
|
$oDisplayBlock->Display($oPage, $sListId, $aExtraParams);
|
||||||
|
|||||||
@@ -114,24 +114,31 @@ class SearchForm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$aSubClasses = MetaModel::GetSubclasses($sRootClass);
|
if (isset($aExtraParams['search_header_force_dropdown']))
|
||||||
if (count($aSubClasses) > 0)
|
|
||||||
{
|
{
|
||||||
$aOptions = array();
|
$sClassesCombo = $aExtraParams['search_header_force_dropdown'];
|
||||||
$aOptions[MetaModel::GetName($sRootClass)] = "<option value=\"$sRootClass\">".MetaModel::GetName($sRootClass)."</options>\n";
|
|
||||||
foreach($aSubClasses as $sSubclassName)
|
|
||||||
{
|
|
||||||
$aOptions[MetaModel::GetName($sSubclassName)] = "<option value=\"$sSubclassName\">".MetaModel::GetName($sSubclassName)."</options>\n";
|
|
||||||
}
|
|
||||||
$aOptions[MetaModel::GetName($sClassName)] = "<option selected value=\"$sClassName\">".MetaModel::GetName($sClassName)."</options>\n";
|
|
||||||
ksort($aOptions);
|
|
||||||
$sContext = $oAppContext->GetForLink();
|
|
||||||
$sClassesCombo = "<select name=\"class\" onChange=\"ReloadSearchForm('$sSearchFormId', this.value, '$sRootClass', '$sContext', '{$aExtraParams['result_list_outer_selector']}')\">\n".implode('',
|
|
||||||
$aOptions)."</select>\n";
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$sClassesCombo = MetaModel::GetName($sClassName);
|
$aSubClasses = MetaModel::GetSubclasses($sRootClass);
|
||||||
|
if (count($aSubClasses) > 0)
|
||||||
|
{
|
||||||
|
$aOptions = array();
|
||||||
|
$aOptions[MetaModel::GetName($sRootClass)] = "<option value=\"$sRootClass\">".MetaModel::GetName($sRootClass)."</options>\n";
|
||||||
|
foreach($aSubClasses as $sSubclassName)
|
||||||
|
{
|
||||||
|
$aOptions[MetaModel::GetName($sSubclassName)] = "<option value=\"$sSubclassName\">".MetaModel::GetName($sSubclassName)."</options>\n";
|
||||||
|
}
|
||||||
|
$aOptions[MetaModel::GetName($sClassName)] = "<option selected value=\"$sClassName\">".MetaModel::GetName($sClassName)."</options>\n";
|
||||||
|
ksort($aOptions);
|
||||||
|
$sContext = $oAppContext->GetForLink();
|
||||||
|
$sClassesCombo = "<select name=\"class\" onChange=\"ReloadSearchForm('$sSearchFormId', this.value, '$sRootClass', '$sContext', '{$aExtraParams['result_list_outer_selector']}')\">\n".implode('',
|
||||||
|
$aOptions)."</select>\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sClassesCombo = MetaModel::GetName($sClassName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$bAutoSubmit = true;
|
$bAutoSubmit = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user