package WebGUI::Fork::ProgressTree; =head1 LEGAL ------------------------------------------------------------------- WebGUI is Copyright 2001-2009 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 ------------------------------------------------------------------- =cut use strict; use warnings; =head1 NAME WebGUI::Fork::ProgressTree =head1 DESCRIPTION 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: =cut use Template; use HTML::Entities; use JSON; use WebGUI::Fork::ProgressBar; my $template = <<'TEMPLATE';
[% i18n('WebGUI', 'Loading...') %]
TEMPLATE #------------------------------------------------------------------- =head2 handler ( process ) See WebGUI::Operation::Fork. =cut sub handler { my $process = shift; my $session = $process->session; my $url = $session->url; WebGUI::Fork::ProgressBar::renderBar($process, $template, { css => [ $url->extras('Fork/ProgressTree.css') ], js => [ $url->extras('underscore/underscore-min.js') ], } ); } 1;