[freeside-commits] freeside/FS/FS Mason.pm, 1.78.2.3, 1.78.2.4 Schema.pm, 1.317.2.17, 1.317.2.18 radius_attr.pm, NONE, 1.1.2.2 radius_group.pm, 1.2, 1.2.2.1
Mark Wells
mark at wavetail.420.am
Wed Nov 23 10:40:08 PST 2011
Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv14813/FS/FS
Modified Files:
Tag: FREESIDE_2_3_BRANCH
Mason.pm Schema.pm radius_group.pm
Added Files:
Tag: FREESIDE_2_3_BRANCH
radius_attr.pm
Log Message:
RADIUS group attributes, #15017
--- NEW FILE: radius_attr.pm ---
package FS::radius_attr;
use strict;
use base qw( FS::Record );
use FS::Record qw( qsearch qsearchs );
use vars qw( $noexport_hack );
=head1 NAME
FS::radius_attr - Object methods for radius_attr records
=head1 SYNOPSIS
use FS::radius_attr;
$record = new FS::radius_attr \%hash;
$record = new FS::radius_attr { 'column' => 'value' };
$error = $record->insert;
$error = $new_record->replace($old_record);
$error = $record->delete;
$error = $record->check;
=head1 DESCRIPTION
An FS::radius_attr object represents a RADIUS group attribute.
FS::radius_attr inherits from FS::Record. The following fields are
currently supported:
=over 4
=item attrnum - primary key
=item groupnum - L<FS::radius_group> to assign this attribute
=item attrname - Attribute name, as defined in the RADIUS server's dictionary
=item value - Attribute value
=item attrtype - 'C' (check) or 'R' (reply)
=item op - Operator (see L<http://wiki.freeradius.org/Operators>)
=back
=head1 METHODS
=over 4
=item new HASHREF
Creates a new example. To add the example to the database, see L<"insert">.
Note that this stores the hash reference, not a distinct copy of the hash it
points to. You can ask the object for a copy with the I<hash> method.
=cut
# the new method can be inherited from FS::Record, if a table method is defined
sub table { 'radius_attr'; }
=item insert
Adds this record to the database. If there is an error, returns the error,
otherwise returns false. If any sqlradius-type exports exist and have the
C<export_attrs> option enabled, the new attribute will be exported to them.
=cut
sub insert {
my $self = shift;
my $error = $self->SUPER::insert;
return $error if $error;
return if $noexport_hack;
foreach ( qsearch('part_export', {}) ) {
next if !$_->option('export_attrs',1);
$error = $_->export_attr_insert($self);
return $error if $error;
}
'';
}
=item delete
Delete this record from the database. Like C<insert>, this will delete
the attribute from any attached RADIUS databases.
=cut
sub delete {
my $self = shift;
my $error;
if ( !$noexport_hack ) {
foreach ( qsearch('part_export', {}) ) {
next if !$_->option('export_attrs',1);
$error = $_->export_attr_delete($self);
return $error if $error;
}
}
$self->SUPER::delete;
}
=item replace OLD_RECORD
Replaces the OLD_RECORD with this one in the database. If there is an error,
returns the error, otherwise returns false.
=cut
sub replace {
my ($self, $old) = @_;
$old ||= $self->replace_old;
return 'can\'t change radius_attr.groupnum'
if $self->groupnum != $old->groupnum;
return ''
unless grep { $self->$_ ne $old->$_ } qw(attrname value op attrtype);
# don't attempt export on an invalid record
my $error = $self->check;
return $error if $error;
# exportage
$old->set('groupname', $old->radius_group->groupname);
if ( !$noexport_hack ) {
foreach ( qsearch('part_export', {}) ) {
next if !$_->option('export_attrs',1);
$error = $_->export_attr_replace($self, $old);
return $error if $error;
}
}
$self->SUPER::replace($old);
}
=item check
Checks all fields to make sure this is a valid example. If there is
an error, returns the error, otherwise returns false. Called by the insert
and replace methods.
=cut
sub check {
my $self = shift;
my $error =
$self->ut_numbern('attrnum')
|| $self->ut_foreign_key('groupnum', 'radius_group', 'groupnum')
|| $self->ut_text('attrname')
|| $self->ut_text('value')
|| $self->ut_enum('attrtype', [ 'C', 'R' ])
;
return $error if $error;
my @ops = $self->ops($self->get('attrtype'));
$self->set('op' => $ops[0]) if !$self->get('op');
$error ||= $self->ut_enum('op', \@ops);
return $error if $error;
$self->SUPER::check;
}
=item radius_group
Returns the L<FS::radius_group> object to which this attribute applies.
=cut
sub radius_group {
my $self = shift;
qsearchs('radius_group', { 'groupnum' => $self->groupnum });
}
=back
=head1 CLASS METHODS
=over 4
=item ops ATTRTYPE
Returns a list of all legal values of the "op" field. ATTRTYPE must be C for
check or R for reply.
=cut
my %ops = (
C => [ '==', ':=', '+=', '!=', '>', '>=', '<', '<=', '=~', '!~', '=*', '!*' ],
R => [ '=', ':=', '+=' ],
);
sub ops {
my $self = shift;
my $attrtype = shift;
return @{ $ops{$attrtype} };
}
=back
=head1 BUGS
=head1 SEE ALSO
L<FS::Record>, schema.html from the base documentation.
=cut
1;
Index: Mason.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Mason.pm,v
retrieving revision 1.78.2.3
retrieving revision 1.78.2.4
diff -u -w -d -r1.78.2.3 -r1.78.2.4
--- Mason.pm 25 Oct 2011 22:35:20 -0000 1.78.2.3
+++ Mason.pm 23 Nov 2011 18:40:06 -0000 1.78.2.4
@@ -295,6 +295,7 @@
use FS::nas;
use FS::export_nas;
use FS::legacy_cust_bill;
+ use FS::radius_attr;
# Sammath Naur
if ( $FS::Mason::addl_handler_use ) {
Index: radius_group.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/radius_group.pm,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -w -d -r1.2 -r1.2.2.1
--- radius_group.pm 1 Jul 2011 06:54:02 -0000 1.2
+++ radius_group.pm 23 Nov 2011 18:40:06 -0000 1.2.2.1
@@ -1,8 +1,9 @@
package FS::radius_group;
use strict;
-use base qw( FS::Record );
+use base qw( FS::o2m_Common FS::Record );
use FS::Record qw( qsearch qsearchs );
+use FS::radius_attr;
=head1 NAME
@@ -42,6 +43,10 @@
description
+=item priority
+
+priority - for export
+
=back
@@ -77,7 +82,9 @@
=cut
-# the delete method can be inherited from FS::Record
+# I'd delete any linked attributes here but we don't really support group
+# deletion. We would also have to delete linked records from
+# radius_usergroup and part_svc_column...
=item replace OLD_RECORD
@@ -86,7 +93,28 @@
=cut
-# the replace method can be inherited from FS::Record
+# To keep these things from proliferating, we will follow the same
+# export/noexport switches that radius_attr uses. If you _don't_ use
+# Freeside to maintain your RADIUS group attributes, then it probably
+# shouldn't try to rename groups either.
+
+sub replace {
+ my ($self, $old) = @_;
+ $old ||= $self->replace_old;
+
+ my $error = $self->check;
+ return $error if $error;
+
+ if ( !$FS::radius_attr::noexport_hack ) {
+ foreach ( qsearch('part_export', {}) ) {
+ next if !$_->option('export_attrs',1);
+ $error = $_->export_group_replace($self, $old);
+ return $error if $error;
+ }
+ }
+
+ $self->SUPER::replace($old);
+}
=item check
@@ -106,6 +134,7 @@
$self->ut_numbern('groupnum')
|| $self->ut_text('groupname')
|| $self->ut_textn('description')
+ || $self->ut_numbern('priority')
;
return $error if $error;
@@ -125,6 +154,22 @@
: $self->groupname;
}
+=item radius_attr
+
+Returns all L<FS::radius_attr> objects (check and reply attributes) for
+this group.
+
+=cut
+
+sub radius_attr {
+ my $self = shift;
+ qsearch({
+ table => 'radius_attr',
+ hashref => {'groupnum' => $self->groupnum },
+ order_by => 'ORDER BY attrtype, attrname',
+ })
+}
+
=back
=head1 BUGS
Index: Schema.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Schema.pm,v
retrieving revision 1.317.2.17
retrieving revision 1.317.2.18
diff -u -w -d -r1.317.2.17 -r1.317.2.18
--- Schema.pm 14 Nov 2011 04:28:49 -0000 1.317.2.17
+++ Schema.pm 23 Nov 2011 18:40:06 -0000 1.317.2.18
@@ -2394,12 +2394,27 @@
'groupnum', 'serial', '', '', '', '',
'groupname', 'varchar', '', $char_d, '', '',
'description', 'varchar', 'NULL', $char_d, '', '',
+ 'priority', 'int', '', '', '1', '',
],
'primary_key' => 'groupnum',
'unique' => [ ['groupname'] ],
'index' => [],
},
+ 'radius_attr' => {
+ 'columns' => [
+ 'attrnum', 'serial', '', '', '', '',
+ 'groupnum', 'int', '', '', '', '',
+ 'attrname', 'varchar', '', $char_d, '', '',
+ 'value', 'varchar', '', $char_d, '', '',
+ 'attrtype', 'char', '', 1, '', '',
+ 'op', 'char', '', 2, '', '',
+ ],
+ 'primary_key' => 'attrnum',
+ 'unique' => [ ['groupnum','attrname'] ], #?
+ 'index' => [],
+ },
+
'msgcat' => {
'columns' => [
'msgnum', 'serial', '', '', '', '',
More information about the freeside-commits
mailing list