Improved name spaces.

This commit is contained in:
Martin Edenhofer 2013-02-01 20:58:53 +01:00
parent 0095f24af7
commit 0dc6e96a5a
7 changed files with 255 additions and 234 deletions

View file

@ -251,6 +251,9 @@ class Package < ApplicationModel
# prebuild assets
# reload new files
Package.reload_classes
# delete package
record = Package.where(
:name => meta[:name],

View file

@ -1,3 +1,5 @@
module Auth
end
module Auth::ENV
def self.check( user, username, password, config )

View file

@ -1,3 +1,5 @@
module Auth
end
module Auth::INTERNAL
def self.check( user, username, password, config )

View file

@ -1,3 +1,5 @@
module Auth
end
module Auth::LDAP
def self.check( user, username, password, config )

View file

@ -1,4 +1,6 @@
class Auth::OTRS
module Auth
end
module Auth::OTRS
def self.check( user, username, password, config )
endpoint = Setting.get('import_otrs_endpoint')

View file

@ -1,3 +1,5 @@
module Auth
end
module Auth::TEST
def self.check( user, username, password, config )

View file

@ -1,3 +1,5 @@
module Import
end
module Import::OTRS
def self.request(part)
url = Setting.get('import_otrs_endpoint') + '/' + part + ';Key=' + Setting.get('import_otrs_endpoint_key')
@ -85,7 +87,8 @@ module Import::OTRS
result = JSON.parse( response.body )
result = result.reverse
thread_count = 8
Thread.abort_on_exception = true
thread_count = 2
threads = {}
(1..thread_count).each {|thread|
threads[thread] = Thread.new {
@ -158,6 +161,10 @@ module Import::OTRS
}
result.each {|record|
# use transaction
ActiveRecord::Base.transaction do
ticket_new = {
:title => '',
:created_by_id => 1,
@ -176,7 +183,7 @@ module Import::OTRS
#puts 'TICKET OLD ' + ticket_old.inspect
# find user
if ticket_new[:owner]
user = User.where( :login => ticket_new[:owner] ).first
user = User.lookup( :login => ticket_new[:owner] )
if user
ticket_new[:owner_id] = user.id
else
@ -184,239 +191,240 @@ module Import::OTRS
end
ticket_new.delete(:owner)
end
if ticket_new[:customer]
user = User.where( :login => ticket_new[:customer] ).first
if user
ticket_new[:customer_id] = user.id
else
ticket_new[:customer_id] = 1
end
ticket_new.delete(:customer)
else
ticket_new[:customer_id] = 1
end
if ticket_new[:customer]
user = User.lookup( :login => ticket_new[:customer] )
if user
ticket_new[:customer_id] = user.id
else
ticket_new[:customer_id] = 1
end
ticket_new.delete(:customer)
else
ticket_new[:customer_id] = 1
end
# puts 'ttt' + ticket_new.inspect
# set state types
if ticket_old
puts "update Ticket.find(#{ticket_new[:id]})"
ticket_old.update_attributes(ticket_new)
else
puts "add Ticket.find(#{ticket_new[:id]})"
ticket = Ticket.new(ticket_new)
ticket.id = ticket_new[:id]
ticket.save
end
record['Articles'].each { |article|
# get article values
article_new = {
:created_by_id => 1,
:updated_by_id => 1,
}
map[:Article].each { |key,value|
if article[key.to_s]
article_new[value] = Encode.conv( 'utf8', article[key.to_s] )
# set state types
if ticket_old
puts "update Ticket.find(#{ticket_new[:id]})"
ticket_old.update_attributes(ticket_new)
else
puts "add Ticket.find(#{ticket_new[:id]})"
ticket = Ticket.new(ticket_new)
ticket.id = ticket_new[:id]
ticket.save
end
}
# create customer/sender if needed
if article_new[:ticket_article_sender] == 'customer' && article_new[:created_by_id].to_i == 1 && !article_new[:from].empty?
# set extra headers
begin
email = Mail::Address.new( article_new[:from] ).address
rescue
email = article_new[:from]
if article_new[:from] =~ /<(.+?)>/
email = $1
end
end
user = User.where( :email => email ).first
if !user
begin
display_name = Mail::Address.new( article_new[:from] ).display_name ||
( Mail::Address.new( article_new[:from] ).comments && Mail::Address.new( article_new[:from] ).comments[0] )
rescue
display_name = article_new[:from]
record['Articles'].each { |article|
# get article values
article_new = {
:created_by_id => 1,
:updated_by_id => 1,
}
map[:Article].each { |key,value|
if article[key.to_s]
article_new[value] = Encode.conv( 'utf8', article[key.to_s] )
end
}
# create customer/sender if needed
if article_new[:ticket_article_sender] == 'customer' && article_new[:created_by_id].to_i == 1 && !article_new[:from].empty?
# set extra headers
begin
email = Mail::Address.new( article_new[:from] ).address
rescue
email = article_new[:from]
if article_new[:from] =~ /<(.+?)>/
email = $1
end
end
user = User.where( :email => email ).first
if !user
begin
display_name = Mail::Address.new( article_new[:from] ).display_name ||
( Mail::Address.new( article_new[:from] ).comments && Mail::Address.new( article_new[:from] ).comments[0] )
rescue
display_name = article_new[:from]
end
# do extra decoding because we needed to use field.value
display_name = Mail::Field.new( 'X-From', display_name ).to_s
roles = Role.lookup( :name => 'Customer' )
user = User.create(
:login => email,
:firstname => display_name,
:lastname => '',
:email => email,
:password => '',
:active => true,
:roles => roles,
:updated_by_id => 1,
:created_by_id => 1,
)
end
article_new[:created_by_id] = user.id
end
# do extra decoding because we needed to use field.value
display_name = Mail::Field.new( 'X-From', display_name ).to_s
roles = Role.where( :name => 'Customer' )
user = User.create(
:login => email,
:firstname => display_name,
:lastname => '',
:email => email,
:password => '',
:active => true,
:roles => roles,
:updated_by_id => 1,
:created_by_id => 1,
)
end
article_new[:created_by_id] = user.id
end
if article_new[:ticket_article_sender] == 'customer'
article_new[:ticket_article_sender_id] = Ticket::Article::Sender.lookup( :name => 'Customer' ).id
article_new.delete( :ticket_article_sender )
end
if article_new[:ticket_article_sender] == 'agent'
article_new[:ticket_article_sender_id] = Ticket::Article::Sender.lookup( :name => 'Agent' ).id
article_new.delete( :ticket_article_sender )
end
if article_new[:ticket_article_sender] == 'system'
article_new[:ticket_article_sender_id] = Ticket::Article::Sender.lookup( :name => 'System' ).id
article_new.delete( :ticket_article_sender )
end
if article_new[:ticket_article_type] == 'email-external'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'email' ).id
article_new[:internal] = false
elsif article_new[:ticket_article_type] == 'email-internal'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'email' ).id
article_new[:internal] = true
elsif article_new[:ticket_article_type] == 'note-external'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'note' ).id
article_new[:internal] = false
elsif article_new[:ticket_article_type] == 'note-internal'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'note' ).id
article_new[:internal] = true
elsif article_new[:ticket_article_type] == 'phone'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'phone' ).id
article_new[:internal] = false
elsif article_new[:ticket_article_type] == 'webrequest'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'web' ).id
article_new[:internal] = false
else
article_new[:ticket_article_type_id] = 9
end
article_new.delete( :ticket_article_type )
article_old = Ticket::Article.where( :id => article_new[:id] ).first
#puts 'ARTICLE OLD ' + article_old.inspect
# set state types
if article_old
puts "update Ticket::Article.find(#{article_new[:id]})"
# puts article_new.inspect
article_old.update_attributes(article_new)
else
puts "add Ticket::Article.find(#{article_new[:id]})"
article = Ticket::Article.new(article_new)
article.id = article_new[:id]
article.save
end
}
record['History'].each { |history|
# puts '-------'
# puts history.inspect
if history['HistoryType'] == 'NewTicket'
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'created',
:history_object => 'Ticket',
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
if history['HistoryType'] == 'StateUpdate'
data = history['Name']
# "%%new%%open%%"
from = nil
to = nil
if data =~ /%%(.+?)%%(.+?)%%/
from = $1
to = $2
state_from = Ticket::State.lookup( :name => from )
state_to = Ticket::State.lookup( :name => to )
if state_from
from_id = state_from.id
if article_new[:ticket_article_sender] == 'customer'
article_new[:ticket_article_sender_id] = Ticket::Article::Sender.lookup( :name => 'Customer' ).id
article_new.delete( :ticket_article_sender )
end
if state_to
to_id = state_to.id
if article_new[:ticket_article_sender] == 'agent'
article_new[:ticket_article_sender_id] = Ticket::Article::Sender.lookup( :name => 'Agent' ).id
article_new.delete( :ticket_article_sender )
end
end
# puts "STATE UPDATE (#{history['HistoryID']}): -> #{from}->#{to}"
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'updated',
:history_object => 'Ticket',
:history_attribute => 'ticket_state',
:value_from => from,
:id_from => from_id,
:value_to => to,
:id_to => to_id,
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
if article_new[:ticket_article_sender] == 'system'
article_new[:ticket_article_sender_id] = Ticket::Article::Sender.lookup( :name => 'System' ).id
article_new.delete( :ticket_article_sender )
end
if article_new[:ticket_article_type] == 'email-external'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'email' ).id
article_new[:internal] = false
elsif article_new[:ticket_article_type] == 'email-internal'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'email' ).id
article_new[:internal] = true
elsif article_new[:ticket_article_type] == 'note-external'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'note' ).id
article_new[:internal] = false
elsif article_new[:ticket_article_type] == 'note-internal'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'note' ).id
article_new[:internal] = true
elsif article_new[:ticket_article_type] == 'phone'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'phone' ).id
article_new[:internal] = false
elsif article_new[:ticket_article_type] == 'webrequest'
article_new[:ticket_article_type_id] = Ticket::Article::Type.lookup( :name => 'web' ).id
article_new[:internal] = false
else
article_new[:ticket_article_type_id] = 9
end
article_new.delete( :ticket_article_type )
article_old = Ticket::Article.where( :id => article_new[:id] ).first
#puts 'ARTICLE OLD ' + article_old.inspect
# set state types
if article_old
puts "update Ticket::Article.find(#{article_new[:id]})"
# puts article_new.inspect
article_old.update_attributes(article_new)
else
puts "add Ticket::Article.find(#{article_new[:id]})"
article = Ticket::Article.new(article_new)
article.id = article_new[:id]
article.save
end
}
record['History'].each { |history|
# puts '-------'
# puts history.inspect
if history['HistoryType'] == 'NewTicket'
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'created',
:history_object => 'Ticket',
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
if history['HistoryType'] == 'StateUpdate'
data = history['Name']
# "%%new%%open%%"
from = nil
to = nil
if data =~ /%%(.+?)%%(.+?)%%/
from = $1
to = $2
state_from = Ticket::State.lookup( :name => from )
state_to = Ticket::State.lookup( :name => to )
if state_from
from_id = state_from.id
end
if state_to
to_id = state_to.id
end
end
# puts "STATE UPDATE (#{history['HistoryID']}): -> #{from}->#{to}"
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'updated',
:history_object => 'Ticket',
:history_attribute => 'ticket_state',
:value_from => from,
:id_from => from_id,
:value_to => to,
:id_to => to_id,
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
if history['HistoryType'] == 'Move'
data = history['Name']
# "%%Queue1%%5%%Postmaster%%1"
from = nil
to = nil
if data =~ /%%(.+?)%%(.+?)%%(.+?)%%(.+?)$/
from = $1
from_id = $2
to = $3
to_id = $4
end
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'updated',
:history_object => 'Ticket',
:history_attribute => 'group',
:value_from => from,
:value_to => to,
:id_from => from_id,
:id_to => to_id,
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
if history['HistoryType'] == 'PriorityUpdate'
data = history['Name']
# "%%3 normal%%3%%5 very high%%5"
from = nil
to = nil
if data =~ /%%(.+?)%%(.+?)%%(.+?)%%(.+?)$/
from = $1
from_id = $2
to = $3
to_id = $4
end
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'updated',
:history_object => 'Ticket',
:history_attribute => 'ticket_priority',
:value_from => from,
:value_to => to,
:id_from => from_id,
:id_to => to_id,
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
if history['ArticleID'] && history['ArticleID'] != 0
History.history_create(
:id => history['HistoryID'],
:o_id => history['ArticleID'],
:history_type => 'created',
:history_object => 'Ticket::Article',
:related_o_id => history['TicketID'],
:related_history_object => 'Ticket',
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
}
end
if history['HistoryType'] == 'Move'
data = history['Name']
# "%%Queue1%%5%%Postmaster%%1"
from = nil
to = nil
if data =~ /%%(.+?)%%(.+?)%%(.+?)%%(.+?)$/
from = $1
from_id = $2
to = $3
to_id = $4
end
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'updated',
:history_object => 'Ticket',
:history_attribute => 'group',
:value_from => from,
:value_to => to,
:id_from => from_id,
:id_to => to_id,
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
if history['HistoryType'] == 'PriorityUpdate'
data = history['Name']
# "%%3 normal%%3%%5 very high%%5"
from = nil
to = nil
if data =~ /%%(.+?)%%(.+?)%%(.+?)%%(.+?)$/
from = $1
from_id = $2
to = $3
to_id = $4
end
History.history_create(
:id => history['HistoryID'],
:o_id => history['TicketID'],
:history_type => 'updated',
:history_object => 'Ticket',
:history_attribute => 'ticket_priority',
:value_from => from,
:value_to => to,
:id_from => from_id,
:id_to => to_id,
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
if history['ArticleID'] && history['ArticleID'] != 0
History.history_create(
:id => history['HistoryID'],
:o_id => history['ArticleID'],
:history_type => 'created',
:history_object => 'Ticket::Article',
:related_o_id => history['TicketID'],
:related_history_object => 'Ticket',
:created_at => history['CreateTime'],
:created_by_id => history['CreateBy']
)
end
}
}
end