diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 61de63392..ad2e2ee9a 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -66,8 +66,8 @@ the master database. This will have no effect on single database users, but can add a tremendous amount of scalability on large WebGUI sites that use database replication. - - Templated the EditableToggle, a, and AdminToggle macros. Thanks to Colin - Kuskie. + - Templated the EditableToggle, a, GroupAdd, GroupDelete, H, LoginToggle, r, + and AdminToggle macros. Thanks to Colin Kuskie. - bugfix [ 933881 ] Forms not compliant (solution). Thanks to Nicklous Roberts. - bugfix [ 934410 ] non-compliant HTML (solution). Thanks to Nicklous @@ -82,7 +82,7 @@ scalability a lot. Thanks to Martin Kamerbeek / Procolix - bugfix [ 977201 ] ws client bug - bugfix [ 969740 ] Messageboard: Deleting of postings - + - Added an option to sort a select list by its values. Thanks to Roy Johnson. 6.0.3 diff --git a/docs/credits.txt b/docs/credits.txt index 5cfb61c08..415bd277a 100644 --- a/docs/credits.txt +++ b/docs/credits.txt @@ -23,6 +23,7 @@ Contributing Developers..............Peter Beardsley / Appropriate Solutions Chris Gebhardt / OpenServe Andy Grundman Chris Jackson + Roy Johnson Koen de Jonge / ProcoliX Martin Kamerbeek / ProcoliX Christian Kocourek diff --git a/docs/gotcha.txt b/docs/gotcha.txt index d238ed451..2053d26d7 100644 --- a/docs/gotcha.txt +++ b/docs/gotcha.txt @@ -36,6 +36,9 @@ save you many hours of grief. sure you have extrasPath and extrasURL defined in your config file. + * The ThumbnailLinker macro has been removed. You can now use the + Thumbnail macro because it is templated. + 6.0.2 -------------------------------------------------------------------- diff --git a/docs/upgrades/upgrade_6.0.3-6.1.0.pl b/docs/upgrades/upgrade_6.0.3-6.1.0.pl index 83bf9f495..47834db70 100644 --- a/docs/upgrades/upgrade_6.0.3-6.1.0.pl +++ b/docs/upgrades/upgrade_6.0.3-6.1.0.pl @@ -18,6 +18,29 @@ GetOptions( WebGUI::Session::open("../..",$configFile); + + +#-------------------------------------------- +print "\tUpdating config file.\n" unless ($quiet); +my $pathToConfig = '../../etc/'.$configFile; +my $conf = Parse::PlainConfig->new('DELIM' => '=', 'FILE' => $pathToConfig); +$conf->set("templateCacheType"=>"file"); +my $macros = $conf->get("macros"); +delete $macros->{"\\"}; +$macros->{"\\\\"} = "Backslash_pageUrl"; +$macros->{"Navigation"} = "Navigation"; +my %newMacros; +foreach my $macro (keys %{$macros}) { + unless ( + $macros->{$macro} eq "ThumbnailLinker" + ) { + $newMacros{$macro} = $macros->{$macro}; + } +} +$conf->set("macros"=>\%newMacros); +$conf->write; + + #-------------------------------------------- print "\tRemoving unneeded files and directories.\n" unless ($quiet); unlink("../../lib/WebGUI/Operation/International.pm"); @@ -25,6 +48,7 @@ unlink("../../lib/WebGUI/Wobject/Item.pm"); unlink("../../lib/WebGUI/Wobject/LinkList.pm"); unlink("../../lib/WebGUI/Wobject/FAQ.pm"); unlink("../../lib/WebGUI/Wobject/ExtraColumn.pm"); +unlink("../../lib/WebGUI/Macro/ThumbnailLinker.pm"); unlink("../../lib/WebGUI/Macro/m_currentMenuHorizontal.pm"); unlink("../../lib/WebGUI/Macro/M_currentMenuVertical.pm"); unlink("../../lib/WebGUI/Macro/s_specificMenuHorizontal.pm"); @@ -44,6 +68,7 @@ unlink("../../lib/WebGUI/Macro/TopDropMenu.pm"); unlink("../../lib/WebGUI/Macro/Question_search.pm"); +#-------------------------------------------- print "\tResetting user languages.\n" unless ($quiet); my ($defaultLangId) = WebGUI::SQL->quickArray("select dataDefault from userProfileField where fieldName='language'"); $defaultLangId =~ s/\[//; @@ -75,6 +100,7 @@ foreach my $key (keys %{$langs}) { WebGUI::SQL->write("update page set languageId=".quote($langs->{$key})." where languageId=".$key); } +#-------------------------------------------- print "\tConverting page tree to the Nested Set model.\n"; sub walk_down { my($pageId, $o) = @_[0,1]; diff --git a/docs/upgrades/upgrade_6.0.3-6.1.0.sql b/docs/upgrades/upgrade_6.0.3-6.1.0.sql index dd1c552bc..809d43fbd 100644 --- a/docs/upgrades/upgrade_6.0.3-6.1.0.sql +++ b/docs/upgrades/upgrade_6.0.3-6.1.0.sql @@ -4,7 +4,16 @@ drop table international; drop table help; alter table WSClient add sharedCache tinyint unsigned not null default '0'; alter table WSClient add cacheTTL smallint(5) unsigned NOT NULL default '60'; -INSERT INTO template VALUES (1,'Default Account','','Macro/a_account',1,1); -INSERT INTO template VALUES (1,'Default Editable Toggle','','Macro/EditableToggle',1,1); -INSERT INTO template VALUES (1,'Default Admin Toggle','','Macro/AdminToggle',1,1); +INSERT INTO template VALUES (1,'Default Account Macro','','Macro/a_account',1,1); +INSERT INTO template VALUES (1,'Default Editable Toggle Macro','','Macro/EditableToggle',1,1); +INSERT INTO template VALUES (1,'Default Admin Toggle Macro','','Macro/AdminToggle',1,1); +INSERT INTO template VALUES (1,'Default File Macro','','Macro/File',1,1); +INSERT INTO template VALUES (2,'File no icon','','Macro/File',1,1); +INSERT INTO template VALUES (3,'File with size','()','Macro/File',1,1); +INSERT INTO template VALUES (1,'Default Group Add Macro','','Macro/GroupAdd',1,1); +INSERT INTO template VALUES (1,'Default Group Delete Macro','','Macro/GroupDelete',1,1); +INSERT INTO template VALUES (1,'Default Homelink','','Macro/H_homeLink',1,1); +INSERT INTO template VALUES (1,'Default Make Printable','','Macro/r_printable',1,1); +INSERT INTO template VALUES (1,'Default LoginToggle','','Macro/LoginToggle',1,1); + diff --git a/lib/WebGUI/Form.pm b/lib/WebGUI/Form.pm index 89991dbc1..f288c3248 100644 --- a/lib/WebGUI/Form.pm +++ b/lib/WebGUI/Form.pm @@ -16,6 +16,7 @@ package WebGUI::Form; use strict; use HTTP::BrowserDetect; +use Tie::IxHash; use WebGUI::DateTime; use WebGUI::International; use WebGUI::Session; @@ -1314,6 +1315,10 @@ If you want to add anything special to this form element like javascript actions 'onChange="this.form.submit()"' +=item sortByValue + +A boolean value for whether or not the values in the options hash should be sorted. + =back =cut @@ -1322,20 +1327,30 @@ sub selectList { my ($output, $key, $item, $size, $multiple); $size = $_[0]->{size} || 1; $multiple = ' multiple="1"' if ($_[0]->{multiple}); - $output = '{extras}.$multiple.'>'; + my %options; + if ($_[0]->{sortByValue}) { + tie %options, 'Tie::IxHash'; + foreach my $optionKey (sort {"\L${$_[0]->{options}}{$a}" cmp "\L${$_[0]->{options}}{$b}" } keys %{$_[0]->{options}}) { + $options{$optionKey} = ${$_[0]->{options}}{$optionKey}; + } + } else { + %options = %{$_[0]->{options}}; + } + foreach $key (keys %options) { + $output .= ''; } $output .= ''; return $output; } + #------------------------------------------------------------------- =head2 submit ( hashRef ) diff --git a/lib/WebGUI/HTMLForm.pm b/lib/WebGUI/HTMLForm.pm index 896da4b12..61e52c9de 100644 --- a/lib/WebGUI/HTMLForm.pm +++ b/lib/WebGUI/HTMLForm.pm @@ -1834,6 +1834,10 @@ Extra text to describe this form element or to provide special instructions. The UI level for this field. See the WebGUI developer's site for details. Defaults to "0". +=item sortByValue + +A boolean value for whether the values in the options hash should be sorted. + =back =cut @@ -1841,8 +1845,8 @@ The UI level for this field. See the WebGUI developer's site for details. Defaul sub selectList { my ($output); my ($self, @p) = @_; - my ($name, $options, $label, $value, $size, $multiple, $extras, $subtext, $uiLevel) = - rearrange([qw(name options label value size multiple extras subtext uiLevel)], @p); + my ($name, $options, $label, $value, $size, $multiple, $extras, $subtext, $uiLevel, $sortByValue) = + rearrange([qw(name options label value size multiple extras subtext uiLevel sortByValue)], @p); if (_uiLevelChecksOut($uiLevel)) { $output = WebGUI::Form::selectList({ "name"=>$name, @@ -1850,7 +1854,8 @@ sub selectList { "value"=>$value, "multiple"=>$multiple, "size"=>$size, - "extras"=>$extras + "extras"=>$extras, + "sortByValue"=>$sortByValue }); $output .= _subtext($subtext); $output = $self->_tableFormRow($label,$output); diff --git a/lib/WebGUI/Macro/AdminToggle.pm b/lib/WebGUI/Macro/AdminToggle.pm index d15b3c55c..77745bf42 100644 --- a/lib/WebGUI/Macro/AdminToggle.pm +++ b/lib/WebGUI/Macro/AdminToggle.pm @@ -23,21 +23,8 @@ sub process { if (WebGUI::Grouping::isInGroup(12)) { my %var; my @param = WebGUI::Macro::getParams($_[0]); - my $templateId = 1; ##Set default template in the namespace - ##1 param means use my template with default text - my ($turnOff, $turnOn) = (WebGUI::International::get(517),WebGUI::International::get(516)); - if (@param == 1) { - $templateId = WebGUI::Template::getIdByName($param[0],"Macro/AdminToggle"); - } - ##2 params means use my text with the default template - elsif (@param == 2) { - ($turnOff, $turnOn) = @param; - } - ##3 or more params means use my text and template, other args ignored - elsif (@param >= 3) { - ($turnOff, $turnOn) = @param[1,2]; - $templateId = WebGUI::Template::getIdByName($param[0],"Macro/AdminToggle"); - } + my $turnOn = $param[0] || WebGUI::International::get(516); + my $turnOff = $param[1] || WebGUI::International::get(517); if ($session{var}{adminOn}) { $var{'toggle.url'} = WebGUI::URL::page('op=switchOffAdmin'); $var{'toggle.text'} = $turnOff; @@ -45,8 +32,7 @@ sub process { $var{'toggle.url'} = WebGUI::URL::page('op=switchOnAdmin'); $var{'toggle.text'} = $turnOn; } - $templateId = 1 if $templateId == 0; - return WebGUI::Template::process($templateId,"Macro/AdminToggle",\%var); + return WebGUI::Template::process(WebGUI::Template::getIdByName($param[2],"Macro/AdminToggle"),"Macro/AdminToggle",\%var); } return ""; } diff --git a/lib/WebGUI/Macro/EditableToggle.pm b/lib/WebGUI/Macro/EditableToggle.pm index 584898e49..b091d5c8d 100644 --- a/lib/WebGUI/Macro/EditableToggle.pm +++ b/lib/WebGUI/Macro/EditableToggle.pm @@ -24,20 +24,8 @@ sub process { if (WebGUI::Page::canEdit() && WebGUI::Grouping::isInGroup(12)) { my %var; my @param = WebGUI::Macro::getParams($_[0]); - my $templateId = 1; ##Set default template in the namespace - my ($turnOff, $turnOn) = (WebGUI::International::get(517),WebGUI::International::get(516)); - ##1 param means use my template with default text - if (@param == 1) { - $templateId = WebGUI::Template::getIdByName($param[0],"Macro/EditableToggle"); - } - ##2 params means use my text with the default template - elsif (@param == 2) { - ($turnOff, $turnOn) = @param; - } - ##3 or more params means use my text and template, other args ignored - elsif (@param >= 3) { - ($turnOff, $turnOn) = @param[1,2]; - } + my $turnOn = $param[0] || WebGUI::International::get(516); + my $turnOff = $param[1] || WebGUI::International::get(517); if ($session{var}{adminOn}) { $var{'toggle.url'} = WebGUI::URL::page('op=switchOffAdmin'); $var{'toggle.text'} = $turnOff; @@ -45,8 +33,7 @@ sub process { $var{'toggle.url'} = WebGUI::URL::page('op=switchOnAdmin'); $var{'toggle.text'} = $turnOn; } - $templateId = 1 if $templateId == 0; - return WebGUI::Template::process($templateId,"Macro/EditableToggle",\%var); + return WebGUI::Template::process(WebGUI::Template::getIdByName($param[2],"Macro/EditableToggle"),"Macro/EditableToggle",\%var); } return ""; } diff --git a/lib/WebGUI/Macro/File.pm b/lib/WebGUI/Macro/File.pm index c5287cef4..7a06be248 100644 --- a/lib/WebGUI/Macro/File.pm +++ b/lib/WebGUI/Macro/File.pm @@ -14,24 +14,18 @@ use strict; use WebGUI::Collateral; use WebGUI::Macro; use WebGUI::Session; +use WebGUI::Template; #------------------------------------------------------------------- sub process { my @param = WebGUI::Macro::getParams($_[0]); if (my $collateral = WebGUI::Collateral->find($param[0])) { - - # include default icon unless a second param - if ( ! $param[1] ) { - return ' ' . - $collateral->get("name") . ''; - - # second param was flag, so no accompanying image - } else { - return '' . $collateral->get("name") . ''; - } + $var{'file.url'} = $collateral->getURL; + $var{'file.icon'} = $collateral->getIcon; + $var{'file.name'} = $param[0]; + $var{'file.size'} = $collateral->getSize; + $var{'file.thumbnail'} = $collateral->getThumbnail; + return WebGUI::Template::process(WebGUI::Template::getIdByName($param[1],"Macro/File"),"Macro/File", \%var); } else { return undef; } diff --git a/lib/WebGUI/Macro/GroupAdd.pm b/lib/WebGUI/Macro/GroupAdd.pm index 3653426ef..9417d5b29 100644 --- a/lib/WebGUI/Macro/GroupAdd.pm +++ b/lib/WebGUI/Macro/GroupAdd.pm @@ -15,6 +15,7 @@ use WebGUI::Group; use WebGUI::Grouping; use WebGUI::Macro; use WebGUI::Session; +use WebGUI::Template; use WebGUI::URL; #------------------------------------------------------------------- @@ -25,7 +26,10 @@ sub process { return "" if ($g->groupId eq ""); return "" unless ($g->autoAdd); return "" if (WebGUI::Grouping::isInGroup($g->groupId)); - return 'groupId).'">'.$param[1].''; + my %var = (); + $var{'group.url'} = WebGUI::URL::page("op=autoAddToGroup&groupId=".$g->groupId); + $var{'group.text'} = $param[1]; + return WebGUI::Template::process(WebGUI::Template::getIdByName($param[2],"Macro/GroupAdd"), "Macro/GroupAdd", \%var); } diff --git a/lib/WebGUI/Macro/GroupDelete.pm b/lib/WebGUI/Macro/GroupDelete.pm index 56f3b1c67..4bd630408 100644 --- a/lib/WebGUI/Macro/GroupDelete.pm +++ b/lib/WebGUI/Macro/GroupDelete.pm @@ -15,6 +15,7 @@ use WebGUI::Group; use WebGUI::Grouping; use WebGUI::Macro; use WebGUI::Session; +use WebGUI::Template; use WebGUI::URL; #------------------------------------------------------------------- @@ -25,7 +26,10 @@ sub process { return "" if ($g->groupId eq ""); return "" unless ($g->autoDelete); return "" unless (WebGUI::Grouping::isInGroup($g->groupId)); - return 'groupId).'">'.$param[1].''; + my %var = (); + $var{'group.url'} = WebGUI::URL::page("op=autoDeleteFromGroup&groupId=".$g->groupId); + $var{'group.text'} = $param[1]; + return WebGUI::Template::process(WebGUI::Template::getIdByName($param[2],"Macro/GroupDelete"),"Macro/GroupDelete", \%var); } diff --git a/lib/WebGUI/Macro/H_homeLink.pm b/lib/WebGUI/Macro/H_homeLink.pm index 7e3fe2b14..54a3b0de4 100644 --- a/lib/WebGUI/Macro/H_homeLink.pm +++ b/lib/WebGUI/Macro/H_homeLink.pm @@ -27,13 +27,14 @@ sub process { } $temp = WebGUI::URL::gateway($temp); if ($param[0] ne "linkonly") { - $temp = ''; - if ($param[0] ne "") { - $temp .= $param[0]; - } else { - $temp .= WebGUI::International::get(47); - } - $temp .= ''; + my %var; + $var{'homelink.url'} = WebGUI::URL::gateway($temp); + if ($param[0] ne "") { + $var{'homeLink.text'} = $param[0]; + } else { + $var{'homeLink.text'} = WebGUI::International::get(47); + } + $temp = WebGUI::Template::process(WebGUI::Template::getIdByName($param[1],"Macro/H_homeLink"), "Macro/H_homeLink", \%var); } return $temp; } diff --git a/lib/WebGUI/Macro/LoginToggle.pm b/lib/WebGUI/Macro/LoginToggle.pm index e6be95e45..add703725 100644 --- a/lib/WebGUI/Macro/LoginToggle.pm +++ b/lib/WebGUI/Macro/LoginToggle.pm @@ -14,26 +14,25 @@ use strict; use WebGUI::International; use WebGUI::Macro; use WebGUI::Session; +use WebGUI::Template; use WebGUI::URL; #------------------------------------------------------------------- sub process { - my (@param, $temp, $login, $logout); - @param = WebGUI::Macro::getParams($_[0]); - if ($session{user}{userId} == 1) { - if ($param[0] eq "linkonly") { - return WebGUI::URL::page('op=displayLogin'); - } - $login = $param[0] || WebGUI::International::get(716); - $temp = ''.$login.''; - } else { - if ($param[0] eq "linkonly") { - return WebGUI::URL::page('op=logout'); - } - $logout = $param[1] || WebGUI::International::get(717); - $temp = ''.$logout.''; - } - return $temp; + my @param = WebGUI::Macro::getParams($_[0]); + my $login = $param[0] || WebGUI::International::get(716); + my $logout = $param[1] || WebGUI::International::get(717); + my %var; + if ($session{user}{userId} == 1) { + return WebGUI::URL::page("op=displayLogin") if ($param[0] eq "linkonly"); + $var{'toggle.url'} = WebGUI::URL::page('op=displayLogin'); + $var{'toggle.text'} = $login; + } else { + return WebGUI::URL::page("op=logout") if ($param[0] eq "linkonly"); + $var{'toggle.url'} = WebGUI::URL::page('op=logout'); + $var{'toggle.text'} = $logout; + } + return WebGUI::Template::process(WebGUI::Template::getIdByName($param[3],"Macro/LoginToggle"), "Macro/LoginToggle", \%var); } diff --git a/lib/WebGUI/Macro/a_account.pm b/lib/WebGUI/Macro/a_account.pm index 2b221cc95..a083973d9 100644 --- a/lib/WebGUI/Macro/a_account.pm +++ b/lib/WebGUI/Macro/a_account.pm @@ -21,18 +21,10 @@ use WebGUI::URL; sub process { my %var; my @param = WebGUI::Macro::getParams($_[0]); + return WebGUI::URL::page("op=displayAccount") if ($param[0] eq "linkonly"); $var{'account.url'} = WebGUI::URL::page('op=displayAccount'); - my $templateId = 1; ##Set default template in the namespace - $var{'account.text'} = WebGUI::International::get(46); - if (@param == 1) { - $var{'account.text'} = $param[0] if $param[0]; - } - elsif (@param == 2) { - $var{'account.text'} = $param[0] if $param[0]; - $templateId = WebGUI::Template::getIdByName($param[1],"Macro/a_account"); - $templateId = 1 if $templateId == 0; - } - return WebGUI::Template::process($templateId,"Macro/a_account",\%var); + $var{'account.text'} = $param[0] || WebGUI::International::get(46); + return WebGUI::Template::process(WebGUI::Template::getIdByName($param[1],"Macro/a_account"),"Macro/a_account",\%var); } diff --git a/lib/WebGUI/Macro/r_printable.pm b/lib/WebGUI/Macro/r_printable.pm index a378915fd..04d26b02b 100644 --- a/lib/WebGUI/Macro/r_printable.pm +++ b/lib/WebGUI/Macro/r_printable.pm @@ -15,6 +15,7 @@ use WebGUI::International; use WebGUI::Macro; use WebGUI::Session; use WebGUI::SQL; +use WebGUI::Template; use WebGUI::URL; use WebGUI::Utility; @@ -28,19 +29,20 @@ sub process { } $temp = WebGUI::URL::append($session{env}{REQUEST_URI},$append); if ($param[1] ne "") { - ($styleId) = WebGUI::SQL->quickArray("select styleId from style where name=".quote($param[1]),WebGUI::SQL->getSlave); + ($styleId) = WebGUI::Template::getIdByName($param[1],"style"); if ($styleId != 0) { $temp = WebGUI::URL::append($temp,'styleId='.$styleId); } } if ($param[0] ne "linkonly") { - $temp = ''; - if ($param[0] ne "") { - $temp .= $param[0]; - } else { - $temp .= WebGUI::International::get(53); - } - $temp .= ''; + my %var; + $var{'printable.url'} = $temp; + if ($param[0] ne "") { + $var{'printable.text'} = $param[0]; + } else { + $var{'printable.text'} = WebGUI::International::get(53); + } + $temp = WebGUI::Template::process(WebGUI::Template::getByName($param[2],"Macro/r_printable"), "Macro/r_printable", \%var); } return $temp; }