You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
db-schema/db_scripts/diff/7260.down

95 lines
4.6 KiB

use provisioning;
set autocommit=0;
-- tmp table holding priority 0 CF destinations
drop table if exists tmp_cf_map;
create table tmp_cf_map (
id int(11) unsigned not null auto_increment primary key,
subscriber_id int(11) unsigned not null,
type enum('cfu', 'cft', 'cfb', 'cfna') not null default 'cfu',
destination varchar(255) not null,
key tidx(type)
) engine=innodb;
-- fetch topmost CFUs
insert into tmp_cf_map (subscriber_id, type, destination)
select m.subscriber_id, m.type, d.destination from voip_cf_destinations d,
voip_cf_destination_sets s, voip_cf_mappings m, voip_usr_preferences p,
voip_preferences vp
where vp.attribute = 'cfu' and m.type = 'cfu' and p.attribute_id = vp.id
and p.value = m.id and m.destination_set_id = s.id
and p.subscriber_id = s.subscriber_id and d.destination_set_id = s.id
and d.priority = 0
group by m.subscriber_id;
-- fetch topmost CFBs
insert into tmp_cf_map (subscriber_id, type, destination)
select m.subscriber_id, m.type, d.destination from voip_cf_destinations d,
voip_cf_destination_sets s, voip_cf_mappings m, voip_usr_preferences p,
voip_preferences vp
where vp.attribute = 'cfb' and m.type = 'cfb' and p.attribute_id = vp.id
and p.value = m.id and m.destination_set_id = s.id
and p.subscriber_id = s.subscriber_id and d.destination_set_id = s.id
and d.priority = 0
group by m.subscriber_id;
-- fetch topmost CFTs
insert into tmp_cf_map (subscriber_id, type, destination)
select m.subscriber_id, m.type, d.destination from voip_cf_destinations d,
voip_cf_destination_sets s, voip_cf_mappings m, voip_usr_preferences p,
voip_preferences vp
where vp.attribute = 'cft' and m.type = 'cft' and p.attribute_id = vp.id
and p.value = m.id and m.destination_set_id = s.id
and p.subscriber_id = s.subscriber_id and d.destination_set_id = s.id
and d.priority = 0
group by m.subscriber_id;
-- fetch topmost CFNAs
insert into tmp_cf_map (subscriber_id, type, destination)
select m.subscriber_id, m.type, d.destination from voip_cf_destinations d,
voip_cf_destination_sets s, voip_cf_mappings m, voip_usr_preferences p,
voip_preferences vp
where vp.attribute = 'cfna' and m.type = 'cfna' and p.attribute_id = vp.id
and p.value = m.id and m.destination_set_id = s.id
and p.subscriber_id = s.subscriber_id and d.destination_set_id = s.id
and d.priority = 0
group by m.subscriber_id;
-- now get rid of existing CF preferences
delete up.* from voip_usr_preferences up, voip_preferences p
where p.attribute in ('cfu', 'cfb', 'cfna', 'cft')
and up.attribute_id = p.id;
-- and change back the settings to the old ones
update voip_preferences set type=0, data_type='string', internal=0, read_only=0, max_occur=1,
description='E.164 number or complete SIP URI. "Call forward unconditional" - if set, all incoming calls are forwarded to this destination. E.164 numbers have to be fully qualified and may be prefixed by a plus sign. E.164 numbers specified in SIP URIs have to be prefixed by a plus sign if they are fully qualified but they must always carry the subscriber\'s own domain, like in "sip:+<E.164number>@<subscriber.domain>".'
where attribute='cfu';
update voip_preferences set type=0, data_type='string', internal=0, read_only=0, max_occur=1,
description='E.164 number or complete SIP URI. "Call forward busy" - if set, all incoming calls are forwarded to this destination while the subscriber is on a call. Same syntax as for "cfu".'
where attribute='cfb';
update voip_preferences set type=0, data_type='string', internal=0, read_only=0, max_occur=1,
description='E.164 number or complete SIP URI. "Call forward not available" - if set, all incoming calls are forwarded to this destination if the subscriber is not online and registered. Same syntax as for "cfu".'
where attribute='cfna';
update voip_preferences set type=0, data_type='string', internal=0, read_only=0, max_occur=1,
description='E.164 number or complete SIP URI. "Call forward timeout" - if set, all incoming calls are forwarded to this destination after a timeout that can be set via "ringtimeout" below. Same syntax as for "cfu".'
where attribute='cft';
-- finally copy over the vars from the tmp table and drop it
insert into voip_usr_preferences(subscriber_id, attribute_id, value) select t.subscriber_id, p.id, t.destination from tmp_cf_map t, voip_preferences p where t.type = p.attribute;
drop table tmp_cf_map;
-- clean up after us, just in case
delete from voip_cf_mappings;
delete from voip_cf_time_sets;
delete from voip_cf_destination_sets;
delete from voip_cf_destinations;
delete from voip_cf_periods;
commit;
set autocommit=1;