Project

General

Profile

Feature #34715 » 34715-v2.patch

Go MAEDA, 2021-06-11 11:27

View differences:

app/helpers/queries_helper.rb
41 41
        group = :label_date
42 42
      elsif %w(estimated_hours spent_time).include?(field)
43 43
        group = :label_time_tracking
44
      elsif %w(attachment attachment_description).include?(field)
45
        group = :label_attachment
44 46
      end
45 47
      if group
46 48
        (grouped[group] ||= []) << [field_options[:name], field]
app/models/issue_query.rb
202 202
      "attachment",
203 203
      :type => :text, :name => l(:label_attachment)
204 204
    )
205
    add_available_filter(
206
      "attachment_description",
207
      :type => :text, :name => l(:label_attachment_description)
208
    )
205 209
    if User.current.logged?
206 210
      add_available_filter(
207 211
        "watcher_id",
......
597 601
    end
598 602
  end
599 603

  
604
  def sql_for_attachment_description_field(field, operator, value)
605
    cond_description = "a.description IS NOT NULL AND a.description <> ''"
606
    c =
607
      case operator
608
      when '*', '!*'
609
        (operator == '*' ? cond_description : "NOT (#{cond_description})")
610
      when '~', '!~'
611
        (operator == '~' ? '' : "#{cond_description} AND ") +
612
        sql_contains('a.description', value.first, :match => (operator == '~'))
613
      when '^', '$'
614
        sql_contains('a.description', value.first, (operator == '^' ? :starts_with : :ends_with) => true)
615
      else
616
        '1=0'
617
      end
618
    "EXISTS (SELECT 1 FROM #{Attachment.table_name} a WHERE a.container_type = 'Issue' AND a.container_id = #{Issue.table_name}.id AND #{c})"
619
  end
620

  
600 621
  def sql_for_parent_id_field(field, operator, value)
601 622
    case operator
602 623
    when "="
config/locales/en.yml
701 701
  label_attachment_delete: Delete file
702 702
  label_attachment_plural: Files
703 703
  label_file_added: File added
704
  label_attachment_description: File description
704 705
  label_report: Report
705 706
  label_report_plural: Reports
706 707
  label_news: News
test/fixtures/attachments.yml
197 197
  filename: private.diff
198 198
  author_id: 2
199 199
  content_type: text/x-diff
200
  description: attachement of a private issue
200
  description: attachment of a private issue
201 201
attachments_016:
202 202
  content_type: image/png
203 203
  downloads: 0
test/unit/query_test.rb
1527 1527
    assert_equal [3, 4], issues.collect(&:id).sort
1528 1528
  end
1529 1529

  
1530
  def test_filter_on_attachment_description_when_any
1531
    query = IssueQuery.new(:name => '_')
1532
    query.filters = {"attachment_description" => {:operator => '*', :values =>  ['']}}
1533
    issues = find_issues_with_query(query)
1534
    assert_equal [2, 3, 14], issues.collect(&:id).sort
1535
  end
1536

  
1537
  def test_filter_on_attachment_description_when_none
1538
    query = IssueQuery.new(:name => '_')
1539
    query.filters = {"attachment_description" => {:operator => '!*', :values =>  ['']}}
1540
    issues = find_issues_with_query(query)
1541
    assert_equal [2, 3, 4, 14], issues.collect(&:id).sort
1542
  end
1543

  
1544
  def test_filter_on_attachment_description_when_contains
1545
    query = IssueQuery.new(:name => '_')
1546
    query.filters = {"attachment_description" => {:operator => '~', :values =>  ['attachment']}}
1547
    issues = find_issues_with_query(query)
1548
    assert_equal [3, 14], issues.collect(&:id).sort
1549
  end
1550

  
1551
  def test_filter_on_attachment_description_when_does_not_contain
1552
    query = IssueQuery.new(:name => '_')
1553
    query.filters = {"attachment_description" => {:operator => '!~', :values =>  ['attachment']}}
1554
    issues = find_issues_with_query(query)
1555
    assert_equal [2], issues.collect(&:id).sort
1556
  end
1557

  
1558
  def test_filter_on_attachment_description_when_starts_with
1559
    query = IssueQuery.new(:name => '_')
1560
    query.filters = {"attachment_description" => {:operator => '^', :values =>  ['attachment']}}
1561
    issues = find_issues_with_query(query)
1562
    assert_equal [14], issues.collect(&:id).sort
1563
  end
1564

  
1565
  def test_filter_on_attachment_description_when_ends_with
1566
    query = IssueQuery.new(:name => '_')
1567
    query.filters = {"attachment_description" => {:operator => '$', :values =>  ['attachment']}}
1568
    issues = find_issues_with_query(query)
1569
    assert_equal [3], issues.collect(&:id).sort
1570
  end
1571

  
1530 1572
  def test_filter_on_subject_when_starts_with
1531 1573
    query = IssueQuery.new(:name => '_')
1532 1574
    query.filters = {'subject' => {:operator => '^', :values => ['issue']}}
(2-2/3)