Added "sortOrder" to Folder assets

Added "canAddFile" and "canEdit" to Folder template variables
This commit is contained in:
Doug Bell 2008-09-16 17:21:13 +00:00
parent 427993edc5
commit fc7fbfbd0c
5 changed files with 175 additions and 77 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;
}

View file

@ -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",

View file

@ -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},
},
};