use strict;
use warnings;
package CommitBit::Model::ProjectMember;
use Jifty::DBI::Schema;
use Jifty::RightsFrom column => 'project';
use CommitBit::Model::User;
use CommitBit::Model::Project;
use CommitBit::Notification::InviteToProject;
use CommitBit::Record schema {
column person =>
refers_to CommitBit::Model::User;
column project =>
refers_to CommitBit::Model::Project;
column access_level =>
type is 'text',
valid_values are qw(observer author administrator),
default is 'observer';
};
# Your model-specific methods go here.
sub create {
my $self = shift;
my %args = (@_);
$args{'person'} = $self->_email_to_id($args{'person'});
my (@result) = $self->SUPER::create(%args);
if ($self->id) {
my $invite = CommitBit::Notification::InviteToProject->new( project => $self->project, to => $self->person, sender =>$self->current_user->user_object, access_level => $self->access_level)->send;
}
return (@result);
}
sub validate_person {
my $self = shift;
my $val = shift;
return (1) if ($val =~ /^\d+$/ || $val =~ /@/);
return undef;
}
sub set_person {
my $self = shift;
my $val = shift;
$val = $self->_email_to_id($val);
$self->_set(column => 'person', value => $val);
}
sub _email_to_id {
my $self = shift;
my $value = shift;
return $value if (ref $value || $value =~ /^\d+$/);
my $u = CommitBit::Model::User->new();
$u->load_or_create( email => $value);
return $u->id();
}
sub current_user_can {
my $self = shift;
my $rightname = shift;
if ( $rightname eq 'update' ) { return undef }
if ( $rightname eq 'read' ) { return 1 }
if ( $rightname eq 'delete'
&& $self->person->id == $self->current_user->id )
{
return 1;
}
return $self->delegate_current_user_can( $rightname => @_ );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1