link.rb 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. class Link < ActiveRecord::Base
  2. belongs_to :link_type, :class_name => 'Link::Type'
  3. belongs_to :link_object, :class_name => 'Link::Object'
  4. @map = {
  5. 'normal' => 'normal',
  6. 'parent' => 'child',
  7. 'child' => 'parent',
  8. }
  9. =begin
  10. links = Link.list(
  11. :link_object => 'Ticket',
  12. :link_object_value => 1
  13. )
  14. =end
  15. def self.list(data)
  16. linkobject = self.link_object_get( :name => data[:link_object] )
  17. return if !linkobject
  18. items = []
  19. # get links for one site
  20. list = Link.where(
  21. 'link_object_source_id = ? AND link_object_source_value = ?', linkobject.id, data[:link_object_value]
  22. )
  23. list.each { |item|
  24. link = {}
  25. link['link_type'] = @map[ Link::Type.find( item.link_type_id ).name ]
  26. link['link_object'] = Link::Object.find( item.link_object_target_id ).name
  27. link['link_object_value'] = item.link_object_target_value
  28. items.push link
  29. }
  30. # get links for the other site
  31. list = Link.where(
  32. 'link_object_target_id = ? AND link_object_target_value = ?', linkobject.id, data[:link_object_value]
  33. )
  34. list.each { |item|
  35. link = {}
  36. link['link_type'] = Link::Type.find( item.link_type_id ).name
  37. link['link_object'] = Link::Object.find( item.link_object_source_id ).name
  38. link['link_object_value'] = item.link_object_source_value
  39. items.push link
  40. }
  41. return items
  42. end
  43. =begin
  44. Link.add(
  45. :link_type => 'normal',
  46. :link_object_source => 'Ticket',
  47. :link_object_source_value => 6,
  48. :link_object_target => 'Ticket',
  49. :link_object_target_value => 31
  50. )
  51. Link.add(
  52. :link_types_id => 12,
  53. :link_object_source_id => 1,
  54. :link_object_source_value => 1,
  55. :link_object_target_id => 1,
  56. :link_object_target_value => 1
  57. )
  58. =end
  59. def self.add(data)
  60. if data.has_key?(:link_type)
  61. linktype = self.link_type_get( :name => data[:link_type] )
  62. data[:link_type_id] = linktype.id
  63. data.delete( :link_type )
  64. end
  65. if data.has_key?(:link_object_source)
  66. linkobject = self.link_object_get( :name => data[:link_object_source] )
  67. data[:link_object_source_id] = linkobject.id
  68. data.delete( :link_object_source )
  69. end
  70. if data.has_key?(:link_object_target)
  71. linkobject = self.link_object_get( :name => data[:link_object_target] )
  72. data[:link_object_target_id] = linkobject.id
  73. data.delete( :link_object_target )
  74. end
  75. Link.create(data)
  76. end
  77. =begin
  78. Link.remove(
  79. :link_type => 'normal',
  80. :link_object_source => 'Ticket',
  81. :link_object_source_value => 6,
  82. :link_object_target => 'Ticket',
  83. :link_object_target_value => 31
  84. )
  85. =end
  86. def self.remove(data)
  87. if data.has_key?(:link_object_source)
  88. linkobject = self.link_object_get( :name => data[:link_object_source] )
  89. data[:link_object_source_id] = linkobject.id
  90. end
  91. if data.has_key?(:link_object_target)
  92. linkobject = self.link_object_get( :name => data[:link_object_target] )
  93. data[:link_object_target_id] = linkobject.id
  94. end
  95. # from one site
  96. if data.has_key?(:link_type)
  97. linktype = self.link_type_get( :name => data[:link_type] )
  98. data[:link_type_id] = linktype.id
  99. end
  100. links = Link.where(
  101. :link_type_id => data[:link_type_id],
  102. :link_object_source_id => data[:link_object_source_id],
  103. :link_object_source_value => data[:link_object_source_value],
  104. :link_object_target_id => data[:link_object_target_id],
  105. :link_object_target_value => data[:link_object_target_value]
  106. )
  107. links.each { |link|
  108. link.destroy
  109. }
  110. # from the other site
  111. if data.has_key?(:link_type)
  112. linktype = self.link_type_get( :name => @map[ data[:link_type] ] )
  113. data[:link_type_id] = linktype.id
  114. end
  115. links = Link.where(
  116. :link_type_id => data[:link_type_id],
  117. :link_object_target_id => data[:link_object_source_id],
  118. :link_object_target_value => data[:link_object_source_value],
  119. :link_object_source_id => data[:link_object_target_id],
  120. :link_object_source_value => data[:link_object_target_value]
  121. )
  122. links.each { |link|
  123. link.destroy
  124. }
  125. end
  126. private
  127. def self.link_type_get(data)
  128. linktype = Link::Type.where( :name => data[:name] ).first
  129. if !linktype
  130. linktype = Link::Type.create(
  131. :name => data[:name]
  132. )
  133. end
  134. return linktype
  135. end
  136. def self.link_object_get(data)
  137. linkobject = Link::Object.where( :name => data[:name] ).first
  138. if !linkobject
  139. linkobject = Link::Object.create(
  140. :name => data[:name]
  141. )
  142. end
  143. return linkobject
  144. end
  145. end
  146. class Link::Type < ActiveRecord::Base
  147. validates :name, :presence => true
  148. end
  149. class Link::Object < ActiveRecord::Base
  150. validates :name, :presence => true
  151. end