From fc7fbfbd0c0f82f0308545bbff6a68b93bf4675f Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Tue, 16 Sep 2008 17:21:13 +0000 Subject: [PATCH] Added "sortOrder" to Folder assets Added "canAddFile" and "canEdit" to Folder template variables --- docs/changelog/7.x.x.txt | 2 + docs/upgrades/upgrade_7.5.21-7.6.0.pl | 9 ++ lib/WebGUI/Asset/Wobject/Folder.pm | 203 +++++++++++++++--------- lib/WebGUI/Help/Asset_Folder.pm | 2 + lib/WebGUI/i18n/English/Asset_Folder.pm | 36 +++++ 5 files changed, 175 insertions(+), 77 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 35856a4f7..169bacc5b 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -52,6 +52,8 @@ - fixed: DataForms can now export all non-default fields - rfe: Search results now return with keywords highlighted. - rfe: After committing a version there is now a back to site link + - rfe: Added sort order to Folder assets + - rfe: Added canEdit and canAddFile template vars to Folder assets 7.5.22 - fixed: Layout template now gets prepared correctly diff --git a/docs/upgrades/upgrade_7.5.21-7.6.0.pl b/docs/upgrades/upgrade_7.5.21-7.6.0.pl index b85d5efc2..477a5eb13 100644 --- a/docs/upgrades/upgrade_7.5.21-7.6.0.pl +++ b/docs/upgrades/upgrade_7.5.21-7.6.0.pl @@ -31,6 +31,7 @@ my $session = start(); # this line required addUrlToAssetHistory ( $session ); ##This sub MUST GO FIRST removeDoNothingOnDelete( $session ); fixIsPublicOnTemplates ( $session ); +addSortOrderToFolder( $session ); addEMSBadgeTemplate ( $session ); finish($session); # this line required @@ -58,6 +59,14 @@ sub addUrlToAssetHistory { print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- +sub addSortOrderToFolder { + my $session = shift; + print "\tAdding Sort Order to Folder... " unless $quiet; + $session->db->write( 'alter table Folder add column sortOrder ENUM("ASC","DESC") DEFAULT "ASC"' ); + print "Done.\n" unless $quiet; +} + #---------------------------------------------------------------------------- sub removeDoNothingOnDelete { my $session = shift; diff --git a/lib/WebGUI/Asset/Wobject/Folder.pm b/lib/WebGUI/Asset/Wobject/Folder.pm index 242707d1b..00f167f36 100644 --- a/lib/WebGUI/Asset/Wobject/Folder.pm +++ b/lib/WebGUI/Asset/Wobject/Folder.pm @@ -55,46 +55,60 @@ A hash reference passed in from a subclass definition. =cut sub definition { - my $class = shift; - my $session = shift; - my $definition = shift; - my $i18n = WebGUI::International->new($session,"Asset_Folder"); - push(@{$definition}, { - assetName => $i18n->get("assetName"), - uiLevel => 5, - icon => 'folder.gif', - tableName => 'Folder', - className => 'WebGUI::Asset::Wobject::Folder', + my $class = shift; + my $session = shift; + my $definition = shift; + my $i18n = WebGUI::International->new($session,"Asset_Folder"); + + my %optionsSortOrder = ( + ASC => $i18n->get( "editForm sortOrder ascending" ), + DESC => $i18n->get( "editForm sortOrder descending" ), + ); + + push @{ $definition }, { + assetName => $i18n->get("assetName"), + uiLevel => 5, + icon => 'folder.gif', + tableName => 'Folder', + className => 'WebGUI::Asset::Wobject::Folder', autoGenerateForms => 1, - properties => { + properties => { visitorCacheTimeout => { - tab => "display", - fieldType => "interval", - defaultValue => 3600, - uiLevel => 8, - label => $i18n->get("visitor cache timeout"), - hoverHelp => $i18n->get("visitor cache timeout help") - }, - + tab => "display", + fieldType => "interval", + defaultValue => 3600, + uiLevel => 8, + label => $i18n->get("visitor cache timeout"), + hoverHelp => $i18n->get("visitor cache timeout help"), + }, + # TODO: This should probably be a proper "sortBy" with multiple possible fields sortAlphabetically => { - fieldType => "yesNo", - defaultValue => 0, - tab => 'display', - label => $i18n->get('sort alphabetically'), - hoverHelp => $i18n->get('sort alphabetically help'), - }, - + fieldType => "yesNo", + defaultValue => 0, + tab => 'display', + label => $i18n->get('sort alphabetically'), + hoverHelp => $i18n->get('sort alphabetically help'), + }, + sortOrder => { + tab => 'display', + fieldType => "selectBox", + options => \%optionsSortOrder, + defaultValue => "ASC", + label => $i18n->get( "editForm sortOrder label" ), + hoverHelp => $i18n->get( "editForm sortOrder description" ), + }, templateId => { - fieldType => "template", - defaultValue => 'PBtmpl0000000000000078', - namespace => 'Folder', - tab => 'display', - label => $i18n->get('folder template title'), - hoverHelp => $i18n->get('folder template description'), - } - } - }); - return $class->SUPER::definition($session, $definition); + fieldType => "template", + defaultValue => 'PBtmpl0000000000000078', + namespace => 'Folder', + tab => 'display', + label => $i18n->get('folder template title'), + hoverHelp => $i18n->get('folder template description'), + }, + }, + }; + + return $class->SUPER::definition($session, $definition); } @@ -123,6 +137,26 @@ sub getEditForm { return $tabform; } +#---------------------------------------------------------------------------- + +=head2 getTemplateVars ( ) + +Get the shared template vars for all views of the Folder. + +=cut + +sub getTemplateVars { + my $self = shift; + my $vars = $self->get; + my $i18n = WebGUI::International->new($self->session, 'Asset_Folder'); + + $vars->{ 'addFile.label' } = $i18n->get('add file label'); + $vars->{ 'addFile.url' } = $self->getUrl('func=add;class=WebGUI::Asset::FilePile'); + $vars->{ canEdit } = $self->canEdit; + $vars->{ canAddFile } = $self->canEdit; + + return $vars; +} #------------------------------------------------------------------- @@ -157,21 +191,30 @@ sub purgeCache { #------------------------------------------------------------------- sub view { - my $self = shift; - - my $i18n = WebGUI::International->new($self->session, 'Asset_Folder'); + my $self = shift; + # Use cached version for visitors if ($self->session->user->userId eq '1') { my $out = WebGUI::Cache->new($self->session,"view_".$self->getId)->get; return $out if $out; } - my %rules = ( returnObjects => 1); - $rules{orderByClause} = 'assetData.title' if ($self->get("sortAlphabetically")); - my $children = $self->getLineage( ["children"], \%rules); - my %vars; - foreach my $child (@{$children}) { - if (ref($child) eq "WebGUI::Asset::Wobject::Folder") { - push(@{$vars{"subfolder_loop"}}, { + + my $vars = $self->getTemplateVars; + # TODO: Getting the children template vars should be a seperate method. + + my %rules = ( returnObjects => 1); + if ( $self->get( "sortAlphabetically" ) ) { + $rules{ orderByClause } = "assetData.title " . $self->get( "sortOrder" ); + } + else { + $rules{ orderByClause } = "asset.lineage " . $self->get( "sortOrder" ); + } + + my $children = $self->getLineage( ["children"], \%rules); + foreach my $child ( @{ $children } ) { + # TODO: Instead of this it should be using $child->getTemplateVars || $child->get + if ( ref $child eq "WebGUI::Asset::Wobject::Folder" ) { + push @{ $vars->{ "subfolder_loop" } }, { id => $child->getId, url => $child->getUrl, title => $child->get("title"), @@ -179,42 +222,48 @@ sub view { canView => $child->canView(), "icon.small" => $child->getIcon(1), "icon.big" => $child->getIcon, - }); - } else { - my $isImage = (ref($child) =~ /^WebGUI::Asset::File::Image/); - my $thumbnail = $child->getThumbnailUrl if ($isImage); - my $isFile = (ref($child) =~ /^WebGUI::Asset::File/); - my $file = $child->getFileUrl if ($isFile); - push(@{$vars{"file_loop"}},{ - id=>$child->getId, - canView => $child->canView(), - title=>$child->get("title"), - menuTitle=>$child->get("menuTitle"), - synopsis=>$child->get("synopsis") || '', - size=>WebGUI::Utility::formatBytes($child->get("assetSize")), - "date.epoch"=>$child->get("revisionDate"), - "icon.small"=>$child->getIcon(1), - "icon.big"=>$child->getIcon, - type=>$child->getName, - url=>$child->getUrl, - isImage=>$isImage, - canEdit=>$child->canEdit, - controls=>$child->getToolbar, - isFile=>$isFile, - "thumbnail.url"=>$thumbnail, - "file.url"=>$file - }); + }; + } + else { + my $childVars = { + id => $child->getId, + canView => $child->canView(), + title => $child->get("title"), + menuTitle => $child->get("menuTitle"), + synopsis => $child->get("synopsis") || '', + size => WebGUI::Utility::formatBytes($child->get("assetSize")), + "date.epoch" => $child->get("revisionDate"), + "icon.small" => $child->getIcon(1), + "icon.big" => $child->getIcon, + type => $child->getName, + url => $child->getUrl, + canEdit => $child->canEdit, + controls => $child->getToolbar, + }; + + if ( ref $child =~ /^WebGUI::Asset::File::Image/ ) { + $child->{ "isImage" } = 1; + $child->{ "thumbnail.url" } = $child->getThumbnailUrl; + } + + if ( ref $child =~ /^WebGUI::Asset::File/ ) { + $child->{ "isFile" } = 1; + $child->{ "file.url" } = $child->getFileUrl; + } + + push @{ $vars->{ "file_loop" } }, $childVars; } } - $vars{'addFile.label'} = $i18n->get('add file label'); - $vars{'addFile.url'} = $self->getUrl('func=add;class=WebGUI::Asset::FilePile'); - - my $out = $self->processTemplate(\%vars,undef,$self->{_viewTemplate}); + my $out = $self->processTemplate( $vars, undef, $self->{_viewTemplate} ); + + # Update the cache if ($self->session->user->userId eq '1') { - WebGUI::Cache->new($self->session,"view_".$self->getId)->set($out,$self->get("visitorCacheTimeout")); + WebGUI::Cache->new($self->session,"view_".$self->getId) + ->set($out,$self->get("visitorCacheTimeout")); } - return $out; + + return $out; } diff --git a/lib/WebGUI/Help/Asset_Folder.pm b/lib/WebGUI/Help/Asset_Folder.pm index 08d848023..8c9cd1df0 100644 --- a/lib/WebGUI/Help/Asset_Folder.pm +++ b/lib/WebGUI/Help/Asset_Folder.pm @@ -15,6 +15,8 @@ our $HELP = { variables => [ { name => 'addFile.url', }, { name => "addFile.label", }, + { name => "canAddFile", description => 'helpvar canAddFile', }, + { name => "canEdit", description => 'helpvar canEdit', }, { name => "subfolder_loop", variables => [ { name => "id", diff --git a/lib/WebGUI/i18n/English/Asset_Folder.pm b/lib/WebGUI/i18n/English/Asset_Folder.pm index c555ff0ee..e8ccb92df 100644 --- a/lib/WebGUI/i18n/English/Asset_Folder.pm +++ b/lib/WebGUI/i18n/English/Asset_Folder.pm @@ -253,6 +253,42 @@ be useful, others may not.|, message => q|In seconds, how long output from this Asset will be cached.|, lastUpdated => 1167416930 }, + + 'editForm sortOrder label' => { + message => q{Sort Order}, + lastUpdated => 0, + context => q{Label for asset property}, + }, + + 'editForm sortOrder description' => { + message => q{The order in which to sort the files and folders.}, + lastUpdated => 0, + context => q{Description of asset property}, + }, + + 'editForm sortOrder ascending' => { + message => q{Ascending}, + lastUpdated => 0, + context => q{Label for sort order}, + }, + + 'editForm sortOrder descending' => { + message => q{Descending}, + lastUpdated => 0, + context => q{Label for sort order}, + }, + + 'helpvar canAddFile' => { + message => q{Is true if the user can add a file to the Folder}, + lastUpdated => 0, + context => q{Help for template variable}, + }, + + 'helpvar canEdit' => { + message => q{Is true if the user can edit the folder}, + lastUpdated => 0, + context => q{Help for template variable}, + }, };