Forums » Development »
What is the intented way for custom operators and custom operators_by_filter_type
Added by Angelinsky7 Angelinsky7 almost 5 years ago
Hello,
i would like to know what is the correct way of adding a custom operator and operator filter to a field in redmine.
i understand that you can add operator this way :
def initialize_available_filters_with_myplugin
if operators["sbl"].blank?
operators["sbl"]=:op_before_last
operators["sl"]=:op_last
operators_by_filter_type[:list_my_plugin_optional] = operators_by_filter_type[:list_optional] + ["sbl","sl"]
end
add_available_filter 'my_field_plugin_id', :type => :list_my_plugin_optional, :values => my_other_fields.sort.collect{|s| [s.name, s.id.to_s]}
end
alias_method :initialize_available_filters_without_myplugin, :initialize_available_filters
alias_method :initialize_available_filters, :initialize_available_filters_with_myplugin
and extending the sql_for_field like this
def sql_for_field_with_myplugin(field, operator, value, db_table, db_field, is_custom_filter=false)
logger.error "before: #{field}, #{operator}, #{value}, #{db_table}, #{db_field}, #{is_custom_filter}"
sql=case operator
when "sbl"
# generate sql here
when "sl"
# generate sql here
else
sql_for_field_without_scrum(field, operator, value, db_table, db_field, is_custom_filter)
end
sql
end
alias_method :sql_for_field_without_myplugin, :sql_for_field
alias_method :sql_for_field, :sql_for_field_with_myplugin
and everything is working fine IF is don't create a new operators_by_filter_type (like here) but extends an existing one (like 'list_optional')
because of those line in application.js (in buildFilterRow line 156 and toggleOperator line 266)
switch (filterOptions['type']) {
case "list":
case "list_optional":
case "list_status":
case "list_subprojects":
... follow a long list of type without any way to extend it
.
.
.
switch (operator.val()) {
case "!*":
case "*":
case "t":
case "ld":
case "w":
case "lw":
case "l2w":
case "m":
case "lm":
case "y":
case "o":
case "c":
case "*o":
case "!o":
enableValues(field, []);
... follow a long list of operator without any way to extend it
my new type of filter obviously don't exist and my new type of filter neither.
How could i add them to the list and how could i make my new filter and filter operator work correctly (without patching by hand the application.js file)
Thanks to anyone that could help me !!!
Angle