diff --git a/.editorconfig b/.editorconfig index 317d36083..40f166a06 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,5 @@ +root = true + [*] charset = utf-8 end_of_line = lf @@ -11,7 +13,7 @@ ij_formatter_off_tag = @formatter:off ij_formatter_on_tag = @formatter:on ij_formatter_tags_enabled = false ij_smart_tabs = false -ij_visual_guides = 80, 120, 140 +ij_visual_guides = 140 ij_wrap_on_typing = true [*.css] @@ -33,53 +35,9 @@ ij_css_space_after_colon = true ij_css_space_before_opening_brace = true ij_css_value_alignment = 0 -[*.csv] -max_line_length = 2147483647 -ij_wrap_on_typing = false -ij_csv_wrap_long_lines = false - -[*.feature] -indent_size = 2 -ij_gherkin_keep_indents_on_empty_lines = false - -[*.less] -indent_size = 2 -ij_less_align_closing_brace_with_properties = false -ij_less_blank_lines_around_nested_selector = 1 -ij_less_blank_lines_between_blocks = 1 -ij_less_brace_placement = 0 -ij_less_hex_color_long_format = false -ij_less_hex_color_lower_case = false -ij_less_hex_color_short_format = false -ij_less_hex_color_upper_case = false -ij_less_keep_blank_lines_in_code = 2 -ij_less_keep_indents_on_empty_lines = false -ij_less_keep_single_line_blocks = false -ij_less_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow -ij_less_space_after_colon = true -ij_less_space_before_opening_brace = true -ij_less_value_alignment = 0 - -[*.sass] -indent_size = 2 -ij_sass_align_closing_brace_with_properties = false -ij_sass_blank_lines_around_nested_selector = 1 -ij_sass_blank_lines_between_blocks = 1 -ij_sass_brace_placement = 0 -ij_sass_hex_color_long_format = false -ij_sass_hex_color_lower_case = false -ij_sass_hex_color_short_format = false -ij_sass_hex_color_upper_case = false -ij_sass_keep_blank_lines_in_code = 2 -ij_sass_keep_indents_on_empty_lines = false -ij_sass_keep_single_line_blocks = false -ij_sass_properties_order = font,font-family,font-size,font-weight,font-style,font-variant,font-size-adjust,font-stretch,line-height,position,z-index,top,right,bottom,left,display,visibility,float,clear,overflow,overflow-x,overflow-y,clip,zoom,align-content,align-items,align-self,flex,flex-flow,flex-basis,flex-direction,flex-grow,flex-shrink,flex-wrap,justify-content,order,box-sizing,width,min-width,max-width,height,min-height,max-height,margin,margin-top,margin-right,margin-bottom,margin-left,padding,padding-top,padding-right,padding-bottom,padding-left,table-layout,empty-cells,caption-side,border-spacing,border-collapse,list-style,list-style-position,list-style-type,list-style-image,content,quotes,counter-reset,counter-increment,resize,cursor,user-select,nav-index,nav-up,nav-right,nav-down,nav-left,transition,transition-delay,transition-timing-function,transition-duration,transition-property,transform,transform-origin,animation,animation-name,animation-duration,animation-play-state,animation-timing-function,animation-delay,animation-iteration-count,animation-direction,text-align,text-align-last,vertical-align,white-space,text-decoration,text-emphasis,text-emphasis-color,text-emphasis-style,text-emphasis-position,text-indent,text-justify,letter-spacing,word-spacing,text-outline,text-transform,text-wrap,text-overflow,text-overflow-ellipsis,text-overflow-mode,word-wrap,word-break,tab-size,hyphens,pointer-events,opacity,color,border,border-width,border-style,border-color,border-top,border-top-width,border-top-style,border-top-color,border-right,border-right-width,border-right-style,border-right-color,border-bottom,border-bottom-width,border-bottom-style,border-bottom-color,border-left,border-left-width,border-left-style,border-left-color,border-radius,border-top-left-radius,border-top-right-radius,border-bottom-right-radius,border-bottom-left-radius,border-image,border-image-source,border-image-slice,border-image-width,border-image-outset,border-image-repeat,outline,outline-width,outline-style,outline-color,outline-offset,background,background-color,background-image,background-repeat,background-attachment,background-position,background-position-x,background-position-y,background-clip,background-origin,background-size,box-decoration-break,box-shadow,text-shadow -ij_sass_space_after_colon = true -ij_sass_space_before_opening_brace = true -ij_sass_value_alignment = 0 - [*.scss] indent_style = tab +ij_smart_tabs = true ij_scss_align_closing_brace_with_properties = false ij_scss_blank_lines_around_nested_selector = 1 ij_scss_blank_lines_between_blocks = 1 @@ -99,7 +57,6 @@ ij_scss_value_alignment = 0 [*.twig] indent_style = tab ij_smart_tabs = true -ij_wrap_on_typing = false ij_twig_keep_indents_on_empty_lines = false ij_twig_spaces_inside_delimiters = true ij_twig_spaces_inside_variable_delimiters = true @@ -112,7 +69,212 @@ ij_editorconfig_space_before_colon = false ij_editorconfig_space_before_comma = false ij_editorconfig_spaces_around_assignment_operators = true -[{*.cjs,*.js}] +[{*.ctp,*.phtml,*.module,*.php,*.php5,*.php4,*.hphp,*.inc}] +indent_style = tab +ij_continuation_indent_size = 4 +ij_smart_tabs = true +ij_wrap_on_typing = false +ij_php_align_assignments = false +ij_php_align_class_constants = false +ij_php_align_group_field_declarations = false +ij_php_align_inline_comments = false +ij_php_align_key_value_pairs = false +ij_php_align_multiline_array_initializer_expression = false +ij_php_align_multiline_binary_operation = false +ij_php_align_multiline_chained_methods = false +ij_php_align_multiline_extends_list = false +ij_php_align_multiline_for = true +ij_php_align_multiline_parameters = false +ij_php_align_multiline_parameters_in_calls = false +ij_php_align_multiline_ternary_operation = false +ij_php_align_phpdoc_comments = false +ij_php_align_phpdoc_param_names = false +ij_php_api_weight = 1 +ij_php_array_initializer_new_line_after_left_brace = true +ij_php_array_initializer_right_brace_on_new_line = true +ij_php_array_initializer_wrap = on_every_item +ij_php_assignment_wrap = off +ij_php_author_weight = 7 +ij_php_binary_operation_sign_on_next_line = false +ij_php_binary_operation_wrap = off +ij_php_blank_lines_after_class_header = 0 +ij_php_blank_lines_after_function = 1 +ij_php_blank_lines_after_imports = 1 +ij_php_blank_lines_after_opening_tag = 0 +ij_php_blank_lines_after_package = 1 +ij_php_blank_lines_around_class = 1 +ij_php_blank_lines_around_constants = 0 +ij_php_blank_lines_around_field = 0 +ij_php_blank_lines_around_method = 1 +ij_php_blank_lines_before_class_end = 0 +ij_php_blank_lines_before_imports = 1 +ij_php_blank_lines_before_method_body = 0 +ij_php_blank_lines_before_package = 1 +ij_php_blank_lines_before_return_statement = 1 +ij_php_block_brace_style = end_of_line +ij_php_call_parameters_new_line_after_left_paren = false +ij_php_call_parameters_right_paren_on_new_line = false +ij_php_call_parameters_wrap = normal +ij_php_catch_on_new_line = false +ij_php_category_weight = 28 +ij_php_class_brace_style = end_of_line +ij_php_comma_after_last_array_element = true +ij_php_concat_spaces = false +ij_php_copyright_weight = 28 +ij_php_deprecated_weight = 28 +ij_php_do_while_brace_force = always +ij_php_else_if_style = as_is +ij_php_else_on_new_line = true +ij_php_example_weight = 3 +ij_php_extends_keyword_wrap = off +ij_php_extends_list_wrap = off +ij_php_fields_default_visibility = private +ij_php_filesource_weight = 28 +ij_php_finally_on_new_line = false +ij_php_for_brace_force = always +ij_php_for_statement_new_line_after_left_paren = false +ij_php_for_statement_right_paren_on_new_line = false +ij_php_for_statement_wrap = off +ij_php_force_short_declaration_array_style = false +ij_php_global_weight = 28 +ij_php_group_use_wrap = on_every_item +ij_php_if_brace_force = always +ij_php_if_lparen_on_next_line = false +ij_php_if_rparen_on_next_line = false +ij_php_ignore_weight = 28 +ij_php_import_sorting = alphabetic +ij_php_indent_break_from_case = true +ij_php_indent_case_from_switch = true +ij_php_indent_code_in_php_tags = false +ij_php_internal_weight = 0 +ij_php_keep_blank_lines_after_lbrace = 2 +ij_php_keep_blank_lines_before_right_brace = 2 +ij_php_keep_blank_lines_in_code = 2 +ij_php_keep_blank_lines_in_declarations = 2 +ij_php_keep_control_statement_in_one_line = true +ij_php_keep_first_column_comment = true +ij_php_keep_indents_on_empty_lines = false +ij_php_keep_line_breaks = true +ij_php_keep_rparen_and_lbrace_on_one_line = true +ij_php_keep_simple_methods_in_one_line = false +ij_php_lambda_brace_style = end_of_line +ij_php_license_weight = 28 +ij_php_line_comment_add_space = false +ij_php_line_comment_at_first_column = true +ij_php_link_weight = 28 +ij_php_lower_case_boolean_const = true +ij_php_lower_case_null_const = true +ij_php_method_brace_style = end_of_line +ij_php_method_call_chain_wrap = off +ij_php_method_parameters_new_line_after_left_paren = true +ij_php_method_parameters_right_paren_on_new_line = true +ij_php_method_parameters_wrap = normal +ij_php_method_weight = 28 +ij_php_modifier_list_wrap = false +ij_php_multiline_chained_calls_semicolon_on_new_line = false +ij_php_namespace_brace_style = 1 +ij_php_null_type_position = in_the_end +ij_php_package_weight = 28 +ij_php_param_weight = 4 +ij_php_parentheses_expression_new_line_after_left_paren = false +ij_php_parentheses_expression_right_paren_on_new_line = false +ij_php_phpdoc_blank_line_before_tags = true +ij_php_phpdoc_blank_lines_around_parameters = true +ij_php_phpdoc_keep_blank_lines = true +ij_php_phpdoc_param_spaces_between_name_and_description = 1 +ij_php_phpdoc_param_spaces_between_tag_and_type = 1 +ij_php_phpdoc_param_spaces_between_type_and_name = 1 +ij_php_phpdoc_use_fqcn = true +ij_php_phpdoc_wrap_long_lines = true +ij_php_place_assignment_sign_on_next_line = false +ij_php_place_parens_for_constructor = 0 +ij_php_property_read_weight = 28 +ij_php_property_weight = 28 +ij_php_property_write_weight = 28 +ij_php_return_type_on_new_line = false +ij_php_return_weight = 5 +ij_php_see_weight = 2 +ij_php_since_weight = 28 +ij_php_sort_phpdoc_elements = true +ij_php_space_after_colon = true +ij_php_space_after_colon_in_return_type = true +ij_php_space_after_comma = true +ij_php_space_after_for_semicolon = true +ij_php_space_after_quest = true +ij_php_space_after_type_cast = false +ij_php_space_after_unary_not = false +ij_php_space_before_array_initializer_left_brace = false +ij_php_space_before_catch_keyword = true +ij_php_space_before_catch_left_brace = true +ij_php_space_before_catch_parentheses = true +ij_php_space_before_class_left_brace = true +ij_php_space_before_closure_left_parenthesis = true +ij_php_space_before_colon = true +ij_php_space_before_colon_in_return_type = false +ij_php_space_before_comma = false +ij_php_space_before_do_left_brace = true +ij_php_space_before_else_keyword = true +ij_php_space_before_else_left_brace = true +ij_php_space_before_finally_keyword = true +ij_php_space_before_finally_left_brace = true +ij_php_space_before_for_left_brace = true +ij_php_space_before_for_parentheses = true +ij_php_space_before_for_semicolon = false +ij_php_space_before_if_left_brace = true +ij_php_space_before_if_parentheses = true +ij_php_space_before_method_call_parentheses = false +ij_php_space_before_method_left_brace = true +ij_php_space_before_method_parentheses = false +ij_php_space_before_quest = true +ij_php_space_before_switch_left_brace = true +ij_php_space_before_switch_parentheses = true +ij_php_space_before_try_left_brace = true +ij_php_space_before_unary_not = false +ij_php_space_before_while_keyword = true +ij_php_space_before_while_left_brace = true +ij_php_space_before_while_parentheses = true +ij_php_space_between_ternary_quest_and_colon = false +ij_php_spaces_around_additive_operators = true +ij_php_spaces_around_arrow = false +ij_php_spaces_around_assignment_in_declare = false +ij_php_spaces_around_assignment_operators = true +ij_php_spaces_around_bitwise_operators = true +ij_php_spaces_around_equality_operators = true +ij_php_spaces_around_logical_operators = true +ij_php_spaces_around_multiplicative_operators = true +ij_php_spaces_around_null_coalesce_operator = true +ij_php_spaces_around_relational_operators = true +ij_php_spaces_around_shift_operators = true +ij_php_spaces_around_unary_operator = false +ij_php_spaces_around_var_within_brackets = false +ij_php_spaces_within_array_initializer_braces = false +ij_php_spaces_within_brackets = false +ij_php_spaces_within_catch_parentheses = false +ij_php_spaces_within_for_parentheses = false +ij_php_spaces_within_if_parentheses = false +ij_php_spaces_within_method_call_parentheses = false +ij_php_spaces_within_method_parentheses = false +ij_php_spaces_within_parentheses = false +ij_php_spaces_within_short_echo_tags = true +ij_php_spaces_within_switch_parentheses = false +ij_php_spaces_within_while_parentheses = false +ij_php_special_else_if_treatment = false +ij_php_subpackage_weight = 28 +ij_php_ternary_operation_signs_on_next_line = false +ij_php_ternary_operation_wrap = off +ij_php_throws_weight = 6 +ij_php_todo_weight = 28 +ij_php_unknown_tag_weight = 28 +ij_php_upper_case_boolean_const = false +ij_php_upper_case_null_const = false +ij_php_uses_weight = 28 +ij_php_var_weight = 28 +ij_php_variable_naming_style = mixed +ij_php_version_weight = 28 +ij_php_while_brace_force = always +ij_php_while_on_new_line = false + +[{*.js,*.cjs}] indent_style = tab ij_continuation_indent_size = 4 ij_smart_tabs = true @@ -134,13 +296,13 @@ ij_javascript_array_initializer_wrap = off ij_javascript_assignment_wrap = off ij_javascript_binary_operation_sign_on_next_line = false ij_javascript_binary_operation_wrap = off -ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**/* +ij_javascript_blacklist_imports = rxjs/Rx,node_modules/**/*,@angular/material,@angular/material/typings/** ij_javascript_blank_lines_after_imports = 1 ij_javascript_blank_lines_around_class = 1 ij_javascript_blank_lines_around_field = 0 ij_javascript_blank_lines_around_function = 1 ij_javascript_blank_lines_around_method = 1 -ij_javascript_block_brace_style = next_line +ij_javascript_block_brace_style = end_of_line ij_javascript_call_parameters_new_line_after_left_paren = false ij_javascript_call_parameters_right_paren_on_new_line = false ij_javascript_call_parameters_wrap = off @@ -148,7 +310,7 @@ ij_javascript_catch_on_new_line = false ij_javascript_chained_call_dot_on_new_line = true ij_javascript_class_brace_style = end_of_line ij_javascript_comma_on_new_line = false -ij_javascript_do_while_brace_force = never +ij_javascript_do_while_brace_force = always ij_javascript_else_on_new_line = true ij_javascript_enforce_trailing_comma = keep ij_javascript_extends_keyword_wrap = off @@ -156,7 +318,7 @@ ij_javascript_extends_list_wrap = off ij_javascript_field_prefix = _ ij_javascript_file_name_style = relaxed ij_javascript_finally_on_new_line = false -ij_javascript_for_brace_force = never +ij_javascript_for_brace_force = always ij_javascript_for_statement_new_line_after_left_paren = false ij_javascript_for_statement_right_paren_on_new_line = false ij_javascript_for_statement_wrap = off @@ -272,216 +434,11 @@ ij_javascript_use_path_mapping = always ij_javascript_use_public_modifier = false ij_javascript_use_semicolon_after_statement = true ij_javascript_var_declaration_wrap = normal -ij_javascript_while_brace_force = never +ij_javascript_while_brace_force = always ij_javascript_while_on_new_line = false ij_javascript_wrap_comments = false -[{*.module,*.hphp,*.phtml,*.php5,*.php4,*.php,*.ctp,*.inc}] -indent_style = tab -ij_continuation_indent_size = 4 -ij_smart_tabs = true -ij_wrap_on_typing = false -ij_php_align_assignments = false -ij_php_align_class_constants = false -ij_php_align_group_field_declarations = false -ij_php_align_inline_comments = false -ij_php_align_key_value_pairs = false -ij_php_align_multiline_array_initializer_expression = false -ij_php_align_multiline_binary_operation = false -ij_php_align_multiline_chained_methods = false -ij_php_align_multiline_extends_list = false -ij_php_align_multiline_for = true -ij_php_align_multiline_parameters = false -ij_php_align_multiline_parameters_in_calls = false -ij_php_align_multiline_ternary_operation = false -ij_php_align_phpdoc_comments = false -ij_php_align_phpdoc_param_names = false -ij_php_api_weight = 1 -ij_php_array_initializer_new_line_after_left_brace = true -ij_php_array_initializer_right_brace_on_new_line = true -ij_php_array_initializer_wrap = on_every_item -ij_php_assignment_wrap = off -ij_php_author_weight = 7 -ij_php_binary_operation_sign_on_next_line = false -ij_php_binary_operation_wrap = off -ij_php_blank_lines_after_class_header = 0 -ij_php_blank_lines_after_function = 1 -ij_php_blank_lines_after_imports = 1 -ij_php_blank_lines_after_opening_tag = 0 -ij_php_blank_lines_after_package = 1 -ij_php_blank_lines_around_class = 1 -ij_php_blank_lines_around_constants = 0 -ij_php_blank_lines_around_field = 0 -ij_php_blank_lines_around_method = 1 -ij_php_blank_lines_before_class_end = 0 -ij_php_blank_lines_before_imports = 1 -ij_php_blank_lines_before_method_body = 0 -ij_php_blank_lines_before_package = 1 -ij_php_blank_lines_before_return_statement = 1 -ij_php_block_brace_style = next_line -ij_php_call_parameters_new_line_after_left_paren = false -ij_php_call_parameters_right_paren_on_new_line = false -ij_php_call_parameters_wrap = normal -ij_php_catch_on_new_line = true -ij_php_category_weight = 28 -ij_php_class_brace_style = next_line -ij_php_comma_after_last_array_element = true -ij_php_concat_spaces = false -ij_php_copyright_weight = 28 -ij_php_deprecated_weight = 28 -ij_php_do_while_brace_force = always -ij_php_else_if_style = as_is -ij_php_else_on_new_line = true -ij_php_example_weight = 3 -ij_php_extends_keyword_wrap = off -ij_php_extends_list_wrap = off -ij_php_fields_default_visibility = private -ij_php_filesource_weight = 28 -ij_php_finally_on_new_line = true -ij_php_for_brace_force = always -ij_php_for_statement_new_line_after_left_paren = false -ij_php_for_statement_right_paren_on_new_line = false -ij_php_for_statement_wrap = off -ij_php_force_short_declaration_array_style = false -ij_php_global_weight = 28 -ij_php_group_use_wrap = on_every_item -ij_php_if_brace_force = always -ij_php_if_lparen_on_next_line = false -ij_php_if_rparen_on_next_line = false -ij_php_ignore_weight = 28 -ij_php_import_sorting = alphabetic -ij_php_indent_break_from_case = true -ij_php_indent_case_from_switch = true -ij_php_indent_code_in_php_tags = false -ij_php_internal_weight = 0 -ij_php_keep_blank_lines_after_lbrace = 2 -ij_php_keep_blank_lines_before_right_brace = 2 -ij_php_keep_blank_lines_in_code = 2 -ij_php_keep_blank_lines_in_declarations = 2 -ij_php_keep_control_statement_in_one_line = true -ij_php_keep_first_column_comment = true -ij_php_keep_indents_on_empty_lines = false -ij_php_keep_line_breaks = true -ij_php_keep_rparen_and_lbrace_on_one_line = true -ij_php_keep_simple_methods_in_one_line = false -ij_php_lambda_brace_style = end_of_line -ij_php_license_weight = 28 -ij_php_line_comment_add_space = false -ij_php_line_comment_at_first_column = true -ij_php_link_weight = 28 -ij_php_lower_case_boolean_const = true -ij_php_lower_case_null_const = true -ij_php_method_brace_style = next_line -ij_php_method_call_chain_wrap = off -ij_php_method_parameters_new_line_after_left_paren = true -ij_php_method_parameters_right_paren_on_new_line = true -ij_php_method_parameters_wrap = normal -ij_php_method_weight = 28 -ij_php_modifier_list_wrap = false -ij_php_multiline_chained_calls_semicolon_on_new_line = false -ij_php_namespace_brace_style = 1 -ij_php_null_type_position = in_the_end -ij_php_package_weight = 28 -ij_php_param_weight = 4 -ij_php_parentheses_expression_new_line_after_left_paren = false -ij_php_parentheses_expression_right_paren_on_new_line = false -ij_php_phpdoc_blank_line_before_tags = true -ij_php_phpdoc_blank_lines_around_parameters = true -ij_php_phpdoc_keep_blank_lines = true -ij_php_phpdoc_param_spaces_between_name_and_description = 1 -ij_php_phpdoc_param_spaces_between_tag_and_type = 1 -ij_php_phpdoc_param_spaces_between_type_and_name = 1 -ij_php_phpdoc_use_fqcn = true -ij_php_phpdoc_wrap_long_lines = true -ij_php_place_assignment_sign_on_next_line = false -ij_php_place_parens_for_constructor = 0 -ij_php_property_read_weight = 28 -ij_php_property_weight = 28 -ij_php_property_write_weight = 28 -ij_php_return_type_on_new_line = false -ij_php_return_weight = 5 -ij_php_see_weight = 2 -ij_php_since_weight = 28 -ij_php_sort_phpdoc_elements = true -ij_php_space_after_colon = true -ij_php_space_after_colon_in_return_type = true -ij_php_space_after_comma = true -ij_php_space_after_for_semicolon = true -ij_php_space_after_quest = true -ij_php_space_after_type_cast = false -ij_php_space_after_unary_not = false -ij_php_space_before_array_initializer_left_brace = false -ij_php_space_before_catch_keyword = true -ij_php_space_before_catch_left_brace = true -ij_php_space_before_catch_parentheses = true -ij_php_space_before_class_left_brace = true -ij_php_space_before_closure_left_parenthesis = true -ij_php_space_before_colon = true -ij_php_space_before_colon_in_return_type = false -ij_php_space_before_comma = false -ij_php_space_before_do_left_brace = true -ij_php_space_before_else_keyword = true -ij_php_space_before_else_left_brace = true -ij_php_space_before_finally_keyword = true -ij_php_space_before_finally_left_brace = true -ij_php_space_before_for_left_brace = true -ij_php_space_before_for_parentheses = true -ij_php_space_before_for_semicolon = false -ij_php_space_before_if_left_brace = true -ij_php_space_before_if_parentheses = true -ij_php_space_before_method_call_parentheses = false -ij_php_space_before_method_left_brace = true -ij_php_space_before_method_parentheses = false -ij_php_space_before_quest = true -ij_php_space_before_switch_left_brace = true -ij_php_space_before_switch_parentheses = true -ij_php_space_before_try_left_brace = true -ij_php_space_before_unary_not = false -ij_php_space_before_while_keyword = true -ij_php_space_before_while_left_brace = true -ij_php_space_before_while_parentheses = true -ij_php_space_between_ternary_quest_and_colon = false -ij_php_spaces_around_additive_operators = true -ij_php_spaces_around_arrow = false -ij_php_spaces_around_assignment_in_declare = false -ij_php_spaces_around_assignment_operators = true -ij_php_spaces_around_bitwise_operators = true -ij_php_spaces_around_equality_operators = true -ij_php_spaces_around_logical_operators = true -ij_php_spaces_around_multiplicative_operators = true -ij_php_spaces_around_null_coalesce_operator = true -ij_php_spaces_around_relational_operators = true -ij_php_spaces_around_shift_operators = true -ij_php_spaces_around_unary_operator = false -ij_php_spaces_around_var_within_brackets = false -ij_php_spaces_within_array_initializer_braces = false -ij_php_spaces_within_brackets = false -ij_php_spaces_within_catch_parentheses = false -ij_php_spaces_within_for_parentheses = false -ij_php_spaces_within_if_parentheses = false -ij_php_spaces_within_method_call_parentheses = false -ij_php_spaces_within_method_parentheses = false -ij_php_spaces_within_parentheses = false -ij_php_spaces_within_short_echo_tags = true -ij_php_spaces_within_switch_parentheses = false -ij_php_spaces_within_while_parentheses = false -ij_php_special_else_if_treatment = false -ij_php_subpackage_weight = 28 -ij_php_ternary_operation_signs_on_next_line = false -ij_php_ternary_operation_wrap = off -ij_php_throws_weight = 6 -ij_php_todo_weight = 28 -ij_php_unknown_tag_weight = 28 -ij_php_upper_case_boolean_const = false -ij_php_upper_case_null_const = false -ij_php_uses_weight = 28 -ij_php_var_weight = 28 -ij_php_variable_naming_style = mixed -ij_php_version_weight = 28 -ij_php_while_brace_force = always -ij_php_while_on_new_line = false - -[{*.sht,*.htm,*.html,*.shtm,*.shtml}] +[{*.sht,*.html,*.shtm,*.shtml,*.htm,*.ng}] indent_style = tab ij_smart_tabs = true ij_html_add_new_line_before_tags = body,div,p,form,h1,h2,h3 @@ -510,185 +467,20 @@ ij_html_space_around_equality_in_attribute = false ij_html_space_inside_empty_tag = false ij_html_text_wrap = normal -[{*.ts,*.ats}] -ij_continuation_indent_size = 4 -ij_typescript_align_imports = false -ij_typescript_align_multiline_array_initializer_expression = false -ij_typescript_align_multiline_binary_operation = false -ij_typescript_align_multiline_chained_methods = false -ij_typescript_align_multiline_extends_list = false -ij_typescript_align_multiline_for = true -ij_typescript_align_multiline_parameters = true -ij_typescript_align_multiline_parameters_in_calls = false -ij_typescript_align_multiline_ternary_operation = false -ij_typescript_align_object_properties = 0 -ij_typescript_align_union_types = false -ij_typescript_align_var_statements = 0 -ij_typescript_array_initializer_new_line_after_left_brace = false -ij_typescript_array_initializer_right_brace_on_new_line = false -ij_typescript_array_initializer_wrap = off -ij_typescript_assignment_wrap = off -ij_typescript_binary_operation_sign_on_next_line = false -ij_typescript_binary_operation_wrap = off -ij_typescript_blacklist_imports = rxjs/Rx,node_modules/**/* -ij_typescript_blank_lines_after_imports = 1 -ij_typescript_blank_lines_around_class = 1 -ij_typescript_blank_lines_around_field = 0 -ij_typescript_blank_lines_around_field_in_interface = 0 -ij_typescript_blank_lines_around_function = 1 -ij_typescript_blank_lines_around_method = 1 -ij_typescript_blank_lines_around_method_in_interface = 1 -ij_typescript_block_brace_style = end_of_line -ij_typescript_call_parameters_new_line_after_left_paren = false -ij_typescript_call_parameters_right_paren_on_new_line = false -ij_typescript_call_parameters_wrap = off -ij_typescript_catch_on_new_line = false -ij_typescript_chained_call_dot_on_new_line = true -ij_typescript_class_brace_style = end_of_line -ij_typescript_comma_on_new_line = false -ij_typescript_do_while_brace_force = never -ij_typescript_else_on_new_line = false -ij_typescript_enforce_trailing_comma = keep -ij_typescript_extends_keyword_wrap = off -ij_typescript_extends_list_wrap = off -ij_typescript_field_prefix = _ -ij_typescript_file_name_style = relaxed -ij_typescript_finally_on_new_line = false -ij_typescript_for_brace_force = never -ij_typescript_for_statement_new_line_after_left_paren = false -ij_typescript_for_statement_right_paren_on_new_line = false -ij_typescript_for_statement_wrap = off -ij_typescript_force_quote_style = false -ij_typescript_force_semicolon_style = false -ij_typescript_function_expression_brace_style = end_of_line -ij_typescript_if_brace_force = never -ij_typescript_import_merge_members = global -ij_typescript_import_prefer_absolute_path = global -ij_typescript_import_sort_members = true -ij_typescript_import_sort_module_name = false -ij_typescript_import_use_node_resolution = true -ij_typescript_imports_wrap = on_every_item -ij_typescript_indent_case_from_switch = true -ij_typescript_indent_chained_calls = true -ij_typescript_indent_package_children = 0 -ij_typescript_jsdoc_include_types = false -ij_typescript_jsx_attribute_value = braces -ij_typescript_keep_blank_lines_in_code = 2 -ij_typescript_keep_first_column_comment = true -ij_typescript_keep_indents_on_empty_lines = false -ij_typescript_keep_line_breaks = true -ij_typescript_keep_simple_blocks_in_one_line = false -ij_typescript_keep_simple_methods_in_one_line = false -ij_typescript_line_comment_add_space = true -ij_typescript_line_comment_at_first_column = false -ij_typescript_method_brace_style = end_of_line -ij_typescript_method_call_chain_wrap = off -ij_typescript_method_parameters_new_line_after_left_paren = false -ij_typescript_method_parameters_right_paren_on_new_line = false -ij_typescript_method_parameters_wrap = off -ij_typescript_object_literal_wrap = on_every_item -ij_typescript_parentheses_expression_new_line_after_left_paren = false -ij_typescript_parentheses_expression_right_paren_on_new_line = false -ij_typescript_place_assignment_sign_on_next_line = false -ij_typescript_prefer_as_type_cast = false -ij_typescript_prefer_parameters_wrap = false -ij_typescript_reformat_c_style_comments = false -ij_typescript_space_after_colon = true -ij_typescript_space_after_comma = true -ij_typescript_space_after_dots_in_rest_parameter = false -ij_typescript_space_after_generator_mult = true -ij_typescript_space_after_property_colon = true -ij_typescript_space_after_quest = true -ij_typescript_space_after_type_colon = true -ij_typescript_space_after_unary_not = false -ij_typescript_space_before_async_arrow_lparen = true -ij_typescript_space_before_catch_keyword = true -ij_typescript_space_before_catch_left_brace = true -ij_typescript_space_before_catch_parentheses = true -ij_typescript_space_before_class_lbrace = true -ij_typescript_space_before_class_left_brace = true -ij_typescript_space_before_colon = true -ij_typescript_space_before_comma = false -ij_typescript_space_before_do_left_brace = true -ij_typescript_space_before_else_keyword = true -ij_typescript_space_before_else_left_brace = true -ij_typescript_space_before_finally_keyword = true -ij_typescript_space_before_finally_left_brace = true -ij_typescript_space_before_for_left_brace = true -ij_typescript_space_before_for_parentheses = true -ij_typescript_space_before_for_semicolon = false -ij_typescript_space_before_function_left_parenth = true -ij_typescript_space_before_generator_mult = false -ij_typescript_space_before_if_left_brace = true -ij_typescript_space_before_if_parentheses = true -ij_typescript_space_before_method_call_parentheses = false -ij_typescript_space_before_method_left_brace = true -ij_typescript_space_before_method_parentheses = false -ij_typescript_space_before_property_colon = false -ij_typescript_space_before_quest = true -ij_typescript_space_before_switch_left_brace = true -ij_typescript_space_before_switch_parentheses = true -ij_typescript_space_before_try_left_brace = true -ij_typescript_space_before_type_colon = false -ij_typescript_space_before_unary_not = false -ij_typescript_space_before_while_keyword = true -ij_typescript_space_before_while_left_brace = true -ij_typescript_space_before_while_parentheses = true -ij_typescript_spaces_around_additive_operators = true -ij_typescript_spaces_around_arrow_function_operator = true -ij_typescript_spaces_around_assignment_operators = true -ij_typescript_spaces_around_bitwise_operators = true -ij_typescript_spaces_around_equality_operators = true -ij_typescript_spaces_around_logical_operators = true -ij_typescript_spaces_around_multiplicative_operators = true -ij_typescript_spaces_around_relational_operators = true -ij_typescript_spaces_around_shift_operators = true -ij_typescript_spaces_around_unary_operator = false -ij_typescript_spaces_within_array_initializer_brackets = false -ij_typescript_spaces_within_brackets = false -ij_typescript_spaces_within_catch_parentheses = false -ij_typescript_spaces_within_for_parentheses = false -ij_typescript_spaces_within_if_parentheses = false -ij_typescript_spaces_within_imports = false -ij_typescript_spaces_within_interpolation_expressions = false -ij_typescript_spaces_within_method_call_parentheses = false -ij_typescript_spaces_within_method_parentheses = false -ij_typescript_spaces_within_object_literal_braces = false -ij_typescript_spaces_within_object_type_braces = true -ij_typescript_spaces_within_parentheses = false -ij_typescript_spaces_within_switch_parentheses = false -ij_typescript_spaces_within_type_assertion = false -ij_typescript_spaces_within_union_types = true -ij_typescript_spaces_within_while_parentheses = false -ij_typescript_special_else_if_treatment = true -ij_typescript_ternary_operation_signs_on_next_line = false -ij_typescript_ternary_operation_wrap = off -ij_typescript_union_types_wrap = on_every_item -ij_typescript_use_chained_calls_group_indents = false -ij_typescript_use_double_quotes = true -ij_typescript_use_explicit_js_extension = global -ij_typescript_use_path_mapping = always -ij_typescript_use_public_modifier = false -ij_typescript_use_semicolon_after_statement = true -ij_typescript_var_declaration_wrap = normal -ij_typescript_while_brace_force = never -ij_typescript_while_on_new_line = false -ij_typescript_wrap_comments = false - [{*.yml,*.yaml}] indent_size = 2 ij_continuation_indent_size = 2 ij_yaml_keep_indents_on_empty_lines = false ij_yaml_keep_line_breaks = true -[{*.zsh,*.bash,*.sh}] +[{*.zsh,*.sh,*.bash}] ij_shell_binary_ops_start_line = false ij_shell_keep_column_alignment_padding = false ij_shell_minify_program = false ij_shell_redirect_followed_by_space = false ij_shell_switch_cases_indented = false -[{.stylelintrc,.eslintrc,.babelrc,jest.config,*.bowerrc,*.jsb3,*.jsb2,*.json}] +[{.babelrc,.stylelintrc,.eslintrc,jest.config,*.json,*.jsb3,*.jsb2,*.bowerrc}] indent_size = 2 ij_json_keep_blank_lines_in_code = 0 ij_json_keep_indents_on_empty_lines = false @@ -701,7 +493,7 @@ ij_json_spaces_within_braces = false ij_json_spaces_within_brackets = false ij_json_wrap_long_lines = false -[{phpunit.xml.dist,*.jhm,*.rng,*.wsdl,*.fxml,*.xslt,*.jrxml,*.ant,*.xul,*.xsl,*.xsd,*.tld,*.jnlp,*.xml}] +[{phpunit.xml.dist,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.jhm,*.tld,*.fxml,*.wsdl,*.jrxml,*.xml,*.jnlp}] indent_size = 2 indent_style = tab tab_width = 2 diff --git a/addons/userrights/userrightsprofile.class.inc.php b/addons/userrights/userrightsprofile.class.inc.php index 294164d20..15155db7e 100644 --- a/addons/userrights/userrightsprofile.class.inc.php +++ b/addons/userrights/userrightsprofile.class.inc.php @@ -434,7 +434,7 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no organization class (or not writable)! if (MetaModel::IsValidClass('Organization') && !MetaModel::IsAbstract('Organization')) { - $oOrg = new Organization(); + $oOrg = MetaModel::NewObject('Organization'); $oOrg->Set('name', 'My Company/Department'); $oOrg->Set('code', 'SOMECODE'); $iOrgId = $oOrg->DBInsertNoReload(); @@ -442,17 +442,13 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no Person class (or not writable)! if (MetaModel::IsValidClass('Person') && !MetaModel::IsAbstract('Person')) { - $oContact = new Person(); + $oContact = MetaModel::NewObject('Person'); $oContact->Set('name', 'My last name'); $oContact->Set('first_name', 'My first name'); if (MetaModel::IsValidAttCode('Person', 'org_id')) { $oContact->Set('org_id', $iOrgId); } - if (MetaModel::IsValidAttCode('Person', 'phone')) - { - $oContact->Set('phone', '+00 000 000 000'); - } $oContact->Set('email', 'my.email@foo.org'); $iContactId = $oContact->DBInsertNoReload(); } @@ -561,7 +557,7 @@ class UserRightsProfile extends UserRightsAddOnAPI /** * @param $oUser User - * @return array + * @return bool */ public function IsAdministrator($oUser) { @@ -571,16 +567,22 @@ class UserRightsProfile extends UserRightsAddOnAPI /** * @param $oUser User - * @return array + * @return bool */ public function IsPortalUser($oUser) { // UserRights caches the list for us return UserRights::HasProfile(PORTAL_PROFILE_NAME, $oUser); } + /** * @param $oUser User - * @return bool + * + * @return array + * @throws \ArchivedObjectException + * @throws \CoreException + * @throws \CoreUnexpectedValue + * @throws \MySQLException */ public function ListProfiles($oUser) { diff --git a/addons/userrights/userrightsprofile.db.class.inc.php b/addons/userrights/userrightsprofile.db.class.inc.php index 2115f1b8d..f35fa6af7 100644 --- a/addons/userrights/userrightsprofile.db.class.inc.php +++ b/addons/userrights/userrightsprofile.db.class.inc.php @@ -535,7 +535,7 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no organization class (or not writable)! if (MetaModel::IsValidClass('Organization') && !MetaModel::IsAbstract('Organization')) { - $oOrg = new Organization(); + $oOrg = MetaModel::NewObject('Organization'); $oOrg->Set('name', 'My Company/Department'); $oOrg->Set('code', 'SOMECODE'); $oOrg::SetCurrentChange($oChange); @@ -544,17 +544,13 @@ class UserRightsProfile extends UserRightsAddOnAPI // Support drastic data model changes: no Person class (or not writable)! if (MetaModel::IsValidClass('Person') && !MetaModel::IsAbstract('Person')) { - $oContact = new Person(); + $oContact = MetaModel::NewObject('Person'); $oContact->Set('name', 'My last name'); $oContact->Set('first_name', 'My first name'); if (MetaModel::IsValidAttCode('Person', 'org_id')) { $oContact->Set('org_id', $iOrgId); } - if (MetaModel::IsValidAttCode('Person', 'phone')) - { - $oContact->Set('phone', '+00 000 000 000'); - } $oContact->Set('email', 'my.email@foo.org'); $oContact::SetCurrentChange($oChange); $iContactId = $oContact->DBInsertNoReload(); @@ -711,7 +707,7 @@ class UserRightsProfile extends UserRightsAddOnAPI public function LoadCache() { - if (!is_null($this->m_aProfiles)) return; + if (!is_null($this->m_aProfiles)) return false; // Could be loaded in a shared memory (?) $oKPI = new ExecutionKPI(); diff --git a/application/themehandler.class.inc.php b/application/themehandler.class.inc.php index 8c1aca10c..6c377fd31 100644 --- a/application/themehandler.class.inc.php +++ b/application/themehandler.class.inc.php @@ -60,6 +60,10 @@ class ThemeHandler { try { + if (is_null(MetaModel::GetConfig())) + { + throw new CoreException('no config'); + } $sThemeId = MetaModel::GetConfig()->Get('backoffice_default_theme'); } catch(CoreException $oCompileException) diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index ce105e2a8..731ac9688 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -18,6 +18,7 @@ */ use Combodo\iTop\Form\Field\LabelField; +use Combodo\iTop\Form\Field\TextAreaField; use Combodo\iTop\Form\Validator\NotEmptyExtKeyValidator; use Combodo\iTop\Form\Validator\Validator; @@ -7466,6 +7467,12 @@ class AttributeExternalField extends AttributeDefinition } } parent::MakeFormField($oObject, $oFormField); + if ($oFormField instanceof TextAreaField) { + if (method_exists($oRemoteAttDef, 'GetFormat')) { + /** @var \Combodo\iTop\Form\Field\TextAreaField $oFormField */ + $oFormField->SetFormat($oRemoteAttDef->GetFormat()); + } + } // Manually setting for remote ExternalKey, otherwise, the id would be displayed. if ($oRemoteAttDef instanceof AttributeExternalKey) @@ -7483,6 +7490,16 @@ class AttributeExternalField extends AttributeDefinition { return false; } + + public function GetFormat() + { + $oRemoteAttDef = $this->GetExtAttDef(); + if (method_exists($oRemoteAttDef, 'GetFormat')) { + /** @var \Combodo\iTop\Form\Field\TextAreaField $oFormField */ + return $oRemoteAttDef->GetFormat(); + } + return 'text'; + } } diff --git a/core/backgroundtask.class.inc.php b/core/backgroundtask.class.inc.php index b3f2a0ab5..0a9368565 100644 --- a/core/backgroundtask.class.inc.php +++ b/core/backgroundtask.class.inc.php @@ -26,6 +26,24 @@ */ class BackgroundTask extends DBObject { + protected $bDebug = false; + + /** + * @return bool + */ + public function IsDebug() + { + return $this->bDebug; + } + + /** + * @param bool $bDebug + */ + public function SetDebug($bDebug) + { + $this->bDebug = $bDebug; + } + public static function Init() { $aParams = array diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php index ea527ca52..6da35c091 100644 --- a/core/dbobjectsearch.class.php +++ b/core/dbobjectsearch.class.php @@ -443,7 +443,6 @@ class DBObjectSearch extends DBSearch case '<|': case '=|': throw new CoreException('Deprecated operator, please consider using OQL (SQL) expressions like "(TO_DAYS(NOW()) - TO_DAYS(x)) AS AgeDays"', array('operator' => $sOpCode)); - break; case 'IN': if (!is_array($value)) $value = array($value); @@ -625,17 +624,32 @@ class DBObjectSearch extends DBSearch public function AddCondition_FullText($sNeedle) { // Transform the full text condition into additional condition expression - $aFullTextFields = array(); - foreach (MetaModel::ListAttributeDefs($this->GetClass()) as $sAttCode => $oAttDef) - { + $aAttCodes = []; + foreach (MetaModel::ListAttributeDefs($this->GetClass()) as $sAttCode => $oAttDef) { if (!$oAttDef->IsScalar()) continue; if ($oAttDef->IsExternalKey()) continue; if (!$oAttDef->IsSearchable()) continue; + $aAttCodes[] = $sAttCode; + } + $this->AddCondition_FullTextOnAttributes($aAttCodes, $sNeedle); + } + + /** + * @param array $aAttCodes array of attCodes to search into + * @param string $sNeedle one word to be searched + * + * @throws \CoreException + */ + public function AddCondition_FullTextOnAttributes(array $aAttCodes, $sNeedle) + { + $aFullTextFields = []; + foreach ($aAttCodes as $sAttCode) { $aFullTextFields[] = new FieldExpression($sAttCode, $this->GetClassAlias()); } + $oTextFields = new CharConcatWSExpression(' ', $aFullTextFields); - $sQueryParam = 'needle'; + $sQueryParam = str_replace('.', '', uniqid('needle_', true)); $oFlexNeedle = new CharConcatExpression(array(new ScalarExpression('%'), new VariableExpression($sQueryParam), new ScalarExpression('%'))); $oNewCond = new BinaryExpression($oTextFields, 'LIKE', $oFlexNeedle); diff --git a/core/dbsearch.class.php b/core/dbsearch.class.php index 1449122eb..e5ce11999 100644 --- a/core/dbsearch.class.php +++ b/core/dbsearch.class.php @@ -404,7 +404,9 @@ abstract class DBSearch */ abstract public function AddCondition_FullText($sFullText); - /** + abstract public function AddCondition_FullTextOnAttributes(array $aAttCodes, $sNeedle); + + /** * Perform a join, the remote class being matched by the mean of its primary key * * The join is performed diff --git a/core/dbunionsearch.class.php b/core/dbunionsearch.class.php index 28347a580..721191bd3 100644 --- a/core/dbunionsearch.class.php +++ b/core/dbunionsearch.class.php @@ -376,7 +376,15 @@ class DBUnionSearch extends DBSearch } } - /** + public function AddCondition_FullTextOnAttributes(array $aAttCodes, $sNeedle) + { + foreach ($this->aSearches as $oSearch) + { + $oSearch->AddCondition_FullTextOnAttributes($aAttCodes, $sNeedle); + } + } + + /** * @param DBObjectSearch $oFilter * @param $sExtKeyAttCode * @param int $iOperatorCode diff --git a/css/css-variables.scss b/css/css-variables.scss index 8ae1ec6f4..ed470a897 100644 --- a/css/css-variables.scss +++ b/css/css-variables.scss @@ -124,3 +124,8 @@ $highlight-item-color: $white !default; $content-color: #eeeeee !default; $default-font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif !default; $icons-filter: hue-rotate(0deg) !default; + +%font-awesome-prerequisites{ + font-family: 'Font Awesome 5 Free'; + font-weight: 600; +} \ No newline at end of file diff --git a/css/light-grey.scss b/css/light-grey.scss index 5c140c74c..1a3066aa1 100644 --- a/css/light-grey.scss +++ b/css/light-grey.scss @@ -2880,13 +2880,34 @@ a.summary, a.summary:hover { height: 12px; } .sort_none { - background: url($approot-relative + "images/bg.gif?v=" + $version) no-repeat center; + padding-right: 5px; + &::after { + @extend %font-awesome-prerequisites; + text-align: right; + content: '\f0dc'; + color: $complement-color; + float: right; + } } .sort_asc { - background: url($approot-relative + "images/desc.gif?v=" + $version) no-repeat center; + padding-right: 5px; + &::after { + @extend %font-awesome-prerequisites; + text-align: right; + content: '\f0d8'; + color: $complement-color; + float: right; + } } .sort_desc { - background: url($approot-relative + "images/asc.gif?v=" + $version) no-repeat center; + padding-right: 5px; + &::after { + @extend %font-awesome-prerequisites; + text-align: right; + content: '\f0d7'; + color: $complement-color; + float: right; + } } .sort_hidden { display: none; diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css index d43e17703..fa2f2eaf9 100644 --- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css +++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css @@ -1014,8 +1014,8 @@ table .group-actions { /****************/ /* Filter brick */ /****************/ -.tile.tile-filter-brick .tile_decoration .icon { - color: #da7014; +.tile.tile-filter-brick a.tile_decoration { + cursor: default; } .tile.tile-filter-brick .tile_filterbox .form-group:first-child { width: 100%; diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss index 18b89ed9e..dcf5c0cc1 100644 --- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss +++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss @@ -1077,8 +1077,8 @@ table .group-actions .item-action-wrapper .panel-body > p:last-child{ /****************/ /* Filter brick */ /****************/ -.tile.tile-filter-brick .tile_decoration .icon { - color: $link-color; +.tile.tile-filter-brick a.tile_decoration { + cursor: default; } .tile.tile-filter-brick .tile_filterbox .form-group:first-child{ diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/BrowseBrickController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/BrowseBrickController.php index 8498486f8..de55c9a26 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/BrowseBrickController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/BrowseBrickController.php @@ -84,8 +84,9 @@ class BrowseBrickController extends BrickController $sDataLoading = ($sDataLoading !== null) ? $sDataLoading : $oRequestManipulator->ReadParam('sDataLoading', $oBrick->GetDataLoading()); // Getting search value - $sSearchValue = $oRequestManipulator->ReadParam('sSearchValue', ''); - if (!empty($sSearchValue)) + $sRawSearchValue = $oRequestManipulator->ReadParam('sSearchValue', ''); + $sSearchValue = html_entity_decode($sRawSearchValue); + if (strlen($sSearchValue) > 0) { $sDataLoading = AbstractBrick::ENUM_DATA_LOADING_LAZY; } @@ -167,13 +168,16 @@ class BrowseBrickController extends BrickController // Adding search clause // Note : For know the search is naive and looks only for the exact match. It doesn't search for words separately - if (!empty($sSearchValue)) + if (strlen($sSearchValue) > 0) { // - Cleaning the search value by exploding and trimming spaces - $aSearchValues = explode(' ', $sSearchValue); - array_walk($aSearchValues, function (&$sSearchValue /*, $sKey*/) { - trim($sSearchValue); - }); + $aExplodedSearchValues = explode(' ', $sSearchValue); + $aSearchValues = []; + foreach ($aExplodedSearchValues as $sValue) { + if (strlen($sValue) > 0) { + $aSearchValues[] = $sValue; + } + } // - Retrieving fields to search $aSearchFields = array($aLevelsProperties[$aLevelsPropertiesKeys[$i]]['name_att']); @@ -257,7 +261,7 @@ class BrowseBrickController extends BrickController { $aLevelsProperties[$aLevelsPropertiesKeys[$i]]['search']->SetSelectedClasses($aLevelsClasses); - if (!empty($sSearchValue)) + if (strlen($sSearchValue) > 0) { // Note : This could be way more simpler if we had a SetInternalParam($sParam, $value) verb $aQueryParams = $aLevelsProperties[$aLevelsPropertiesKeys[$i]]['search']->GetInternalParams(); @@ -452,7 +456,7 @@ class BrowseBrickController extends BrickController 'sBrickId' => $sBrickId, 'sBrowseMode' => $sBrowseMode, 'aBrowseButtons' => $aBrowseButtons, - 'sSearchValue' => $sSearchValue, + 'sSearchValue' => $sRawSearchValue, 'sDataLoading' => $sDataLoading, 'aItems' => json_encode($aItems), 'iItemsCount' => count($aItems), diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php index 3786612b3..615e272f5 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/ManageBrickController.php @@ -894,64 +894,50 @@ class ManageBrickController extends BrickController $oRequestManipulator = $this->get('request_manipulator'); // Getting search value - $sSearchValue = $oRequestManipulator->ReadParam('sSearchValue', ''); + $sRawSearchValue = trim($oRequestManipulator->ReadParam('sSearchValue', '')); + $sSearchValue = html_entity_decode($sRawSearchValue); // - Adding search clause if necessary // Note : This is a very naive search at the moment - if (!empty($sSearchValue)) - { + if (strlen($sSearchValue) > 0) { // Putting only valid attributes as one can define attributes of leaf classes in the brick definition (), but at this stage we are working on the abstract class. // Note: This won't fix everything as the search will not be looking in all fields. - $aSearchListItems = array(); - foreach ($aColumnsAttrs as $sColumnAttr) - { - // Skip invalid attcodes - if (!MetaModel::IsValidAttCode($sClass, $sColumnAttr)) - { + $aSearchListItems = []; + foreach ($aColumnsAttrs as $sColumnAttr) { + // Skip invalid attCodes + if (!MetaModel::IsValidAttCode($sClass, $sColumnAttr)) { continue; } // For external key, force search on the friendlyname instead of the ID. // This should be addressed more globally with the bigger issue, see N°1970 $oAttDef = MetaModel::GetAttributeDef($sClass, $sColumnAttr); - if($oAttDef instanceof AttributeExternalKey) - { + if ($oAttDef instanceof AttributeExternalKey) { $sColumnAttr .= '_friendlyname'; } $aSearchListItems[] = $sColumnAttr; } - $oFullBinExpr = null; - foreach ($aSearchListItems as $sSearchItemAttr) - { - $oBinExpr = new BinaryExpression(new FieldExpression($sSearchItemAttr, $oQuery->GetClassAlias()), - 'LIKE', new VariableExpression('search_value')); - // At each iteration we build the complete expression for the search like ( (field1 LIKE %search%) OR (field2 LIKE %search%) OR (field3 LIKE %search%) ...) - if (is_null($oFullBinExpr)) - { - $oFullBinExpr = $oBinExpr; - } - else - { - $oFullBinExpr = new BinaryExpression($oFullBinExpr, 'OR', $oBinExpr); + if (preg_match('/^"(.*)"$/', $sSearchValue, $aMatches)) { + // The text is surrounded by double-quotes, remove the quotes and treat it as one single expression + $aSearchNeedles = [$aMatches[1]]; + } else { + // Split the text on the blanks and treat this as a search for AND AND + $aExplodedSearchNeedles = explode(' ', $sSearchValue); + $aSearchNeedles = []; + foreach ($aExplodedSearchNeedles as $sValue) { + if (strlen($sValue) > 0) { + $aSearchNeedles[] = $sValue; + } } } - - // Then add the complete expression to the query - if (!is_null($oFullBinExpr)) - { - // - Adding expression to the query - $oQuery->AddConditionExpression($oFullBinExpr); - // - Setting expression parameters - // Note : This could be way more simpler if we had a SetInternalParam($sParam, $value) verb - $aQueryParams = $oQuery->GetInternalParams(); - $aQueryParams['search_value'] = '%'.$sSearchValue.'%'; - $oQuery->SetInternalParams($aQueryParams); + foreach ($aSearchNeedles as $sSearchWord) { + $oQuery->AddCondition_FullTextOnAttributes($aSearchListItems, $sSearchWord); } } - $aData['sSearchValue'] = $sSearchValue; + $aData['sSearchValue'] = $sRawSearchValue; } /** diff --git a/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php b/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php index 64302eb0a..1debfd44f 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php @@ -25,7 +25,6 @@ use Exception; /** * Class ItopExtensionsExtraRoutes * - * @deprecated Compatibility layer for migrating brick's routes to iTop 2.7+ * @package Combodo\iTop\Portal\Routing * @since 2.7.0 * @author Bruno Da Silva @@ -39,8 +38,6 @@ class ItopExtensionsExtraRoutes * @param array $extraRoutes * * @throws Exception - * @deprecated Since 2.7.0 - * */ public static function AddRoutes($extraRoutes) { diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/browse/mode_list.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/browse/mode_list.html.twig index 85d1693b6..5af235678 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/bricks/browse/mode_list.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/browse/mode_list.html.twig @@ -44,140 +44,148 @@ "defaultContent": "", "type": "html", "data": oLevelsProperties[sKey].alias, - "render": function(data, type, row){ - var cellElem; - var levelAltId = data.level_alias+'_'+data.id; - var levelActions; - var levelActionsKeys; - var drilldownActionIndex; - var levelPrimaryAction; - var url = ''; - - // Preparing actions on the cell - levelActions = oLevelsProperties[data.level_alias].actions; - // - Removing explicit (not default) drilldown action as it has no prupose on that browse mode - delete levelActions['{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_DRILLDOWN') }}']; - // - Removing implciit (default) drilldown action - if( (levelActions['default'] !== undefined) && (levelActions['default'].type === '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_DRILLDOWN') }}') ) - { - delete levelActions['default']; - } - levelActionsKeys = Object.keys(levelActions); - - // Preparing the cell data - cellElem = (levelActionsKeys.length > 0) ? $('') : $(''); - cellElem.attr('data-item-id', data.id).attr('data-level-alias', data.level_alias); + "render": + {_: function(data, type, row){ + var cellElem; + var levelAltId = data.level_alias+'_'+data.id; + var levelActions; + var levelActionsKeys; + var drilldownActionIndex; + var levelPrimaryAction; + var url = ''; - // Building metadata - for(var sPropName in data.metadata) - { - var propValue = data.metadata[sPropName]; - cellElem.attr('data-'+sPropName.replace('_', '-'), propValue); - } - - // Building tooltip for the node - // We have to concatenate the HTML as we return the raw HTML of the cell. If we did a jQuery.insertAfter, the tooltip would not be returned. - // For the same reason, tooltip widget is created in "drawCallback" instead of here. - if( (data.tooltip !== undefined) && (data.tooltip !== '')) - { - cellElem.html( $('').attr('title', data.tooltip).attr('data-toggle', 'tooltip').html(data.name).prop('outerHTML') ); - } - else - { - cellElem.html(data.name); - } - - // Building actions - if(levelActionsKeys.length > 0) - { - // - Primary action (click on item) - levelPrimaryAction = levelActions[levelActionsKeys[0]]; - switch(levelPrimaryAction.type) + // Preparing actions on the cell + levelActions = oLevelsProperties[data.level_alias].actions; + // - Removing explicit (not default) drilldown action as it has no prupose on that browse mode + delete levelActions['{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_DRILLDOWN') }}']; + // - Removing implciit (default) drilldown action + if( (levelActions['default'] !== undefined) && (levelActions['default'].type === '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_DRILLDOWN') }}') ) { - case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_VIEW') }}': - url = '{{ app.url_generator.generate('p_object_view', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - break; - case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_EDIT') }}': - url = '{{ app.url_generator.generate('p_object_edit', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - break; - case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': - url = levelPrimaryAction.url.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - url = AddParameterToUrl(url, 'ar_token', data.action_rules_token[levelPrimaryAction.type]); - break; - default: - url = '#'; - //console.log('Action "'+levelPrimaryAction.type+'" not implemented'); - break; + delete levelActions['default']; } - SetActionUrl(cellElem, url); - SetActionOpeningTarget(cellElem, levelPrimaryAction.opening_target); + levelActionsKeys = Object.keys(levelActions); - // - Secondary actions - if(levelActionsKeys.length > 1) + // Preparing the cell data + cellElem = (levelActionsKeys.length > 0) ? $('') : $(''); + cellElem.attr('data-item-id', data.id).attr('data-level-alias', data.level_alias); + + // Building metadata + for(var sPropName in data.metadata) { - // Retrieving secondary action (Now we also display primary action) - var actionsButtons = {}; - for(j = 0; j < levelActionsKeys.length; j++) - { - actionsButtons[levelActionsKeys[j]] = levelActions[levelActionsKeys[j]]; - } - - // Preparing secondary actions container - var actionsElem = $('
').addClass('pull-right group-actions'); - cellElem.append(actionsElem); - // Preparing secondary actions - var actionsSSTogglerElem = $(''); - var actionsSSMenuElem = $('
'); - var actionsSSMenuContainerElem = $('
'); - actionsSSMenuElem.append(actionsSSMenuContainerElem); - actionsElem.append(actionsSSTogglerElem); - actionsElem.append(actionsSSMenuElem); + var propValue = data.metadata[sPropName]; + cellElem.attr('data-'+sPropName.replace('_', '-'), propValue); + } - // Adding secondary actions - for(j in actionsButtons) + // Building tooltip for the node + // We have to concatenate the HTML as we return the raw HTML of the cell. If we did a jQuery.insertAfter, the tooltip would not be returned. + // For the same reason, tooltip widget is created in "drawCallback" instead of here. + if( (data.tooltip !== undefined) && (data.tooltip !== '')) + { + cellElem.html( $('').attr('title', data.tooltip).attr('data-toggle', 'tooltip').html(data.name).prop('outerHTML') ); + } + else + { + cellElem.html(data.name); + } + + // Building actions + if(levelActionsKeys.length > 0) + { + // - Primary action (click on item) + levelPrimaryAction = levelActions[levelActionsKeys[0]]; + switch(levelPrimaryAction.type) { - var action = actionsButtons[j]; - var actionElem = $(''); - var actionIconElem = $('').appendTo(actionElem); - - switch(action.type) + case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_VIEW') }}': + url = '{{ app.url_generator.generate('p_object_view', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); + break; + case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_EDIT') }}': + url = '{{ app.url_generator.generate('p_object_edit', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); + break; + case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': + url = levelPrimaryAction.url.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); + url = AddParameterToUrl(url, 'ar_token', data.action_rules_token[levelPrimaryAction.type]); + break; + default: + url = '#'; + //console.log('Action "'+levelPrimaryAction.type+'" not implemented'); + break; + } + SetActionUrl(cellElem, url); + SetActionOpeningTarget(cellElem, levelPrimaryAction.opening_target); + + // - Secondary actions + if(levelActionsKeys.length > 1) + { + // Retrieving secondary action (Now we also display primary action) + var actionsButtons = {}; + for(j = 0; j < levelActionsKeys.length; j++) { - case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_VIEW') }}': - url = '{{ app.url_generator.generate('p_object_view', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - break; - case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_EDIT') }}': - url = '{{ app.url_generator.generate('p_object_edit', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - break; - case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': - url = action.url.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); - url = AddParameterToUrl(url, 'ar_token', data.action_rules_token[action.type]); - break; - default: - url = '#'; - //console.log('Action "'+action.type+'" not implemented for secondary action'); - break; + actionsButtons[levelActionsKeys[j]] = levelActions[levelActionsKeys[j]]; } - SetActionUrl(actionElem, url); - SetActionOpeningTarget(actionElem, action.opening_target); - - // Adding title if present - if(action.title !== undefined) + + // Preparing secondary actions container + var actionsElem = $('
').addClass('pull-right group-actions'); + cellElem.append(actionsElem); + // Preparing secondary actions + var actionsSSTogglerElem = $(''); + var actionsSSMenuElem = $('
'); + var actionsSSMenuContainerElem = $('
'); + actionsSSMenuElem.append(actionsSSMenuContainerElem); + actionsElem.append(actionsSSTogglerElem); + actionsElem.append(actionsSSMenuElem); + + // Adding secondary actions + for(j in actionsButtons) { - actionElem.attr('title', action.title); + var action = actionsButtons[j]; + var actionElem = $(''); + var actionIconElem = $('').appendTo(actionElem); + + switch(action.type) + { + case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_VIEW') }}': + url = '{{ app.url_generator.generate('p_object_view', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); + break; + case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_EDIT') }}': + url = '{{ app.url_generator.generate('p_object_edit', {'sObjectClass': '-objectClass-', 'sObjectId': '-objectId-'})|raw }}'.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); + break; + case '{{ constant('Combodo\\iTop\\Portal\\Brick\\BrowseBrick::ENUM_ACTION_CREATE_FROM_THIS') }}': + url = action.url.replace(/-objectClass-/, data.class).replace(/-objectId-/, data.id); + url = AddParameterToUrl(url, 'ar_token', data.action_rules_token[action.type]); + break; + default: + url = '#'; + //console.log('Action "'+action.type+'" not implemented for secondary action'); + break; + } + SetActionUrl(actionElem, url); + SetActionOpeningTarget(actionElem, action.opening_target); + + // Adding title if present + if(action.title !== undefined) + { + actionElem.attr('title', action.title); + } + // Adding icon class if present + if(action.icon_class !== undefined) + { + actionIconElem.addClass(action.icon_class); + } + + actionElem.append(action.title); + actionsSSMenuContainerElem.append( $('

').append(actionElem) ); } - // Adding icon class if present - if(action.icon_class !== undefined) - { - actionIconElem.addClass(action.icon_class); - } - - actionElem.append(action.title); - actionsSSMenuContainerElem.append( $('

').append(actionElem) ); } } - } - - return cellElem.prop('outerHTML'); + + return cellElem.prop('outerHTML'); + }, + filter:function (data, type, row) { + return $.text($.parseHTML(data.name)); + }, + sort:function (data, type, row) { + return $.text($.parseHTML(data.name)); + }, }, }); @@ -195,25 +203,29 @@ "defaultContent": "", "type": "html", "data": oLevelsProperties[sKey].alias+".fields."+oLevelsProperties[sKey].fields[i].code, - "render": function(data, type, row){ - var cellElem = $(''); - - // Building value and metadata - for(var sPropName in data) + "render": { - var sPropValue = data[sPropName]; - if(sPropName === 'value_html') - { - cellElem.html(sPropValue); - } - else - { - cellElem.attr('data-'+sPropName.replace('_', '-'), sPropValue); - } - } + _: function (data, type, row) { + var cellElem = $(''); - return cellElem.prop('outerHTML'); - }, + // Building value and metadata + for (var sPropName in data) { + var sPropValue = data[sPropName]; + if (sPropName === 'value_html') { + cellElem.html(sPropValue); + } else { + cellElem.attr('data-' + sPropName.replace('_', '-'), sPropValue); + } + } + return cellElem.prop('outerHTML'); + }, + sort: function (data, type, row) { + return $.text($.parseHTML(data['value_html'])); + }, + filter: function (data, type, row) { + return $.text($.parseHTML(data['value_html'])); + }, + }, }); } } diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/filter/tile.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/filter/tile.html.twig index 3009aa2bc..7168c6141 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/bricks/filter/tile.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/filter/tile.html.twig @@ -10,10 +10,9 @@
{% block pTileWrapper %}
- +
{{ brick.GetTitleHome|dict_s }}
{% if brick.HasDescription %} diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/manage/layout-table.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/manage/layout-table.html.twig index 66354ba56..7f97a611d 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/bricks/manage/layout-table.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/manage/layout-table.html.twig @@ -158,8 +158,11 @@ return cellElem.prop('outerHTML'); }, sort: function (attribute_code, type, row) { - return row.attributes[attribute_code].sort_value; + return row.attributes[attribute_code].sort_value; }, + filter: function (attribute_code, type, row) { + return $.text($.parseHTML(row.attributes[attribute_code]['value_html'])); + }, }, }); } diff --git a/images/bg.gif b/images/bg.gif deleted file mode 100644 index e2d7d0e3c..000000000 Binary files a/images/bg.gif and /dev/null differ diff --git a/images/desc.gif b/images/desc.gif deleted file mode 100644 index e59584d35..000000000 Binary files a/images/desc.gif and /dev/null differ diff --git a/js/jquery.treeview.js b/js/jquery.treeview.js index 0e8fe5d4e..63ceaabd9 100644 --- a/js/jquery.treeview.js +++ b/js/jquery.treeview.js @@ -179,19 +179,19 @@ else { $(this) - .parent() + .parent() // swap classes for hitarea .find(">.hitarea") - .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) - .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) + .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) + .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) .end() // swap classes for parent li - .replaceClass( CLASSES.collapsable, CLASSES.expandable ) - .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) + .swapClass( CLASSES.collapsable, CLASSES.expandable ) + .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) // find child lists .find( ">ul" ) - // toggle them - .heightToggleHide( settings.animated, settings.toggle ); + // toggle them + .heightToggle( settings.animated, settings.toggle ); } if ( settings.unique ) { @@ -295,4 +295,4 @@ // provide backwards compability $.fn.Treeview = $.fn.treeview; -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/pages/UI.php b/pages/UI.php index 0fb6d19ea..36dfe94c4 100644 --- a/pages/UI.php +++ b/pages/UI.php @@ -576,7 +576,13 @@ try else { // Split the text on the blanks and treat this as a search for AND AND - $aFullTextNeedles = explode(' ', $sFullText); + $aExplodedFullTextNeedles = explode(' ', $sFullText); + $aFullTextNeedles = []; + foreach ($aExplodedFullTextNeedles as $sValue) { + if (strlen($sValue) > 0) { + $aFullTextNeedles[] = $sValue; + } + } } // Check the needle length diff --git a/pages/csvimport.php b/pages/csvimport.php index 0cfcc4cd5..960ff18d3 100644 --- a/pages/csvimport.php +++ b/pages/csvimport.php @@ -50,7 +50,7 @@ try $sHtml = "