From bb263b47771fa1cbeb83976a05134d901235e697 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 30 Jan 2006 23:54:45 +0000 Subject: [PATCH] finished converting view() methods to have a prepareView() companion. --- docs/changelog/6.x.x.txt | 4 ++ docs/migration.txt | 12 +++++ lib/WebGUI/Asset/Wobject/DataForm.pm | 47 ++++++++++++------- lib/WebGUI/Asset/Wobject/Product.pm | 20 +++++++- lib/WebGUI/Asset/Wobject/SQLReport.pm | 19 +++++++- lib/WebGUI/Asset/Wobject/Search.pm | 19 +++++++- lib/WebGUI/Asset/Wobject/StockData.pm | 19 +++++++- lib/WebGUI/Asset/Wobject/Survey.pm | 20 +++++++- lib/WebGUI/Asset/Wobject/SyndicatedContent.pm | 19 +++++++- lib/WebGUI/Asset/Wobject/WSClient.pm | 19 +++++++- lib/WebGUI/Asset/Wobject/WeatherData.pm | 19 +++++++- lib/WebGUI/Asset/Wobject/_NewWobject.skeleton | 19 +++++++- 12 files changed, 208 insertions(+), 28 deletions(-) diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index d9f8ef9e5..5095941a3 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -7,6 +7,10 @@ - Added "201" http status to various entity creation responses. - Replaced the old search engine system with a brand new one, that is more powerful, easier to use, and more flexible. + - Added output chunking as an option for asset www_ methods. The net effect + of this provides a fairly significant performance increase to what would + otherwise be slow or complex pages. More details in migration.txt. + 6.8.6 - Added logic to deal with case sensitivity and whitespace problems in LDAP diff --git a/docs/migration.txt b/docs/migration.txt index 03e664b7f..44698e2fb 100644 --- a/docs/migration.txt +++ b/docs/migration.txt @@ -194,6 +194,18 @@ In 6.8 the long depricated method processMacros() was removed. No one should be using this any longer anyway, but we thought we'd warn you anyway. +1.8 Output Chunking + +Starting in 6.9 WebGUI www_ asset methods are capable of having full control +over the output buffer. They can use $session->output->print() to send chunks +of content back to the browser before the page is entirely processed. The +advantage here is that the page appears to load more quickly to the end user. +The disadvantage is that you must set up any HTTP and HTML headers before you +start to send any content. The view() method now has a companion method called +prepareView() in which HTML and HTTP headers must be set. See any of the +existing assets and wobjects for implementation details. + + 2. Macro Migration ------------------- diff --git a/lib/WebGUI/Asset/Wobject/DataForm.pm b/lib/WebGUI/Asset/Wobject/DataForm.pm index 69be49f41..2ba0ecffc 100644 --- a/lib/WebGUI/Asset/Wobject/DataForm.pm +++ b/lib/WebGUI/Asset/Wobject/DataForm.pm @@ -516,6 +516,32 @@ sub getRecordTemplateVars { +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + # this one is so nutz that we don't even bother preparing, we just execute the whole thing + my $passedVars = shift; + ##Priority encoding + if ( $self->session->form->process("mode") eq "form") { + $self->{_view} = $self->viewForm($passedVars); + } elsif ( $self->session->form->process("mode") eq "list") { + $self->{_view} = $self->viewList; + } elsif( $self->defaultViewForm ) { + $self->{_view} = $self->viewForm($passedVars); + } else { + $self->{_view} = $self->viewList(); + } +} + + #------------------------------------------------------------------- sub processPropertiesFromFormPost { my $self = shift; @@ -646,21 +672,7 @@ sub sendEmail { #------------------------------------------------------------------- sub view { my $self = shift; - my $passedVars = shift; - my $var; - ##Priority encoding - if ( $self->session->form->process("mode") eq "form") { - return $self->viewForm($passedVars); - } - elsif ( $self->session->form->process("mode") eq "list") { - return $self->viewList; - } - elsif( $self->defaultViewForm ) { - return $self->viewForm($passedVars); - } - else { - return $self->viewList(); - } + return $self->{_view}; # see prepareView() } #------------------------------------------------------------------- @@ -676,9 +688,9 @@ sub viewList { sub viewForm { my $self = shift; my $passedVars = shift; + my $var; $self->session->style->setLink($self->session->config->get("extrasURL").'/tabs/tabs.css', {"type"=>"text/css"}); $self->session->style->setScript($self->session->config->get("extrasURL").'/tabs/tabs.js', {"type"=>"text/javascript"}); - my $var; $var->{entryId} = $self->session->form->process("entryId") if ($self->canEdit); $var = $passedVars || $self->getRecordTemplateVars($var); return $self->processTemplate($var,$self->get("templateId")); @@ -1100,7 +1112,8 @@ sub www_process { if ($hadErrors && !$updating) { $self->session->db->write("delete from DataForm_entryData where DataForm_entryId=".$self->session->db->quote($entryId)); $self->deleteCollateral("DataForm_entry","DataForm_entryId",$entryId); - $self->processStyle($self->view($var)); + $self->prepareView($var); + $self->processStyle($self->view); } else { $self->sendEmail($var) if ($self->get("mailData") && !$updating); return $self->session->style->process($self->processTemplate($var,$self->get("acknowlegementTemplateId")),$self->get("styleTemplateId")) if $self->defaultViewForm; diff --git a/lib/WebGUI/Asset/Wobject/Product.pm b/lib/WebGUI/Asset/Wobject/Product.pm index c7ba0a7a1..1818bdbc4 100644 --- a/lib/WebGUI/Asset/Wobject/Product.pm +++ b/lib/WebGUI/Asset/Wobject/Product.pm @@ -295,6 +295,23 @@ sub indexContent { } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- sub purge { my $self = shift; @@ -720,7 +737,6 @@ sub www_moveSpecificationUp { #------------------------------------------------------------------- sub view { my $self = shift; - $self->logView() if ($self->session->setting->get("passiveProfilingEnabled")); my (%data, $sth, $file, $segment, %var, @featureloop, @benefitloop, @specificationloop, @accessoryloop, @relatedloop); tie %data, 'Tie::CPHash'; my $brochure = $self->get("brochure"); @@ -863,7 +879,7 @@ sub view { } $sth->finish; $var{relatedproduct_loop} = \@relatedloop; - return $self->processTemplate(\%var, $self->get("templateId")); + return $self->processTemplate(\%var, undef, $self->{_viewTemplate}); } 1; diff --git a/lib/WebGUI/Asset/Wobject/SQLReport.pm b/lib/WebGUI/Asset/Wobject/SQLReport.pm index 6cc1407b9..694dada5d 100644 --- a/lib/WebGUI/Asset/Wobject/SQLReport.pm +++ b/lib/WebGUI/Asset/Wobject/SQLReport.pm @@ -234,6 +234,23 @@ sub getEditForm { } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- sub view { my $self = shift; @@ -249,7 +266,7 @@ sub view { # Add debug loop to template vars $var->{'debug_loop'} = $self->{_debug_loop}; #use Data::Dumper; return '
'.Dumper($var).'
'; - return $self->processTemplate($var, $self->get("templateId")); + return $self->processTemplate($var, undef, $self->{_viewTemplate}); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Wobject/Search.pm b/lib/WebGUI/Asset/Wobject/Search.pm index b3a048745..aed74265a 100644 --- a/lib/WebGUI/Asset/Wobject/Search.pm +++ b/lib/WebGUI/Asset/Wobject/Search.pm @@ -91,6 +91,23 @@ sub definition { return $class->SUPER::definition($session, $definition); } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- =head2 view ( ) @@ -110,7 +127,7 @@ sub view { $var{'form_submit'} = WebGUI::Form::submit($self->session, {value=>$i18n->get("search")}); $var{'form_keywords'} = WebGUI::Form::text($self->session, {name=>"keywords", value=>$self->session->form->get("keywords")}); -# return $self->processTemplate(\%var, $templateId); + return $self->processTemplate(\%var, undef, $self->{_viewTemplate}); } 1; diff --git a/lib/WebGUI/Asset/Wobject/StockData.pm b/lib/WebGUI/Asset/Wobject/StockData.pm index 3f6fb3e39..e3270f884 100644 --- a/lib/WebGUI/Asset/Wobject/StockData.pm +++ b/lib/WebGUI/Asset/Wobject/StockData.pm @@ -357,6 +357,23 @@ sub getEditForm { return $tabform; } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- =head2 purge ( ) @@ -416,7 +433,7 @@ sub view { push (@stocks, $hash); } $var->{'stocks.loop'} = \@stocks; - return $self->processTemplate($var, $self->get("templateId")); + return $self->processTemplate($var, undef, $self->{_viewTemplate}); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Wobject/Survey.pm b/lib/WebGUI/Asset/Wobject/Survey.pm index 3d344ee63..a41135cda 100644 --- a/lib/WebGUI/Asset/Wobject/Survey.pm +++ b/lib/WebGUI/Asset/Wobject/Survey.pm @@ -559,6 +559,23 @@ sub getUserId { return $userId; } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- sub processPropertiesFromFormPost { my $self = shift; @@ -603,7 +620,6 @@ sub setAnswerType { #------------------------------------------------------------------- sub view { my $self = shift; - $self->logView() if ($self->session->setting->get("passiveProfilingEnabled")); my $i18n = WebGUI::International->new($self->session, 'Asset_Survey'); my $var = $self->getMenuVars; $var->{'question.add.url'} = $self->getUrl('func=editQuestion;qid=new'); @@ -689,7 +705,7 @@ sub view { $var->{'mode.isSurvey'} = ($self->get("mode") eq "survey"); $var->{'survey.noprivs.label'} = $i18n->get(48); $var->{'quiz.noprivs.label'} = $i18n->get(49); - return $self->processTemplate($var, $self->get("templateId")); + return $self->processTemplate($var, undef, $self->{_viewTemplate}); } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm b/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm index b8dcc59c9..e07690eec 100644 --- a/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm +++ b/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm @@ -469,6 +469,23 @@ sub _get_items { } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ =head2 view() @@ -519,7 +536,7 @@ sub view { return $rss; } else { - return $self->processTemplate(\%var,$self->get('templateId')); + return $self->processTemplate(\%var,undef, $self->{_viewTemplate}); } } diff --git a/lib/WebGUI/Asset/Wobject/WSClient.pm b/lib/WebGUI/Asset/Wobject/WSClient.pm index 7750903ed..801559fee 100644 --- a/lib/WebGUI/Asset/Wobject/WSClient.pm +++ b/lib/WebGUI/Asset/Wobject/WSClient.pm @@ -215,6 +215,23 @@ sub getEditForm { return $tabform; } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- sub view { my ( $arr_ref, # temp var holding params @@ -481,7 +498,7 @@ sub view { } $var{'results'} = \@result; - return $self->processTemplate(\%var, $self->get("templateId")); + return $self->processTemplate(\%var, undef, $self->{_viewTemplate}); } diff --git a/lib/WebGUI/Asset/Wobject/WeatherData.pm b/lib/WebGUI/Asset/Wobject/WeatherData.pm index c30592631..2ba955cd6 100644 --- a/lib/WebGUI/Asset/Wobject/WeatherData.pm +++ b/lib/WebGUI/Asset/Wobject/WeatherData.pm @@ -183,6 +183,23 @@ sub _trim { return $str; } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- =head2 view ( ) @@ -208,7 +225,7 @@ sub view { push(@locs, $self->_getLocationData($array[$i])); } $var->{'ourLocations.loop'} = \@locs; - return $self->processTemplate($var, $self->get("templateId")); + return $self->processTemplate($var, undef, $self->{_viewTemplate}); } diff --git a/lib/WebGUI/Asset/Wobject/_NewWobject.skeleton b/lib/WebGUI/Asset/Wobject/_NewWobject.skeleton index 5aed1a859..e9c4cfc91 100644 --- a/lib/WebGUI/Asset/Wobject/_NewWobject.skeleton +++ b/lib/WebGUI/Asset/Wobject/_NewWobject.skeleton @@ -112,6 +112,23 @@ sub getEditForm { return $tabform; } +#------------------------------------------------------------------- + +=head2 prepareView ( ) + +See WebGUI::Asset::prepareView() for details. + +=cut + +sub prepareView { + my $self = shift; + $self->SUPER::prepareView(); + my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId")); + $template->prepare; + $self->{_viewTemplate} = $template; +} + + #------------------------------------------------------------------- =head2 purge ( ) @@ -149,7 +166,7 @@ sub view { #This is an example of debugging code to help you diagnose problems. #WebGUI::ErrorHandler::warn($self->get("templateId")); - return $self->processTemplate($var, $self->get("templateId")); + return $self->processTemplate($var, undef, $self->{_viewTemplate}); } #-------------------------------------------------------------------