package WebGUI::Admin; # The new WebGUI Admin console use Moose; use JSON qw( from_json to_json ); use namespace::autoclean; has 'session' => ( is => 'ro', isa => 'WebGUI::Session', required => 1, ); sub BUILDARGS { my ( $class, $session, @args ) = @_; return { session => $session, @args }; } # Use the template data located in our DATA block my $tdata = do { local $/ = undef; }; #---------------------------------------------------------------------- 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 ); next unless $plugin->canUse; $var = { title => $plugin->getTitle, icon => $plugin->getIcon, 'icon.small' => $plugin->getIconSmall, url => $plugin->getUrl, }; # build the list of processed items $processed{$plugin->getTitle} = $var; } # Don't know what we have (old admin console functions) else { # make title my $title = $funcDef->{title}; WebGUI::Macro::process( $session, \$title ); # determine if the user can use this thing my $canUse = 0; if ( defined $funcDef->{group} ) { $canUse = $user->isInGroup( $funcDef->{group} ); } elsif ( defined $funcDef->{groupSetting} ) { $canUse = $user->isInGroup( $setting->get( $funcDef->{groupSetting} ) ); } if ( $funcDef->{uiLevel} > $user->profileField("uiLevel") ) { $canUse = 0; } next unless $canUse; # build the attributes $var = { title => $title, icon => $url->extras( "/adminConsole/" . $funcDef->{icon} ), 'icon.small' => $url->extras( "adminConsole/small/" . $funcDef->{icon} ), url => $funcDef->{url}, }; # build the list of processed items $processed{$title} = $var; } ## end else [ if ( $funcDef->{className...})] } ## 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 getTreePaginator ( $asset ) Get a page for the Asset Tree view. Returns a WebGUI::Paginator object filled with asset IDs. =cut sub getTreePaginator { my ( $self, $asset ) = @_; my $session = $self->session; my $orderByColumn = $session->form->get( 'orderByColumn' ) || "lineage" ; my $orderByDirection = lc $session->form->get( 'orderByDirection' ) eq "desc" ? "DESC" : "ASC" ; my $recordOffset = $session->form->get( 'recordOffset' ) || 1; my $rowsPerPage = $session->form->get( 'rowsPerPage' ) || 100; my $currentPage = int ( $recordOffset / $rowsPerPage ) + 1; my $p = WebGUI::Paginator->new( $session, '', $rowsPerPage, 'pn', $currentPage ); my $orderBy = $session->db->dbh->quote_identifier( $orderByColumn ) . ' ' . $orderByDirection; $p->setDataByArrayRef( $asset->getLineage( ['children'], { orderByClause => $orderBy } ) ); return $p; } #---------------------------------------------------------------------- =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 ) { for my $tag ( @$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_getTreeData ( ) Get the Tree data for a given asset URL =cut sub www_getTreeData { my ( $self ) = @_; my $session = $self->session; my ( $user, $form ) = $session->quick(qw{ user form }); my $assetUrl = $form->get('assetUrl'); my $asset = WebGUI::Asset->newByUrl( $session, $assetUrl ); my $i18n = WebGUI::International->new( $session, "Asset" ); my $assetInfo = { assets => [] }; my $p = $self->getTreePaginator( $asset ); for my $assetId ( @{ $p->getPageData } ) { my $asset = WebGUI::Asset->newById( $session, $assetId ); # Populate the required fields to fill in my %fields = ( assetId => $asset->getId, url => $asset->getUrl, lineage => $asset->lineage, title => $asset->menuTitle, revisionDate => $asset->revisionDate, childCount => $asset->getChildCount, assetSize => $asset->assetSize, lockedBy => ($asset->isLockedBy ? $asset->lockedBy->username : ''), canEdit => $asset->canEdit && $asset->canEditIfLocked, helpers => $asset->getHelpers, ); $fields{ className } = {}; # The asset icon $fields{ icon } = $asset->getIcon("small"); # The asset type (i18n name) $fields{ className } = $asset->getName; push @{ $assetInfo->{ assets } }, \%fields; } $assetInfo->{ totalAssets } = $p->getRowCount; $assetInfo->{ sort } = $session->form->get( 'orderByColumn' ); $assetInfo->{ dir } = lc $session->form->get( 'orderByDirection' ); $assetInfo->{ currentAsset } = { assetId => $asset->getId, url => $asset->getUrl, title => $asset->getTitle, icon => $asset->getIcon("small"), helpers => $asset->getHelpers, }; $assetInfo->{ crumbtrail } = []; for my $asset ( @{ $asset->getLineage( ['ancestors'], { returnObjects => 1 } ) } ) { push @{ $assetInfo->{crumbtrail} }, { title => $asset->getTitle, url => $asset->getUrl }; } $session->http->setMimeType( 'application/json' ); return to_json( $assetInfo ); } #---------------------------------------------------------------------- =head2 www_view ( session ) Show the main Admin console wrapper =cut sub www_view { my ( $self ) = @_; my $session = $self->session; my ( $user, $url, $style ) = $session->quick(qw{ user url style }); 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->{tagEditUrl} = $tag->getEditUrl; $var->{tagPublishUrl} = ""; #TODO $var->{tagLeaveUrl} = ""; #TODO } $var->{viewUrl} = $url->page; $var->{homeUrl} = WebGUI::Asset->getDefault( $session )->getUrl; # All this needs to be template attachments $style->setLink( $url->extras('yui/build/button/assets/skins/sam/button.css'), {type=>"text/css",rel=>"stylesheet"}); $style->setLink( $url->extras('yui/build/menu/assets/skins/sam/menu.css'), {type=>"text/css",rel=>"stylesheet"}); $style->setLink( $url->extras('yui/build/tabview/assets/skins/sam/tabview.css'), {type=>"text/css",rel=>"stylesheet"}); $style->setLink( $url->extras('yui/build/paginator/assets/skins/sam/paginator.css'), {rel=>'stylesheet', type=>'text/css'}); $style->setLink( $url->extras('yui/build/datatable/assets/skins/sam/datatable.css'), {rel=>'stylesheet', type=>'text/css'}); $style->setLink( $url->extras('yui/build/menu/assets/skins/sam/menu.css'), {rel=>'stylesheet', type=>'text/css'}); $style->setLink( $url->extras('yui-webgui/build/assetManager/assetManager.css' ), { rel => "stylesheet", type => 'text/css' } ); $style->setLink( $url->extras('macro/AdminBar/slidePanel.css'), {type=>'text/css', rel=>'stylesheet'}); $style->setLink( $url->extras('admin/admin.css'), { type=>'text/css', rel=>'stylesheet'} ); $style->setScript($url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js')); $style->setScript($url->extras('yui/build/utilities/utilities.js')); $style->setScript($url->extras('accordion/accordion.js')); $style->setScript($url->extras('admin/admin.js')); $style->setScript($url->extras('yui/build/element/element-min.js')); $style->setScript( $url->extras( 'yui/build/paginator/paginator-min.js ' ) ); $style->setScript( $url->extras( 'yui/build/datasource/datasource-min.js ' ) ); $style->setScript( $url->extras( 'yui/build/datatable/datatable-min.js ' ) ); $style->setScript( $url->extras( 'yui/build/container/container-min.js' ) ); $style->setScript($url->extras('yui/build/tabview/tabview-min.js')); $style->setScript($url->extras('yui/build/menu/menu-min.js')); $style->setScript($url->extras('yui/build/button/button-min.js')); $style->setScript( $url->extras( 'yui/build/json/json-min.js' ) ); $style->setScript( $url->extras( 'yui-webgui/build/i18n/i18n.js' ) ); # Use the template in our __DATA__ block my $tmpl = WebGUI::Asset::Template::HTMLTemplate->new( $session ); # Use the blank style my $output = $style->process( $tmpl->process( $tdata, $var ), "PBtmplBlankStyle000001" ); return $output; } ## end sub www_view 1; __DATA__
^International("admin console","AdminConsole");
style="display: none" >
Publish | Leave
Back to Site | Log Out