X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fsvc_pbx.pm;h=0eb544318cae495ff1844e0dfc31c4faa9e7aaec;hp=adc45a78fb00d5f087ee3f47d8c8f89a7ea36277;hb=da86d5a8af2f915a340a74f6c97772451a1e23ef;hpb=d65218690bc95244ea98df2923f552325f8253a5 diff --git a/FS/FS/svc_pbx.pm b/FS/FS/svc_pbx.pm index adc45a78f..0eb544318 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