class KayakoClient::TicketCustomField

Constants

TYPE_CHECKBOX
TYPE_CUSTOM
TYPE_DATE
TYPE_FILE
TYPE_LINKED_SELECT
TYPE_MULTI_SELECT
TYPE_PASSWORD
TYPE_RADIO
TYPE_SELECT
TYPE_TEXT
TYPE_TEXT_AREA

Attributes

ticket_id[RW]

Public Class Methods

get(*args) click to toggle source
Calls superclass method
# File lib/kayako_client/ticket_custom_field.rb, line 253
def self.get(*args)
    object = super
    if object && object.respond_to?(:ticket_id=)
        object.ticket_id = args[0]
        object.loaded!
    end
    object
end
new(*args) click to toggle source

NOTE: when a new field is added returns (for old tickets): [Notice]: Undefined offset: 11 (api/class.Controller_TicketCustomField.php:279)

Calls superclass method KayakoClient::Base::new
# File lib/kayako_client/ticket_custom_field.rb, line 79
def initialize(*args)
    properties = {}
    if args.last.is_a?(Hash)
        args.last.keys.each do |property|
            if property.is_a?(String)
                properties[property] = args.last.delete(property)
            end
        end
        if args.last.has_key?(:ticket_id)
            self.ticket_id = args.last.delete(:ticket_id)
        end
    end
    super
    if properties.size > 0
        properties.each do |property, value|
            self[property] = value
        end
    end
end

Public Instance Methods

[](name) click to toggle source
Calls superclass method KayakoClient::Object#[]
# File lib/kayako_client/ticket_custom_field.rb, line 155
def [](name)
    value = custom_field(name) unless name.is_a?(Symbol)
    value || super
end
[]=(name, value) click to toggle source
Calls superclass method KayakoClient::Object#[]=
# File lib/kayako_client/ticket_custom_field.rb, line 172
def []=(name, value)
    if defined?(@groups) && @groups.size > 0
        if name.is_a?(Numeric)
            if name.to_i > 0
                @groups.each do |group|
                    next unless group.fields && !group.fields.empty?
                    group.fields.each do |field|
                        if field.id == name.to_i
                            field.contents = value.to_s
                            return field.contents
                        end
                    end
                end
                raise ArgumentError, "use custom field name"
            else
                raise ArgumentError, "invalid custom field ID"
            end
        elsif name.is_a?(String)
            @groups.each do |group|
                next unless group.fields && !group.fields.empty?
                group.fields.each do |field|
                    if field.title == name
                        field.contents = value.to_s
                        return field.contents
                    end
                end
            end
            @groups.each do |group|
                next unless group.fields && !group.fields.empty?
                group.fields.each do |field|
                    if field.name == name
                        field.contents = value.to_s
                        return field.contents
                    end
                end
            end
        end
    end

    if name =~ %r{^[a-z0-9]{12}$}
        @new_group ||= []
        @new_group << TicketCustomFieldValue.new(:name => name.to_s, :contents => value.to_s)
        return value.to_s
    end

    super
end
custom_field(name) click to toggle source
# File lib/kayako_client/ticket_custom_field.rb, line 109
def custom_field(name)
    if defined?(@groups) && @groups.size > 0
        if name.is_a?(Numeric)
            if name.to_i > 0
                @groups.each do |group|
                    next unless group.fields && !group.fields.empty?
                    group.fields.each do |field|
                        if field.id == name.to_i
                            return field.contents
                        end
                    end
                end
            end
        elsif name.is_a?(String)
            @groups.each do |group|
                next unless group.fields && !group.fields.empty?
                group.fields.each do |field|
                    if field.title == name
                        return field.contents
                    end
                end
            end
            @groups.each do |group|
                next unless group.fields && !group.fields.empty?
                group.fields.each do |field|
                    if field.name == name
                        return field.contents
                    end
                end
            end
        end
    end

    if defined?(@new_group) && @new_group.size > 0
        if name.is_a?(String)
            @new_group.each do |field|
                if field.name == name
                    return field.contents
                end
            end
        end
    end

    nil
end
each(&block) click to toggle source
# File lib/kayako_client/ticket_custom_field.rb, line 160
def each(&block)
    if defined?(@groups) && @groups.size > 0
        @groups.each do |group|
            group.fields.each(&block)
        end
    end

    if defined?(@new_group) && @new_group.size > 0
        @new_group.each(&block)
    end
end
empty?() click to toggle source
# File lib/kayako_client/ticket_custom_field.rb, line 99
def empty?
    if groups && groups.size > 0
        false
    elsif defined?(@new_group) && @new_group.size > 0
        false
    else
        true
    end
end
post() click to toggle source
# File lib/kayako_client/ticket_custom_field.rb, line 220
def post
    raise RuntimeError, "client not configured" unless configured?
    raise RuntimeError, "missing ticket ID" unless ticket_id.to_i > 0
    params = {}
    each do |field|
        params[field.name] = field.contents
    end
    random = self.class.salt
    e = "#{self.class.path}/#{ticket_id.to_i}"
    response = client.post(api_url, params.merge(:e         => e,
                                                 :apikey    => api_key,
                                                 :salt      => random,
                                                 :signature => self.class.signature(random, secret_key)))
    if response.is_a?(KayakoClient::HTTPOK)
        if logger
            logger.debug "Response:"
            logger.debug response.body
        end
        payload = xml_backend.new(response.body, { :logger => logger })
        clean
        import(payload.to_hash)
        loaded!
        logger.info ":post successful" if logger
        true
    else
        unless response.is_a?(Hash)
            logger.error "Response: #{response.status} #{response.body}" if logger
            raise StandardError, "server returned #{response.status}: #{response.body}"
        end
        false
    end
end