Bivio::Biz::Model::MotionForm
# Copyright (c) 2007-2011 bivio Software, Inc. All Rights Reserved.
# $Id$
package Bivio::Biz::Model::MotionForm;
use strict;
use Bivio::Base 'Model.FormModeBaseForm';
my($_MS) = b_use('Type.MotionStatus');
my($_MT) = b_use('Type.MotionType');
sub LIST_MODEL {
return 'MotionList';
}
sub MOTIONS_FOLDER {
return '/Polls/';
}
sub PROPERTY_MODEL {
return 'Motion';
}
sub execute_empty_create {
my($self) = @_;
$self->internal_put_field('Motion.status' => $_MS->OPEN);
$self->internal_put_field('Motion.type' => $_MT->VOTE_PER_USER);
return;
}
sub execute_empty_edit {
my($self) = @_;
$self->load_from_model_properties('Motion');
return;
}
sub execute_ok_create {
my($self) = @_;
$self->new_other('Motion')->create($self->get_model_properties('Motion'));
_add_file($self);
return shift->SUPER::execute_ok_create;
}
sub execute_ok_edit {
my($self) = @_;
$self->update_model_properties('Motion');
_add_file($self);
return;
}
sub execute_unwind {
my($self) = @_;
return;
}
sub get_motion_document {
my($self) = @_;
return $self->get('Motion.motion_file_id')
? $self->new_other('RealmFile')->load({
realm_file_id => $self->get('Motion.motion_file_id'),
})
: undef;
}
sub internal_initialize {
my($self) = @_;
return $self->merge_initialize_info($self->SUPER::internal_initialize, {
version => 1,
require_context => 1,
visible => [qw(
Motion.name
Motion.question
Motion.status
Motion.type
),
{
name => 'file',
type => 'FileField',
constraint => 'NONE',
},
],
hidden => [qw(
Motion.motion_file_id
)],
other => [qw(
Motion.motion_id
Motion.name_lc
)],
});
}
sub _add_file {
my($self) = @_;
return unless $self->get('file');
my($name) = b_use('Model.FileChangeForm')
->validate_file_name($self, 'file');
return if $self->in_error;
$self->req('Model.Motion')->update({
motion_file_id => $self->new_other('RealmFile')->create_or_update_with_content({
override_is_read_only => 1,
path => $self->MOTIONS_FOLDER . $name,
is_read_only => 1,
}, $self->get('file')->{content})->get('realm_file_id'),
});
return;
}
1;