^AssetProxy("flexmenu");
diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index a5da8399e..d50551b37 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -3,6 +3,9 @@ subroutines directly in their files. See WebGUI::Operation::FormHelpers::www_formHelper and WebGUI::Operation::Workflow::www_activityHelper for details. + - api: Asset properties that have default values are now enforced by the API + as they always have been by the user interface. + - Added Site Starter to WebGUI Initial Configuration. - Added pagination to purchase history in commerce. - Replaced color picker form control with a more robust version. - Added keyword tagging api. diff --git a/lib/WebGUI.pm b/lib/WebGUI.pm index 92afc6eb9..482f7ac85 100644 --- a/lib/WebGUI.pm +++ b/lib/WebGUI.pm @@ -1,29 +1,33 @@ package WebGUI; -#------------------------------------------------------------------- -# WebGUI is Copyright 2001-2007 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 -#------------------------------------------------------------------- +our $VERSION = "7.4.0"; +our $STATUS = "beta"; + + +=head1 LEGAL + + ------------------------------------------------------------------- + WebGUI is Copyright 2001-2007 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 qw(vars subs); -use Tie::CPHash; use Time::HiRes; use WebGUI::Affiliate; use WebGUI::Asset; -use WebGUI::Cache; use WebGUI::Config; -use WebGUI::HTMLForm; -use WebGUI::International; use WebGUI::Operation; use WebGUI::Session; -use WebGUI::User; use WebGUI::Utility; use WebGUI::PassiveProfiling; +use WebGUI::Setup; use Apache2::Upload; use Apache2::Request; use Apache2::RequestRec (); @@ -32,8 +36,23 @@ use Apache2::Const -compile => qw(OK DECLINED NOT_FOUND DIR_MAGIC_TYPE); use Apache2::ServerUtil (); use LWP::MediaTypes qw(guess_media_type); -our $VERSION = "7.4.0"; -our $STATUS = "beta"; +=head1 NAME + +Package WebGUI + +=head1 DESCRIPTION + +An Apache mod_perl handler for WebGUI. + +=head1 SYNOPSIS + + use WebGUI; + +=head1 SUBROUTINES + +These subroutines are available from this package: + +=cut #------------------------------------------------------------------- @@ -109,7 +128,7 @@ sub contentHandler { # do nothing because we have operation output to display $out = undef if ($out eq "chunked"); #'chunked' is WebGUI's way of saying 'I took care of it' The output was sent to the browser in pieces as quickly as it could be produced. } elsif ($setting->get("specialState") eq "init") { #if specialState is flagged and it's 'init' do initial setup - $out = setup($session); + $out = WebGUI::Setup::setup($session); } elsif ($errorHandler->canShowPerformanceIndicators) { #show performance indicators if required my $t = [Time::HiRes::gettimeofday()]; $out = page($session); @@ -269,112 +288,6 @@ sub processOperations { return $output; } - -#------------------------------------------------------------------- - -=head2 setup ( session ) - -Handles a specialState: "setup" - -=head3 session - -The current WebGUI::Session object. - -=cut - -sub setup { - my $session = shift; - my $i18n = WebGUI::International->new($session, "WebGUI"); - my $output = ' - -
-
-
-';
- $session->http->setCacheControl("none");
- $session->http->setMimeType("text/html");
- return $output;
-}
-
-
#-------------------------------------------------------------------
=head2 tryAssetMethod ( session )
diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm
index 8219c4809..47a6cb51f 100644
--- a/lib/WebGUI/Asset.pm
+++ b/lib/WebGUI/Asset.pm
@@ -343,7 +343,7 @@ sub definition {
hoverHelp=>$i18n->get('886 description'),
uiLevel=>6,
fieldType=>'yesNo',
- defaultValue=>0
+ defaultValue=>0,
},
newWindow=>{
tab=>"display",
@@ -2025,7 +2025,7 @@ sub update {
# deal with all the properties in this part of the definition
foreach my $property (keys %{$definition->{properties}}) {
-
+
# skip a property unless it was specified to be set by the properties field or has a default value
next unless (exists $properties->{$property} || exists $definition->{properties}{$property}{defaultValue});
# use the update value
@@ -2042,7 +2042,7 @@ sub update {
}
# use the default value because default and update were both undef
- unless (defined $value) {
+ if ($value eq "" && exists $definition->{properties}{$property}{defaultValue}) {
$value = $definition->{properties}{$property}{defaultValue};
}
diff --git a/lib/WebGUI/Asset/Wobject/Layout.pm b/lib/WebGUI/Asset/Wobject/Layout.pm
index e27ff4e19..42c2d1765 100644
--- a/lib/WebGUI/Asset/Wobject/Layout.pm
+++ b/lib/WebGUI/Asset/Wobject/Layout.pm
@@ -68,7 +68,8 @@ sub definition {
properties=>{
templateId =>{
fieldType=>"template",
- defaultValue=>'PBtmpl0000000000000054'
+ namespace => "Layout",
+ defaultValue=>'PBtmpl0000000000000054',
},
contentPositions => {
noFormPost=>1,
diff --git a/lib/WebGUI/Form/Control.pm b/lib/WebGUI/Form/Control.pm
index e57c885b4..d93b3fc15 100644
--- a/lib/WebGUI/Form/Control.pm
+++ b/lib/WebGUI/Form/Control.pm
@@ -619,7 +619,7 @@ sub toHtmlWithWrapper {
if ($self->passUiLevelCheck) {
my $rawField = $self->toHtml(); # has to be called before prepareWrapper for some controls, namely captcha.
my ($fieldClass, $rowClass, $labelClass, $hoverHelp, $subtext) = $self->prepareWrapper;
- return 'Do you wish to use the WebGUI Site Starter, which will lead you through options to create a custom + look and feel for your site, and set up some basic content areas?
+ + '; + } + 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=>"Logo"); + $f->submit; + $legend = "Upload Your 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::Image->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->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/animation/animation-min.js'),{ type=>'text/javascript' }); + $style->setLink($url->extras('/colorpicker/colorpicker.css'),{ type=>'text/css', rel=>"stylesheet" }); + $style->setScript($url->extras('/colorpicker/color.js'),{ type=>'text/javascript' }); + $style->setScript($url->extras('/colorpicker/key.js'),{ type=>'text/javascript' }); + $style->setScript($url->extras('/yui/build/slider/slider-min.js'),{ type=>'text/javascript' }); + $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 = "Style Designer"; + $output .= ' + + '; + } + 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").'; } +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; } +#pageFooterContainer { text-align: center; background-color: '.$form->get("footerBackgroundColor").'; color: '.$form->get("footerTextColor").'; } +#copyrightContainer { font-size: 8pt; } +#pageWidthContainer { margin-left: 10%; margin-right: 10%; 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 = ' + +
+ ';
+ $session->http->setCacheControl("none");
+ $session->http->setMimeType("text/html");
+ return $page;
+}
+
+1;
+
diff --git a/www/extras/extjs/resources/css/ext-all.css b/www/extras/extjs/resources/css/ext-all.css
index ba6105dd5..83810b2cc 100644
--- a/www/extras/extjs/resources/css/ext-all.css
+++ b/www/extras/extjs/resources/css/ext-all.css
@@ -6,7 +6,8 @@
* http://www.extjs.com/license
*/
-html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}
+/*html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul
+ * {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}*/
.ext-el-mask {
z-index: 20000;
position: absolute;
diff --git a/www/extras/styleDesigner/styleDesigner.css b/www/extras/styleDesigner/styleDesigner.css
index 8d3079756..9d9e5c1a0 100644
--- a/www/extras/styleDesigner/styleDesigner.css
+++ b/www/extras/styleDesigner/styleDesigner.css
@@ -2,10 +2,6 @@
width: 180px;
float: left;
}
-#initBox {
- font-family: georgia, helvetica, arial, sans-serif; color: white; z-index: 10; width: 98%;
- height: 98%; top: 10; left: 10; position: absolute;
-}
#themeContainer {
height: 40px;
z-index: 10;
diff --git a/www/extras/styleDesigner/styleDesigner.js b/www/extras/styleDesigner/styleDesigner.js
index 912b4ffc2..3eba78ef3 100644
--- a/www/extras/styleDesigner/styleDesigner.js
+++ b/www/extras/styleDesigner/styleDesigner.js
@@ -17,6 +17,21 @@ WebguiStyleDesigner = function () {
"footerTextColor" : "#000000"
},
{
+ "pageBackgroundColor" : "#A10101",
+ "linkColor" : "#FFCACA",
+ "visitedLinkColor" : "#FFCACA",
+ "utilityBackgroundColor" : "#4A0000",
+ "utilityTextColor" : "#ffffff",
+ "headerBackgroundColor" : "#ffffff",
+ "headerTextColor" : "#000000",
+ "navigationBackgroundColor" : "#FFF6F6",
+ "navigationTextColor" : "#FF0101",
+ "contentBackgroundColor" : "#888888",
+ "contentTextColor" : "#ffffff",
+ "footerBackgroundColor" : "#ffffff",
+ "footerTextColor" : "#000000"
+ },
+ {
"pageBackgroundColor" : "#000000",
"linkColor" : "#cccccc",
"visitedLinkColor" : "#dddddd",
@@ -31,6 +46,21 @@ WebguiStyleDesigner = function () {
"footerBackgroundColor" : "#ffffff",
"footerTextColor" : "#000000"
},
+ {
+ "pageBackgroundColor" : "#FFCC3D",
+ "linkColor" : "#0000B3",
+ "visitedLinkColor" : "#0000B3",
+ "utilityBackgroundColor" : "#FFB300",
+ "utilityTextColor" : "#ffffff",
+ "headerBackgroundColor" : "#ffffff",
+ "headerTextColor" : "#000000",
+ "navigationBackgroundColor" : "#D57F1C",
+ "navigationTextColor" : "#FFFFFF",
+ "contentBackgroundColor" : "#FFD683",
+ "contentTextColor" : "#000000",
+ "footerBackgroundColor" : "#ffffff",
+ "footerTextColor" : "#000000"
+ }
];
var drawThemeSwatch = function ( themeNumber ) {
@@ -39,8 +69,8 @@ WebguiStyleDesigner = function () {
var colorPickerFieldNames = {
"pageBackgroundColor" : "Page Background",
- "linkColor" : "Link Color",
- "visitedLinkColor" : "Visited Link Color",
+ "linkColor" : "Links",
+ "visitedLinkColor" : "Visited Links",
"utilityBackgroundColor" : "Utility Background",
"utilityTextColor" : "Utility Text",
"headerBackgroundColor" : "Header Background",
@@ -48,7 +78,7 @@ WebguiStyleDesigner = function () {
"contentBackgroundColor" : "Content Background",
"contentTextColor" : "Content Text",
"navigationBackgroundColor" : "Navigation Background",
- "navigationTextColor" : "Navigation Text",
+ "navigationTextColor" : "Navigation Links",
"footerBackgroundColor" : "Footer Background",
"footerTextColor" : "Footer Text Color"
};
@@ -115,7 +145,14 @@ WebguiStyleDesigner = function () {
case "contentBackgroundColor": Dom.get("pageBodyContainer").style.backgroundColor = this.value; break;
case "contentTextColor": Dom.get("pageBodyContainer").style.color = this.value; break;
case "navigationBackgroundColor": Dom.get("mainNavigationContainer").style.backgroundColor = this.value; break;
- case "navigationTextColor": Dom.get("mainNavigationContainer").style.color = this.value; break;
+ case "navigationTextColor":
+ var tags = Dom.get("mainNavigationContainer").getElementsByTagName("a");
+ for (var i = 0; i < tags.length; i++) {
+ tags[i].style.color = this.value;
+ tags[i].style.linkColor = this.value;
+ tags[i].style.vlinkColor = this.value;
+ }
+ break;
case "footerBackgroundColor": Dom.get("pageFooterContainer").style.backgroundColor = this.value; break;
case "footerTextColor": Dom.get("pageFooterContainer").style.color = this.value; break;
}
@@ -124,7 +161,7 @@ WebguiStyleDesigner = function () {
for (var i in themeColors) {
theme = Dom.get("theme_" + i);
themeColorSet = themeColors[i];
- theme.style.backgroundColor = themeColorSet["contentBackgroundColor"];
+ theme.style.backgroundColor = themeColorSet["pageBackgroundColor"];
theme.style.borderColor = themeColorSet["linkColor"];
theme.onclick = function () {
var id = this.id.replace(/theme_(\d+)/,"$1");