webgui/lib/WebGUI/Asset/Wobject/Survey/QuestionJSON.pm
2008-09-26 02:06:21 +00:00

101 lines
2.8 KiB
Perl

package WebGUI::Asset::Wobject::Survey::QuestionJSON;
use strict;
use Data::Structure::Util qw/unbless/;
sub new{
my $class = shift;
my $self = shift || {};
my $posts = shift;
if(defined $self->{answers}){
foreach(@{$self->{answers}}){
$_ = WebGUI::Asset::Wobject::Survey::AnswerJSON->new($_);
}
}else{
$self->{answers} = [];
}
$self->{variableName} = $self->{variableName} || '';
$self->{text} = $self->{text} || '';
$self->{allowComment} = $self->{allowComment} || 0;
$self->{commentCols} = $self->{commentCols} || 10;
$self->{commentRows} = $self->{commentRows} || 5;
$self->{randomizeAnswers} = $self->{randomizeAnswers} || 0;
$self->{questionType} = $self->{questionType} || '';
$self->{randomizedWords} = $self->{randomizedWords} || '';
$self->{verticalDisplay} = $self->{verticalDisplay} || 0;
$self->{required} = $self->{required} || 0;
$self->{maxAnswers} = $self->{maxAnswers} || 1;
$self->{value} = $self->{value} || 1;
$self->{textInButton} = $self->{textInButton} || 0;
$self->{terminal} = $self->{terminal} || 0;
$self->{terminalUrl} = $self->{terminalUrl} || '';
$self->{type} = 'question';
if(defined $posts and ref $posts eq 'HASH'){
while(my ($key,$value) = each %$posts){
if(defined $self->{$key}){
$self->{$key} = $value;
}
}
}
bless($self,$class);
return $self;
}
sub update{
my ($self,$ref) = @_;
#is a question
if(@{$$ref{ids}} == 1){
while (my ($key,$value) = each %{$ref->{object}}){
$self->{$key} = $value;
}
#is a new answer
}elsif($$ref{ids}->[2] eq 'NEW'){
push(@{$self->{answers}}, WebGUI::Assest::Wobject::Survey::AnswerJSON->new( {},$ref) );
#is updating a answer
}else{
$self->{answers}->[$$ref{ids}->[2]]->update($ref);
}
}
sub getObject{
my ($self,$address) = @_;
return $self->{answers}->[$address->[2]];
}
sub createTemp{
my ($self,$ref) = @_;
return WebGUI::Asset::Wobject::Survey::AnswerJSON->new($self);
}
sub remove{
my ($self,$address) = @_;
splice(@{$self->{answers}},$$address[2],1);
}
sub freeze{
my $self = shift;
$self->{parent} = undef;
my %temp = %{$self};
$temp{answers} = [];
foreach(@{$self->{answers}}){
push(@{$temp{answers}},$_->freeze());
}
return \%temp;
}
#address is the array of objects currently selected in the edit screen
#data is the array of hash items for displaying
sub getDragDropList{
my ($self,$data,$address,$selected) = @_;
push(@$data, { "type",$self->{type},"text",$self->{text} });
if($selected){
for (@{$self->{answers}}){
$_->getDragDropList($data, $address);
}
}
}
1;