diff --git a/lib/WebGUI/Fork.pm b/lib/WebGUI/Fork.pm index 0b0761087..e9b02e704 100644 --- a/lib/WebGUI/Fork.pm +++ b/lib/WebGUI/Fork.pm @@ -27,6 +27,7 @@ status of. sub doWork { my ($process, $data) = @_; + # Update our status $process->update("Starting..."); ... $process->update("About half way done..."); @@ -46,6 +47,7 @@ status of. return 'redirect'; } + # Display a page with the status of the fork package WebGUI::Operation::Fork::DoWork; sub handler { @@ -56,6 +58,19 @@ status of. # or better yet, an ajaxy page that polls. } + # For ways of displaying status from a fork, see + # WebGUI::Fork::ProgressTree + # WebGUI::Fork::ProgressBar + +=head1 SEE ALSO + +=over 4 + +=item L + +=item L + +=back =head1 LEGAL diff --git a/lib/WebGUI/Fork/ProgressTree.pm b/lib/WebGUI/Fork/ProgressTree.pm index d361e2608..bcdf6246a 100644 --- a/lib/WebGUI/Fork/ProgressTree.pm +++ b/lib/WebGUI/Fork/ProgressTree.pm @@ -26,6 +26,65 @@ WebGUI::Fork::ProgressTree Renders an admin console page that polls ::Status to draw a friendly graphical representation of how progress on a tree of assets is coming along. +=head1 SYNOPSIS + + package MyClass; + + # User has requested we do some work + sub www_doWork { + my ( $self ) = @_; + + # Get the assets that need work + my @assetIds = (); + + # Start the fork with our "doWork" sub + my $process = WebGUI::Fork->start( + $self->session, 'MyClass', 'doWork', + { assetIds => \@assetIds }, + ); + + # Get the URL for a status page + my $statusUrl = $process->contentPairs( 'ProgressTree', { + title => 'Doing Work', + icon => 'assets', + proceed => '/home?message=Work%20Done', + } ); + + # Go to the status page + $self->session->response->location( $statusUrl ); + return 'redirect'; + } + + # Do the work of our WebGUI::Fork + sub doWork { + my ( $process, $args ) = @_; + # All the Assets we need to work on + my $assetIds = $args->{ assetIds }; + + # Build a tree and update process status + my $tree = WebGUI::ProgressTree->new( $process->session, $assetIds ); + $process->update( sub { $tree->json } ); + + # Do the actual work + for my $id ( @$assetIds ) { + # ... Do something + + # Update our tree and process again + $tree->update( $id, "Done!" ); + $process->update( sub { $tree->json } ); + } + } + +=head1 SEE ALSO + +=over 4 + +=item WebGUI::ProgressTree + +Stores the data for the asset tree we are working on + +=back + =head1 SUBROUTINES These subroutines are available from this package: