diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 5003fe8ca..9f76d23f8 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -1,6 +1,9 @@ 6.7.0 - Being in the admins group automatically results in a UI level capable of seeing everything. + - fix [ 1251390 ] Security tab doesn't appear for member of Admins + - HTTP Proxy URLs can now be up to 2048 characters long. + - The Edit Branch function now allows you to recursively set meta data. - Fixed a potential problem where editing a page under rare very rare conditions could destroy the not found page. - Added the ability to override the UI Level of any field in the edit form of diff --git a/docs/upgrades/upgrade_6.6.5-6.7.0.pl b/docs/upgrades/upgrade_6.6.5-6.7.0.pl index 2295b38df..8e44861b3 100644 --- a/docs/upgrades/upgrade_6.6.5-6.7.0.pl +++ b/docs/upgrades/upgrade_6.6.5-6.7.0.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +my $toVersion = "6.7.0"; use lib "../../lib"; use File::Path; @@ -21,7 +21,7 @@ GetOptions( WebGUI::Session::open("../..",$configFile); -WebGUI::SQL->write("insert into webguiVersion values ('6.7.0','upgrade',unix_timestamp())"); +WebGUI::SQL->write("insert into webguiVersion value (".quote($toVersion).",'upgrade',".time().")"); giveSnippetsMimeTypes(); addAssetVersioning(); @@ -30,9 +30,16 @@ insertHelpTemplate(); makeSyndicatedContentChanges(); removeOldThemeSystem(); addSectionsToSurveys(); +increaseProxyUrlLength(); WebGUI::Session::close(); +#------------------------------------------------- +sub increaseProxyUrlLength { + print "\tMaking HTTP Proxy URLs accept lengths of up to 2048 characters.\n" unless ($quiet); + WebGUI::SQL->write("alter table HttpProxy change proxiedUrl proxiedUrl text"); +} + #------------------------------------------------- sub giveSnippetsMimeTypes { print "\tAllowing snippets to handle mime types.\n" unless ($quiet); diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index fcc9778d9..ce85af7e1 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -361,7 +361,7 @@ sub getAssetAdderLinks { if ($@) { WebGUI::ErrorHandler::error("Couldn't get UI level of ".$class." because ".$@); } else { - next if ($uiLevel > $session{user}{uiLevel} || WebGUI::Grouping::isInGroup(3)); + next if ($uiLevel > $session{user}{uiLevel} && !WebGUI::Grouping::isInGroup(3)); } my $canAdd = eval{$class->canAdd()}; if ($@) { @@ -1087,6 +1087,11 @@ sub processPropertiesFromFormPost { ); } } + foreach my $form (keys %{$session{form}}) { + if ($form =~ /^metadata_(.*)$/) { + $self->updateMetaData($1,$session{form}{$form}); + } + } $data{title} = "Untitled" unless ($data{title}); $data{menuTitle} = $data{title} unless ($data{menuTitle}); unless ($data{url}) { diff --git a/lib/WebGUI/AssetBranch.pm b/lib/WebGUI/AssetBranch.pm index 566832bf5..060d9617e 100644 --- a/lib/WebGUI/AssetBranch.pm +++ b/lib/WebGUI/AssetBranch.pm @@ -237,6 +237,37 @@ sub www_editBranch { -uiLevel=>6, -subtext=>'
'.WebGUI::International::get("change","Asset").' '.WebGUI::Form::yesNo({name=>"change_groupIdEdit"}) ); + $tabform->addTab("meta",WebGUI::International::get("Metadata","Asset"),3); + $tabform->getTab("meta")->textarea( + -name=>"extraHeadTags", + -label=>WebGUI::International::get("extra head tags","Asset"), + -hoverHelp=>WebGUI::International::get('extra head tags description',"Asset"), + -value=>$self->get("extraHeadTags"), + -uiLevel=>5, + -subtext=>'
'.WebGUI::International::get("change","Asset").' '.WebGUI::Form::yesNo({name=>"change_extraHeadTags"}) + ); + if ($session{setting}{metaDataEnabled}) { + my $meta = $self->getMetaDataFields(); + foreach my $field (keys %$meta) { + my $fieldType = $meta->{$field}{fieldType} || "text"; + my $options; + # Add a "Select..." option on top of a select list to prevent from + # saving the value on top of the list when no choice is made. + if($fieldType eq "selectList") { + $options = {"", WebGUI::International::get("Select...","Asset")}; + } + $tabform->getTab("meta")->dynamicField($fieldType, + -name=>"metadata_".$meta->{$field}{fieldId}, + -label=>$meta->{$field}{fieldName}, + -uiLevel=>5, + -value=>$meta->{$field}{value}, + -extras=>qq/title="$meta->{$field}{description}"/, + -possibleValues=>$meta->{$field}{possibleValues}, + -options=>$options, + -subtext=>'
'.WebGUI::International::get("change","Asset").' '.WebGUI::Form::yesNo({name=>"change_metadata_".$meta->{$field}{fieldId}}) + ); + } + } return $ac->render($tabform->print, "Edit Branch"); } @@ -265,6 +296,7 @@ sub www_editBranchSave { $data{ownerUserId} = WebGUI::FormProcessor::selectList("ownerUserId") if (WebGUI::FormProcessor::yesNo("change_ownerUserId")); $data{groupIdView} = WebGUI::FormProcessor::group("groupIdView") if (WebGUI::FormProcessor::yesNo("change_groupIdView")); $data{groupIdEdit} = WebGUI::FormProcessor::group("groupIdEdit") if (WebGUI::FormProcessor::yesNo("change_groupIdEdit")); + $data{extraHeadTags} = WebGUI::FormProcessor::group("extraHeadTags") if (WebGUI::FormProcessor::yesNo("change_extraHeadTags")); my ($urlBaseBy, $urlBase, $endOfUrl); my $changeUrl = WebGUI::FormProcessor::yesNo("change_url"); if ($changeUrl) { @@ -292,7 +324,15 @@ sub www_editBranchSave { $data{url} .= $descendant->get("url"); } } - $descendant->update(\%data); + my $newRevision = $descendant->addRevision(\%data); + foreach my $form (keys %{$session{form}}) { + if ($form =~ /^metadata_(.*)$/) { + my $fieldName = $1; + if (WebGUI::FormProcessor::yesNo("change_metadata_".$fieldName)) { + $newRevision->updateMetaData($fieldName,$session{form}{$form}); + } + } + } } delete $self->{_parent}; $session{asset} = $self->getParent; diff --git a/lib/WebGUI/AssetMetaData.pm b/lib/WebGUI/AssetMetaData.pm index b75fb5aed..d68fff7db 100644 --- a/lib/WebGUI/AssetMetaData.pm +++ b/lib/WebGUI/AssetMetaData.pm @@ -101,6 +101,38 @@ sub getMetaDataFields { } +#------------------------------------------------------------------- + +=head2 updateMetaData ( fieldName, value ) + +Updates the value of a metadata field for this asset. + +=head3 fieldName + +The name of the field to update. + +=head3 value + +The value to set this field to. Leave blank to unset it. + +=cut + +sub updateMetaData { + my $self = shift; + my $fieldName = shift; + my $value = shift; + my ($exists) = WebGUI::SQL->quickArray("select count(*) from metaData_values where assetId = ".quote($self->getId)." and fieldId = ".quote($fieldName)); + if (!$exists && $value ne "") { + WebGUI::SQL->write("insert into metaData_values (fieldId, assetId) values (".quote($fieldName).",".quote($self->getId).")"); + } + if ($value eq "") { # Keep it clean + WebGUI::SQL->write("delete from metaData_values where assetId = ".quote($self->getId)." and fieldId = ".quote($fieldName)); + } else { + WebGUI::SQL->write("update metaData_values set value = ".quote($value)." where assetId = ".quote($self->getId)." and fieldId=".quote($fieldName)); + } +} + + #------------------------------------------------------------------- =head2 www_deleteMetaDataField ( ) diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm index c8d779770..171d6b910 100644 --- a/lib/WebGUI/Auth.pm +++ b/lib/WebGUI/Auth.pm @@ -381,7 +381,7 @@ sub displayLogin { my $method = $_[0] || "login"; my $vars = $_[1]; unless ($session{form}{op} eq "auth") { - WebGUI::Session::setScratch("redirectAfterLogin",WebGUI::URL::getSiteURL().WebGUI::URL::getScriptURL().$session{env}{PATH_INFO}."?".$session{env}{QUERY_STRING}); + WebGUI::Session::setScratch("redirectAfterLogin",WebGUI::URL::gateway($session{env}{PATH_INFO},$session{env}{QUERY_STRING})); } $vars->{title} = WebGUI::International::get(66); my $action;