Add Asset Dashlets to Dashboard. Add required and static properties to Dashboard Assets. Add caching to StockData and WeatherData assets. Add LastModifiedBy macro. Add GroupManager to the Group form control.

This commit is contained in:
Colin Kuskie 2011-03-09 21:33:44 -08:00
parent 79aa44cf7e
commit 88797c1d6c
42 changed files with 3506 additions and 448 deletions

View file

@ -0,0 +1,129 @@
package WebGUI::AssetAspect::Dashlet;
use strict;
use Class::C3;
use JSON qw/to_json from_json/;
=head1 NAME
WebGUI::AssetAspect::Dashlet - Implement features to turn Assets into Dashlets
=head1 SYNOPSIS
This Aspect provides methods that allow a Dashboard to determine, store and retrieve
customization options for Assets.
=head1 DESCRIPTION
=head1 METHODS
#----------------------------------------------------------------------------
=head2 fetchUserOverrides ($dashboardAssetId, [$userId])
Retrieve user preferences for a particular dashboard and user for this Asset from the database.
=head3 $dashboardId
The assetId of the dashboard to reference.
=head3 $userId
The userId to whose preferences should be returned. Uses the current session user if omitted.
=cut
sub fetchUserOverrides {
my $self = shift;
my $dashboardAssetId = shift;
my $userId = shift || $self->session->user->userId;
my $properties_json = $self->session->db->quickScalar('select properties from Dashboard_userPrefs where dashboardAssetId=? and userId=? and dashletAssetId=?',[$dashboardAssetId, $userId, $self->getId,]);
$properties_json ||= '{}';
my $properties = from_json($properties_json);
return $properties;
}
#----------------------------------------------------------------------------
=head2 getOverrideFormDefinition
Return an array ref of form properties. The form properties are those that the
Asset has marked as being able to be overridden by a Dashboard asset by giving
the property the dashletOverridable flag.
Assets that want to allow additional properties outside of their definition should
override and extend this method.
=cut
sub getOverrideFormDefinition {
my $self = shift;
my $session = $self->session;
my @definitions = reverse @{ $self->definition($session) };
my @properties = ();
foreach my $definition (@definitions) {
foreach my $property_name (keys %{ $definition->{properties} }) {
my $property = $definition->{properties}->{$property_name};
next unless $property->{dashletOverridable};
$property->{name} = $property_name;
push @properties, $property;
}
}
return @properties;
}
#----------------------------------------------------------------------------
=head2 getUserOverrides
Store user preferences for this Asset. This is direct reference from inside the object, so
if you plan to modify the data, Clone it first.
=cut
sub getUserOverrides {
return shift->{_userOverrides};
}
#----------------------------------------------------------------------------
=head2 setUserOverrides
Store user preferences for this Asset.
=cut
sub setUserOverrides {
shift->{_userOverrides} = shift;
}
#----------------------------------------------------------------------------
=head2 storeUserOverrides ($dashboardAssetId, $properties, [$userId])
Store user preferences for a particular dashboard and user for this Asset to the database.
=head3 $dashboardId
The assetId of the dashboard to reference.
=head3 $userId
The userId to whose preferences should be returned. Uses the current session user if omitted.
=cut
sub storeUserOverrides {
my $self = shift;
my $session = $self->session;
my $dashboardAssetId = shift;
my $properties = shift;
my $userId = shift || $session->user->userId;
my $properties_json = to_json($properties);
$session->db->write('DELETE FROM Dashboard_userPrefs where dashboardAssetId=? and userId=? and dashletAssetId=?',[$dashboardAssetId, $userId, $self->getId]);
$session->db->write('INSERT INTO Dashboard_userPrefs (dashboardAssetId, userId, dashletAssetId, properties) VALUES (?,?,?,?)', [$dashboardAssetId, $userId, $self->getId, $properties_json]);
}
1; # You can't handle the truth