diff --git a/app/assets/javascripts/app/controllers/link_info.js.coffee b/app/assets/javascripts/app/controllers/link_info.js.coffee
index 91a092369..9e509e543 100644
--- a/app/assets/javascripts/app/controllers/link_info.js.coffee
+++ b/app/assets/javascripts/app/controllers/link_info.js.coffee
@@ -2,15 +2,18 @@ $ = jQuery.sub()
class App.LinkInfo extends App.Controller
events:
- 'focusout [data-type=edit]': 'update',
+ 'click [data-type=add]': 'add',
+ 'click [data-type=remove]': 'remove',
constructor: ->
super
+ @fetch()
+ fetch: () =>
# fetch item on demand
# get data
App.Com.ajax(
- id: 'links_' + @object_id + '_' + @object,
+ id: 'links_' + @object.id + '_' + @object_type,
type: 'GET',
url: '/links',
data: {
@@ -30,7 +33,7 @@ class App.LinkInfo extends App.Controller
@render()
)
- render: () ->
+ render: () =>
list = {}
for item in @links
@@ -40,10 +43,8 @@ class App.LinkInfo extends App.Controller
if item['link_object'] is 'Ticket'
list[ item['link_type'] ].push App.Ticket.find( item['link_object_value'] )
- return if _.isEmpty( @links )
-
# insert data
- @html App.view('link_info')(
+ @html App.view('link/info')(
links: list,
)
@@ -52,11 +53,72 @@ class App.LinkInfo extends App.Controller
# user_id: user_id,
# )
- update: (e) =>
-
- # update changes
- note = $(e.target).parent().find('[data-type=edit]').val()
- user = App.User.find(@user_id)
- if user.note isnt note
- user.updateAttributes( note: note )
- @log 'update', e, note, user
+ remove: (e) =>
+ e.preventDefault()
+ link_type = $(e.target).data('link-type')
+ link_object_source = $(e.target).data('object')
+ link_object_source_value = $(e.target).data('object-id')
+ link_object_target = @object_type
+ link_object_target_value = @object.id
+
+ # get data
+ App.Com.ajax(
+ id: 'links_remove_' + @object.id + '_' + @object_type,
+ type: 'GET',
+ url: '/links/remove',
+ data: {
+ link_type: link_type,
+ link_object_source: link_object_source,
+ link_object_source_value: link_object_source_value,
+ link_object_target: link_object_target,
+ link_object_target_value: link_object_target_value,
+ }
+ processData: true,
+ success: (data, status, xhr) =>
+ @fetch()
+ )
+
+ add: (e) =>
+ e.preventDefault()
+ new App.LinkAdd(
+ link_object: @object_type,
+ link_object_id: @object.id,
+ object: @object,
+ parent: @,
+ )
+
+class App.LinkAdd extends App.ControllerModal
+ constructor: ->
+ super
+ @render()
+
+ render: =>
+ @html App.view('link/add')(
+ link_object: @link_object,
+ link_object_id: @link_object_id,
+ object: @object,
+ )
+ @modalShow()
+
+ submit: (e) =>
+ e.preventDefault()
+ params = @formParam(e.target)
+ @log 'link', params
+
+ # get data
+ App.Com.ajax(
+ id: 'links_add_' + @object.id + '_' + @object_type,
+ type: 'GET',
+ url: '/links/add',
+ data: {
+ link_type: params['link_type'],
+ link_object_source: 'Ticket',
+ link_object_source_value: @object.id,
+ link_object_target: 'Ticket',
+ link_object_target_number: params['ticket_number'],
+ }
+ processData: true,
+ success: (data, status, xhr) =>
+ @modalHide()
+ @parent.fetch()
+ )
\ No newline at end of file
diff --git a/app/assets/javascripts/app/views/link/add.jst.eco b/app/assets/javascripts/app/views/link/add.jst.eco
new file mode 100644
index 000000000..32636ebe6
--- /dev/null
+++ b/app/assets/javascripts/app/views/link/add.jst.eco
@@ -0,0 +1,30 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/app/views/link/info.jst.eco b/app/assets/javascripts/app/views/link/info.jst.eco
new file mode 100644
index 000000000..6d90ae5c0
--- /dev/null
+++ b/app/assets/javascripts/app/views/link/info.jst.eco
@@ -0,0 +1,15 @@
+
+
<%- T('Linked Objects') %>
+
+ <% for type of @links: %>
+
<%- T( type ) %>
+
+ <% end %>
+
+
+
+
diff --git a/app/assets/javascripts/app/views/link_info.jst.eco b/app/assets/javascripts/app/views/link_info.jst.eco
deleted file mode 100644
index 274ef6e2d..000000000
--- a/app/assets/javascripts/app/views/link_info.jst.eco
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
<%- T('Linked Objects') %>
-
- <% for type of @links: %>
-
<%- T( type ) %>
-
- <% end %>
-
-
diff --git a/app/controllers/links_controller.rb b/app/controllers/links_controller.rb
index 5f5a6ab04..dde9a1c16 100644
--- a/app/controllers/links_controller.rb
+++ b/app/controllers/links_controller.rb
@@ -40,12 +40,14 @@ class LinksController < ApplicationController
# POST /links/add
def add
# @template.created_by_id = current_user.id
+ # lookup object id
+ object_id = Ticket.where( :number => params[:link_object_target_number] ).first.id
link = Link.add(
:link_type => params[:link_type],
:link_object_source => params[:link_object_source],
:link_object_source_value => params[:link_object_source_value],
:link_object_target => params[:link_object_target],
- :link_object_target_value => params[:link_object_target_value]
+ :link_object_target_value => object_id
)
if link
@@ -55,14 +57,14 @@ class LinksController < ApplicationController
end
end
- # DELETE /links/delete
- def delete
- @template = Template.find(params[:id])
+ # DELETE /links/remove
+ def remove
+ link = Link.remove(params)
- if @template.update_attributes(params[:template])
- render :json => @template, :status => :ok
+ if link
+ render :json => link, :status => :created
else
- render :json => @template.errors, :status => :unprocessable_entity
+ render :json => link.errors, :status => :unprocessable_entity
end
end
diff --git a/app/models/link.rb b/app/models/link.rb
index 619df21b0..61ad1e385 100644
--- a/app/models/link.rb
+++ b/app/models/link.rb
@@ -1,74 +1,41 @@
class Link < ActiveRecord::Base
- belongs_to :link_type, :class_name => 'Link::Type'
- belongs_to :link_object, :class_name => 'Link::Object'
+ belongs_to :link_type, :class_name => 'Link::Type'
+ belongs_to :link_object, :class_name => 'Link::Object'
- #before_create :check_object
- #after_create :after_create, :cache_delete
- #after_update :cache_delete
- #after_destroy :cache_delete
+ @map = {
+ 'normal' => 'normal',
+ 'parent' => 'child',
+ 'child' => 'parent',
+ }
=begin
- Link.add(
- :link_type => 'normal',
- :link_object_source => 'Ticket',
- :link_object_source_value => 6,
- :link_object_target => 'Ticket',
- :link_object_target_value => 31
- )
-
- Link.add(
- :link_types_id => 12,
- :link_object_source_id => 1,
- :link_object_source_value => 1,
- :link_object_target_id => 1,
- :link_object_target_value => 1
- )
-
Link.list(
:link_object => 'Ticket',
:link_object_value => 1
)
- Link.get_links_for_source_object(
- :link_object => 'Ticket',
- :link_object_value => 1
- )
-
- Link.get_links_for_target_object(
- :link_object => 'Ticket',
- :link_object_value => 1,
- )
-
- Link.delete_link_by_source( :source_value => 1 )
-
- Link.delete_link_by_target( :target_value => 1 )
-
- Link.delete_all_links_by_value( :object_value => 1 )
=end
def self.list(data)
linkobject = self.link_object_get( :name => data[:link_object] )
return if !linkobject
+ items = []
+
+ # get links for one site
list = Link.where(
'link_object_source_id = ? AND link_object_source_value = ?', linkobject.id, data[:link_object_value]
)
- map = {
- 'normal' => 'normal',
- 'parent' => 'child',
- 'child' => 'parent',
- }
-
- items = []
list.each { |item|
link = {}
- link['link_type'] = map[ Link::Type.find( item.link_type_id ).name ]
+ link['link_type'] = @map[ Link::Type.find( item.link_type_id ).name ]
link['link_object'] = Link::Object.find( item.link_object_target_id ).name
link['link_object_value'] = item.link_object_target_value
items.push link
}
+ # get links for the other site
list = Link.where(
'link_object_target_id = ? AND link_object_target_value = ?', linkobject.id, data[:link_object_value]
)
@@ -83,19 +50,25 @@ class Link < ActiveRecord::Base
return items
end
- def self.get_links_for_source_object(data)
- linkobject_id = self.get_linktype_by_name( :name => data[:link_object] )
- if linkobject_id
- Link.where( :link_object_source_id => linkobject_id, :link_object_source_value => data[:link_object_value] )
- end
- end
+=begin
- def self.get_links_for_target_object(data)
- linkobject_id = self.get_linktype_by_name( :name => data[:link_object] )
- if linkobject_id
- Link.where( :link_object_target_id => linkobject_id, :link_object_target_value => data[:link_object_value] )
- end
- end
+ Link.add(
+ :link_type => 'normal',
+ :link_object_source => 'Ticket',
+ :link_object_source_value => 6,
+ :link_object_target => 'Ticket',
+ :link_object_target_value => 31
+ )
+
+ Link.add(
+ :link_types_id => 12,
+ :link_object_source_id => 1,
+ :link_object_source_value => 1,
+ :link_object_target_id => 1,
+ :link_object_target_value => 1
+ )
+
+=end
def self.add(data)
@@ -120,16 +93,60 @@ class Link < ActiveRecord::Base
Link.create(data)
end
- def self.delete_link_by_source(data)
- Link.where( :link_object_source_value => data[:source_value] ).destroy_all
- end
+=begin
- def self.delete_link_by_target(data)
- Link.where( :link_object_target_value => data[:target_value] ).destroy_all
- end
+ Link.remove(
+ :link_type => 'normal',
+ :link_object_source => 'Ticket',
+ :link_object_source_value => 6,
+ :link_object_target => 'Ticket',
+ :link_object_target_value => 31
+ )
- def self.delete_all_links_by_value(data)
- Link.where( ["link_object_source_value = ? or link_object_target_value = ?", data[:object_value], data[:object_value]] ).destroy_all
+=end
+
+ def self.remove(data)
+ if data.has_key?(:link_object_source)
+ linkobject = self.link_object_get( :name => data[:link_object_source] )
+ data[:link_object_source_id] = linkobject.id
+ end
+
+ if data.has_key?(:link_object_target)
+ linkobject = self.link_object_get( :name => data[:link_object_target] )
+ data[:link_object_target_id] = linkobject.id
+ end
+
+ # from one site
+ if data.has_key?(:link_type)
+ linktype = self.link_type_get( :name => data[:link_type] )
+ data[:link_type_id] = linktype.id
+ end
+ links = Link.where(
+ :link_type_id => data[:link_type_id],
+ :link_object_source_id => data[:link_object_source_id],
+ :link_object_source_value => data[:link_object_source_value],
+ :link_object_target_id => data[:link_object_target_id],
+ :link_object_target_value => data[:link_object_target_value]
+ )
+ links.each { |link|
+ link.destroy
+ }
+
+ # from the other site
+ if data.has_key?(:link_type)
+ linktype = self.link_type_get( :name => @map[ data[:link_type] ] )
+ data[:link_type_id] = linktype.id
+ end
+ links = Link.where(
+ :link_type_id => data[:link_type_id],
+ :link_object_target_id => data[:link_object_source_id],
+ :link_object_target_value => data[:link_object_source_value],
+ :link_object_source_id => data[:link_object_target_id],
+ :link_object_source_value => data[:link_object_target_value]
+ )
+ links.each { |link|
+ link.destroy
+ }
end
private
@@ -153,24 +170,6 @@ class Link < ActiveRecord::Base
return linkobject
end
- def self.get_linktype_by_name(data)
- linkid = Link::Object.where( :name => data[:name] ).first
- end
-
- #checks for a valid link type
- def check_valid_link_type
- Rails.logger.info "Logger Test"
- puts "pre check link type"
- end
-
- def get_linkobject_by_key
- puts "check for exisiting link"
- end
-
- #checks for an exisiting ling
- def check_existing_link
- puts "check for exisiting link"
- end
end
class Link::Type < ActiveRecord::Base
diff --git a/config/routes/base.rb b/config/routes/base.rb
index 8eb25456e..0655bbd0c 100644
--- a/config/routes/base.rb
+++ b/config/routes/base.rb
@@ -24,7 +24,7 @@ module ExtraRoutes
# links
map.match '/links', :to => 'links#index'
map.match '/links/add', :to => 'links#add'
- map.match '/links/delete', :to => 'links#delete'
+ map.match '/links/remove', :to => 'links#remove'
# overviews
map.resources :overviews