summaryrefslogtreecommitdiff
path: root/FS/FS/svc_pbx.pm
diff options
context:
space:
mode:
authormark <mark>2010-10-28 07:47:13 +0000
committermark <mark>2010-10-28 07:47:13 +0000
commit696b790c88984203912b46c9e4b103c2925833c1 (patch)
treec4758161e2185f6ee431431cd3fd8247347f7635 /FS/FS/svc_pbx.pm
parent794e709ef65adb15d75a02ca9fd53d2a2caa5f8b (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.pm23
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