diff --git a/lib/WebGUI/Wobject/DataForm.pm b/lib/WebGUI/Wobject/DataForm.pm deleted file mode 100644 index 3c670680b..000000000 --- a/lib/WebGUI/Wobject/DataForm.pm +++ /dev/null @@ -1,948 +0,0 @@ -package WebGUI::Wobject::DataForm; - -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2004 Plain Black Corporation. -#------------------------------------------------------------------- -# Please read the legal notices (docs/legal.txt) and the license -# (docs/license.txt) that came with this distribution before using -# this software. -#------------------------------------------------------------------- -# http://www.plainblack.com info@plainblack.com -#------------------------------------------------------------------- - -use strict qw(vars subs); -use Tie::CPHash; -use Tie::IxHash; -use WebGUI::DateTime; -use WebGUI::Form; -use WebGUI::FormProcessor; -use WebGUI::HTMLForm; -use WebGUI::HTTP; -use WebGUI::Icon; -use WebGUI::International; -use WebGUI::Macro; -use WebGUI::MessageLog; -use WebGUI::Privilege; -use WebGUI::Session; -use WebGUI::SQL; -use WebGUI::Style; -use WebGUI::TabForm; -use WebGUI::URL; -use WebGUI::Wobject; -use WebGUI::Utility; - -our @ISA = qw(WebGUI::Wobject); - -#------------------------------------------------------------------- -sub _createField { - my $data = $_[0]; - my %param; - $param{name} = $data->{name}; - $param{name} = "field_".$data->{sequenceNumber} if ($param{name} eq ""); # Empty fieldname not allowed - $session{form}{$param{name}} =~ s/\^.*?\;//gs ; # remove macro's from user input - $param{value} = $data->{value}; - $param{size} = $data->{width}; - $param{rows} = $data->{rows} || 5; - $param{columns} = $data->{width}; - $param{vertical} = $data->{vertical}; - $param{extras} = $data->{extras}; - - if ($data->{type} eq "checkbox") { - $param{value} = ($data->{defaultValue} =~ /checked/i) ? 1 : ""; - } - if (isIn($data->{type},qw(selectList checkList))) { - my @defaultValues; - if ($session{form}{$param{name}}) { - @defaultValues = $session{cgi}->param($param{name}); - } else { - foreach (split(/\n/, $data->{value})) { - s/\s+$//; # remove trailing spaces - push(@defaultValues, $_); - } - } - $param{value} = \@defaultValues; - } - if (isIn($data->{type},qw(selectList checkList radioList))) { - delete $param{size}; - my %options; - tie %options, 'Tie::IxHash'; - foreach (split(/\n/, $data->{possibleValues})) { - s/\s+$//; # remove trailing spaces - $options{$_} = $_; - } - $param{options} = \%options; - } - if ($data->{type} eq "yesNo") { - if ($data->{defaultValue} =~ /yes/i) { - $param{value} = 1; - } elsif ($data->{defaultValue} =~ /no/i) { - $param{value} = 0; - } - } - my $cmd = "WebGUI::Form::".$data->{type}; - return &$cmd(\%param); -} - -#------------------------------------------------------------------- -sub _fieldAdminIcons { - my $fid = $_[1]; - my $tid = $_[2]; - my $output; - $output = deleteIcon('func=deleteFieldConfirm&wid='.$_[0]->get("wobjectId").'&fid='.$fid.'&tid='.$tid,'',WebGUI::International::get(19,$_[0]->get("namespace"))) unless ($_[3]); - $output .= editIcon('func=editField&wid='.$_[0]->get("wobjectId").'&fid='.$fid.'&tid='.$tid) - .moveUpIcon('func=moveFieldUp&wid='.$_[0]->get("wobjectId").'&fid='.$fid.'&tid='.$tid) - .moveDownIcon('func=moveFieldDown&wid='.$_[0]->get("wobjectId").'&fid='.$fid.'&tid='.$tid); - return $output; -} -#------------------------------------------------------------------- -sub _tabAdminIcons { - my $tid = $_[1]; - my $output; - $output = deleteIcon('func=deleteTabConfirm&wid='.$_[0]->get("wobjectId").'&tid='.$tid,'',WebGUI::International::get(100,$_[0]->get("namespace"))) unless ($_[2]); - $output .= editIcon('func=editTab&wid='.$_[0]->get("wobjectId").'&tid='.$tid) - .moveLeftIcon('func=moveTabLeft&wid='.$_[0]->get("wobjectId").'&tid='.$tid) - .moveRightIcon('func=moveTabRight&wid='.$_[0]->get("wobjectId").'&tid='.$tid); - return $output; -} - - -#------------------------------------------------------------------- -sub _tonull { - return $_[1] eq "0" ? (undef, undef) : @_ ; -} - - -#------------------------------------------------------------------- -sub _createTabInit { - my $wid = $_[0]; - my @tabCount = WebGUI::SQL->quickArray("select count(DataForm_tabId) from DataForm_tab where wobjectId=".quote($wid)); - my $output = ''; - return $output; -} - -#------------------------------------------------------------------- -sub duplicate { - my ($w, %dataField, %dataTab, $sthField, $sthTab, $newTabId); - tie %dataTab, 'Tie::CPHash'; - tie %dataField, 'Tie::CPHash'; - $w = $_[0]->SUPER::duplicate($_[1]); - $w = WebGUI::Wobject::DataForm->new({wobjectId=>$w,namespace=>$_[0]->get("namespace")}); - $sthTab = WebGUI::SQL->read("select * from DataForm_tab where wobjectId=".quote($_[0]->get("wobjectId"))); - while (%dataTab = $sthTab->hash) { - $sthField = WebGUI::SQL->read("select * from DataForm_field where wobjectId=".quote($_[0]->get("wobjectId"))." AND DataForm_tabId=".quote($dataTab{DataForm_tabId})); - $dataTab{DataForm_tabId} = "new"; - $newTabId = $w->setCollateral("DataForm_tab","DataForm_tabId",\%dataTab); - while (%dataField = $sthField->hash) { - $dataField{DataForm_fieldId} = "new"; - $dataField{DataForm_tabId} = $newTabId; - $w->setCollateral("DataForm_field","DataForm_fieldId",\%dataField); - } - $sthField->finish; - } - $sthField = WebGUI::SQL->read("select * from DataForm_field where wobjectId=".quote($_[0]->get("wobjectId"))." AND DataForm_tabId='0'"); - while (%dataField = $sthField->hash) { - $dataField{DataForm_fieldId} = "new"; - $w->setCollateral("DataForm_field","DataForm_fieldId",\%dataField); - } - $sthField->finish; - $sthTab->finish; -} - -#------------------------------------------------------------------- -sub getIndexerParams { - my $self = shift; - my $now = shift; - return { - DataForm_field => { - sql => "select DataForm_field.label as label, - DataForm_field.subtext as subtext, - DataForm_field.possibleValues as possibleValues, - DataForm_field.wobjectId as wid, - DataForm_field.DataForm_fieldId as fid, - wobject.namespace as namespace, - wobject.addedBy as ownerId, - page.urlizedTitle as urlizedTitle, - page.languageId as languageId, - page.pageId as pageId, - page.groupIdView as page_groupIdView, - wobject.groupIdView as wobject_groupIdView, - 7 as wobject_special_groupIdView - from DataForm_field, wobject, page - where DataForm_field.wobjectId = wobject.wobjectId - and wobject.pageId = page.pageId - and wobject.startDate < $now - and wobject.endDate > $now - and page.startDate < $now - and page.endDate > $now", - fieldsToIndex => ["label", "subtext", "possibleValues"], - contentType => 'wobjectDetail', - url => '$data{urlizedTitle}."#".$data{wid}', - headerShortcut => 'select label from DataForm_field where DataForm_fieldId = \'$data{fid}\'', - bodyShortcut => 'select subtext from DataForm_field where DataForm_fieldId = \'$data{fid}\'', - }, - DataForm_entryData => { - sql => "select distinct(DataForm_entryData.wobjectId) as wid, - wobject.namespace as namespace, - wobject.addedBy as ownerId, - page.urlizedTitle as urlizedTitle, - page.languageId as languageId, - page.pageId as pageId, - page.groupIdView as page_groupIdView, - wobject.groupIdView as wobject_groupIdView, - wobject.groupIdEdit as wobject_special_groupIdView - from DataForm_entryData, wobject, page - where DataForm_entryData.wobjectId = wobject.wobjectId - and wobject.pageId = page.pageId - and wobject.startDate < $now - and wobject.endDate > $now - and page.startDate < $now - and page.endDate > $now", - fieldsToIndex => ['select distinct(value) from DataForm_entryData where wobjectId = \'$data{wid}\''], - contentType => 'wobjectDetail', - url => 'WebGUI::URL::append($data{urlizedTitle}, "func=view&entryId=list&wid=$data{wid}")', - headerShortcut => 'select title from wobject where wobjectId = \'$data{wid}\'', - } - }; -} - - -#------------------------------------------------------------------- -sub getListTemplateVars { - my $self = shift; - my $var = shift; - my @fieldLoop; - $var->{"back.url"} = WebGUI::URL::page(); - $var->{"back.label"} = WebGUI::International::get(18,$self->get("namespace")); - my $a = WebGUI::SQL->read("select DataForm_fieldId,name,label,isMailField,type from DataForm_field - where wobjectId=".quote($self->get("wobjectId"))." order by sequenceNumber"); - while (my $field = $a->hashRef) { - push(@fieldLoop,{ - "field.name"=>$field->{name}, - "field.id"=>$field->{DataForm_fieldId}, - "field.label"=>$field->{label}, - "field.isMailField"=>$field->{isMailField}, - "field.type"=>$field->{type}, - }); - } - $a->finish; - $var->{field_loop} = \@fieldLoop; - my @recordLoop; - my $a = WebGUI::SQL->read("select ipAddress,username,userid,submissionDate,DataForm_entryId from DataForm_entry - where wobjectId=".quote($self->get("wobjectId"))." order by submissionDate desc"); - while (my $record = $a->hashRef) { - my @dataLoop; - my $b = WebGUI::SQL->read("select b.name, b.label, b.isMailField, a.value from DataForm_entryData a left join DataForm_field b - on a.DataForm_fieldId=b.DataForm_fieldId where a.DataForm_entryId=".quote($record->{DataForm_entryId})." - order by b.sequenceNumber"); - while (my $data = $b->hashRef) { - push(@dataLoop,{ - "record.data.name"=>$data->{name}, - "record.data.label"=>$data->{label}, - "record.data.value"=>$data->{value}, - "record.data.isMailField"=>$data->{isMailField} - }); - } - $b->finish; - push(@recordLoop,{ - "record.ipAddress"=>$record->{ipAddress}, - "record.edit.url"=>WebGUI::URL::page("func=view&entryId=".$record->{DataForm_entryId}."&wid=".$self->get("wobjectId")), - "record.edit.icon"=>editIcon("func=view&entryId=".$record->{DataForm_entryId}."&wid=".$self->get("wobjectId")), - "record.delete.url"=>WebGUI::URL::page("func=deleteEntry&entryId=".$record->{DataForm_entryId}."&wid=".$self->get("wobjectId")), - "record.delete.icon"=>deleteIcon("func=deleteEntry&entryId=".$record->{DataForm_entryId}."&wid=".$self->get("wobjectId"),'',WebGUI::International::get('Delete entry confirmation',$self->get('namespace'))), - "record.username"=>$record->{username}, - "record.userId"=>$record->{userId}, - "record.submissionDate.epoch"=>$record->{submissionDate}, - "record.submissionDate.human"=>WebGUI::DateTime::epochToHuman($record->{submissionDate}), - "record.entryId"=>$record->{DataForm_entryId}, - "record.data_loop"=>\@dataLoop - }); - } - $a->finish; - $var->{record_loop} = \@recordLoop; - return $var; -} - -#------------------------------------------------------------------- -sub getRecordTemplateVars { - my $self = shift; - my $var = shift; - $var->{error_loop} = [] unless (exists $var->{error_loop}); - $var->{canEdit} = ($self->canEdit); - $var->{"entryList.url"} = WebGUI::URL::page('func=view&entryId=list&wid='.$self->get("wobjectId")); - $var->{"entryList.label"} = WebGUI::International::get(86,$self->get("namespace")); - $var->{"export.tab.url"} = WebGUI::URL::page('func=exportTab&wid='.$self->get("wobjectId")); - $var->{"export.tab.label"} = WebGUI::International::get(84,$self->get("namespace")); - $var->{"delete.url"} = WebGUI::URL::page('func=deleteEntry&wid='.$self->get("wobjectId").'&entryId='.$var->{entryId}); - $var->{"delete.label"} = WebGUI::International::get(90,$self->get("namespace")); - $var->{"back.url"} = WebGUI::URL::page(); - $var->{"back.label"} = WebGUI::International::get(18,$self->get("namespace")); - $var->{"addField.url"} = WebGUI::URL::page('func=editField&wid='.$self->get("wobjectId")); - $var->{"addField.label"} = WebGUI::International::get(76,$self->get("namespace")); - # add Tab label, url, header and init - $var->{"addTab.label"}= WebGUI::International::get(105,$self->get("namespace"));; - $var->{"addTab.url"}= WebGUI::URL::page('func=editTab&wid='.$self->get("wobjectId")); - $var->{"tab.init"}= _createTabInit($self->get("wobjectId")); - $var->{"form.start"} = WebGUI::Form::formHeader() - .WebGUI::Form::hidden({name=>"wid",value=>$self->get("wobjectId")}) - .WebGUI::Form::hidden({name=>"func",value=>"process"}); - my @tabs; - my $select = "select a.name, a.DataForm_fieldId, a.DataForm_tabId,a.label, a.status, a.isMailField, a.subtext, a.type, a.defaultValue, a.possibleValues, a.width, a.rows, a.extras, a.vertical"; - my $join; - my $where = "where a.wobjectId=".quote($self->get("wobjectId")); - if ($var->{entryId}) { - $var->{"form.start"} .= WebGUI::Form::hidden({name=>"entryId",value=>$var->{entryId}}); - my $entry = $self->getCollateral("DataForm_entry","DataForm_entryId",$var->{entryId}); - $var->{ipAddress} = $entry->{ipAddress}; - $var->{username} = $entry->{username}; - $var->{userId} = $entry->{userId}; - $var->{date} = WebGUI::DateTime::epochToHuman($entry->{submissionDate}); - $var->{epoch} = $entry->{submissionDate}; - $var->{"edit.URL"} = WebGUI::URL::page('func=view&wid='.$self->get("wobjectId").'&entryId='.$var->{entryId}); - $where .= " and b.DataForm_entryId=".quote($var->{entryId}); - $join = "left join DataForm_entryData as b on a.DataForm_fieldId=b.DataForm_fieldId"; - $select .= ", b.value"; - } - my %data; - tie %data, 'Tie::CPHash'; - my %tab; - tie %tab, 'Tie::CPHash'; - my $tabsth = WebGUI::SQL->read("select * from DataForm_tab where wobjectId=".quote($self->get("wobjectId"))." order by sequenceNumber"); - while (%tab = $tabsth->hash) { - my @fields; - my $sth = WebGUI::SQL->read("$select from DataForm_field as a $join $where and a.DataForm_tabId=".quote($tab{DataForm_tabId})." order by a.sequenceNumber"); - while (%data = $sth->hash) { - my $formValue = $session{form}{$data{name}}; - if ((not exists $data{value}) && $session{form}{func} ne "editSave" && $session{form}{func} ne "editFieldSave" && defined $formValue) { - $data{value} = $formValue; - $data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date"); - } - if (not exists $data{value}) { - $data{value} = WebGUI::Macro::process($data{defaultValue}); - } - my $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData"))); - my $value = $data{value}; - $value = WebGUI::DateTime::epochToHuman($value,"%z") if ($data{type} eq "date"); - $value = WebGUI::DateTime::epochToHuman($value,"%z %Z") if ($data{type} eq "dateTime"); - push(@fields, { - "tab.field.form" => _createField(\%data), - "tab.field.name" => $data{name}, - "tab.field.tid" => $data{DataForm_tabId}, - "tab.field.value" => $value, - "tab.field.label" => $data{label}, - "tab.field.isMailField" => $data{isMailField}, - "tab.field.isHidden" => $hidden, - "tab.field.isDisplayed" => ($data{status} eq "visible" && !$hidden), - "tab.field.isRequired" => ($data{status} eq "required" && !$hidden), - "tab.field.subtext" => $data{subtext}, - "tab.field.controls" => $self->_fieldAdminIcons($data{DataForm_fieldId},$data{DataForm_tabId},$data{isMailField}) - }); - } - $sth->finish; - push(@tabs, { - "tab.start" => '
', - "tab.end" =>'
', - "tab.sequence" => $tab{sequenceNumber}, - "tab.label" => $tab{label}, - "tab.tid" => $tab{DataForm_tabId}, - "tab.subtext" => $tab{subtext}, - "tab.controls" => $self->_tabAdminIcons($tab{DataForm_tabId}), - "tab.field_loop" => \@fields, - }); - } - - my @fields; - my $sth = WebGUI::SQL->read("$select from DataForm_field as a $join $where and a.DataForm_tabId = 0 order by a.sequenceNumber"); - while (%data = $sth->hash) { - my $formValue = $session{form}{$data{name}}; - if ((not exists $data{value}) && $session{form}{func} ne "editSave" && $session{form}{func} ne "editFieldSave" && defined $formValue) { - $data{value} = $formValue; - $data{value} = WebGUI::DateTime::setToEpoch($data{value}) if ($data{type} eq "date"); - } - if (not exists $data{value}) { - $data{value} = WebGUI::Macro::process($data{defaultValue}); - } - my $hidden = (($data{status} eq "hidden" && !$session{var}{adminOn}) || ($data{isMailField} && !$self->get("mailData"))); - my $value = $data{value}; - $value = WebGUI::DateTime::epochToHuman($value,"%z") if ($data{type} eq "date"); - $value = WebGUI::DateTime::epochToHuman($value) if ($data{type} eq "dateTime"); - my %fieldProperties = ( - "form" => _createField(\%data), - "name" => $data{name}, - "tid" => $data{DataForm_tabId}, - "inTab".$data{DataForm_tabId} => 1, - "value" => $value, - "label" => $data{label}, - "isMailField" => $data{isMailField}, - "isHidden" => $hidden, - "isDisplayed" => ($data{status} eq "visible" && !$hidden), - "isRequired" => ($data{status} eq "required" && !$hidden), - "subtext" => $data{subtext}, - "controls" => $self->_fieldAdminIcons($data{DataForm_fieldId},$data{DataForm_tabId},$data{isMailField}) - ); - push(@fields, { map {("field.".$_ => $fieldProperties{$_})} keys(%fieldProperties) }); - foreach (keys(%fieldProperties)) { - $var->{"field.noloop.".$data{name}.".$_"} = $fieldProperties{$_}; - } - } - $sth->finish; - $var->{field_loop} = \@fields; - $tabsth->finish; - $var->{tab_loop} = \@tabs; - $var->{"form.send"} = WebGUI::Form::submit({value=>WebGUI::International::get(73, $self->get("namespace"))}); - $var->{"form.save"} = WebGUI::Form::submit(); - $var->{"form.end"} = WebGUI::Form::formFooter(); - return $var; -} - -#------------------------------------------------------------------- -sub name { - return WebGUI::International::get(1,$_[0]->get("namespace")); -} - -#------------------------------------------------------------------- -sub new { - my $class = shift; - my $property = shift; - my $self = WebGUI::Wobject->new( - -properties=>$property, - -extendedProperties=>{ - acknowledgement=>{}, - emailTemplateId=>{ - defaultValue=>2 - }, - acknowlegementTemplateId=>{ - defaultValue=>3, - }, - listTemplateId=>{ - defaultValue=>1, - }, - mailData=>{ - defaultValue=>0 - } - }, - -useTemplate=>1, - -useMetaData=>1 - ); - bless $self, $class; -} - -#------------------------------------------------------------------- -sub purge { - WebGUI::SQL->write("delete from DataForm_field where wobjectId=".quote($_[0]->get("wobjectId"))); - WebGUI::SQL->write("delete from DataForm_entry where wobjectId=".quote($_[0]->get("wobjectId"))); - WebGUI::SQL->write("delete from DataForm_entryData where wobjectId=".quote($_[0]->get("wobjectId"))); - WebGUI::SQL->write("delete from DataForm_tab where wobjectId=".quote($_[0]->get("wobjectId"))); - $_[0]->SUPER::purge(); -} - -#------------------------------------------------------------------- -sub sendEmail { - my $var = $_[1]; - my $message = WebGUI::Macro::process($_[0]->processTemplate($_[0]->get("emailTemplateId"),$var)); - my ($to, $subject, $from, $bcc, $cc); - foreach my $row (@{$var->{field_loop}}) { - if ($row->{"field.name"} eq "to") { - $to = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "from") { - $from = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "cc") { - $cc = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "bcc") { - $bcc = $row->{"field.value"}; - } elsif ($row->{"field.name"} eq "subject") { - $subject = $row->{"field.value"}; - } - } - if ($to =~ /\@/) { - WebGUI::Mail::send($to, $subject, $message, $cc, $from, $bcc); - } else { - my ($userId) = WebGUI::SQL->quickArray("select userId from users where username=".quote($to)); - my $groupId; - # if no user is found, try finding a matching group - unless ($userId) { - ($groupId) = WebGUI::SQL->quickArray("select groupId from groups where groupName=".quote($to)); - } - unless ($userId || $groupId) { - WebGUI::ErrorHandler::warn($_[0]->get("wobjectId").": Unable to send message, no user or group found."); - } else { - WebGUI::MessageLog::addEntry($userId, $groupId, $subject, $message, "", "", $from); - if ($cc) { - WebGUI::Mail::send($cc, $subject, $message, "", $from); - } - if ($bcc) { - WebGUI::Mail::send($bcc, $subject, $message, "", $from); - } - } - } -} - -#------------------------------------------------------------------- -sub uiLevel { - return 5; -} - -#------------------------------------------------------------------- -sub www_deleteEntry { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - my $entryId = $session{form}{entryId}; - WebGUI::SQL->write("delete from DataForm_entry where DataForm_entryId=".quote($entryId)); - $session{form}{entryId} = 'list'; - return $_[0]->www_view(); -} - -#------------------------------------------------------------------- -sub www_deleteFieldConfirm { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $_[0]->deleteCollateral("DataForm_field","DataForm_fieldId",$session{form}{fid}); - $_[0]->reorderCollateral("DataForm_field","DataForm_fieldId"); - return ""; -} - -#------------------------------------------------------------------- -sub www_deleteTabConfirm { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $_[0]->deleteCollateral("DataForm_tab","DataForm_tabId",$session{form}{tid}); - $_[0]->deleteCollateral("DataForm_field","DataForm_tabId",$session{form}{tid}); - $_[0]->reorderCollateral("DataForm_tab","DataForm_tabId"); - return ""; -} - -#------------------------------------------------------------------- -sub www_edit { - my $layout = WebGUI::HTMLForm->new; - $layout->template( - -name=>"emailTemplateId", - -value=>$_[0]->getValue("emailTemplateId"), - -namespace=>$_[0]->get("namespace"), - -label=>WebGUI::International::get(80,$_[0]->get("namespace")), - -afterEdit=>'func=edit&wid='.$_[0]->get("wobjectId") - ); - $layout->template( - -name=>"acknowlegementTemplateId", - -value=>$_[0]->getValue("acknowlegementTemplateId"), - -namespace=>$_[0]->get("namespace"), - -label=>WebGUI::International::get(81,$_[0]->get("namespace")), - -afterEdit=>'func=edit&wid='.$_[0]->get("wobjectId") - ); - $layout->template( - -name=>"listTemplateId", - -value=>$_[0]->getValue("listTemplateId"), - -namespace=>$_[0]->get("namespace")."/List", - -label=>WebGUI::International::get(87,$_[0]->get("namespace")), - -afterEdit=>'func=edit&wid='.$_[0]->get("wobjectId") - ); - my $properties = WebGUI::HTMLForm->new; - $properties->HTMLArea( - -name=>"acknowledgement", - -label=>WebGUI::International::get(16, $_[0]->get("namespace")), - -value=>($_[0]->get("acknowledgement") || WebGUI::International::get(3, $_[0]->get("namespace"))) - ); - $properties->yesNo( - -name=>"mailData", - -label=>WebGUI::International::get(74,$_[0]->get("namespace")), - -value=>$_[0]->getValue("mailData") - ); - if ($_[0]->get("wobjectId") eq "new") { - $properties->whatNext( - -options=>{ - addField=>WebGUI::International::get(76,$_[0]->get("namespace")), - backToPage=>WebGUI::International::get(745) - }, - -value=>"addField" - ); - } - return $_[0]->SUPER::www_edit( - -properties=>$properties->printRowsOnly, - -layout=>$layout->printRowsOnly, - -helpId=>"data form add/edit", - -headingId=>7 - ); -} - -#------------------------------------------------------------------- -sub www_editSave { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $_[0]->SUPER::www_editSave(); - if ($session{form}{wid} eq "new") { - $_[0]->setCollateral("DataForm_field","DataForm_fieldId",{ - DataForm_fieldId=>"new", - name=>"from", - label=>WebGUI::International::get(10,$_[0]->get("namespace")), - status=>"editable", - isMailField=>1, - width=>0, - type=>"email" - }); - $_[0]->setCollateral("DataForm_field","DataForm_fieldId",{ - DataForm_fieldId=>"new", - name=>"to", - label=>WebGUI::International::get(11,$_[0]->get("namespace")), - status=>"hidden", - isMailField=>1, - width=>0, - type=>"email", - defaultValue=>$session{setting}{companyEmail} - }); - $_[0]->setCollateral("DataForm_field","DataForm_fieldId",{ - DataForm_fieldId=>"new", - name=>"cc", - label=>WebGUI::International::get(12,$_[0]->get("namespace")), - status=>"hidden", - isMailField=>1, - width=>0, - type=>"email" - }); - $_[0]->setCollateral("DataForm_field","DataForm_fieldId",{ - DataForm_fieldId=>"new", - name=>"bcc", - label=>WebGUI::International::get(13,$_[0]->get("namespace")), - status=>"hidden", - isMailField=>1, - width=>0, - type=>"email" - }); - $_[0]->setCollateral("DataForm_field","DataForm_fieldId",{ - DataForm_fieldId=>"new", - name=>"subject", - label=>WebGUI::International::get(14,$_[0]->get("namespace")), - status=>"editable", - isMailField=>1, - width=>0, - type=>"text", - defaultValue=>WebGUI::International::get(2,$_[0]->get("namespace")) - }); - } - if ($session{form}{proceed} eq "addField") { - return $_[0]->www_editField(); - } - return ""; -} - -#------------------------------------------------------------------- -sub www_editField { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - my (%field, $f, %fieldStatus,$tab); - tie %field, 'Tie::CPHash'; - tie %fieldStatus, 'Tie::IxHash'; - - %fieldStatus = ( - "hidden" => WebGUI::International::get(4, $_[0]->get("namespace")), - "visible" => WebGUI::International::get(5, $_[0]->get("namespace")), - "editable" => WebGUI::International::get(6, $_[0]->get("namespace")), - "required" => WebGUI::International::get(75, $_[0]->get("namespace")) - ); - $session{form}{fid} = "new" if ($session{form}{fid} eq ""); - unless ($session{form}{fid} eq "new") { - %field = WebGUI::SQL->quickHash("select * from DataForm_field where DataForm_fieldId=".quote($session{form}{fid})); - } - $tab = WebGUI::SQL->buildHashRef("select DataForm_tabId,label from DataForm_tab where wobjectId=".quote($_[0]->get("wobjectId"))); - $tab->{0} = $_[0]->i18n("no tab"); - $f = WebGUI::HTMLForm->new; - $f->hidden("wid",$_[0]->get("wobjectId")); - $f->hidden("fid",$session{form}{fid}); - $f->hidden("func","editFieldSave"); - $f->text( - -name=>"label", - -label=>WebGUI::International::get(77,$_[0]->get("namespace")), - -value=>$field{label} - ); - $f->text( - -name=>"name", - -label=>WebGUI::International::get(21,$_[0]->get("namespace")), - -value=>$field{name} - ); - if($field{sequenceNumber} && ! $field{isMailField}) { - $f->integer( - -name=>"position", - -label=>WebGUI::International::get('Field Position',$_[0]->get("namespace")), - -value=>$field{sequenceNumber} - ); - } - $f->select( - -name=>"tid", - -options=>$tab, - -label=>WebGUI::International::get(104,$_[0]->get("namespace")), - -value=>[ $field{DataForm_tabId}] || [0] - ); - $f->text( - -name=>"subtext", - -value=>$field{subtext}, - -label=>WebGUI::International::get(79,$_[0]->get("namespace")), - ); - $f->select( - -name=>"status", - -options=>\%fieldStatus, - -label=>WebGUI::International::get(22,$_[0]->get("namespace")), - -value=>[ $field{status} ||= "editable" ] - ); - $f->fieldType( - -name=>"type", - -label=>WebGUI::International::get(23,$_[0]->get("namespace")), - -value=>[$field{type} ||= "text"] - ); - $f->integer( - -name=>"width", - -label=>WebGUI::International::get(8, $_[0]->get("namespace")), - -value=>($field{width} || 0) - ); - $f->integer( - -name=>"rows", - -value=>$field{rows} || 0, - -label=>WebGUI::International::get(27, $_[0]->get("namespace")), - -subtext=>WebGUI::International::get(28, $_[0]->get("namespace")), - ); - $f->yesNo( - -name=>"vertical", - -value=>$field{vertical}, - -label=>WebGUI::International::get('editField-vertical-label', $_[0]->get("namespace")), - -subtext=>WebGUI::International::get('editField-vertical-subtext', $_[0]->get("namespace")) - ); - $f->text( - -name=>"extras", - -value=>$field{extras}, - -label=>WebGUI::International::get('editField-extras-label', $_[0]->get("namespace")) - ); - $f->textarea( - -name=>"possibleValues", - -label=>WebGUI::International::get(24,$_[0]->get("namespace")), - -value=>$field{possibleValues}, - -subtext=>'
'.WebGUI::International::get(85,$_[0]->get("namespace")) - ); - $f->textarea( - -name=>"defaultValue", - -label=>WebGUI::International::get(25,$_[0]->get("namespace")), - -value=>$field{defaultValue}, - -subtext=>'
'.WebGUI::International::get(85,$_[0]->get("namespace")) - ); - if ($session{form}{fid} eq "new") { - $f->whatNext( - -options=>{ - addField=>WebGUI::International::get(76,$_[0]->get("namespace")), - backToPage=>WebGUI::International::get(745) - }, - -value=>"addField" - ); - } - $f->submit; - return $_[0]->adminConsole($f->print,'20',"data form fields add/edit"); -} - -#------------------------------------------------------------------- -sub www_editFieldSave { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $session{form}{name} = $session{form}{label} if ($session{form}{name} eq ""); - $session{form}{tid} = "0" if ($session{form}{tid} eq ""); - $session{form}{name} = WebGUI::URL::urlize($session{form}{name}); - $session{form}{name} =~ s/\-//g; - $session{form}{name} =~ s/\///g; - $_[0]->setCollateral("DataForm_field","DataForm_fieldId",{ - DataForm_fieldId=>$session{form}{fid}, - width=>$session{form}{width}, - name=>$session{form}{name}, - label=>$session{form}{label}, - DataForm_tabId=>$session{form}{tid}, - status=>$session{form}{status}, - type=>$session{form}{type}, - possibleValues=>$session{form}{possibleValues}, - defaultValue=>$session{form}{defaultValue}, - subtext=>$session{form}{subtext}, - rows=>$session{form}{rows}, - vertical=>$session{form}{vertical}, - extras=>$session{form}{extras}, - }, "1","1", _tonull("DataForm_tabId",$session{form}{tid})); - if($session{form}{position}) { - WebGUI::SQL->write("update DataForm_field set sequenceNumber=".quote($session{form}{position}). - " where DataForm_fieldId=".quote($session{form}{fid})); - } - $_[0]->reorderCollateral("DataForm_field","DataForm_fieldId", _tonull("DataForm_tabId",$session{form}{tid})) if ($session{form}{fid} ne "new"); - if ($session{form}{proceed} eq "addField") { - $session{form}{fid} = "new"; - return $_[0]->www_editField(); - } - return ""; -} - -#------------------------------------------------------------------- -sub www_editTab { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - my (%tab, $f); - tie %tab, 'Tie::CPHash'; - - $session{form}{tid} = "new" if ($session{form}{tid} eq ""); - unless ($session{form}{tid} eq "new") { - %tab = WebGUI::SQL->quickHash("select * from DataForm_tab where DataForm_tabId=".quote($session{form}{tid})); - } - $f = WebGUI::HTMLForm->new; - $f->hidden("wid",$_[0]->get("wobjectId")); - $f->hidden("tid",$session{form}{tid}); - $f->hidden("func","editTabSave"); - $f->text( - -name=>"label", - -label=>WebGUI::International::get(101,$_[0]->get("namespace")), - -value=>$tab{label} - ); - $f->textarea( - -name=>"subtext", - -label=>WebGUI::International::get(102,$_[0]->get("namespace")), - -value=>$tab{subtext}, - -subtext=>"" - ); - if ($session{form}{tid} eq "new") { - $f->whatNext( - -options=>{ - addTab=>WebGUI::International::get(103,$_[0]->get("namespace")), - - backToPage=>WebGUI::International::get(745) - }, - -value=>"addTab" - ); - } - $f->submit; - return $_[0]->adminConsole($f->print,'20',"data form fields add/edit"); -} - -#------------------------------------------------------------------- -sub www_editTabSave { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $session{form}{name} = $session{form}{label} if ($session{form}{name} eq ""); - $session{form}{name} = WebGUI::URL::urlize($session{form}{name}); - $session{form}{name} =~ s/\-//g; - $session{form}{name} =~ s/\///g; - $_[0]->setCollateral("DataForm_tab","DataForm_tabId",{ - DataForm_tabId=>$session{form}{tid}, - label=>$session{form}{label}, - subtext=>$session{form}{subtext} - }); - if ($session{form}{proceed} eq "addTab") { - $session{form}{tid} = "new"; - return $_[0]->www_editTab(); - } - return ""; -} - -#------------------------------------------------------------------- -sub www_exportTab { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - WebGUI::HTTP::setFilename(WebGUI::URL::urlize($_[0]->get("title")).".tab","text/plain"); - my %fields = WebGUI::SQL->buildHash("select DataForm_fieldId,name from DataForm_field where wobjectId=".quote($_[0]->get("wobjectId"))." order by sequenceNumber"); - my $select = "select a.DataForm_entryId as entryId, a.ipAddress, a.username, a.userId, a.submissionDate"; - my $from = " from DataForm_entry a"; - my $join; - my $where = " where a.wobjectId=".quote($_[0]->get("wobjectId")); - my $orderBy = " order by a.DataForm_entryId"; - my $columnCounter = "b"; - foreach my $fieldId (keys %fields) { - my $extension = ""; - $extension = "mail_" if (isIn($fields{$fieldId}, qw(to from cc bcc subject))); - $select .= ", ".$columnCounter.".value as ".$extension.$fields{$fieldId}; - $join .= " left join DataForm_entryData ".$columnCounter." on a.DataForm_entryId=".$columnCounter.".DataForm_entryId and " - .$columnCounter.".DataForm_fieldId=".quote($fieldId); - $columnCounter++; - } - return WebGUI::SQL->quickTab($select.$from.$join.$where.$orderBy); -} - -#------------------------------------------------------------------- -sub www_moveFieldDown { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $_[0]->moveCollateralDown("DataForm_field","DataForm_fieldId",$session{form}{fid},_tonull("DataForm_tabId",$session{form}{tid})); - return ""; -} - -#------------------------------------------------------------------- -sub www_moveFieldUp { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $_[0]->moveCollateralUp("DataForm_field","DataForm_fieldId",$session{form}{fid},_tonull("DataForm_tabId",$session{form}{tid})); - return ""; -} - -#------------------------------------------------------------------- -sub www_moveTabRight { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $_[0]->moveCollateralDown("DataForm_tab","DataForm_tabId",$session{form}{tid}); - return ""; -} - -#------------------------------------------------------------------- -sub www_moveTabLeft { - return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); - $_[0]->moveCollateralUp("DataForm_tab","DataForm_tabId",$session{form}{tid}); - return ""; -} - -#------------------------------------------------------------------- -sub www_process { - my $entryId = $_[0]->setCollateral("DataForm_entry","DataForm_entryId",{ - DataForm_entryId=>$session{form}{entryId}, - wobjectId=>$_[0]->get("wobjectId"), - userId=>$session{user}{userId}, - username=>$session{user}{username}, - ipAddress=>$session{env}{REMOTE_ADDR}, - submissionDate=>time() - },0); - my ($var, %row, @errors, $updating, $hadErrors); - $var->{entryId} = $entryId; - tie %row, "Tie::CPHash"; - my $sth = WebGUI::SQL->read("select DataForm_fieldId,label,name,status,type,defaultValue,isMailField from DataForm_field - where wobjectId=".quote($_[0]->get("wobjectId"))." order by sequenceNumber"); - while (%row = $sth->hash) { - my $value = $row{defaultValue}; - if ($row{status} eq "required" || $row{status} eq "editable") { - $value = WebGUI::FormProcessor::process($row{name},$row{type},$row{defaultValue}); - $value = WebGUI::Macro::filter($value); - } - if ($row{status} eq "required" && ($value =~ /^\s$/ || $value eq "" || not defined $value)) { - push (@errors,{ - "error.message"=>$row{label}." ".WebGUI::International::get(29,$_[0]->get("namespace")).".", - }); - $hadErrors = 1; - delete $var->{entryId}; - } - if ($row{status} eq "hidden") { - $value = WebGUI::Macro::process($row{defaultValue}); - } - unless ($hadErrors) { - my ($exists) = WebGUI::SQL->quickArray("select count(*) from DataForm_entryData where DataForm_entryId=".quote($entryId)." - and DataForm_fieldId=".quote($row{DataForm_fieldId})); - if ($exists) { - WebGUI::SQL->write("update DataForm_entryData set value=".quote($value)." - where DataForm_entryId=".quote($entryId)." and DataForm_fieldId=".quote($row{DataForm_fieldId})); - $updating = 1; - } else { - WebGUI::SQL->write("insert into DataForm_entryData (DataForm_entryId,DataForm_fieldId,wobjectId,value) values - (".quote($entryId).", ".quote($row{DataForm_fieldId}).", ".quote($_[0]->get("wobjectId")).", ".quote($value).")"); - } - } - } - $sth->finish; - $var->{error_loop} = \@errors; - $var = $_[0]->getRecordTemplateVars($var); - if ($hadErrors && !$updating) { - WebGUI::SQL->write("delete from DataForm_entryData where DataForm_entryId=".quote($entryId)); - $_[0]->deleteCollateral("DataForm_entry","DataForm_entryId",$entryId); - $_[0]->www_view($var); - } else { - $_[0]->sendEmail($var) if ($_[0]->get("mailData") && !$updating); - return $_[0]->processTemplate($_[0]->get("acknowlegementTemplateId"),$var); - } -} - -#------------------------------------------------------------------- -sub www_view { - $_[0]->logView() if ($session{setting}{passiveProfilingEnabled}); - my $var; - $var->{entryId} = $session{form}{entryId} if ($_[0]->canEdit); - if ($var->{entryId} eq "list" && $_[0]->canEdit) { - return $_[0]->processTemplate($_[0]->get("listTemplateId"),$_[0]->getListTemplateVars,"DataForm/List"); - } - # add Tab StyleSheet and JavaScript - WebGUI::Style::setLink('/extras/tabs/tabs.css', {"type"=>"text/css"}); - WebGUI::Style::setScript('/extras/tabs/tabs.js', {"language"=>"JavaScript"}); - $var = $_[1] || $_[0]->getRecordTemplateVars($var); - return $_[0]->processTemplate($_[0]->get("templateId"),$var); -} - - -1; - -