# File lib/ruby-bugzilla/rhbugzilla.rb, line 48
      def prehook(*args)
        cmd, opts, *etc = args
        case cmd
        when :search
          # This parameter is Red Hat Extension
          # See https://bugzilla.redhat.com/docs/en/html/api/Bugzilla/WebService/Bug.html#search
          opts[:query_format] = 'advanced'
          extra_field = 0

          if opts.include?(:status) then
            opts[:bug_status] = opts[:status]
            opts.delete(:status)
          end
          if opts.include?(:id) then
            opts[:bug_id] = opts[:id]
            opts.delete(:id)
          end
          if opts.include?(:severity)
            opts[:bug_severity] = opts[:severity]
          end
          if opts.include?(:summary) then
            opts[:short_desc] = opts[:summary]
            opts.delete(:summary)
          end
          if opts.include?(:cc) then
            i = 1
            opts[:cc].each do |e|
              opts[eval(":emailcc#{i}")] = 1
              opts[eval(":emailtype#{i}")] = :substring
              opts[eval(":email#{i}")] = e
            end
            opts.delete(:cc)
          end
          if opts.include?(:creation_time) then
            opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
            opts[sprintf("type0-%d-0", extra_field)] = :greaterthan
            opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time]
            opts.delete(:creation_time)
          end
        when :metrics
          metricsopts = etc[0]
          extra_field = 0

          if opts.include?(:status) then
            opts[:bug_status] = opts[:status]
            opts.delete(:status)
          end
          if opts.include?(:id) then
            opts[:bug_id] = opts[:id]
            opts.delete(:id)
          end
          if opts.include?(:severity)
            opts[:bug_severity] = opts[:severity]
          end
          if opts.include?(:summary) then
            opts[:short_desc] = opts[:summary]
            opts.delete(:summary)
          end
          if opts.include?(:cc) then
            i = 1
            opts[:cc].each do |e|
              opts[eval(":emailcc#{i}")] = 1
              opts[eval(":emailtype#{i}")] = :substring
              opts[eval(":email#{i}")] = e
            end
            opts.delete(:cc)
          end

          if opts.include?(:creation_time) then
            if opts[:creation_time].kind_of?(Array) then
              opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
              opts[sprintf("type0-%d-0", extra_field)] = :greaterthan
              opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time][0]
              extra_field += 1
              opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
              opts[sprintf("type0-%d-0", extra_field)] = :lessthan
              opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time][1]
              extra_field += 1
            else
              opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
              opts[sprintf("type0-%d-0", extra_field)] = :greaterthan
              opts[sprintf("value0-%d-0", extra_field)] = opts[:creation_time]
              extra_field += 1
            end
            opts.delete(:creation_time)
          end
          if opts.include?(:last_change_time) then
            if opts[:last_change_time].kind_of?(Array) then
              opts[:chfieldfrom] = opts[:last_change_time][0]
              opts[:chfieldto] = opts[:last_change_time][1]
              if opts[:bug_status] == 'CLOSED' then
                opts[sprintf("field0-%d-0", extra_field)] = :bug_status
                opts[sprintf("type0-%d-0", extra_field)] = :changedto
                opts[sprintf("value0-%d-0", extra_field)] = opts[:bug_status]
                extra_field += 1
              end
            end
            opts.delete(:last_change_time)
          end
          if opts.include?(:metrics_closed_after) then
            opts[sprintf("field0-%d-0", extra_field)] = :bug_status
            opts[sprintf("type0-%d-0", extra_field)] = :changedafter
            opts[sprintf("value0-%d-0", extra_field)] = opts[:metrics_closed_after]
            extra_field += 1
            opts.delete(:metrics_closed_after)
          end
          if opts.include?(:metrics_not_closed) then
            opts[sprintf("field0-%d-0", extra_field)] = :bug_status
            opts[sprintf("type0-%d-0", extra_field)] = :notequals
            opts[sprintf("value0-%d-0", extra_field)] = 'CLOSED'
            extra_field += 1
            opts[sprintf("field0-%d-0", extra_field)] = :creation_ts
            opts[sprintf("type0-%d-0", extra_field)] = :lessthan
            opts[sprintf("value0-%d-0", extra_field)] = opts[:metrics_not_closed]
            extra_field += 1
            opts.delete(:metrics_not_closed)
          end
        else
        end
      end