opensips provisioning, RT10993
[freeside.git] / FS / FS / part_export / phone_sqlopensips.pm
1 package FS::part_export::phone_sqlopensips;
2
3 use vars qw(@ISA @EXPORT_OK %info %options);
4 use Exporter;
5 use Tie::IxHash;
6 use FS::Record qw( dbh qsearch qsearchs );
7 use FS::part_export;
8 use FS::svc_phone;
9 use FS::export_svc;
10
11 @ISA = qw(FS::part_export);
12
13 tie %options, 'Tie::IxHash',
14   'datasrc'  => { label=>'DBI data source ' },
15   'username' => { label=>'Database username' },
16   'password' => { label=>'Database password' },
17 ;
18
19 %info = (
20   'svc'      => 'svc_phone',
21   'desc'     => 'Export DIDs to OpenSIPs dr_rules table',
22   'options'  => \%options,
23   'notes'    => 'Export DIDs to OpenSIPs dr_rules table',
24 );
25
26 sub rebless { shift; }
27
28 sub _export_insert {
29   my($self, $svc_x) = (shift, shift);
30   my $dbh = $self->opensips_connect;
31   my $sth = $dbh->prepare("insert into dr_rules ".
32             "( groupid, prefix, timerec, routeid, gwlist, description ) ".
33             " values ( ?, ?, ?, ?, ?, ? )") or die $dbh->errstr;
34   $sth->execute('0',$svc_x->phonenum,'',$svc_x->route,'',
35                 $svc_x->phone_name) or die $sth->errstr;
36   $dbh->disconnect;
37   '';
38 }
39
40 sub opensips_connect {
41     my $self = shift;
42     DBI->connect($self->option('datasrc'),$self->option('username'),
43                         $self->option('password')) or die $DBI::errstr;
44 }
45
46 sub _export_replace {
47   my( $self, $new, $old ) = (shift, shift, shift);
48     my @update = ();
49     my @paramvalues = ();
50
51     if($old->route ne $new->route){
52         push @update, 'routeid = ?';
53         push @paramvalues, $new->route;
54     }
55
56     if($old->phone_name ne $new->phone_name) {
57         push @update, 'description = ?';
58         push @paramvalues, $new->phone_name;
59     }
60
61     if(scalar(@update)) {
62       my $update_str = join(' and ',@update);
63       my $dbh = $self->opensips_connect;
64       my $sth = $dbh->prepare("update dr_rules set $update_str " . 
65             " where prefix = ? ") or die $dbh->errstr;
66       push @paramvalues, $old->phonenum;
67       $sth->execute(@paramvalues) or die $sth->errstr;
68       $dbh->disconnect;
69     }
70   '';
71 }
72
73 sub _export_suspend {
74   my( $self, $svc_phone ) = (shift, shift);
75   '';
76 }
77
78 sub _export_unsuspend {
79   my( $self, $svc_phone ) = (shift, shift);
80   '';
81 }
82
83 sub _export_delete {
84   my( $self, $svc_x ) = (shift, shift);
85   my $dbh = $self->opensips_connect;
86   my $sth = $dbh->prepare("delete from dr_rules where prefix = ?")
87     or die $dbh->errstr;
88   $sth->execute($svc_x->phonenum) or die $sth->errstr;
89   $dbh->disconnect;
90   '';
91 }
92