From 8f4024a4b243ab8fe9024cd4f58d21708c0f6409 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Thu, 1 Apr 2010 16:52:21 -0500 Subject: [PATCH] initial commit: new admin console --- lib/WebGUI/Admin.pm | 170 ++++++++++++++++++++++++++++++++++++ lib/WebGUI/Content/Admin.pm | 67 ++++++++++++++ lib/WebGUI/VersionTag.pm | 48 ++++++++++ 3 files changed, 285 insertions(+) create mode 100644 lib/WebGUI/Admin.pm create mode 100644 lib/WebGUI/Content/Admin.pm diff --git a/lib/WebGUI/Admin.pm b/lib/WebGUI/Admin.pm new file mode 100644 index 000000000..d00f68140 --- /dev/null +++ b/lib/WebGUI/Admin.pm @@ -0,0 +1,170 @@ +package WebGUI::Admin; + +# The new WebGUI Admin console + +use Moose; +use namespace::autoclean; + +has 'session' => ( + is => 'ro', + isa => 'WebGUI::Session', + required => 1, +); + +#---------------------------------------------------------------------- + +sub getAdminPluginTemplateVars { + my $self = shift; + my $session = $self->session; + my ( $user, $url, $setting ) = $session->quick(qw(user url setting)); + my $functions = $session->config->get("adminConsole"); + my %processed; # title => attributes + + # process the raw information from the config file + foreach my $funcId ( keys %{$functions} ) { + my $funcDef = $functions->{$funcId}; + my $var = {}; + + # If we have a class name, we've got a new WebGUI::Admin::Plugin + if ( $funcDef->{className} ) { + my $plugin = $funcDef->{className}->new( $session, $funcId, $funcDef ); + $var = { + title => $plugin->getTitle, + icon => $plugin->getIcon, + 'icon.small' => $plugin->getIconSmall, + url => $plugin->getUrl, + canUse => $plugin->canUse, + }; + } + # Don't know what we have (old admin console functions) + else { + # make title + my $title = $functions->{$function}{title}; + WebGUI::Macro::process( $session, \$title ); + + # determine if the user can use this thing + my $canUse = 0; + if ( defined $functions->{$function}{group} ) { + $canUse = $user->isInGroup( $functions->{$function}{group} ); + } + elsif ( defined $functions->{$function}{groupSetting} ) { + $canUse = $user->isInGroup( $setting->get( $functions->{$function}{groupSetting} ) ); + } + if ( $functions->{$function}{uiLevel} > $user->profileField("uiLevel") ) { + $canUse = 0; + } + + # build the attributes + $var = { + title => $title, + icon => $url->extras( "/adminConsole/" . $functions->{$function}{icon} ), + 'icon.small' => $url->extras( "adminConsole/small/" . $functions->{$function}{icon} ), + url => $functions->{$function}{url}, + canUse => $canUse, + }; + } ## end else [ if ( $funcDef->{className...})] + + # build the list of processed items + $processed{$title} = $var; + + } ## end foreach my $funcId ( keys %...) + + #sort the functions alphabetically + return [ map { $processed{$_} } sort keys %processed ]; +} ## end sub getAdminFunctionTemplateVars + +#---------------------------------------------------------------------- + +=head2 getClipboardTemplateVars + +=cut + +sub getClipboardTemplateVars { + my ( $self ) = @_; + my $session = $self->session; + my $vars = []; + my $clipboardItems = $session->asset->getAssetsInClipboard(1); + +} + +#---------------------------------------------------------------------- + +=head2 getNewContentTemplateVars + +=cut + +sub getNewContentTemplateVars { + my ( $self ) = @_; + my $session = $self->session; + my ( $user ) = $session->quick(qw( user )); + my $vars = []; +} + +#---------------------------------------------------------------------- + +=head2 getVersionTagTemplateVars + +=cut + +sub getVersionTagTemplateVars { + my ( $self ) = @_; + my $session = $self->session; + my ( $user ) = $session->quick(qw( user )); + my $vars = []; + + my $working = WebGUI::VersionTag->getWorking( $session, "nocreate" ); + my $tags = WebGUI::VersionTag->getOpenTags($session); + if ( @$tags ) { + next unless $user->isInGroup( $tag->get("groupToUse") ); + push @$vars, { + name => $tag->get("name"), + isWorking => ( $working && $working->getId eq $tag->getId ) ? 1 : 0, + joinUrl => $tag->getJoinUrl, + editUrl => $tag->getEditUrl, + }; + } + + return $vars; +} + +#---------------------------------------------------------------------- + +=head2 www_view ( session ) + +Show the main Admin console wrapper + +=cut + +sub www_view { + my ($self) = @_; + my $session = $self->session; + my ( $user, $url ) = $session->quick(qw{ user url }); + + my $var; + $var->{backToSiteUrl} = $url->page; + + # Add vars for AdminBar + $var->{adminPlugins} = $self->getAdminPluginTemplateVars; + $var->{versionTags} = $self->getVersionTagTemplateVars; + $var->{clipboardAssets} = $self->getClipboardTemplateVars; + $var->{newContentTabs} = $self->getNewContentTemplateVars; + + # Add vars for current user + $var->{username} = $user->username; + $var->{profileUrl} = $user->getProfileUrl; + $var->{logoutUrl} = $url->page("op=auth;method=logout"); + + # Add vars for current version tag + if ( my $tag = WebGUI::VersionTag->getWorking( $session, "nocreate" ) ) { + $var->{tagName} = $tag->get("name"); + $var->{publishUrl} = ""; #TODO + $var->{leaveUrl} = ""; #TODO + } + + # Use the template in our __DATA__ block + # Use the blank style + + return $output; +} ## end sub www_view + +1; diff --git a/lib/WebGUI/Content/Admin.pm b/lib/WebGUI/Content/Admin.pm new file mode 100644 index 000000000..fc921c346 --- /dev/null +++ b/lib/WebGUI/Content/Admin.pm @@ -0,0 +1,67 @@ +package WebGUI::Content::Admin; + +=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 + ------------------------------------------------------------------- + +=cut + +use strict; + + +=head1 NAME + +Package WebGUI::Content::Admin + +=head1 DESCRIPTION + +The WebGUI Admin Console + +=head1 SUBROUTINES + +These subroutines are available from this package: + +=cut + +#------------------------------------------------------------------- + +=head2 handler ( session ) + +Handle every op=admin request + + 1) Try to run the Admin Console plugin requested + 2) Show the Admin Console wrapper + +=cut + +sub handler { + my ($session) = @_; + + if ( $session->form->get("op") eq "admin" ) { + if ( $session->form->get("plugin") ) { + # Load the requested plugin if necessary + # Default page is "view" + # Pass control to the right page + } + else { + my $admin = WebGUI::Admin->new( $session ); + return $admin->www_view; + } + } + + return; +} + + +1; +#vim:ft=perl + +__DATA__ diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm index e17e4f6ac..745022bb9 100644 --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -322,6 +322,41 @@ sub getAssets { #------------------------------------------------------------------- +=head2 getCommitUrl ( ) + +Get the URL to commit this version tag. Will check settings to see +if commit comments are on or off + +=cut + +sub getCommitUrl { + my ( $self ) = @_; + my $session = $self->session; + my ( $url ) = $session->quick(qw( url )); + + if ($session->setting->get("skipCommitComments")) { + return $url->page("op=commitVersionTagConfirm;tagId=".$self->getId); + } + else { + return $url->page("op=commitVersionTag;tagId=".$self->getId); + } +} + +#------------------------------------------------------------------- + +=head2 getEditUrl ( ) + +Get the URL to edit this version tag + +=cut + +sub getEditUrl { + my ( $self ) = @_; + return $self->session->url->page( "op=editVersionTag;tagId=".$self->getId ); +} + +#------------------------------------------------------------------- + =head2 getId ( ) Returns the ID of this version tag. @@ -335,6 +370,19 @@ sub getId { #------------------------------------------------------------------- +=head2 getJoinUrl ( ) + +Get the URL to join this version tag + +=cut + +sub getJoinUrl { + my ( $self ) = @_; + return $self->session->url->page( "op=setWorkingVersionTag;tagId=".$self->getId ); +} + +#------------------------------------------------------------------- + =head2 getOpenTags ( session ) Returns an array reference containing all the open version tag objects. This is a class method.