package WebGUI::Operation::Navigation; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2004 Plain Black LLC. #------------------------------------------------------------------- # 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 #------------------------------------------------------------------- use Exporter; use strict; use Tie::IxHash; use Tie::CPHash; use WebGUI::DateTime; use WebGUI::HTMLForm; use WebGUI::Icon; use WebGUI::International; use WebGUI::Macro; use WebGUI::Operation::Shared; use WebGUI::Session; use WebGUI::SQL; use WebGUI::URL; use WebGUI::Utility; use WebGUI::Navigation; use WebGUI::TabForm; use WebGUI::ErrorHandler; use WebGUI::Privilege; our @ISA = qw(Exporter); our @EXPORT = qw(&www_listNavigation &www_editNavigation &www_editNavigationSave &www_copyNavigation &www_deleteNavigation www_deleteNavigationConfirm www_previewNavigation); #------------------------------------------------------------------- sub _submenu { my (%menu); tie %menu, 'Tie::IxHash'; $menu{WebGUI::URL::page('op=editNavigation')} = 'Add new Navigation.'; if (($session{form}{op} eq "editNavigation" && $session{form}{navigationId} ne "new") || $session{form}{op} eq "deleteNavigationConfirm") { $menu{WebGUI::URL::page('op=editNavigation&identifier='.$session{form}{identifier})} = WebGUI::International::get(18, 'Navigation'); $menu{WebGUI::URL::page('op=copyNavigation&navigationId='.$session{form}{navigationId})} = WebGUI::International::get(19, 'Navigation'); $menu{WebGUI::URL::page('op=deleteNavigation&navigationId='.$session{form}{navigationId})} = WebGUI::International::get(20, 'Navigation'); } $menu{WebGUI::URL::page('op=listNavigation')} = WebGUI::International::get(21, 'Navigation'); return menuWrapper($_[0],\%menu); } #------------------------------------------------------------------- sub www_copyNavigation { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); my %navigation = WebGUI::SQL->quickHash("select * from Navigation where identifier = ". quote($session{form}{identifier})); WebGUI::SQL->write("insert into Navigation (navigationId, identifier, depth, method, startAt, stopAtLevel, templateId, showSystemPages, showHiddenPages, showUnprivilegedPages, reverse) values (".getNextId("navigationId").", ".quote('Copy of '.$navigation{identifier}).", $navigation{depth}, ".quote($navigation{method}). ", ".quote($navigation{startAt}).", $navigation{stopAtLevel}, $navigation{templateId}, $navigation{showSystemPages}, $navigation{showHiddenPages},$navigation{showUnprivilegedPages}, $navigation{reverse})"); return www_listNavigation(); } #------------------------------------------------------------------- sub www_deleteNavigation { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); if ($session{form}{navigationId} < 1000 && $session{form}{navigationId} > 0) { return WebGUI::Privilege::vitalComponent(); } my $output .= '

'.WebGUI::International::get(42).'

'; $output .= WebGUI::International::get(502).'

'; $output .= '

'.WebGUI::International::get(44).''; $output .= '    '. WebGUI::International::get(45).'
'; return _submenu($output); } #------------------------------------------------------------------- sub www_deleteNavigationConfirm { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); if ($session{form}{navigationId} < 1000 && $session{form}{navigationId} > 0) { return WebGUI::Privilege::vitalComponent(); } WebGUI::SQL->write("delete from Navigation where navigationId = $session{form}{navigationId}"); return www_listNavigation(); } #------------------------------------------------------------------- sub www_editNavigation { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); my $identifier = shift || $session{form}{identifier}; #return WebGUI::ErrorHandler::warn("editNavigation called without identifier") unless $identifier; my $config = WebGUI::Navigation::getConfig($identifier); if ($config->{identifier}) { # Existing config } else { $config->{navigationId} = 'new'; $config->{identifier} = $identifier || 'myIdentifier'; $config->{depth} = 99; $config->{method} = 'descendants'; $config->{startAt} = 'current'; $config->{stopAtLevel} = -1; $config->{templateId} = 1; $config->{showSystemPages} = 0; $config->{showHiddenPages} = 0; $config->{showUnprivilegedPages} = 0; $config->{'reverse'} = 0; } my $output = helpIcon(79).'

'.WebGUI::International::get(22, 'Navigation').'

'; tie my (%tabs) , 'Tie::IxHash'; %tabs = ( properties=>{ label=>WebGUI::International::get(23, 'Navigation'), }, layout=>{ label=>WebGUI::International::get(105), }, ); my $f = WebGUI::TabForm->new(\%tabs); $f->hidden({name=>'op', value=>'editNavigationSave'}); $f->hidden({name=>'navigationId', value=>$config->{navigationId}}); $f->getTab("properties")->readOnly( -value=>$config->{navigationId}, -label=>'navigationId' ); $f->getTab("properties")->text( -name=>'identifier', -value=>$config->{identifier}, -label=>WebGUI::International::get(24, 'Navigation') ); my $startAt = $session{form}{startAt} || $config->{startAt}; my $levels = WebGUI::Navigation::getLevelNames(); # If an alternate value for startAt is specified, add that to the options list as well. $levels->{$startAt} = $startAt if (not defined $levels->{$startAt}); # The documented interface of HTMLForm::combo didn't work. However the old functional interface does... $f->getTab("properties")->combo("startAt",$levels,WebGUI::International::get(25,'Navigation'),[$startAt]); $f->getTab("properties")->selectList( -name=>'method', -label=>WebGUI::International::get(28,'Navigation'), -options=>WebGUI::Navigation::getMethodNames(), -value=>[$session{form}{method} || $config->{method}] ); tie my %stopAtLevels, 'Tie::IxHash'; %stopAtLevels = ( '-1' => 'no limit', '0' => '0. '.WebGUI::International::get(1,'Navigation'), '1' => '1. '.WebGUI::International::get(2,'Navigation'), '2' => '2. '.WebGUI::International::get(3,'Navigation'), '3' => '3.', '4' => '4.', '5' => '5.', '6' => '6.', '7' => '7.', '8' => '8.', '9' => '9.', ); $f->getTab("properties")->selectList( -name=>'stopAtLevel', -label=>WebGUI::International::get(26,'Navigation'), -options=>\%stopAtLevels, -value=>[$session{form}{stopAtLevel} || $config->{stopAtLevel}] ); tie my %depths, 'Tie::IxHash'; %depths = ( '0' => '0 levels', '1' => '1 level', '2' => '2 levels', '3' => '3 levels', '4' => '4 levels', '5' => '5 levels', '6' => '6 levels', '7' => '7 levels', '8' => '8 levels', '9' => '9 levels', '99' => '99 levels', ); $f->getTab("properties")->selectList( -name=>'depth', -label=>WebGUI::International::get(27,'Navigation'), -options=>\%depths, -value=>[$session{form}{depth} || $config->{depth}] ); $f->getTab("properties")->yesNo( -name=>'showSystemPages', -label=>WebGUI::International::get(30,'Navigation'), -value=>$session{form}{showSystemPages} || $config->{showSystemPages} ); $f->getTab("properties")->yesNo( -name=>'showHiddenPages', -label=>WebGUI::International::get(31,'Navigation'), -value=>$session{form}{showHiddenPages} || $config->{showHiddenPages} ); $f->getTab("properties")->yesNo( -name=>'showUnprivilegedPages', -label=>WebGUI::International::get(32,'Navigation'), -value=>$session{form}{showUnprivilegedPages} || $config->{showUnprivilegedPages} ); $f->getTab("layout")->template( -name=>'templateId', -label=>WebGUI::International::get(913), -value=>$session{form}{templateId} || $config->{templateId}, -namespace=>'Navigation', ); $f->getTab("layout")->yesNo( -name=>'reverse', -label=>WebGUI::International::get(29,'Navigation'), -value=>$session{form}{'reverse'} || $config->{'reverse'} ); # window.open('', 'navPreview', 'toolbar=no,width=400,height=300,status=no,location=no,scrollbars=yes,resizable=yes'); my $previewButton = qq{ }; my $saveButton = ' '; $f->{_submit} = $previewButton." ".$saveButton; $output .= $f->print; return _submenu($output); } #------------------------------------------------------------------- sub www_editNavigationSave { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); # Check on duplicate identifier my ($existingNavigationId, $existingIdentifier) = WebGUI::SQL->quickArray("select navigationId, identifier from Navigation where identifier = " .quote($session{form}{identifier})); if(($existingIdentifier && $session{form}{navigationId} eq "new") || ($existingIdentifier && $existingNavigationId != $session{form}{navigationId})) { $session{form}{identifier} = undef; return WebGUI::International::get(33,'Navigation').www_editNavigation(); } if ($session{form}{navigationId} eq "new") { $session{form}{navigationId} = getNextId("navigationId"); WebGUI::SQL->write("insert into Navigation (navigationId, identifier) values ($session{form}{navigationId}, ".quote($session{form}{identifier}).")"); } $session{form}{startAt} = $session{form}{startAt_new} || $session{form}{startAt}; # Combo field WebGUI::SQL->write("update Navigation set depth = $session{form}{depth}, method = ".quote($session{form}{method}).", startAt = ".quote($session{form}{startAt}).", stopAtLevel = ".quote($session{form}{stopAtLevel}).", templateId = $session{form}{templateId}, showSystemPages = $session{form}{showSystemPages}, showHiddenPages = $session{form}{showHiddenPages}, showUnprivilegedPages = $session{form}{showUnprivilegedPages}, identifier = ".quote($session{form}{identifier}).", reverse = ".quote($session{form}{'reverse'})." where navigationId = $session{form}{navigationId}"); return www_listNavigation(); } #------------------------------------------------------------------- sub www_listNavigation { return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); my $output .= helpIcon(80).'

'.WebGUI::International::get(34,'Navigation').'

'; my $sth = WebGUI::SQL->read("select navigationId, identifier from Navigation order by identifier"); my $i = 0; my @row = (); while (my %data = $sth->hash) { $row[$i].= '' .deleteIcon('op=deleteNavigation&identifier='.$data{identifier}.'&navigationId='.$data{navigationId}) .editIcon('op=editNavigation&identifier='.$data{identifier}.'&navigationId='.$data{navigationId}) .copyIcon('op=copyNavigation&identifier='.$data{identifier}.'&navigationId='.$data{navigationId}) .''; $row[$i].= ''.$data{identifier}.''; $i++; } $sth->finish; my $p = WebGUI::Paginator->new(WebGUI::URL::page('op=listNavigation')); $p->setDataByArrayRef(\@row); $output .= ''; $output .= $p->getPage($session{form}{pn}); $output .= '
'; $output .= $p->getBarTraditional($session{form}{pn}); return _submenu($output); } #------------------------------------------------------------------- sub www_previewNavigation { #$session{page}{useEmptyStyle} = 1; $session{page}{useAdminStyle} = 1; $session{var}{adminOn} = 0; return WebGUI::Privilege::insufficient() unless (WebGUI::Privilege::isInGroup(3)); my $nav = WebGUI::Navigation->new( depth=>$session{form}{depth}, method=>$session{form}{method}, startAt=>$session{form}{startAt}, stopAtLevel=>$session{form}{stopAtLevel}, templateId=>$session{form}{templateId}, showSystemPages=>$session{form}{showSystemPages}, showHiddenPages=>$session{form}{showHiddenPages}, showUnprivilegedPages=>$session{form}{showUnprivilegedPages}, 'reverse'=>$session{form}{'reverse'}, ); my $output = qq(

Navigation Preview

Configuration Output
Identifier: $session{form}{identifier}
startAt: $session{form}{startAt}
method: $session{form}{method}
stopAtLevel: $session{form}{stopAtLevel}
depth: $session{form}{depth}
templateId: $session{form}{templateId}
reverse: $session{form}{'reverse'}
showSystemPages: $session{form}{showSystemPages}
showHiddenPages: $session{form}{showHiddenPages}
showUnprivilegedPages: $session{form}{showUnprivilegedPages}
) . $nav->build . qq(
); return $output; } 1;