You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sc...@apache.org on 2015/06/01 00:30:31 UTC

[1/5] airavata-php-gateway git commit: Cashing the WSDLs

Repository: airavata-php-gateway
Updated Branches:
  refs/heads/master 8611ca7b7 -> ae1ffd07a


Cashing the WSDLs


Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/6998ffdf
Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/6998ffdf
Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/6998ffdf

Branch: refs/heads/master
Commit: 6998ffdf476dc1815ebbdfd9ca7bd4a624c50236
Parents: 8611ca7
Author: Supun Nakandala <sc...@apache.org>
Authored: Thu May 28 23:24:04 2015 +0530
Committer: Supun Nakandala <sc...@apache.org>
Committed: Thu May 28 23:24:04 2015 +0530

----------------------------------------------------------------------
 app/libraries/Wsis/Wsis.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/6998ffdf/app/libraries/Wsis/Wsis.php
----------------------------------------------------------------------
diff --git a/app/libraries/Wsis/Wsis.php b/app/libraries/Wsis/Wsis.php
index d677268..8632f99 100755
--- a/app/libraries/Wsis/Wsis.php
+++ b/app/libraries/Wsis/Wsis.php
@@ -61,7 +61,8 @@ class Wsis {
             'password' => $admin_password,
             'stream_context' => $context,
             'trace' => 1,
-            'features' => SOAP_WAIT_ONE_WAY_CALLS
+            'features' => SOAP_WAIT_ONE_WAY_CALLS,
+            'cache_wsdl' => WSDL_CACHE_BOTH
         );
 
         $this->server = $server;


[2/5] airavata-php-gateway git commit: Throw exceptions when airavata servers are down

Posted by sc...@apache.org.
Throw exceptions when airavata servers are down


Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/227e251e
Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/227e251e
Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/227e251e

Branch: refs/heads/master
Commit: 227e251e947d252960558be702bed5e9bfb52ca0
Parents: 6998ffd
Author: Supun Nakandala <sc...@apache.org>
Authored: Fri May 29 22:02:46 2015 +0530
Committer: Supun Nakandala <sc...@apache.org>
Committed: Fri May 29 22:02:46 2015 +0530

----------------------------------------------------------------------
 app/libraries/Airavata/AiravataServiceProvider.php | 7 ++++---
 app/libraries/Wsis/Wsis.php                        | 3 +--
 public/css/query-builder.default.min.css           | 7 +++++++
 public/js/query-builder.standalone.min.js          | 9 +++++++++
 4 files changed, 21 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/227e251e/app/libraries/Airavata/AiravataServiceProvider.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/AiravataServiceProvider.php b/app/libraries/Airavata/AiravataServiceProvider.php
index 2ff4db1..53a8c39 100755
--- a/app/libraries/Airavata/AiravataServiceProvider.php
+++ b/app/libraries/Airavata/AiravataServiceProvider.php
@@ -1,10 +1,12 @@
 <?php namespace Airavata;
 
+use Illuminate\Routing\UrlGenerator;
 use Illuminate\Support\ServiceProvider;
 use Illuminate\Support\Facades\Config;
 use Airavata\API\AiravataClient;
 use Thrift\Transport\TSocket;
 use Thrift\Protocol\TBinaryProtocol;
+use Illuminate\Routing\Redirector;
 
 class AiravataServiceProvider extends ServiceProvider {
 
@@ -49,14 +51,13 @@ class AiravataServiceProvider extends ServiceProvider {
                 $client = new AiravataClient($protocol);
 
             }catch (\Exception $ex){
-                var_dump($ex);
-                exit;
+                throw new \Exception("Unable to instantiate Airavata Client", 0,  $ex);
             }
 
             if( is_object( $client))
                 return $client;
             else
-                return Redirect::to("airavata/down");
+                throw new \Exception("Unable to instantiate Airavata Client");
         });
 
         //registering alis

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/227e251e/app/libraries/Wsis/Wsis.php
----------------------------------------------------------------------
diff --git a/app/libraries/Wsis/Wsis.php b/app/libraries/Wsis/Wsis.php
index 8632f99..7ce131f 100755
--- a/app/libraries/Wsis/Wsis.php
+++ b/app/libraries/Wsis/Wsis.php
@@ -72,8 +72,7 @@ class Wsis {
             $this->userStoreManager = new UserStoreManager($service_url, $parameters);
             $this->tenantManager = new TenantManager($service_url, $parameters);
         } catch (Exception $ex) {
-            print_r( $ex); exit;
-            throw new Exception("Unable to instantiate client", 0, $ex);
+            throw new Exception("Unable to instantiate WSO2 IS client", 0, $ex);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/227e251e/public/css/query-builder.default.min.css
----------------------------------------------------------------------
diff --git a/public/css/query-builder.default.min.css b/public/css/query-builder.default.min.css
new file mode 100644
index 0000000..de15150
--- /dev/null
+++ b/public/css/query-builder.default.min.css
@@ -0,0 +1,7 @@
+/*!
+ * jQuery QueryBuilder 2.1.0
+ * Copyright 2014-2015 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
+ * Licensed under MIT (http://opensource.org/licenses/MIT)
+ */
+
+.query-builder .rule-container,.query-builder .rule-placeholder,.query-builder .rules-group-container{position:relative;margin:4px 0;border-radius:5px;padding:5px;border:1px solid #EEE;background:rgba(255,255,255,.9)}.query-builder .drag-handle,.query-builder .error-container,.query-builder .rule-container .rule-filter-container,.query-builder .rule-container .rule-operator-container,.query-builder .rule-container .rule-value-container{display:inline-block;margin:0 5px 0 0;vertical-align:middle}.query-builder .rules-group-container{padding:10px 10px 6px;border:1px solid #DCC896;background:rgba(250,240,210,.5)}.query-builder .rules-group-container .rules-group-header{margin-bottom:10px}.query-builder .rules-group-container .rules-group-header input[name$=_cond]{display:none}.query-builder .rules-group-container .rules-list{list-style:none;padding:0 0 0 15px;margin:0}.query-builder .rule-container .rule-value-container{border-left:1px solid #ddd;padding-left:5px}.query-builder .rule-c
 ontainer .rule-value-container label{margin-bottom:0;font-weight:400}.query-builder .rule-container .rule-value-container label.block{display:block}.query-builder .rule-container input[type=number],.query-builder .rule-container input[type=text],.query-builder .rule-container select{padding:1px}.query-builder .error-container{display:none;cursor:help;color:red}.query-builder .has-error{background-color:#FDD;border-color:#F99}.query-builder .has-error .error-container{display:inline-block!important}.query-builder .rules-list>:after,.query-builder .rules-list>:before{content:'';position:absolute;left:-10px;width:10px;height:calc(50% + 4px);border-color:#CCC;border-style:solid}.query-builder .rules-list>:before{top:-4px;border-width:0 0 2px 2px}.query-builder .rules-list>:after{top:50%;border-width:0 0 0 2px}.query-builder .rules-list>:first-child:before{top:-12px;height:calc(50% + 14px)}.query-builder .rules-list>:last-child:before{border-radius:0 0 0 4px}.query-builder .rules-list>:l
 ast-child:after{display:none}.query-builder .error-container+.tooltip .tooltip-inner{color:#F99!important}.query-builder p.filter-description{margin:5px 0 0;background:#D9EDF7;border:1px solid #BCE8F1;color:#31708F;border-radius:5px;padding:2.5px 5px;font-size:.8em}.query-builder .drag-handle{cursor:move;vertical-align:middle;margin-left:5px}.query-builder .dragged{opacity:.5}.query-builder .rule-placeholder{border:1px dashed #BBB;opacity:.7}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/227e251e/public/js/query-builder.standalone.min.js
----------------------------------------------------------------------
diff --git a/public/js/query-builder.standalone.min.js b/public/js/query-builder.standalone.min.js
new file mode 100644
index 0000000..762437f
--- /dev/null
+++ b/public/js/query-builder.standalone.min.js
@@ -0,0 +1,9 @@
+/*!
+ * jQuery QueryBuilder 2.1.0
+ * Copyright 2014-2015 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
+ * Licensed under MIT (http://opensource.org/licenses/MIT)
+ */
+
+!function(a,b){"function"==typeof define&&define.amd?define("jQuery.extendext",["jquery"],b):b(a.jQuery)}(this,function($){"use strict";$.extendext=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1,k="default";for("boolean"==typeof g&&(j=g,g=arguments[h++]||{}),"string"==typeof g&&(k=$([g.toLowerCase(),"default"]).filter(["default","concat","replace","extend"])[0],g=arguments[h++]||{}),"object"==typeof g||$.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!==(a=arguments[h]))if($.isArray(a)&&"default"!==k)switch(f=g&&$.isArray(g)?g:[],k){case"concat":g=f.concat($.extend(j,[],a));break;case"replace":g=$.extend(j,[],a);break;case"extend":a.forEach(function(a,b){if("object"==typeof a){var c=$.isArray(a)?[]:{};f[b]=$.extendext(j,k,f[b]||c,a)}else-1===f.indexOf(a)&&f.push(a)}),g=f}else for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&($.isPlainObject(d)||(e=$.isArray(d)))?(e?(e=!1,f=c&&$.isArray(c)?c:[]):f=c&&$.isPlainObject(c)?c:{},g[b]=$.extendext(j,k,f,d)):void 0
 !==d&&(g[b]=d));return g}}),function(a,b){"function"==typeof define&&define.amd?define("query-builder",["jquery","jQuery.extendext"],b):b(a.jQuery)}(this,function($){"use strict";function a(b){return this instanceof a?(this.root=null,void(this.$=$(this))):a.getModel(b)}function b(a,b){b.forEach(function(b){Object.defineProperty(a.prototype,b,{enumerable:!0,get:function(){return this.__[b]},set:function(a){var c=null!==this.__[b]&&"object"==typeof this.__[b]?$.extend({},this.__[b]):this.__[b];this.__[b]=a,null!==this.model&&this.model.trigger("update",this,b,a,c)}})})}function c(a,b){a&&($.isArray(a)?a.forEach(function(a){$.isPlainObject(a)?$.each(a,function(a,c){return b(a,c),!1}):b(a,a)}):$.each(a,function(a,c){b(a,c)}))}function d(a,b){return b=Array.prototype.slice.call(arguments),a.replace(/{([0-9]+)}/g,function(a,c){return b[parseInt(c)+1]})}function e(){$.error(d.apply(null,arguments))}function f(a,b,c){switch(b){case"integer":return parseInt(a);case"double":return parseFloat(
 a);case"boolean":var d="true"===a.trim().toLowerCase()||"1"===a.trim()||1===a;return c?d?1:0:d;default:return a}}function g(a){return"string"!=typeof a?a:a.replace(/[\0\n\r\b\\\'\"]/g,function(a){switch(a){case"\x00":return"\\0";case"\n":return"\\n";case"\r":return"\\r";case"\b":return"\\b";default:return"\\"+a}}).replace(/\t/g,"\\t").replace(/\x1a/g,"\\Z")}function h(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function i(b,c){var d;return d=c.closest(".rule-container"),d.length?void b.moveAfter(a(d)):(d=c.closest(".rules-group-header"),d.length?(d=c.closest(".rules-group-container"),void b.moveAtBegin(a(d))):(d=c.closest(".rules-group-container"),d.length?void b.moveAtEnd(a(d)):void 0))}var j=function(a,b){this.init(a,b)},k=Array.prototype.slice;$.extend(j.prototype,{change:function(a,b){var c=new $.Event(a+".queryBuilder.filter",{builder:this,value:b});return this.$el.triggerHandler(c,k.call(arguments,2)),c.value},trigger:function(a){var b=new $.Event(a+".que
 ryBuilder",{builder:this});return this.$el.triggerHandler(b,k.call(arguments,1)),b},on:function(a,b){return this.$el.on(a+".queryBuilder",b),this},off:function(a,b){return this.$el.off(a+".queryBuilder",b),this},once:function(a,b){return this.$el.one(a+".queryBuilder",b),this}}),j.plugins={},j.defaults=function(a){return"object"!=typeof a?"string"==typeof a?"object"==typeof j.DEFAULTS[a]?$.extend(!0,{},j.DEFAULTS[a]):j.DEFAULTS[a]:$.extend(!0,{},j.DEFAULTS):void $.extendext(!0,"replace",j.DEFAULTS,a)},j.define=function(a,b,c){j.plugins[a]={fct:b,def:c||{}}},j.extend=function(a){$.extend(j.prototype,a)},j.prototype.initPlugins=function(){if(this.plugins){if($.isArray(this.plugins)){var a={};this.plugins.forEach(function(b){a[b]=null}),this.plugins=a}Object.keys(this.plugins).forEach(function(a){a in j.plugins?(this.plugins[a]=$.extend(!0,{},j.plugins[a].def,this.plugins[a]||{}),j.plugins[a].fct.call(this,this.plugins[a])):e('Unable to find plugin "{0}"',a)},this)}},j.types={string:"s
 tring",integer:"number","double":"number",date:"datetime",time:"datetime",datetime:"datetime","boolean":"boolean"},j.inputs=["text","textarea","radio","checkbox","select"],j.modifiable_options=["display_errors","allow_groups","allow_empty"],j.regional={},j.DEFAULTS={filters:[],plugins:[],display_errors:!0,allow_groups:-1,allow_empty:!1,conditions:["AND","OR"],default_condition:"AND",inputs_separator:" , ",select_placeholder:"------",default_rule_flags:{filter_readonly:!1,operator_readonly:!1,value_readonly:!1,no_delete:!1},template:{group:null,rule:null},lang_code:"en",lang:{},operators:[{type:"equal",nb_inputs:1,multiple:!1,apply_to:["string","number","datetime","boolean"]},{type:"not_equal",nb_inputs:1,multiple:!1,apply_to:["string","number","datetime","boolean"]},{type:"in",nb_inputs:1,multiple:!0,apply_to:["string","number","datetime"]},{type:"not_in",nb_inputs:1,multiple:!0,apply_to:["string","number","datetime"]},{type:"less",nb_inputs:1,multiple:!1,apply_to:["number","datetim
 e"]},{type:"less_or_equal",nb_inputs:1,multiple:!1,apply_to:["number","datetime"]},{type:"greater",nb_inputs:1,multiple:!1,apply_to:["number","datetime"]},{type:"greater_or_equal",nb_inputs:1,multiple:!1,apply_to:["number","datetime"]},{type:"between",nb_inputs:2,multiple:!1,apply_to:["number","datetime"]},{type:"begins_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"not_begins_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"contains",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"not_contains",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"ends_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"not_ends_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"is_empty",nb_inputs:0,multiple:!1,apply_to:["string"]},{type:"is_not_empty",nb_inputs:0,multiple:!1,apply_to:["string"]},{type:"is_null",nb_inputs:0,multiple:!1,apply_to:["string","number","datetime","boolean"]},{type:"is_not_null",nb_inputs:0,multiple:!1,apply_to:["string","number","datet
 ime","boolean"]}],icons:{add_group:"glyphicon glyphicon-plus-sign",add_rule:"glyphicon glyphicon-plus",remove_group:"glyphicon glyphicon-remove",remove_rule:"glyphicon glyphicon-remove",error:"glyphicon glyphicon-warning-sign"}},j.prototype.init=function(b,c){b[0].queryBuilder=this,this.$el=b,this.settings=$.extendext(!0,"replace",{},j.DEFAULTS,c),this.model=new a,this.status={group_id:0,rule_id:0,generated_id:!1,has_optgroup:!1,id:null,updating_value:!1},this.settings.allow_groups===!1?this.settings.allow_groups=0:this.settings.allow_groups===!0&&(this.settings.allow_groups=-1),this.filters=this.settings.filters,this.icons=this.settings.icons,this.operators=this.settings.operators,this.template=this.settings.template,this.plugins=this.settings.plugins,void 0===j.regional.en&&e('"i18n/en.js" not loaded.'),this.lang=$.extendext(!0,"replace",{},j.regional.en,j.regional[this.settings.lang_code],this.settings.lang),null===this.template.group&&(this.template.group=this.getGroupTemplate),
 null===this.template.rule&&(this.template.rule=this.getRuleTemplate),this.$el.attr("id")||(this.$el.attr("id","qb_"+Math.floor(99999*Math.random())),this.status.generated_id=!0),this.status.id=this.$el.attr("id"),this.$el.addClass("query-builder form-inline"),this.checkFilters(),this.bindEvents(),this.initPlugins(),this.trigger("afterInit"),c.rules?(this.setRules(c.rules),delete this.settings.rules):this.setRoot(!0)},j.prototype.checkFilters=function(){var a=[],b=this;if(this.filters&&0!==this.filters.length||e("Missing filters list"),this.filters.forEach(function(c,d){switch(c.id||e("Missing filter {0} id",d),-1!=a.indexOf(c.id)&&e('Filter "{0}" already defined',c.id),a.push(c.id),c.type?j.types[c.type]||e('Invalid type "{0}"',c.type):c.type="string",c.input?"function"!=typeof c.input&&-1==j.inputs.indexOf(c.input)&&e('Invalid input "{0}"',c.input):c.input="text",c.field||(c.field=c.id),c.label||(c.label=c.field),c.optgroup?b.status.has_optgroup=!0:c.optgroup=null,c.input){case"rad
 io":case"checkbox":(!c.values||c.values.length<1)&&e('Missing filter "{0}" values',c.id)}}),this.status.has_optgroup){var c=[],d=[];this.filters.forEach(function(a){var b;a.optgroup?(b=c.lastIndexOf(a.optgroup),-1==b?b=c.length:b++):b=c.length,c.splice(b,0,a.optgroup),d.splice(b,0,a)}),this.filters=d}},j.prototype.bindEvents=function(){var b=this;this.$el.on("change.queryBuilder",".rules-group-header [name$=_cond]",function(){if($(this).is(":checked")){var b=$(this).closest(".rules-group-container");a(b).condition=$(this).val()}}),this.$el.on("change.queryBuilder",".rule-filter-container [name$=_filter]",function(){var c=$(this).closest(".rule-container");a(c).filter=b.getFilterById($(this).val())}),this.$el.on("change.queryBuilder",".rule-operator-container [name$=_operator]",function(){var c=$(this).closest(".rule-container");a(c).operator=b.getOperatorByType($(this).val())}),this.$el.on("click.queryBuilder","[data-add=rule]",function(){var c=$(this).closest(".rules-group-containe
 r");b.addRule(a(c))}),this.$el.on("click.queryBuilder","[data-delete=rule]",function(){var c=$(this).closest(".rule-container");b.deleteRule(a(c))}),0!==this.settings.allow_groups&&(this.$el.on("click.queryBuilder","[data-add=group]",function(){var c=$(this).closest(".rules-group-container");b.addGroup(a(c))}),this.$el.on("click.queryBuilder","[data-delete=group]",function(){var c=$(this).closest(".rules-group-container");b.deleteGroup(a(c))})),this.model.on({drop:function(a,b){b.$el.remove()},add:function(a,b,c){b.$el.detach(),0===c?b.$el.prependTo(b.parent.$el.find(">.rules-group-body>.rules-list")):b.$el.insertAfter(b.parent.rules[c-1].$el)},update:function(a,c,d,e,f){switch(d){case"error":b.displayError(c);break;case"condition":b.updateGroupCondition(c);break;case"filter":b.updateRuleFilter(c);break;case"operator":b.updateRuleOperator(c,f);break;case"flags":b.applyRuleFlags(c);break;case"value":b.updateRuleValue(c)}}})},j.prototype.setRoot=function(a,b){a=void 0===a||a===!0;var 
 c=this.nextGroupId(),d=$(this.template.group.call(this,c,1));return this.$el.append(d),this.model.root=new m(null,d),this.model.root.model=this.model,this.model.root.condition=this.settings.default_condition,void 0!==b&&(this.model.root.data=b),a&&this.addRule(this.model.root),this.model.root},j.prototype.addGroup=function(a,b,c){b=void 0===b||b===!0;var d=a.level+1,e=this.trigger("beforeAddGroup",a,b,d);if(e.isDefaultPrevented())return null;var f=this.nextGroupId(),g=$(this.template.group.call(this,f,d)),h=a.addGroup(g);return void 0!==c&&(h.data=c),this.trigger("afterAddGroup",h),h.condition=this.settings.default_condition,b&&this.addRule(h),h},j.prototype.deleteGroup=function(a){if(a.isRoot())return!1;var b=this.trigger("beforeDeleteGroup",a);if(b.isDefaultPrevented())return!1;var c=!0;return a.each("reverse",function(a){c&=this.deleteRule(a)},function(a){c&=this.deleteGroup(a)},this),c&&(a.drop(),this.trigger("afterDeleteGroup")),c},j.prototype.updateGroupCondition=function(a){a
 .$el.find(">.rules-group-header [name$=_cond]").each(function(){var b=$(this);b.prop("checked",b.val()===a.condition),b.parent().toggleClass("active",b.val()===a.condition)}),this.trigger("afterUpdateGroupCondition",a)},j.prototype.addRule=function(a,b){var c=this.trigger("beforeAddRule",a);if(c.isDefaultPrevented())return null;var d=this.nextRuleId(),e=$(this.template.rule.call(this,d)),f=a.addRule(e);return void 0!==b&&(f.data=b),this.trigger("afterAddRule",f),this.createRuleFilters(f),f},j.prototype.deleteRule=function(a){if(a.flags.no_delete)return!1;var b=this.trigger("beforeDeleteRule",a);return b.isDefaultPrevented()?!1:(a.drop(),this.trigger("afterDeleteRule"),!0)},j.prototype.createRuleFilters=function(a){var b=this.change("getRuleFilters",this.filters,a),c=$(this.getRuleFilterSelect(a,b));a.$el.find(".rule-filter-container").append(c),this.trigger("afterCreateRuleFilters",a)},j.prototype.createRuleOperators=function(a){var b=a.$el.find(".rule-operator-container").empty();i
 f(a.filter){var c=this.getOperators(a.filter),d=$(this.getRuleOperatorSelect(a,c));b.html(d),a.__.operator=c[0],this.trigger("afterCreateRuleOperators",a,c)}},j.prototype.createRuleInput=function(a){var b=a.$el.find(".rule-value-container").empty();if(a.__.value=void 0,a.filter&&a.operator&&0!==a.operator.nb_inputs){for(var c=this,d=$(),e=a.filter,f=0;f<a.operator.nb_inputs;f++){var g=$(this.getRuleInput(a,f));f>0&&b.append(this.settings.inputs_separator),b.append(g),d=d.add(g)}b.show(),d.on("change",function(){c.status.updating_value=!0,a.value=c.getRuleValue(a),c.status.updating_value=!1}),e.plugin&&d[e.plugin](e.plugin_config||{}),this.trigger("afterCreateRuleInput",a),void 0!==e.default_value&&(a.value=e.default_value)}},j.prototype.updateRuleFilter=function(a){this.createRuleOperators(a),this.createRuleInput(a),a.$el.find(".rule-filter-container [name$=_filter]").val(a.filter?a.filter.id:"-1"),this.trigger("afterUpdateRuleFilter",a)},j.prototype.updateRuleOperator=function(a,b)
 {var c=a.$el.find(".rule-value-container");a.operator&&0!==a.operator.nb_inputs?(c.show(),(c.is(":empty")||a.operator.nb_inputs!==b.nb_inputs)&&this.createRuleInput(a)):(c.hide(),a.__.value=void 0),a.operator&&a.$el.find(".rule-operator-container [name$=_operator]").val(a.operator.type),this.trigger("afterUpdateRuleOperator",a)},j.prototype.updateRuleValue=function(a){this.status.updating_value||this.setRuleValue(a,a.value),this.trigger("afterUpdateRuleValue",a)},j.prototype.applyRuleFlags=function(a){var b=a.flags;b.filter_readonly&&a.$el.find("[name$=_filter]").prop("disabled",!0),b.operator_readonly&&a.$el.find("[name$=_operator]").prop("disabled",!0),b.value_readonly&&a.$el.find("[name*=_value_]").prop("disabled",!0),b.no_delete&&a.$el.find("[data-delete=rule]").remove(),this.trigger("afterApplyRuleFlags",a)},j.prototype.clearErrors=function(a){a=a||this.model.root,a&&(a.error=null,a instanceof m&&a.each(function(a){a.error=null},function(a){this.clearErrors(a)},this))},j.protot
 ype.displayError=function(a){if(this.settings.display_errors)if(null===a.error)a.$el.removeClass("has-error");else{var b=$.extend([],a.error,[this.lang.errors[a.error[0]]||a.error[0]]);a.$el.addClass("has-error").find(".error-container").eq(0).attr("title",d.apply(null,b))}},j.prototype.triggerValidationError=function(a,b,c){$.isArray(b)||(b=[b]);var d=this.trigger("validationError",a,b,c);d.isDefaultPrevented()||(a.error=b)},j.prototype.destroy=function(){this.trigger("beforeDestroy"),this.status.generated_id&&this.$el.removeAttr("id"),this.clear(),this.model=null,this.$el.off(".queryBuilder").removeClass("query-builder").removeData("queryBuilder"),delete this.$el[0].queryBuilder},j.prototype.reset=function(){this.status.group_id=1,this.status.rule_id=0,this.model.root.empty(),this.addRule(this.model.root),this.trigger("afterReset")},j.prototype.clear=function(){this.status.group_id=0,this.status.rule_id=0,this.model.root&&(this.model.root.drop(),this.model.root=null),this.trigger(
 "afterClear")},j.prototype.setOptions=function(a){$.makeArray($(Object.keys(a)).filter(j.modifiable_options)).forEach(function(b){this.settings[b]=a[b]},this)},j.prototype.validate=function(){this.clearErrors();var a=this,b=function c(b){var d=0,e=0;return b.each(function(b){if(!b.filter)return a.triggerValidationError(b,"no_filter",null),void e++;if(0!==b.operator.nb_inputs){var c=a.validateValue(b,b.value);if(c!==!0)return a.triggerValidationError(b,c,b.value),void e++}d++},function(a){c(a)?d++:e++}),e>0?!1:0!==d||a.settings.allow_empty&&b.isRoot()?!0:(a.triggerValidationError(b,"empty_group",null),!1)}(this.model.root);return this.change("validate",b)},j.prototype.getRules=function(){if(!this.validate())return{};var a=function b(a){var c={condition:a.condition,rules:[]};return a.data&&(c.data=$.extendext(!0,"replace",{},a.data)),a.each(function(a){var b=null;0!==a.operator.nb_inputs&&(b=a.value);var d={id:a.filter.id,field:a.filter.field,type:a.filter.type,input:a.filter.input,op
 erator:a.operator.type,value:b};(a.filter.data||a.data)&&(d.data=$.extendext(!0,"replace",{},a.filter.data,a.data)),c.rules.push(d)},function(a){c.rules.push(b(a))}),c}(this.model.root);return this.change("getRules",a)},j.prototype.setRules=function(a){a&&a.rules&&(0!==a.rules.length||this.settings.allow_empty)||e("Incorrect data object passed"),this.clear(),this.setRoot(!1,a.data),a=this.change("setRules",a);var b=this;!function c(a,d){null!==d&&(void 0===a.condition?a.condition=b.settings.default_condition:-1==b.settings.conditions.indexOf(a.condition)&&e('Invalid condition "{0}"',a.condition),d.condition=a.condition,a.rules.forEach(function(a){var f;if(a.rules&&a.rules.length>0)-1!=b.settings.allow_groups&&b.settings.allow_groups<d.level?(b.reset(),e("No more than {0} groups are allowed",b.settings.allow_groups)):(f=b.addGroup(d,!1,a.data),c(a,f));else{if(void 0===a.id&&e("Missing rule field id"),void 0===a.operator&&(a.operator="equal"),f=b.addRule(d,a.data),null===f)return;f.fi
 lter=b.getFilterById(a.id),f.operator=b.getOperatorByType(a.operator),f.flags=b.parseRuleFlags(a),0!==f.operator.nb_inputs&&void 0!==a.value&&(f.value=a.value)}}))}(a,this.model.root)},j.prototype.validateValue=function(a,b){var c=a.filter.validation||{},d=!0;return d=c.callback?c.callback.call(this,b,a):this.validateValueInternal(a,b),this.change("validateValue",d,b,a)},j.prototype.validateValueInternal=function(a,b){var c,d=a.filter,f=a.operator,g=d.validation||{},h=!0;b=1===a.operator.nb_inputs?[b]:b;for(var i=0;i<f.nb_inputs;i++){switch(d.input){case"radio":if(void 0===b[i]){h=["radio_empty"];break}break;case"checkbox":if(void 0===b[i]||0===b[i].length){h=["checkbox_empty"];break}if(!f.multiple&&b[i].length>1){h=["operator_not_multiple",this.lang[f.type]||f.type];break}break;case"select":if(d.multiple){if(void 0===b[i]||0===b[i].length){h=["select_empty"];break}if(!f.multiple&&b[i].length>1){h=["operator_not_multiple",this.lang[f.type]||f.type];break}}else if(void 0===b[i]){h=["
 select_empty"];break}break;default:switch(j.types[d.type]){case"string":if(void 0===b[i]||0===b[i].length){h=["string_empty"];break}if(void 0!==g.min&&b[i].length<parseInt(g.min)){h=["string_exceed_min_length",g.min];break}if(void 0!==g.max&&b[i].length>parseInt(g.max)){h=["string_exceed_max_length",g.max];break}if(g.format&&("string"==typeof g.format&&(g.format=new RegExp(g.format)),!g.format.test(b[i]))){h=["string_invalid_format",g.format];break}break;case"number":if(void 0===b[i]||isNaN(b[i])){h=["number_nan"];break}if("integer"==d.type){if(parseInt(b[i])!=b[i]){h=["number_not_integer"];break}}else if(parseFloat(b[i])!=b[i]){h=["number_not_double"];break}if(void 0!==g.min&&b[i]<parseFloat(g.min)){h=["number_exceed_min",g.min];break}if(void 0!==g.max&&b[i]>parseFloat(g.max)){h=["number_exceed_max",g.max];break}if(void 0!==g.step){var k=b[i]/g.step;if(parseInt(k)!=k){h=["number_wrong_step",g.step];break}}break;case"datetime":if(void 0===b[i]||0===b[i].length){h=["datetime_empty"];
 break}if(g.format){"moment"in window||e("MomentJS is required for Date/Time validation");var l=moment(b[i],g.format);if(!l.isValid()){h=["datetime_invalid"];break}if(g.min&&l<moment(g.min,g.format)){h=["datetime_exceed_min",g.min];break}if(g.max&&l>moment(g.max,g.format)){h=["datetime_exceed_max",g.max];break}}break;case"boolean":if(c=b[i].trim().toLowerCase(),"true"!==c&&"false"!==c&&"1"!==c&&"0"!==c&&1!==b[i]&&0!==b[i]){h=["boolean_not_valid"];break}}}if(h!==!0)break}return h},j.prototype.nextGroupId=function(){return this.status.id+"_group_"+this.status.group_id++},j.prototype.nextRuleId=function(){return this.status.id+"_rule_"+this.status.rule_id++},j.prototype.getOperators=function(a){"string"==typeof a&&(a=this.getFilterById(a));for(var b=[],c=0,d=this.operators.length;d>c;c++){if(a.operators){if(-1==a.operators.indexOf(this.operators[c].type))continue}else if(-1==this.operators[c].apply_to.indexOf(j.types[a.type]))continue;b.push(this.operators[c])}return a.operators&&b.sort
 (function(b,c){return a.operators.indexOf(b.type)-a.operators.indexOf(c.type)}),this.change("getOperators",b,a)},j.prototype.getFilterById=function(a){if("-1"==a)return null;for(var b=0,c=this.filters.length;c>b;b++)if(this.filters[b].id==a)return this.filters[b];e('Undefined filter "{0}"',a)},j.prototype.getOperatorByType=function(a){if("-1"==a)return null;for(var b=0,c=this.operators.length;c>b;b++)if(this.operators[b].type==a)return this.operators[b];e('Undefined operator  "{0}"',a)},j.prototype.getRuleValue=function(a){var b=a.filter,c=a.operator,d=[];if(b.valueGetter)d=b.valueGetter.call(this,a);else{for(var e,f=a.$el.find(".rule-value-container"),g=0;g<c.nb_inputs;g++){var h=a.id+"_value_"+g;switch(b.input){case"radio":d.push(f.find("[name="+h+"]:checked").val());break;case"checkbox":e=[],f.find("[name="+h+"]:checked").each(function(){e.push($(this).val())}),d.push(e);break;case"select":b.multiple?(e=[],f.find("[name="+h+"] option:selected").each(function(){e.push($(this).val(
 ))}),d.push(e)):d.push(f.find("[name="+h+"] option:selected").val());break;default:d.push(f.find("[name="+h+"]").val())}}1===c.nb_inputs&&(d=d[0]),b.valueParser&&(d=b.valueParser.call(this,a,d))}return this.change("getRuleValue",d,a)},j.prototype.setRuleValue=function(a,b){var c=a.filter,d=a.operator;if(c.valueSetter)c.valueSetter.call(this,a,b);else{var e=a.$el.find(".rule-value-container");b=1==d.nb_inputs?[b]:b;for(var f=0;f<d.nb_inputs;f++){var g=a.id+"_value_"+f;switch(c.input){case"radio":e.find("[name="+g+'][value="'+b[f]+'"]').prop("checked",!0).trigger("change");break;case"checkbox":$.isArray(b[f])||(b[f]=[b[f]]),b[f].forEach(function(a){e.find("[name="+g+'][value="'+a+'"]').prop("checked",!0).trigger("change")});break;default:e.find("[name="+g+"]").val(b[f]).trigger("change")}}}},j.prototype.parseRuleFlags=function(a){var b=$.extend({},this.settings.default_rule_flags);return a.readonly&&$.extend(b,{filter_readonly:!0,operator_readonly:!0,value_readonly:!0,no_delete:!0}),a
 .flags&&$.extend(b,a.flags),this.change("parseRuleFlags",b,a)},j.prototype.getGroupTemplate=function(a,b){var c='<dl id="'+a+'" class="rules-group-container">   <dt class="rules-group-header">     <div class="btn-group pull-right group-actions">       <button type="button" class="btn btn-xs btn-success" data-add="rule">         <i class="'+this.icons.add_rule+'"></i> '+this.lang.add_rule+"       </button>       "+(-1===this.settings.allow_groups||this.settings.allow_groups>=b?'<button type="button" class="btn btn-xs btn-success" data-add="group">           <i class="'+this.icons.add_group+'"></i> '+this.lang.add_group+"         </button>":"")+"       "+(b>1?'<button type="button" class="btn btn-xs btn-danger" data-delete="group">           <i class="'+this.icons.remove_group+'"></i> '+this.lang.delete_group+"         </button>":"")+'     </div>     <div class="btn-group group-conditions">       '+this.getGroupConditions(a,b)+"     </div>     "+(this.settings.display_errors?'<div cla
 ss="error-container"><i class="'+this.icons.error+'"></i></div>':"")+"  </dt>   <dd class=rules-group-body>     <ul class=rules-list></ul>   </dd> </dl>";return this.change("getGroupTemplate",c,b)},j.prototype.getGroupConditions=function(a,b){for(var c="",d=0,e=this.settings.conditions.length;e>d;d++){var f=this.settings.conditions[d],g=this.lang.conditions[f]||f;c+='        <label class="btn btn-xs btn-primary">           <input type="radio" name="'+a+'_cond" value="'+f+'"> '+g+"         </label>"}return this.change("getGroupConditions",c,b)},j.prototype.getRuleTemplate=function(a){var b='<li id="'+a+'" class="rule-container">   <div class="rule-header">   <div class="btn-group pull-right rule-actions">     <button type="button" class="btn btn-xs btn-danger" data-delete="rule">       <i class="'+this.icons.remove_rule+'"></i> '+this.lang.delete_rule+"     </button>   </div>   </div>   "+(this.settings.display_errors?'<div class="error-container"><i class="'+this.icons.error+'"></i>
 </div>':"")+'  <div class="rule-filter-container"></div>   <div class="rule-operator-container"></div>   <div class="rule-value-container"></div> </li>';return this.change("getRuleTemplate",b)},j.prototype.getRuleFilterSelect=function(a,b){var c=null,d='<select class="form-control" name="'+a.id+'_filter">';return d+='<option value="-1">'+this.settings.select_placeholder+"</option>",b.forEach(function(a){c!=a.optgroup&&(null!==c&&(d+="</optgroup>"),c=a.optgroup,null!==c&&(d+='<optgroup label="'+c+'">')),d+='<option value="'+a.id+'">'+a.label+"</option>"}),null!==c&&(d+="</optgroup>"),d+="</select>",this.change("getRuleFilterSelect",d,a)},j.prototype.getRuleOperatorSelect=function(a,b){for(var c='<select class="form-control" name="'+a.id+'_operator">',d=0,e=b.length;e>d;d++){var f=this.lang.operators[b[d].type]||b[d].type;c+='<option value="'+b[d].type+'">'+f+"</option>"}return c+="</select>",this.change("getRuleOperatorSelect",c,a)},j.prototype.getRuleInput=function(a,b){var d=a.filt
 er,e=a.filter.validation||{},f=a.id+"_value_"+b,g=d.vertical?" class=block":"",h="";if("function"==typeof d.input)h=d.input.call(this,a,f);else switch(d.input){case"radio":c(d.values,function(a,b){h+="<label"+g+'><input type="radio" name="'+f+'" value="'+a+'"> '+b+"</label> "});break;case"checkbox":c(d.values,function(a,b){h+="<label"+g+'><input type="checkbox" name="'+f+'" value="'+a+'"> '+b+"</label> "});break;case"select":h+='<select class="form-control" name="'+f+'"'+(d.multiple?" multiple":"")+">",c(d.values,function(a,b){h+='<option value="'+a+'"> '+b+"</option> "}),h+="</select>";break;case"textarea":h+='<textarea class="form-control" name="'+f+'"',d.size&&(h+=' cols="'+d.size+'"'),d.rows&&(h+=' rows="'+d.rows+'"'),void 0!==e.min&&(h+=' minlength="'+e.min+'"'),void 0!==e.max&&(h+=' maxlength="'+e.max+'"'),d.placeholder&&(h+=' placeholder="'+d.placeholder+'"'),h+="></textarea>";break;default:switch(j.types[d.type]){case"number":h+='<input class="form-control" type="number" nam
 e="'+f+'"',void 0!==e.step&&(h+=' step="'+e.step+'"'),void 0!==e.min&&(h+=' min="'+e.min+'"'),void 0!==e.max&&(h+=' max="'+e.max+'"'),d.placeholder&&(h+=' placeholder="'+d.placeholder+'"'),d.size&&(h+=' size="'+d.size+'"'),h+=">";break;default:h+='<input class="form-control" type="text" name="'+f+'"',d.placeholder&&(h+=' placeholder="'+d.placeholder+'"'),"string"===d.type&&void 0!==e.min&&(h+=' minlength="'+e.min+'"'),"string"===d.type&&void 0!==e.max&&(h+=' maxlength="'+e.max+'"'),d.size&&(h+=' size="'+d.size+'"'),h+=">"}}return this.change("getRuleInput",h,a,f)},$.extend(a.prototype,{trigger:function(a){return this.$.triggerHandler(a,k.call(arguments,1)),this},on:function(){return this.$.on.apply(this.$,k.call(arguments)),this},off:function(){return this.$.off.apply(this.$,k.call(arguments)),this},once:function(){return this.$.one.apply(this.$,k.call(arguments)),this}}),a.getModel=function(a){return a?a instanceof l?a:$(a).data("queryBuilderModel"):null};var l=function(a,b){return
  this instanceof l?(Object.defineProperty(this,"__",{value:{}}),b.data("queryBuilderModel",this),this.__.level=0,this.__.error=null,this.__.data=void 0,this.$el=b,this.id=b[0].id,this.model=null,void(this.parent=a)):new l};b(l,["level","error","data"]),Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){return this.__.parent},set:function(a){this.__.parent=a,this.level=null===a?1:a.level+1,this.model=null===a?null:a.model}}),l.prototype.isRoot=function(){return 1===this.level},l.prototype.getPos=function(){return this.isRoot()?-1:this.parent.getNodePos(this)},l.prototype.drop=function(){null!==this.model&&this.model.trigger("drop",this),this.isRoot()||(this.parent._dropNode(this),this.parent=null)},l.prototype.moveAfter=function(a){return this.isRoot()?void 0:(this.parent._dropNode(this),a.parent._addNode(this,a.getPos()+1),this)},l.prototype.moveAtBegin=function(a){return this.isRoot()?void 0:(void 0===a&&(a=this.parent),this.parent._dropNode(this),a._addNode(t
 his,0),this)},l.prototype.moveAtEnd=function(a){return this.isRoot()?void 0:(void 0===a&&(a=this.parent),this.parent._dropNode(this),a._addNode(this,a.length()),this)};var m=function(a,b){return this instanceof m?(l.call(this,a,b),this.rules=[],void(this.__.condition=null)):new m(a,b)};m.prototype=Object.create(l.prototype),m.prototype.constructor=m,b(m,["condition"]),m.prototype.empty=function(){this.each("reverse",function(a){a.drop()},function(a){a.drop()})},m.prototype.drop=function(){this.empty(),l.prototype.drop.call(this)},m.prototype.length=function(){return this.rules.length},m.prototype._addNode=function(a,b){return void 0===b&&(b=this.length()),this.rules.splice(b,0,a),a.parent=this,null!==this.model&&this.model.trigger("add",a,b),a},m.prototype.addGroup=function(a,b){return this._addNode(new m(this,a),b)},m.prototype.addRule=function(a,b){return this._addNode(new n(this,a),b)},m.prototype._dropNode=function(a){var b=this.getNodePos(a);return-1!==b&&(a.parent=null,this.ru
 les.splice(b,1)),this},m.prototype.getNodePos=function(a){return this.rules.indexOf(a)},m.prototype.each=function(a,b,c,d){"function"==typeof a&&(d=c,c=b,b=a,a=!1),d=void 0===d?null:d;for(var e=a?this.rules.length-1:0,f=a?0:this.rules.length-1,g=a?-1:1,h=function(){return a?e>=f:f>=e},i=!1;h()&&(this.rules[e]instanceof m?void 0!==c&&(i=c.call(d,this.rules[e])===!1):i=b.call(d,this.rules[e])===!1,!i);e+=g);return!i},m.prototype.contains=function(a,b){return-1!==this.getNodePos(a)?!0:b?!this.each(function(){return!0},function(b){return!b.contains(a,!0)}):!1};var n=function(a,b){return this instanceof n?(l.call(this,a,b),this.__.filter=null,this.__.operator=null,this.__.flags={},void(this.__.value=void 0)):new n(a,b)};n.prototype=Object.create(l.prototype),n.prototype.constructor=n,b(n,["filter","operator","flags","value"]),j.Group=m,j.Rule=n,$.fn.queryBuilder=function(a){this.length>1&&e("Unable to initialize on multiple target");var b=this.data("queryBuilder"),c="object"==typeof a&&a
 ||{};return b||"destroy"!=a?(b||this.data("queryBuilder",new j(this,c)),"string"==typeof a?b[a].apply(b,Array.prototype.slice.call(arguments,1)):this):this},$.fn.queryBuilder.constructor=j,$.fn.queryBuilder.defaults=j.defaults,$.fn.queryBuilder.extend=j.extend,$.fn.queryBuilder.define=j.define,$.fn.queryBuilder.regional=j.regional,j.define("bt-checkbox",function(a){if("glyphicons"==a.font){var b=document.createElement("style");b.innerHTML='.checkbox input[type=checkbox]:checked + label:after {     font-family: "Glyphicons Halflings";     content: "\\e013"; } .checkbox label:after {     padding-left: 4px;     padding-top: 2px;     font-size: 9px; }',document.body.appendChild(b)}this.on("getRuleInput.filter",function(b,d,e){var f=d.filter;if(("radio"===f.input||"checkbox"===f.input)&&!f.plugin){b.value="",f.colors||(f.colors={}),f.color&&(f.colors._def_=f.color);var g,h,i=f.vertical?' style="display:block"':"",j=0;c(f.values,function(c,d){g=f.colors[c]||f.colors._def_||a.color,h=e+"_"
 +j++,b.value+="<div"+i+' class="'+f.input+" "+f.input+"-"+g+'">   <input type="'+f.input+'" name="'+e+'" id="'+h+'" value="'+c+'">   <label for="'+h+'">'+d+"</label> </div>"})}})},{font:"glyphicons",color:"default"}),j.define("bt-selectpicker",function(a){$.fn.selectpicker&&$.fn.selectpicker.Constructor||e('Bootstrap Select is required to use "bt-selectpicker" plugin. Get it here: http://silviomoreto.github.io/bootstrap-select'),this.on("afterCreateRuleFilters",function(b,c){c.$el.find(".rule-filter-container select").removeClass("form-control").selectpicker(a)}),this.on("afterCreateRuleOperators",function(b,c){c.$el.find(".rule-operator-container select").removeClass("form-control").selectpicker(a)}),this.on("afterUpdateRuleFilter",function(a,b){b.$el.find(".rule-filter-container select").selectpicker("render")}),this.on("afterUpdateRuleOperator",function(a,b){b.$el.find(".rule-operator-container select").selectpicker("render")})},{container:"body",style:"btn-inverse btn-xs",width:
 "auto",showIcon:!1}),j.define("bt-tooltip-errors",function(a){$.fn.tooltip&&$.fn.tooltip.Constructor&&$.fn.tooltip.Constructor.prototype.fixTitle||e('Bootstrap Tooltip is required to use "bt-tooltip-errors" plugin. Get it here: http://getbootstrap.com');
+
+    var b=this;this.on("getRuleTemplate.filter",function(a){a.value=a.value.replace('class="error-container"','class="error-container" data-toggle="tooltip"')}),this.on("getGroupTemplate.filter",function(a){a.value=a.value.replace('class="error-container"','class="error-container" data-toggle="tooltip"')}),this.model.on("update",function(c,d,e){"error"==e&&b.settings.display_errors&&d.$el.find(".error-container").eq(0).tooltip(a).tooltip("hide").tooltip("fixTitle")})},{placement:"right"}),j.define("filter-description",function(a){"inline"===a.mode?this.on("afterUpdateRuleFilter",function(b,c){var d=c.$el.find("p.filter-description");c.filter&&c.filter.description?(0===d.length?(d=$('<p class="filter-description"></p>'),d.appendTo(c.$el)):d.show(),d.html('<i class="'+a.icon+'"></i> '+c.filter.description)):d.hide()}):"popover"===a.mode?($.fn.popover&&$.fn.popover.Constructor&&$.fn.popover.Constructor.prototype.fixTitle||e('Bootstrap Popover is required to use "filter-description" plu
 gin. Get it here: http://getbootstrap.com'),this.on("afterUpdateRuleFilter",function(b,c){var d=c.$el.find("button.filter-description");c.filter&&c.filter.description?(0===d.length?(d=$('<button type="button" class="btn btn-xs btn-info filter-description" data-toggle="popover"><i class="'+a.icon+'"></i></button>'),d.prependTo(c.$el.find(".rule-actions")),d.popover({placement:"left",container:"body",html:!0}),d.on("mouseout",function(){d.popover("hide")})):d.show(),d.data("bs.popover").options.content=c.filter.description,d.attr("aria-describedby")&&d.popover("show")):(d.hide(),d.data("bs.popover")&&d.popover("hide"))})):"bootbox"===a.mode&&("bootbox"in window||e('Bootbox is required to use "filter-description" plugin. Get it here: http://bootboxjs.com'),this.on("afterUpdateRuleFilter",function(b,c){var d=c.$el.find("button.filter-description");c.filter&&c.filter.description?(0===d.length&&(d=$('<button type="button" class="btn btn-xs btn-info filter-description" data-toggle="bootbox
 "><i class="'+a.icon+'"></i></button>'),d.prependTo(c.$el.find(".rule-actions")),d.on("click",function(){bootbox.alert(d.data("description"))})),d.data("description",c.filter.description)):d.hide()}))},{icon:"glyphicon glyphicon-info-sign",mode:"popover"}),j.defaults({loopbackOperators:{equal:function(a){return a[0]},not_equal:function(a){return{neq:a[0]}},"in":function(a){return{inq:a}},not_in:function(a){return{nin:a}},less:function(a){return{lt:a[0]}},less_or_equal:function(a){return{lte:a[0]}},greater:function(a){return{gt:a[0]}},greater_or_equal:function(a){return{gte:a[0]}},between:function(a){return{between:a}},begins_with:function(a){return{like:"^"+h(a[0])}},not_begins_with:function(a){return{nlike:"^"+h(a[0])}},contains:function(a){return{like:h(a[0])}},not_contains:function(a){return{nlike:h(a[0])}},ends_with:function(a){return{like:h(a[0])+"$"}},not_ends_with:function(a){return{nlike:h(a[0])+"$"}},is_empty:function(){return""},is_not_empty:function(){return{neq:""}},is_n
 ull:function(){return null},is_not_null:function(){return{neq:null}}}}),j.extend({getLoopback:function(a){a=void 0===a?this.getRules():a;var b=this;return function c(a){if(a.condition||(a.condition=b.settings.default_condition),-1===["AND","OR"].indexOf(a.condition.toUpperCase())&&e('Unable to build Loopback query with condition "{0}"',a.condition),!a.rules)return{};var d=[];a.rules.forEach(function(a){if(a.rules&&a.rules.length>0)d.push(c(a));else{var g=b.settings.loopbackOperators[a.operator],h=b.getOperatorByType(a.operator),i=[];void 0===g&&e('Unknown Loopback operation for operator "{0}"',a.operator),0!==h.nb_inputs&&(a.value instanceof Array||(a.value=[a.value]),a.value.forEach(function(b){i.push(f(b,a.type))}));var j={};j[a.field]=g.call(b,i),d.push(j)}});var g={};return d.length>0&&(g[a.condition.toLowerCase()]=d),g}(a)}}),j.defaults({mongoOperators:{equal:function(a){return a[0]},not_equal:function(a){return{$ne:a[0]}},"in":function(a){return{$in:a}},not_in:function(a){retu
 rn{$nin:a}},less:function(a){return{$lt:a[0]}},less_or_equal:function(a){return{$lte:a[0]}},greater:function(a){return{$gt:a[0]}},greater_or_equal:function(a){return{$gte:a[0]}},between:function(a){return{$gte:a[0],$lte:a[1]}},begins_with:function(a){return{$regex:"^"+h(a[0])}},not_begins_with:function(a){return{$regex:"^(?!"+h(a[0])+")"}},contains:function(a){return{$regex:h(a[0])}},not_contains:function(a){return{$regex:"^((?!"+h(a[0])+").)*$",$options:"s"}},ends_with:function(a){return{$regex:h(a[0])+"$"}},not_ends_with:function(a){return{$regex:"(?<!"+h(a[0])+")$"}},is_empty:function(){return""},is_not_empty:function(){return{$ne:""}},is_null:function(){return null},is_not_null:function(){return{$ne:null}}},mongoRuleOperators:{$ne:function(a){return a=a.$ne,{val:a,op:null===a?"is_not_null":""===a?"is_not_empty":"not_equal"}},eq:function(a){return{val:a,op:null===a?"is_null":""===a?"is_empty":"equal"}},$regex:function(a){return a=a.$regex,"^(?!"==a.slice(0,4)&&")"==a.slice(-1)?{v
 al:a.slice(4,-1),op:"not_begins_with"}:"^((?!"==a.slice(0,5)&&").)*$"==a.slice(-5)?{val:a.slice(5,-5),op:"not_contains"}:"(?<!"==a.slice(0,4)&&")$"==a.slice(-2)?{val:a.slice(4,-2),op:"not_ends_with"}:"$"==a.slice(-1)?{val:a.slice(0,-1),op:"ends_with"}:"^"==a.slice(0,1)?{val:a.slice(1),op:"begins_with"}:{val:a,op:"contains"}},between:function(a){return{val:[a.$gte,a.$lte],op:"between"}},$in:function(a){return{val:a.$in,op:"in"}},$nin:function(a){return{val:a.$nin,op:"not_in"}},$lt:function(a){return{val:a.$lt,op:"less"}},$lte:function(a){return{val:a.$lte,op:"less_or_equal"}},$gt:function(a){return{val:a.$gt,op:"greater"}},$gte:function(a){return{val:a.$gte,op:"greater_or_equal"}}}}),j.extend({getMongo:function(a){a=void 0===a?this.getRules():a;var b=this;return function c(a){if(a.condition||(a.condition=b.settings.default_condition),-1===["AND","OR"].indexOf(a.condition.toUpperCase())&&e('Unable to build MongoDB query with condition "{0}"',a.condition),!a.rules)return{};var d=[];a.r
 ules.forEach(function(a){if(a.rules&&a.rules.length>0)d.push(c(a));else{var g=b.settings.mongoOperators[a.operator],h=b.getOperatorByType(a.operator),i=[];void 0===g&&e('Unknown MongoDB operation for operator "{0}"',a.operator),0!==h.nb_inputs&&(a.value instanceof Array||(a.value=[a.value]),a.value.forEach(function(b){i.push(f(b,a.type,!1))}));var j={};j[a.field]=g.call(b,i),d.push(j)}});var g={};return d.length>0&&(g["$"+a.condition.toLowerCase()]=d),g}(a)},getRulesFromMongo:function(a){if(void 0===a||null===a)return null;var b=this,c=["$and","$or"];return function d(a){var f=Object.keys(a);f.length>1&&e("Invalid MongoDB query format."),-1===c.indexOf(f[0].toLowerCase())&&e('Unable to build Rule from MongoDB query with condition "{0}"',f[0]);var g=f[0].toLowerCase()===c[0]?"AND":"OR",h=a[f[0]],i=[];h.forEach(function(a){var f=Object.keys(a);if(-1!==c.indexOf(f[0].toLowerCase()))i.push(d(a));else{var g=f[0],h=a[g],j=b.determineMongoOperator(h,g);void 0===j&&e("Invalid MongoDB query 
 format.");var k=b.settings.mongoRuleOperators[j];void 0===k&&e('JSON Rule operation unknown for operator "{0}"',j);var l=k.call(b,h);i.push({id:b.change("getMongoDBFieldID",g,h),field:g,operator:l.op,value:l.val})}});var j={};return i.length>0&&(j.condition=g,j.rules=i),j}(a)},determineMongoOperator:function(a){if(null!==a&&"object"==typeof a){var b=Object.keys(a);return 1===b.length?b[0]:void 0!==a.$gte&&void 0!==a.$lte?"between":void 0!==a.$regex?"$regex":void 0}return"eq"},setRulesFromMongo:function(a){this.setRules(this.getRulesFromMongo(a))}}),j.define("sortable",function(b){this.on("afterInit",function(b){$.event.props.push("dataTransfer");var c,d,e=b.builder;e.$el.on("mouseover",".drag-handle",function(){e.$el.find(".rule-container, .rules-group-container").attr("draggable",!0)}),e.$el.on("mouseout",".drag-handle",function(){e.$el.find(".rule-container, .rules-group-container").removeAttr("draggable")}),e.$el.on("dragstart","[draggable]",function(b){b.stopPropagation(),b.data
 Transfer.setData("text","drag"),d=a(b.target),setTimeout(function(){var a=$('<div class="rule-placeholder">&nbsp;</div>');a.css("min-height",d.$el.height()),c=d.parent.addRule(a,d.getPos()),d.$el.hide()},0)}),e.$el.on("dragenter","[draggable]",function(a){a.preventDefault(),a.stopPropagation(),c&&i(c,$(a.target))}),e.$el.on("dragover","[draggable]",function(a){a.preventDefault(),a.stopPropagation()}),e.$el.on("drop",function(a){a.preventDefault(),a.stopPropagation(),i(d,$(a.target))}),e.$el.on("dragend","[draggable]",function(a){a.preventDefault(),a.stopPropagation(),d.$el.show(),c.drop(),d=c=null,e.$el.find(".rule-container, .rules-group-container").removeAttr("draggable")})}),this.on("parseRuleFlags.filter",function(a){void 0===a.value.no_sortable&&(a.value.no_sortable=b.default_no_sortable)}),this.on("afterApplyRuleFlags",function(a,b){b.flags.no_sortable&&b.$el.find(".drag-handle").remove()}),this.on("getGroupTemplate.filter",function(a,c){if(c>1){var d=$(a.value);d.find(".group
 -conditions").after('<div class="drag-handle"><i class="'+b.icon+'"></i></div>'),a.value=d.prop("outerHTML")}}),this.on("getRuleTemplate.filter",function(a){var c=$(a.value);c.find(".rule-header").after('<div class="drag-handle"><i class="'+b.icon+'"></i></div>'),a.value=c.prop("outerHTML")})},{default_no_sortable:!1,icon:"glyphicon glyphicon-sort"}),j.defaults({sqlOperators:{equal:"= ?",not_equal:"!= ?","in":{op:"IN(?)",sep:", "},not_in:{op:"NOT IN(?)",sep:", "},less:"< ?",less_or_equal:"<= ?",greater:"> ?",greater_or_equal:">= ?",between:{op:"BETWEEN ?",sep:" AND "},begins_with:{op:"LIKE(?)",fn:function(a){return a+"%"}},not_begins_with:{op:"NOT LIKE(?)",fn:function(a){return a+"%"}},contains:{op:"LIKE(?)",fn:function(a){return"%"+a+"%"}},not_contains:{op:"NOT LIKE(?)",fn:function(a){return"%"+a+"%"}},ends_with:{op:"LIKE(?)",fn:function(a){return"%"+a}},not_ends_with:{op:"NOT LIKE(?)",fn:function(a){return"%"+a}},is_empty:'== ""',is_not_empty:'!= ""',is_null:"IS NULL",is_not_null:
 "IS NOT NULL"},sqlStatements:{question_mark:function(){var a=[];return{add:function(b,c){return a.push(c),"?"},run:function(){return a}}},numbered:function(){var a=0,b=[];return{add:function(c,d){return b.push(d),a++,"$"+a},run:function(){return b}}},named:function(){var a={},b={};return{add:function(c,d){a[c.field]||(a[c.field]=0),a[c.field]++;var e=c.field+"_"+a[c.field];return b[e]=d,":"+e},run:function(){return b}}}}}),j.extend({getSQL:function(a,b,c){c=void 0===c?this.getRules():c,b=b===!0?"\n":" ",(a===!0||void 0===a)&&(a="question_mark"),"string"==typeof a&&(a=this.settings.sqlStatements[a]());var d=this,h=function i(c){if(c.condition||(c.condition=d.settings.default_condition),-1===["AND","OR"].indexOf(c.condition.toUpperCase())&&e('Unable to build SQL query with condition "{0}"',c.condition),!c.rules)return"";var h=[];return c.rules.forEach(function(c){if(c.rules&&c.rules.length>0)h.push("("+b+i(c)+b+")"+b);else{var j=d.getSqlOperator(c.operator),k=d.getOperatorByType(c.ope
 rator),l="";j===!1&&e('Unknown SQL operation for operator "{0}"',c.operator),0!==k.nb_inputs&&(c.value instanceof Array||(c.value=[c.value]),c.value.forEach(function(b,d){d>0&&(l+=j.sep),"integer"==c.type||"double"==c.type||"boolean"==c.type?b=f(b,c.type,!0):a||(b=g(b)),j.fn&&(b=j.fn(b)),a?l+=a.add(c,b):("string"==typeof b&&(b="'"+b+"'"),l+=b)})),h.push(c.field+" "+j.op.replace(/\?/,l))}}),h.join(" "+c.condition+b)}(c);return a?{sql:h,params:a.run()}:{sql:h}},getSqlOperator:function(a){var b=this.settings.sqlOperators[a];return void 0===b?!1:("string"==typeof b&&(b={op:b}),b.list&&!b.sep&&(b.sep=", "),b)}}),j.define("unique-filter",function(){this.status.used_filters={},this.on("afterUpdateRuleFilter",this.updateDisabledFilters),this.on("afterDeleteRule",this.updateDisabledFilters),this.on("afterCreateRuleFilters",this.applyDisabledFilters)}),j.extend({updateDisabledFilters:function(a){var b=a.builder;b.status.used_filters={},b.model&&(!function c(a){a.each(function(a){a.filter&&a.f
 ilter.unique&&(b.status.used_filters[a.filter.id]||(b.status.used_filters[a.filter.id]=[]),"group"==a.filter.unique&&b.status.used_filters[a.filter.id].push(a.parent))},function(a){c(a)})}(b.model.root),b.applyDisabledFilters(a))},applyDisabledFilters:function(a){var b=a.builder;b.$el.find(".rule-filter-container option").prop("disabled",!1),$.each(b.status.used_filters,function(a,c){0===c.length?b.$el.find('.rule-filter-container option[value="'+a+'"]:not(:selected)').prop("disabled",!0):c.forEach(function(b){b.each(function(b){b.$el.find('.rule-filter-container option[value="'+a+'"]:not(:selected)').prop("disabled",!0)})})}),b.settings.plugins&&b.settings.plugins["bt-selectpicker"]&&b.$el.find(".rule-filter-container select").selectpicker("render")}}),j.regional.en={__locale:"English (en)",__author:'Damien "Mistic" Sorel, http://www.strangeplanet.fr',add_rule:"Add rule",add_group:"Add group",delete_rule:"Delete",delete_group:"Delete",conditions:{AND:"AND",OR:"OR"},operators:{equal
 :"equal",not_equal:"not equal","in":"in",not_in:"not in",less:"less",less_or_equal:"less or equal",greater:"greater",greater_or_equal:"greater or equal",between:"between",begins_with:"begins with",not_begins_with:"doesn't begin with",contains:"contains",not_contains:"doesn't contain",ends_with:"ends with",not_ends_with:"doesn't end with",is_empty:"is empty",is_not_empty:"is not empty",is_null:"is null",is_not_null:"is not null"},errors:{no_filter:"No filter selected",empty_group:"The group is empty",radio_empty:"No value selected",checkbox_empty:"No value selected",select_empty:"No value selected",string_empty:"Empty value",string_exceed_min_length:"Must contain at least {0} characters",string_exceed_max_length:"Must not contain more than {0} characters",string_invalid_format:"Invalid format ({0})",number_nan:"Not a number",number_not_integer:"Not an integer",number_not_double:"Not a real number",number_exceed_min:"Must be greater than {0}",number_exceed_max:"Must be lower than {0}"
 ,number_wrong_step:"Must be a multiple of {0}",datetime_empty:"Empty value",datetime_invalid:"Invalid date format ({0})",datetime_exceed_min:"Must be after {0}",datetime_exceed_max:"Must be before {0}",boolean_not_valid:"Not a boolean",operator_not_multiple:"Operator {0} cannot accept multiple values"}},j.defaults({lang_code:"en"})});
\ No newline at end of file


[4/5] airavata-php-gateway git commit: Fixing Airavata-1703

Posted by sc...@apache.org.
Fixing Airavata-1703


Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/72857e7b
Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/72857e7b
Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/72857e7b

Branch: refs/heads/master
Commit: 72857e7b04c2da2579c44b73063d9860083a01e1
Parents: 227e251
Author: Supun Nakandala <sc...@apache.org>
Authored: Mon Jun 1 02:58:13 2015 +0530
Committer: Supun Nakandala <sc...@apache.org>
Committed: Mon Jun 1 02:58:13 2015 +0530

----------------------------------------------------------------------
 app/config/pga_config.php                       |  11 +-
 app/controllers/ExperimentController.php        |   3 +-
 app/controllers/ProjectController.php           |   2 +-
 app/libraries/Airavata/API/Airavata.php         | 911 ++++++++++++++-----
 .../Model/Workspace/Experiment/Types.php        |  65 +-
 app/libraries/Utilities.php                     |  22 +-
 app/views/experiment/browse.blade.php           |  16 +-
 app/views/experiment/search.blade.php           |  88 +-
 app/views/layout/basic.blade.php                |   2 +-
 public/css/query-builder.default.min.css        |   7 -
 public/js/query-builder.standalone.min.js       |   9 -
 11 files changed, 764 insertions(+), 372 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/config/pga_config.php
----------------------------------------------------------------------
diff --git a/app/config/pga_config.php b/app/config/pga_config.php
index 6447006..d54bd34 100644
--- a/app/config/pga_config.php
+++ b/app/config/pga_config.php
@@ -69,17 +69,22 @@ return array(
         /**
          * Airavata API server location
          */
-        'airavata-server' => 'gw111.iu.xsede.org',
+        'airavata-server' => 'localhost',
 
         /**
          * Airavata API server port
          */
-        'airavata-port' => '9930',
+        'airavata-port' => '8930',
 
         /**
          * Airavata API server thrift communication timeout
          */
-        'airavata-timeout' => '1000000'
+        'airavata-timeout' => '1000000',
+
+        /**
+         * PGA Gateway ID
+         */
+        'gateway-id' => 'default'
     ]
 
 );
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/controllers/ExperimentController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ExperimentController.php b/app/controllers/ExperimentController.php
index 28c1f3a..a2013d1 100755
--- a/app/controllers/ExperimentController.php
+++ b/app/controllers/ExperimentController.php
@@ -6,7 +6,7 @@ class ExperimentController extends BaseController {
      * Limit used in fetching paginated results
      * @var int
      */
-    var $limit = 10;
+    var $limit = 20;
 
 	/**
 	*    Instantiate a new ExperimentController Instance
@@ -271,6 +271,7 @@ class ExperimentController extends BaseController {
 
 		$experimentStates = Utilities::getExpStates();
 		return View::make('experiment/search', array(
+                                                    'input' => Input::all(),
                                                     'pageNo' => $pageNo,
                                                     'limit' => $this->limit,
 													'expStates' => $experimentStates,

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/controllers/ProjectController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ProjectController.php b/app/controllers/ProjectController.php
index f00825e..973227a 100755
--- a/app/controllers/ProjectController.php
+++ b/app/controllers/ProjectController.php
@@ -6,7 +6,7 @@ class ProjectController extends BaseController {
      * Limit used in fetching paginated results
      * @var int
      */
-    var $limit = 10;
+    var $limit = 20;
 
 	/**
 	*    Instantiate a new ProjectController Instance

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/libraries/Airavata/API/Airavata.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/API/Airavata.php b/app/libraries/Airavata/API/Airavata.php
index 3938ddd..4a509b2 100644
--- a/app/libraries/Airavata/API/Airavata.php
+++ b/app/libraries/Airavata/API/Airavata.php
@@ -47,6 +47,7 @@ interface AiravataIf {
   public function searchExperimentsByStatusWithPagination($gatewayId, $userName, $experimentState, $limit, $offset);
   public function searchExperimentsByCreationTime($gatewayId, $userName, $fromTime, $toTime);
   public function searchExperimentsByCreationTimeWithPagination($gatewayId, $userName, $fromTime, $toTime, $limit, $offset);
+  public function searchExperiments($gatewayId, $userName, $filters, $limit, $offset);
   public function getAllExperimentsInProject($projectId);
   public function getAllExperimentsInProjectWithPagination($projectId, $limit, $offset);
   public function getAllUserExperiments($gatewayId, $userName);
@@ -2009,6 +2010,70 @@ class AiravataClient implements \Airavata\API\AiravataIf {
     throw new \Exception("searchExperimentsByCreationTimeWithPagination failed: unknown result");
   }
 
+  public function searchExperiments($gatewayId, $userName, $filters, $limit, $offset)
+  {
+    $this->send_searchExperiments($gatewayId, $userName, $filters, $limit, $offset);
+    return $this->recv_searchExperiments();
+  }
+
+  public function send_searchExperiments($gatewayId, $userName, $filters, $limit, $offset)
+  {
+    $args = new \Airavata\API\Airavata_searchExperiments_args();
+    $args->gatewayId = $gatewayId;
+    $args->userName = $userName;
+    $args->filters = $filters;
+    $args->limit = $limit;
+    $args->offset = $offset;
+    $bin_accel = ($this->output_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_write_binary');
+    if ($bin_accel)
+    {
+      thrift_protocol_write_binary($this->output_, 'searchExperiments', TMessageType::CALL, $args, $this->seqid_, $this->output_->isStrictWrite());
+    }
+    else
+    {
+      $this->output_->writeMessageBegin('searchExperiments', TMessageType::CALL, $this->seqid_);
+      $args->write($this->output_);
+      $this->output_->writeMessageEnd();
+      $this->output_->getTransport()->flush();
+    }
+  }
+
+  public function recv_searchExperiments()
+  {
+    $bin_accel = ($this->input_ instanceof TBinaryProtocolAccelerated) && function_exists('thrift_protocol_read_binary');
+    if ($bin_accel) $result = thrift_protocol_read_binary($this->input_, '\Airavata\API\Airavata_searchExperiments_result', $this->input_->isStrictRead());
+    else
+    {
+      $rseqid = 0;
+      $fname = null;
+      $mtype = 0;
+
+      $this->input_->readMessageBegin($fname, $mtype, $rseqid);
+      if ($mtype == TMessageType::EXCEPTION) {
+        $x = new TApplicationException();
+        $x->read($this->input_);
+        $this->input_->readMessageEnd();
+        throw $x;
+      }
+      $result = new \Airavata\API\Airavata_searchExperiments_result();
+      $result->read($this->input_);
+      $this->input_->readMessageEnd();
+    }
+    if ($result->success !== null) {
+      return $result->success;
+    }
+    if ($result->ire !== null) {
+      throw $result->ire;
+    }
+    if ($result->ace !== null) {
+      throw $result->ace;
+    }
+    if ($result->ase !== null) {
+      throw $result->ase;
+    }
+    throw new \Exception("searchExperiments failed: unknown result");
+  }
+
   public function getAllExperimentsInProject($projectId)
   {
     $this->send_getAllExperimentsInProject($projectId);
@@ -15698,6 +15763,358 @@ class Airavata_searchExperimentsByCreationTimeWithPagination_result {
 
 }
 
+class Airavata_searchExperiments_args {
+  static $_TSPEC;
+
+  public $gatewayId = null;
+  public $userName = null;
+  public $filters = null;
+  public $limit = null;
+  public $offset = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        1 => array(
+          'var' => 'gatewayId',
+          'type' => TType::STRING,
+          ),
+        2 => array(
+          'var' => 'userName',
+          'type' => TType::STRING,
+          ),
+        3 => array(
+          'var' => 'filters',
+          'type' => TType::MAP,
+          'ktype' => TType::I32,
+          'vtype' => TType::STRING,
+          'key' => array(
+            'type' => TType::I32,
+          ),
+          'val' => array(
+            'type' => TType::STRING,
+            ),
+          ),
+        4 => array(
+          'var' => 'limit',
+          'type' => TType::I32,
+          ),
+        5 => array(
+          'var' => 'offset',
+          'type' => TType::I32,
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['gatewayId'])) {
+        $this->gatewayId = $vals['gatewayId'];
+      }
+      if (isset($vals['userName'])) {
+        $this->userName = $vals['userName'];
+      }
+      if (isset($vals['filters'])) {
+        $this->filters = $vals['filters'];
+      }
+      if (isset($vals['limit'])) {
+        $this->limit = $vals['limit'];
+      }
+      if (isset($vals['offset'])) {
+        $this->offset = $vals['offset'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Airavata_searchExperiments_args';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 1:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->gatewayId);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRING) {
+            $xfer += $input->readString($this->userName);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::MAP) {
+            $this->filters = array();
+            $_size128 = 0;
+            $_ktype129 = 0;
+            $_vtype130 = 0;
+            $xfer += $input->readMapBegin($_ktype129, $_vtype130, $_size128);
+            for ($_i132 = 0; $_i132 < $_size128; ++$_i132)
+            {
+              $key133 = 0;
+              $val134 = '';
+              $xfer += $input->readI32($key133);
+              $xfer += $input->readString($val134);
+              $this->filters[$key133] = $val134;
+            }
+            $xfer += $input->readMapEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 4:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->limit);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 5:
+          if ($ftype == TType::I32) {
+            $xfer += $input->readI32($this->offset);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Airavata_searchExperiments_args');
+    if ($this->gatewayId !== null) {
+      $xfer += $output->writeFieldBegin('gatewayId', TType::STRING, 1);
+      $xfer += $output->writeString($this->gatewayId);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->userName !== null) {
+      $xfer += $output->writeFieldBegin('userName', TType::STRING, 2);
+      $xfer += $output->writeString($this->userName);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->filters !== null) {
+      if (!is_array($this->filters)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('filters', TType::MAP, 3);
+      {
+        $output->writeMapBegin(TType::I32, TType::STRING, count($this->filters));
+        {
+          foreach ($this->filters as $kiter135 => $viter136)
+          {
+            $xfer += $output->writeI32($kiter135);
+            $xfer += $output->writeString($viter136);
+          }
+        }
+        $output->writeMapEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->limit !== null) {
+      $xfer += $output->writeFieldBegin('limit', TType::I32, 4);
+      $xfer += $output->writeI32($this->limit);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->offset !== null) {
+      $xfer += $output->writeFieldBegin('offset', TType::I32, 5);
+      $xfer += $output->writeI32($this->offset);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
+class Airavata_searchExperiments_result {
+  static $_TSPEC;
+
+  public $success = null;
+  public $ire = null;
+  public $ace = null;
+  public $ase = null;
+
+  public function __construct($vals=null) {
+    if (!isset(self::$_TSPEC)) {
+      self::$_TSPEC = array(
+        0 => array(
+          'var' => 'success',
+          'type' => TType::LST,
+          'etype' => TType::STRUCT,
+          'elem' => array(
+            'type' => TType::STRUCT,
+            'class' => '\Airavata\Model\Workspace\Experiment\ExperimentSummary',
+            ),
+          ),
+        1 => array(
+          'var' => 'ire',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\InvalidRequestException',
+          ),
+        2 => array(
+          'var' => 'ace',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataClientException',
+          ),
+        3 => array(
+          'var' => 'ase',
+          'type' => TType::STRUCT,
+          'class' => '\Airavata\API\Error\AiravataSystemException',
+          ),
+        );
+    }
+    if (is_array($vals)) {
+      if (isset($vals['success'])) {
+        $this->success = $vals['success'];
+      }
+      if (isset($vals['ire'])) {
+        $this->ire = $vals['ire'];
+      }
+      if (isset($vals['ace'])) {
+        $this->ace = $vals['ace'];
+      }
+      if (isset($vals['ase'])) {
+        $this->ase = $vals['ase'];
+      }
+    }
+  }
+
+  public function getName() {
+    return 'Airavata_searchExperiments_result';
+  }
+
+  public function read($input)
+  {
+    $xfer = 0;
+    $fname = null;
+    $ftype = 0;
+    $fid = 0;
+    $xfer += $input->readStructBegin($fname);
+    while (true)
+    {
+      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
+      if ($ftype == TType::STOP) {
+        break;
+      }
+      switch ($fid)
+      {
+        case 0:
+          if ($ftype == TType::LST) {
+            $this->success = array();
+            $_size137 = 0;
+            $_etype140 = 0;
+            $xfer += $input->readListBegin($_etype140, $_size137);
+            for ($_i141 = 0; $_i141 < $_size137; ++$_i141)
+            {
+              $elem142 = null;
+              $elem142 = new \Airavata\Model\Workspace\Experiment\ExperimentSummary();
+              $xfer += $elem142->read($input);
+              $this->success []= $elem142;
+            }
+            $xfer += $input->readListEnd();
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 1:
+          if ($ftype == TType::STRUCT) {
+            $this->ire = new \Airavata\API\Error\InvalidRequestException();
+            $xfer += $this->ire->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 2:
+          if ($ftype == TType::STRUCT) {
+            $this->ace = new \Airavata\API\Error\AiravataClientException();
+            $xfer += $this->ace->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        case 3:
+          if ($ftype == TType::STRUCT) {
+            $this->ase = new \Airavata\API\Error\AiravataSystemException();
+            $xfer += $this->ase->read($input);
+          } else {
+            $xfer += $input->skip($ftype);
+          }
+          break;
+        default:
+          $xfer += $input->skip($ftype);
+          break;
+      }
+      $xfer += $input->readFieldEnd();
+    }
+    $xfer += $input->readStructEnd();
+    return $xfer;
+  }
+
+  public function write($output) {
+    $xfer = 0;
+    $xfer += $output->writeStructBegin('Airavata_searchExperiments_result');
+    if ($this->success !== null) {
+      if (!is_array($this->success)) {
+        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
+      }
+      $xfer += $output->writeFieldBegin('success', TType::LST, 0);
+      {
+        $output->writeListBegin(TType::STRUCT, count($this->success));
+        {
+          foreach ($this->success as $iter143)
+          {
+            $xfer += $iter143->write($output);
+          }
+        }
+        $output->writeListEnd();
+      }
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ire !== null) {
+      $xfer += $output->writeFieldBegin('ire', TType::STRUCT, 1);
+      $xfer += $this->ire->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ace !== null) {
+      $xfer += $output->writeFieldBegin('ace', TType::STRUCT, 2);
+      $xfer += $this->ace->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    if ($this->ase !== null) {
+      $xfer += $output->writeFieldBegin('ase', TType::STRUCT, 3);
+      $xfer += $this->ase->write($output);
+      $xfer += $output->writeFieldEnd();
+    }
+    $xfer += $output->writeFieldStop();
+    $xfer += $output->writeStructEnd();
+    return $xfer;
+  }
+
+}
+
 class Airavata_getAllExperimentsInProject_args {
   static $_TSPEC;
 
@@ -15854,15 +16271,15 @@ class Airavata_getAllExperimentsInProject_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size128 = 0;
-            $_etype131 = 0;
-            $xfer += $input->readListBegin($_etype131, $_size128);
-            for ($_i132 = 0; $_i132 < $_size128; ++$_i132)
+            $_size144 = 0;
+            $_etype147 = 0;
+            $xfer += $input->readListBegin($_etype147, $_size144);
+            for ($_i148 = 0; $_i148 < $_size144; ++$_i148)
             {
-              $elem133 = null;
-              $elem133 = new \Airavata\Model\Workspace\Experiment\Experiment();
-              $xfer += $elem133->read($input);
-              $this->success []= $elem133;
+              $elem149 = null;
+              $elem149 = new \Airavata\Model\Workspace\Experiment\Experiment();
+              $xfer += $elem149->read($input);
+              $this->success []= $elem149;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -15922,9 +16339,9 @@ class Airavata_getAllExperimentsInProject_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter134)
+          foreach ($this->success as $iter150)
           {
-            $xfer += $iter134->write($output);
+            $xfer += $iter150->write($output);
           }
         }
         $output->writeListEnd();
@@ -16154,15 +16571,15 @@ class Airavata_getAllExperimentsInProjectWithPagination_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size135 = 0;
-            $_etype138 = 0;
-            $xfer += $input->readListBegin($_etype138, $_size135);
-            for ($_i139 = 0; $_i139 < $_size135; ++$_i139)
+            $_size151 = 0;
+            $_etype154 = 0;
+            $xfer += $input->readListBegin($_etype154, $_size151);
+            for ($_i155 = 0; $_i155 < $_size151; ++$_i155)
             {
-              $elem140 = null;
-              $elem140 = new \Airavata\Model\Workspace\Experiment\Experiment();
-              $xfer += $elem140->read($input);
-              $this->success []= $elem140;
+              $elem156 = null;
+              $elem156 = new \Airavata\Model\Workspace\Experiment\Experiment();
+              $xfer += $elem156->read($input);
+              $this->success []= $elem156;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -16222,9 +16639,9 @@ class Airavata_getAllExperimentsInProjectWithPagination_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter141)
+          foreach ($this->success as $iter157)
           {
-            $xfer += $iter141->write($output);
+            $xfer += $iter157->write($output);
           }
         }
         $output->writeListEnd();
@@ -16425,15 +16842,15 @@ class Airavata_getAllUserExperiments_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size142 = 0;
-            $_etype145 = 0;
-            $xfer += $input->readListBegin($_etype145, $_size142);
-            for ($_i146 = 0; $_i146 < $_size142; ++$_i146)
+            $_size158 = 0;
+            $_etype161 = 0;
+            $xfer += $input->readListBegin($_etype161, $_size158);
+            for ($_i162 = 0; $_i162 < $_size158; ++$_i162)
             {
-              $elem147 = null;
-              $elem147 = new \Airavata\Model\Workspace\Experiment\Experiment();
-              $xfer += $elem147->read($input);
-              $this->success []= $elem147;
+              $elem163 = null;
+              $elem163 = new \Airavata\Model\Workspace\Experiment\Experiment();
+              $xfer += $elem163->read($input);
+              $this->success []= $elem163;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -16485,9 +16902,9 @@ class Airavata_getAllUserExperiments_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter148)
+          foreach ($this->success as $iter164)
           {
-            $xfer += $iter148->write($output);
+            $xfer += $iter164->write($output);
           }
         }
         $output->writeListEnd();
@@ -16723,15 +17140,15 @@ class Airavata_getAllUserExperimentsWithPagination_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size149 = 0;
-            $_etype152 = 0;
-            $xfer += $input->readListBegin($_etype152, $_size149);
-            for ($_i153 = 0; $_i153 < $_size149; ++$_i153)
+            $_size165 = 0;
+            $_etype168 = 0;
+            $xfer += $input->readListBegin($_etype168, $_size165);
+            for ($_i169 = 0; $_i169 < $_size165; ++$_i169)
             {
-              $elem154 = null;
-              $elem154 = new \Airavata\Model\Workspace\Experiment\Experiment();
-              $xfer += $elem154->read($input);
-              $this->success []= $elem154;
+              $elem170 = null;
+              $elem170 = new \Airavata\Model\Workspace\Experiment\Experiment();
+              $xfer += $elem170->read($input);
+              $this->success []= $elem170;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -16783,9 +17200,9 @@ class Airavata_getAllUserExperimentsWithPagination_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter155)
+          foreach ($this->success as $iter171)
           {
-            $xfer += $iter155->write($output);
+            $xfer += $iter171->write($output);
           }
         }
         $output->writeListEnd();
@@ -18696,15 +19113,15 @@ class Airavata_getExperimentOutputs_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size156 = 0;
-            $_etype159 = 0;
-            $xfer += $input->readListBegin($_etype159, $_size156);
-            for ($_i160 = 0; $_i160 < $_size156; ++$_i160)
+            $_size172 = 0;
+            $_etype175 = 0;
+            $xfer += $input->readListBegin($_etype175, $_size172);
+            for ($_i176 = 0; $_i176 < $_size172; ++$_i176)
             {
-              $elem161 = null;
-              $elem161 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
-              $xfer += $elem161->read($input);
-              $this->success []= $elem161;
+              $elem177 = null;
+              $elem177 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem177->read($input);
+              $this->success []= $elem177;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -18764,9 +19181,9 @@ class Airavata_getExperimentOutputs_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter162)
+          foreach ($this->success as $iter178)
           {
-            $xfer += $iter162->write($output);
+            $xfer += $iter178->write($output);
           }
         }
         $output->writeListEnd();
@@ -18956,15 +19373,15 @@ class Airavata_getIntermediateOutputs_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size163 = 0;
-            $_etype166 = 0;
-            $xfer += $input->readListBegin($_etype166, $_size163);
-            for ($_i167 = 0; $_i167 < $_size163; ++$_i167)
+            $_size179 = 0;
+            $_etype182 = 0;
+            $xfer += $input->readListBegin($_etype182, $_size179);
+            for ($_i183 = 0; $_i183 < $_size179; ++$_i183)
             {
-              $elem168 = null;
-              $elem168 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
-              $xfer += $elem168->read($input);
-              $this->success []= $elem168;
+              $elem184 = null;
+              $elem184 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem184->read($input);
+              $this->success []= $elem184;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -19024,9 +19441,9 @@ class Airavata_getIntermediateOutputs_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter169)
+          foreach ($this->success as $iter185)
           {
-            $xfer += $iter169->write($output);
+            $xfer += $iter185->write($output);
           }
         }
         $output->writeListEnd();
@@ -19220,18 +19637,18 @@ class Airavata_getJobStatuses_result {
         case 0:
           if ($ftype == TType::MAP) {
             $this->success = array();
-            $_size170 = 0;
-            $_ktype171 = 0;
-            $_vtype172 = 0;
-            $xfer += $input->readMapBegin($_ktype171, $_vtype172, $_size170);
-            for ($_i174 = 0; $_i174 < $_size170; ++$_i174)
+            $_size186 = 0;
+            $_ktype187 = 0;
+            $_vtype188 = 0;
+            $xfer += $input->readMapBegin($_ktype187, $_vtype188, $_size186);
+            for ($_i190 = 0; $_i190 < $_size186; ++$_i190)
             {
-              $key175 = '';
-              $val176 = new \Airavata\Model\Workspace\Experiment\JobStatus();
-              $xfer += $input->readString($key175);
-              $val176 = new \Airavata\Model\Workspace\Experiment\JobStatus();
-              $xfer += $val176->read($input);
-              $this->success[$key175] = $val176;
+              $key191 = '';
+              $val192 = new \Airavata\Model\Workspace\Experiment\JobStatus();
+              $xfer += $input->readString($key191);
+              $val192 = new \Airavata\Model\Workspace\Experiment\JobStatus();
+              $xfer += $val192->read($input);
+              $this->success[$key191] = $val192;
             }
             $xfer += $input->readMapEnd();
           } else {
@@ -19291,10 +19708,10 @@ class Airavata_getJobStatuses_result {
       {
         $output->writeMapBegin(TType::STRING, TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $kiter177 => $viter178)
+          foreach ($this->success as $kiter193 => $viter194)
           {
-            $xfer += $output->writeString($kiter177);
-            $xfer += $viter178->write($output);
+            $xfer += $output->writeString($kiter193);
+            $xfer += $viter194->write($output);
           }
         }
         $output->writeMapEnd();
@@ -19484,15 +19901,15 @@ class Airavata_getJobDetails_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size179 = 0;
-            $_etype182 = 0;
-            $xfer += $input->readListBegin($_etype182, $_size179);
-            for ($_i183 = 0; $_i183 < $_size179; ++$_i183)
+            $_size195 = 0;
+            $_etype198 = 0;
+            $xfer += $input->readListBegin($_etype198, $_size195);
+            for ($_i199 = 0; $_i199 < $_size195; ++$_i199)
             {
-              $elem184 = null;
-              $elem184 = new \Airavata\Model\Workspace\Experiment\JobDetails();
-              $xfer += $elem184->read($input);
-              $this->success []= $elem184;
+              $elem200 = null;
+              $elem200 = new \Airavata\Model\Workspace\Experiment\JobDetails();
+              $xfer += $elem200->read($input);
+              $this->success []= $elem200;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -19552,9 +19969,9 @@ class Airavata_getJobDetails_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter185)
+          foreach ($this->success as $iter201)
           {
-            $xfer += $iter185->write($output);
+            $xfer += $iter201->write($output);
           }
         }
         $output->writeListEnd();
@@ -19744,15 +20161,15 @@ class Airavata_getDataTransferDetails_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size186 = 0;
-            $_etype189 = 0;
-            $xfer += $input->readListBegin($_etype189, $_size186);
-            for ($_i190 = 0; $_i190 < $_size186; ++$_i190)
+            $_size202 = 0;
+            $_etype205 = 0;
+            $xfer += $input->readListBegin($_etype205, $_size202);
+            for ($_i206 = 0; $_i206 < $_size202; ++$_i206)
             {
-              $elem191 = null;
-              $elem191 = new \Airavata\Model\Workspace\Experiment\DataTransferDetails();
-              $xfer += $elem191->read($input);
-              $this->success []= $elem191;
+              $elem207 = null;
+              $elem207 = new \Airavata\Model\Workspace\Experiment\DataTransferDetails();
+              $xfer += $elem207->read($input);
+              $this->success []= $elem207;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -19812,9 +20229,9 @@ class Airavata_getDataTransferDetails_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter192)
+          foreach ($this->success as $iter208)
           {
-            $xfer += $iter192->write($output);
+            $xfer += $iter208->write($output);
           }
         }
         $output->writeListEnd();
@@ -21164,15 +21581,15 @@ class Airavata_getAllAppModules_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size193 = 0;
-            $_etype196 = 0;
-            $xfer += $input->readListBegin($_etype196, $_size193);
-            for ($_i197 = 0; $_i197 < $_size193; ++$_i197)
+            $_size209 = 0;
+            $_etype212 = 0;
+            $xfer += $input->readListBegin($_etype212, $_size209);
+            for ($_i213 = 0; $_i213 < $_size209; ++$_i213)
             {
-              $elem198 = null;
-              $elem198 = new \Airavata\Model\AppCatalog\AppDeployment\ApplicationModule();
-              $xfer += $elem198->read($input);
-              $this->success []= $elem198;
+              $elem214 = null;
+              $elem214 = new \Airavata\Model\AppCatalog\AppDeployment\ApplicationModule();
+              $xfer += $elem214->read($input);
+              $this->success []= $elem214;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -21224,9 +21641,9 @@ class Airavata_getAllAppModules_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter199)
+          foreach ($this->success as $iter215)
           {
-            $xfer += $iter199->write($output);
+            $xfer += $iter215->write($output);
           }
         }
         $output->writeListEnd();
@@ -22507,15 +22924,15 @@ class Airavata_getAllApplicationDeployments_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size200 = 0;
-            $_etype203 = 0;
-            $xfer += $input->readListBegin($_etype203, $_size200);
-            for ($_i204 = 0; $_i204 < $_size200; ++$_i204)
+            $_size216 = 0;
+            $_etype219 = 0;
+            $xfer += $input->readListBegin($_etype219, $_size216);
+            for ($_i220 = 0; $_i220 < $_size216; ++$_i220)
             {
-              $elem205 = null;
-              $elem205 = new \Airavata\Model\AppCatalog\AppDeployment\ApplicationDeploymentDescription();
-              $xfer += $elem205->read($input);
-              $this->success []= $elem205;
+              $elem221 = null;
+              $elem221 = new \Airavata\Model\AppCatalog\AppDeployment\ApplicationDeploymentDescription();
+              $xfer += $elem221->read($input);
+              $this->success []= $elem221;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -22567,9 +22984,9 @@ class Airavata_getAllApplicationDeployments_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter206)
+          foreach ($this->success as $iter222)
           {
-            $xfer += $iter206->write($output);
+            $xfer += $iter222->write($output);
           }
         }
         $output->writeListEnd();
@@ -22744,14 +23161,14 @@ class Airavata_getAppModuleDeployedResources_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size207 = 0;
-            $_etype210 = 0;
-            $xfer += $input->readListBegin($_etype210, $_size207);
-            for ($_i211 = 0; $_i211 < $_size207; ++$_i211)
+            $_size223 = 0;
+            $_etype226 = 0;
+            $xfer += $input->readListBegin($_etype226, $_size223);
+            for ($_i227 = 0; $_i227 < $_size223; ++$_i227)
             {
-              $elem212 = null;
-              $xfer += $input->readString($elem212);
-              $this->success []= $elem212;
+              $elem228 = null;
+              $xfer += $input->readString($elem228);
+              $this->success []= $elem228;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -22803,9 +23220,9 @@ class Airavata_getAppModuleDeployedResources_result {
       {
         $output->writeListBegin(TType::STRING, count($this->success));
         {
-          foreach ($this->success as $iter213)
+          foreach ($this->success as $iter229)
           {
-            $xfer += $output->writeString($iter213);
+            $xfer += $output->writeString($iter229);
           }
         }
         $output->writeListEnd();
@@ -23879,17 +24296,17 @@ class Airavata_getAllApplicationInterfaceNames_result {
         case 0:
           if ($ftype == TType::MAP) {
             $this->success = array();
-            $_size214 = 0;
-            $_ktype215 = 0;
-            $_vtype216 = 0;
-            $xfer += $input->readMapBegin($_ktype215, $_vtype216, $_size214);
-            for ($_i218 = 0; $_i218 < $_size214; ++$_i218)
+            $_size230 = 0;
+            $_ktype231 = 0;
+            $_vtype232 = 0;
+            $xfer += $input->readMapBegin($_ktype231, $_vtype232, $_size230);
+            for ($_i234 = 0; $_i234 < $_size230; ++$_i234)
             {
-              $key219 = '';
-              $val220 = '';
-              $xfer += $input->readString($key219);
-              $xfer += $input->readString($val220);
-              $this->success[$key219] = $val220;
+              $key235 = '';
+              $val236 = '';
+              $xfer += $input->readString($key235);
+              $xfer += $input->readString($val236);
+              $this->success[$key235] = $val236;
             }
             $xfer += $input->readMapEnd();
           } else {
@@ -23941,10 +24358,10 @@ class Airavata_getAllApplicationInterfaceNames_result {
       {
         $output->writeMapBegin(TType::STRING, TType::STRING, count($this->success));
         {
-          foreach ($this->success as $kiter221 => $viter222)
+          foreach ($this->success as $kiter237 => $viter238)
           {
-            $xfer += $output->writeString($kiter221);
-            $xfer += $output->writeString($viter222);
+            $xfer += $output->writeString($kiter237);
+            $xfer += $output->writeString($viter238);
           }
         }
         $output->writeMapEnd();
@@ -24120,15 +24537,15 @@ class Airavata_getAllApplicationInterfaces_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size223 = 0;
-            $_etype226 = 0;
-            $xfer += $input->readListBegin($_etype226, $_size223);
-            for ($_i227 = 0; $_i227 < $_size223; ++$_i227)
+            $_size239 = 0;
+            $_etype242 = 0;
+            $xfer += $input->readListBegin($_etype242, $_size239);
+            for ($_i243 = 0; $_i243 < $_size239; ++$_i243)
             {
-              $elem228 = null;
-              $elem228 = new \Airavata\Model\AppCatalog\AppInterface\ApplicationInterfaceDescription();
-              $xfer += $elem228->read($input);
-              $this->success []= $elem228;
+              $elem244 = null;
+              $elem244 = new \Airavata\Model\AppCatalog\AppInterface\ApplicationInterfaceDescription();
+              $xfer += $elem244->read($input);
+              $this->success []= $elem244;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -24180,9 +24597,9 @@ class Airavata_getAllApplicationInterfaces_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter229)
+          foreach ($this->success as $iter245)
           {
-            $xfer += $iter229->write($output);
+            $xfer += $iter245->write($output);
           }
         }
         $output->writeListEnd();
@@ -24358,15 +24775,15 @@ class Airavata_getApplicationInputs_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size230 = 0;
-            $_etype233 = 0;
-            $xfer += $input->readListBegin($_etype233, $_size230);
-            for ($_i234 = 0; $_i234 < $_size230; ++$_i234)
+            $_size246 = 0;
+            $_etype249 = 0;
+            $xfer += $input->readListBegin($_etype249, $_size246);
+            for ($_i250 = 0; $_i250 < $_size246; ++$_i250)
             {
-              $elem235 = null;
-              $elem235 = new \Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
-              $xfer += $elem235->read($input);
-              $this->success []= $elem235;
+              $elem251 = null;
+              $elem251 = new \Airavata\Model\AppCatalog\AppInterface\InputDataObjectType();
+              $xfer += $elem251->read($input);
+              $this->success []= $elem251;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -24418,9 +24835,9 @@ class Airavata_getApplicationInputs_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter236)
+          foreach ($this->success as $iter252)
           {
-            $xfer += $iter236->write($output);
+            $xfer += $iter252->write($output);
           }
         }
         $output->writeListEnd();
@@ -24596,15 +25013,15 @@ class Airavata_getApplicationOutputs_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size237 = 0;
-            $_etype240 = 0;
-            $xfer += $input->readListBegin($_etype240, $_size237);
-            for ($_i241 = 0; $_i241 < $_size237; ++$_i241)
+            $_size253 = 0;
+            $_etype256 = 0;
+            $xfer += $input->readListBegin($_etype256, $_size253);
+            for ($_i257 = 0; $_i257 < $_size253; ++$_i257)
             {
-              $elem242 = null;
-              $elem242 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
-              $xfer += $elem242->read($input);
-              $this->success []= $elem242;
+              $elem258 = null;
+              $elem258 = new \Airavata\Model\AppCatalog\AppInterface\OutputDataObjectType();
+              $xfer += $elem258->read($input);
+              $this->success []= $elem258;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -24656,9 +25073,9 @@ class Airavata_getApplicationOutputs_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter243)
+          foreach ($this->success as $iter259)
           {
-            $xfer += $iter243->write($output);
+            $xfer += $iter259->write($output);
           }
         }
         $output->writeListEnd();
@@ -24837,17 +25254,17 @@ class Airavata_getAvailableAppInterfaceComputeResources_result {
         case 0:
           if ($ftype == TType::MAP) {
             $this->success = array();
-            $_size244 = 0;
-            $_ktype245 = 0;
-            $_vtype246 = 0;
-            $xfer += $input->readMapBegin($_ktype245, $_vtype246, $_size244);
-            for ($_i248 = 0; $_i248 < $_size244; ++$_i248)
+            $_size260 = 0;
+            $_ktype261 = 0;
+            $_vtype262 = 0;
+            $xfer += $input->readMapBegin($_ktype261, $_vtype262, $_size260);
+            for ($_i264 = 0; $_i264 < $_size260; ++$_i264)
             {
-              $key249 = '';
-              $val250 = '';
-              $xfer += $input->readString($key249);
-              $xfer += $input->readString($val250);
-              $this->success[$key249] = $val250;
+              $key265 = '';
+              $val266 = '';
+              $xfer += $input->readString($key265);
+              $xfer += $input->readString($val266);
+              $this->success[$key265] = $val266;
             }
             $xfer += $input->readMapEnd();
           } else {
@@ -24899,10 +25316,10 @@ class Airavata_getAvailableAppInterfaceComputeResources_result {
       {
         $output->writeMapBegin(TType::STRING, TType::STRING, count($this->success));
         {
-          foreach ($this->success as $kiter251 => $viter252)
+          foreach ($this->success as $kiter267 => $viter268)
           {
-            $xfer += $output->writeString($kiter251);
-            $xfer += $output->writeString($viter252);
+            $xfer += $output->writeString($kiter267);
+            $xfer += $output->writeString($viter268);
           }
         }
         $output->writeMapEnd();
@@ -25489,17 +25906,17 @@ class Airavata_getAllComputeResourceNames_result {
         case 0:
           if ($ftype == TType::MAP) {
             $this->success = array();
-            $_size253 = 0;
-            $_ktype254 = 0;
-            $_vtype255 = 0;
-            $xfer += $input->readMapBegin($_ktype254, $_vtype255, $_size253);
-            for ($_i257 = 0; $_i257 < $_size253; ++$_i257)
+            $_size269 = 0;
+            $_ktype270 = 0;
+            $_vtype271 = 0;
+            $xfer += $input->readMapBegin($_ktype270, $_vtype271, $_size269);
+            for ($_i273 = 0; $_i273 < $_size269; ++$_i273)
             {
-              $key258 = '';
-              $val259 = '';
-              $xfer += $input->readString($key258);
-              $xfer += $input->readString($val259);
-              $this->success[$key258] = $val259;
+              $key274 = '';
+              $val275 = '';
+              $xfer += $input->readString($key274);
+              $xfer += $input->readString($val275);
+              $this->success[$key274] = $val275;
             }
             $xfer += $input->readMapEnd();
           } else {
@@ -25551,10 +25968,10 @@ class Airavata_getAllComputeResourceNames_result {
       {
         $output->writeMapBegin(TType::STRING, TType::STRING, count($this->success));
         {
-          foreach ($this->success as $kiter260 => $viter261)
+          foreach ($this->success as $kiter276 => $viter277)
           {
-            $xfer += $output->writeString($kiter260);
-            $xfer += $output->writeString($viter261);
+            $xfer += $output->writeString($kiter276);
+            $xfer += $output->writeString($viter277);
           }
         }
         $output->writeMapEnd();
@@ -32179,17 +32596,17 @@ class Airavata_changeJobSubmissionPriorities_args {
         case 1:
           if ($ftype == TType::MAP) {
             $this->jobSubmissionPriorityMap = array();
-            $_size262 = 0;
-            $_ktype263 = 0;
-            $_vtype264 = 0;
-            $xfer += $input->readMapBegin($_ktype263, $_vtype264, $_size262);
-            for ($_i266 = 0; $_i266 < $_size262; ++$_i266)
+            $_size278 = 0;
+            $_ktype279 = 0;
+            $_vtype280 = 0;
+            $xfer += $input->readMapBegin($_ktype279, $_vtype280, $_size278);
+            for ($_i282 = 0; $_i282 < $_size278; ++$_i282)
             {
-              $key267 = '';
-              $val268 = 0;
-              $xfer += $input->readString($key267);
-              $xfer += $input->readI32($val268);
-              $this->jobSubmissionPriorityMap[$key267] = $val268;
+              $key283 = '';
+              $val284 = 0;
+              $xfer += $input->readString($key283);
+              $xfer += $input->readI32($val284);
+              $this->jobSubmissionPriorityMap[$key283] = $val284;
             }
             $xfer += $input->readMapEnd();
           } else {
@@ -32217,10 +32634,10 @@ class Airavata_changeJobSubmissionPriorities_args {
       {
         $output->writeMapBegin(TType::STRING, TType::I32, count($this->jobSubmissionPriorityMap));
         {
-          foreach ($this->jobSubmissionPriorityMap as $kiter269 => $viter270)
+          foreach ($this->jobSubmissionPriorityMap as $kiter285 => $viter286)
           {
-            $xfer += $output->writeString($kiter269);
-            $xfer += $output->writeI32($viter270);
+            $xfer += $output->writeString($kiter285);
+            $xfer += $output->writeI32($viter286);
           }
         }
         $output->writeMapEnd();
@@ -32423,17 +32840,17 @@ class Airavata_changeDataMovementPriorities_args {
         case 1:
           if ($ftype == TType::MAP) {
             $this->dataMovementPriorityMap = array();
-            $_size271 = 0;
-            $_ktype272 = 0;
-            $_vtype273 = 0;
-            $xfer += $input->readMapBegin($_ktype272, $_vtype273, $_size271);
-            for ($_i275 = 0; $_i275 < $_size271; ++$_i275)
+            $_size287 = 0;
+            $_ktype288 = 0;
+            $_vtype289 = 0;
+            $xfer += $input->readMapBegin($_ktype288, $_vtype289, $_size287);
+            for ($_i291 = 0; $_i291 < $_size287; ++$_i291)
             {
-              $key276 = '';
-              $val277 = 0;
-              $xfer += $input->readString($key276);
-              $xfer += $input->readI32($val277);
-              $this->dataMovementPriorityMap[$key276] = $val277;
+              $key292 = '';
+              $val293 = 0;
+              $xfer += $input->readString($key292);
+              $xfer += $input->readI32($val293);
+              $this->dataMovementPriorityMap[$key292] = $val293;
             }
             $xfer += $input->readMapEnd();
           } else {
@@ -32461,10 +32878,10 @@ class Airavata_changeDataMovementPriorities_args {
       {
         $output->writeMapBegin(TType::STRING, TType::I32, count($this->dataMovementPriorityMap));
         {
-          foreach ($this->dataMovementPriorityMap as $kiter278 => $viter279)
+          foreach ($this->dataMovementPriorityMap as $kiter294 => $viter295)
           {
-            $xfer += $output->writeString($kiter278);
-            $xfer += $output->writeI32($viter279);
+            $xfer += $output->writeString($kiter294);
+            $xfer += $output->writeI32($viter295);
           }
         }
         $output->writeMapEnd();
@@ -35693,15 +36110,15 @@ class Airavata_getAllGatewayComputeResourcePreferences_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size280 = 0;
-            $_etype283 = 0;
-            $xfer += $input->readListBegin($_etype283, $_size280);
-            for ($_i284 = 0; $_i284 < $_size280; ++$_i284)
+            $_size296 = 0;
+            $_etype299 = 0;
+            $xfer += $input->readListBegin($_etype299, $_size296);
+            for ($_i300 = 0; $_i300 < $_size296; ++$_i300)
             {
-              $elem285 = null;
-              $elem285 = new \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference();
-              $xfer += $elem285->read($input);
-              $this->success []= $elem285;
+              $elem301 = null;
+              $elem301 = new \Airavata\Model\AppCatalog\GatewayProfile\ComputeResourcePreference();
+              $xfer += $elem301->read($input);
+              $this->success []= $elem301;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -35753,9 +36170,9 @@ class Airavata_getAllGatewayComputeResourcePreferences_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter286)
+          foreach ($this->success as $iter302)
           {
-            $xfer += $iter286->write($output);
+            $xfer += $iter302->write($output);
           }
         }
         $output->writeListEnd();
@@ -35909,15 +36326,15 @@ class Airavata_getAllGatewayComputeResources_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size287 = 0;
-            $_etype290 = 0;
-            $xfer += $input->readListBegin($_etype290, $_size287);
-            for ($_i291 = 0; $_i291 < $_size287; ++$_i291)
+            $_size303 = 0;
+            $_etype306 = 0;
+            $xfer += $input->readListBegin($_etype306, $_size303);
+            for ($_i307 = 0; $_i307 < $_size303; ++$_i307)
             {
-              $elem292 = null;
-              $elem292 = new \Airavata\Model\AppCatalog\GatewayProfile\GatewayResourceProfile();
-              $xfer += $elem292->read($input);
-              $this->success []= $elem292;
+              $elem308 = null;
+              $elem308 = new \Airavata\Model\AppCatalog\GatewayProfile\GatewayResourceProfile();
+              $xfer += $elem308->read($input);
+              $this->success []= $elem308;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -35969,9 +36386,9 @@ class Airavata_getAllGatewayComputeResources_result {
       {
         $output->writeListBegin(TType::STRUCT, count($this->success));
         {
-          foreach ($this->success as $iter293)
+          foreach ($this->success as $iter309)
           {
-            $xfer += $iter293->write($output);
+            $xfer += $iter309->write($output);
           }
         }
         $output->writeListEnd();
@@ -36631,14 +37048,14 @@ class Airavata_getAllWorkflows_result {
         case 0:
           if ($ftype == TType::LST) {
             $this->success = array();
-            $_size294 = 0;
-            $_etype297 = 0;
-            $xfer += $input->readListBegin($_etype297, $_size294);
-            for ($_i298 = 0; $_i298 < $_size294; ++$_i298)
+            $_size310 = 0;
+            $_etype313 = 0;
+            $xfer += $input->readListBegin($_etype313, $_size310);
+            for ($_i314 = 0; $_i314 < $_size310; ++$_i314)
             {
-              $elem299 = null;
-              $xfer += $input->readString($elem299);
-              $this->success []= $elem299;
+              $elem315 = null;
+              $xfer += $input->readString($elem315);
+              $this->success []= $elem315;
             }
             $xfer += $input->readListEnd();
           } else {
@@ -36690,9 +37107,9 @@ class Airavata_getAllWorkflows_result {
       {
         $output->writeListBegin(TType::STRING, count($this->success));
         {
-          foreach ($this->success as $iter300)
+          foreach ($this->success as $iter316)
           {
-            $xfer += $output->writeString($iter300);
+            $xfer += $output->writeString($iter316);
           }
         }
         $output->writeListEnd();

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/libraries/Airavata/Model/Workspace/Experiment/Types.php
----------------------------------------------------------------------
diff --git a/app/libraries/Airavata/Model/Workspace/Experiment/Types.php b/app/libraries/Airavata/Model/Workspace/Experiment/Types.php
index 753dc13..4b53e09 100644
--- a/app/libraries/Airavata/Model/Workspace/Experiment/Types.php
+++ b/app/libraries/Airavata/Model/Workspace/Experiment/Types.php
@@ -44,6 +44,23 @@ final class ExperimentState {
   );
 }
 
+final class ExperimentSearchFields {
+  const EXPERIMENT_NAME = 0;
+  const EXPERIMENT_DESC = 1;
+  const APPLICATION_ID = 2;
+  const FROM_DATE = 3;
+  const TO_DATE = 4;
+  const STATUS = 5;
+  static public $__names = array(
+    0 => 'EXPERIMENT_NAME',
+    1 => 'EXPERIMENT_DESC',
+    2 => 'APPLICATION_ID',
+    3 => 'FROM_DATE',
+    4 => 'TO_DATE',
+    5 => 'STATUS',
+  );
+}
+
 final class WorkflowNodeState {
   const INVOKED = 0;
   const EXECUTING = 1;
@@ -4111,7 +4128,6 @@ class ExperimentSummary {
   public $description = null;
   public $applicationId = null;
   public $experimentStatus = null;
-  public $errors = null;
 
   public function __construct($vals=null) {
     if (!isset(self::$_TSPEC)) {
@@ -4149,15 +4165,6 @@ class ExperimentSummary {
           'type' => TType::STRUCT,
           'class' => '\Airavata\Model\Workspace\Experiment\ExperimentStatus',
           ),
-        9 => array(
-          'var' => 'errors',
-          'type' => TType::LST,
-          'etype' => TType::STRUCT,
-          'elem' => array(
-            'type' => TType::STRUCT,
-            'class' => '\Airavata\Model\Workspace\Experiment\ErrorDetails',
-            ),
-          ),
         );
     }
     if (is_array($vals)) {
@@ -4185,9 +4192,6 @@ class ExperimentSummary {
       if (isset($vals['experimentStatus'])) {
         $this->experimentStatus = $vals['experimentStatus'];
       }
-      if (isset($vals['errors'])) {
-        $this->errors = $vals['errors'];
-      }
     }
   }
 
@@ -4267,24 +4271,6 @@ class ExperimentSummary {
             $xfer += $input->skip($ftype);
           }
           break;
-        case 9:
-          if ($ftype == TType::LST) {
-            $this->errors = array();
-            $_size133 = 0;
-            $_etype136 = 0;
-            $xfer += $input->readListBegin($_etype136, $_size133);
-            for ($_i137 = 0; $_i137 < $_size133; ++$_i137)
-            {
-              $elem138 = null;
-              $elem138 = new \Airavata\Model\Workspace\Experiment\ErrorDetails();
-              $xfer += $elem138->read($input);
-              $this->errors []= $elem138;
-            }
-            $xfer += $input->readListEnd();
-          } else {
-            $xfer += $input->skip($ftype);
-          }
-          break;
         default:
           $xfer += $input->skip($ftype);
           break;
@@ -4341,23 +4327,6 @@ class ExperimentSummary {
       $xfer += $this->experimentStatus->write($output);
       $xfer += $output->writeFieldEnd();
     }
-    if ($this->errors !== null) {
-      if (!is_array($this->errors)) {
-        throw new TProtocolException('Bad type in structure.', TProtocolException::INVALID_DATA);
-      }
-      $xfer += $output->writeFieldBegin('errors', TType::LST, 9);
-      {
-        $output->writeListBegin(TType::STRUCT, count($this->errors));
-        {
-          foreach ($this->errors as $iter139)
-          {
-            $xfer += $iter139->write($output);
-          }
-        }
-        $output->writeListEnd();
-      }
-      $xfer += $output->writeFieldEnd();
-    }
     $xfer += $output->writeFieldStop();
     $xfer += $output->writeStructEnd();
     return $xfer;

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/libraries/Utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/Utilities.php b/app/libraries/Utilities.php
index 2d1d3e6..267d724 100644
--- a/app/libraries/Utilities.php
+++ b/app/libraries/Utilities.php
@@ -1451,7 +1451,7 @@ public static function create_project()
 
     try
     {
-        $projectId = Airavata::createProject( Session::get("gateway_id"), $project);
+        $projectId = Airavata::createProject(Config::get('pga_config.airavata')['gateway-id'], $project);
 
         if ($projectId)
         {
@@ -1875,27 +1875,29 @@ public static function create_options($values, $labels, $disabled)
 
         try
         {
+            $filters = array();
+            if($inputs["status-type"] != "ALL"){
+                $filters[\Airavata\Model\Workspace\Experiment\ExperimentSearchFields::STATUS] = $inputs["status-type"];
+            }
             switch ( $inputs["search-key"])
             {
                 case 'experiment-name':
-                    $experiments = Airavata::searchExperimentsByNameWithPagination(
-                        Session::get('gateway_id'), Session::get('username'), $inputs["search-value"], $limit, $offset);
+                    $filters[\Airavata\Model\Workspace\Experiment\ExperimentSearchFields::EXPERIMENT_NAME] = $inputs["search-value"];
                     break;
                 case 'experiment-description':
-                    $experiments = Airavata::searchExperimentsByDescWithPagination(
-                        Session::get('gateway_id'), Session::get('username'), $inputs["search-value"], $limit, $offset);
+                    $filters[\Airavata\Model\Workspace\Experiment\ExperimentSearchFields::EXPERIMENT_DESC] = $inputs["search-value"];
                     break;
                 case 'application':
-                    $experiments = Airavata::searchExperimentsByApplicationWithPagination(
-                        Session::get('gateway_id'), Session::get('username'), $inputs["search-value"], $limit, $offset);
+                    $filters[\Airavata\Model\Workspace\Experiment\ExperimentSearchFields::APPLICATION_ID] = $inputs["search-value"];
                     break;
                 case 'creation-time':
-                    $experiments = Airavata::searchExperimentsByCreationTimeWithPagination(
-                        Session::get('gateway_id'), Session::get('username'), strtotime( $inputs["from-date"])*1000,
-                        strtotime( $inputs["to-date"])*1000 , $limit, $offset);
+                    $filters[\Airavata\Model\Workspace\Experiment\ExperimentSearchFields::FROM_DATE] = strtotime( $inputs["from-date"])*1000;
+                    $filters[\Airavata\Model\Workspace\Experiment\ExperimentSearchFields::TO_DATE] = strtotime( $inputs["to-date"])*1000;
                     break;
                 case '':
             }
+            $experiments = Airavata::searchExperiments(
+                Session::get('gateway_id'), Session::get('username'), $filters, $limit, $offset);
         }
         catch (InvalidRequestException $ire)
         {

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/views/experiment/browse.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/browse.blade.php b/app/views/experiment/browse.blade.php
index 25c5888..52a607f 100755
--- a/app/views/experiment/browse.blade.php
+++ b/app/views/experiment/browse.blade.php
@@ -50,14 +50,14 @@ if (isset( $expContainer))
                 <th>Description</th>
                 <!--<th>Resource</th>-->
                 <th>Creation Time</th>
-                <th>
-                    <select class="form-control select-status">
-                        <option value="ALL">Status</option>
-                    @foreach( $expStates as $index => $state)
-                        <option value="{{ $state }}">{{ $state }}</option>
-                    @endforeach
-                    </select>
-                </th>
+                <th>Status</th>
+<!--                    <select class="form-control select-status">-->
+<!--                        <option value="ALL">Status</option>-->
+<!--                    @foreach( $expStates as $index => $state)-->
+<!--                        <option value="{{ $state }}">{{ $state }}</option>-->
+<!--                    @endforeach-->
+<!--                    </select>-->
+<!--                </th>-->
             </tr>
     
 

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/views/experiment/search.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/search.blade.php b/app/views/experiment/search.blade.php
index c993354..90a194c 100755
--- a/app/views/experiment/search.blade.php
+++ b/app/views/experiment/search.blade.php
@@ -34,6 +34,19 @@
                value="<?php if (isset($_POST['search-value'])) echo $_POST['search-value'] ?>">
     </div>
 
+    <select name="status-type" class="form-control select-status">
+        <option value="ALL">Status</option>
+        <?php
+        foreach( $expStates as $index => $state){
+            if(isset($input) && $state == $input["status-type"]){
+                echo '<option value="' . $state .'" selected>' . $state . '</option>';
+            }else{
+                echo '<option value="' . $state .'">' . $state . '</option>';
+            }
+        }
+        ?>
+    </select>
+
     <div class="container select-dates hide">
         <div class="col-md-12">
             Select dates between which you want to search for experiments.
@@ -60,7 +73,7 @@
         </div>
     </div>
 
-    <button name="search" type="submit" class="btn btn-primary" value="Search"><span class="glyphicon glyphicon-search"></span> Search</button>
+    <button name="search" type="submit" class="btn btn-primary pull-right" value="Search"><span class="glyphicon glyphicon-search"></span> Search</button>
     <p class="help-block">You can use * as a wildcard character. Tip: search for * alone to retrieve all of your experiments.</p>
 
     <!-- Pagination Handling -->
@@ -116,14 +129,14 @@ if (isset( $expContainer))
                 <th>Description</th>
                 <!--<th>Resource</th>-->
                 <th>Creation Time</th>
-                <th>
-                    <select class="form-control select-status">
-                        <option value="ALL">Status</option>
-                    @foreach( $expStates as $index => $state)
-                        <option value="{{ $state }}">{{ $state }}</option>
-                    @endforeach
-                    </select>
-                </th>
+                <th>Status</th>
+<!--                    <select class="form-control select-status">-->
+<!--                        <option value="ALL">Status</option>-->
+<!--                    @foreach( $expStates as $index => $state)-->
+<!--                        <option value="{{ $state }}">{{ $state }}</option>-->
+<!--                    @endforeach-->
+<!--                    </select>-->
+<!--                </th>-->
             </tr>
     
 
@@ -205,34 +218,35 @@ if (isset( $expContainer))
 
         $(document).ready( function(){
 
-            /* script to make status select work on the UI side itself. */
-
-            $(".select-status").on("change", function(){
-                selectedStatus = this.value;
-
-                if( selectedStatus == "ALL")
-                {
-                    $("table tr").slideDown();
-                }
-                else
-                {
-                    $("table tr").each(function(index) {
-                        if (index != 0) {
-
-                            $row = $(this);
-
-                            var status = $.trim( $row.find("td:last").text() );
-                            if (status == selectedStatus )
-                            {
-                                $(this).slideDown();
-                            }
-                            else {
-                                $(this).slideUp();
-                            }
-                        }
-                    });
-                }
-            });
+//------------------------Commenting Client Side filtering--------------------------------------
+//            /* script to make status select work on the UI side itself. */
+//
+//            $(".select-status").on("change", function(){
+//                selectedStatus = this.value;
+//
+//                if( selectedStatus == "ALL")
+//                {
+//                    $("table tr").slideDown();
+//                }
+//                else
+//                {
+//                    $("table tr").each(function(index) {
+//                        if (index != 0) {
+//
+//                            $row = $(this);
+//
+//                            var status = $.trim( $row.find("td:last").text() );
+//                            if (status == selectedStatus )
+//                            {
+//                                $(this).slideDown();
+//                            }
+//                            else {
+//                                $(this).slideUp();
+//                            }
+//                        }
+//                    });
+//                }
+//            });
 
             /* making datetimepicker work for exp search */
 

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/app/views/layout/basic.blade.php
----------------------------------------------------------------------
diff --git a/app/views/layout/basic.blade.php b/app/views/layout/basic.blade.php
index a593df3..318b507 100755
--- a/app/views/layout/basic.blade.php
+++ b/app/views/layout/basic.blade.php
@@ -42,7 +42,7 @@
 
 </body>
 @section('scripts')
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
     <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
 
     <!-- Jira Issue Collector - Report Issue -->

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/public/css/query-builder.default.min.css
----------------------------------------------------------------------
diff --git a/public/css/query-builder.default.min.css b/public/css/query-builder.default.min.css
deleted file mode 100644
index de15150..0000000
--- a/public/css/query-builder.default.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.1.0
- * Copyright 2014-2015 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-.query-builder .rule-container,.query-builder .rule-placeholder,.query-builder .rules-group-container{position:relative;margin:4px 0;border-radius:5px;padding:5px;border:1px solid #EEE;background:rgba(255,255,255,.9)}.query-builder .drag-handle,.query-builder .error-container,.query-builder .rule-container .rule-filter-container,.query-builder .rule-container .rule-operator-container,.query-builder .rule-container .rule-value-container{display:inline-block;margin:0 5px 0 0;vertical-align:middle}.query-builder .rules-group-container{padding:10px 10px 6px;border:1px solid #DCC896;background:rgba(250,240,210,.5)}.query-builder .rules-group-container .rules-group-header{margin-bottom:10px}.query-builder .rules-group-container .rules-group-header input[name$=_cond]{display:none}.query-builder .rules-group-container .rules-list{list-style:none;padding:0 0 0 15px;margin:0}.query-builder .rule-container .rule-value-container{border-left:1px solid #ddd;padding-left:5px}.query-builder .rule-c
 ontainer .rule-value-container label{margin-bottom:0;font-weight:400}.query-builder .rule-container .rule-value-container label.block{display:block}.query-builder .rule-container input[type=number],.query-builder .rule-container input[type=text],.query-builder .rule-container select{padding:1px}.query-builder .error-container{display:none;cursor:help;color:red}.query-builder .has-error{background-color:#FDD;border-color:#F99}.query-builder .has-error .error-container{display:inline-block!important}.query-builder .rules-list>:after,.query-builder .rules-list>:before{content:'';position:absolute;left:-10px;width:10px;height:calc(50% + 4px);border-color:#CCC;border-style:solid}.query-builder .rules-list>:before{top:-4px;border-width:0 0 2px 2px}.query-builder .rules-list>:after{top:50%;border-width:0 0 0 2px}.query-builder .rules-list>:first-child:before{top:-12px;height:calc(50% + 14px)}.query-builder .rules-list>:last-child:before{border-radius:0 0 0 4px}.query-builder .rules-list>:l
 ast-child:after{display:none}.query-builder .error-container+.tooltip .tooltip-inner{color:#F99!important}.query-builder p.filter-description{margin:5px 0 0;background:#D9EDF7;border:1px solid #BCE8F1;color:#31708F;border-radius:5px;padding:2.5px 5px;font-size:.8em}.query-builder .drag-handle{cursor:move;vertical-align:middle;margin-left:5px}.query-builder .dragged{opacity:.5}.query-builder .rule-placeholder{border:1px dashed #BBB;opacity:.7}
\ No newline at end of file


[5/5] airavata-php-gateway git commit: Removing app_config.ini property file

Posted by sc...@apache.org.
Removing app_config.ini property file


Project: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/commit/ae1ffd07
Tree: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/tree/ae1ffd07
Diff: http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/diff/ae1ffd07

Branch: refs/heads/master
Commit: ae1ffd07a25f1d3f99d1e45396f8a2c945af907b
Parents: 72857e7
Author: Supun Nakandala <sc...@apache.org>
Authored: Mon Jun 1 04:00:02 2015 +0530
Committer: Supun Nakandala <sc...@apache.org>
Committed: Mon Jun 1 04:00:02 2015 +0530

----------------------------------------------------------------------
 app/config/app_config.ini.template       | 43 ---------------------------
 app/config/pga_config.php                | 41 +++++++++++++++++++++++--
 app/controllers/ExperimentController.php | 40 +++++++++++--------------
 app/libraries/Utilities.php              | 43 ++-------------------------
 4 files changed, 58 insertions(+), 109 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/ae1ffd07/app/config/app_config.ini.template
----------------------------------------------------------------------
diff --git a/app/config/app_config.ini.template b/app/config/app_config.ini.template
deleted file mode 100755
index 0d7c97b..0000000
--- a/app/config/app_config.ini.template
+++ /dev/null
@@ -1,43 +0,0 @@
-;--------------------------------------- Airavata Constants ----------------------
-
-
-;development
-airavata-port = 9930;
-airavata-server = 'gw111.iu.xsede.org'
-
-;production
-;airavata-server = 'gw127.iu.xsede.org'
-;airavata-port = 8930; 
-
-airavata-timeout = 100000;
-experiment-data-root = '/../experimentData/'
-ssh-user = 'root'
-data-path = 'file://home/pga/production/experimentData/'
-experiment-data-root-absolute = '/var/www/experimentData/'
-;USER_STORE = 'WSO2','XML'
-user-store = "WSO2"
-admin-role = "admin"
-gateway-admin-role = "gateway_admin"
-user-role = "Internal/everyone"
-;identity server roles assigned for Gateway
-gateway-role-prepend = "gateway_"
-gateway-role-admin-append = "_admin"
-req-url = 'https://gw111.iu.xsede.org:8443/credential-store/acs-start-servlet'
-gateway-name = 'PHP-Reference-Gateway'
-email = 'admin@gw120.iu.xsede.org'
-;file size in MB
-server-allowed-file-size = 64
-
-;Credential Store Token
-credential-store-token="811351f3-7484-4931-b354-24881e7963e9"
-
-;----------------------------------------- Experiment Defaults --------------------
-
-;default Queue name 
-queue-name = 'long'
-;default Node Count
-node-count = '1'
-;default Total Core Count
-total-cpu-count = '4'
-;default Wall Time Limit
-wall-time-limit = '30'

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/ae1ffd07/app/config/pga_config.php
----------------------------------------------------------------------
diff --git a/app/config/pga_config.php b/app/config/pga_config.php
index d54bd34..f3c8f59 100644
--- a/app/config/pga_config.php
+++ b/app/config/pga_config.php
@@ -69,12 +69,12 @@ return array(
         /**
          * Airavata API server location
          */
-        'airavata-server' => 'localhost',
+        'airavata-server' => 'gw111.iu.xsede.org',
 
         /**
          * Airavata API server port
          */
-        'airavata-port' => '8930',
+        'airavata-port' => '9930',
 
         /**
          * Airavata API server thrift communication timeout
@@ -84,7 +84,42 @@ return array(
         /**
          * PGA Gateway ID
          */
-        'gateway-id' => 'default'
+        'gateway-id' => 'default',
+
+        /**
+         * Maximum size of a file which is allowed to upload to the server
+         */
+        'server-allowed-file-size' => 64,
+
+        /**
+         * Advanced experiments options
+         */
+        'advanced-experiment-options' => '',
+
+        /**
+         * Credentials Store Token
+         */
+        'credential-store-token' => '811351f3-7484-4931-b354-24881e7963e9',
+
+        /**
+         * Default queue name
+         */
+        'queue-name' => 'long',
+
+        /**
+         * Default node count
+         */
+        'node-count' => '1',
+
+        /**
+         * Default total core count
+         */
+        'total-cpu-count' => '4',
+
+        /**
+         * Default wall time limit
+         */
+        'wall-time-limit' => '30'
     ]
 
 );
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/ae1ffd07/app/controllers/ExperimentController.php
----------------------------------------------------------------------
diff --git a/app/controllers/ExperimentController.php b/app/controllers/ExperimentController.php
index a2013d1..08a3054 100755
--- a/app/controllers/ExperimentController.php
+++ b/app/controllers/ExperimentController.php
@@ -34,12 +34,10 @@ class ExperimentController extends BaseController {
 			
 			$computeResources = Utilities::create_compute_resources_select($_POST['application'], null);
 
-			$app_config = Utilities::read_config();
-
-			$queueDefaults = array( "queueName" => $app_config["queue-name"],
-						        	"nodeCount" => $app_config["node-count"],
-						        	"cpuCount" => $app_config["total-cpu-count"],
-						        	"wallTimeLimit" => $app_config["wall-time-limit"]
+			$queueDefaults = array( "queueName" => Config::get('pga_config.airavata')["queue-name"],
+						        	"nodeCount" => Config::get('pga_config.airavata')["node-count"],
+						        	"cpuCount" => Config::get('pga_config.airavata')["total-cpu-count"],
+						        	"wallTimeLimit" => Config::get('pga_config.airavata')["wall-time-limit"]
 							);
 
 			$experimentInputs = array( 
@@ -48,14 +46,14 @@ class ExperimentController extends BaseController {
 						        "experimentDescription" => $_POST['experiment-description'] . ' ',
 						        "project" => $_POST['project'],
 						        "application" => $_POST['application'],
-						        "allowedFileSize" => $app_config["server-allowed-file-size"],
+						        "allowedFileSize" => Config::get('pga_config.airavata')["server-allowed-file-size"],
 						        "echo" => ($_POST['application'] == 'Echo')? ' selected' : '',
 						        "wrf" => ($_POST['application'] == 'WRF')? ' selected' : '',
 						        "queueDefaults" => $queueDefaults,
-						        "advancedOptions" => $app_config["advanced-experiment-options"],
+						        "advancedOptions" => Config::get('pga_config.airavata')["advanced-experiment-options"],
 						        "computeResources" => $computeResources,
 						        "resourceHostId" => null,
-						        "advancedOptions" => $app_config["advanced-experiment-options"]
+						        "advancedOptions" => Config::get('pga_config.airavata')["advanced-experiment-options"]
 					        );
 
 			return View::make( "experiment/create-complete", array( "expInputs" => $experimentInputs) );
@@ -181,11 +179,10 @@ class ExperimentController extends BaseController {
 
 	public function editView()
 	{
-		$app_config = Utilities::read_config();
-		$queueDefaults = array( "queueName" => $app_config["queue-name"],
-						        "nodeCount" => $app_config["node-count"],
-						        "cpuCount" => $app_config["total-cpu-count"],
-						        "wallTimeLimit" => $app_config["wall-time-limit"]
+		$queueDefaults = array( "queueName" => Config::get('pga_config.airavata')["queue-name"],
+						        "nodeCount" => Config::get('pga_config.airavata')["node-count"],
+						        "cpuCount" => Config::get('pga_config.airavata')["total-cpu-count"],
+						        "wallTimeLimit" => Config::get('pga_config.airavata')["wall-time-limit"]
 							);
 
 		$experiment = Utilities::get_experiment($_GET['expId']);
@@ -200,19 +197,19 @@ class ExperimentController extends BaseController {
 						        "experimentName" => $experiment->name,
 						        "experimentDescription" => $experiment->description,
 						        "application" => $experiment->applicationId,
-						      	"allowedFileSize" => $app_config["server-allowed-file-size"],
+						      	"allowedFileSize" => Config::get('pga_config.airavata')["server-allowed-file-size"],
 								'experiment' => $experiment,
 								"queueDefaults" => $queueDefaults,
 								'project' => $project,
 								'expVal' => $expVal,
 								'cloning' => true,
-						        'advancedOptions' => $app_config["advanced-experiment-options"],
+						        'advancedOptions' => Config::get('pga_config.airavata')["advanced-experiment-options"],
 						        'computeResources' => $computeResources,
 						        "resourceHostId" => $expVal['scheduling']->resourceHostId,
 								'project' => $project,
 								'expVal' => $expVal,
 								'cloning' => true,
-						        'advancedOptions' => $app_config["advanced-experiment-options"]
+						        'advancedOptions' => Config::get('pga_config.airavata')["advanced-experiment-options"]
 								);
 		return View::make("experiment/edit", array("expInputs" => $experimentInputs) );
 	}
@@ -282,11 +279,10 @@ class ExperimentController extends BaseController {
 	public function getQueueView()
 	{
 		$queues = Utilities::getQueueDatafromResourceId( Input::get("crId"));
-		$app_config = Utilities::read_config();
-		$queueDefaults = array( "queueName" => $app_config["queue-name"],
-						        "nodeCount" => $app_config["node-count"],
-						        "cpuCount" => $app_config["total-cpu-count"],
-						        "wallTimeLimit" => $app_config["wall-time-limit"]
+		$queueDefaults = array( "queueName" => Config::get('pga_config.airavata')["queue-name"],
+						        "nodeCount" => Config::get('pga_config.airavata')["node-count"],
+						        "cpuCount" => Config::get('pga_config.airavata')["total-cpu-count"],
+						        "wallTimeLimit" => Config::get('pga_config.airavata')["wall-time-limit"]
 							);
 		return View::make("partials/experiment-queue-block", array( "queues" => $queues, "queueDefaults" => $queueDefaults) );
 	}

http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/ae1ffd07/app/libraries/Utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/Utilities.php b/app/libraries/Utilities.php
index 267d724..f18bf31 100644
--- a/app/libraries/Utilities.php
+++ b/app/libraries/Utilities.php
@@ -164,8 +164,7 @@ public static function launch_experiment($expId)
         Utilities::print_success_message('Experiment launched using ' . $tokenString . ' allocation!');
         */
 
-        $app_config = Utilities::read_config();
-        $hardCodedToken = $app_config['credential-store-token'];
+        $hardCodedToken = Config::get('pga_config.airavata')['credential-store-token'];
         Airavata::launchExperiment($expId, $hardCodedToken);
 
         /*
@@ -618,7 +617,6 @@ public static function assemble_experiment()
 {
     $utility = new Utilities();
     $experimentInputs = array();
-    $app_config = Utilities::read_config();
 
     $scheduling = new ComputationalResourceScheduling();
     $scheduling->totalCPUCount = $_POST['cpu-count'];
@@ -1016,13 +1014,10 @@ public static function clone_experiment($expId)
  */
 public static function cancel_experiment($expId)
 {
-    $app_config = Utilities::read_config();
-
-
 
     try
     {
-        Airavata::terminateExperiment($expId, $app_config["credential-store-token"]);
+        Airavata::terminateExperiment($expId, Config::get('pga_config.airavata')["credential-store-token"]);
 
         Utilities::print_success_message("Experiment canceled!");
     }
@@ -2132,40 +2127,6 @@ public static function apply_changes_to_experiment($experiment, $input)
     }
 }
 
-public static function read_config( $fileName = null){
-    $wsis_config = null;
-
-    if( $fileName == null)
-        $fileName = "app_config.ini";
-    try {
-        if (file_exists( app_path() . "/config/" . $fileName ) ) {
-
-            try
-            {
-                $wsis_config = parse_ini_file( app_path() . "/config/" . $fileName );
-            }
-
-            catch( \Exception $e)
-            {
-                print_r( $e); exit;
-            }
-        } 
-        else 
-        {
-            throw new Exception("Error: Cannot open file!");
-        }
-
-        if (!$wsis_config) 
-        {
-            throw new Exception('Error: Unable to read the file!');
-        }
-    }catch (Exception $e) {
-        throw new Exception('Unable to instantiate the client. Try editing the file.', 0, NULL);
-    }
-    return $wsis_config;
-
-}
-
 public static function get_job_details( $experimentId){
     return Airavata::getJobDetails( $experimentId);
 }


[3/5] airavata-php-gateway git commit: Fixing Airavata-1703

Posted by sc...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/72857e7b/public/js/query-builder.standalone.min.js
----------------------------------------------------------------------
diff --git a/public/js/query-builder.standalone.min.js b/public/js/query-builder.standalone.min.js
deleted file mode 100644
index 762437f..0000000
--- a/public/js/query-builder.standalone.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * jQuery QueryBuilder 2.1.0
- * Copyright 2014-2015 Damien "Mistic" Sorel (http://www.strangeplanet.fr)
- * Licensed under MIT (http://opensource.org/licenses/MIT)
- */
-
-!function(a,b){"function"==typeof define&&define.amd?define("jQuery.extendext",["jquery"],b):b(a.jQuery)}(this,function($){"use strict";$.extendext=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1,k="default";for("boolean"==typeof g&&(j=g,g=arguments[h++]||{}),"string"==typeof g&&(k=$([g.toLowerCase(),"default"]).filter(["default","concat","replace","extend"])[0],g=arguments[h++]||{}),"object"==typeof g||$.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!==(a=arguments[h]))if($.isArray(a)&&"default"!==k)switch(f=g&&$.isArray(g)?g:[],k){case"concat":g=f.concat($.extend(j,[],a));break;case"replace":g=$.extend(j,[],a);break;case"extend":a.forEach(function(a,b){if("object"==typeof a){var c=$.isArray(a)?[]:{};f[b]=$.extendext(j,k,f[b]||c,a)}else-1===f.indexOf(a)&&f.push(a)}),g=f}else for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&($.isPlainObject(d)||(e=$.isArray(d)))?(e?(e=!1,f=c&&$.isArray(c)?c:[]):f=c&&$.isPlainObject(c)?c:{},g[b]=$.extendext(j,k,f,d)):void 0
 !==d&&(g[b]=d));return g}}),function(a,b){"function"==typeof define&&define.amd?define("query-builder",["jquery","jQuery.extendext"],b):b(a.jQuery)}(this,function($){"use strict";function a(b){return this instanceof a?(this.root=null,void(this.$=$(this))):a.getModel(b)}function b(a,b){b.forEach(function(b){Object.defineProperty(a.prototype,b,{enumerable:!0,get:function(){return this.__[b]},set:function(a){var c=null!==this.__[b]&&"object"==typeof this.__[b]?$.extend({},this.__[b]):this.__[b];this.__[b]=a,null!==this.model&&this.model.trigger("update",this,b,a,c)}})})}function c(a,b){a&&($.isArray(a)?a.forEach(function(a){$.isPlainObject(a)?$.each(a,function(a,c){return b(a,c),!1}):b(a,a)}):$.each(a,function(a,c){b(a,c)}))}function d(a,b){return b=Array.prototype.slice.call(arguments),a.replace(/{([0-9]+)}/g,function(a,c){return b[parseInt(c)+1]})}function e(){$.error(d.apply(null,arguments))}function f(a,b,c){switch(b){case"integer":return parseInt(a);case"double":return parseFloat(
 a);case"boolean":var d="true"===a.trim().toLowerCase()||"1"===a.trim()||1===a;return c?d?1:0:d;default:return a}}function g(a){return"string"!=typeof a?a:a.replace(/[\0\n\r\b\\\'\"]/g,function(a){switch(a){case"\x00":return"\\0";case"\n":return"\\n";case"\r":return"\\r";case"\b":return"\\b";default:return"\\"+a}}).replace(/\t/g,"\\t").replace(/\x1a/g,"\\Z")}function h(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function i(b,c){var d;return d=c.closest(".rule-container"),d.length?void b.moveAfter(a(d)):(d=c.closest(".rules-group-header"),d.length?(d=c.closest(".rules-group-container"),void b.moveAtBegin(a(d))):(d=c.closest(".rules-group-container"),d.length?void b.moveAtEnd(a(d)):void 0))}var j=function(a,b){this.init(a,b)},k=Array.prototype.slice;$.extend(j.prototype,{change:function(a,b){var c=new $.Event(a+".queryBuilder.filter",{builder:this,value:b});return this.$el.triggerHandler(c,k.call(arguments,2)),c.value},trigger:function(a){var b=new $.Event(a+".que
 ryBuilder",{builder:this});return this.$el.triggerHandler(b,k.call(arguments,1)),b},on:function(a,b){return this.$el.on(a+".queryBuilder",b),this},off:function(a,b){return this.$el.off(a+".queryBuilder",b),this},once:function(a,b){return this.$el.one(a+".queryBuilder",b),this}}),j.plugins={},j.defaults=function(a){return"object"!=typeof a?"string"==typeof a?"object"==typeof j.DEFAULTS[a]?$.extend(!0,{},j.DEFAULTS[a]):j.DEFAULTS[a]:$.extend(!0,{},j.DEFAULTS):void $.extendext(!0,"replace",j.DEFAULTS,a)},j.define=function(a,b,c){j.plugins[a]={fct:b,def:c||{}}},j.extend=function(a){$.extend(j.prototype,a)},j.prototype.initPlugins=function(){if(this.plugins){if($.isArray(this.plugins)){var a={};this.plugins.forEach(function(b){a[b]=null}),this.plugins=a}Object.keys(this.plugins).forEach(function(a){a in j.plugins?(this.plugins[a]=$.extend(!0,{},j.plugins[a].def,this.plugins[a]||{}),j.plugins[a].fct.call(this,this.plugins[a])):e('Unable to find plugin "{0}"',a)},this)}},j.types={string:"s
 tring",integer:"number","double":"number",date:"datetime",time:"datetime",datetime:"datetime","boolean":"boolean"},j.inputs=["text","textarea","radio","checkbox","select"],j.modifiable_options=["display_errors","allow_groups","allow_empty"],j.regional={},j.DEFAULTS={filters:[],plugins:[],display_errors:!0,allow_groups:-1,allow_empty:!1,conditions:["AND","OR"],default_condition:"AND",inputs_separator:" , ",select_placeholder:"------",default_rule_flags:{filter_readonly:!1,operator_readonly:!1,value_readonly:!1,no_delete:!1},template:{group:null,rule:null},lang_code:"en",lang:{},operators:[{type:"equal",nb_inputs:1,multiple:!1,apply_to:["string","number","datetime","boolean"]},{type:"not_equal",nb_inputs:1,multiple:!1,apply_to:["string","number","datetime","boolean"]},{type:"in",nb_inputs:1,multiple:!0,apply_to:["string","number","datetime"]},{type:"not_in",nb_inputs:1,multiple:!0,apply_to:["string","number","datetime"]},{type:"less",nb_inputs:1,multiple:!1,apply_to:["number","datetim
 e"]},{type:"less_or_equal",nb_inputs:1,multiple:!1,apply_to:["number","datetime"]},{type:"greater",nb_inputs:1,multiple:!1,apply_to:["number","datetime"]},{type:"greater_or_equal",nb_inputs:1,multiple:!1,apply_to:["number","datetime"]},{type:"between",nb_inputs:2,multiple:!1,apply_to:["number","datetime"]},{type:"begins_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"not_begins_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"contains",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"not_contains",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"ends_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"not_ends_with",nb_inputs:1,multiple:!1,apply_to:["string"]},{type:"is_empty",nb_inputs:0,multiple:!1,apply_to:["string"]},{type:"is_not_empty",nb_inputs:0,multiple:!1,apply_to:["string"]},{type:"is_null",nb_inputs:0,multiple:!1,apply_to:["string","number","datetime","boolean"]},{type:"is_not_null",nb_inputs:0,multiple:!1,apply_to:["string","number","datet
 ime","boolean"]}],icons:{add_group:"glyphicon glyphicon-plus-sign",add_rule:"glyphicon glyphicon-plus",remove_group:"glyphicon glyphicon-remove",remove_rule:"glyphicon glyphicon-remove",error:"glyphicon glyphicon-warning-sign"}},j.prototype.init=function(b,c){b[0].queryBuilder=this,this.$el=b,this.settings=$.extendext(!0,"replace",{},j.DEFAULTS,c),this.model=new a,this.status={group_id:0,rule_id:0,generated_id:!1,has_optgroup:!1,id:null,updating_value:!1},this.settings.allow_groups===!1?this.settings.allow_groups=0:this.settings.allow_groups===!0&&(this.settings.allow_groups=-1),this.filters=this.settings.filters,this.icons=this.settings.icons,this.operators=this.settings.operators,this.template=this.settings.template,this.plugins=this.settings.plugins,void 0===j.regional.en&&e('"i18n/en.js" not loaded.'),this.lang=$.extendext(!0,"replace",{},j.regional.en,j.regional[this.settings.lang_code],this.settings.lang),null===this.template.group&&(this.template.group=this.getGroupTemplate),
 null===this.template.rule&&(this.template.rule=this.getRuleTemplate),this.$el.attr("id")||(this.$el.attr("id","qb_"+Math.floor(99999*Math.random())),this.status.generated_id=!0),this.status.id=this.$el.attr("id"),this.$el.addClass("query-builder form-inline"),this.checkFilters(),this.bindEvents(),this.initPlugins(),this.trigger("afterInit"),c.rules?(this.setRules(c.rules),delete this.settings.rules):this.setRoot(!0)},j.prototype.checkFilters=function(){var a=[],b=this;if(this.filters&&0!==this.filters.length||e("Missing filters list"),this.filters.forEach(function(c,d){switch(c.id||e("Missing filter {0} id",d),-1!=a.indexOf(c.id)&&e('Filter "{0}" already defined',c.id),a.push(c.id),c.type?j.types[c.type]||e('Invalid type "{0}"',c.type):c.type="string",c.input?"function"!=typeof c.input&&-1==j.inputs.indexOf(c.input)&&e('Invalid input "{0}"',c.input):c.input="text",c.field||(c.field=c.id),c.label||(c.label=c.field),c.optgroup?b.status.has_optgroup=!0:c.optgroup=null,c.input){case"rad
 io":case"checkbox":(!c.values||c.values.length<1)&&e('Missing filter "{0}" values',c.id)}}),this.status.has_optgroup){var c=[],d=[];this.filters.forEach(function(a){var b;a.optgroup?(b=c.lastIndexOf(a.optgroup),-1==b?b=c.length:b++):b=c.length,c.splice(b,0,a.optgroup),d.splice(b,0,a)}),this.filters=d}},j.prototype.bindEvents=function(){var b=this;this.$el.on("change.queryBuilder",".rules-group-header [name$=_cond]",function(){if($(this).is(":checked")){var b=$(this).closest(".rules-group-container");a(b).condition=$(this).val()}}),this.$el.on("change.queryBuilder",".rule-filter-container [name$=_filter]",function(){var c=$(this).closest(".rule-container");a(c).filter=b.getFilterById($(this).val())}),this.$el.on("change.queryBuilder",".rule-operator-container [name$=_operator]",function(){var c=$(this).closest(".rule-container");a(c).operator=b.getOperatorByType($(this).val())}),this.$el.on("click.queryBuilder","[data-add=rule]",function(){var c=$(this).closest(".rules-group-containe
 r");b.addRule(a(c))}),this.$el.on("click.queryBuilder","[data-delete=rule]",function(){var c=$(this).closest(".rule-container");b.deleteRule(a(c))}),0!==this.settings.allow_groups&&(this.$el.on("click.queryBuilder","[data-add=group]",function(){var c=$(this).closest(".rules-group-container");b.addGroup(a(c))}),this.$el.on("click.queryBuilder","[data-delete=group]",function(){var c=$(this).closest(".rules-group-container");b.deleteGroup(a(c))})),this.model.on({drop:function(a,b){b.$el.remove()},add:function(a,b,c){b.$el.detach(),0===c?b.$el.prependTo(b.parent.$el.find(">.rules-group-body>.rules-list")):b.$el.insertAfter(b.parent.rules[c-1].$el)},update:function(a,c,d,e,f){switch(d){case"error":b.displayError(c);break;case"condition":b.updateGroupCondition(c);break;case"filter":b.updateRuleFilter(c);break;case"operator":b.updateRuleOperator(c,f);break;case"flags":b.applyRuleFlags(c);break;case"value":b.updateRuleValue(c)}}})},j.prototype.setRoot=function(a,b){a=void 0===a||a===!0;var 
 c=this.nextGroupId(),d=$(this.template.group.call(this,c,1));return this.$el.append(d),this.model.root=new m(null,d),this.model.root.model=this.model,this.model.root.condition=this.settings.default_condition,void 0!==b&&(this.model.root.data=b),a&&this.addRule(this.model.root),this.model.root},j.prototype.addGroup=function(a,b,c){b=void 0===b||b===!0;var d=a.level+1,e=this.trigger("beforeAddGroup",a,b,d);if(e.isDefaultPrevented())return null;var f=this.nextGroupId(),g=$(this.template.group.call(this,f,d)),h=a.addGroup(g);return void 0!==c&&(h.data=c),this.trigger("afterAddGroup",h),h.condition=this.settings.default_condition,b&&this.addRule(h),h},j.prototype.deleteGroup=function(a){if(a.isRoot())return!1;var b=this.trigger("beforeDeleteGroup",a);if(b.isDefaultPrevented())return!1;var c=!0;return a.each("reverse",function(a){c&=this.deleteRule(a)},function(a){c&=this.deleteGroup(a)},this),c&&(a.drop(),this.trigger("afterDeleteGroup")),c},j.prototype.updateGroupCondition=function(a){a
 .$el.find(">.rules-group-header [name$=_cond]").each(function(){var b=$(this);b.prop("checked",b.val()===a.condition),b.parent().toggleClass("active",b.val()===a.condition)}),this.trigger("afterUpdateGroupCondition",a)},j.prototype.addRule=function(a,b){var c=this.trigger("beforeAddRule",a);if(c.isDefaultPrevented())return null;var d=this.nextRuleId(),e=$(this.template.rule.call(this,d)),f=a.addRule(e);return void 0!==b&&(f.data=b),this.trigger("afterAddRule",f),this.createRuleFilters(f),f},j.prototype.deleteRule=function(a){if(a.flags.no_delete)return!1;var b=this.trigger("beforeDeleteRule",a);return b.isDefaultPrevented()?!1:(a.drop(),this.trigger("afterDeleteRule"),!0)},j.prototype.createRuleFilters=function(a){var b=this.change("getRuleFilters",this.filters,a),c=$(this.getRuleFilterSelect(a,b));a.$el.find(".rule-filter-container").append(c),this.trigger("afterCreateRuleFilters",a)},j.prototype.createRuleOperators=function(a){var b=a.$el.find(".rule-operator-container").empty();i
 f(a.filter){var c=this.getOperators(a.filter),d=$(this.getRuleOperatorSelect(a,c));b.html(d),a.__.operator=c[0],this.trigger("afterCreateRuleOperators",a,c)}},j.prototype.createRuleInput=function(a){var b=a.$el.find(".rule-value-container").empty();if(a.__.value=void 0,a.filter&&a.operator&&0!==a.operator.nb_inputs){for(var c=this,d=$(),e=a.filter,f=0;f<a.operator.nb_inputs;f++){var g=$(this.getRuleInput(a,f));f>0&&b.append(this.settings.inputs_separator),b.append(g),d=d.add(g)}b.show(),d.on("change",function(){c.status.updating_value=!0,a.value=c.getRuleValue(a),c.status.updating_value=!1}),e.plugin&&d[e.plugin](e.plugin_config||{}),this.trigger("afterCreateRuleInput",a),void 0!==e.default_value&&(a.value=e.default_value)}},j.prototype.updateRuleFilter=function(a){this.createRuleOperators(a),this.createRuleInput(a),a.$el.find(".rule-filter-container [name$=_filter]").val(a.filter?a.filter.id:"-1"),this.trigger("afterUpdateRuleFilter",a)},j.prototype.updateRuleOperator=function(a,b)
 {var c=a.$el.find(".rule-value-container");a.operator&&0!==a.operator.nb_inputs?(c.show(),(c.is(":empty")||a.operator.nb_inputs!==b.nb_inputs)&&this.createRuleInput(a)):(c.hide(),a.__.value=void 0),a.operator&&a.$el.find(".rule-operator-container [name$=_operator]").val(a.operator.type),this.trigger("afterUpdateRuleOperator",a)},j.prototype.updateRuleValue=function(a){this.status.updating_value||this.setRuleValue(a,a.value),this.trigger("afterUpdateRuleValue",a)},j.prototype.applyRuleFlags=function(a){var b=a.flags;b.filter_readonly&&a.$el.find("[name$=_filter]").prop("disabled",!0),b.operator_readonly&&a.$el.find("[name$=_operator]").prop("disabled",!0),b.value_readonly&&a.$el.find("[name*=_value_]").prop("disabled",!0),b.no_delete&&a.$el.find("[data-delete=rule]").remove(),this.trigger("afterApplyRuleFlags",a)},j.prototype.clearErrors=function(a){a=a||this.model.root,a&&(a.error=null,a instanceof m&&a.each(function(a){a.error=null},function(a){this.clearErrors(a)},this))},j.protot
 ype.displayError=function(a){if(this.settings.display_errors)if(null===a.error)a.$el.removeClass("has-error");else{var b=$.extend([],a.error,[this.lang.errors[a.error[0]]||a.error[0]]);a.$el.addClass("has-error").find(".error-container").eq(0).attr("title",d.apply(null,b))}},j.prototype.triggerValidationError=function(a,b,c){$.isArray(b)||(b=[b]);var d=this.trigger("validationError",a,b,c);d.isDefaultPrevented()||(a.error=b)},j.prototype.destroy=function(){this.trigger("beforeDestroy"),this.status.generated_id&&this.$el.removeAttr("id"),this.clear(),this.model=null,this.$el.off(".queryBuilder").removeClass("query-builder").removeData("queryBuilder"),delete this.$el[0].queryBuilder},j.prototype.reset=function(){this.status.group_id=1,this.status.rule_id=0,this.model.root.empty(),this.addRule(this.model.root),this.trigger("afterReset")},j.prototype.clear=function(){this.status.group_id=0,this.status.rule_id=0,this.model.root&&(this.model.root.drop(),this.model.root=null),this.trigger(
 "afterClear")},j.prototype.setOptions=function(a){$.makeArray($(Object.keys(a)).filter(j.modifiable_options)).forEach(function(b){this.settings[b]=a[b]},this)},j.prototype.validate=function(){this.clearErrors();var a=this,b=function c(b){var d=0,e=0;return b.each(function(b){if(!b.filter)return a.triggerValidationError(b,"no_filter",null),void e++;if(0!==b.operator.nb_inputs){var c=a.validateValue(b,b.value);if(c!==!0)return a.triggerValidationError(b,c,b.value),void e++}d++},function(a){c(a)?d++:e++}),e>0?!1:0!==d||a.settings.allow_empty&&b.isRoot()?!0:(a.triggerValidationError(b,"empty_group",null),!1)}(this.model.root);return this.change("validate",b)},j.prototype.getRules=function(){if(!this.validate())return{};var a=function b(a){var c={condition:a.condition,rules:[]};return a.data&&(c.data=$.extendext(!0,"replace",{},a.data)),a.each(function(a){var b=null;0!==a.operator.nb_inputs&&(b=a.value);var d={id:a.filter.id,field:a.filter.field,type:a.filter.type,input:a.filter.input,op
 erator:a.operator.type,value:b};(a.filter.data||a.data)&&(d.data=$.extendext(!0,"replace",{},a.filter.data,a.data)),c.rules.push(d)},function(a){c.rules.push(b(a))}),c}(this.model.root);return this.change("getRules",a)},j.prototype.setRules=function(a){a&&a.rules&&(0!==a.rules.length||this.settings.allow_empty)||e("Incorrect data object passed"),this.clear(),this.setRoot(!1,a.data),a=this.change("setRules",a);var b=this;!function c(a,d){null!==d&&(void 0===a.condition?a.condition=b.settings.default_condition:-1==b.settings.conditions.indexOf(a.condition)&&e('Invalid condition "{0}"',a.condition),d.condition=a.condition,a.rules.forEach(function(a){var f;if(a.rules&&a.rules.length>0)-1!=b.settings.allow_groups&&b.settings.allow_groups<d.level?(b.reset(),e("No more than {0} groups are allowed",b.settings.allow_groups)):(f=b.addGroup(d,!1,a.data),c(a,f));else{if(void 0===a.id&&e("Missing rule field id"),void 0===a.operator&&(a.operator="equal"),f=b.addRule(d,a.data),null===f)return;f.fi
 lter=b.getFilterById(a.id),f.operator=b.getOperatorByType(a.operator),f.flags=b.parseRuleFlags(a),0!==f.operator.nb_inputs&&void 0!==a.value&&(f.value=a.value)}}))}(a,this.model.root)},j.prototype.validateValue=function(a,b){var c=a.filter.validation||{},d=!0;return d=c.callback?c.callback.call(this,b,a):this.validateValueInternal(a,b),this.change("validateValue",d,b,a)},j.prototype.validateValueInternal=function(a,b){var c,d=a.filter,f=a.operator,g=d.validation||{},h=!0;b=1===a.operator.nb_inputs?[b]:b;for(var i=0;i<f.nb_inputs;i++){switch(d.input){case"radio":if(void 0===b[i]){h=["radio_empty"];break}break;case"checkbox":if(void 0===b[i]||0===b[i].length){h=["checkbox_empty"];break}if(!f.multiple&&b[i].length>1){h=["operator_not_multiple",this.lang[f.type]||f.type];break}break;case"select":if(d.multiple){if(void 0===b[i]||0===b[i].length){h=["select_empty"];break}if(!f.multiple&&b[i].length>1){h=["operator_not_multiple",this.lang[f.type]||f.type];break}}else if(void 0===b[i]){h=["
 select_empty"];break}break;default:switch(j.types[d.type]){case"string":if(void 0===b[i]||0===b[i].length){h=["string_empty"];break}if(void 0!==g.min&&b[i].length<parseInt(g.min)){h=["string_exceed_min_length",g.min];break}if(void 0!==g.max&&b[i].length>parseInt(g.max)){h=["string_exceed_max_length",g.max];break}if(g.format&&("string"==typeof g.format&&(g.format=new RegExp(g.format)),!g.format.test(b[i]))){h=["string_invalid_format",g.format];break}break;case"number":if(void 0===b[i]||isNaN(b[i])){h=["number_nan"];break}if("integer"==d.type){if(parseInt(b[i])!=b[i]){h=["number_not_integer"];break}}else if(parseFloat(b[i])!=b[i]){h=["number_not_double"];break}if(void 0!==g.min&&b[i]<parseFloat(g.min)){h=["number_exceed_min",g.min];break}if(void 0!==g.max&&b[i]>parseFloat(g.max)){h=["number_exceed_max",g.max];break}if(void 0!==g.step){var k=b[i]/g.step;if(parseInt(k)!=k){h=["number_wrong_step",g.step];break}}break;case"datetime":if(void 0===b[i]||0===b[i].length){h=["datetime_empty"];
 break}if(g.format){"moment"in window||e("MomentJS is required for Date/Time validation");var l=moment(b[i],g.format);if(!l.isValid()){h=["datetime_invalid"];break}if(g.min&&l<moment(g.min,g.format)){h=["datetime_exceed_min",g.min];break}if(g.max&&l>moment(g.max,g.format)){h=["datetime_exceed_max",g.max];break}}break;case"boolean":if(c=b[i].trim().toLowerCase(),"true"!==c&&"false"!==c&&"1"!==c&&"0"!==c&&1!==b[i]&&0!==b[i]){h=["boolean_not_valid"];break}}}if(h!==!0)break}return h},j.prototype.nextGroupId=function(){return this.status.id+"_group_"+this.status.group_id++},j.prototype.nextRuleId=function(){return this.status.id+"_rule_"+this.status.rule_id++},j.prototype.getOperators=function(a){"string"==typeof a&&(a=this.getFilterById(a));for(var b=[],c=0,d=this.operators.length;d>c;c++){if(a.operators){if(-1==a.operators.indexOf(this.operators[c].type))continue}else if(-1==this.operators[c].apply_to.indexOf(j.types[a.type]))continue;b.push(this.operators[c])}return a.operators&&b.sort
 (function(b,c){return a.operators.indexOf(b.type)-a.operators.indexOf(c.type)}),this.change("getOperators",b,a)},j.prototype.getFilterById=function(a){if("-1"==a)return null;for(var b=0,c=this.filters.length;c>b;b++)if(this.filters[b].id==a)return this.filters[b];e('Undefined filter "{0}"',a)},j.prototype.getOperatorByType=function(a){if("-1"==a)return null;for(var b=0,c=this.operators.length;c>b;b++)if(this.operators[b].type==a)return this.operators[b];e('Undefined operator  "{0}"',a)},j.prototype.getRuleValue=function(a){var b=a.filter,c=a.operator,d=[];if(b.valueGetter)d=b.valueGetter.call(this,a);else{for(var e,f=a.$el.find(".rule-value-container"),g=0;g<c.nb_inputs;g++){var h=a.id+"_value_"+g;switch(b.input){case"radio":d.push(f.find("[name="+h+"]:checked").val());break;case"checkbox":e=[],f.find("[name="+h+"]:checked").each(function(){e.push($(this).val())}),d.push(e);break;case"select":b.multiple?(e=[],f.find("[name="+h+"] option:selected").each(function(){e.push($(this).val(
 ))}),d.push(e)):d.push(f.find("[name="+h+"] option:selected").val());break;default:d.push(f.find("[name="+h+"]").val())}}1===c.nb_inputs&&(d=d[0]),b.valueParser&&(d=b.valueParser.call(this,a,d))}return this.change("getRuleValue",d,a)},j.prototype.setRuleValue=function(a,b){var c=a.filter,d=a.operator;if(c.valueSetter)c.valueSetter.call(this,a,b);else{var e=a.$el.find(".rule-value-container");b=1==d.nb_inputs?[b]:b;for(var f=0;f<d.nb_inputs;f++){var g=a.id+"_value_"+f;switch(c.input){case"radio":e.find("[name="+g+'][value="'+b[f]+'"]').prop("checked",!0).trigger("change");break;case"checkbox":$.isArray(b[f])||(b[f]=[b[f]]),b[f].forEach(function(a){e.find("[name="+g+'][value="'+a+'"]').prop("checked",!0).trigger("change")});break;default:e.find("[name="+g+"]").val(b[f]).trigger("change")}}}},j.prototype.parseRuleFlags=function(a){var b=$.extend({},this.settings.default_rule_flags);return a.readonly&&$.extend(b,{filter_readonly:!0,operator_readonly:!0,value_readonly:!0,no_delete:!0}),a
 .flags&&$.extend(b,a.flags),this.change("parseRuleFlags",b,a)},j.prototype.getGroupTemplate=function(a,b){var c='<dl id="'+a+'" class="rules-group-container">   <dt class="rules-group-header">     <div class="btn-group pull-right group-actions">       <button type="button" class="btn btn-xs btn-success" data-add="rule">         <i class="'+this.icons.add_rule+'"></i> '+this.lang.add_rule+"       </button>       "+(-1===this.settings.allow_groups||this.settings.allow_groups>=b?'<button type="button" class="btn btn-xs btn-success" data-add="group">           <i class="'+this.icons.add_group+'"></i> '+this.lang.add_group+"         </button>":"")+"       "+(b>1?'<button type="button" class="btn btn-xs btn-danger" data-delete="group">           <i class="'+this.icons.remove_group+'"></i> '+this.lang.delete_group+"         </button>":"")+'     </div>     <div class="btn-group group-conditions">       '+this.getGroupConditions(a,b)+"     </div>     "+(this.settings.display_errors?'<div cla
 ss="error-container"><i class="'+this.icons.error+'"></i></div>':"")+"  </dt>   <dd class=rules-group-body>     <ul class=rules-list></ul>   </dd> </dl>";return this.change("getGroupTemplate",c,b)},j.prototype.getGroupConditions=function(a,b){for(var c="",d=0,e=this.settings.conditions.length;e>d;d++){var f=this.settings.conditions[d],g=this.lang.conditions[f]||f;c+='        <label class="btn btn-xs btn-primary">           <input type="radio" name="'+a+'_cond" value="'+f+'"> '+g+"         </label>"}return this.change("getGroupConditions",c,b)},j.prototype.getRuleTemplate=function(a){var b='<li id="'+a+'" class="rule-container">   <div class="rule-header">   <div class="btn-group pull-right rule-actions">     <button type="button" class="btn btn-xs btn-danger" data-delete="rule">       <i class="'+this.icons.remove_rule+'"></i> '+this.lang.delete_rule+"     </button>   </div>   </div>   "+(this.settings.display_errors?'<div class="error-container"><i class="'+this.icons.error+'"></i>
 </div>':"")+'  <div class="rule-filter-container"></div>   <div class="rule-operator-container"></div>   <div class="rule-value-container"></div> </li>';return this.change("getRuleTemplate",b)},j.prototype.getRuleFilterSelect=function(a,b){var c=null,d='<select class="form-control" name="'+a.id+'_filter">';return d+='<option value="-1">'+this.settings.select_placeholder+"</option>",b.forEach(function(a){c!=a.optgroup&&(null!==c&&(d+="</optgroup>"),c=a.optgroup,null!==c&&(d+='<optgroup label="'+c+'">')),d+='<option value="'+a.id+'">'+a.label+"</option>"}),null!==c&&(d+="</optgroup>"),d+="</select>",this.change("getRuleFilterSelect",d,a)},j.prototype.getRuleOperatorSelect=function(a,b){for(var c='<select class="form-control" name="'+a.id+'_operator">',d=0,e=b.length;e>d;d++){var f=this.lang.operators[b[d].type]||b[d].type;c+='<option value="'+b[d].type+'">'+f+"</option>"}return c+="</select>",this.change("getRuleOperatorSelect",c,a)},j.prototype.getRuleInput=function(a,b){var d=a.filt
 er,e=a.filter.validation||{},f=a.id+"_value_"+b,g=d.vertical?" class=block":"",h="";if("function"==typeof d.input)h=d.input.call(this,a,f);else switch(d.input){case"radio":c(d.values,function(a,b){h+="<label"+g+'><input type="radio" name="'+f+'" value="'+a+'"> '+b+"</label> "});break;case"checkbox":c(d.values,function(a,b){h+="<label"+g+'><input type="checkbox" name="'+f+'" value="'+a+'"> '+b+"</label> "});break;case"select":h+='<select class="form-control" name="'+f+'"'+(d.multiple?" multiple":"")+">",c(d.values,function(a,b){h+='<option value="'+a+'"> '+b+"</option> "}),h+="</select>";break;case"textarea":h+='<textarea class="form-control" name="'+f+'"',d.size&&(h+=' cols="'+d.size+'"'),d.rows&&(h+=' rows="'+d.rows+'"'),void 0!==e.min&&(h+=' minlength="'+e.min+'"'),void 0!==e.max&&(h+=' maxlength="'+e.max+'"'),d.placeholder&&(h+=' placeholder="'+d.placeholder+'"'),h+="></textarea>";break;default:switch(j.types[d.type]){case"number":h+='<input class="form-control" type="number" nam
 e="'+f+'"',void 0!==e.step&&(h+=' step="'+e.step+'"'),void 0!==e.min&&(h+=' min="'+e.min+'"'),void 0!==e.max&&(h+=' max="'+e.max+'"'),d.placeholder&&(h+=' placeholder="'+d.placeholder+'"'),d.size&&(h+=' size="'+d.size+'"'),h+=">";break;default:h+='<input class="form-control" type="text" name="'+f+'"',d.placeholder&&(h+=' placeholder="'+d.placeholder+'"'),"string"===d.type&&void 0!==e.min&&(h+=' minlength="'+e.min+'"'),"string"===d.type&&void 0!==e.max&&(h+=' maxlength="'+e.max+'"'),d.size&&(h+=' size="'+d.size+'"'),h+=">"}}return this.change("getRuleInput",h,a,f)},$.extend(a.prototype,{trigger:function(a){return this.$.triggerHandler(a,k.call(arguments,1)),this},on:function(){return this.$.on.apply(this.$,k.call(arguments)),this},off:function(){return this.$.off.apply(this.$,k.call(arguments)),this},once:function(){return this.$.one.apply(this.$,k.call(arguments)),this}}),a.getModel=function(a){return a?a instanceof l?a:$(a).data("queryBuilderModel"):null};var l=function(a,b){return
  this instanceof l?(Object.defineProperty(this,"__",{value:{}}),b.data("queryBuilderModel",this),this.__.level=0,this.__.error=null,this.__.data=void 0,this.$el=b,this.id=b[0].id,this.model=null,void(this.parent=a)):new l};b(l,["level","error","data"]),Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){return this.__.parent},set:function(a){this.__.parent=a,this.level=null===a?1:a.level+1,this.model=null===a?null:a.model}}),l.prototype.isRoot=function(){return 1===this.level},l.prototype.getPos=function(){return this.isRoot()?-1:this.parent.getNodePos(this)},l.prototype.drop=function(){null!==this.model&&this.model.trigger("drop",this),this.isRoot()||(this.parent._dropNode(this),this.parent=null)},l.prototype.moveAfter=function(a){return this.isRoot()?void 0:(this.parent._dropNode(this),a.parent._addNode(this,a.getPos()+1),this)},l.prototype.moveAtBegin=function(a){return this.isRoot()?void 0:(void 0===a&&(a=this.parent),this.parent._dropNode(this),a._addNode(t
 his,0),this)},l.prototype.moveAtEnd=function(a){return this.isRoot()?void 0:(void 0===a&&(a=this.parent),this.parent._dropNode(this),a._addNode(this,a.length()),this)};var m=function(a,b){return this instanceof m?(l.call(this,a,b),this.rules=[],void(this.__.condition=null)):new m(a,b)};m.prototype=Object.create(l.prototype),m.prototype.constructor=m,b(m,["condition"]),m.prototype.empty=function(){this.each("reverse",function(a){a.drop()},function(a){a.drop()})},m.prototype.drop=function(){this.empty(),l.prototype.drop.call(this)},m.prototype.length=function(){return this.rules.length},m.prototype._addNode=function(a,b){return void 0===b&&(b=this.length()),this.rules.splice(b,0,a),a.parent=this,null!==this.model&&this.model.trigger("add",a,b),a},m.prototype.addGroup=function(a,b){return this._addNode(new m(this,a),b)},m.prototype.addRule=function(a,b){return this._addNode(new n(this,a),b)},m.prototype._dropNode=function(a){var b=this.getNodePos(a);return-1!==b&&(a.parent=null,this.ru
 les.splice(b,1)),this},m.prototype.getNodePos=function(a){return this.rules.indexOf(a)},m.prototype.each=function(a,b,c,d){"function"==typeof a&&(d=c,c=b,b=a,a=!1),d=void 0===d?null:d;for(var e=a?this.rules.length-1:0,f=a?0:this.rules.length-1,g=a?-1:1,h=function(){return a?e>=f:f>=e},i=!1;h()&&(this.rules[e]instanceof m?void 0!==c&&(i=c.call(d,this.rules[e])===!1):i=b.call(d,this.rules[e])===!1,!i);e+=g);return!i},m.prototype.contains=function(a,b){return-1!==this.getNodePos(a)?!0:b?!this.each(function(){return!0},function(b){return!b.contains(a,!0)}):!1};var n=function(a,b){return this instanceof n?(l.call(this,a,b),this.__.filter=null,this.__.operator=null,this.__.flags={},void(this.__.value=void 0)):new n(a,b)};n.prototype=Object.create(l.prototype),n.prototype.constructor=n,b(n,["filter","operator","flags","value"]),j.Group=m,j.Rule=n,$.fn.queryBuilder=function(a){this.length>1&&e("Unable to initialize on multiple target");var b=this.data("queryBuilder"),c="object"==typeof a&&a
 ||{};return b||"destroy"!=a?(b||this.data("queryBuilder",new j(this,c)),"string"==typeof a?b[a].apply(b,Array.prototype.slice.call(arguments,1)):this):this},$.fn.queryBuilder.constructor=j,$.fn.queryBuilder.defaults=j.defaults,$.fn.queryBuilder.extend=j.extend,$.fn.queryBuilder.define=j.define,$.fn.queryBuilder.regional=j.regional,j.define("bt-checkbox",function(a){if("glyphicons"==a.font){var b=document.createElement("style");b.innerHTML='.checkbox input[type=checkbox]:checked + label:after {     font-family: "Glyphicons Halflings";     content: "\\e013"; } .checkbox label:after {     padding-left: 4px;     padding-top: 2px;     font-size: 9px; }',document.body.appendChild(b)}this.on("getRuleInput.filter",function(b,d,e){var f=d.filter;if(("radio"===f.input||"checkbox"===f.input)&&!f.plugin){b.value="",f.colors||(f.colors={}),f.color&&(f.colors._def_=f.color);var g,h,i=f.vertical?' style="display:block"':"",j=0;c(f.values,function(c,d){g=f.colors[c]||f.colors._def_||a.color,h=e+"_"
 +j++,b.value+="<div"+i+' class="'+f.input+" "+f.input+"-"+g+'">   <input type="'+f.input+'" name="'+e+'" id="'+h+'" value="'+c+'">   <label for="'+h+'">'+d+"</label> </div>"})}})},{font:"glyphicons",color:"default"}),j.define("bt-selectpicker",function(a){$.fn.selectpicker&&$.fn.selectpicker.Constructor||e('Bootstrap Select is required to use "bt-selectpicker" plugin. Get it here: http://silviomoreto.github.io/bootstrap-select'),this.on("afterCreateRuleFilters",function(b,c){c.$el.find(".rule-filter-container select").removeClass("form-control").selectpicker(a)}),this.on("afterCreateRuleOperators",function(b,c){c.$el.find(".rule-operator-container select").removeClass("form-control").selectpicker(a)}),this.on("afterUpdateRuleFilter",function(a,b){b.$el.find(".rule-filter-container select").selectpicker("render")}),this.on("afterUpdateRuleOperator",function(a,b){b.$el.find(".rule-operator-container select").selectpicker("render")})},{container:"body",style:"btn-inverse btn-xs",width:
 "auto",showIcon:!1}),j.define("bt-tooltip-errors",function(a){$.fn.tooltip&&$.fn.tooltip.Constructor&&$.fn.tooltip.Constructor.prototype.fixTitle||e('Bootstrap Tooltip is required to use "bt-tooltip-errors" plugin. Get it here: http://getbootstrap.com');
-
-    var b=this;this.on("getRuleTemplate.filter",function(a){a.value=a.value.replace('class="error-container"','class="error-container" data-toggle="tooltip"')}),this.on("getGroupTemplate.filter",function(a){a.value=a.value.replace('class="error-container"','class="error-container" data-toggle="tooltip"')}),this.model.on("update",function(c,d,e){"error"==e&&b.settings.display_errors&&d.$el.find(".error-container").eq(0).tooltip(a).tooltip("hide").tooltip("fixTitle")})},{placement:"right"}),j.define("filter-description",function(a){"inline"===a.mode?this.on("afterUpdateRuleFilter",function(b,c){var d=c.$el.find("p.filter-description");c.filter&&c.filter.description?(0===d.length?(d=$('<p class="filter-description"></p>'),d.appendTo(c.$el)):d.show(),d.html('<i class="'+a.icon+'"></i> '+c.filter.description)):d.hide()}):"popover"===a.mode?($.fn.popover&&$.fn.popover.Constructor&&$.fn.popover.Constructor.prototype.fixTitle||e('Bootstrap Popover is required to use "filter-description" plu
 gin. Get it here: http://getbootstrap.com'),this.on("afterUpdateRuleFilter",function(b,c){var d=c.$el.find("button.filter-description");c.filter&&c.filter.description?(0===d.length?(d=$('<button type="button" class="btn btn-xs btn-info filter-description" data-toggle="popover"><i class="'+a.icon+'"></i></button>'),d.prependTo(c.$el.find(".rule-actions")),d.popover({placement:"left",container:"body",html:!0}),d.on("mouseout",function(){d.popover("hide")})):d.show(),d.data("bs.popover").options.content=c.filter.description,d.attr("aria-describedby")&&d.popover("show")):(d.hide(),d.data("bs.popover")&&d.popover("hide"))})):"bootbox"===a.mode&&("bootbox"in window||e('Bootbox is required to use "filter-description" plugin. Get it here: http://bootboxjs.com'),this.on("afterUpdateRuleFilter",function(b,c){var d=c.$el.find("button.filter-description");c.filter&&c.filter.description?(0===d.length&&(d=$('<button type="button" class="btn btn-xs btn-info filter-description" data-toggle="bootbox
 "><i class="'+a.icon+'"></i></button>'),d.prependTo(c.$el.find(".rule-actions")),d.on("click",function(){bootbox.alert(d.data("description"))})),d.data("description",c.filter.description)):d.hide()}))},{icon:"glyphicon glyphicon-info-sign",mode:"popover"}),j.defaults({loopbackOperators:{equal:function(a){return a[0]},not_equal:function(a){return{neq:a[0]}},"in":function(a){return{inq:a}},not_in:function(a){return{nin:a}},less:function(a){return{lt:a[0]}},less_or_equal:function(a){return{lte:a[0]}},greater:function(a){return{gt:a[0]}},greater_or_equal:function(a){return{gte:a[0]}},between:function(a){return{between:a}},begins_with:function(a){return{like:"^"+h(a[0])}},not_begins_with:function(a){return{nlike:"^"+h(a[0])}},contains:function(a){return{like:h(a[0])}},not_contains:function(a){return{nlike:h(a[0])}},ends_with:function(a){return{like:h(a[0])+"$"}},not_ends_with:function(a){return{nlike:h(a[0])+"$"}},is_empty:function(){return""},is_not_empty:function(){return{neq:""}},is_n
 ull:function(){return null},is_not_null:function(){return{neq:null}}}}),j.extend({getLoopback:function(a){a=void 0===a?this.getRules():a;var b=this;return function c(a){if(a.condition||(a.condition=b.settings.default_condition),-1===["AND","OR"].indexOf(a.condition.toUpperCase())&&e('Unable to build Loopback query with condition "{0}"',a.condition),!a.rules)return{};var d=[];a.rules.forEach(function(a){if(a.rules&&a.rules.length>0)d.push(c(a));else{var g=b.settings.loopbackOperators[a.operator],h=b.getOperatorByType(a.operator),i=[];void 0===g&&e('Unknown Loopback operation for operator "{0}"',a.operator),0!==h.nb_inputs&&(a.value instanceof Array||(a.value=[a.value]),a.value.forEach(function(b){i.push(f(b,a.type))}));var j={};j[a.field]=g.call(b,i),d.push(j)}});var g={};return d.length>0&&(g[a.condition.toLowerCase()]=d),g}(a)}}),j.defaults({mongoOperators:{equal:function(a){return a[0]},not_equal:function(a){return{$ne:a[0]}},"in":function(a){return{$in:a}},not_in:function(a){retu
 rn{$nin:a}},less:function(a){return{$lt:a[0]}},less_or_equal:function(a){return{$lte:a[0]}},greater:function(a){return{$gt:a[0]}},greater_or_equal:function(a){return{$gte:a[0]}},between:function(a){return{$gte:a[0],$lte:a[1]}},begins_with:function(a){return{$regex:"^"+h(a[0])}},not_begins_with:function(a){return{$regex:"^(?!"+h(a[0])+")"}},contains:function(a){return{$regex:h(a[0])}},not_contains:function(a){return{$regex:"^((?!"+h(a[0])+").)*$",$options:"s"}},ends_with:function(a){return{$regex:h(a[0])+"$"}},not_ends_with:function(a){return{$regex:"(?<!"+h(a[0])+")$"}},is_empty:function(){return""},is_not_empty:function(){return{$ne:""}},is_null:function(){return null},is_not_null:function(){return{$ne:null}}},mongoRuleOperators:{$ne:function(a){return a=a.$ne,{val:a,op:null===a?"is_not_null":""===a?"is_not_empty":"not_equal"}},eq:function(a){return{val:a,op:null===a?"is_null":""===a?"is_empty":"equal"}},$regex:function(a){return a=a.$regex,"^(?!"==a.slice(0,4)&&")"==a.slice(-1)?{v
 al:a.slice(4,-1),op:"not_begins_with"}:"^((?!"==a.slice(0,5)&&").)*$"==a.slice(-5)?{val:a.slice(5,-5),op:"not_contains"}:"(?<!"==a.slice(0,4)&&")$"==a.slice(-2)?{val:a.slice(4,-2),op:"not_ends_with"}:"$"==a.slice(-1)?{val:a.slice(0,-1),op:"ends_with"}:"^"==a.slice(0,1)?{val:a.slice(1),op:"begins_with"}:{val:a,op:"contains"}},between:function(a){return{val:[a.$gte,a.$lte],op:"between"}},$in:function(a){return{val:a.$in,op:"in"}},$nin:function(a){return{val:a.$nin,op:"not_in"}},$lt:function(a){return{val:a.$lt,op:"less"}},$lte:function(a){return{val:a.$lte,op:"less_or_equal"}},$gt:function(a){return{val:a.$gt,op:"greater"}},$gte:function(a){return{val:a.$gte,op:"greater_or_equal"}}}}),j.extend({getMongo:function(a){a=void 0===a?this.getRules():a;var b=this;return function c(a){if(a.condition||(a.condition=b.settings.default_condition),-1===["AND","OR"].indexOf(a.condition.toUpperCase())&&e('Unable to build MongoDB query with condition "{0}"',a.condition),!a.rules)return{};var d=[];a.r
 ules.forEach(function(a){if(a.rules&&a.rules.length>0)d.push(c(a));else{var g=b.settings.mongoOperators[a.operator],h=b.getOperatorByType(a.operator),i=[];void 0===g&&e('Unknown MongoDB operation for operator "{0}"',a.operator),0!==h.nb_inputs&&(a.value instanceof Array||(a.value=[a.value]),a.value.forEach(function(b){i.push(f(b,a.type,!1))}));var j={};j[a.field]=g.call(b,i),d.push(j)}});var g={};return d.length>0&&(g["$"+a.condition.toLowerCase()]=d),g}(a)},getRulesFromMongo:function(a){if(void 0===a||null===a)return null;var b=this,c=["$and","$or"];return function d(a){var f=Object.keys(a);f.length>1&&e("Invalid MongoDB query format."),-1===c.indexOf(f[0].toLowerCase())&&e('Unable to build Rule from MongoDB query with condition "{0}"',f[0]);var g=f[0].toLowerCase()===c[0]?"AND":"OR",h=a[f[0]],i=[];h.forEach(function(a){var f=Object.keys(a);if(-1!==c.indexOf(f[0].toLowerCase()))i.push(d(a));else{var g=f[0],h=a[g],j=b.determineMongoOperator(h,g);void 0===j&&e("Invalid MongoDB query 
 format.");var k=b.settings.mongoRuleOperators[j];void 0===k&&e('JSON Rule operation unknown for operator "{0}"',j);var l=k.call(b,h);i.push({id:b.change("getMongoDBFieldID",g,h),field:g,operator:l.op,value:l.val})}});var j={};return i.length>0&&(j.condition=g,j.rules=i),j}(a)},determineMongoOperator:function(a){if(null!==a&&"object"==typeof a){var b=Object.keys(a);return 1===b.length?b[0]:void 0!==a.$gte&&void 0!==a.$lte?"between":void 0!==a.$regex?"$regex":void 0}return"eq"},setRulesFromMongo:function(a){this.setRules(this.getRulesFromMongo(a))}}),j.define("sortable",function(b){this.on("afterInit",function(b){$.event.props.push("dataTransfer");var c,d,e=b.builder;e.$el.on("mouseover",".drag-handle",function(){e.$el.find(".rule-container, .rules-group-container").attr("draggable",!0)}),e.$el.on("mouseout",".drag-handle",function(){e.$el.find(".rule-container, .rules-group-container").removeAttr("draggable")}),e.$el.on("dragstart","[draggable]",function(b){b.stopPropagation(),b.data
 Transfer.setData("text","drag"),d=a(b.target),setTimeout(function(){var a=$('<div class="rule-placeholder">&nbsp;</div>');a.css("min-height",d.$el.height()),c=d.parent.addRule(a,d.getPos()),d.$el.hide()},0)}),e.$el.on("dragenter","[draggable]",function(a){a.preventDefault(),a.stopPropagation(),c&&i(c,$(a.target))}),e.$el.on("dragover","[draggable]",function(a){a.preventDefault(),a.stopPropagation()}),e.$el.on("drop",function(a){a.preventDefault(),a.stopPropagation(),i(d,$(a.target))}),e.$el.on("dragend","[draggable]",function(a){a.preventDefault(),a.stopPropagation(),d.$el.show(),c.drop(),d=c=null,e.$el.find(".rule-container, .rules-group-container").removeAttr("draggable")})}),this.on("parseRuleFlags.filter",function(a){void 0===a.value.no_sortable&&(a.value.no_sortable=b.default_no_sortable)}),this.on("afterApplyRuleFlags",function(a,b){b.flags.no_sortable&&b.$el.find(".drag-handle").remove()}),this.on("getGroupTemplate.filter",function(a,c){if(c>1){var d=$(a.value);d.find(".group
 -conditions").after('<div class="drag-handle"><i class="'+b.icon+'"></i></div>'),a.value=d.prop("outerHTML")}}),this.on("getRuleTemplate.filter",function(a){var c=$(a.value);c.find(".rule-header").after('<div class="drag-handle"><i class="'+b.icon+'"></i></div>'),a.value=c.prop("outerHTML")})},{default_no_sortable:!1,icon:"glyphicon glyphicon-sort"}),j.defaults({sqlOperators:{equal:"= ?",not_equal:"!= ?","in":{op:"IN(?)",sep:", "},not_in:{op:"NOT IN(?)",sep:", "},less:"< ?",less_or_equal:"<= ?",greater:"> ?",greater_or_equal:">= ?",between:{op:"BETWEEN ?",sep:" AND "},begins_with:{op:"LIKE(?)",fn:function(a){return a+"%"}},not_begins_with:{op:"NOT LIKE(?)",fn:function(a){return a+"%"}},contains:{op:"LIKE(?)",fn:function(a){return"%"+a+"%"}},not_contains:{op:"NOT LIKE(?)",fn:function(a){return"%"+a+"%"}},ends_with:{op:"LIKE(?)",fn:function(a){return"%"+a}},not_ends_with:{op:"NOT LIKE(?)",fn:function(a){return"%"+a}},is_empty:'== ""',is_not_empty:'!= ""',is_null:"IS NULL",is_not_null:
 "IS NOT NULL"},sqlStatements:{question_mark:function(){var a=[];return{add:function(b,c){return a.push(c),"?"},run:function(){return a}}},numbered:function(){var a=0,b=[];return{add:function(c,d){return b.push(d),a++,"$"+a},run:function(){return b}}},named:function(){var a={},b={};return{add:function(c,d){a[c.field]||(a[c.field]=0),a[c.field]++;var e=c.field+"_"+a[c.field];return b[e]=d,":"+e},run:function(){return b}}}}}),j.extend({getSQL:function(a,b,c){c=void 0===c?this.getRules():c,b=b===!0?"\n":" ",(a===!0||void 0===a)&&(a="question_mark"),"string"==typeof a&&(a=this.settings.sqlStatements[a]());var d=this,h=function i(c){if(c.condition||(c.condition=d.settings.default_condition),-1===["AND","OR"].indexOf(c.condition.toUpperCase())&&e('Unable to build SQL query with condition "{0}"',c.condition),!c.rules)return"";var h=[];return c.rules.forEach(function(c){if(c.rules&&c.rules.length>0)h.push("("+b+i(c)+b+")"+b);else{var j=d.getSqlOperator(c.operator),k=d.getOperatorByType(c.ope
 rator),l="";j===!1&&e('Unknown SQL operation for operator "{0}"',c.operator),0!==k.nb_inputs&&(c.value instanceof Array||(c.value=[c.value]),c.value.forEach(function(b,d){d>0&&(l+=j.sep),"integer"==c.type||"double"==c.type||"boolean"==c.type?b=f(b,c.type,!0):a||(b=g(b)),j.fn&&(b=j.fn(b)),a?l+=a.add(c,b):("string"==typeof b&&(b="'"+b+"'"),l+=b)})),h.push(c.field+" "+j.op.replace(/\?/,l))}}),h.join(" "+c.condition+b)}(c);return a?{sql:h,params:a.run()}:{sql:h}},getSqlOperator:function(a){var b=this.settings.sqlOperators[a];return void 0===b?!1:("string"==typeof b&&(b={op:b}),b.list&&!b.sep&&(b.sep=", "),b)}}),j.define("unique-filter",function(){this.status.used_filters={},this.on("afterUpdateRuleFilter",this.updateDisabledFilters),this.on("afterDeleteRule",this.updateDisabledFilters),this.on("afterCreateRuleFilters",this.applyDisabledFilters)}),j.extend({updateDisabledFilters:function(a){var b=a.builder;b.status.used_filters={},b.model&&(!function c(a){a.each(function(a){a.filter&&a.f
 ilter.unique&&(b.status.used_filters[a.filter.id]||(b.status.used_filters[a.filter.id]=[]),"group"==a.filter.unique&&b.status.used_filters[a.filter.id].push(a.parent))},function(a){c(a)})}(b.model.root),b.applyDisabledFilters(a))},applyDisabledFilters:function(a){var b=a.builder;b.$el.find(".rule-filter-container option").prop("disabled",!1),$.each(b.status.used_filters,function(a,c){0===c.length?b.$el.find('.rule-filter-container option[value="'+a+'"]:not(:selected)').prop("disabled",!0):c.forEach(function(b){b.each(function(b){b.$el.find('.rule-filter-container option[value="'+a+'"]:not(:selected)').prop("disabled",!0)})})}),b.settings.plugins&&b.settings.plugins["bt-selectpicker"]&&b.$el.find(".rule-filter-container select").selectpicker("render")}}),j.regional.en={__locale:"English (en)",__author:'Damien "Mistic" Sorel, http://www.strangeplanet.fr',add_rule:"Add rule",add_group:"Add group",delete_rule:"Delete",delete_group:"Delete",conditions:{AND:"AND",OR:"OR"},operators:{equal
 :"equal",not_equal:"not equal","in":"in",not_in:"not in",less:"less",less_or_equal:"less or equal",greater:"greater",greater_or_equal:"greater or equal",between:"between",begins_with:"begins with",not_begins_with:"doesn't begin with",contains:"contains",not_contains:"doesn't contain",ends_with:"ends with",not_ends_with:"doesn't end with",is_empty:"is empty",is_not_empty:"is not empty",is_null:"is null",is_not_null:"is not null"},errors:{no_filter:"No filter selected",empty_group:"The group is empty",radio_empty:"No value selected",checkbox_empty:"No value selected",select_empty:"No value selected",string_empty:"Empty value",string_exceed_min_length:"Must contain at least {0} characters",string_exceed_max_length:"Must not contain more than {0} characters",string_invalid_format:"Invalid format ({0})",number_nan:"Not a number",number_not_integer:"Not an integer",number_not_double:"Not a real number",number_exceed_min:"Must be greater than {0}",number_exceed_max:"Must be lower than {0}"
 ,number_wrong_step:"Must be a multiple of {0}",datetime_empty:"Empty value",datetime_invalid:"Invalid date format ({0})",datetime_exceed_min:"Must be after {0}",datetime_exceed_max:"Must be before {0}",boolean_not_valid:"Not a boolean",operator_not_multiple:"Operator {0} cannot accept multiple values"}},j.defaults({lang_code:"en"})});
\ No newline at end of file