default to a session cookie instead of setting an explicit timeout, weird timezone...
[freeside.git] / FS / FS / port.pm
index c1bdee9..c26ca85 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use vars qw( @ISA );
 use FS::Record qw( qsearchs );
 use FS::nas;
+use FS::session;
 
 @ISA = qw(FS::Record);
 
@@ -26,6 +27,8 @@ FS::port - Object methods for port records
 
   $error = $record->check;
 
+  $session = $port->session;
+
 =head1 DESCRIPTION
 
 An FS::port object represents an individual port on a NAS.  FS::port inherits
@@ -49,7 +52,7 @@ from FS::Record.  The following fields are currently supported:
 
 =item new HASHREF
 
-Creates a new port.  To add the example to the database, see L<"insert">.
+Creates a new port.  To add the port 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.
@@ -88,7 +91,7 @@ returns the error, otherwise returns false.
 
 =item check
 
-Checks all fields to make sure this is a valid example.  If there is
+Checks all fields to make sure this is a valid port.  If there is
 an error, returns the error, otherwise returns false.  Called by the insert
 and replace methods.
 
@@ -101,7 +104,7 @@ sub check {
   my $self = shift;
   my $error =
     $self->ut_numbern('portnum')
-    || $self->ut_ipn('ipn')
+    || $self->ut_ipn('ip')
     || $self->ut_numbern('nasport')
     || $self->ut_number('nasnum');
   ;
@@ -110,46 +113,40 @@ sub check {
     unless $self->ip || $self->nasport;
   return "Unknown nasnum"
     unless qsearchs('nas', { 'nasnum' => $self->nasnum } );
-  ''; #no error
+  $self->SUPER::check;
 }
 
-=back
-
-=head1 VERSION
-
-$Id: port.pm,v 1.1 2000-10-27 20:18:32 ivan Exp $
-
-=head1 BUGS
-
-The author forgot to customize this manpage.
-
-=head1 SEE ALSO
-
-L<FS::Record>, schema.html from the base documentation.
+=item session
 
-=head1 HISTORY
+Returns the currently open session on this port, or if no session is currently
+open, the most recent session.  See L<FS::session>.
 
-ivan@voicenet.com 97-jul-1
+=cut
 
-added hfields
-ivan@sisd.com 97-nov-13
+sub session {
+  my $self = shift;
+  qsearchs('session', { 'portnum' => $self->portnum }, '*',
+                     'ORDER BY login DESC LIMIT 1' );
+}
 
-$Log: port.pm,v $
-Revision 1.1  2000-10-27 20:18:32  ivan
-oops, also necessary for session monitor
+=back
 
-Revision 1.1  1999/08/04 08:03:03  ivan
-move table subclass examples out of production directory
+=head1 BUGS
 
-Revision 1.4  1998/12/29 11:59:57  ivan
-mostly properly OO, some work still to be done with svc_ stuff
+The session method won't deal well if you have multiple open sessions on a
+port, for example if your RADIUS server drops B<stop> records.  Suggestions for
+how to deal with this sort of lossage welcome; should we close the session
+when we get a new session on that port?  Tag it as invalid somehow?  Close it
+one second after it was opened?  *sigh*  Maybe FS::session shouldn't let you
+create overlapping sessions, at least folks will find out their logging is
+dropping records.
 
-Revision 1.3  1998/11/15 04:33:00  ivan
-updates for newest versoin
+If you think the above refers multiple user logins you need to read the
+manpages again.
 
-Revision 1.2  1998/11/15 03:48:49  ivan
-update for current version
+=head1 SEE ALSO
 
+L<FS::Record>, schema.html from the base documentation.
 
 =cut