use FS::cust_main;
use FS::sales;
use FS::sched_item;
+use Carp qw( croak );
$DEBUG = 0;
$me = '[FS::access_user]';
{
return '';
} else {
- return 'htpasswd exited unsucessfully';
+
+ if ($? == -1) {
+ return "htpasswd failed to execute: $!";
+ } elsif ($? & 127) {
+ return sprintf("htpasswd died with signal %d, %s coredump",
+ ($? & 127), ($? & 128) ? 'with' : 'without' );
+ } else {
+ return sprintf("htpasswd exited with value %d", $? >> 8 );
+ }
+
}
}
Optional table name in which agentnum is being checked. Sometimes required to
resolve 'column reference "agentnum" is ambiguous' errors.
+=item column
+
+Optional column name in which agentnum is being checked.
+
+e.g: column => 'COALESCE ( cust_main.agentnum, prospect_main.agentnum )'
+
=item viewall_right
All agents will be viewable if the current user has the provided access right.
my( $self ) = shift;
my %opt = ref($_[0]) ? %{$_[0]} : @_;
- my $agentnum = $opt{'table'} ? $opt{'table'}.'.agentnum' : 'agentnum';
+ my $agentnum;
+ if ( $opt{column} ) {
+ $agentnum = $opt{column};
+ } elsif ( $opt{table} ) {
+ $agentnum = "$opt{table}.agentnum"
+ } else {
+ $agentnum = 'agentnum';
+ }
my @or = ();
$self->{_locale} = $self->option('locale');
}
+=item get_page_pref PATH, NAME, TABLENUM
+
+Returns the user's page preference named NAME for the page at PATH. If the
+page is a view or edit page or otherwise shows a single record at a time,
+it should use TABLENUM to tell which record the preference is for.
+
+=cut
+
+sub get_page_pref {
+ my $self = shift;
+ my ($path, $prefname, $tablenum) = @_;
+ $tablenum ||= '';
+
+ my $access_user_page_pref = qsearchs('access_user_page_pref', {
+ path => $path,
+ usernum => $self->usernum,
+ tablenum => $tablenum,
+ prefname => $prefname,
+ });
+ $access_user_page_pref ? $access_user_page_pref->prefvalue : '';
+}
+
+=item set_page_pref PATH, NAME, TABLENUM, VALUE
+
+Sets the user's page preference named NAME for the page at PATH. Use TABLENUM
+as for get_page_pref.
+
+=cut
+
+sub set_page_pref {
+ my $self = shift;
+ my ($path, $prefname, $tablenum, $prefvalue) = @_;
+ $tablenum ||= '';
+
+ my $error;
+ my $access_user_page_pref = qsearchs('access_user_page_pref', {
+ path => $path,
+ usernum => $self->usernum,
+ tablenum => $tablenum,
+ prefname => $prefname,
+ });
+ if ( $access_user_page_pref ) {
+ if ( $prefvalue eq $access_user_page_pref->get('prefvalue') ) {
+ return '';
+ }
+ if ( length($prefvalue) > 0 ) {
+ $access_user_page_pref->set('prefvalue', $prefvalue);
+ $error = $access_user_page_pref->replace;
+ $error .= " (updating $prefname)" if $error;
+ } else {
+ $error = $access_user_page_pref->delete;
+ $error .= " (removing $prefname)" if $error;
+ }
+ } else {
+ if ( length($prefvalue) > 0 ) {
+ $access_user_page_pref = FS::access_user_page_pref->new({
+ path => $path,
+ usernum => $self->usernum,
+ tablenum => $tablenum,
+ prefname => $prefname,
+ prefvalue => $prefvalue,
+ });
+ $error = $access_user_page_pref->insert;
+ $error .= " (creating $prefname)" if $error;
+ } else {
+ return '';
+ }
+ }
+
+ return $error;
+}
+
+#3.x
+
+sub saved_search {
+ my $self = shift;
+ qsearch('saved_search', { 'usernum' => $self->usernum });
+}
+
+=item get_pref NAME
+
+Fetch the prefvalue column from L<FS::access_user_pref> for prefname NAME
+
+Returns undef when no value has been saved, or when record has expired
+
+=cut
+
+sub get_pref {
+ my ( $self, $prefname ) = @_;
+ croak 'prefname parameter requrired' unless $prefname;
+
+ my $pref_row = $self->get_pref_row( $prefname )
+ or return undef;
+
+ return undef
+ if $pref_row->expiration
+ && $pref_row->expiration < time();
+
+ $pref_row->prefvalue;
+}
+
+=item get_pref_row NAME
+
+Fetch the row object from L<FS::access_user_pref> for prefname NAME
+
+returns undef when no row has been created
+
+=cut
+
+sub get_pref_row {
+ my ( $self, $prefname ) = @_;
+ croak 'prefname parameter required' unless $prefname;
+
+ qsearchs(
+ access_user_pref => {
+ usernum => $self->usernum,
+ prefname => $prefname,
+ }
+ );
+}
+
+=item set_pref NAME, VALUE, [EXPIRATION_EPOCH]
+
+Add or update user preference in L<FS::access_user_pref> table
+
+Passing an undefined VALUE will delete the user preference
+
+Returns VALUE
+
+=cut
+
+sub set_pref {
+ my $self = shift;
+ my ( $prefname, $prefvalue, $expiration ) = @_;
+
+ return $self->delete_pref( $prefname )
+ unless defined $prefvalue;
+
+ if ( my $pref_row = $self->get_pref_row( $prefname )) {
+ return $prefvalue
+ if $pref_row->prefvalue eq $prefvalue;
+
+ $pref_row->prefvalue( $prefvalue );
+ $pref_row->expiration( $expiration || '');
+
+ if ( my $error = $pref_row->replace ) { croak $error }
+
+ return $prefvalue;
+ }
+
+ my $pref_row = FS::access_user_pref->new({
+ usernum => $self->usernum,
+ prefname => $prefname,
+ prefvalue => $prefvalue,
+ expiration => $expiration,
+ });
+ if ( my $error = $pref_row->insert ) { croak $error }
+
+ $prefvalue;
+}
+
+=item delete_pref NAME
+
+Delete user preference from L<FS::access_user_pref> table
+
+=cut
+
+sub delete_pref {
+ my ( $self, $prefname ) = @_;
+
+ my $pref_row = $self->get_pref_row( $prefname )
+ or return;
+
+ if ( my $error = $pref_row->delete ) { croak $error }
+}
+
=back
=head1 BUGS