diff options
author | mark <mark> | 2010-10-28 07:47:13 +0000 |
---|---|---|
committer | mark <mark> | 2010-10-28 07:47:13 +0000 |
commit | 696b790c88984203912b46c9e4b103c2925833c1 (patch) | |
tree | c4758161e2185f6ee431431cd3fd8247347f7635 /FS/FS/svc_pbx.pm | |
parent | 794e709ef65adb15d75a02ca9fd53d2a2caa5f8b (diff) |
global duplicate checking on svc_pbx.id, RT#9967
Diffstat (limited to 'FS/FS/svc_pbx.pm')
-rw-r--r-- | FS/FS/svc_pbx.pm | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/FS/FS/svc_pbx.pm b/FS/FS/svc_pbx.pm index adc45a7..0eb5443 100644 --- a/FS/FS/svc_pbx.pm +++ b/FS/FS/svc_pbx.pm @@ -253,22 +253,27 @@ sub check { $self->SUPER::check; } -#XXX this is a way-too simplistic implementation -# at the very least, title should be unique across exports that need that or -# controlled by a conf setting or something sub _check_duplicate { my $self = shift; my $conf = new FS::Conf; - return '' if $conf->config('global_unique-pbx_title') eq 'disabled'; - + $self->lock_table; - if ( qsearchs( 'svc_pbx', { 'title' => $self->title } ) ) { - return "Name in use"; - } else { - return ''; + foreach my $field ('title', 'id') { + my $global_unique = $conf->config("global_unique-pbx_$field"); + # can be 'disabled', 'enabled', or empty. + # if empty, check per exports; if not empty or disabled, check + # globally. + next if $global_unique eq 'disabled'; + my @dup = $self->find_duplicates( + ($global_unique ? 'global' : 'export') , $field + ); + next if !@dup; + return "duplicate $field '".$self->getfield($field). + "': conflicts with svcnum ".$dup[0]->svcnum; } + return ''; } =item get_cdrs |