class FunctionsController < ApplicationController
require "yaml"
layout "callc"
before_filter :check_localization
before_filter :authorize
before_filter :find_location, :only => [:location_rules, :location_devices, :location_destroy]
before_filter :find_location_rule, :only => [:location_rule_edit, :location_rule_update, :location_rule_change_status, :location_rule_destroy]
before_filter :find_dialplan, :only => [:pbx_function_edit, :pbx_function_update, :pbx_function_destroy]
before_filter :callback_active?, :only => [:callback, :callback_settings, :callback_settings_update, :activate_callback]
skip_before_filter :redirect_callshop_manager, :except => [:login_as_execute]
$date_formats = ["%Y-%m-%d %H:%M:%S", "%Y/%m/%d %H:%M:%S", "%Y,%m,%d %H:%M:%S", "%Y.%m.%d %H:%M:%S", "%d-%m-%Y %H:%M:%S", "%d/%m/%Y %H:%M:%S", "%d,%m,%Y %H:%M:%S", "%d.%m.%Y %H:%M:%S", "%m-%d-%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m,%d,%Y %H:%M:%S", "%m.%d.%Y %H:%M:%S"]
$decimal_formats = ['.', ',', ';']
verify :method => :post, :only => [:callback_settings_update, :activate_callback],
:redirect_to => {:controller => :callc, :action => :main},
:add_flash => {:notice => _('Dont_be_so_smart'),
:params => {:dont_be_so_smart => true}
}
def index
redirect_to :controller => :callc, :action => :main and return false
end
def skype
@page_title = _('Skype')
@page_icon = 'skype.png'
@skype_providers = Provider.find(:all, :conditions => "tech = 'Skype'", :order => "name ASC")
@default_skype_provider = Confline.get_value("Skype_Default_Provider", 0).to_i
end
def skype_change_default_provider
update_confline("Skype_Default_Provider", params[:skype_provider].to_s)
provider = Provider.find_by_id(params[:skype_provider].to_i)
exceptions = provider.skype_reload
raise exceptions[0] if exceptions.size > 0
flash[:status] = _('Skype_Default_Provider_changed')
redirect_to :action => "skype"
end
# ============== CALLBACK ===============
def spy_channel
device_id = current_user.spy_device_id
# this code selects correct calls for admin/reseller/user
user_sql = " activecalls.id = #{params[:id].to_i}"
user_id = session[:usertype] == 'accountant' ? 0 : session[:user_id]
if user_id != 0
#reseller or user
if session[:usertype] == "reseller"
#reseller
user_sql += " AND (activecalls.user_id = #{user_id} OR dst.user_id = #{user_id} OR activecalls.owner_id = #{user_id}) "
else
#user
user_sql += " AND (activecalls.user_id = #{user_id} OR dst.user_id = #{user_id} )"
end
end
acall = Activecall.find(:first, :conditions => user_sql, :joins => "LEFT JOIN devices AS dst ON (dst.id = activecalls.dst_device_id) ")
unless acall
@error = _('Dont_be_so_smart')
dont_be_so_smart
# redirect_to :controller=>:callc, :action=>:main and return false
else
if device_id > 0
@channel = params[:channel].to_s
device = Device.find(device_id)
src = device.extension
#server = Confline.get_value("Web_Callback_Server").to_i
server = device.server_id.to_i
server = 1 if server == 0
src_channel = "Local/#{src}@mor_cb_src/n"
extension = @channel.split('-')[0]
@spy_device = nice_device(device)
originate_call(device_id, src, src_channel, "mor_cb_spy", extension, _('Spy_Channel'), nil, server)
else
@error = _('No_Spy_device_explanation')
end
end
render(:layout => false)
end
def callback_from_url
@page_title = _('Callback')
@cb_ok = 0
@acc = ""
@src = ""
@dst = ""
secret = ""
@acc = params[:acc].to_i if params[:acc]
@src = params[:src] if params[:src]
@dst = params[:dst] if params[:dst]
secret = params[:secret] if params[:secret]
if params[:acc].length > 0 and @src.length > 0
device= Device.find(:first, :joins => "LEFT JOIN users ON (users.id = devices.user_id)", :conditions => ["devices.id = ? AND secret = ? AND device_type != 'FAX' AND (users.owner_id = ? OR users.id = ?) AND name not like 'mor_server_%'", @acc, secret, corrected_user_id, corrected_user_id])
unless device
flash[:notice] = _('Device_not_found')
redirect_to :controller => :callc, :action => :main and return false
end
callerid_number = Confline.get_value('WEB_Callback_CID', 0)
if device #Device.count(@acc, :conditions => "secret = '#{secret}'") > 0
@cb_ok = 1
channel = "Local/#{@src}@mor_cb_src/n"
if @dst.length > 0
originate_call(@acc, @src, channel, "mor_cb_dst", @dst, callerid_number)
else
originate_call(@acc, @src, channel, "mor_cb_dst_ask", "123", callerid_number)
end
#create_call_file(@acc, @src, @dst)
end
end
#render(:layout => "layouts/realtime_stats")
render(:layout => false)
end
def callback
@page_title = _('Callback')
@page_icon = 'phone_sound.png'
@user = current_user
@devices = @user.devices
if @devices.count == 0
flash[:notice] = _('No_devices_callback_not_possible')
redirect_to :controller => "callc", :action => 'main' and return false
end
if session[:callback_active].to_i == 0
dont_be_so_smart
redirect_to :controller => "callc", :action => "main" and return false
end
end
def activate_callback
@src = ""
@dst = ""
@acc = params[:acc].to_i
@src = params[:src].gsub(/[^\d]/, "") if params[:src]
@dst = params[:dst].gsub(/[^\d]/, "") if params[:dst]
device = current_user.devices.find(:first, :conditions => {:id => @acc})
unless device
flash[:notice] = _('Device_not_found')
redirect_to :controller => :callc, :action => :main and return false
end
callerid_number = device.callerid_number
if callerid_number.length == 0
# if number not set, check what to use as caller id:
# source or WEB_Callback_CID ?
if Confline.get_value('Web_Callback_Send_Source_As_CID', 0).to_i == 1
callerid_number = @src
else
callerid_number = Confline.get_value('WEB_Callback_CID', 0)
end
end
server = Confline.get_value("Web_Callback_Server").to_i
server = 1 if server == 0
if @src.length > 0
channel = "Local/#{@src}@mor_cb_src/n"
if @dst.length > 0
originate_call(@acc, @src, channel, "mor_cb_dst", @dst, callerid_number, nil, server)
else
originate_call(@acc, @src, channel, "mor_cb_dst_ask", "123", callerid_number, nil, server)
end
flash[:status] = _('Callback_activated')
else
flash[:notice] = _('Source_should_be_entered_for_callback')
end
redirect_to :controller => "functions", :action => 'callback' and return false
end
#================ PBX Functions ===============
def pbx_functions
@page_title = _('Pbx_functions')
@dialplans = current_user.dialplans.find(:all, :conditions => "dptype = 'pbxfunction'", :order => "name ASC")
if reseller?
@pbxfunctions = Pbxfunction.find(:all, :conditions => 'allow_resellers = 1 AND name != "ringgroupid"', :order => "pf_type ASC")
else
@pbxfunctions = Pbxfunction.find(:all, :conditions => 'name != "ringgroupid"', :order => "pf_type ASC")
end
end
# before filter
# find_dialplan @dialplan
def pbx_function_edit
@page_title = _('Pbx_function_edit')
@page_icon = 'edit.png'
if reseller?
@pbxfunctions = Pbxfunction.find(:all, :conditions => 'allow_resellers = 1 AND name != "ringgroupid"', :order => "pf_type ASC")
else
@pbxfunctions = Pbxfunction.find(:all, :conditions => 'name != "ringgroupid"', :order => "pf_type ASC")
end
@currency = Currency.get_active
@pbxfunction = @dialplan.pbxfunction
@user = User.find_by_id(@dialplan.data5) if @dialplan.data5 != "all" and !@dialplan.data5.blank?
@users = current_user.find_all_for_select
end
# before filter
# find_dialplan @dialplan
def pbx_function_update
if current_user.id != @dialplan.user_id.to_i
dont_be_so_smart
redirect_to :controller => :callc, :action => :main and return false
end
user = User.find_by_id(params[:s_user].to_i)
if reseller?
if user.owner_id.to_i != current_user.id and user.id.to_i != current_user.id
dont_be_so_smart
redirect_to :controller => :callc, :action => :main and return false
end
else
if user.owner_id.to_i != current_user.id
dont_be_so_smart
redirect_to :controller => :callc, :action => :main and return false
end
end
if params[:dialplan]
pbxfunction_id = params[:dialplan][:type_id]
pbxfunction = Pbxfunction.find(pbxfunction_id)
if current_user.usertype == 'reseller' and pbxfunction.allow_resellers == 0
dont_be_so_smart
redirect_to :controller => :callc, :action => :main and return false
end
#check if extension entered
ext = params[:dialplan][:ext]
if not ext or ext.length == 0
flash[:notice] = _('Enter_extension')
redirect_to :action => 'pbx_function_edit', :id => params[:id] and return false
end
#delete if extension changes
if @dialplan.data2 != params[:dialplan][:ext]
pbx_function_delete_extline(@dialplan)
end
if params[:dialplan][:type_id].to_i == 8
@dialplan.data5=params[:s_user]
end
if @dialplan.update_attributes(params[:dialplan].merge({:dptype => "pbxfunction"}))
pbx_function_configure_extline(@dialplan)
flash[:status] = _('Pbx_function_updated')
end
end
redirect_to :action => 'pbx_functions'
end
def pbx_function_add
pbxfunction = Pbxfunction.find(params[:type_id])
if current_user.usertype == 'reseller' and pbxfunction.allow_resellers == 0
dont_be_so_smart
redirect_to :controller => :callc, :action => :main and return false
end
#check if extension entered
ext = params[:ext]
if not ext or ext.length == 0
flash[:notice] = _('Enter_extension')
redirect_to :action => 'pbx_functions' and return false
end
# check if such extension exist
extline = Extline.find(:first, :conditions => "exten = '#{ext}'")
if extline
flash[:notice] = _('Such_extension_exists')
redirect_to :action => 'pbx_functions' and return false
end
dialplan = Dialplan.new({:name => params[:name], :dptype => "pbxfunction", :data1 => params[:type_id], :data2 => params[:ext]})
if pbxfunction and pbxfunction.pf_type == "tell_balance"
def_currency = Currency.find(1)
dialplan.data3 = def_currency.name if def_currency
dialplan.data4 = "en"
dialplan.data5 = "user"
end
if pbxfunction and pbxfunction.pf_type == "use_voucher"
def_currency = Currency.find(1)
dialplan.data3 = def_currency.name if def_currency
dialplan.data4 = "en"
end
if pbxfunction and pbxfunction.pf_type == "external_did"
dialplan.data5 = current_user.id
end
dialplan.save
pbx_function_configure_extline(dialplan)
flash[:status] = _('Pbx_function_created')
redirect_to :action => 'pbx_functions'
end
def pbx_function_destroy
# dialplan = Dialplan.find_by_id(params[:id])
# unless dialplan
# flash[:notice]=_('Dialplan_was_not_found')
# redirect_to :action=>:pbx_functions and return false
# end
dids = Did.count(:all, :conditions => "dialplan_id = '#{params[:id].to_i}'")
if dids.to_i == 0
pbx_function_delete_extline(@dialplan)
@dialplan.destroy
flash[:status] = _('Pbx_function_deleted')
redirect_to :action => 'pbx_functions'
else
flash[:notice] = _('Pbx_is_assigned_to_DID')
redirect_to :action => 'pbx_functions'
end
end
#================= CALL TRACING ==================
def call_tracing
@page_title = _('Call_Tracing')
@page_icon = 'lightning.png'
@users = current_user.find_all_for_select
end
def call_tracing_ajax
if admin?
@user = User.find_by_id(params[:id])
render :layout => false
else
render :text => "" and return false
end
end
def call_tracing_user
@page_title = _('Call_Tracing')
@page_icon = 'lightning.png'
notice_msg = nil
notice_msg = _('User_not_found') if not (@user = call_tracing_user_find_user)
if @user
notice_msg = _('Device_Was_Not_Found') if notice_msg.nil? and not (@devices = @user.devices)
notice_msg = _('Tariff_not_found') if notice_msg.nil? and not (@u_tariff = @user.tariff)
notice_msg = _('Lcr_was_not_found') if notice_msg.nil? and not (@lcr = @user.lcr)
if @lcr
notice_msg = _('Lcrprovider_was_not_found') if notice_msg.nil? and not (@lcr_providers = @lcr.providers)
notice_msg = _('There_is_no_active_provider') if notice_msg.nil? and not (@lcr_active_providers = @lcr.active_providers)
end
end
if notice_msg.nil? and admin? and @user and @user.owner_id.to_i > 0
@reseller = @user.owner
if @reseller and @reseller.is_reseller?
notice_msg = _('Reseller_Tariff_not_found') if notice_msg.nil? and not (@r_tariff = @reseller.tariff)
else
notice_msg = _('Reseller_Was_Not_Found')
end
end
unless notice_msg.nil?
flash[:notice] = notice_msg.to_s
redirect_to :action => 'call_tracing' and return false
end
@hide_lcrs_and_providers = (reseller? and !current_user.can_own_providers?)
end
def call_tracing_device
change_date
@page_title = _('Call_Tracing')
@page_icon = 'lightning.png'
@user = call_tracing_device_find_user
if not @user or !params[:user]
flash[:notice] = _('User_not_found')
redirect_to :action => 'call_tracing' and return false
end
@u_tariff = @user.tariff
@lcr = @user.lcr
if @lcr.user_id.to_i == current_user.owner_id.to_i and current_user.reseller_allow_providers_tariff? and current_user.id != @user.id
flash[:notice] = _('Check_if_your_user_is_using_your_lcr')
redirect_to :controller => "callc", :action => "main" and return false
end
@lcr_providers = @lcr.providers
@device = Device.find(:first, :conditions => ["devices.id = ? and devices.user_id = ?", params[:device], @user.id])
unless @device
flash[:notice] = _('Device_not_found')
redirect_to :action => 'call_tracing' and return false
end
if @device.location
if @device.location_id <= 1 and current_user.usertype == 'reseller'
#import admin rules as default location and use it instead of GLOBAL!
@device.check_location_id
#now device should have default location in db
@device = Device.find(:first, :conditions => ["devices.id = ? and devices.user_id = ?", params[:device], @user.id])
end
else
flash[:notice] = _('No_location_found.Please_change_device_location')
redirect_to :action => 'call_tracing_user', :user => @user.id and return false
end
if @device.device_type == "H323" and (@device.ipaddr == "0.0.0.0" or @device.ipaddr.to_s !~ /^\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b$/)
flash[:notice] = _('H323_device_must_have_IP')
redirect_to :action => 'call_tracing_user', :user => @user.id and return false
end
if @device.device_type == "H323" and @device.port.to_i != 1720
flash[:notice] = _('H323_device_port_is_not_1720')
end
@dst = params[:destination].to_s.strip
#my_debug validate_date(session_from_date[0..3], session_from_date[5..6], session_from_date[8..9])
if validate_date(session_from_date[0..3], session_from_date[5..6], session_from_date[8..9]) == 0
flash[:notice] = _('Bad_date')
redirect_to :action => 'call_tracing_user', :user => @user.id and return false
end
if @dst.length == 0
flash[:notice] = _('Please_enter_destination')
redirect_to :action => 'call_tracing_user', :user => @user.id and return false
end
if current_user.usertype == 'reseller' and @device.user_id == current_user.id
@user_owner = @device.user.owner
else
@user_owner = current_user
end
# get daytype and localization settings
day = session_from_date
if @user_owner.usertype == 'reseller'
usable_location = 'A.location_id = locations.id AND A.location_id != 1'
else
if @device.location
usable_location = 'A.location_id = locations.id'
else
usable_location = 'A.location_id = locations.id OR A.location_id = 1'
end
end
sql = "SELECT A.*, (SELECT IF((SELECT daytype FROM days WHERE date = '#{day}') IS NULL,
(SELECT IF(WEEKDAY('#{day}') = 5 OR WEEKDAY('#{day}') = 6, 'FD', 'WD')),
(SELECT daytype FROM days WHERE date = '#{day}'))) as 'dt' FROM devices
JOIN locations ON (locations.id = devices.location_id)
LEFT JOIN (SELECT * FROM locationrules WHERE enabled = 1 AND lr_type = 'dst' AND LENGTH('#{@dst}')
BETWEEN minlen AND maxlen AND (SUBSTRING('#{@dst}',1,LENGTH(cut)) = cut OR LENGTH(cut) = 0 OR ISNULL(cut))
ORDER BY LENGTH(cut) DESC ) AS A ON ( #{usable_location}) WHERE devices.id = #{@device.id}"
#my_debug "1"
res = ActiveRecord::Base.connection.select_one(sql)
@daytype = res['dt']
@loc_add = res['add']
@loc_cut = res['cut']
@loc_rule = res['name']
@loc_lcr_id = res['lcr_id']
@loc_tariff_id = res['tariff_id']
@loc_device_id = res['device_id']
#check if reseller is changed from/to res pro and he changed LCR in location rules, lcr partial
lcr_owner = Lcr.find_by_id(@loc_lcr_id)
if lcr_owner and !@user_owner.is_admin?
if lcr_owner.user_id.to_i == @user_owner.owner_id.to_i and @user_owner.reseller_allow_providers_tariff?
flash[:notice] = _('Check_if_you_are_using_your_lcr')
redirect_to :controller => "callc", :action => "main" and return false
elsif lcr_owner.user_id.to_i == @user_owner.id.to_i and !@user_owner.reseller_allow_providers_tariff?
flash[:notice] = _('Check_if_you_are_using_admins_lcr')
redirect_to :controller => "callc", :action => "main" and return false
end
end
# lcr change from localization
if @loc_lcr_id.to_i > 0
@old_lcr = @lcr
if @user_owner.is_allow_manage_providers?
@lcr = @user_owner.lcrs.find_by_id(@loc_lcr_id)
else
@lcr = @user_owner.load_lcrs(:first, :conditions => "id = #{@loc_lcr_id}")
end
@new_lcr = @lcr
@lcr_providers = @lcr.providers
end
# tariff change from localization
if @loc_tariff_id.to_i > 0
@old_u_tariff = @u_tariff
@u_tariff = Tariff.find_by_id(@loc_tariff_id)
end
#device cjanhe rom localization
if @loc_device_id.to_i > 0
@old_device = @device
@new_device = Device.find_by_id(@loc_device_id)
end
#localization
@loc_dst = Location.nice_locilization(@loc_cut, @loc_add, @dst)
# read LCR Partials
sql = "SELECT lcr_partials.prefix as 'prefix', lcrs.id as 'lcr_id', lcrs.order FROM lcr_partials JOIN lcrs ON (lcrs.id = lcr_partials.lcr_id) WHERE main_lcr_id = '#{@lcr.id}' AND prefix=SUBSTRING('#{@loc_dst}',1,LENGTH(prefix)) ORDER BY LENGTH(prefix) DESC LIMIT 1;"
#my_debug sql
res = ActiveRecord::Base.connection.select_one(sql)
#=begin
if res
@old_lcr_before_partials = @lcr
if @user_owner.is_allow_manage_providers?
@lcr = @user_owner.lcrs.find_by_id(res['lcr_id'].to_i)
else
@lcr = Lcr.find(res['lcr_id'].to_i)
#@lcr = current_user.load_lcrs(:first, :conditions=>"id = #{res['lcr_id'].to_i}")
end
unless @lcr
flash[:notice] = _('LCR_in_lcr_partial_not_found')
redirect_to :action => 'call_tracing' and return false
end
@lcr_providers = @lcr.providers
@lcr_partials_prefix = res['prefix']
end
#=end
@direction_name, @destination_group_name = direction_by_dst(@loc_dst)
time = nice_time2 Time.mktime("2000", "01", "01", session[:hour_from], session[:minute_from], "00")
dst = @loc_dst
tariff_id = @u_tariff.id
daytype = @daytype
user = @user
# Ticket 2143
if @u_tariff.nil?
flash[:notice] = _('Unknown_Error')
redirect_to :controller => "callc", :action => "main" and return false
end
# user rates
if @u_tariff.purpose == "user"
sql = "SELECT A.prefix, aratedetails.id as 'aid', aratedetails.from as 'afrom', aratedetails.duration as 'adur', aratedetails.artype as 'atype', aratedetails.round as 'around', aratedetails.price as 'aprice', destinationgroups.id as 'dgid', aratedetails.start_time, aratedetails.end_time " +
"FROM rates JOIN aratedetails ON (aratedetails.rate_id = rates.id AND '#{time}' BETWEEN aratedetails.start_time AND aratedetails.end_time AND (aratedetails.daytype = '#{daytype}' OR aratedetails.daytype = '')) "+
"JOIN destinationgroups ON (destinationgroups.id = rates.destinationgroup_id ) " +
"JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) AND destinationgroup_id > 0 ORDER BY LENGTH(destinations.prefix) DESC LIMIT 1) as A ON (A.destinationgroup_id = destinationgroups.id) " +
" WHERE rates.tariff_id = #{tariff_id} ORDER BY afrom ASC, atype ASC "
#my_debug "2"
@res_user = ActiveRecord::Base.connection.select_all(sql)
@dgroup = Destinationgroup.find(@res_user[0]['dgid']) if @res_user[0]
#custom rates
sql = "SELECT A.prefix, acustratedetails.id as 'acid', acustratedetails.from as 'acfrom', acustratedetails.duration as 'acdur', acustratedetails.artype as 'actype', acustratedetails.round as 'acround', acustratedetails.price as 'acprice', destinationgroups.id as 'dgid', acustratedetails.start_time, acustratedetails.end_time "+
"FROM destinationgroups " +
"JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) AND destinationgroup_id > 0 ORDER BY LENGTH(destinations.prefix) DESC LIMIT 1) as A ON (A.destinationgroup_id = destinationgroups.id) " +
"JOIN customrates ON (customrates.destinationgroup_id = destinationgroups.id AND customrates.user_id = #{user.id}) " +
"JOIN acustratedetails ON (acustratedetails.customrate_id = customrates.id AND '#{time}' BETWEEN acustratedetails.start_time AND acustratedetails.end_time AND (acustratedetails.daytype = 'FD' OR acustratedetails.daytype = '')) "
@res_cuser = ActiveRecord::Base.connection.select_all(sql)
@cdgroup = Destinationgroup.find(@res_cuser[0]['dgid']) if @res_cuser[0]
else
#wholesale rates
@res_user = []
@res_cuser = []
sql = "SELECT A.prefix, ratedetails.rate, ratedetails.increment_s, ratedetails.min_time, ratedetails.connection_fee as 'cf', ratedetails.start_time, ratedetails.end_time FROM rates JOIN ratedetails ON (ratedetails.rate_id = rates.id AND (ratedetails.daytype = '#{daytype}' OR ratedetails.daytype = '' ) AND '#{time}' BETWEEN ratedetails.start_time AND ratedetails.end_time) JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) AND destinationgroup_id > 0) as A ON (A.id = rates.destination_id) WHERE rates.tariff_id = #{tariff_id} ORDER BY LENGTH(A.prefix) DESC LIMIT 1; "
#my_debug sql
@res_user = ActiveRecord::Base.connection.select_all(sql)
end
# my_debug @res_cuser
# my_debug "3"
# provider's stuff
#-------------------
@not_disabled_prov = 0
@active_prov = 0
@res_prov = []
for prov in @lcr_providers
tariff_id = prov.tariff_id
rr= Hash.new
rr['prov_name'] = prov.name
rr['providers_id'] = prov.id
rr['tech'] = prov.tech
rr['server_ip'] = prov.server_ip
rr['user_id'] = prov.device.user_id
sql = "SELECT `add`, cut FROM providerrules WHERE provider_id = #{prov.id} AND enabled = 1 AND pr_type = 'dst' AND LENGTH('#{dst}') BETWEEN minlen AND maxlen AND (SUBSTRING('#{dst}',1,LENGTH(cut)) = cut OR LENGTH(cut) = 0 OR ISNULL(cut)) ORDER BY LENGTH(cut) DESC LIMIT 1;"
res = ActiveRecord::Base.connection.select_one(sql)
rr['add'] = ""
rr['cut'] = ""
if res
rr['add'] = res['add']
rr['cut'] = res['cut']
end
sql = "SELECT A.prefix as 'prefix', ratedetails.rate as 'rate', ratedetails.increment_s as 'increment_s', ratedetails.min_time as 'min_time', ratedetails.connection_fee as 'cf', currencies.exchange_rate AS 'e_rate' FROM tariffs JOIN currencies ON (currencies.name = tariffs.currency) JOIN rates ON (rates.tariff_id = tariffs.id) JOIN ratedetails ON (ratedetails.rate_id = rates.id AND (ratedetails.daytype = '#{daytype}' OR ratedetails.daytype = '' ) AND '#{time}' BETWEEN ratedetails.start_time AND ratedetails.end_time) JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) ORDER BY LENGTH(destinations.prefix) DESC) as A ON (A.id = rates.destination_id) WHERE tariffs.id = #{tariff_id};"
res = ActiveRecord::Base.connection.select_one(sql)
rr['prefix'] = nil
rr['cf'] = nil
rr['increment_s'] = nil
rr['min_time'] = nil
rr['rate'] = nil
rr['e_rate'] = "1"
if res
rr['prefix'] = res['prefix']
rr['cf'] = res['cf']
rr['increment_s'] = res['increment_s']
rr['min_time'] = res['min_time']
rr['rate'] = res['rate']
rr['e_rate'] = res['e_rate']
end
tariff = Tariff.find_by_id(tariff_id)
unless tariff
flash[:notice] = _('Tariff_not_found')
redirect_to :action => 'call_tracing' and return false
end
rr['e_rate'] = tariff.exchange_rate(@user_owner.currency.name).to_f
if @user_owner.is_reseller? and @user_owner.is_allow_manage_providers? and prov.common_use == 1
#t=Tariff.find_by_id(current_user.tariff_id)
data = CommonUseProvider.find(:first, :conditions => " reseller_id = #{@user_owner.id} AND provider_id = #{prov.id}", :include => [:tariff])
t = data.tariff if data
unless t
flash[:notice] = _('Tariff_not_found')
redirect_to :action => 'call_tracing' and return false
end
rr['e_rate'] = t.exchange_rate(@user_owner.currency.name).to_f
if t.purpose == "user"
sql = "SELECT aratedetails.price as 'rate',aratedetails.round as 'increment_s' " +
"FROM rates JOIN aratedetails ON (aratedetails.rate_id = rates.id AND '#{time}' BETWEEN aratedetails.start_time AND aratedetails.end_time AND (aratedetails.daytype = '#{daytype}' OR aratedetails.daytype = '')) "+
"JOIN destinationgroups ON (destinationgroups.id = rates.destinationgroup_id ) " +
"JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) ORDER BY LENGTH(destinations.prefix) DESC LIMIT 1) as A ON (A.destinationgroup_id = destinationgroups.id) " +
" WHERE rates.tariff_id = #{t.id} "
else
sql = "SELECT ratedetails.rate , ratedetails.increment_s as 'increment_s'
FROM rates
JOIN ratedetails ON (ratedetails.rate_id = rates.id AND (ratedetails.daytype = '#{daytype}' OR ratedetails.daytype = '' )
AND '#{time}' BETWEEN ratedetails.start_time AND ratedetails.end_time)
JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix))) as A ON (A.id = rates.destination_id) WHERE rates.tariff_id = #{t.id} ORDER BY LENGTH(A.prefix) DESC LIMIT 1; "
end
rate = ActiveRecord::Base.connection.select_one(sql)
if rate
rr['rate'] = rate['rate']
rr['increment_s'] = rate['increment_s']
else
rr['rate'] = nil
end
elsif @user_owner.is_reseller? and !@user_owner.is_allow_manage_providers?
t = @user_owner.tariff
unless t
flash[:notice] = _('Tariff_not_found')
redirect_to :action => 'call_tracing' and return false
end
rr['e_rate'] = t.exchange_rate(@user_owner.currency.name).to_f
if t.purpose == "user"
sql = "SELECT aratedetails.price as 'rate',aratedetails.round as 'increment_s' " +
"FROM rates JOIN aratedetails ON (aratedetails.rate_id = rates.id AND '#{time}' BETWEEN aratedetails.start_time AND aratedetails.end_time AND (aratedetails.daytype = '#{daytype}' OR aratedetails.daytype = '')) "+
"JOIN destinationgroups ON (destinationgroups.id = rates.destinationgroup_id ) " +
"JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) ORDER BY LENGTH(destinations.prefix) DESC LIMIT 1) as A ON (A.destinationgroup_id = destinationgroups.id) " +
" WHERE rates.tariff_id = #{t.id} "
else
sql = "SELECT ratedetails.rate as 'rate', ratedetails.increment_s as 'increment_s'
FROM rates
JOIN ratedetails ON (ratedetails.rate_id = rates.id AND (ratedetails.daytype = '#{daytype}' OR ratedetails.daytype = '' )
AND '#{time}' BETWEEN ratedetails.start_time AND ratedetails.end_time)
JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix))) as A ON (A.id = rates.destination_id) WHERE rates.tariff_id = #{t.id} ORDER BY LENGTH(A.prefix) DESC LIMIT 1; "
end
rate = ActiveRecord::Base.connection.select_one(sql)
if rate
rr['rate'] = rate['rate']
rr['increment_s'] = rate['increment_s']
else
rr['rate'] = nil
end
end
@res_prov << rr
@not_disabled_prov += 1 if prov.active?(@lcr.id) == 1
@active_prov += 1 if rr['rate'] and rr['prefix'] and prov.active?(@lcr.id) == 1 and (prov.device.user_id.to_i != @user.id.to_i or !mor_11_extend?)
end
if admin? and @user.owner_id.to_i > 0
@reseller = @user.owner
unless @reseller and @reseller.is_reseller?
flash[:notice] = _('Reseller_Was_Not_Found')
redirect_to :action => 'call_tracing' and return false
end
elsif reseller?
@reseller = current_user
end
if @reseller
@r_tariff = @reseller.tariff
@r_lcr = @reseller.lcr
@r_lcr_providers = @lcr.providers
if @r_tariff.purpose == "user"
sql = "
SELECT A.prefix, aratedetails.id as 'aid', aratedetails.from as 'afrom', aratedetails.duration as 'adur', aratedetails.artype as 'atype', aratedetails.round as 'around', aratedetails.price as 'aprice', destinationgroups.id as 'dgid', aratedetails.start_time, aratedetails.end_time
FROM rates
JOIN aratedetails ON (aratedetails.rate_id = rates.id)
JOIN destinationgroups ON (destinationgroups.id = rates.destinationgroup_id )
JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) ORDER BY LENGTH(destinations.prefix) DESC LIMIT 1) as A ON (A.destinationgroup_id = destinationgroups.id)
WHERE rates.tariff_id = #{@r_tariff.id} AND '#{time}' BETWEEN aratedetails.start_time AND aratedetails.end_time AND (aratedetails.daytype = '#{daytype}' OR aratedetails.daytype = '')
ORDER BY afrom ASC, atype ASC "
#my_debug "2"
@res_reseller = ActiveRecord::Base.connection.select_all(sql)
@dgroup_reseller = Destinationgroup.find(@res_reseller[0]['dgid']) if @res_reseller[0]
#custom rates
sql = "
SELECT A.prefix, acustratedetails.id as 'acid', acustratedetails.from as 'acfrom', acustratedetails.duration as 'acdur', acustratedetails.artype as 'actype', acustratedetails.round as 'acround', acustratedetails.price as 'acprice', destinationgroups.id as 'dgid', acustratedetails.start_time, acustratedetails.end_time
FROM destinationgroups
JOIN customrates ON (customrates.destinationgroup_id = destinationgroups.id)
JOIN acustratedetails ON (acustratedetails.customrate_id = customrates.id)
JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix)) ORDER BY LENGTH(destinations.prefix) DESC LIMIT 1) as A ON (A.destinationgroup_id = destinationgroups.id)
WHERE '#{time}' BETWEEN acustratedetails.start_time AND acustratedetails.end_time AND (acustratedetails.daytype = 'FD' OR acustratedetails.daytype = '') AND customrates.user_id = #{@reseller.id}"
@res_creseller = ActiveRecord::Base.connection.select_all(sql)
@cdgroup_reseller = Destinationgroup.find(@res_creseller[0]['dgid']) if @res_creseller[0]
else
#wholesale rates
@res_reseller = []
@res_creseller= []
sql = "SELECT A.prefix, ratedetails.rate, ratedetails.increment_s, ratedetails.min_time, ratedetails.connection_fee as 'cf', ratedetails.start_time, ratedetails.end_time FROM rates JOIN ratedetails ON (ratedetails.rate_id = rates.id AND (ratedetails.daytype = '#{daytype}' OR ratedetails.daytype = '' ) AND '#{time}' BETWEEN ratedetails.start_time AND ratedetails.end_time) JOIN (SELECT destinations.* FROM destinations WHERE destinations.prefix=SUBSTRING('#{dst}', 1, LENGTH(destinations.prefix))) as A ON (A.id = rates.destination_id) WHERE rates.tariff_id = #{@r_tariff.id} ORDER BY LENGTH(A.prefix) DESC LIMIT 1; "
@res_reseller = ActiveRecord::Base.connection.select_all(sql)
end
end
@hide_lcrs_and_providers = (reseller? and !current_user.can_own_providers?)
@hide_locations = (reseller? and @device.user_id == current_user.id)
end
#================= LOGIN AS ==================
def login_as
@page_title = _('Login_as')
@page_icon = 'key.png'
@users = User.find(:all, :select => "*, #{SqlExport.nice_user_sql}", :conditions => "hidden = 0", :order => "nice_user ASC")
end
def login_as_execute
@user = User.find_by_id(params[:user])
unless @user
flash[:notice] = _('User_was_not_found')
redirect_to :action => :index and return false
end
if @user.owner_id.to_i != session[:user_id].to_i
dont_be_so_smart
redirect_to :controller => "callc", :action => 'main' and return false
end
@login_ok = true
renew_session(@user)
flash[:status] = _('Logged_as') + ": " + nice_user(@user)
if defined?(CS_Active) && CS_Active == 1 && group = @user.usergroups.find(:first, :include => :group, :conditions => ["usergroups.gusertype = 'manager' and groups.grouptype = 'callshop'"])
session[:cs_group] = group
session[:lang] = Translation.find_by_id(group.group.translation_id).short_name
redirect_to :controller => "callshop", :action => "show", :id => group.group_id and return false
else
redirect_to :controller => "callc", :action => 'main' and return false
end
end
def settings
@page_title = _('Settings')
@page_icon = 'cog.png'
@help_link = 'http://wiki.kolmisoft.com/index.php/Configuration_from_GUI'
@countries = Direction.find(:all, :order => "name ASC")
if Confline.get_value("User_Wholesale_Enabled").to_i == 0
cond = " AND purpose = 'user' "
else
cond = " AND (purpose = 'user' OR purpose = 'user_wholesale') "
end
@tariffs = Tariff.find(:all, :conditions => "owner_id = '#{session[:user_id]}' #{cond} ", :order => "purpose ASC, name ASC")
@lcrs = current_user.lcrs.find(:all, :order => "name ASC")
@currencies = Currency.get_active
@servers = Server.find(:all, :order => "server_id ASC")
@all_ivrs = Ivr.find(:all)
style(Confline.get_value("Usual_text_font_style").to_i)
@style1 = @ar[2]
@style2 = @ar[1]
@style3 = @ar[0]
style(Confline.get_value("Usual_text_highlighted_text_style").to_i)
@style4 = @ar[2]
@style5 = @ar[1]
@style6 = @ar[0]
style(Confline.get_value("Header_footer_font_style").to_i)
@style7 = @ar[2]
@style8 = @ar[1]
@style9 = @ar[0]
@invoice_postpaid = Confline.get_value("Invoice_default").to_i
@i_postpaid = []
max = 128
i= 6
6.times do
max = max / 2
if @invoice_postpaid.to_i >= max.to_i
@i_postpaid[i] = max
@invoice_postpaid = @invoice_postpaid.to_i - max.to_i
end
i = i -1
end
@invoice_prepaid = Confline.get_value("Prepaid_Invoice_default").to_i
@i_prepaid = []
max = 128
i= 6
6.times do
max = max / 2
if @invoice_prepaid.to_i >= max.to_i
@i_prepaid[i] = max
@invoice_prepaid = @invoice_prepaid.to_i - max.to_i
end
i = i -1
end
@agreement = Confline.get("Registration_Agreement", session[:user_id])
end
def send_test_email
@emails = Email.find(:all, :conditions => ["owner_id= ? AND (callcenter='0' OR callcenter IS NULL)", session[:user_id]])
if @emails.size.to_i == 0 and session[:usertype] == "reseller"
user=User.find(session[:user_id])
user.create_reseller_emails
end
@num = EmailsController.send_test(session[:user_id])
flash[:notice] = @num
if session[:usertype] == "admin"
redirect_to :action => "settings"
else
redirect_to :action => "reseller_settings"
end
end
def settings_change
if params[:company].to_s.length == 0
redirect_to :controller => "callc", :action => 'main' and return false
end
if invalid_api_params? params[:allow_api], params[:api_secret_key]
flash[:notice] = _("invalid_api_secret_key")
redirect_to :action => 'settings' and return false
end
params[:email_from] = params[:email_from].strip
if not params[:email_from].to_s.blank? and not params[:email_from].to_s =~ /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/
flash[:notice] = _("Invalid_email_format_in_emails_from")
redirect_to :action => 'settings' and return false
end
=begin
if (!Email.address_validation(params[:email_fax_from_sender]) and params[:fax_device_enabled].to_i == 1) or !Email.address_validation(params[:company_email])
flash[:notice] = _("Email_address_not_corect")
redirect_to :action => 'settings' and return false
end
=end
error = 0
#Globals
update_confline("Company", params[:company])
update_confline("Company_Email", params[:company_email])
update_confline("Version", params[:version])
update_confline("Copyright_Title", params[:copyright_title])
update_confline("Admin_Browser_Title", params[:admin_browser_title])
Confline.set_value2("Frontpage_Text", params[:frontpage_text].to_s, session[:user_id])
#Registration
update_confline("Registration_enabled", params[:registration_enabled])
Confline.set_value("Hide_registration_link", params[:hide_registration_link])
update_confline("Tariff_for_registered_users", params[:tariff_for_registered_users])
update_confline("LCR_for_registered_users", params[:lcr_for_registered_users])
update_confline("Default_Country_ID", params[:default_country_id])
update_confline("Asterisk_Server_IP", params[:asterisk_server_ip])
update_confline("Default_CID_Name", params[:default_cid_name])
update_confline("Default_CID_Number", params[:default_cid_number])
update_confline("Send_Email_To_User_After_Registration", params[:send_email_to_user_after_registration])
update_confline("Send_Email_To_Admin_After_Registration", params[:send_email_to_admin_after_registration])
Confline.set_value("Default_Balance_for_new_user", params[:default_balance_for_new_user].to_f)
Confline.set_value("reCAPTCHA_enabled", params[:enable_recaptcha].to_i)
Confline.set_value("ReCAPTCHA_public_key", params[:recaptcha_public_key].to_s.strip)
Confline.set_value("ReCAPTCHA_private_key", params[:recaptcha_private_key].to_s.strip)
Confline.set_value("Allow_registration_username_passwords_in_devices", params[:allow_registration_username_passwords_in_devices].to_i)
Confline.set_value("Active_calls_show_did", params[:active_calls_show_did].to_i)
Confline.set_value("Registration_Enable_VAT_checking", params[:enable_vat_checking].to_i)
Confline.set_value("Registration_allow_vat_blank", params[:allow_vat_blank].to_i)
#Invoices
#postpaid
update_confline("Invoice_Number_Start", params[:invoice_number_start])
params[:invoice_number_length] = validate_range(params[:invoice_number_length], 1, 20, 5).to_i
update_confline("Invoice_Number_Length", params[:invoice_number_length])
update_confline("Invoice_Number_Type", params[:invoice_number_type])
update_confline("Invoice_Period_Start_Day", params[:invoice_period_start_day])
update_confline("Invoice_Show_Calls_In_Detailed", params[:invoice_show_calls_in_detailed])
format = params[:invoice_address_format].to_i == 0 ? 1 : params[:invoice_address_format]
update_confline("Invoice_Address_Format", format)
update_confline("Invoice_Address1", params[:invoice_address1])
update_confline("Invoice_Address2", params[:invoice_address2])
update_confline("Invoice_Address3", params[:invoice_address3])
update_confline("Invoice_Address4", params[:invoice_address4])
update_confline("Invoice_Bank_Details_Line1", params[:invoice_bank_details_line1])
update_confline("Invoice_Bank_Details_Line2", params[:invoice_bank_details_line2])
update_confline("Invoice_Bank_Details_Line3", params[:invoice_bank_details_line3])
update_confline("Invoice_Bank_Details_Line4", params[:invoice_bank_details_line4])
update_confline("Invoice_Bank_Details_Line5", params[:invoice_bank_details_line5])
update_confline("Invoice_Balance_Line", params[:invoice_balance_line], session[:user_id])
update_confline("Invoice_To_Pay_Line", params[:invoice_to_pay_line], session[:user_id])
update_confline("Invoice_End_Title", params[:invoice_end_title])
Confline.set_value("Invoice_Show_Balance_Line", params[:invoice_show_balance_line])
if mor_11_extend?
Confline.set_value("Invoice_Add_Average_rate", params[:invoice_add_average_rate].to_i)
Confline.set_value("Invoice_Show_Time_in_Minutes", params[:invoice_show_time_in_minutes].to_i)
Confline.set_value('Show_recordings_with_zero_billsec', params[:show_recordings_with_zero_billsec].to_i)
end
@invoice = (params[:i1]).to_i + (params[:i2]).to_i + (params[:i3]).to_i + (params[:i4]).to_i + (params[:i5]).to_i + (params[:i6]).to_i
update_confline("Invoice_default", @invoice)
Confline.set_value("Round_finals_to_2_decimals", params[:invoice_number_digits].to_i)
Confline.set_value("Invoice_Short_File_Name", params[:invoice_short_file_name].to_i)
session[:nice_invoice_number_digits] = params[:invoice_number_digits].to_i
Confline.set_value("Invoice_user_billsec_show", params[:invoice_user_billsec_show].to_i)
Confline.set_value("Invoice_show_additional_details_on_separate_page", params[:show_additional_details_on_separate_page_check].to_i)
Confline.set_value2("Invoice_show_additional_details_on_separate_page", params[:show_additional_details_on_separate_page_details].to_s)
set_valid_page_limit("Invoice_page_limit", params[:invoice_page_limit].to_i, 0) #"magic number" 0 means administrator id
# Prepaid
Confline.set_value("Prepaid_Invoice_Number_Start", params[:prepaid_invoice_number_start])
params[:prepaid_invoice_number_length] = validate_range(params[:prepaid_invoice_number_length], 1, 20, 5).to_i
Confline.set_value("Prepaid_Invoice_Number_Length", params[:prepaid_invoice_number_length])
Confline.set_value("Prepaid_Invoice_Number_Type", params[:prepaid_invoice_number_type])
Confline.set_value("Prepaid_Invoice_Period_Start_Day", params[:prepaid_invoice_period_start_day])
Confline.set_value("Prepaid_Invoice_Show_Calls_In_Detailed", params[:prepaid_invoice_show_calls_in_detailed])
Confline.set_value("Prepaid_Invoice_Address_Format", params[:prepaid_invoice_address_format])
Confline.set_value("Prepaid_Invoice_Address1", params[:prepaid_invoice_address1])
Confline.set_value("Prepaid_Invoice_Address2", params[:prepaid_invoice_address2])
Confline.set_value("Prepaid_Invoice_Address3", params[:prepaid_invoice_address3])
Confline.set_value("Prepaid_Invoice_Address4", params[:prepaid_invoice_address4])
Confline.set_value("Prepaid_Invoice_Bank_Details_Line1", params[:prepaid_invoice_bank_details_line1])
Confline.set_value("Prepaid_Invoice_Bank_Details_Line2", params[:prepaid_invoice_bank_details_line2])
Confline.set_value("Prepaid_Invoice_Bank_Details_Line3", params[:prepaid_invoice_bank_details_line3])
Confline.set_value("Prepaid_Invoice_Bank_Details_Line4", params[:prepaid_invoice_bank_details_line4])
Confline.set_value("Prepaid_Invoice_Bank_Details_Line5", params[:prepaid_invoice_bank_details_line5])
Confline.set_value("Prepaid_Invoice_Balance_Line", params[:prepaid_invoice_balance_line], session[:user_id])
Confline.set_value("Prepaid_Invoice_To_Pay_Line", params[:prepaid_invoice_to_pay_line], session[:user_id])
Confline.set_value("Prepaid_Invoice_End_Title", params[:prepaid_invoice_end_title])
if mor_11_extend?
Confline.set_value("Prepaid_Invoice_Add_Average_rate", params[:prepaid_invoice_add_average_rate].to_i)
Confline.set_value("Prepaid_Invoice_Show_Time_in_Minutes", params[:prepaid_invoice_show_time_in_minutes].to_i)
end
Confline.set_value("Prepaid_Invoice_Show_Balance_Line", params[:prepaid_invoice_show_balance_line])
@invoice_prepaid = (params[:i1_prepaid]).to_i + (params[:i2_prepaid]).to_i + (params[:i3_prepaid]).to_i + (params[:i4_prepaid]).to_i + (params[:i5_prepaid]).to_i + (params[:i6_prepaid]).to_i
Confline.set_value("Prepaid_Invoice_default", @invoice_prepaid)
Confline.set_value("Prepaid_Round_finals_to_2_decimals", params[:prepaid_invoice_number_digits].to_i)
Confline.set_value("Prepaid_Invoice_Short_File_Name", params[:prepaid_invoice_short_file_name].to_i)
session[:nice_prepaid_invoice_number_digits] = params[:prepaid_invoice_number_digits].to_i
Confline.set_value("Prepaid_Invoice_user_billsec_show", params[:prepaid_invoice_user_billsec_show].to_i)
Confline.set_value("Prepaid_Invoice_show_additional_details_on_separate_page", params[:prepaid_show_additional_details_on_separate_page_check].to_i)
Confline.set_value2("Prepaid_Invoice_show_additional_details_on_separate_page", params[:prepaid_show_additional_details_on_separate_page_details].to_s)
set_valid_page_limit("Prepaid_Invoice_page_limit", params[:prepaid_invoice_page_limit].to_i, 0) #"magic number" 0 means administrator id
Confline.set_value("Invoice_allow_recalculate_after_send", params[:invoice_allow_recalculate_after_send].to_i, 0)
#Emails
update_confline("Email_Sending_Enabled", params[:email_sending_enabled])
update_confline("Email_Smtp_Server", params[:email_smtp_server])
# set default param in model
#update_confline("Email_Domain", params[:email_domain])
update_confline("Email_Batch_Size", params[:email_batch_size])
update_confline("Email_from", params[:email_from])
update_confline("Email_port", params[:email_port])
if callback_active?
if Confline.get_value("Email_Callback_Login", 0).to_s != params[:email_login] or Confline.get_value("Email_Callback_Pop3_Server", 0).to_s != params[:email_pop3_server]
update_confline("Email_Pop3_Server", params[:email_pop3_server])
update_confline("Email_Login", params[:email_login])
update_confline("Email_Password", params[:email_password])
else
error =1
flash[:notice] = _('Cannot_duplicate_email_callback_server')
end
else
update_confline("Email_Login", params[:email_login])
update_confline("Email_Password", params[:email_password])
end
#Realtime
if (params[:time]).to_i < 15
update_confline("Realtime_reload_time", '15')
else
update_confline("Realtime_reload_time", params[:time])
end
update_confline("Usual_text_font_color", params[:colorfield1])
update_confline("Usual_text_font_size", params[:usual_text_font_size])
@usual_text_font_style = (params[:style1]).to_i + (params[:style2]).to_i + (params[:style3]).to_i
update_confline("Usual_text_font_style", @usual_text_font_style.to_s)
update_confline("Usual_text_highlighted_text_color", params[:colorfield2])
@usual_text_highlighted_text_style = (params[:style4]).to_i + (params[:style5]).to_i + (params[:style6]).to_i
update_confline("Usual_text_highlighted_text_style", @usual_text_highlighted_text_style.to_s)
update_confline("Usual_text_highlighted_text_size", params[:usual_text_highlighted_text_size])
update_confline("Header_footer_font_color", params[:colorfield3])
update_confline("Header_footer_font_size", params[:h_f_font_size])
@h_f_font_style = (params[:style7]).to_i + (params[:style8]).to_i + (params[:style9]).to_i
update_confline("Header_footer_font_style", @h_f_font_style.to_s)
update_confline("Background_color", params[:colorfield4])
update_confline("Row1_color", params[:colorfield5])
update_confline("Row2_color", params[:colorfield6])
update_confline("3_first_rows_color", params[:colorfield7])
#Tax
params[:total_tax] = "TAX" if params[:total_tax].blank?
params[:tax1name] = params[:total_tax].to_s if params[:tax1name].blank?
Confline.set_value("Tax_1", params[:tax1name])
Confline.set_value("Tax_2", params[:tax2name])
Confline.set_value("Tax_3", params[:tax3name])
Confline.set_value("Tax_4", params[:tax4name])
Confline.set_value("Tax_1_Value", params[:tax1value].to_f)
Confline.set_value("Tax_2_Value", params[:tax2value].to_f)
Confline.set_value("Tax_3_Value", params[:tax3value].to_f)
Confline.set_value("Tax_4_Value", params[:tax4value].to_f)
Confline.set_value("Total_tax_name", params[:total_tax])
Confline.set_value("Tax_compound", params[:compound_tax].to_i)
Confline.set_value2("Tax_1", "1") # for consistency.
Confline.set_value2("Tax_2", params[:tax2active].to_i)
Confline.set_value2("Tax_3", params[:tax3active].to_i)
Confline.set_value2("Tax_4", params[:tax4active].to_i)
#/Tax
Confline.set_value("User_Wholesale_Enabled", params[:user_wholesale_enabled])
if params[:days_for_did_close].to_i > 1000
Confline.set_value("Days_for_did_close", 1000)
else
if params[:days_for_did_close].to_i < 0
Confline.set_value("Days_for_did_close", 0)
else
Confline.set_value("Days_for_did_close", params[:days_for_did_close])
end
end
Confline.set_value("Agreement_Number_Length", params[:agreement_number_length])
Confline.set_value("Nice_Number_Digits", params[:nice_number_digits])
if params[:items_per_page].to_i < 1
flash[:notice] = _('Items_Per_Page_mus_be_greater_than_0')
error = 1
else
Confline.set_value("Items_Per_Page", params[:items_per_page].to_i)
end
Confline.set_value("Date_format", params[:date_format])
Confline.set_value("Device_PIN_Length", params[:device_pin_length])
Confline.set_value("Fax_Device_Enabled", params[:fax_device_enabled])
Confline.set_value("Email_Fax_From_Sender", params[:email_fax_from_sender])
Confline.set_value("Fax2Email_Folder", params[:fax2email_folder]) if params[:fax2email_folder].to_s.length > 0
Confline.set_value("Change_dahdi", params[:change_dahdi])
Confline.set_value("Change_dahdi_to", params[:change_dahdi_to])
if params[:device_range_min].to_i < params[:device_range_max].to_i
Confline.set_value("Device_Range_MIN", params[:device_range_min])
Confline.set_value("Device_Range_MAX", params[:device_range_max])
else
flash[:notice] = _('Device_Range_inteval_is_not_valid')
error = 1
end
Confline.set_value("Disalow_Duplicate_Device_Usernames", params[:disalow_duplicate_device_usernames])
update_confline("Disallow_prepaid_user_balance_drop_below_zero", params[:disallow_prepaid_user_balance_drop_below_zero].to_i)
Confline.set_value("Hide_non_completed_payments_for_user", params[:hide_non_completed_payments_for_user].to_i)
Confline.set_value("Disallow_Email_Editing", params[:disallow_email_editing], current_user.id)
Confline.set_value("AD_Sounds_Folder", params[:ad_sound_folder])
Confline.set_value("Logout_link", params[:logout_link])
# FUNCTIONALITY
Confline.set_value("Devices_Check_Ballance", params[:devices_check_ballance])
Confline.set_value("Devices_Check_Rate", params[:devices_check_rate])
Confline.set_value("Allow_short_passwords_in_devices", params[:allow_short_passwords_in_devices].to_i)
Confline.set_value("Show_zero_rates_in_LCR_tariff_export", params[:show_zero_rates_in_LCR_tariff_export].to_i)
# FUNCTIONALITY
Confline.set_value("Show_Rates_Without_Tax", params[:show_rates_without_tax], session[:user_id])
## Check if decimal separator and CSV separator are not equal.
if params[:csv_separator] != params[:csv_decimal]
Confline.set_value("CSV_Separator", params[:csv_separator])
Confline.set_value("CSV_Decimal", params[:csv_decimal])
end
Confline.set_value("XML_API_Extension", params[:xml_api_extension].to_i)
if not params[:XML_API_Extension]
Confline.set_value("Show_Full_Src", params[:show_full_src])
end
Confline.set_value("Google_Key", params[:gm_key])
Confline.set_value("Active_Calls_Maximum_Calls", params[:active_calls_max])
Confline.set_value("Active_Calls_Refresh_Interval", (params[:active_calls_interval].to_i < 3 ? 3 : params[:active_calls_interval].to_i))
Confline.set_value("Show_Active_Calls_for_Users", params[:show_active_calls_for_users])
Confline.set_value("Active_Calls_Show_Server", params[:active_calls_show_server])
Confline.set_value("Banned_CLIs_default_IVR_id", params[:banned_clis_default_ivr_id])
if params[:show_logo_on_register_page]
Confline.set_value("Show_logo_on_register_page", params[:show_logo_on_register_page])
else
Confline.set_value("Show_logo_on_register_page", 0)
end
Confline.set_value("Show_rates_for_users", params[:show_rates_for_users].to_i, session[:user_id])
Confline.set_value("Show_Advanced_Rates_For_Users", params[:show_advanced_rates_for_users].to_i, session[:user_id])
Confline.set_value("Show_advanced_Device_settings", params[:show_advanced_device_settings].to_i, session[:user_id])
Confline.set_value("Hide_payment_options_for_postpaid_users", params[:hide_payment_options_for_postpaid_users].to_i, session[:user_id])
Confline.set_value("Hide_quick_stats", params[:hide_quick_stats].to_i, session[:user_id])
Confline.set_value("Hide_HELP_banner", params[:hide_help_banner].to_i, session[:user_id])
Confline.set_value("Hide_Iwantto", params[:hide_iwantto].to_i)
Confline.set_value("Hide_Manual_Link", params[:hide_manual_link].to_i)
Confline.set_value("Hide_Device_Passwords_For_Users", params[:hide_device_passwords_for_users].to_i, 0)
Confline.set_value("Show_only_main_page", params[:show_only_main_page].to_i, 0)
Confline.set_value("Show_forgot_password", params[:show_forgot_password].to_i, 0)
Confline.set_value("Hide_recordings_for_all_users", params[:hide_recordings_for_all_users].to_i, 0)
# GoogleMaps
Confline.set_value("Google_Fullscreen", params[:gm_fullscreen])
Confline.set_value("Google_ReloadTime", params[:gm_reload_time])
Confline.set_value("Google_Width", params[:gm_width])
Confline.set_value("Google_Height", params[:gm_height])
Confline.set_value("Google_Key", params[:gm_key])
# Backups Confline.set_value
#Confline.set_value('Backup_Folder', params[:backup_storage_directory])
if params[:backup_number].to_i >= 3 and params[:backup_number].to_i <= 50
Confline.set_value('Backup_number', params[:backup_number].to_i)
else
Confline.set_value('Backup_number', 3)
end
if params[:backup_disk_space].to_i >= 10 and params[:backup_disk_space].to_i <= 100
Confline.set_value('Backup_disk_space', params[:backup_disk_space].to_i)
else
Confline.set_value('Backup_disk_space', 10)
end
Confline.set_value('Backup_shedule', params[:shedule])
Confline.set_value('Backup_month', params[:backup_month])
if (((params[:backup_month].to_i % 2 == 1) and (params[:backup_month].to_i > 8)) or ((params[:backup_month].to_i % 2 == 0) and (params[:backup_month].to_i < 7))) and params[:backup_month_day].to_i >= 29
params[:backup_month_day] = 30 if params[:backup_month_day].to_i >= 30
if params[:backup_month].to_i == 2
params[:backup_month_day] = 28
end
end
Confline.set_value('Backup_month_day', params[:backup_month_day])
Confline.set_value('Backup_week_day', params[:backup_week_day])
Confline.set_value('Backup_hour', params[:hour])
# API settings
Confline.set_value('Allow_API', params[:allow_api].to_i)
Confline.set_value('Allow_GET_API', params[:allow_get_api].to_i)
Confline.set_value('API_Secret_Key', params[:api_secret_key])
Confline.set_value('API_Login_Redirect_to_Main', params[:api_login_redirect_to_main].to_i)
Confline.set_value('API_Allow_registration_ower_API', params[:api_allow_registration].to_i)
# /API settings
Confline.set_value("CSV_File_size", params[:csv_file_size].to_i)
Confline.set_value('Play_IVR_for_200_HGC', params[:play_ivr_for_200_hgc].to_i)
Confline.set_value('IVR_for_200_HGC', params[:ivr_for_200_hgc].to_i)
# terms and conditions
cl = Confline.find_or_create_by_name_and_owner_id("Registration_Agreement", session[:user_id])
if params[:use_terms_and_conditions]
cl.update_attributes({:value2 => params[:terms_and_conditions], :value => "1"})
else
cl.update_attribute(:value, "0")
end
Confline.set_value('Change_ANSWER_to_FAILED_if_HGC_not_equal_to_16_for_Users', params[:change_if_hgc_not_equal_to_16_for_users].to_i)
Confline.set_value('Global_Number_Decimal', params[:global_number_decimal].to_s)
Confline.set_value('System_time_zone_daylight_savings', params[:system_time_zone_daylight_savings].to_i)
if mor_11_extend?
tb = Confline.get_value('Tell_Balance').to_i
tt = Confline.get_value('Tell_Time').to_i
Confline.set_value('Tell_Balance', params[:tell_balance].to_i)
Confline.set_value('Tell_Time', params[:tell_time].to_i)
Confline.set_value('API_Allow_payments_ower_API', params[:api_allow_payments].to_i)
Confline.set_value('API_payment_confirmation', params[:api_payment_confirmation].to_i)
Dialplan.change_tell_balance_value(params[:tell_balance].to_i) if tb != params[:tell_balance].to_i
Dialplan.change_tell_time_value(params[:tell_time].to_i) if tt != params[:tell_time].to_i
end
# PRIVACY settings
Confline.set_value("Hide_Destination_End", params[:hide_destination_ends_gui].to_i + params[:hide_destination_ends_csv].to_i + params[:hide_destination_ends_pdf].to_i)
# /PRIVACY settings
user = User.find_by_id(session[:user_id])
unless user
flash[:notice] = _("User_not_found")
redirect_to :controller => :callc, :action => :main and return false
end
renew_session(user)
if error.to_i == 0
flash[:status] = _('Settings_saved')
end
redirect_to :action => 'settings' and return false
end
=begin rdoc
Sets default tax values for users or cardgroups
*Params*
u - 1 : set default taxes for users, 2 : set default taxes for cardgroups
*Flash*
notice - _('User_taxes_set_successfully') for users or _('Cardgroup_taxes_set_successfully') for cardgroups
*Redirects*
settings - after this action settings form is reopened.
=end
def tax_change
owner = correct_owner_id
tax ={
:tax1_enabled => 1,
:tax2_enabled => Confline.get_value2("Tax_2", owner).to_i,
:tax3_enabled => Confline.get_value2("Tax_3", owner).to_i,
:tax4_enabled => Confline.get_value2("Tax_4", owner).to_i,
:tax1_name => Confline.get_value("Tax_1", owner),
:tax2_name => Confline.get_value("Tax_2", owner),
:tax3_name => Confline.get_value("Tax_3", owner),
:tax4_name => Confline.get_value("Tax_4", owner),
:total_tax_name => Confline.get_value("Total_tax_name", owner),
:tax1_value => Confline.get_value("Tax_1_Value", owner).to_f,
:tax2_value => Confline.get_value("Tax_2_Value", owner).to_f,
:tax3_value => Confline.get_value("Tax_3_Value", owner).to_f,
:tax4_value => Confline.get_value("Tax_4_Value", owner).to_f,
:compound_tax => Confline.get_value("Tax_compound", owner).to_i
}
tax[:total_tax_name] = "TAX" if tax[:total_tax_name].blank?
tax[:tax1_name] = tax[:total_tax_name].to_s if tax[:tax1_name].blank?
case params[:u].to_i
when 1 :
users = User.find(:all, :include => [:tax], :conditions => ["owner_id = ?", owner])
for user in users do
user.assign_default_tax(tax, {:save => true})
end
Confline.set_default_object(Tax, owner, tax)
flash[:status] = _('User_taxes_set_successfully')
when 2 :
Cardgroup.set_tax(tax, session[:user_id])
flash[:status] = _('Cardgroup_taxes_set_successfully')
when 3 :
Voucher.set_tax(tax)
flash[:status] = _('voucher_taxes_set_successfully')
else
dont_be_so_smart
end
if owner == 0
redirect_to :action => 'settings' and return false
else
redirect_to :action => 'reseller_settings' and return false
end
end
def settings_vm
@page_title = _('VoiceMail_Settings')
@page_icon = 'voicemail.png'
@help_link = "http://wiki.kolmisoft.com/index.php/Voicemail"
@devices = Device.find(:all, :conditions => "user_id >= 0 AND name not like 'mor_server_%'", :order => "username ASC")
end
def style(stile)
@ar = []
if stile >= 8
@ar[0]=8
else
@ar[0]=0
end
stile = stile - @ar[0]
if stile >= 6
@ar[1]=4
else
@ar[1]=0
end
stile = stile - @ar[1]
if stile >= 2
@ar[2]=2
else
@ar[2]=0
end
return @ar
end
def settings_vm_change
if params[:vm_retrieve_extension].length == 0
flash[:notice] = _('Please_enter_extension')
redirect_to :action => 'settings_vm' and return false
end
if params[:vm_server_active].to_i == 1 and params[:vm_server_device_id].length == 0
flash[:notice] = _('Please_select_device')
redirect_to :action => 'settings_vm' and return false
end
if params[:vm_server_retrieve_extension].length == 0
flash[:notice] = _('Please_enter_extension')
redirect_to :action => 'settings_vm' and return false
end
old_local_ext = Confline.get_value("VM_Retrieve_Extension", 0)
new_local_ext = params[:vm_retrieve_extension]
old_server_ext = Confline.get_value("VM_Server_Retrieve_Extension", 0)
new_server_ext = params[:vm_server_retrieve_extension]
device_id = params[:vm_server_device_id]
update_confline("VM_Retrieve_Extension", new_local_ext)
update_confline("VM_Server_Active", params[:vm_server_active])
update_confline("VM_Server_Device_ID", device_id)
update_confline("VM_Server_Retrieve_Extension", new_server_ext)
reconfigure_voicemail(params[:vm_server_active].to_i, old_server_ext, new_server_ext, old_local_ext, new_local_ext, device_id)
flash[:status] = _('Settings_saved')
redirect_to :action => 'settings_vm' and return false
end
def settings_payments
@page_title = _('Payment_Settings')
@page_icon = 'cog.png'
@help_link = 'http://wiki.kolmisoft.com/index.php/Payments_configuration'
@countries = Direction.find(:all, :order => "name ASC")
if Confline.get_value("User_Wholesale_Enabled").to_i == 0
cond = " AND purpose = 'user' "
else
cond = " AND (purpose = 'user' OR purpose = 'user_wholesale') "
end
@tariffs = Tariff.find(:all, :conditions => "owner_id = '#{session[:user_id]}' #{cond} ", :order => "purpose ASC, name ASC")
@lcrs = current_user.lcrs.find(:all, :order => "name ASC")
@currencies = Currency.get_active
@ppcurr = Confline.get_value("Paypal_Default_Currency")
@wppcurr = Confline.get_value("WebMoney_Default_Currency")
@lppcurr = Confline.get_value("Linkpoint_Default_Currency")
@cpcurr = Confline.get_value("Cyberplat_Default_Currency")
@selected_mode = Confline.get_value('WebMoney_SIM_MODE').to_i
end
def settings_payments_change
@page_title = _('Payment_Settings')
@page_icon = 'cog.png'
default_amount = (params[:paypal_default_amount].to_f > params[:paypal_max_amount].to_f) ? params[:paypal_max_amount] : params[:paypal_default_amount]
default_amount = (params[:paypal_default_amount].to_f < params[:paypal_min_amount].to_f) ? params[:paypal_min_amount] : default_amount
#Vouchers
Confline.set_value("Vouchers_Enabled", params[:vouchers_enabled].to_i, session[:user_id])
if params[:vouchers_enabled].to_i == 0
ActiveRecord::Base.connection.update("UPDATE conflines SET value = 0 WHERE name = 'Vouchers_Enabled'")
end
Confline.set_value("Voucher_Number_Length", params[:voucher_number_length])
Confline.set_value("Voucher_Disable_Time", params[:voucher_disable_time])
Confline.set_value("Voucher_Attempts_to_Enter", params[:voucher_attempts_to_enter])
Confline.set_value("Voucher_Card_Disable", params[:voucher_card_disable].to_i)
# /Vouchers
#PayPal
if (!Email.address_validation(params[:paypal_email]) and (params[:paypal_enabled].to_i == 1 or params[:paypal_test].to_i ==1))
flash[:notice] = _("Email_address_not_corect")
redirect_to :action => 'settings_payments' and return false
end
Confline.set_value("Paypal_Enabled", params[:paypal_enabled].to_i)
Confline.set_value("Paypal_Disable_For_Reseller", params[:paypal_disable_for_reseller].to_i)
Confline.set_value("PayPal_Email", params[:paypal_email])
Confline.set_value("PayPal_Default_Currency", params[:paypal_default_currency])
Confline.set_value("PayPal_User_Pays_Transfer_Fee", params[:paypal_user_pays_transfer_fee])
Confline.set_value("PayPal_Default_Amount", default_amount)
Confline.set_value("PayPal_Min_Amount", params[:paypal_min_amount])
Confline.set_value("PayPal_Max_Amount", params[:paypal_max_amount])
Confline.set_value("PayPal_Email_Notification", params[:paypal_email_notification])
Confline.set_value("PayPal_Test", params[:paypal_test])
Confline.set_value("PayPal_Payment_Confirmation", params[:paypal_payment_confirmation])
Confline.set_value('PayPal_Custom_redirect', params[:paypal_custom_redirect])
Confline.set_value('Paypal_return_url', params[:paypal_return_url])
Confline.set_value('Paypal_cancel_url', params[:paypal_cancel_url])
# /PayPal
#WebMoney
Confline.set_value("WebMoney_Enabled ", params[:webmoney_enabled].to_i)
Confline.set_value("WebMoney_Gateway ", params[:webmoney_gateway].to_i)
Confline.set_value("WebMoney_Test", params[:webmoney_test])
Confline.set_value("WebMoney_Default_Currency", params[:webmoney_default_currency])
Confline.set_value("WebMoney_Min_Amount", params[:webmoney_min_amount])
Confline.set_value("WebMoney_Default_Amount", params[:webmoney_default_amount])
Confline.set_value("WebMoney_Purse", params[:webmoney_purse])
Confline.set_value("WebMoney_SIM_MODE", params[:webmoney_sim_mode])
Confline.set_value("WebMoney_Secret_key", params[:webmoney_secret_key])
Confline.set_value("Webmoney_skip_prerequest", params[:webmoney_skip_prerequest])
# /Webmoney
# CyberPlat
Confline.set_value("Cyberplat_Enabled", params[:cyberplat_enabled].to_i)
Confline.set_value("Cyberplat_Test", params[:cyberplat_test])
Confline.set_value("Cyberplat_Default_Currency", params[:cyberplat_default_currency])
Confline.set_value("Cyberplat_Default_Amount", params[:cyberplat_default_amount])
Confline.set_value("Cyberplat_Min_Amount", params[:cyberplat_min_amount])
Confline.set_value("Cyberplat_ShopIP", params[:cyberplat_shopip])
Confline.set_value("Cyberplat_Transaction_Fee", params[:cyberplat_transaction_fee])
Confline.set_value2("Cyberplat_Crap", params[:cyberplat_crap])
Confline.set_value2("Cyberplat_Disabled_Info", params[:cyberplat_disabled_info])
# /Cyberplat
# Linkpoint
Confline.set_value("Linkpoint_Enabled ", params[:linkpoint_enabled].to_i)
Confline.set_value("Linkpoint_Test", params[:linkpoint_test].to_i)
Confline.set_value("Linkpoint_Allow_HTTP", params[:linkpoint_allow_http].to_i)
Confline.set_value("Linkpoint_Default_Currency", params[:linkpoint_default_currency])
Confline.set_value("Linkpoint_Min_Amount", params[:linkpoint_min_amount])
Confline.set_value("Linkpoint_Default_Amount", params[:linkpoint_default_amount])
Confline.set_value("Linkpoint_StoreID", params[:linkpoint_storeid])
# /Linkpoint
# Ouroboros
Confline.set_value("Ouroboros_Enabled", params[:ouroboros_enabled].to_i, session[:user_id])
Confline.set_value("Ouroboros_Min_Amount", params[:ouroboros_min_amount].to_i, session[:user_id])
Confline.set_value("Ouroboros_Max_Amount", params[:ouroboros_max_amount].to_i, session[:user_id])
Confline.set_value("Ouroboros_Default_Amount", params[:ouroboros_default_amount].to_i, session[:user_id])
Confline.set_value("Ouroboros_Language", params[:ouroboros_language], session[:user_id])
Confline.set_value("Ouroboros_Default_Currency", params[:ouroboros_default_currency], session[:user_id])
Confline.set_value("Ouroboros_Secret_key", params[:ouroboros_secret_key].to_s.strip, session[:user_id])
Confline.set_value("Ouroboros_Merchant_Code", params[:ouroboros_merchant_code], session[:user_id])
Confline.set_value("Ouroboros_Completion", 0, session[:user_id])
Confline.set_value("Ouroboros_Completion_Over", params[:ouroboros_max_amount].to_i, session[:user_id])
Confline.set_value("Ouroboros_Retry_Count", 3, session[:user_id])
Confline.set_value("Ouroboros_Link_name_and_url", params[:ouroboros_link_name], session[:user_id])
Confline.set_value2("Ouroboros_Link_name_and_url", params[:ouroboros_link_url], session[:user_id])
# /Ouroboros
user = User.find(session[:user_id])
renew_session(user)
flash[:status] = _('Settings_saved')
redirect_to :action => 'settings_payments' and return false
end
=begin rdoc
=end
def settings_addons
@page_title = _('Addons_Settings')
@page_icon = 'cog.png'
if recordings_addon_active?
@total_recordings_size = Recording.find(:all, :first, :select => "SUM(size) AS 'total_size'", :conditions => "deleted = 0")[0]["total_size"].to_f
end
end
=begin rdoc
=end
def settings_addons_change
errors = []
# === Recordings ===============================================================
if recordings_addon_active?
sum = params[:ra_ip].to_s.strip+params[:ra_port].to_s.strip+params[:ra_login].to_s.strip+params[:ra_password].to_s.strip
if params[:ra_use_external_server].to_i == 1 and sum.length == 0
flash[:notice]= _('Set_external_Server_options')
redirect_to :action => 'settings_addons' and return false
end
Confline.set_value("Recordings_addon_Use_External_Server", params[:ra_use_external_server], session[:user_id])
if Device.validate_ip(params[:ra_ip])
Confline.set_value("Recordings_addon_IP", params[:ra_ip], session[:user_id])
else
errors << _('Recordings_addon_IP_is_not_valid')
#redirect_to :action => 'settings_addons' and return false
end
if params[:ra_port].gsub(/[0-9]/, "").to_s.length == 0
Confline.set_value("Recordings_addon_Port", params[:ra_port], session[:user_id])
else
errors << _('Recordings_addon_Port_is_not_valid')
#redirect_to :action => 'settings_addons' and return false
end
Confline.set_value("Recordings_addon_Login", params[:ra_login], session[:user_id])
Confline.set_value("Recordings_addon_Password", params[:ra_password], session[:user_id])
Confline.set_value("Recordings_addon_Max_Space", (params[:ra_max_space].to_f*1048576).to_i, session[:user_id])
end
# /=== Recordings ==============================================================
# === Click To Call ============================================================
if calling_cards_active?
Confline.set_value("CCShop_show_values_without_VAT_for_user", params[:CCShop_show_values_without_VAT_for_user].to_i, session[:user_id])
end
# === SMS ======================================================================
if sms_active?
Confline.set_value("SMS_Email_Pop3_Server", params[:email_pop3_server].to_s, session[:user_id])
Confline.set_value("SMS_Email_Login", params[:email_login], session[:user_id])
Confline.set_value("SMS_Email_Password", params[:email_password], session[:user_id])
Confline.set_value("Send_SMS_from_Front_page", params[:send_sms_from_front_page].to_i, session[:user_id])
Confline.set_value2("Frontpage_SMS_Text", params[:frontpage_sms_text].to_s, session[:user_id])
end
# /=== SMS =====================================================================
# Monitoring
if (defined?(MA_Active) and MA_Active == 1)
Confline.set_value("Spy_Device", params[:spy_device], session[:user_id])
end
renew_session(current_user)
if errors.size > 0
flash[:notice] = " * " + errors.join("
* ")
else
flash[:status]= _('Settings_saved')
end
redirect_to :action => 'settings_addons' and return false
end
#================= LOGO UPLOAD ==================
def settings_logo
@page_title = _('Logo_settings')
@logo = Confline.get_value("Logo_Picture")
end
def settings_logo_save
if params[:logo]
@file = params[:logo]
if @file.size > 0
if @file.size < 102400
@filename = sanitize_filename(@file.original_filename)
@ext = @filename.split(".").last.downcase
if @ext == 'jpg' or @ext == 'jpeg' or @ext == 'png' or @ext == 'gif'
File.open(Actual_Dir + '/public/images/logo/' + @filename, "wb") do |f|
f.write(params[:logo].read)
end
update_confline("Logo_Picture", 'logo/' + @filename)
flash[:status] = _('Logo_uploaded')
user = User.find(session[:user_id])
renew_session(user)
else
flash[:notice] = _('Not_a_picture')
end
else
flash[:notice] = _('Logo_to_big_max_size_100kb')
end
else
flash[:notice] = _('Zero_size_file')
end
else
flash[:notice] = _('Select_a_file')
end
redirect_to :action => 'settings_logo' and return false
end
def update_confline(cline, value, id = 0)
Confline.set_value(cline, value, id)
end
def update_confline2(cline, value, id = 0)
Confline.set_value2(cline, value, id)
end
def translations
@page_title = _('Translations')
@items = current_user.load_user_translations
end
def translations_sort
params[:sortable_list].each_index do |i|
item = UserTranslation.find(params[:sortable_list][i])
item.update_attributes(:position => i)
end
@items = current_user.load_user_translations
render :layout => false, :action => :translations
end
def translations_change_status
tr = UserTranslation.find(params[:id])
active = UserTranslation.get_active.size
tr.active = (tr.active == 1 ? 0 : 1)
if (tr.active == 0 and active != 1) or tr.active == 1
tr.save
end
@items = current_user.load_user_translations
render :layout => false, :action => :translations
end
def translations_refresh
flags_to_session
redirect_to :action => 'translations' and return false
end
#============== Reseller options ===============================================
def reseller_settings
@page_title = _('Settings')
@page_icon = 'cog.png'
@countries = Direction.find(:all, :order => "name ASC")
if Confline.get_value("User_Wholesale_Enabled").to_i == 0
cond = " AND purpose = 'user' "
else
cond = " AND (purpose = 'user' OR purpose = 'user_wholesale') "
end
@tariffs = Tariff.find(:all, :conditions => "owner_id = '#{session[:user_id]}' #{cond} ", :order => "purpose ASC, name ASC")
@currencies =Currency.get_active
@user_id = session[:user_id]
@user = current_user
User.exists_resellers_confline_settings(session[:user_id])
@agreement = Confline.get("Registration_Agreement", session[:user_id])
end
def reseller_settings_change
#Confline.set_value(cline, value, id)
Confline.set_value("Company", params[:reseller_company], session[:user_id])
Confline.set_value("Company_Email", params[:reseller_company_email], session[:user_id])
Confline.set_value("Version", params[:reseller_version], session[:user_id])
Confline.set_value("Copyright_Title", params[:reseller_copyright_title], session[:user_id])
Confline.set_value("Admin_Browser_Title", params[:reseller_admin_browser_title], session[:user_id])
Confline.set_value2("Frontpage_Text", params[:frontpage_text].to_s, session[:user_id])
#boolean values
{"Registration_enabled" => :registration_enabled, "Hide_registration_link" => :hide_registration_link, "Show_logo_on_register_page" => :show_logo_on_register_page, "Registration_Enable_VAT_checking" => :enable_vat_checking, "Registration_allow_vat_blank" => :allow_vat_blank}.each { |key, value|
Confline.set_value(key, params[value].to_i, session[:user_id])
}
# INVOICES
Confline.set_value("Invoice_Number_Start", params[:invoice_number_start], session[:user_id])
params[:invoice_number_length] = validate_range(params[:invoice_number_length], 1, 20, 5).to_i
Confline.set_value("Invoice_Number_Length", params[:invoice_number_length], session[:user_id])
Confline.set_value("Invoice_Number_Type", params[:invoice_number_type], session[:user_id])
Confline.set_value("Invoice_Period_Start_Day", params[:invoice_period_start_day], session[:user_id])
Confline.set_value("Invoice_Show_Calls_In_Detailed", params[:invoice_show_calls_in_detailed], session[:user_id])
format = params[:invoice_address_format].to_i == 0 ? Confline.get_value("Invoice_Address_Format", 0).to_i : params[:invoice_address_format]
Confline.set_value("Invoice_Address_Format", format, session[:user_id])
Confline.set_value("Invoice_Address1", params[:invoice_address1], session[:user_id])
Confline.set_value("Invoice_Address2", params[:invoice_address2], session[:user_id])
Confline.set_value("Invoice_Address3", params[:invoice_address3], session[:user_id])
Confline.set_value("Invoice_Address4", params[:invoice_address4], session[:user_id])
Confline.set_value("Invoice_Bank_Details_Line1", params[:invoice_bank_details_line1], session[:user_id])
Confline.set_value("Invoice_Bank_Details_Line2", params[:invoice_bank_details_line2], session[:user_id])
Confline.set_value("Invoice_Bank_Details_Line3", params[:invoice_bank_details_line3], session[:user_id])
Confline.set_value("Invoice_Bank_Details_Line4", params[:invoice_bank_details_line4], session[:user_id])
Confline.set_value("Invoice_Bank_Details_Line5", params[:invoice_bank_details_line5], session[:user_id])
Confline.set_value("Invoice_Balance_Line", params[:invoice_balance_line], session[:user_id])
Confline.set_value("Invoice_End_Title", params[:invoice_end_title], session[:user_id])
Confline.set_value("Invoice_Show_Balance_Line", params[:invoice_show_balance_line], session[:user_id])
Confline.set_value("Invoice_Short_File_Name", params[:invoice_short_file_name].to_i, session[:user_id])
Confline.set_value("Date_format", params[:date_format], session[:user_id])
Confline.set_value("Invoice_show_additional_details_on_separate_page", params[:show_additional_details_on_separate_page_check].to_i, session[:user_id])
Confline.set_value2("Invoice_show_additional_details_on_separate_page", params[:show_additional_details_on_separate_page_details].to_s, session[:user_id])
set_valid_page_limit("Invoice_page_limit", params[:invoice_page_limit].to_i, session[:user_id])
unless current_user.reseller_allow_providers_tariff?
# PRIVACY settings
Confline.set_value("Hide_Destination_End", params[:hide_destination_ends_gui].to_i + params[:hide_destination_ends_csv].to_i + params[:hide_destination_ends_pdf].to_i, session[:user_id])
# /PRIVACY settings
end
if params[:csv_separator] != params[:csv_decimal]
update_confline("CSV_Separator", params[:csv_separator], session[:user_id])
update_confline("CSV_Decimal", params[:csv_decimal], session[:user_id])
end
Confline.set_value("Show_Rates_Without_Tax", params[:show_rates_without_tax], session[:user_id])
Confline.set_value("Show_rates_for_users", params[:show_rates_for_users].to_i, session[:user_id])
Confline.set_value("Show_Advanced_Rates_For_Users", params[:show_advanced_rates_for_users].to_i, session[:user_id])
update_confline("Disallow_prepaid_user_balance_drop_below_zero", params[:disallow_prepaid_user_balance_drop_below_zero].to_i, session[:user_id])
Confline.set_value("Logout_link", params[:logout_link], session[:user_id])
Confline.set_value("Show_only_main_page", params[:show_only_main_page].to_i, session[:user_id])
Confline.set_value("Show_forgot_password", params[:show_forgot_password].to_i, session[:user_id])
#Tax
params[:total_tax] = "TAX" if params[:total_tax].blank?
params[:tax1name] = params[:total_tax].to_s if params[:tax1name].blank?
Confline.set_value("Tax_1", params[:tax1name], session[:user_id])
Confline.set_value("Tax_2", params[:tax2name], session[:user_id])
Confline.set_value("Tax_3", params[:tax3name], session[:user_id])
Confline.set_value("Tax_4", params[:tax4name], session[:user_id])
Confline.set_value("Tax_1_Value", params[:tax1value].to_f, session[:user_id])
Confline.set_value("Tax_2_Value", params[:tax2value].to_f, session[:user_id])
Confline.set_value("Tax_3_Value", params[:tax3value].to_f, session[:user_id])
Confline.set_value("Tax_4_Value", params[:tax4value].to_f, session[:user_id])
Confline.set_value("Total_tax_name", params[:total_tax], session[:user_id])
Confline.set_value2("Tax_1", "1", session[:user_id]) # for consistency.
Confline.set_value2("Tax_2", params[:tax2active].to_i, session[:user_id])
Confline.set_value2("Tax_3", params[:tax3active].to_i, session[:user_id])
Confline.set_value2("Tax_4", params[:tax4active].to_i, session[:user_id])
Confline.set_value("Tax_compound", params[:compound_tax].to_i)
#/Tax
# EMAILS
params[:email_from] = params[:email_from].to_s.strip
if not params[:email_from].to_s.blank? and not params[:email_from].to_s =~ /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/
flash[:notice] = _("Invalid_email_format_in_emails_from")
redirect_to :action => 'reseller_settings' and return false
end
Confline.set_value("Email_Sending_Enabled", params[:email_sending_enabled], session[:user_id])
Confline.set_value("Email_Smtp_Server", params[:email_smtp_server], session[:user_id])
# set default param in model
#Confline.set_value("Email_Domain", params[:email_domain], session[:user_id])
Confline.set_value("Email_Batch_Size", params[:email_batch_size], session[:user_id])
Confline.set_value("Email_from", params[:email_from], session[:user_id])
Confline.set_value("Email_port", params[:email_port], session[:user_id])
Confline.set_value("Email_Login", params[:email_login], session[:user_id])
Confline.set_value("Email_Password", params[:email_password], session[:user_id])
i = 0
if params[:email_login].blank?
i = 1
Confline.set_value("Email_Login", Confline.get_value("Email_Login", 0), session[:user_id])
Confline.set_value("Email_Password", Confline.get_value("Email_Password", 0), session[:user_id])
end
Confline.set_value2("Email_Login", i, session[:user_id])
Confline.set_value2("Email_Password", i, session[:user_id])
Confline.set_value("Hide_Device_Passwords_For_Users", params[:hide_device_passwords_for_users].to_i, session[:user_id])
# terms and conditions
cl = Confline.find_or_create_by_name_and_owner_id("Registration_Agreement", session[:user_id])
if params[:use_terms_and_conditions]
cl.update_attributes({:value2 => params[:terms_and_conditions], :value => "1"})
else
cl.update_attribute(:value, "0")
end
Confline.set_value("Disallow_Email_Editing", params[:disallow_email_editing], current_user.id)
# EMAILS
#
renew_session(current_user)
flash[:status] = _('Settings_saved')
redirect_to :action => 'reseller_settings' and return false
end
# -------------- Reseller logo options -----------------------------------------
def reseller_settings_logo
@page_title = _('Logo_settings')
@logo = Confline.get_value("Logo_Picture", session[:user_id])
end
def reseller_settings_logo_save
if params[:logo]
@file = params[:logo]
if @file.size > 0
if @file.size < 102400
@filename = sanitize_filename(@file.original_filename)
@ext = @filename.split(".").last.downcase
if @ext == 'jpg' or @ext == 'jpeg' or @ext == 'png' or @ext == 'gif'
@filename = "logo_"+session[:user_id].to_s+"."+@ext
File.open(Actual_Dir + '/public/images/logo/' + @filename, "wb") do |f|
f.write(params[:logo].read)
end
update_confline("Logo_Picture", 'logo/' + @filename.to_s, session[:user_id])
flash[:status] = _('Logo_uploaded')
user = User.find(session[:user_id])
renew_session(user)
else
flash[:notice] = _('Not_a_picture')
end
else
flash[:notice] = _('Logo_to_big_max_size_100kb')
end
else
flash[:notice] = _('Zero_size_file')
end
else
flash[:notice] = _('Select_a_file')
end
redirect_to :action => 'reseller_settings_logo' and return false
end
# -------------- RESELLER payment settings--------------------------------------
def reseller_settings_payments
=begin
2 eilutes resellerio setingu resetui
#@user = User.find(session[:user_id])
#@user.create_reseller_conflines
=end
@page_title = _('Payment_Settings')
@page_icon = 'cog.png'
@currencies = Currency.get_active
@ppcurr = Confline.get_value("Paypal_Default_Currency", session[:user_id])
@wppcurr = Confline.get_value("WebMoney_Default_Currency", session[:user_id])
@selected_mode = Confline.get_value('WebMoney_SIM_MODE', session[:user_id]).to_i
end
def reseller_settings_payments_change
if (!Email.address_validation(params[:reseller_paypal_email]) and (params[:reseller_paypal_enabled].to_i == 1 or params[:reseller_paypal_test].to_i ==1))
flash[:notice] = _("Email_address_not_corect")
redirect_to :action => 'reseller_settings_payments' and return false
end
Confline.set_value("Paypal_Enabled", params[:reseller_paypal_enabled].to_i, session[:user_id])
Confline.set_value("PayPal_Email", params[:reseller_paypal_email], session[:user_id])
Confline.set_value("PayPal_Default_Currency", params[:reseller_paypal_default_currency], session[:user_id])
Confline.set_value("PayPal_Default_Amount", params[:reseller_paypal_default_amount], session[:user_id])
Confline.set_value("PayPal_User_Pays_Transfer_Fee", params[:paypal_user_pays_transfer_fee], session[:user_id])
Confline.set_value("PayPal_Min_Amount", params[:reseller_paypal_min_amount], session[:user_id])
Confline.set_value("PayPal_Test", params[:reseller_paypal_test], session[:user_id])
Confline.set_value("PayPal_Email_Notification", params[:reseller_paypal_email_notification], session[:user_id])
Confline.set_value("PayPal_Payment_Confirmation", params[:reseller_paypal_payment_confirmation], session[:user_id])
Confline.set_value('PayPal_Custom_redirect', params[:paypal_custom_redirect], session[:user_id])
Confline.set_value('Paypal_return_url', params[:paypal_return_url], session[:user_id])
Confline.set_value('Paypal_cancel_url', params[:paypal_cancel_url], session[:user_id])
#WebMoney
if params[:reseller_webmoney_enabled]
Confline.set_value("WebMoney_Enabled ", '1', session[:user_id])
else
Confline.set_value("WebMoney_Enabled ", '0', session[:user_id])
end
if params[:reseller_webmoney_test]
Confline.set_value("WebMoney_Test", '1', session[:user_id])
else
Confline.set_value("WebMoney_Test", '0', session[:user_id])
end
Confline.set_value("WebMoney_Gateway ", params[:webmoney_gateway].to_i, session[:user_id])
Confline.set_value("WebMoney_Default_Currency", params[:reseller_webmoney_default_currency], session[:user_id])
Confline.set_value("WebMoney_Min_Amount", params[:reseller_webmoney_min_amount], session[:user_id])
Confline.set_value("WebMoney_Default_Amount", params[:reseller_webmoney_default_amount], session[:user_id])
Confline.set_value("WebMoney_Purse", params[:reseller_webmoney_purse], session[:user_id])
Confline.set_value("WebMoney_SIM_MODE", params[:reseller_webmoney_sim_mode], session[:user_id])
#Vouchers
Confline.set_value("Vouchers_Enabled", params[:vouchers_enabled].to_i, session[:user_id])
Confline.set_value("Voucher_Card_Disable", params[:voucher_card_disable].to_i, session[:user_id])
user = User.find(session[:user_id])
renew_session(user)
flash[:status] = _('Settings_saved')
redirect_to :action => 'reseller_settings_payments' and return false
end
#============= INTEGRITY CHECK ===============
def integrity_check
@page_title = _('Integrity_check')
@page_icon = 'lightning.png'
@help_link = "http://wiki.kolmisoft.com/index.php/Integrity_Check"
@default_user_warning = false
@destinations_without_dg = Destination.find(:all, :conditions => "destinationgroup_id = 0", :order => "direction_code ASC")
@dialplans = Dialplan.find(:all, :conditions => "dptype = 'ivr' and data8 = 1")
@actions = Action.find(:all, :joins => " JOIN users ON (actions.user_id = users.id) ", :conditions => "action = 'error' AND processed = '0' ")
@devices = Device.find(:all, :conditions => "LENGTH(secret) < 8 AND LENGTH(username) > 0 AND device_type != 'H323' AND username NOT LIKE 'mor_server_%'")
@users = User.find(:all, :conditions => ["password = SHA1('') or password = SHA1(username)"])
@default_users_erors = Confline.get_default_user_pospaid_errors
if @default_users_erors and @default_users_erors.size.to_i > 0
@default_user_warning = true
end
@users_postpaid_and_loss_calls = User.find(:all, :conditions => ["postpaid = 1 and allow_loss_calls = 1"])
@insecure_devices = Device.find(:all, :conditions => "host='dynamic' and insecure like '%invite%' and insecure != 'invite'")
if @actions.size.to_i > 0
@action = Action.find(:first, :joins => " JOIN users ON (actions.user_id = users.id) ", :conditions => "action = 'error' AND processed = '0' ", :order => "date ASC")
date = @action.date.to_time - 1.day
session[:year_from] = date.year
session[:month_from] = date.month
session[:day_from] = date.day
change_date
end
end
# called from anywhere to check if everything is still ok/not_ok
def FunctionsController::integrity_recheck
@destinations_without_dg = Destination.find(:all, :conditions => "destinationgroup_id = 0", :order => "direction_code ASC")
if @destinations_without_dg.size > 0
return 1
else
Confline.set_value("Integrity_Check", 0)
return 0
end
end
def FunctionsController::integrity_recheck_user(user_id = 0)
@default_user_warning = false
@default_user_warning = true if Confline.get_value('Default_User_allow_loss_calls', user_id).to_i == 1 and Confline.get_value('Default_User_postpaid', user_id).to_i == 1
@users_postpaid_and_loss_calls = User.find(:all, :conditions => ["postpaid = 1 and allow_loss_calls = 1"])
if @users_postpaid_and_loss_calls.size > 0 or @default_user_warning
return 1
else
Confline.set_value("Integrity_Check", 0)
return 0
end
end
######### PERMISSIONS ##########################################################
def permissions
@page_title = _('Permissions')
@page_icon = 'cog.png'
@roles = Role.find(:all, :order => "name")
#@rr = RoleRight.find(:all, :include =>[:role, :right])
@rights = Right.find(:all, :include => [:role_rights], :order => "saved DESC ,controller ASC , action ASC")
#@permissions = RoleRight.get_auth_list
@roles_count = @roles.size
end
def permissions_save
@roles = Role.find(:all, :order => "name")
@rights = Right.find(:all, :include => [:role_rights], :order => "saved DESC ,controller ASC , action ASC")
RoleRight.transaction do
@rights.each { |right|
MorLog.my_debug("OH SNAP #{right.role_rights.size}") if right.role_rights.size != 5
right.role_rights.each { |rr|
MorLog.my_debug(rr.to_yaml) if right.id == 75
MorLog.my_debug(params["Setting_#{rr.role_id}_#{right.id}".to_sym].to_i) if right.id == 75
if rr.permission != params["Setting_#{rr.role_id}_#{right.id}".to_sym].to_i
rr.permission = params["Setting_#{rr.role_id}_#{right.id}".to_sym].to_i
rr.save
MorLog.my_debug("SAVE Setting_#{rr.role_id}_#{right.id} - #{params["Setting_#{rr.role_id}_#{right.id}".to_sym].to_i}")
end
}
if right.saved == 1
right.saved = 0
right.save
end
}
end
flash[:status] = _("Settings_saved")
redirect_to :action => 'permissions'
end
def role_new
@page_title = _('New_Role')
@page_icon = "add.png"
@role = Role.new()
end
def role_create
@role = Role.new(params[:role])
if Role.find(:first, :conditions => "name = '#{@role.name}'")
flash[:notice] = _('Cannot_Create_Role_already_exists')
redirect_to :action => 'permissions' and return false
end
if @role.save
rights=Right.find(:all)
for right in rights do
role_right = RoleRight.new()
role_right.role_id = @role.id
role_right.right_id = right.id
if @role.name.downcase == 'admin'
role_right.permission = 1
else
role_right.permission = 0
end
role_right.save
end
flash[:status] = _('Role_Created')
redirect_to :action => 'role_new'
else
render :action => 'role_new'
end
end
def role_destroy
@role = Role.find(params[:id])
if User.find(:first, :conditions => "usertype = '#{@role.name}'")
flash[:notice] = _("Cannot_delete_role_users_exist")
redirect_to :action => 'permissions' and return false
end
@role.destroy
flash[:status] = _("Role_Destroyed")
redirect_to :action => 'permissions' and return false
end
def right_new
@page_title = _('New_Right')
@page_icon = "add.png"
@right = Right.new()
end
def right_create
temp = params[:right]
RoleRight.new_right(temp["controller"], temp["action"], temp["description"])
flash[:status] = _('Right_Created')
redirect_to :action => 'right_new'
end
def right_destroy
@right = Right.find(params[:id])
@right.destroy
flash[:status] = _("Right_Destroyed")
redirect_to :action => 'permissions' and return false
end
def action_finder
@controllers = Dir.new("#{RAILS_ROOT}/app/controllers").entries
end
def action_syncronise
@roles = Role.find(:all, :order => "name")
@rights = Right.find(:all, :order => "controller, action")
@permissions = RoleRight.get_auth_list
@roles_count =Role.count
@controllers = Dir.new("#{RAILS_ROOT}/app/controllers").entries
@controllers.each do |controller|
if controller =~ /_controller/
cont = controller.camelize.gsub(".rb", "")
cont_short = cont.gsub("Controller", "").downcase
(eval("#{cont}.new.methods") -
ApplicationController.methods -
Object.methods -
ApplicationController.new.methods).sort.each { |met|
RoleRight.new_right(cont_short, met.to_s, cont_short.to_s.capitalize + "_"+met.to_s)
}
end
end
redirect_to :action => 'permissions'
end
def dump_permissions
h = YAML.load_file(Actual_Dir+"/config/database.yml")
`rm #{Actual_Dir.to_s}/doc/permissions.sql`
`mysqldump --compact --add-drop-table -u #{h["development"]["username"]} -p#{h["development"]["password"]} mor roles rights role_rights >> #{Actual_Dir.to_s}/doc/permissions.sql`
MorLog.my_debug("rm " + Actual_Dir.to_s + "/doc/permissions.sql")
MorLog.my_debug("mysqldump --compact --add-drop-table -u #{h["development"]["username"]} -p#{h["development"]["password"]} mor roles rights role_rights >> " + Actual_Dir.to_s + "/doc/permissions.sql")
redirect_to :action => 'permissions'
end
######### /PERMISSIONS #########################################################
######### Get Not translated words #############################################
def get_not_translated
language = "en"
language = params[:language] if params[:language]
lang = []
@files = {}
@new_lang = []
File.read("#{RAILS_ROOT}/lang/#{language}.rb").scan(/l.store\s?[\'\"][^\'\"]+[\'\"]/) do |st|
st.scan(/[\'\"][^\'\"]+[\'\"]/) do |st2|
lang << st2.gsub(/[\'\"]/, "")
end
end
@files_list = Dir.glob("#{RAILS_ROOT}/app/controllers/*.rb").collect
@files_list += Dir.glob("#{RAILS_ROOT}/app/views/**/*.rhtml").collect
@files_list += Dir.glob("#{RAILS_ROOT}/app/models/*.rb").collect
@files_list += Dir.glob("#{RAILS_ROOT}/app/helpers/*.rb").collect
@files_list += Dir.glob("#{RAILS_ROOT}/lib/**/*.rb").collect
for file in @files_list
File.read(file).scan(/[^\w\d]\_\([\'\"][^\'\"]+[\'\"]\)/) do |st|
st = st.gsub(/.?\_\(/, "").gsub(/[\s\'\"\)\(]/, "")
@new_lang << st
@files[st] = file
end
end
@new_lang -= lang
@new_lang = @new_lang.uniq.flatten
end
######### /Get Not translated words #############################################
######### IMPORT USER DATA FROM CSV ############################################
def import_user_data
@page_title = _('Import_user_data')
@page_icon = 'excel.png'
@users = User.find(:all, :conditions => "temporary_id >= 0")
@devices = Device.find(:all, :conditions => "temporary_id >= 0 AND name not like 'mor_server_%'")
end
def import_user_data_users
@step = 1
@step = params[:step].to_i if params[:step]
@step_name = _('File_upload')
@step_name = _('Column_assignment') if @step == 2
@step_name = _('Column_confirmation') if @step == 3
@step_name = _('Import_Users') if @step == 3
@sep, @dec = nice_action_session_csv
store_location
@page_title = _('Import_user_data_users') + " - " + _('Step') + ": " + @step.to_s + " - " + @step_name
@page_icon = 'excel.png'
session[:imp_user_include] and session[:imp_user_include]==1 ? @include = 1 : @include = 0
if @step == 2
if params[:include].to_i == 1
session[:imp_user_include] = 1
else
session[:imp_user_include] = 0
end
if params[:file] or session[:file]
if params[:file]
if params[:file] == ""
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_users", :step => "1" and return false
else
@file = params[:file]
if get_file_ext(@file.original_filename, "csv") == false
redirect_to :action => "import_user_data_users", :step => "1" and return false
end
session[:file] = @file.read
end
else
@file = session[:file]
end
session[:file_size] = @file.size
if session[:file_size].to_i == 0
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_users", :step => "1" and return false
end
@file = session[:file]
check_csv_file_seperators(@file, 6)
arr = @file.split("\n")
@fl = arr[0].split(@sep)
flash[:status] = _('File_uploaded')
end
end
if @step == 3
if session[:file]
@file = session[:file]
session[:imp_user_temp_id] = params[:temp_id].to_i if params[:temp_id]
session[:imp_user_username] = params[:username].to_i if params[:username]
session[:imp_user_password] = params[:password].to_i if params[:password]
session[:imp_user_first_name] = params[:first_name].to_i if params[:first_name]
session[:imp_user_last_name] = params[:last_name].to_i if params[:last_name]
session[:imp_user_payment_type] = params[:payment_type].to_i if params[:payment_type]
session[:imp_user_personal_id] = params[:personal_id].to_i if params[:personal_id]
session[:imp_user_vat_reg_number] = params[:vat_reg_number].to_i if params[:vat_reg_number]
session[:imp_user_balance] = params[:balance].to_f if params[:balance]
session[:imp_user_credit] = params[:credit].to_f if params[:credit]
session[:imp_user_credit_unlimited] = params[:credit_unlimited].to_f if params[:credit_unlimited]
session[:imp_user_address] = params[:address].to_i if params[:address]
session[:imp_user_postcode] = params[:postcode].to_i if params[:postcode]
session[:imp_user_city] = params[:city].to_i if params[:city]
session[:imp_user_country] = params[:country].to_i if params[:country]
session[:imp_user_state] = params[:state].to_i if params[:state]
session[:imp_user_phone] = params[:phone].to_i if params[:phone]
session[:imp_user_mob_phone] = params[:mob_phone].to_i if params[:mob_phone]
session[:imp_user_fax] = params[:fax].to_i if params[:fax]
session[:imp_user_email] = params[:email].to_i if params[:email]
session[:imp_user_lcr] = params[:lcr].to_i if params[:lcr]
session[:imp_user_tariff] = params[:tariff].to_i if params[:tariff]
flash[:status] = _('Columns_assigned')
end
end
if @step == 4
inc = 1 - @include.to_i
@error_array = []
@msg_array = []
@warn_array=[]
@warn_msg=[]
if session[:file]
array = []
@file = session[:file]
array = @file.split("\n")
for arr in array
if inc == 0
row = []
row = arr.split(@sep)
r_arr = row
err = ""
warn = ""
username = r_arr[session[:imp_user_username]].to_s.gsub("\"", "")
if clean_value_all(r_arr[session[:imp_user_temp_id]]).to_i == ""
err += _('Temp_User_ID_Cant_Be_Empty')+"
"
end
if username.length == 0
err += _('Please_enter_username')+"
"
end
if User.find(:first, :conditions => ["username = ?", username])
err += _('Such_username_is_allready_taken')+"
"
end
if clean_value_all(r_arr[session[:imp_user_password]].to_s).length < 5
err += _('Password_is_too_short') +"
"
end
if clean_value_all(r_arr[session[:imp_user_first_name]].to_s).length == 0
err +=_('Please_enter_first_name') +"
"
end
if clean_value_all(r_arr[session[:imp_user_last_name]].to_s).length == 0
err +=_('Please_enter_last_name') +"
"
end
if clean_value_all(r_arr[session[:imp_user_email]].to_s).length == 0
err +=_('Please_enter_email') +"
"
end
unless Email.address_validation(clean_value_all(r_arr[session[:imp_user_email]].to_s))
err +=_('Please_enter_valid_email') +"
"
end
if err == ""
address = Address.new
address.direction_id = Direction.get_direction_by_country(clean_value_all(r_arr[session[:imp_user_country]]))
address.state = clean_value_all r_arr[session[:imp_user_state]].to_s if session[:imp_user_state] >= 0
address.county =clean_value_all r_arr[session[:imp_user_country]].to_s
address.city =clean_value_all r_arr[session[:imp_user_city]].to_s if session[:imp_user_city] >=0
address.postcode =clean_value_all r_arr[session[:imp_user_postcode]].to_s if session[:imp_user_postcode] >=0
address.address =clean_value_all r_arr[session[:imp_user_address]].to_s if session[:imp_user_address] >=0
address.phone =clean_value_all r_arr[session[:imp_user_phone]].to_s if session[:imp_user_phone] >=0
address.mob_phone =clean_value_all r_arr[session[:imp_user_mob_phone]] if session[:imp_user_mob_phone] >=0
address.fax =clean_value_all r_arr[session[:imp_user_fax]].to_s if session[:imp_user_fax] >=0
address.email =clean_value_all r_arr[session[:imp_user_email]]
address.save
user = User.new
user.temporary_id = clean_value_all(r_arr[session[:imp_user_temp_id]]).to_i
user.username =clean_value_all r_arr[session[:imp_user_username]].to_s
user.password = Digest::SHA1.hexdigest(clean_value_all(r_arr[session[:imp_user_password]].to_s))
my_debug("Password:")
my_debug(clean_value_all(r_arr[session[:imp_user_password]].to_s))
user.usertype = "user"
if session[:imp_user_payment_type]
user.postpaid = clean_value_all(r_arr[session[:imp_user_payment_type]]).to_i
else
user.postpaid = 0
end
user.balance = clean_value_all(r_arr[session[:imp_user_balance]].to_s) if session[:imp_user_balance] >= 0
user.credit = clean_value_all(r_arr[session[:imp_user_credit]].to_s) if session[:imp_user_credit] >= 0
user.credit = clean_value_all(r_arr[session[:imp_user_credit_unlimited]].to_s) if session[:imp_user_credit_unlimited] >= 0
user.first_name =clean_value_all r_arr[session[:imp_user_first_name]].to_s
user.last_name =clean_value_all r_arr[session[:imp_user_last_name]].to_s
if session[:imp_user_lcr] >= 0
lcr_id = clean_value_all(r_arr[session[:imp_user_lcr]].to_s).to_i
if current_user.lcrs.find(:first, :conditions => "id = #{lcr_id}")
user.lcr_id = lcr_id
else
warn += _("LCR_Was_Not_Found_Default_Assigned")+"
"
user.lcr_id = Confline.get_value("LCR_for_registered_users").to_i
end
else
user.lcr_id = Confline.get_value("LCR_for_registered_users").to_i
end
if session[:imp_user_tariff] >= 0
tariff_id = clean_value_all(r_arr[session[:imp_user_tariff]].to_s).to_i
if Tariff.find(:first, :conditions => "id = #{tariff_id}")
user.tariff_id = tariff_id
else
warn += _("Tariff_Was_Not_Found_Default_Assigned")+"
"
user.tariff_id = Confline.get_value("Tariff_for_registered_users").to_i
end
else
user.tariff_id = Confline.get_value("Tariff_for_registered_users").to_i
end
user.clientid =clean_value_all r_arr[session[:imp_user_personal_id]].to_s if session[:imp_user_personal_id] > 0
user.agreement_date = Time.now
user.agreement_number = next_agreement_number
user.taxation_country = Direction.get_direction_by_country(clean_value_all(r_arr[session[:imp_user_country]]))
user.vat_number =clean_value_all r_arr[session[:imp_user_vat_reg_number]].to_s
user.address_id = address.id
user.owner_id = 0
unless user.save
user.errors.each { |key, value|
MorLog.my_debug("#{key} - #{value}")
}
end
user.assign_default_tax
if warn != ""
@warn_array << arr
@warn_msg << warn
my_debug(@warn_msg)
my_debug(@warn_array)
end
else
@error_array << arr
@msg_array << err
end
else
inc = 0
end
end
end
end
end
def import_user_data_devices
@step = 1
@step = params[:step].to_i if params[:step]
@step_name = _('File_upload')
@step_name = _('Column_assignment') if @step == 2
@step_name = _('Column_confirmation') if @step == 3
@step_name = _('Import_Devices') if @step == 4
@sep, @dec = nice_action_session_csv
store_location
@page_title = _('Import_user_data_devices') + " - " + _('Step') + ": " + @step.to_s + " - " + @step_name
@page_icon = 'excel.png'
session[:imp_device_include] and session[:imp_device_include]==1 ? @include = 1 : @include = 0
if @step == 2
if params[:include].to_i == 1
session[:imp_device_include] = 1
else
session[:imp_device_include] = 0
end
if params[:file] or session[:file]
if params[:file]
if params[:file] == ""
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_devices", :step => "1" and return false
else
@file = params[:file]
if get_file_ext(@file.original_filename, "csv") == false
redirect_to :action => "import_user_data_devices", :step => "1" and return false
end
session[:file] = @file.read
end
else
@file = session[:file]
end
session[:file_size] = @file.size
if session[:file_size].to_i == 0
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_devices", :step => "1" and return false
end
@file = session[:file]
check_csv_file_seperators(@file, 8)
arr = @file.split("\n")
@fl = arr[0].split(@sep)
flash[:status] = _('File_uploaded')
end
end
if @step == 3
if session[:file]
@file = session[:file]
session[:imp_device_temp_device_id] = params[:temp_device_id].to_i if params[:temp_device_id]
session[:imp_device_temp_user_id] = params[:temp_user_id].to_i if params[:temp_user_id]
session[:imp_device_username] = params[:username].to_i if params[:username]
session[:imp_device_password] = params[:password].to_i if params[:password]
session[:imp_device_host] = params[:host].to_i if params[:host]
session[:imp_device_cli_name] = params[:cli_name].to_i if params[:cli_name]
session[:imp_device_cli_number] = params[:cli_number].to_i if params[:cli_number]
session[:imp_device_type] = params[:device_type].to_i if params[:device_type]
session[:imp_device_extension] = params[:extension].to_i if params[:extension]
session[:imp_device_pin] = params[:pin].to_i if params[:pin]
session[:imp_device_location] = params[:location].to_i if params[:location]
flash[:status] = _('Columns_assigned')
end
end
if @step == 4
inc = 1 - @include.to_i
@error_array = []
@msg_array = []
if session[:file]
array = []
@file = session[:file]
array = @file.split("\n")
for arr in array
if inc == 0
row = []
row = arr.split(@sep)
r_arr = row
err = ""
device_type = clean_value_all(r_arr[session[:imp_device_type]].to_s)
device_temp_id = clean_value_all(r_arr[session[:imp_device_temp_device_id]].to_s)
user_temp_id = clean_value_all(r_arr[session[:imp_device_temp_user_id]].to_s)
cli_name = clean_value_all(r_arr[session[:imp_device_cli_name]].to_s)
cli_number = clean_value_all(r_arr[session[:imp_device_cli_number]].to_s)
device_extension = clean_value_all(r_arr[session[:imp_device_extension]].to_s)
location = clean_value_all(r_arr[session[:imp_device_location]].to_s)
pin = clean_value_all(r_arr[session[:imp_device_pin]].to_s)
if device_temp_id.length == 0
err += _("Temp_Device_ID_Cant_Be_Empty") + "
"
else
device = Device.find(:first, :conditions => "temporary_id = #{device_temp_id.to_i}")
if device
err += _("Temp_Device_ID_Already_Taken") + "
"
end
end
if user_temp_id.length == 0
err += _("Temp_User_ID_Cant_Be_Empty") + "
"
else
user = User.find(:first, :conditions => "temporary_id = #{user_temp_id.to_i}")
if !user
err += _("User_Was_Not_Found") + "
"
end
end
if device_type.upcase != "SIP" and device_type.upcase != "IAX2"
err += _("Invalid_Device_type") + "
"
else
if device_type.upcase != "SIP"
port = 5060
else
port = 4569
end
end
if device_extension.length == 0
err += _("Device_Extension_Cant_Be_Empty") + "
"
else
if nil != Device.find(:first, :conditions => "extension = '#{device_extension}'")
err += _("Device_Extension_Must_Be_Unique") + "
"
end
end
if clean_value_all(r_arr[session[:imp_device_password]].to_s).length == 0
err += _("Password_cant_be_empty") + "
"
end
if clean_value_all(r_arr[session[:imp_device_username]].to_s).length == 0
err += _("Username_Cant_Be_Empty") + "
"
end
if clean_value_all(r_arr[session[:imp_device_host]].to_s).length == 0
err += _("Host_Cant_Be_Empty") + "
"
end
if cli_name.length == 0
err += _("CLI_Name_Cant_Be_Empty") + "
"
end
if cli_number.length == 0
err += _("CLI_Number_Cant_Be_Empty") + "
"
end
if err == ""
my_debug("ADDING")
device = Device.new(params[:device])
if location != ""
loc = Location.find(:first, :conditions => "name = '#{location}'")
if not loc
loc = Location.new
loc.name = location
loc.save
end
else
#if reseller , importin device with no location , find default location
#if no default location, create it and use
if reseller?
loc = Location.find(:all, :conditions => ['name = ? and user_id = ?', 'Default location', current_user.id])
if not loc
current_user.create_reseller_localization
loc = Location.find(:first, :conditions => "name = 'Default location'")
end
else
loc = Location.find(:first, :conditions => "name = 'Global'")
end
end
device.location = loc
device.user_id = user.id
device.temporary_id = device_temp_id
device.context = "mor_local"
device.extension = clean_value_all(r_arr[session[:imp_device_extension]].to_s)
device.name = clean_value_all(r_arr[session[:imp_device_username]].to_s)
device.username = clean_value_all(r_arr[session[:imp_device_username]].to_s)
device.secret = clean_value_all(r_arr[session[:imp_device_password]].to_s)
device.pin = pin if pin != ""
device.device_type = device_type.upcase
device.permit = "0.0.0.0/0.0.0.0"
device.host = clean_value_all(r_arr[session[:imp_device_host]].to_s)
device.port = port
device.istrunk = 0
device.ani = 0
device.callgroup = nil
device.pickupgroup = nil
device.fromuser = nil
device.fromdomain = nil
device.insecure = nil
device.callerid = "\"#{cli_name}\"<#{cli_number}>"
device.save
device.accountcode = device.id
if device.save
a=configure_extensions(device.id, :current_user => current_user)
return false if !a
else
@error_array << arr
msq = ''
device.errors.each { |key, value|
msq += "
* #{_(value)}"
} if device.respond_to?(:errors)
@msg_array << msq
end
else
@error_array << arr
@msg_array << err
end
else
inc = 0
end
end
end
end
end
def import_user_data_dids
@step = 1
@step = params[:step].to_i if params[:step]
@step_name = _('File_upload')
@step_name = _('Column_assignment') if @step == 2
@step_name = _('Column_confirmation') if @step == 3
@step_name = _('Import_DIDs') if @step == 4
@sep, @dec = nice_action_session_csv
store_location
@page_title = _('Import_user_data_DIDs') + " - " + _('Step') + ": " + @step.to_s + " - " + @step_name
@page_icon = 'excel.png'
session[:imp_device_include] and session[:imp_device_include]==1 ? @include = 1 : @include = 0
if @step == 2
@providers = Provider.find(:all, :conditions => ['hidden=?', 0])
if params[:include].to_i == 1
session[:imp_dids_include] = 1
else
session[:imp_dids_include] = 0
end
if params[:file] or session[:file]
if params[:file]
if params[:file] == ""
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_dids", :step => "1" and return false
else
@file = params[:file]
if get_file_ext(@file.original_filename, "csv") == false
redirect_to :action => "import_user_data_dids", :step => "1" and return false
end
session[:file] = @file.read
end
else
@file = session[:file]
end
session[:file_size] = @file.size
if session[:file_size].to_i == 0
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_dids", :step => "1" and return false
end
@file = session[:file]
check_csv_file_seperators(@file, 3)
arr = @file.split("\n")
@fl = arr[0].split(@sep)
flash[:status] = _('File_uploaded')
end
end
if @step == 3
session[:imp_did_provider] = -1
if session[:file]
@file = session[:file]
session[:imp_did_temp_user_id] = params[:temp_user_id].to_i if params[:temp_user_id]
session[:imp_did_device_id] = params[:temp_device_id].to_i if params[:temp_device_id]
session[:imp_did_did] = params[:did].to_i if params[:did]
session[:imp_did_provider] = params[:provider].to_i if params[:provider]
flash[:status] = _('Columns_assigned')
end
end
if @step == 4
inc = 1 - @include.to_i
@error_array = []
@msg_array = []
if session[:file]
array = []
@file = session[:file]
array = @file.split("\n")
for arr in array
if inc == 0
row = []
row = arr.split(@sep)
r_arr = row
err = ""
user_id = clean_value_all(r_arr[session[:imp_did_temp_user_id]].to_s)
device_id = clean_value_all(r_arr[session[:imp_did_device_id]].to_s)
did_tx = clean_value_all(r_arr[session[:imp_did_did]].to_s)
if user_id.length == 0
err += _("Temp_User_ID_Cant_Be_Empty") + "
"
else
user = User.find(:first, :conditions => "temporary_id = #{user_id.to_i}")
if !user
err += _("User_Was_Not_Found") + "
"
end
end
if device_id.length == 0
err += _("Temp_Device_ID_Cant_Be_Empty") + "
"
else
device = Device.find(:first, :conditions => "temporary_id = #{device_id.to_i}")
if !device
err += _("Device_Was_Not_Found") + "
"
end
end
if did_tx.length == 0
err += _("DID_Cant_Be_Empty") + "
"
else
if did_tx.to_s[0, 1] == "0"
err += _("DID_Cant_Start_With_Zero") + "
"
else
if Did.find(:first, :conditions => ["did = ?", did_tx])
err += _("DID_Must_Be_Unique") + "
"
end
end
end
if err == ""
did = Did.new()
did.did = did_tx
did.user_id = user.id
did.device_id = device.id
did.provider_id = session[:imp_did_provider].to_i
did.status = "active"
did.save
device.primary_did_id = did.id
device.save
else
@error_array << arr
@msg_array << err
end
else
inc = 0
end
end
end
if @error_array == []
flash[:status] = _("DIDs_were_successfully_created")
else
flash[:notice] = _("There_were_errors")
end
end
end
def clean_value(value)
cv = value
cv = cv[1..cv.length] if cv[0, 1] == "\""
cv = cv[0..cv.length-2] if cv[cv.length-1, 1] == "\""
cv
end
def import_user_data_clear
database = ActiveRecord::Base.connection();
sql = "UPDATE users SET temporary_id = NULL"
sql2 = "UPDATE devices SET temporary_id = NULL"
database.execute(sql)
database.execute(sql2)
flash[:status] = _('Temporary_information_cleared')
redirect_to :action => 'import_user_data' and return false
end
def clean_value_all(value)
cv = value.to_s
while cv[0, 1] == "\"" or cv[0] == "'" do
cv = cv[1..cv.length]
end
while cv[cv.length-1, 1] == "\"" or cv[cv.length-1, 1] == "'" do
cv = cv[0..cv.length-2]
end
cv
end
#=============== Click2Call from web ===========
def call_to
@number = params[:number]
user_id = session[:user_id]
user = User.find(user_id)
@error = ""
device = user.primary_device
if device
# originate callback
src = device.extension
dst = @number
#var2 = "__MOR_CALLC_ACTION_ID=#{action.id.to_s}"
server = Confline.get_value("Web_Callback_Server").to_i
server = 1 if server == 0
channel = "Local/#{src}@mor_cb_src/n"
originate_call(device.id, src, channel, "mor_cb_dst", dst, device.callerid_number, nil, server)
else
@error = _('No_device')
end
render(:layout => false)
end
def test_text
@text = params[:text]
end
def test_file_upload
@page_title = "Test file upload"
@page_icon = 'lightning.png'
@step = 1
@step = params[:step].to_i if params[:step]
@sep, @dec = nice_action_session_csv
store_location
if @step == 2
if params[:include].to_i == 1
session[:imp_user_include] = 1
else
session[:imp_user_include] = 0
end
if params[:file] or session[:file]
if params[:file]
if params[:file] == ""
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_users", :step => "1" and return false
else
@file = params[:file]
if get_file_ext(@file.original_filename, "csv") == false
redirect_to :action => "import_user_data_users", :step => "1" and return false
end
session[:file] = @file.read
end
else
@file = session[:file]
end
session[:file_size] = @file.size
if session[:file_size].to_i == 0
flash[:notice] = _('Please_select_file')
redirect_to :action => "import_user_data_users", :step => "1" and return false
end
@file = session[:file]
check_csv_file_seperators(@file)
arr = @file.split("\n")
@fl = arr[0].split(@sep)
flash[:status] = _('File_uploaded')
end
end
if @step == 3
`rm -rf /tmp/mor/*`
@step = 1
flash[:status] = _('Files_deleted')
end
end
def check_separator
if session[:file] == nil
flash[:notice] = _('Please_select_file')
redirect_back_or_default('/callc/main') and return false
else
file = session[:file]
sep = params[:custom].to_i > 0 ? params[:sepn].to_s : params[:sepn2].to_s
arr = file.split("\n")
@fl = []
5.times { |num| @fl[num] = arr[num].to_s.split(sep) }
if @fl[1].size.to_i < params[:min_collum_size].to_i
@notice = _('Not_enough_columns_check_csv_separators')
end
render :layout => false
end
end
def callback_settings
@page_title = _('Callback_settings')
@page_icon = 'cog.png'
@servers = Server.find(:all, :order => "server_id ASC")
end
def callback_settings_update
#WEB Callback
Confline.set_value("CB_Active", params[:cb_active].to_i)
# update_confline("CB_Temp_Dir", params[:cb_temp_dir])
# update_confline("CB_Spool_Dir", params[:cb_spool_dir])
Confline.set_value("CB_MaxRetries", params[:cb_maxretries])
Confline.set_value("CB_RetryTime", params[:cb_retrytime])
Confline.set_value("CB_WaitTime", params[:cb_waittime])
Confline.set_value("WEB_Callback_CID", params[:web_callback_cid])
Confline.set_value("Web_Callback_Server", params[:web_callback_server])
Confline.set_value("Web_Callback_Send_Source_As_CID", params[:web_callback_send_source])
if (params[:email_callback_pop3_server] or params[:email_callback_login])
if params[:email_callback_pop3_server] != params[:email_pop3_server]
Confline.set_value("Email_Callback_Pop3_Server", params[:email_callback_pop3_server])
Confline.set_value("Email_Callback_Login", params[:email_callback_login])
Confline.set_value("Email_Callback_Password", params[:email_callback_password])
else
if params[:email_callback_login] != params[:email_login]
Confline.set_value("Email_Callback_Pop3_Server", params[:email_callback_pop3_server])
Confline.set_value("Email_Callback_Login", params[:email_callback_login])
Confline.set_value("Email_Callback_Password", params[:email_callback_password])
else
error=1
flash[:notice] = _('Cannot_duplicate_email_callback_server')
end
end
end
renew_session(current_user)
if error.to_i == 0
flash[:status] = _('Settings_saved')
end
redirect_to :action => 'callback_settings' and return false
end
def generate_hash
@page_title = _('Generate_hash')
if current_user.is_admin?
@api_link = params[:link].to_s
if not @api_link.blank?
@query_values = Hash.new
begin
CGI::parse(URI.parse(@api_link).query).each { |key, value| @query_values[key.to_sym] = value[0] }
flash[:notice] = nil
rescue
flash[:notice] = _("failed_to_parse_uri") + ' ' + @api_link
end
dummy, ret, @hash_param_order = API::check_params_with_all_keys(@query_values, dummy)
@system_hash = ret[:system_hash]
end
else
dont_be_so_smart
redirect_to :controller => 'callc', :action => 'main'
end
end
#================= PRIVATE ==================
private
=begin rdoc
if user wants to enable api key MUST enter at least 6 symbol key. if he disables api
he may set valid api(at least 6 symbols) or not set at all
*params*
allow - true or false depending on what user wants
key - secret api key
*return*
true if invalid or false if valid
=end
def invalid_api_params?(allow_api, key)
if allow_api
key.to_s.length < 6
else
(1...6).include?(key.to_s.length)
end
end
def check_callback_addon
unless callback_active?
dont_be_so_smart
redirect_to :controller => :callc, :action => :main and return false
end
end
def pbx_function_delete_extline(dialplan)
Extline.destroy_all ["exten = ?", dialplan.data2]
end
def pbx_function_configure_extline(dialplan)
pbx_function_delete_extline(dialplan)
Extline.mcreate("mor_local", 1, "Set", "MOR_DP_ID=\"#{dialplan.id}\"", dialplan.data2, 0)
Extline.mcreate("mor_local", 2, "Goto", dialplan.pbxfunction.context.to_s + "|" + dialplan.pbxfunction.extension.to_s + "|" + dialplan.pbxfunction.priority.to_s, dialplan.data2, 0)
end
def sanitize_filename(file_name)
# get only the filename, not the whole path (from IE)
just_filename = File.basename(file_name)
# replace all none alphanumeric, underscore or perioids with underscore
just_filename.gsub(/[^\w\.\_]/, '_')
end
def create_call_file(acc, src, dst)
if Confline.get_value("CB_Active") == "0"
flash[:notice] = _('Callback_is_disabled')
redirect_to :controller => "callc", :action => 'main' and return false
end
cb_max_retries = Confline.get_value("CB_MaxRetries")
cb_retry_time = Confline.get_value("CB_RetryTime")
cb_wait_time = Confline.get_value("CB_WaitTime")
if dst.length > 0
#call directly
cf = "Channel: Local/#{src}@mor_cb_src/n\nMaxRetries: #{cb_max_retries}\nRetryTime: #{cb_retry_time}\nWaitTime: #{cb_wait_time}\nAccount: #{acc}\nContext: mor_cb_dst\nExtension: #{dst}\nPriority: 1\n"
else
#ask destination
cf = "Channel: Local/#{src}@mor_cb_src/n\nMaxRetries: #{cb_max_retries}\nRetryTime: #{cb_retry_time}\nWaitTime: #{cb_wait_time}\nAccount: #{acc}\nContext: mor_cb_dst_ask\nExtension: 123\nPriority: 1\n"
end
file_name = "mor_cf_" + acc.to_s + "-" + src.to_s + "-" + dst.to_s
tmp_file = Confline.get_value("CB_Temp_Dir") + "/" + file_name
spool_file = Confline.get_value("CB_Spool_Dir") + "/" + file_name
#create file
fout = File.open(tmp_file, "w")
fout.puts cf
fout.close
#activate filep
File.rename(tmp_file, spool_file)
#if rename fails on cross-filesystem link - we need to catch this and copy the file
end
def reconfigure_voicemail(action, old_server_ext, new_server_ext, old_local_ext, new_local_ext, device_id)
# --------------------------- VM Put ------------------------------
# extensions_mor.conf
# [mor_voicemail]
# switch => Realtime/mor_voicemail@realtime_ext
# delete old configuration for mor_voicemail context
Extline.destroy_all ["context = ?", "mor_voicemail"]
default_context = "mor_voicemail"
if action == 1
# VM is on separate server
device = Device.find(device_id) if device_id
mor_ext = '#${EXTEN}'
Extline.mcreate(default_context, 1, "Dial", "#{device.device_type}/#{device.name}/#{new_server_ext}" + mor_ext, "_X.", 0)
Extline.mcreate(default_context, 2, "Hangup", "", "_X.", 0)
else
# VM is on local Asterisk server server
Extline.mcreate(default_context, 1, "VoiceMail", "${EXTEN}|${MOR_VM}", "_X.", 0)
Extline.mcreate(default_context, 2, "Hangup", "", "_X.", 0)
end
# --------------------------- VM Retrieve ------------------------------
# delete old configuration
Extline.destroy_all ["exten = ?", old_local_ext]
default_context = "mor_local"
if action == 1
# VM is on separate server
device = Device.find(device_id) if device_id
Extline.mcreate(default_context, 1, "AGI", "mor_acc2user", new_local_ext, 0)
mor_ext = '#${MOR_EXT}'
Extline.mcreate(default_context, 2, "Dial", "#{device.device_type}/#{device.name}/#{new_server_ext}" + mor_ext, new_local_ext, 0)
Extline.mcreate(default_context, 3, "Hangup", "", new_local_ext, 0)
else
# VM is on local Asterisk server server
Extline.mcreate(default_context, 1, "AGI", "mor_acc2user", new_local_ext, 0)
Extline.mcreate(default_context, 2, "VoiceMailMain", "s${MOR_EXT}", new_local_ext, 0)
Extline.mcreate(default_context, 3, "Hangup", "", new_local_ext, 0)
end
end
=begin rdoc
Updates tax for all users. If cardgroups has no tax - new tax is created.
*Params*
tax - hash containing tax values, names and enabled/disabled flag.
owner - users owner_id
=end
=begin rdoc
Updates tax for all cardgroups. If cardgroups has no tax - new tax is created.
*Params*
tax - hash containing tax values, names and enabled/disabled flag.
=end
def find_location_rule
@rule = Locationrule.find_by_id(params[:id])
unless @rule
flash[:notice]=_('Location_rule_was_not_found')
redirect_to :action => :localization and return false
end
check_location_rule_owner
end
def find_dialplan
@dialplan = Dialplan.find_by_id(params[:id])
unless @dialplan
flash[:notice]=_('Dialplan_was_not_found')
redirect_to :action => :pbx_functions and return false
end
unless @dialplan.user_id.to_i == current_user.id.to_i
dont_be_so_smart
redirect_to :controller => "callc", :action => "main" and return false
end
end
def find_location
@location = Location.find_by_id(params[:id])
unless @location
flash[:notice]=_('Location_was_not_found')
redirect_to :action => :localization and return false
end
check_location_owner
end
def check_location_owner
unless @location.user_id == correct_owner_id
dont_be_so_smart
redirect_to :controller => "callc", :action => 'main' and return false
end
end
def check_location_rule_owner
unless @rule.location and @rule.location.user_id == correct_owner_id
dont_be_so_smart
redirect_to :controller => "callc", :action => 'main' and return false
end
end
def call_tracing_user_find_user
return false unless params[:reseller_user].to_i > 0 or params[:user]
if admin?
if params[:reseller_user] and params[:reseller_user].to_i > 0
User.find(:first, :include => [:tariff, :devices, :lcr], :conditions => ["users.id = ? ", params[:reseller_user].to_i])
else
User.find(:first, :include => [:tariff, :devices, :lcr], :conditions => ["users.id = ?", params[:user]])
end
else
if current_user.id == params[:user].to_i
User.find(:first, :include => [:tariff, :devices, :lcr], :conditions => ["users.id = ?", params[:user]])
else
User.find(:first, :include => [:tariff, :devices, :lcr], :conditions => ["users.id = ? and users.owner_id = ?", params[:user], current_user.id])
end
end
end
def call_tracing_device_find_user
return false if params[:user].blank?
if admin?
User.find(:first, :include => [:tariff, :devices, :lcr], :conditions => ["users.id = ?", params[:user]])
else
if current_user.id == params[:user].to_i
User.find(:first, :include => [:tariff, :devices, :lcr], :conditions => ["users.id = ?", params[:user]])
else
User.find(:first, :include => [:tariff, :devices, :lcr], :conditions => ["users.id = ? and users.owner_id = ?", params[:user], current_user.id])
end
end
end
def set_valid_page_limit(field, limit, user)
#required parameters:
#field - expected values "Prepaid_Invoice_page_limit", "Invoice_page_limit".
#limit - page limit. gots to be integer at least as smal as default page limit. if to small or smth else was passed set to default page limit
#user - user id, gots to be integer. 0 for admin, 1 or more for others. theres no way to pretend that user id might be default in case it isn't valid
default_page_limit = 1
limit = limit.to_i < default_page_limit ? default_page_limit : limit.to_i
Confline.set_value(field, limit, user)
end
end