Implemented first version of link feature.
This commit is contained in:
parent
33bea597bc
commit
c031b06aef
7 changed files with 213 additions and 118 deletions
|
@ -2,15 +2,18 @@ $ = jQuery.sub()
|
||||||
|
|
||||||
class App.LinkInfo extends App.Controller
|
class App.LinkInfo extends App.Controller
|
||||||
events:
|
events:
|
||||||
'focusout [data-type=edit]': 'update',
|
'click [data-type=add]': 'add',
|
||||||
|
'click [data-type=remove]': 'remove',
|
||||||
|
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super
|
super
|
||||||
|
@fetch()
|
||||||
|
|
||||||
|
fetch: () =>
|
||||||
# fetch item on demand
|
# fetch item on demand
|
||||||
# get data
|
# get data
|
||||||
App.Com.ajax(
|
App.Com.ajax(
|
||||||
id: 'links_' + @object_id + '_' + @object,
|
id: 'links_' + @object.id + '_' + @object_type,
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
url: '/links',
|
url: '/links',
|
||||||
data: {
|
data: {
|
||||||
|
@ -30,7 +33,7 @@ class App.LinkInfo extends App.Controller
|
||||||
@render()
|
@render()
|
||||||
)
|
)
|
||||||
|
|
||||||
render: () ->
|
render: () =>
|
||||||
|
|
||||||
list = {}
|
list = {}
|
||||||
for item in @links
|
for item in @links
|
||||||
|
@ -40,10 +43,8 @@ class App.LinkInfo extends App.Controller
|
||||||
if item['link_object'] is 'Ticket'
|
if item['link_object'] is 'Ticket'
|
||||||
list[ item['link_type'] ].push App.Ticket.find( item['link_object_value'] )
|
list[ item['link_type'] ].push App.Ticket.find( item['link_object_value'] )
|
||||||
|
|
||||||
return if _.isEmpty( @links )
|
|
||||||
|
|
||||||
# insert data
|
# insert data
|
||||||
@html App.view('link_info')(
|
@html App.view('link/info')(
|
||||||
links: list,
|
links: list,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -52,11 +53,72 @@ class App.LinkInfo extends App.Controller
|
||||||
# user_id: user_id,
|
# user_id: user_id,
|
||||||
# )
|
# )
|
||||||
|
|
||||||
update: (e) =>
|
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
|
||||||
|
|
||||||
# update changes
|
# get data
|
||||||
note = $(e.target).parent().find('[data-type=edit]').val()
|
App.Com.ajax(
|
||||||
user = App.User.find(@user_id)
|
id: 'links_remove_' + @object.id + '_' + @object_type,
|
||||||
if user.note isnt note
|
type: 'GET',
|
||||||
user.updateAttributes( note: note )
|
url: '/links/remove',
|
||||||
@log 'update', e, note, user
|
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()
|
||||||
|
)
|
30
app/assets/javascripts/app/views/link/add.jst.eco
Normal file
30
app/assets/javascripts/app/views/link/add.jst.eco
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<form class="form-horizontal">
|
||||||
|
<div class="modal-header">
|
||||||
|
<a href="#" class="close">×</a>
|
||||||
|
<h3><%- T('Link') %></h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<%- T('Link Ticket#') %>
|
||||||
|
<input type="text" name="ticket_number" value="" class="span2" required/>
|
||||||
|
<%- T('as') %>
|
||||||
|
<select name="link_type" class="span2" required>
|
||||||
|
<option value="">-</option>
|
||||||
|
<option value="normal"><%- T('normal') %></option>
|
||||||
|
<option value="child"><%- T('child') %></option>
|
||||||
|
<option value="parent"><%- T('parent') %></option>
|
||||||
|
</select>
|
||||||
|
<%- T('with') %>
|
||||||
|
<%- T(@link_object) %>
|
||||||
|
<%= @object.number %>.
|
||||||
|
<!--
|
||||||
|
<ul>
|
||||||
|
<li>Ticket#</li>
|
||||||
|
<li>Recent Views Tickets</li>
|
||||||
|
<li>Recent Customer Tickets</li>
|
||||||
|
</ul>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="submit" class="btn btn-primary"><%- T('Submit') %></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
15
app/assets/javascripts/app/views/link/info.jst.eco
Normal file
15
app/assets/javascripts/app/views/link/info.jst.eco
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<div class="well">
|
||||||
|
<h3><%- T('Linked Objects') %></h3>
|
||||||
|
|
||||||
|
<% for type of @links: %>
|
||||||
|
<strong><%- T( type ) %></strong>
|
||||||
|
<ul>
|
||||||
|
<% for item in @links[type]: %>
|
||||||
|
<li><a href="#ticket/zoom/<%= item.id %>" data-type="" title="<%= item.title %>">T:<%= item.number %> <%= item.title %></a> <a href="" data-object="Ticket" data-object-id="<%= item.id %>" data-link-type="<%= type %>" data-type="remove" class="icon-remove" title="<%- T('remove') %>"></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div><a href="" data-type="add" class="icon-plus" title="<%- T('add') %>"></a></div>
|
||||||
|
|
||||||
|
</div>
|
|
@ -1,13 +0,0 @@
|
||||||
<div class="well">
|
|
||||||
<h3><%- T('Linked Objects') %></h3>
|
|
||||||
|
|
||||||
<% for type of @links: %>
|
|
||||||
<strong><%- T( type ) %></strong>
|
|
||||||
<ul>
|
|
||||||
<% for item in @links[type]: %>
|
|
||||||
<li><a href="#ticket/zoom/<%= item.id %>" data-type="" title="<%= item.title %>">T:<%= item.number %></a></li>
|
|
||||||
<% end %>
|
|
||||||
</ul>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
</div>
|
|
|
@ -40,12 +40,14 @@ class LinksController < ApplicationController
|
||||||
# POST /links/add
|
# POST /links/add
|
||||||
def add
|
def add
|
||||||
# @template.created_by_id = current_user.id
|
# @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 = Link.add(
|
||||||
:link_type => params[:link_type],
|
:link_type => params[:link_type],
|
||||||
:link_object_source => params[:link_object_source],
|
:link_object_source => params[:link_object_source],
|
||||||
:link_object_source_value => params[:link_object_source_value],
|
:link_object_source_value => params[:link_object_source_value],
|
||||||
:link_object_target => params[:link_object_target],
|
:link_object_target => params[:link_object_target],
|
||||||
:link_object_target_value => params[:link_object_target_value]
|
:link_object_target_value => object_id
|
||||||
)
|
)
|
||||||
|
|
||||||
if link
|
if link
|
||||||
|
@ -55,14 +57,14 @@ class LinksController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# DELETE /links/delete
|
# DELETE /links/remove
|
||||||
def delete
|
def remove
|
||||||
@template = Template.find(params[:id])
|
link = Link.remove(params)
|
||||||
|
|
||||||
if @template.update_attributes(params[:template])
|
if link
|
||||||
render :json => @template, :status => :ok
|
render :json => link, :status => :created
|
||||||
else
|
else
|
||||||
render :json => @template.errors, :status => :unprocessable_entity
|
render :json => link.errors, :status => :unprocessable_entity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,58 @@
|
||||||
class Link < ActiveRecord::Base
|
class Link < ActiveRecord::Base
|
||||||
belongs_to :link_type, :class_name => 'Link::Type'
|
belongs_to :link_type, :class_name => 'Link::Type'
|
||||||
belongs_to :link_object, :class_name => 'Link::Object'
|
belongs_to :link_object, :class_name => 'Link::Object'
|
||||||
|
|
||||||
#before_create :check_object
|
@map = {
|
||||||
#after_create :after_create, :cache_delete
|
'normal' => 'normal',
|
||||||
#after_update :cache_delete
|
'parent' => 'child',
|
||||||
#after_destroy :cache_delete
|
'child' => 'parent',
|
||||||
|
}
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
|
||||||
Link.add(
|
Link.list(
|
||||||
|
:link_object => 'Ticket',
|
||||||
|
:link_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]
|
||||||
|
)
|
||||||
|
|
||||||
|
list.each { |item|
|
||||||
|
link = {}
|
||||||
|
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]
|
||||||
|
)
|
||||||
|
list.each { |item|
|
||||||
|
link = {}
|
||||||
|
link['link_type'] = Link::Type.find( item.link_type_id ).name
|
||||||
|
link['link_object'] = Link::Object.find( item.link_object_source_id ).name
|
||||||
|
link['link_object_value'] = item.link_object_source_value
|
||||||
|
items.push link
|
||||||
|
}
|
||||||
|
|
||||||
|
return items
|
||||||
|
end
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
|
Link.add(
|
||||||
:link_type => 'normal',
|
:link_type => 'normal',
|
||||||
:link_object_source => 'Ticket',
|
:link_object_source => 'Ticket',
|
||||||
:link_object_source_value => 6,
|
:link_object_source_value => 6,
|
||||||
|
@ -25,78 +68,8 @@ class Link < ActiveRecord::Base
|
||||||
:link_object_target_value => 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
|
=end
|
||||||
|
|
||||||
def self.list(data)
|
|
||||||
linkobject = self.link_object_get( :name => data[:link_object] )
|
|
||||||
return if !linkobject
|
|
||||||
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_object'] = Link::Object.find( item.link_object_target_id ).name
|
|
||||||
link['link_object_value'] = item.link_object_target_value
|
|
||||||
items.push link
|
|
||||||
}
|
|
||||||
|
|
||||||
list = Link.where(
|
|
||||||
'link_object_target_id = ? AND link_object_target_value = ?', linkobject.id, data[:link_object_value]
|
|
||||||
)
|
|
||||||
list.each { |item|
|
|
||||||
link = {}
|
|
||||||
link['link_type'] = Link::Type.find( item.link_type_id ).name
|
|
||||||
link['link_object'] = Link::Object.find( item.link_object_source_id ).name
|
|
||||||
link['link_object_value'] = item.link_object_source_value
|
|
||||||
items.push link
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
def self.add(data)
|
def self.add(data)
|
||||||
|
|
||||||
if data.has_key?(:link_type)
|
if data.has_key?(:link_type)
|
||||||
|
@ -120,16 +93,60 @@ class Link < ActiveRecord::Base
|
||||||
Link.create(data)
|
Link.create(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.delete_link_by_source(data)
|
=begin
|
||||||
Link.where( :link_object_source_value => data[:source_value] ).destroy_all
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.delete_link_by_target(data)
|
Link.remove(
|
||||||
Link.where( :link_object_target_value => data[:target_value] ).destroy_all
|
:link_type => 'normal',
|
||||||
end
|
: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)
|
=end
|
||||||
Link.where( ["link_object_source_value = ? or link_object_target_value = ?", data[:object_value], data[:object_value]] ).destroy_all
|
|
||||||
|
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
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -153,24 +170,6 @@ class Link < ActiveRecord::Base
|
||||||
return linkobject
|
return linkobject
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
class Link::Type < ActiveRecord::Base
|
class Link::Type < ActiveRecord::Base
|
||||||
|
|
|
@ -24,7 +24,7 @@ module ExtraRoutes
|
||||||
# links
|
# links
|
||||||
map.match '/links', :to => 'links#index'
|
map.match '/links', :to => 'links#index'
|
||||||
map.match '/links/add', :to => 'links#add'
|
map.match '/links/add', :to => 'links#add'
|
||||||
map.match '/links/delete', :to => 'links#delete'
|
map.match '/links/remove', :to => 'links#remove'
|
||||||
|
|
||||||
# overviews
|
# overviews
|
||||||
map.resources :overviews
|
map.resources :overviews
|
||||||
|
|
Loading…
Reference in a new issue