package WebGUI::AssetHelper::EditBranch; use strict; use Class::C3; use base qw/WebGUI::AssetHelper/; use WebGUI::User; use WebGUI::HTML; =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 ------------------------------------------------------------------- =head1 NAME Package WebGUI::AssetHelper::EditBranch =head1 DESCRIPTION Displays the revisions for this asset. =head1 METHODS These methods are available from this class: =cut #------------------------------------------------------------------- =head2 process () Opens a new tab for displaying the form and the output for editing a branch. =cut sub process { my ($self) = @_; my $asset = $self->asset; my $session = $self->session; my $i18n = WebGUI::International->new($session, "Asset"); if (! $asset->canEdit) { return { error => $i18n->get('38', 'WebGUI'), } } return { openDialog => $self->getUrl( 'editBranch' ), }; } #------------------------------------------------------------------- =head2 www_editBranch ( ) Creates a tabform to edit the Asset Tree. If canEdit returns False, returns insufficient Privilege page. =cut sub www_editBranch { my ($self) = @_; my $asset = $self->asset; my $session = $self->session; my ( $style, $url ) = $session->quick( qw( style url ) ); $style->setCss( $url->extras('hoverhelp.css')); $style->setScript( $url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js') ); $style->setScript( $url->extras('yui/build/container/container-min.js') ); $style->setScript( $url->extras('hoverhelp.js') ); $style->setRawHeadTags( <<'ENDHTML' ); ENDHTML my $ac = WebGUI::AdminConsole->new($session,"assets"); my $i18n = WebGUI::International->new($session,"Asset"); my $i18n2 = WebGUI::International->new($session,"Asset_Wobject"); return $session->privilege->insufficient() unless ($asset->canEdit); my $change = '
'.$i18n->get("change") . ' '; my $tabform = WebGUI::TabForm->new($session); $tabform->hidden({name=>"op",value=>"assetHelper"}); $tabform->hidden({name=>"helperId",value=>$self->id}); $tabform->hidden({name=>"method",value=>"editBranchSave"}); $tabform->hidden({name=>"assetId",value=>$asset->getId}); $tabform->addTab("properties",$i18n->get("properties"),9); $tabform->getTab("properties")->readOnly( label => $i18n->get(104), hoverHelp=> $i18n->get('edit branch url help'), uiLevel => 9, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_url"}), value => WebGUI::Form::selectBox($session, { name => "baseUrlBy", extras => 'onchange="toggleSpecificBaseUrl()"', id => "baseUrlBy", options => { parentUrl => $i18n->get("parent url"), specifiedBase => $i18n->get("specified base"), none => $i18n->get("none"), }, }) . ' / ' . WebGUI::Form::selectBox($session, { name => "endOfUrl", options => { menuTitle => $i18n->get(411), title => $i18n->get(99), currentUrl => $i18n->get("current url"), } }) . q!! ); $tabform->addTab("display",$i18n->get(105),5); $tabform->getTab("display")->yesNo( name => "isHidden", value => $asset->get("isHidden"), label => $i18n->get(886), uiLevel => 6, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_isHidden"}), hoverHelp => $i18n->get('886 description',"Asset"), ); $tabform->getTab("display")->yesNo( name => "newWindow", value => $asset->get("newWindow"), label => $i18n->get(940), hoverHelp=> $i18n->get('940 description'), uiLevel => 6, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_newWindow"}), ); $tabform->getTab("display")->yesNo( name => "displayTitle", label => $i18n2->get(174), hoverHelp=> $i18n2->get('174 description'), value => $asset->displayTitle, uiLevel => 5, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_displayTitle"}) ); $tabform->getTab("display")->template( name => "styleTemplateId", label => $i18n2->get(1073), value => $asset->styleTemplateId, hoverHelp => $i18n2->get('1073 description'), namespace => 'style', subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_styleTemplateId"}) ); $tabform->getTab("display")->template( name => "printableStyleTemplateId", label => $i18n2->get(1079), hoverHelp => $i18n2->get('1079 description'), value => $asset->printableStyleTemplateId, namespace => 'style', subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_printableStyleTemplateId"}) ); if ( $session->setting->get('useMobileStyle') ) { $tabform->getTab("display")->template( name => 'mobileStyleTemplateId', label => $i18n2->get('mobileStyleTemplateId label'), hoverHelp => $i18n2->get('mobileStyleTemplateId description'), value => $asset->mobileStyleTemplateId, namespace => 'style', subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_mobileStyleTemplateId"}), ); } $tabform->addTab("security",$i18n->get(107),6); if ($session->config->get("sslEnabled")) { $tabform->getTab("security")->yesNo( name => "encryptPage", value => $asset->get("encryptPage"), label => $i18n->get('encrypt page'), hoverHelp => $i18n->get('encrypt page description',"Asset"), uiLevel => 6, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_encryptPage"}) ); } $tabform->getTab("security")->user( name => "ownerUserId", label => $i18n->get(108), hoverHelp => $i18n->get('108 description',"Asset"), value => $asset->get("ownerUserId"), uiLevel => 6, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_ownerUserId"}) ); $tabform->getTab("security")->group( name => "groupIdView", label => $i18n->get(872), hoverHelp => $i18n->get('872 description',"Asset"), value => [$asset->get("groupIdView")], uiLevel => 6, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_groupIdView"}) ); $tabform->getTab("security")->group( name => "groupIdEdit", label => $i18n->get(871), hoverHelp => $i18n->get('871 description',"Asset"), value => [$asset->get("groupIdEdit")], excludeGroups => [1,7], uiLevel => 6, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_groupIdEdit"}) ); $tabform->addTab("meta",$i18n->get("Metadata"),3); $tabform->getTab("meta")->textarea( name => "extraHeadTags", label => $i18n->get("extra head tags"), hoverHelp => $i18n->get('extra head tags description'), value => $asset->get("extraHeadTags"), uiLevel => 5, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_extraHeadTags"}) ); $tabform->getTab("meta")->yesNo( name => 'usePackedHeadTags', label => $i18n->get('usePackedHeadTags label'), hoverHelp => $i18n->get('usePackedHeadTags description'), uiLevel => 7, fieldType => 'yesNo', defaultValue => 0, subtext => $change . WebGUI::Form::yesNo( $session, { name => "change_usePackedHeadTags" } ), ); $tabform->getTab("meta")->yesNo( name => 'isPackage', label => $i18n->get("make package"), hoverHelp => $i18n->get('make package description'), uiLevel => 7, fieldType => 'yesNo', defaultValue => 0, subtext => $change . WebGUI::Form::yesNo( $session, { name => "change_isPackage" } ), ); $tabform->getTab("meta")->yesNo( name => 'isPrototype', label => $i18n->get("make prototype"), hoverHelp => $i18n->get('make prototype description'), uiLevel => 9, fieldType => 'yesNo', defaultValue => 0, subtext => $change . WebGUI::Form::yesNo( $session, { name => "change_isPrototype" } ), ); $tabform->getTab("meta")->yesNo( name => 'isExportable', label => $i18n->get('make asset exportable'), hoverHelp => $i18n->get('make asset exportable description'), uiLevel => 9, fieldType => 'yesNo', defaultValue => 1, subtext => $change . WebGUI::Form::yesNo( $session, { name => "change_isExportable" } ), ); $tabform->getTab("meta")->yesNo( name => 'inheritUrlFromParent', label => $i18n->get('does asset inherit URL from parent'), hoverHelp => $i18n->get('does asset inherit URL from parent description'), uiLevel => 9, fieldType => 'yesNo', defaultValue => 0, subtext => $change . WebGUI::Form::yesNo( $session, { name => "change_inheritUrlFromParent" } ), ); if ($session->setting->get("metaDataEnabled")) { my $meta = $asset->getMetaDataFields(); foreach my $field (keys %$meta) { my $fieldType = $meta->{$field}{fieldType} || "text"; my $options = $meta->{$field}{possibleValues}; # 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("\l$fieldType" eq "selectBox") { $options = "|" . $i18n->get("Select") . "\n" . $options; } $tabform->getTab("meta")->dynamicField( fieldType => $fieldType, name => "metadata_".$meta->{$field}{fieldId}, label => $meta->{$field}{fieldName}, uiLevel => 5, value => $meta->{$field}{value}, extras => qq/title="$meta->{$field}{description}"/, options => $options, defaultValue => $meta->{$field}{defaultValue}, subtext => $change . WebGUI::Form::yesNo($session,{name=>"change_metadata_".$meta->{$field}{fieldId}}), ); } } # Replace the cancel button with one that closes the dialog $tabform->{_cancel} = WebGUI::Form::button( $session, { value => $i18n->get('cancel','WebGUI'), extras => sprintf(q|onclick="%s" class="backwardButton"|, 'parent.admin.closeModalDialog()'), } ); return $session->style->process( '
' . $tabform->print . '
', "PBtmpl0000000000000137" ); } #------------------------------------------------------------------- =head2 www_editBranchSaveStatus ( ) Verifies proper inputs in the Asset Tree and saves them. Returns ManageAssets method. If canEdit returns False, returns an insufficient privilege page. =cut sub www_editBranchSave { my ($self) = @_; my $asset = $self->asset; my $session = $self->session; return $session->privilege->insufficient() unless ($asset->canEdit && $session->user->isInGroup('4')); my $form = $session->form; my %data; my $pb = WebGUI::ProgressBar->new($session); my $i18n = WebGUI::International->new($session, 'Asset'); my $tag = WebGUI::VersionTag->getWorking( $session ); $data{isHidden} = $form->yesNo("isHidden") if ($form->yesNo("change_isHidden")); $data{newWindow} = $form->yesNo("newWindow") if ($form->yesNo("change_newWindow")); $data{encryptPage} = $form->yesNo("encryptPage") if ($form->yesNo("change_encryptPage")); $data{ownerUserId} = $form->selectBox("ownerUserId") if ($form->yesNo("change_ownerUserId")); $data{groupIdView} = $form->group("groupIdView") if ($form->yesNo("change_groupIdView")); $data{groupIdEdit} = $form->group("groupIdEdit") if ($form->yesNo("change_groupIdEdit")); $data{extraHeadTags} = $form->textarea("extraHeadTags") if $form->yesNo("change_extraHeadTags"); $data{usePackedHeadTags} = $form->yesNo("usePackedHeadTags") if $form->yesNo("change_usePackedHeadTags"); $data{isPackage} = $form->yesNo("isPackage") if $form->yesNo("change_isPackage"); $data{isPrototype} = $form->yesNo("isPrototype") if $form->yesNo("change_isPrototype"); $data{isExportable} = $form->yesNo("isExportable") if $form->yesNo("change_isExportable"); $data{inheritUrlFromParent} = $form->yesNo("inheritUrlFromParent") if $form->yesNo("change_inheritUrlFromParent"); my %wobjectData = %data; $wobjectData{displayTitle} = $form->yesNo("displayTitle") if $form->yesNo("change_displayTitle"); $wobjectData{styleTemplateId} = $form->template("styleTemplateId") if $form->yesNo("change_styleTemplateId"); $wobjectData{printableStyleTemplateId} = $form->template("printableStyleTemplateId") if $form->yesNo("change_printableStyleTemplateId"); $wobjectData{mobileStyleTemplateId} = $form->template("mobileStyleTemplateId") if $form->yesNo("change_mobileStyleTemplateId"); my ($urlBaseBy, $urlBase, $endOfUrl); my $changeUrl = $form->yesNo("change_url"); if ($changeUrl) { $urlBaseBy = $form->selectBox("baseUrlBy"); $urlBase = $form->text("baseUrl"); $endOfUrl = $form->selectBox("endOfUrl"); } return $session->response->stream( sub { my ( $session ) = @_; my $pb = WebGUI::ProgressBar->new($session); my @stack; return $pb->run( admin => 1, title => $i18n->get('edit branch'), icon => $session->url->extras('adminConsole/assets.gif'), code => sub { my ( $bar ) = @_; $bar->update( 'Preparing... (i18n)' ); $bar->total( $asset->getDescendantCount ); my $iter = $asset->getLineageIterator(["self","descendants"]); DESCENDANT: while (1) { my $descendant = eval { $iter->() }; if (my $e = Exception::Class->caught()) { $session->log->error($@); next DESCENDANT; } last DESCENDANT unless $descendant; # Actual work... if ( !$descendant->canEdit ) { $pb->update(sprintf $i18n->get('skipping %s'), $descendant->getTitle); next DESCENDANT; } $pb->update(sprintf $i18n->get('editing %s'), $descendant->getTitle); my $url; if ($changeUrl) { if ($urlBaseBy eq "parentUrl") { delete $descendant->{_parent}; $data{url} = $descendant->getParent->get("url")."/"; } elsif ($urlBaseBy eq "specifiedBase") { $data{url} = $urlBase."/"; } else { $data{url} = ""; } if ($endOfUrl eq "menuTitle") { $data{url} .= $descendant->get("menuTitle"); } elsif ($endOfUrl eq "title") { $data{url} .= $descendant->get("title"); } else { $data{url} .= $descendant->get("url"); } $wobjectData{url} = $data{url}; } my $newData = $descendant->isa('WebGUI::Asset::Wobject') ? \%wobjectData : \%data; my $revision; if (scalar %$newData > 0) { $revision = $descendant->addRevision( { %$newData, tagId => $tag->getId, status => "pending" }, undef, {skipAutoCommitWorkflows => 1, skipNotification => 1}, ); $revision->setVersionLock; } else { $revision = $descendant; } foreach my $param ($form->param) { if ($param =~ /^metadata_(.*)$/) { my $fieldName = $1; if ($form->yesNo("change_metadata_".$fieldName)) { $revision->updateMetaData($fieldName,$form->process($form)); } } } } if (WebGUI::VersionTag->autoCommitWorkingIfEnabled($session, { allowComments => 1, returnUrl => $asset->getUrl, }) eq 'redirect') { return $asset->getUrl; }; return { message => 'Assets saved! (i18n)' }; }, ), } ); } 1;