From 2de1d83d65df88a1416cb07343b41e5dcc016947 Mon Sep 17 00:00:00 2001 From: Kaleb Murphy Date: Tue, 30 Sep 2008 19:25:38 +0000 Subject: [PATCH] Editor is done except for prettifying it, but you can now build a survey with the new data layer --- lib/WebGUI/Asset/Wobject/Survey.pm | 82 +++++++------------ lib/WebGUI/Asset/Wobject/Survey/SurveyJSON.pm | 34 +++++++- www/extras/wobject/Survey/editsurvey.js | 17 ++-- www/extras/wobject/Survey/surveyedit.css | 2 +- 4 files changed, 73 insertions(+), 62 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/Survey.pm b/lib/WebGUI/Asset/Wobject/Survey.pm index 843943fda..99c2f3c7c 100644 --- a/lib/WebGUI/Asset/Wobject/Survey.pm +++ b/lib/WebGUI/Asset/Wobject/Survey.pm @@ -110,10 +110,17 @@ sub definition { questionEditTemplateId => { tab => 'display', fieldType => 'template', - label => "Section Edit Tempalte", + label => "Question Edit Tempalte", defaultValue => 'wAc4azJViVTpo-2NYOXWvg', namespace => 'Survey/Edit', }, + answerEditTemplateId => { + tab => 'display', + fieldType => 'template', + label => "Answer Edit Tempalte", + defaultValue => 'AjhlNO3wZvN5k4i4qioWcg', + namespace => 'Survey/Edit', + } ); push(@{$definition}, { @@ -183,10 +190,12 @@ sub loadSurveyJSON{ my $jsonHash = $self->session->db->quickScalar("select surveyJSON from Survey where assetId = ?",[$self->getId]); $self->session->errorHandler->error("LOADING JSON"); - +eval{ $self->{jsonHelper} = WebGUI::Asset::Wobject::Survey::SurveyJSON->new($jsonHash,$self->session->errorHandler); +}; +$self->session->errorHandler->error("Loaded JSON".$@); -$self->session->errorHandler->error("Loaded JSON\n\n".Dumper $self->helper->freeze); +#$self->session->errorHandler->error("Loaded JSON\n\n".Dumper $self->helper->freeze); } #------------------------------------------------------------------- @@ -206,7 +215,7 @@ sub saveSurveyJSON{ my $data = $self->helper->freeze(); -$self->session->errorHandler->error("Saving THIS DATA\n\n".$data); +$self->session->errorHandler->error("Saving THIS DATA");#\n\n".$data); $self->session->db->write("update Survey set surveyJSON = ? where assetId = ?",[$data,$self->getId]); } @@ -315,7 +324,14 @@ $self->session->errorHandler->error("In Drag Drop ".Dumper $p); $bid[0] = -1 if(! defined $bid[0]); $self->helper->insertObject($target, [$bid[0]]); }elsif(@tid == 2){#questions can be moved to any section, but a pushed to the end of a new section. - if(@bid == 1){#moved to a new section or head of current section + if($bid[0] !~ /\d/){ + $bid[0] = $tid[0]; + $bid[1] = $tid[1]; + }elsif(@bid == 1){#moved to a new section or head of current section + if($bid[0] !~ /\d/){ + $bid[0] = $tid[0]; + $bid[1] = $tid[1]; + } if($bid[0] == $tid[0]){ #moved to top of current section $bid[1] = -1; @@ -363,18 +379,25 @@ $self->session->errorHandler->error("Entering loadSurvey"); #$self->session->errorHandler->error("Getting edit vars:".join(',',@$address)); my $var = defined $options->{var} ? $options->{var} : $self->helper->getEditVars($address); -$self->session->errorHandler->error("Got edit vars"); +$self->session->errorHandler->error("Got edit vars".Dumper $self->helper->freeze); $self->session->errorHandler->error("Loaded beginning params ".join(',',@$address)); my $editHtml; -#$self->session->errorHandler->error("The edit vars:".Dumper $var); +$self->session->errorHandler->error("The edit vars:".Dumper $var); if($var->{type} eq 'section'){ $editHtml = $self->processTemplate($var,$self->get("sectionEditTemplateId")); }elsif($var->{type} eq 'question'){ $editHtml = $self->processTemplate($var,$self->get("questionEditTemplateId")); + }elsif($var->{type} eq 'answer'){ + $editHtml = $self->processTemplate($var,$self->get("answerEditTemplateId")); } -#$self->session->errorHandler->error("The HTML :$editHtml"); +$self->session->errorHandler->error("The HTML :$editHtml"); my %buttons; + $buttons{question} = $$address[0]; + if(@$address == 2 or @$address == 3){ + $buttons{answer} = "$$address[0]-$$address[1]"; + } + my $data = $self->helper->getDragDropList($address); #$self->session->errorHandler->error("The DD data :".Dumper $data); my $html; @@ -388,26 +411,17 @@ $self->session->errorHandler->error("Loaded beginning params ".join(',',@$addres if($_->{type} eq 'section'){ $lastId{section} = ++$scount; if($lastType eq 'answer'){ - $html .= "
"; - $buttons{answer} = "$lastId{section}-$lastId{question}"; $a = 1; } elsif($lastType eq 'question'){ - $html .= "
"; - $buttons{'question'} = "$lastId{section}-$lastId{question}"; $q = 1; } $html .= "
  • S". ($scount + 1). ": $_->{text}<\/li>
    \n"; push(@ids,$scount); - $lastType = 'section'; - $qcount = -1; - $acount = -1; } elsif($_->{type} eq 'question'){ $lastId{question} = ++$qcount; if($lastType eq 'answer'){ - $html .= "
    "; - $buttons{answer} = "$lastId{section}-$lastId{question}"; $a = 1; } $html .= "
  • Q". ($qcount + 1). ": $_->{text}<\/li>
    \n"; @@ -422,40 +436,6 @@ $self->session->errorHandler->error("Loaded beginning params ".join(',',@$addres $lastType = 'answer'; } } - if($lastType eq 'answer'){ - if(!$a){ - $html .= "
    "; - $buttons{'answer'} = "$lastId{section}-$lastId{question}"; - } - if(!$b){ - $html .= "
    "; - $buttons{'question'} = "$lastId{section}"; - } - if(!$s){ - $html .= "
    "; - $buttons{'section'} = "$lastId{section}"; - } - } - elsif($lastType eq 'question'){ - if(!$b){ - $html .= "
    "; - $buttons{'question'} = "$lastId{section}"; - } - if(!$s){ - $html .= "
    "; - $buttons{'section'} = "$lastId{section}"; - } - } - elsif($lastType eq 'section'){ - if(!$b){ - $html .= "
    "; - $buttons{'question'} = "$lastId{section}"; - } - if(!$s){ - $html .= "
    "; - $buttons{'section'} = "$lastId{section}"; - } - } #$self->session->errorHandler->error($html); #address is the address of the focused object diff --git a/lib/WebGUI/Asset/Wobject/Survey/SurveyJSON.pm b/lib/WebGUI/Asset/Wobject/Survey/SurveyJSON.pm index 9b5a1c848..64f39bff2 100644 --- a/lib/WebGUI/Asset/Wobject/Survey/SurveyJSON.pm +++ b/lib/WebGUI/Asset/Wobject/Survey/SurveyJSON.pm @@ -13,7 +13,6 @@ sub new{ my $temp = decode_json($json) if defined $json; $self->{sections} = defined $temp->{sections} ? $temp->{sections} : []; $self->{survey} = defined $temp->{survey} ? $temp->{survey} : {}; - $self->{gotoMap} = defined $temp->{gotoMap} ? $temp->{gotoMap} : {}; bless($self,$class); if(@{$self->sections} == 0){ $self->newObject([]); @@ -25,7 +24,6 @@ sub freeze{ my %temp; $temp{sections} = $self->{sections}; $temp{survey} = $self->{survey}; - $temp{gotoMap} = $self->{gotoMap}; return encode_json(\%temp); } sub newObject{ @@ -40,7 +38,7 @@ sub newObject{ return $address; }elsif(@$address == 2){ push(@{$self->answers($address)}, $self->newAnswer($address)); - $$address[2] = $#{$self->answers($$address)}; + $$address[2] = $#{$self->answers($address)}; return $address; } } @@ -138,6 +136,13 @@ sub getQuestionEditVars{ return \%var; } sub getAnswerEditVars{ + my $self = shift; + my $address = shift; + my $object = $self->answer($address); + my %var = %{$object}; + $var{id} = $address->[0]."-".$address->[1]."-".$address->[2]; + $var{displayed_id} = $address->[2]+1; + return \%var; } sub update{ @@ -157,6 +162,12 @@ $self->log("$object didn't exist"); push(@{$self->questions($address)},$object); } }elsif(@$address == 3){ + $object = $self->answer($address); + if(! defined $object){ +$self->log("$object didn't exist"); + $object = $self->newAnswer(); + push(@{$self->answers($address)},$object); + } } for my $key(keys %$object){ $object->{$key} = $ref->{$key} if(defined $$ref{$key}); @@ -234,6 +245,23 @@ sub newQuestion{ return \%members; } sub newAnswer{ + my %members = ( + 'text', '', + 'verbatim',0, + 'textCols',10, + 'textRows',5, + 'goto','', + 'recordedAnswer','', + 'isCorrect',1, + 'min',1, + 'max',10, + 'step',1, + 'value',1, + 'terminal',0, + 'terminalUrl','', + 'type','answer' + ); + return \%members; } diff --git a/www/extras/wobject/Survey/editsurvey.js b/www/extras/wobject/Survey/editsurvey.js index 1315acecc..79cf25f0f 100644 --- a/www/extras/wobject/Survey/editsurvey.js +++ b/www/extras/wobject/Survey/editsurvey.js @@ -56,16 +56,19 @@ console.log('adding handler for '+ d.ids[x]); } //add the add object buttons - if(d.buttons['section']){ - var button = new YAHOO.widget.Button({ label:"Add Section", id:"addsection", container:"newSection" }); +// if(d.buttons['section']){ + document.getElementById('addSection').innerHTML = ''; + document.getElementById('addQuestion').innerHTML = ''; + document.getElementById('addAnswer').innerHTML = ''; + var button = new YAHOO.widget.Button({ label:"Add Section", id:"addsection", container:"addSection" }); button.on("click", this.addSection); - } - if(d.buttons['question']){ - var button = new YAHOO.widget.Button({ label:"Add Question", id:"addquestion", container:"newQuestion" }); +// } +// if(d.buttons['question']){ + var button = new YAHOO.widget.Button({ label:"Add Question", id:"addquestion", container:"addQuestion" }); button.on("click", this.addQuestion,d.buttons['question']); - } +// } if(d.buttons['answer']){ - var button = new YAHOO.widget.Button({ label:"Add Answer", id:"addanswer", container:"newAnswer" }); + var button = new YAHOO.widget.Button({ label:"Add Answer", id:"addanswer", container:"addAnswer" }); button.on("click", this.addAnswer,d.buttons['answer']); } diff --git a/www/extras/wobject/Survey/surveyedit.css b/www/extras/wobject/Survey/surveyedit.css index 1d6d48e21..0050e6c20 100644 --- a/www/extras/wobject/Survey/surveyedit.css +++ b/www/extras/wobject/Survey/surveyedit.css @@ -46,7 +46,7 @@ div.entry { ul.draglist { position: relative; - width: 300px; + width: 340px; background: #f7f7f7; border: 1px solid gray; list-style: none;