diff --git a/docs/upgrades/upgrade_5.9.9-6.0.0.sql b/docs/upgrades/upgrade_5.9.9-6.0.0.sql index 0707e2770..cead1d8a6 100644 --- a/docs/upgrades/upgrade_5.9.9-6.0.0.sql +++ b/docs/upgrades/upgrade_5.9.9-6.0.0.sql @@ -309,4 +309,24 @@ UPDATE userProfileData set fieldData = '2' where fieldName = 'richEditor' and fi UPDATE userProfileData set fieldData = '3' where fieldName = 'richEditor' and fieldData = 'midas'; UPDATE userProfileData set fieldData = '4' where fieldName = 'richEditor' and fieldData = 'classic'; UPDATE userProfileData set fieldData = '5' where fieldName = 'richEditor' and fieldData = 'lastResort'; - +-- DataForm +CREATE TABLE DataForm_tab ( + wobjectId int(11) NOT NULL default '0', + label varchar(255) NOT NULL default '', + subtext text, + sequenceNumber int(11) NOT NULL default '0', + DataForm_tabId int(11) NOT NULL default '0' +) TYPE=MyISAM; +ALTER TABLE DataForm_field ADD(DataForm_tabId int(11) NOT NULL default '0'); +DELETE FROM template WHERE namespace = 'DataForm' and templateId = 1; +INSERT INTO incrementer VALUES ('DataForm_tabId',1000); +INSERT INTO international VALUES (106,'DataForm',1,'Tab Template',NULL,NULL); +INSERT INTO international VALUES (105,'DataForm',1,'Add a Tab',NULL,NULL); +INSERT INTO international VALUES (104,'DataForm',1,'Tab',NULL,NULL); +INSERT INTO international VALUES (103,'DataForm',1,'Add new Tab',NULL,NULL); +INSERT INTO international VALUES (102,'DataForm',1,'Subtext',NULL,NULL); +INSERT INTO international VALUES (101,'DataForm',1,'Label',NULL,NULL); +INSERT INTO international VALUES (100,'DataForm',1,'Are you certain that you want to delete this tab ?',NULL,NULL); +INSERT INTO template VALUES (1,'Mail Form','\r\n

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n

\r\n\r\n\r\n\r\n \">\r\n · \">\r\n \r\n · \">\r\n \r\n \r\n · \">\r\n · \">\r\n \r\n

\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n *\r\n
\r\n
\r\n\r\n\r\n','DataForm'); +INSERT INTO template VALUES (4,'Tab Form','\r\n

\r\n
\r\n\r\n\r\n \r\n\r\n\r\n\r\n

\r\n\r\n\r\n\r\n \">\r\n · \">\r\n \r\n · \">\r\n \r\n \r\n · \">\r\n · \">\r\n \r\n

\r\n\r\n\r\n\r\n

\r\n \r\n )\" id=\"tab\" class=\"tab\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n *\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n','DataForm'); +-- DataForm diff --git a/lib/WebGUI/Wobject/DataForm.pm b/lib/WebGUI/Wobject/DataForm.pm index 9ae147d89..ed6d07cd5 100644 --- a/lib/WebGUI/Wobject/DataForm.pm +++ b/lib/WebGUI/Wobject/DataForm.pm @@ -24,6 +24,7 @@ use WebGUI::MessageLog; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; +use WebGUI::TabForm; use WebGUI::URL; use WebGUI::Wobject; use WebGUI::Utility; @@ -81,11 +82,31 @@ sub _createField { #------------------------------------------------------------------- sub _fieldAdminIcons { my $fid = $_[1]; + my $tid = $_[2]; my $output; - $output = deleteIcon('func=deleteField&wid='.$_[0]->get("wobjectId").'&fid='.$fid) unless ($_[2]); - $output .= editIcon('func=editField&wid='.$_[0]->get("wobjectId").'&fid='.$fid) - .moveUpIcon('func=moveFieldUp&wid='.$_[0]->get("wobjectId").'&fid='.$fid) - .moveDownIcon('func=moveFieldDown&wid='.$_[0]->get("wobjectId").'&fid='.$fid); + $output = deleteIcon('func=deleteField&wid='.$_[0]->get("wobjectId").'&fid='.$fid.'&tid='.$tid) 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=deleteTab&wid='.$_[0]->get("wobjectId").'&tid='.$tid) 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 _createTabInit { + my $wid = $_[0]; + my @tabCount = WebGUI::SQL->quickArray("select count(DataForm_tabId) from DataForm_tab where wobjectId=$wid"); + my $output = ''; return $output; } @@ -172,13 +193,17 @@ sub getRecordTemplateVars { $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 @fields; - my $where = "where a.wobjectId=".$self->get("wobjectId"); - my $select = "select a.name, a.DataForm_fieldId, a.label, a.status, a.isMailField, a.subtext, a.type, a.defaultValue, a.possibleValues, a.width, a.rows"; + 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"; my $join; + my $where = "where a.wobjectId=".$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}); @@ -194,36 +219,85 @@ sub getRecordTemplateVars { } my %data; tie %data, 'Tie::CPHash'; - my $sth = WebGUI::SQL->read("$select from DataForm_field as a $join $where order by a.sequenceNumber"); + my %tab; + tie %tab, 'Tie::CPHash'; + my $tabsth = WebGUI::SQL->read("select * from DataForm_tab where wobjectId=".$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=".$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) 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}); - } + $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"); + $value = WebGUI::DateTime::epochToHuman($value,"%z") if ($data{type} eq "date"); + $value = WebGUI::DateTime::epochToHuman($value) if ($data{type} eq "dateTime"); push(@fields,{ "field.form" => _createField(\%data), "field.name" => $data{name}, + "field.tid" => $data{DataForm_tabId}, "field.value" => $value, "field.label" => $data{label}, "field.isMailField" => $data{isMailField}, "field.isHidden" => $hidden, "field.isDisplayed" => ($data{status} eq "visible" && !$hidden), - "field.isEditable" => ($data{status} eq "editable" && !$hidden), "field.isRequired" => ($data{status} eq "required" && !$hidden), "field.subtext" => $data{subtext}, - "field.controls" => $self->_fieldAdminIcons($data{DataForm_fieldId},$data{isMailField}) - }); + "field.controls" => $self->_fieldAdminIcons($data{DataForm_fieldId},$data{DataForm_tabId},$data{isMailField}) + }); } $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"} = ""; @@ -266,6 +340,7 @@ sub purge { WebGUI::SQL->write("delete from DataForm_field where wobjectId=".$_[0]->get("wobjectId")); WebGUI::SQL->write("delete from DataForm_entry where wobjectId=".$_[0]->get("wobjectId")); WebGUI::SQL->write("delete from DataForm_entryData where wobjectId=".$_[0]->get("wobjectId")); + WebGUI::SQL->write("delete from DataForm_tab where wobjectId=".$_[0]->get("wobjectId")); $_[0]->SUPER::purge(); } @@ -339,6 +414,22 @@ sub www_deleteFieldConfirm { return ""; } +#------------------------------------------------------------------- +sub www_deleteTab { + return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); + return $_[0]->confirm(WebGUI::International::get(100,$_[0]->get("namespace")), + WebGUI::URL::page('func=deleteTabConfirm&wid='.$_[0]->get("wobjectId").'&tid='.$session{form}{tid})); +} + +#------------------------------------------------------------------- +sub www_deleteTabConfirm { + return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); + $_[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; @@ -454,7 +545,7 @@ sub www_editSave { sub www_editField { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); $session{page}{useAdminStyle} = 1; - my ($output, %field, $f, %fieldStatus); + my ($output, %field, $f, %fieldStatus,$tab); tie %field, 'Tie::CPHash'; tie %fieldStatus, 'Tie::IxHash'; @@ -468,6 +559,7 @@ sub www_editField { unless ($session{form}{fid} eq "new") { %field = WebGUI::SQL->quickHash("select * from DataForm_field where DataForm_fieldId=$session{form}{fid}"); } + $tab = WebGUI::SQL->buildHashRef("select DataForm_tabId,label from DataForm_tab where wobjectId=".$_[0]->get("wobjectId")); $output = helpIcon(2,$_[0]->get("namespace")); $output .= '

'.WebGUI::International::get(20,$_[0]->get("namespace")).'

'; $f = WebGUI::HTMLForm->new; @@ -484,6 +576,12 @@ sub www_editField { -label=>WebGUI::International::get(21,$_[0]->get("namespace")), -value=>$field{name} ); + $f->select( + -name=>"tid", + -options=>$tab, + -label=>WebGUI::International::get(104,$_[0]->get("namespace")), + -value=>[ $field{DataForm_tabId}] + ); $f->text( -name=>"subtext", -value=>$field{subtext}, @@ -541,6 +639,7 @@ sub www_editField { sub www_editFieldSave { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); $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; @@ -549,13 +648,15 @@ sub www_editFieldSave { 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} - }); + }, "1","1", "DataForm_tabId",$session{form}{tid}); + $_[0]->reorderCollateral("DataForm_field","DataForm_fieldId", "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(); @@ -563,6 +664,68 @@ sub www_editFieldSave { return ""; } +#------------------------------------------------------------------- +sub www_editTab { + return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); + $session{page}{useAdminStyle} = 1; + my ($output, %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=$session{form}{tid}"); + } + $output = helpIcon(2,$_[0]->get("namespace")); + $output .= '

'.WebGUI::International::get(20,$_[0]->get("namespace")).'

'; + $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; + $output .= $f->print; + return $output; +} + +#------------------------------------------------------------------- +sub www_editTabSave { + return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); + $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 (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); @@ -589,14 +752,28 @@ sub www_exportTab { #------------------------------------------------------------------- sub www_moveFieldDown { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); - $_[0]->moveCollateralDown("DataForm_field","DataForm_fieldId",$session{form}{fid}); + $_[0]->moveCollateralDown("DataForm_field","DataForm_fieldId",$session{form}{fid},"DataForm_tabId",$session{form}{tid}); return ""; } #------------------------------------------------------------------- sub www_moveFieldUp { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); - $_[0]->moveCollateralUp("DataForm_field","DataForm_fieldId",$session{form}{fid}); + $_[0]->moveCollateralUp("DataForm_field","DataForm_fieldId",$session{form}{fid},"DataForm_tabId",$session{form}{tid}); + return ""; +} + +#------------------------------------------------------------------- +sub www_moveTabRight { + return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); + $_[0]->moveCollateralDown("DataForm_tab","DataForm_tabId",$session{form}{tid}); + return ""; +} + +#------------------------------------------------------------------- +sub www_moveTabLeft { + return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))); + $_[0]->moveCollateralUp("DataForm_tab","DataForm_tabId",$session{form}{tid}); return ""; } @@ -661,6 +838,9 @@ sub www_view { if ($var->{entryId} eq "list" && WebGUI::Privilege::canEditWobject($_[0]->get("wobjectId"))) { return $_[0]->processTemplate($_[0]->get("listTemplateId"),$_[0]->getListTemplateVars,"DataForm/List"); } + # add Tab StyleSheet and JavaScript + $session{page}{head}{link}{'/extras/tabs/tabs.css'}{type} = 'text/css'; + $session{page}{head}{javascript}{'/extras/tabs/tabs.js'}{language} = 'JavaScript'; $var = $_[1] || $_[0]->getRecordTemplateVars($var); return $_[0]->processTemplate($_[0]->get("templateId"),$var); }