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

@ -141,6 +141,31 @@ sub getValueAsHtml {
}
#-------------------------------------------------------------------
=head2 headTags ( )
Set the head tags for this form plugin
=cut
sub headTags {
my $self = shift;
my $style = $self->session->style;
my $url = $self->session->url;
$style->setLink($url->extras('yui/build/container/assets/skins/sam/container.css'), { rel => 'stylesheet', type => 'text/css' });
$style->setLink($url->extras('yui/build/button/assets/skins/sam/button.css'), { rel => 'stylesheet', type => 'text/css' });
$style->setScript($url->extras('yui/build/connection/connection-min.js'), { type=>'text/javascript' });
$style->setScript($url->extras('yui/build/element/element-min.js'), { type=>'text/javascript' });
$style->setScript($url->extras('yui/build/button/button-min.js'), { type=>'text/javascript' });
$style->setScript($url->extras('yui/build/container/container-min.js'), { type=>'text/javascript' });
$style->setScript($url->extras('yui-webgui/build/form/form.js'), { type=>'text/javascript' });
$style->setScript($url->extras('yui/build/json/json-min.js'), {type => 'text/javascript'});
$style->setScript($url->extras('yui-webgui/build/i18n/i18n.js'), {type => 'text/javascript'} );
$style->setScript($url->extras('yui-webgui/build/form/groupManager.js'), { type=>'text/javascript' });
$style->setLink($url->extras('yui-webgui/build/form/groupManager.css'), { rel => 'stylesheet', type => 'text/css' });
}
#-------------------------------------------------------------------
=head2 isDynamicCompatible ( )
@ -180,9 +205,9 @@ Creates a series of hidden fields representing the data in the list.
=cut
sub toHtmlAsHidden {
my $self = shift;
$self->set("options", $self->session->db->buildHashRef("select groupId,groupName from groups"));
return $self->SUPER::toHtmlAsHidden();
my $self = shift;
$self->set("options", $self->session->db->buildHashRef("select groupId,groupName from groups"));
return $self->SUPER::toHtmlAsHidden();
}
#-------------------------------------------------------------------
@ -194,14 +219,187 @@ Renders the form field to HTML as a table row complete with labels, subtext, hov
=cut
sub toHtmlWithWrapper {
my $self = shift;
if ($self->session->user->isAdmin) {
my $subtext = $self->session->icon->manage("op=listGroups");
$self->set("subtext",$subtext . $self->get("subtext"));
my $self = shift;
my $session = $self->session;
my $user = $session->user;
if ($user->isAdmin) {
my $subtext = $session->icon->manage("op=listGroups");
$self->set("subtext", $subtext . $self->get("subtext"));
}
my $dialog = $self->get('name') . '_groupDialog';
my $group_manager = $user->isInGroup($session->setting->get('groupIdAdminGroup'));
my $form;
if ($group_manager) {
my $i18n = WebGUI::International->new($self->session,'Icon');
my $name = $self->get('name');
my $groupId = $self->getOriginalValue;
my $extra_subtext = qq!<span class="toolbarIcon" style="vertical-align:middle;"><a href="#" onClick="WebGUI.Form.GroupManager.show_dialog('$name'); return false;"><img src="!. $session->icon->getBaseURL().qq!edit.gif" alt="!. $i18n->get('Edit') .qq!"style="vertical-align:middle;border: 0px;" /></a></span>!;
$extra_subtext .= qq!<span class="toolbarIcon" style="vertical-align:middle;"><a href="#" onClick="WebGUI.Form.GroupManager.show_dialog('$name', 'new'); return false;"><img src="!. $session->icon->getBaseURL().qq!add.gif" alt="!. $i18n->get('Add') .qq!" style="vertical-align:middle;border: 0px;" /></a></span>!;
$self->set("subtext", $self->get('subtext').$extra_subtext);
}
$self->headTags;
$form .= $self->SUPER::toHtmlWithWrapper;
return $form;
}
#-------------------------------------------------------------------
=head2 www_groupMembers ($session)
Returns a list of users that are in the sub-group specified by the form variable
variable C<groupId>. Data returned is in JSON format.
This is a class method.
=head3 $session
A WebGUI::Session object.
=cut
sub www_groupMembers {
my $session = shift;
return '{}' unless $session->user->isInGroup($session->setting->get('groupIdAdminGroup'));
my $groupId = $session->form->param('groupId');
return '{}' unless $groupId;
my $group = WebGUI::Group->new($session, $groupId);
return '{}' unless $group;
my $results = {
groupName => $group->name,
users => [],
groups => [],
};
my $userIds = $group->getUsers('withoutExpired');
USER: foreach my $userId (@{ $userIds }) {
my $user = WebGUI::User->new($session, $userId);
next USER unless $user;
push @{$results->{users}},
{
username => $user->username,
userId => $userId,
};
}
my $groupIds = $group->getGroupsIn(0); ##Without recursion
GROUP: foreach my $groupId (@{ $groupIds }) {
my $group = WebGUI::Group->new($session, $groupId);
next GROUP unless $group;
push @{$results->{groups}},
{
groupName => $group->name,
groupId => $groupId,
};
}
return JSON::to_json($results);
}
#-------------------------------------------------------------------
=head2 www_saveGroup ($session)
Save new information about the membership of a group, which users have
been added and deleted, and which groups have been added and deleted.
This is a subroutine, not a class method, not an object method.
=head3 $session
A WebGUI::Session object.
=head3 Expected form variables
=head4 groupId
The GUID for the group to modify.
=head4 groupName
The name of the group. This is always set, so it should always be included.
=head4 usersAdded
A list of userId's for users who were added.
=head4 usersDeleted
A list of userId's for users who were deleted. Deleting happens after adding.
=head4 groupsAdded
A list of groupId's for groups who were added.
=head4 groupsDeleted
A list of groupId's for groups who were deleted. Deleting happens after adding.
=cut
sub www_saveGroup {
my $session = shift;
$session->log->warn("hit the group plugin");
return '{}' unless $session->user->isInGroup($session->setting->get('groupIdAdminGroup'));
my $form = $session->form;
my $groupId = $form->get('groupId');
my $group = WebGUI::Group->new($session, $groupId);
$session->log->warn("got groupId: $groupId");
return '{}' unless $group;
$session->log->warn("updating group data, name = ".$form->get('groupName'));
$group->name($form->get('groupName'));
my @usersAdded = $form->get('usersAdded');
use Data::Dumper;
$session->log->warn("users added ".Dumper(\@usersAdded));
$group->addUsers(\@usersAdded);
my @usersDeleted = $form->get('usersDeleted');
$group->deleteUsers(\@usersDeleted);
my @groupsAdded = $form->get('groupsAdded');
$session->log->warn("groups added ".Dumper(\@groupsAdded));
$group->addGroups(\@groupsAdded);
my @groupsDeleted = $form->get('groupsDeleted');
$group->deleteGroups(\@groupsDeleted);
return JSON::to_json({ groupId => $group->getId, groupName => $group->name, originalGroupId => $groupId });
}
#-------------------------------------------------------------------
=head2 www_searchGroups ($session)
Returns groups that match the supplied group name. Group name is specified via the form
variable C<search>. A list of groups will be returned of up to 15 names and groupIds.
This is a subroutine, not a class method, not an object method.
=head3 $session
A WebGUI::Session object.
=head3 Sample JSON
{
'results' : [
{
'groupId': 'someGroupId',
'groupName' : 'Great Group'
}
return $self->SUPER::toHtmlWithWrapper;
//Other hashes may be in the list, or it could be completely empty
]
}
=cut
sub www_searchGroups {
my $session = shift;
return '{"results":[]}' unless $session->user->isInGroup($session->setting->get('groupIdAdminGroup'));
my $search = $session->form->param('query');
my $results = $session->db->buildArrayRefOfHashRefs(q|select groupId, groupName from groups where groupName like CONCAT(?, '%') and showInForms=1 LIMIT 15|, [ $search ]);
return JSON::to_json({ results => $results });
}
1;

View file

@ -170,5 +170,25 @@ sub toHtml {
)->toHtml).$manage;
}
#-------------------------------------------------------------------
=head2 www_searchUsers
Returns users that match the supplied username. Username is specified via the form
variable C<search>. A list of usernames will be returned of up to 15 names and userIds.
=cut
sub www_searchUsers {
my $session = shift;
return '{"results":[]}' unless $session->user->isInGroup($session->setting->get('groupIdAdminUser'));
my $search = $session->form->param('query');
my $results = $session->db->buildArrayRefOfHashRefs(q|select userId, username from users where username like CONCAT(?, '%') LIMIT 15|, [ $search ]);
return JSON::to_json({ results => $results });
}
1;