Migrate initial setup to WebGUI::Wizard
This commit is contained in:
parent
59b7de0d0c
commit
ce26a84e87
5 changed files with 43 additions and 614 deletions
|
|
@ -45,56 +45,6 @@ These subroutines are available from this package:
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 addAsset ( parent, properties )
|
||||
|
||||
A helper to add assets with less code.
|
||||
|
||||
=head3 parent
|
||||
|
||||
The parent asset to add to.
|
||||
|
||||
=head3 properties
|
||||
|
||||
A hash ref of properties to attach to the asset. One must be className.
|
||||
|
||||
=cut
|
||||
|
||||
sub addAsset {
|
||||
my $parent = shift;
|
||||
my $properties = shift;
|
||||
$properties->{url} = $parent->get("url") . "/" . $properties->{title};
|
||||
$properties->{groupIdEdit} = $parent->get("groupIdEdit");
|
||||
$properties->{groupIdView} = $parent->get("groupIdView");
|
||||
$properties->{ownerUserId} = $parent->get("ownerUserId");
|
||||
$properties->{styleTemplateId} = $parent->get("styleTemplateId");
|
||||
$properties->{printableStyleTemplateId} = $parent->get("styleTemplateId");
|
||||
return $parent->addChild($properties);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 addPage ( parent, title )
|
||||
|
||||
Adds a page to a parent page.
|
||||
|
||||
=head3 parent
|
||||
|
||||
A parent page asset.
|
||||
|
||||
=head3 title
|
||||
|
||||
The title of the new page.
|
||||
|
||||
=cut
|
||||
|
||||
sub addPage {
|
||||
my $parent = shift;
|
||||
my $title = shift;
|
||||
return addAsset( $parent, { title => $title, className => "WebGUI::Asset::Wobject::Layout", displayTitle => 0 } );
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 handler ( session )
|
||||
|
||||
Handles a specialState: "init"
|
||||
|
|
@ -111,537 +61,11 @@ sub handler {
|
|||
unless ( $session->setting->get("specialState") eq "init" ) {
|
||||
return undef;
|
||||
}
|
||||
$session->http->setCacheControl("none");
|
||||
my $i18n = WebGUI::International->new( $session, "WebGUI" );
|
||||
my ( $output, $legend ) = "";
|
||||
if ( $form->process("step") eq "2" ) {
|
||||
$legend = $i18n->get('company information');
|
||||
|
||||
my $timezone = $form->timeZone("timeZone");
|
||||
my $language = $form->selectBox("language");
|
||||
|
||||
##update Admin and Visitor users
|
||||
my $u = WebGUI::User->new( $session, "3" );
|
||||
$u->username( $form->process( "username", "text", "Admin" ) );
|
||||
$u->profileField( "email", $form->email("email") );
|
||||
$u->profileField( "timeZone", $timezone );
|
||||
$u->profileField( "language", $language );
|
||||
$u->identifier( Digest::MD5::md5_base64( $form->process( "identifier", "password", "123qwe" ) ) );
|
||||
|
||||
$u = WebGUI::User->new( $session, "1" );
|
||||
$u->profileField( "timeZone", $timezone );
|
||||
$u->profileField( "language", $language );
|
||||
|
||||
##update ProfileField defaults so new users the get the defaults, too
|
||||
my $properties;
|
||||
|
||||
my $zoneField = WebGUI::ProfileField->new( $session, 'timeZone' );
|
||||
$properties = $zoneField->get();
|
||||
$properties->{dataDefault} = $timezone;
|
||||
$zoneField->set($properties);
|
||||
|
||||
my $languageField = WebGUI::ProfileField->new( $session, 'language' );
|
||||
$properties = $languageField->get();
|
||||
$properties->{dataDefault} = $language;
|
||||
$languageField->set($properties);
|
||||
|
||||
my $f = WebGUI::HTMLForm->new( $session, action => $session->url->gateway() );
|
||||
$f->hidden( name => "step", value => "3" );
|
||||
$f->text(
|
||||
name => "companyName",
|
||||
value => $session->setting->get("companyName"),
|
||||
label => $i18n->get(125),
|
||||
hoverHelp => $i18n->get('125 description'),
|
||||
);
|
||||
$f->email(
|
||||
name => "companyEmail",
|
||||
value => $session->setting->get("companyEmail"),
|
||||
label => $i18n->get(126),
|
||||
hoverHelp => $i18n->get('126 description'),
|
||||
);
|
||||
$f->url(
|
||||
name => "companyURL",
|
||||
value => $session->setting->get("companyURL"),
|
||||
label => $i18n->get(127),
|
||||
hoverHelp => $i18n->get('127 description'),
|
||||
);
|
||||
$f->submit;
|
||||
$output .= $f->print;
|
||||
} ## end if ( $form->process("step"...))
|
||||
elsif ( $session->form->process("step") eq "3" ) {
|
||||
my $form = $session->form;
|
||||
$session->setting->set( 'companyName', $form->text("companyName") ) if ( $form->get("companyName") );
|
||||
$session->setting->set( 'companyURL', $form->url("companyURL") ) if ( $form->get("companyURL") );
|
||||
$session->setting->set( 'companyEmail', $form->email("companyEmail") ) if ( $form->get("companyEmail") );
|
||||
$legend = $i18n->get( 'topicName', 'Activity_SendWebguiStats' );
|
||||
$output .= ' <p>' . $i18n->get( 'why to send', 'Activity_SendWebguiStats' ) . '</p>
|
||||
<p>' . $i18n->get( 'would you participate', 'Activity_SendWebguiStats' ) . '</p>
|
||||
<p><a href="'
|
||||
. $session->url->gateway( undef, "step=sitestarter" ) . '">'
|
||||
. $i18n->get( 'disable', 'Activity_SendWebguiStats' )
|
||||
. '</a>
|
||||
<a href="'
|
||||
. $session->url->gateway( undef, "step=sitestarter;enableStats=1" ) . '">'
|
||||
. $i18n->get( 'enable', 'Activity_SendWebguiStats' )
|
||||
. '</a></p>
|
||||
';
|
||||
} ## end elsif ( $session->form->process...)
|
||||
elsif ( $session->form->process("step") eq "sitestarter" ) {
|
||||
my $form = $session->form;
|
||||
WebGUI::Operation::Statistics::www_enableSendWebguiStats($session) if ( $form->get("enableStats") );
|
||||
$legend = $i18n->get('site starter title');
|
||||
$output .= ' <p>' . $i18n->get('site starter body') . '</p>
|
||||
<p><a href="'
|
||||
. $session->url->gateway( undef, "step=7" ) . '">'
|
||||
. $i18n->get('no thanks')
|
||||
. '</a>
|
||||
<a href="' . $session->url->gateway( undef, "step=4" ) . '">' . $i18n->get('yes please') . '</a></p>
|
||||
';
|
||||
}
|
||||
elsif ( $session->form->process("step") eq "4" ) {
|
||||
my $f = WebGUI::HTMLForm->new( $session, action => $session->url->gateway() );
|
||||
$f->hidden( name => "step", value => "5", );
|
||||
$f->file( name => "logo", label => $i18n->get('logo') );
|
||||
$f->submit;
|
||||
$legend = $i18n->get('upload logo');
|
||||
$output .= $f->print;
|
||||
}
|
||||
elsif ( $session->form->process("step") eq "5" ) {
|
||||
my $storageId = $session->form->process( "logo", "image" );
|
||||
my $url = $session->url;
|
||||
my $logoUrl = $url->extras("plainblack.gif");
|
||||
if ( defined $storageId ) {
|
||||
my $storage = WebGUI::Storage->get( $session, $storageId );
|
||||
my $importNode = WebGUI::Asset->getImportNode($session);
|
||||
my $logo = addAsset(
|
||||
$importNode, {
|
||||
title => $storage->getFiles->[0],
|
||||
filename => $storage->getFiles->[0],
|
||||
isHidden => 1,
|
||||
storageId => $storageId,
|
||||
className => "WebGUI::Asset::File::Image",
|
||||
parameters => 'alt="' . $storage->getFiles->[0] . '"'
|
||||
}
|
||||
);
|
||||
$logoUrl = $logo->getStorageLocation->getUrl( $logo->get("filename") );
|
||||
}
|
||||
my $style = $session->style;
|
||||
$style->setLink( $url->extras('/yui/build/container/assets/skins/sam/container.css'),
|
||||
{ type => 'text/css', rel => "stylesheet" } );
|
||||
$style->setLink( $url->extras('/yui/build/colorpicker/assets/skins/sam/colorpicker.css'),
|
||||
{ type => 'text/css', rel => "stylesheet" } );
|
||||
$style->setScript( $url->extras('/yui/build/yahoo/yahoo-min.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras('/yui/build/event/event-min.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras('/yui/build/dom/dom-min.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras('/yui/build/dragdrop/dragdrop-min.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras('/yui/build/utilities/utilities.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras('/yui/build/container/container-min.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras('/yui/build/slider/slider-min.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras('/yui/build/colorpicker/colorpicker-min.js'), { type => 'text/javascript' } );
|
||||
$style->setLink( $url->extras('/colorpicker/colorpicker.css'), { type => 'text/css', rel => "stylesheet" } );
|
||||
$style->setScript( $url->extras('/colorpicker/colorpicker.js'), { type => 'text/javascript' } );
|
||||
$style->setScript( $url->extras("/styleDesigner/styleDesigner.js"), { type => "text/javascript" } );
|
||||
$style->setLink( $url->extras("/styleDesigner/styleDesigner.css"),
|
||||
{ rel => "stylesheet", type => "text/css" } );
|
||||
$legend = $i18n->get("style designer");
|
||||
$output .= '
|
||||
<form method="post">
|
||||
<input type="submit" value="' . $i18n->get('save') . '">
|
||||
<input type="hidden" name="step" value="6" />
|
||||
<input type="hidden" name="logoUrl" value="' . $logoUrl . '" />
|
||||
<script type="text/javascript">
|
||||
document.write(WebguiStyleDesigner.draw("^c;","' . $logoUrl . '","' . $storageId . '"));
|
||||
</script>
|
||||
<input type="submit" value="' . $i18n->get('save') . '">
|
||||
</form>
|
||||
';
|
||||
} ## end elsif ( $session->form->process...)
|
||||
elsif ( $session->form->process("step") eq "6" ) {
|
||||
my $importNode = WebGUI::Asset->getImportNode($session);
|
||||
my $form = $session->form;
|
||||
my $snippet = '/* auto generated by WebGUI ' . $WebGUI::VERSION . ' */
|
||||
.clearFloat { clear: both; }
|
||||
body { background-color: ' . $form->get("pageBackgroundColor") . '; color: ' . $form->get("contentTextColor") . '}
|
||||
a { color: ' . $form->get("linkColor") . ';}
|
||||
a:visited { color: ' . $form->get("visitedLinkColor") . '; }
|
||||
#editToggleContainer { padding: 1px; }
|
||||
#utilityLinksContainer { float: right; padding: 1px; }
|
||||
#pageUtilityContainer { font-size: 9pt; background-color: '
|
||||
. $form->get("utilityBackgroundColor")
|
||||
. '; color: '
|
||||
. $form->get("utilityTextColor") . '; }
|
||||
#pageHeaderContainer { background-color: '
|
||||
. $form->get("headerBackgroundColor")
|
||||
. '; color: '
|
||||
. $form->get("headerTextColor") . '; }
|
||||
#pageHeaderLogoContainer { float: left; padding: 5px; background-color: ' . $form->get("headerBackgroundColor") . ';}
|
||||
#logo { border: 0px; max-width: 300px; }
|
||||
#companyNameContainer { float: right; padding: 5px; font-size: 16pt; }
|
||||
#pageBodyContainer { background-color: '
|
||||
. $form->get("contentBackgroundColor")
|
||||
. '; color: '
|
||||
. $form->get("contentTextColor") . '; }
|
||||
#mainNavigationContainer { min-height: 300px; padding: 5px; float: left; width: 180px; font-size: 10pt; background-color: '
|
||||
. $form->get("navigationBackgroundColor") . '; }
|
||||
#mainNavigationContainer A, #mainNavigationContainer A:link { color: ' . $form->get("navigationTextColor") . '; }
|
||||
#mainBodyContentContainer { padding: 5px; margin-left: 200px; font-family: serif, times new roman; font-size: 12pt; overflow: auto; }
|
||||
#pageFooterContainer { text-align: center; background-color: '
|
||||
. $form->get("footerBackgroundColor")
|
||||
. '; color: '
|
||||
. $form->get("footerTextColor") . '; }
|
||||
#copyrightContainer { font-size: 8pt; }
|
||||
#pageWidthContainer { width: 80%; margin-left: auto; margin-right: auto; font-family: sans-serif, helvetica, arial; border: 3px solid black; }
|
||||
';
|
||||
my $css = addAsset(
|
||||
$importNode, {
|
||||
title => "my-style.css",
|
||||
className => "WebGUI::Asset::Snippet",
|
||||
snippet => $snippet,
|
||||
isHidden => 1,
|
||||
mimeType => "text/css",
|
||||
}
|
||||
);
|
||||
my $styleTemplate
|
||||
= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>^Page(title); - ^c;</title>
|
||||
<link type="text/css" href="' . $css->getUrl . '" rel="stylesheet" />
|
||||
<tmpl_var head.tags>
|
||||
</head>
|
||||
<body>
|
||||
^AdminBar;
|
||||
<div id="pageWidthContainer">
|
||||
<div id="pageUtilityContainer">
|
||||
<div id="utilityLinksContainer">^a(^@;); :: ^LoginToggle; :: ^r(Print!);</div>
|
||||
<div id="editToggleContainer">^AdminToggle;</div>
|
||||
<div class="clearFloat"></div>
|
||||
</div>
|
||||
<div id="pageHeaderContainer">
|
||||
<div id="companyNameContainer">^c;</div>
|
||||
<div id="pageHeaderLogoContainer"><a href="^H(linkonly);"><img src="'
|
||||
. $form->get("logoUrl")
|
||||
. '" id="logo" alt="logo" /></a></div>
|
||||
<div class="clearFloat"></div>
|
||||
</div>
|
||||
<div id="pageBodyContainer">
|
||||
<div id="mainNavigationContainer"><p>^AssetProxy("flexmenu");</p></div>
|
||||
<div id="mainBodyContentContainer">
|
||||
<tmpl_var body.content>
|
||||
</div>
|
||||
<div class="clearFloat"></div>
|
||||
</div>
|
||||
<div id="pageFooterContainer">
|
||||
<div id="copyrightContainer">©^D(%y); ^c;. ^International(All Rights Reserved);.</div>
|
||||
<div class="clearFloat"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>';
|
||||
my $style = addAsset(
|
||||
$importNode, {
|
||||
className => "WebGUI::Asset::Template",
|
||||
title => $i18n->get("My Style"),
|
||||
isHidden => 1,
|
||||
namespace => "style",
|
||||
template => $styleTemplate
|
||||
}
|
||||
);
|
||||
$session->setting->set( "userFunctionStyleId", $style->getId );
|
||||
|
||||
# collect new page info
|
||||
my $f = WebGUI::HTMLForm->new( $session, action => $session->url->gateway() );
|
||||
$f->hidden( name => "step", value => "7" );
|
||||
$f->hidden( name => "styleTemplateId", value => $style->getId );
|
||||
$f->yesNo( name => "contactUs", label => $i18n->get('Contact Us') );
|
||||
$f->yesNo( name => "calendar", label => $i18n->get( "assetName", 'Asset_Calendar' ) );
|
||||
$f->yesNo( name => "wiki", label => $i18n->get( 'assetName', 'Asset_WikiMaster' ) );
|
||||
$f->yesNo( name => "search", label => $i18n->get( "assetName", 'Asset_Search' ) );
|
||||
$f->yesNo( name => "aboutUs", label => $i18n->get("About Us") );
|
||||
$f->HTMLArea(
|
||||
name => "aboutUsContent",
|
||||
richEditId => "PBrichedit000000000002",
|
||||
value => $i18n->get("Put your about us content here.")
|
||||
);
|
||||
|
||||
if ( exists $session->config->get('assets')->{"WebGUI::Asset::Wobject::Collaboration"} ) {
|
||||
$f->yesNo( name => "news", label => $i18n->get(357) );
|
||||
$f->yesNo( name => "forums", label => $i18n->get("Forums") );
|
||||
$f->textarea(
|
||||
name => "forumNames",
|
||||
subtext => $i18n->get("One forum name per line"),
|
||||
value => $i18n->get("Support") . "\n" . $i18n->get("General Discussion")
|
||||
);
|
||||
}
|
||||
$f->submit;
|
||||
$legend = $i18n->get("Initial Pages");
|
||||
$output .= $f->print;
|
||||
} ## end elsif ( $session->form->process...)
|
||||
elsif ( $session->form->process("step") eq "7" ) {
|
||||
my $home = WebGUI::Asset->getDefault($session);
|
||||
my $form = $session->form;
|
||||
|
||||
# update default site style
|
||||
foreach my $asset ( @{ $home->getLineage( [ "self", "descendants" ], { returnObjects => 1 } ) } ) {
|
||||
if ( defined $asset ) {
|
||||
$asset->update( { styleTemplateId => $form->get("styleTemplateId") } );
|
||||
}
|
||||
}
|
||||
|
||||
# add new pages
|
||||
if ( $form->get("aboutUs") ) {
|
||||
my $page = addPage( $home, $i18n->get("About Us") );
|
||||
addAsset(
|
||||
$page, {
|
||||
title => $i18n->get("About Us"),
|
||||
isHidden => 1,
|
||||
className => "WebGUI::Asset::Wobject::Article",
|
||||
description => $form->get("aboutUsContent"),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
# add forums
|
||||
if ( $form->get("forums") ) {
|
||||
my $page = addPage( $home, $i18n->get("Forums") );
|
||||
my $board = addAsset(
|
||||
$page, {
|
||||
title => $i18n->get("Forums"),
|
||||
isHidden => 1,
|
||||
className => "WebGUI::Asset::Wobject::MessageBoard",
|
||||
description => $i18n->get("Discuss your ideas and get help from our community."),
|
||||
}
|
||||
);
|
||||
my $forumNames = $form->get("forumNames");
|
||||
$forumNames =~ s/\r//g;
|
||||
foreach my $forumName ( split "\n", $forumNames ) {
|
||||
next if $forumName eq "";
|
||||
addAsset(
|
||||
$board, {
|
||||
title => $forumName,
|
||||
isHidden => 1,
|
||||
className => "WebGUI::Asset::Wobject::Collaboration"
|
||||
}
|
||||
);
|
||||
}
|
||||
} ## end if ( $form->get("forums"...))
|
||||
|
||||
# add news
|
||||
if ( $form->get("news") ) {
|
||||
my $page = addPage( $home, $i18n->get(357) );
|
||||
addAsset(
|
||||
$page, {
|
||||
title => $i18n->get(357),
|
||||
isHidden => 1,
|
||||
className => "WebGUI::Asset::Wobject::Collaboration",
|
||||
collaborationTemplateId => "PBtmpl0000000000000112",
|
||||
allowReplies => 0,
|
||||
attachmentsPerPost => 5,
|
||||
postFormTemplateId => "PBtmpl0000000000000068",
|
||||
threadTemplateId => "PBtmpl0000000000000067",
|
||||
description => $i18n->get("All the news you need to know."),
|
||||
}
|
||||
);
|
||||
} ## end if ( $form->get("news"...))
|
||||
|
||||
# add wiki
|
||||
if ( $form->get("wiki") ) {
|
||||
my $page = addPage( $home, $i18n->get( "assetName", 'Asset_WikiMaster' ) );
|
||||
addAsset(
|
||||
$page, {
|
||||
title => $i18n->get( "assetName", 'Asset_WikiMaster' ),
|
||||
isHidden => 1,
|
||||
allowAttachments => 5,
|
||||
className => "WebGUI::Asset::Wobject::WikiMaster",
|
||||
description => $i18n->get("Welcome to our wiki. Here you can help us keep information up to date."),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
# add calendar
|
||||
if ( $form->get("calendar") ) {
|
||||
my $page = addPage( $home, $i18n->get( 'assetName', "Asset_Calendar" ) );
|
||||
addAsset(
|
||||
$page, {
|
||||
title => $i18n->get( 'assetName', "Asset_Calendar" ),
|
||||
isHidden => 1,
|
||||
className => "WebGUI::Asset::Wobject::Calendar",
|
||||
description => $i18n->get("Check out what is going on."),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
# add contact us
|
||||
if ( $form->get("contactUs") ) {
|
||||
my $page = addPage( $home, $i18n->get("Contact Us") );
|
||||
my $i18n2 = WebGUI::International->new( $session, "Asset_DataForm" );
|
||||
my @fieldConfig = ( {
|
||||
name => "from",
|
||||
label => $i18n2->get( "Your Email Address", 'WebGUI' ),
|
||||
status => "required",
|
||||
isMailField => 1,
|
||||
width => 0,
|
||||
type => "email",
|
||||
}, {name => "to",
|
||||
label => $i18n2->get(11),
|
||||
status => "hidden",
|
||||
isMailField => 1,
|
||||
width => 0,
|
||||
type => "email",
|
||||
defaultValue => $session->setting->get("companyEmail"),
|
||||
}, {name => "cc",
|
||||
label => $i18n2->get(12),
|
||||
status => "hidden",
|
||||
isMailField => 1,
|
||||
width => 0,
|
||||
type => "email",
|
||||
}, {name => "bcc",
|
||||
label => $i18n2->get(13),
|
||||
status => "hidden",
|
||||
isMailField => 1,
|
||||
width => 0,
|
||||
type => "email",
|
||||
}, {name => "subject",
|
||||
label => $i18n2->get(14),
|
||||
status => "hidden",
|
||||
isMailField => 1,
|
||||
width => 0,
|
||||
type => "text",
|
||||
defaultValue => $i18n->get(2),
|
||||
}, {name => "comments",
|
||||
label => $i18n->get( "comments", 'VersionTag' ),
|
||||
status => "required",
|
||||
type => "textarea",
|
||||
subtext => $i18n->get("Tell us how we can assist you."),
|
||||
},
|
||||
);
|
||||
my $dataForm = addAsset(
|
||||
$page, {
|
||||
title => $i18n->get("Contact Us"),
|
||||
isHidden => 1,
|
||||
className => "WebGUI::Asset::Wobject::DataForm",
|
||||
description => $i18n->get("We welcome your feedback."),
|
||||
acknowledgement =>
|
||||
$i18n->get("Thanks for for your interest in ^c;. We will review your message shortly."),
|
||||
mailData => 1,
|
||||
fieldConfiguration => JSON::to_json( \@fieldConfig ),
|
||||
}
|
||||
);
|
||||
} ## end if ( $form->get("contactUs"...))
|
||||
|
||||
# add search
|
||||
if ( $form->get("search") ) {
|
||||
my $page = addPage( $home, $i18n->get( 'assetName', "Asset_Search" ) );
|
||||
addAsset(
|
||||
$page, {
|
||||
title => $i18n->get( 'assetName', "Asset_Search" ),
|
||||
isHidden => 1,
|
||||
className => "WebGUI::Asset::Wobject::Search",
|
||||
description => $i18n->get("Cannot find what you are looking for? Try our search."),
|
||||
searchRoot => $home->getId,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
# commit the working tag
|
||||
my $working = WebGUI::VersionTag->getWorking($session);
|
||||
$working->set( { name => "Initial Site Setup" } );
|
||||
$working->commit;
|
||||
|
||||
# remove init state
|
||||
$session->setting->remove('specialState');
|
||||
$session->http->setRedirect( $session->url->gateway("?setup=complete") );
|
||||
return undef;
|
||||
} ## end elsif ( $session->form->process...)
|
||||
else {
|
||||
$legend = $i18n->get('admin account');
|
||||
my $u = WebGUI::User->new( $session, '3' );
|
||||
my $f = WebGUI::HTMLForm->new( $session, action => $session->url->gateway() );
|
||||
$f->hidden( -name => "step", -value => "2" );
|
||||
$f->text(
|
||||
-name => "username",
|
||||
-value => $u->username,
|
||||
-label => $i18n->get(50),
|
||||
-hoverHelp => $i18n->get('50 setup description'),
|
||||
);
|
||||
$f->text(
|
||||
-name => "identifier",
|
||||
-value => "123qwe",
|
||||
-label => $i18n->get(51),
|
||||
-hoverHelp => $i18n->get('51 description'),
|
||||
-subtext => '<div style=\"font-size: 10px;\">(' . $i18n->get("password clear text") . ')</div>'
|
||||
);
|
||||
$f->email(
|
||||
-name => "email",
|
||||
-value => $u->profileField("email"),
|
||||
-label => $i18n->get(56),
|
||||
-hoverHelp => $i18n->get('56 description'),
|
||||
);
|
||||
$f->timeZone(
|
||||
-name => "timeZone",
|
||||
-value => $u->profileField("timeZone"),
|
||||
-label => $i18n->get( 'timezone', 'DateTime' ),
|
||||
-hoverHelp => $i18n->get('timezone help'),
|
||||
);
|
||||
$f->selectBox(
|
||||
-name => "language",
|
||||
-value => $u->profileField("language"),
|
||||
-label => $i18n->get('304'),
|
||||
-hoverHelp => $i18n->get('language help'),
|
||||
-options => $i18n->getLanguages(),
|
||||
);
|
||||
$f->submit;
|
||||
$output .= $f->print;
|
||||
} ## end else [ if ( $form->process("step"...))]
|
||||
my $page = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>' . $i18n->get('WebGUI Initial Configuration') . ' :: ' . $legend . '</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<script type="text/javascript">
|
||||
function getWebguiProperty (propName) {
|
||||
var props = new Array();
|
||||
props["extrasURL"] = "' . $session->url->extras() . '";
|
||||
props["pageURL"] = "' . $session->url->page( undef, undef, 1 ) . '";
|
||||
return props[propName];
|
||||
}
|
||||
</script>' . $session->style->generateAdditionalHeadTags . '
|
||||
<style type="text/css">';
|
||||
if ( $session->form->process("step") != 5 ) {
|
||||
$page .= ' #initBox {
|
||||
font-family: georgia, helvetica, arial, sans-serif; color: white; z-index: 10;
|
||||
top: 5%; left: 10%; position: absolute;
|
||||
}
|
||||
#initBoxSleeve {
|
||||
width: 770px;
|
||||
height: 475px;
|
||||
}
|
||||
a { color: black; }
|
||||
a:visited { color: black;}
|
||||
body { margin: 0; }
|
||||
';
|
||||
}
|
||||
else {
|
||||
$page .= '
|
||||
#initBox {
|
||||
font-family: georgia, helvetica, arial, sans-serif; color: white; z-index: 10; width: 98%;
|
||||
height: 98%; top: 10; left: 10; position: absolute;
|
||||
}
|
||||
';
|
||||
}
|
||||
$page .= ' </style> </head> <body>
|
||||
<div id="initBox"><h1>' . $legend . '</h1><div id="initBoxSleeve"> ' . $output . '</div></div>
|
||||
<img src="'
|
||||
. $session->url->extras('background.jpg')
|
||||
. '" style="border-style:none;position: absolute; top: 0; left: 0; width: 100%; height: 1000px; z-index: 1;" />
|
||||
</body> </html>';
|
||||
$session->http->setMimeType("text/html");
|
||||
return $page;
|
||||
} ## end sub handler
|
||||
# Dispatch to the setup wizard
|
||||
my $wiz = WebGUI::Wizard::Setup->new( $session );
|
||||
return $wiz->dispatch;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package WebGUI::Content::Wizard;
|
||||
|
||||
sub process {
|
||||
sub handler {
|
||||
my ( $session ) = @_;
|
||||
|
||||
if ( $session->form->get('op') eq 'wizard' && $session->form->get('wizard_class') ) {
|
||||
|
|
|
|||
|
|
@ -101,16 +101,20 @@ sub dispatch {
|
|||
|
||||
# See if we process a form
|
||||
if ( my $step = $self->getCurrentStep ) {
|
||||
$self->session->log->info( "Processing " . $step );
|
||||
# First fold in the new form bits
|
||||
$self->thaw;
|
||||
my $processSub = $self->can( 'www_' . $step . 'Save' );
|
||||
my $errorMessage = $processSub->($self);
|
||||
if ($errorMessage) {
|
||||
$self->session->log->info( "Error in " . $step );
|
||||
my $formSub = $self->can( 'www_' . $step );
|
||||
return $self->wrapStyle( $errorMessage . $formSub->($self) );
|
||||
}
|
||||
else {
|
||||
my $step = $self->getNextStep;
|
||||
$self->session->log->info( "Showing next step: " . $step );
|
||||
$self->setCurrentStep( $step );
|
||||
my $formSub = $self->can( 'www_' . $step );
|
||||
my $output = $formSub->($self);
|
||||
$self->freeze;
|
||||
|
|
@ -121,7 +125,10 @@ sub dispatch {
|
|||
# Starting over
|
||||
$self->{_params} = {};
|
||||
$self->freeze;
|
||||
my $formSub = $self->can( 'www_' . $self->_get_steps->[0] );
|
||||
my $step = $self->_get_steps->[0];
|
||||
$self->setCurrentStep( $step );
|
||||
$self->session->log->info( "Starting wizard: " . $step );
|
||||
my $formSub = $self->can( 'www_' . $step );
|
||||
my $output = $formSub->($self);
|
||||
$self->freeze;
|
||||
return $self->wrapStyle( $output );
|
||||
|
|
@ -180,36 +187,30 @@ Get the name of the current step.
|
|||
|
||||
sub getCurrentStep {
|
||||
my ( $self ) = @_;
|
||||
return $self->{_step} || $self->session->form->get( 'wizard_step' );
|
||||
if ( $self->{_step} ) {
|
||||
return $self->{_step};
|
||||
}
|
||||
elsif ( $self->session->form->get('wizard_class') eq blessed($self) ) {
|
||||
return $self->session->form->get('wizard_step');
|
||||
}
|
||||
return; # No step, so start at the beginning
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 getFormEnd ( )
|
||||
=head2 getForm ( [step] )
|
||||
|
||||
Get the end of the form, including the </form> tag
|
||||
Get a WebGUI::HTMLForm object for a given step, defaulting to the current step.
|
||||
|
||||
=cut
|
||||
|
||||
sub getFormEnd {
|
||||
my ( $self ) = @_;
|
||||
return WebGUI::Form::formFooter;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 getFormStart ( [step] )
|
||||
|
||||
Get the start of a form for a given step, defaulting to the current step.
|
||||
|
||||
=cut
|
||||
|
||||
sub getFormStart {
|
||||
sub getForm {
|
||||
my ( $self, $step ) = @_;
|
||||
$step ||= $self->getCurrentStep;
|
||||
return WebGUI::Form::formHeader( $self->session, {
|
||||
my $form = WebGUI::HTMLForm->new( $self->session,
|
||||
action => '?op=wizard;wizard_class=' . blessed( $self ) . ';wizard_step=' . $step,
|
||||
} );
|
||||
);
|
||||
return $form;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
@ -281,7 +282,7 @@ parameters.
|
|||
sub thaw {
|
||||
my ( $self ) = @_;
|
||||
my $json = $self->session->scratch->get( $self->getCacheKey );
|
||||
return $self->{_params} = JSON->new->decode( $json );
|
||||
return $self->{_params} = $json ? JSON->new->decode( $json ) : {};
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -35,13 +35,13 @@ plan tests => 3; # Increment this number for each test you create
|
|||
|
||||
use_ok( 'WebGUI::Content::Wizard' );
|
||||
|
||||
ok( !WebGUI::Content::Wizard::process( $session ), "Declines correctly" );
|
||||
ok( !WebGUI::Content::Wizard::handler( $session ), "Declines correctly" );
|
||||
|
||||
$session->request->setup_body( {
|
||||
op => 'wizard',
|
||||
wizard_class => 'WebGUI::Wizard::HelloWorld',
|
||||
} );
|
||||
is( WebGUI::Content::Wizard::process( $session ), "Hello World!\n", "Accepts request and returns response" );
|
||||
is( WebGUI::Content::Wizard::handler( $session ), "Hello World!\n", "Accepts request and returns response" );
|
||||
|
||||
package WebGUI::Wizard::HelloWorld;
|
||||
|
||||
|
|
|
|||
24
t/Wizard.t
24
t/Wizard.t
|
|
@ -51,16 +51,14 @@ is( $wizard->getCurrentStep, "one", "SetCurrentStep" );
|
|||
#----------------------------------------------------------------------------
|
||||
# Form Start and End
|
||||
|
||||
my $o = $wizard->getFormStart;
|
||||
like( $o, qr/<form/, 'getFormStart gives form' );
|
||||
like( $o, qr/wizard_class.+WebGUI::Wizard/, 'getFormStart wizard_class' );
|
||||
like( $o, qr/wizard_step.+one/, 'getFormStart wizard_step' );
|
||||
my $f = $wizard->getForm;
|
||||
isa_ok( $f, 'WebGUI::HTMLForm' );
|
||||
my $html = $f->print;
|
||||
like( $html, qr/wizard_class.+WebGUI::Wizard/, 'getFormStart wizard_class' );
|
||||
like( $html, qr/wizard_step.+one/, 'getFormStart wizard_step' );
|
||||
|
||||
$o = $wizard->getFormStart( "two" );
|
||||
like( $o, qr/wizard_step.+two/, 'getFormStart wizard_step override step' );
|
||||
|
||||
$o = $wizard->getFormEnd;
|
||||
like( $o, qr{</form>}, 'getFormEnd' );
|
||||
$html = $wizard->getForm( "two" )->print;
|
||||
like( $html, qr/wizard_step.+two/, 'getFormStart wizard_step override step' );
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Steps
|
||||
|
|
@ -69,7 +67,13 @@ $wizard = WebGUI::Wizard::Test->new( $session );
|
|||
$session->request->setup_body( {
|
||||
wizard_step => "one",
|
||||
} );
|
||||
is( $wizard->getCurrentStep, "one", "getCurrentStep from form" );
|
||||
is( $wizard->getCurrentStep, undef, "getCurrentStep requires correct wizard_class");
|
||||
|
||||
$session->request->setup_body( {
|
||||
wizard_class => 'WebGUI::Wizard::Test',
|
||||
wizard_step => 'one',
|
||||
} );
|
||||
is( $wizard->getCurrentStep, 'one', 'getCurrent step from form' );
|
||||
is( $wizard->getNextStep, "two", "getNextStep" );
|
||||
|
||||
is( $wizard->getNextStep( "three" ), "four", "getNextStep with arg" );
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue