trabajo-afectivo/app/models/tag.rb

190 lines
3.6 KiB
Ruby
Raw Normal View History

2014-02-03 19:23:00 +00:00
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
2012-11-18 11:06:55 +00:00
class Tag < ApplicationModel
belongs_to :tag_object, class_name: 'Tag::Object'
belongs_to :tag_item, class_name: 'Tag::Item'
2012-11-18 11:06:55 +00:00
# rubocop:disable Style/ClassVars
2012-11-18 11:06:55 +00:00
@@cache_item = {}
@@cache_object = {}
# rubocop:enable Style/ClassVars
=begin
add tags for certain object
Tag.tag_add(
object: 'Ticket',
o_id: ticket.id,
item: 'some tag',
created_by_id: current_user.id,
)
=end
2012-11-18 11:06:55 +00:00
def self.tag_add(data)
2012-11-18 11:06:55 +00:00
# lookups
if data[:object]
2016-05-03 00:36:44 +00:00
tag_object_id = tag_object_lookup(data[:object])
2012-11-18 11:06:55 +00:00
end
if data[:item]
2016-05-03 00:36:44 +00:00
tag_item_id = tag_item_lookup(data[:item].strip)
2012-11-18 11:06:55 +00:00
end
2016-05-03 00:36:44 +00:00
# return in duplicate
current_tags = tag_list(data)
return true if current_tags.include?(data[:item].strip)
2016-05-03 00:36:44 +00:00
2012-11-18 11:06:55 +00:00
# create history
Tag.create(
tag_object_id: tag_object_id,
tag_item_id: tag_item_id,
o_id: data[:o_id],
created_by_id: data[:created_by_id],
2012-11-18 11:06:55 +00:00
)
# touch reference
touch_reference_by_params(data)
true
2012-11-18 11:06:55 +00:00
end
=begin
remove tags of certain object
Tag.tag_add(
object: 'Ticket',
o_id: ticket.id,
item: 'some tag',
created_by_id: current_user.id,
)
=end
def self.tag_remove(data)
2012-11-18 11:06:55 +00:00
# lookups
if data[:object]
2016-05-03 00:36:44 +00:00
tag_object_id = tag_object_lookup(data[:object])
2012-11-18 11:06:55 +00:00
end
if data[:item]
2016-05-03 00:36:44 +00:00
tag_item_id = tag_item_lookup(data[:item].strip)
2012-11-18 11:06:55 +00:00
end
# create history
result = Tag.where(
tag_object_id: tag_object_id,
tag_item_id: tag_item_id,
o_id: data[:o_id],
2012-11-18 11:06:55 +00:00
)
result.each(&:destroy)
# touch reference
touch_reference_by_params(data)
true
2012-11-18 11:06:55 +00:00
end
=begin
tag list for certain object
tags = Tag.tag_list(
object: 'Ticket',
o_id: ticket.id,
item: 'some tag',
created_by_id: current_user.id,
)
returns
['tag 1', 'tag2', ...]
=end
2016-05-03 00:36:44 +00:00
def self.tag_list(data)
tag_object_id_requested = tag_object_lookup(data[:object])
2012-11-18 11:06:55 +00:00
tag_search = Tag.where(
tag_object_id: tag_object_id_requested,
o_id: data[:o_id],
2012-11-18 11:06:55 +00:00
)
tags = []
tag_search.each {|tag|
2016-05-03 00:36:44 +00:00
tags.push tag_item_lookup_id(tag.tag_item_id)
2012-11-18 11:06:55 +00:00
}
tags
2012-11-18 11:06:55 +00:00
end
2016-05-03 00:36:44 +00:00
def self.tag_item_lookup_id(id)
2012-11-18 11:06:55 +00:00
# use cache
2016-05-03 00:36:44 +00:00
return @@cache_item[id] if @@cache_item[id]
2012-11-18 11:06:55 +00:00
# lookup
tag_item = Tag::Item.find(id)
2016-05-03 00:36:44 +00:00
@@cache_item[id] = tag_item.name
tag_item.name
end
2012-11-18 11:06:55 +00:00
2016-05-03 00:36:44 +00:00
def self.tag_item_lookup(name)
2012-11-18 11:09:37 +00:00
# use cache
2016-05-03 00:36:44 +00:00
return @@cache_item[name] if @@cache_item[name]
2012-11-18 11:06:55 +00:00
# lookup
tag_items = Tag::Item.where(name: name)
tag_items.each {|tag_item|
next if tag_item.name != name
2016-05-03 00:36:44 +00:00
@@cache_item[name] = tag_item.id
2012-11-18 11:06:55 +00:00
return tag_item.id
}
2012-11-18 11:06:55 +00:00
# create
2016-05-03 00:36:44 +00:00
tag_item = Tag::Item.create(name: name)
@@cache_item[name] = tag_item.id
tag_item.id
end
2012-11-18 11:06:55 +00:00
2016-05-03 00:36:44 +00:00
def self.tag_object_lookup_id(id)
2012-11-18 11:06:55 +00:00
# use cache
2016-05-03 00:36:44 +00:00
return @@cache_object[id] if @@cache_object[id]
2012-11-18 11:06:55 +00:00
# lookup
tag_object = Tag::Object.find(id)
2016-05-03 00:36:44 +00:00
@@cache_object[id] = tag_object.name
tag_object.name
end
2012-11-18 11:06:55 +00:00
2016-05-03 00:36:44 +00:00
def self.tag_object_lookup(name)
2012-11-18 11:06:55 +00:00
# use cache
2016-05-03 00:36:44 +00:00
return @@cache_object[name] if @@cache_object[name]
2012-11-18 11:06:55 +00:00
# lookup
2016-05-03 00:36:44 +00:00
tag_object = Tag::Object.find_by(name: name)
if tag_object
2016-05-03 00:36:44 +00:00
@@cache_object[name] = tag_object.id
2012-11-18 11:06:55 +00:00
return tag_object.id
end
# create
2016-05-03 00:36:44 +00:00
tag_object = Tag::Object.create(name: name)
@@cache_object[name] = tag_object.id
tag_object.id
end
2012-11-18 11:06:55 +00:00
class Object < ActiveRecord::Base
end
class Item < ActiveRecord::Base
before_save :fill_namedowncase
def fill_namedowncase
self.name_downcase = name.downcase
end
2012-11-18 11:06:55 +00:00
end
end