diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt
index d3c3ee736..10b1e3009 100644
--- a/docs/changelog/6.x.x.txt
+++ b/docs/changelog/6.x.x.txt
@@ -12,6 +12,9 @@
- fix: Manage groups in this group doesn't work
- Fixed a problem where the not found page would not display.
- fix: New page layout instead of not found
+ - fix: Rollback
+ - fix: debug output
+ - fix: Can't delete images at product asset
6.99.2
- fix - demo.plainblack.com getting started
diff --git a/lib/WebGUI/Asset/Wobject/Product.pm b/lib/WebGUI/Asset/Wobject/Product.pm
index b36d38237..562f94eaa 100644
--- a/lib/WebGUI/Asset/Wobject/Product.pm
+++ b/lib/WebGUI/Asset/Wobject/Product.pm
@@ -12,6 +12,7 @@ package WebGUI::Asset::Wobject::Product;
use strict;
use Tie::CPHash;
+use Tie::IxHash;
use WebGUI::Cache;
use WebGUI::HTMLForm;
use WebGUI::Storage::Image;
@@ -22,28 +23,6 @@ use WebGUI::Asset::Wobject;
our @ISA = qw(WebGUI::Asset::Wobject);
-#-------------------------------------------------------------------
-sub _addFileTab {
- my $self = shift;
- my $tabform = $_[0];
- my $column = $_[1];
- my $internationalId = $_[2];
- my $i18n = WebGUI::International->new($self->session,"Asset_Product");
- unless ($self->get($column)){
- $tabform->getTab("properties")->file(
- -name=>$column,
- -label=>$i18n->get($internationalId),
- );
- return;
- }
-
- my $file = WebGUI::Storage->get($self->session,$self->get($column));
- $tabform->getTab("properties")->readOnly(
- -value=>''.$i18n->get("deleteImage").'',
- -label=>$i18n->get($internationalId),
- );
-}
-
#-------------------------------------------------------------------
sub _duplicateFile {
my $self = shift;
@@ -56,19 +35,6 @@ sub _duplicateFile {
}
}
-#-------------------------------------------------------------------
-sub _save {
- my $self = shift;
- my $file = WebGUI::Storage::Image->create($self->session);
- my $filename = $file->addFileFromFormPost($_[0]);
- unless ($filename) {
- $file->delete;
- return "";
- }
- $file->generateThumbnail($filename);
- $self->session->db->write("update Product set $_[0]=".$self->session->db->quote($file->getId)." where assetId=".$self->session->db->quote($self->getId)." and revisionDate=".$self->session->db->quote($self->get("revisionDate")));
-}
-
#-------------------------------------------------------------------
=head2 addRevision
@@ -84,7 +50,6 @@ sub addRevision {
if ($self->get($field)) {
my $newStorage = WebGUI::Storage->get($self->session,$self->get($field))->copy;
$newSelf->update({$field=>$newStorage->getId});
- $self->session->db->write("update Product set $field=".$self->session->db->quote($newStorage->getId)." where assetId=".$self->session->db->quote($newSelf->getId)." and revisionDate=".$self->session->db->quote($newSelf->get("revisionDate")));
}
}
return $newSelf;
@@ -96,12 +61,9 @@ sub definition {
my $session = shift;
my $definition = shift;
my $i18n = WebGUI::International->new($session,"Asset_Product");
- push(@{$definition}, {
- assetName=>$i18n->get('assetName'),
- icon=>'product.gif',
- tableName=>'Product',
- className=>'WebGUI::Asset::Wobject::Product',
- properties=>{
+ my %properties;
+ tie %properties, 'Tie::IxHash';
+ %properties = (
cacheTimeout => {
tab => "display",
fieldType => "interval",
@@ -112,42 +74,83 @@ sub definition {
},
templateId =>{
fieldType=>"template",
+ tab => "display",
+ namespace=>"Product",
+ label=>$i18n->get(62),
+ hoverHelp=>$i18n->get('62 description'),
defaultValue=>'PBtmpl0000000000000056'
},
price=>{
+ label=>$i18n->get(10),
+ hoverHelp=>$i18n->get('10 description'),
+ tab => "properties",
fieldType=>"text",
defaultValue=>undef
},
productNumber=>{
+ tab => "properties",
+ label=>$i18n->get(11),
+ hoverHelp=>$i18n->get('11 description'),
fieldType=>"text",
defaultValue=>undef
},
-# image1=>{
-# fieldType=>"text",
-# defaultValue=>undef
-# },
-# image2=>{
-# fieldType=>"text",
-# defaultValue=>undef
-# },
-# image3=>{
-# fieldType=>"text",
-# defaultValue=>undef
-# },
-# brochure=>{
-# fieldType=>"text",
-# defaultValue=>undef
-# },
-# manual=>{
-# fieldType=>"text",
-# defaultValue=>undef
-# },
-# warranty=>{
-# fieldType=>"text",
-# defaultValue=>undef
-# },
- }
- });
+ image1=>{
+ tab => "properties",
+ fieldType=>"image",
+ defaultValue=>undef,
+ maxAttachments=>1,
+ label=>$i18n->get(7),
+ deleteFileUrl=>$session->url->page("func=deleteFileConfirm;file=image1;filename=")
+ },
+ image2=>{
+ tab => "properties",
+ fieldType=>"image",
+ maxAttachments=>1,
+ label=>$i18n->get(8),
+ deleteFileUrl=>$session->url->page("func=deleteFileConfirm;file=image2;filename="),
+ defaultValue=>undef
+ },
+ image3=>{
+ tab => "properties",
+ fieldType=>"image",
+ maxAttachments=>1,
+ label=>$i18n->get(9),
+ deleteFileUrl=>$session->url->page("func=deleteFileConfirm;file=image3;filename="),
+ defaultValue=>undef
+ },
+ brochure=>{
+ tab => "properties",
+ fieldType=>"file",
+ maxAttachments=>1,
+ label=>$i18n->get(13),
+ deleteFileUrl=>$session->url->page("func=deleteFileConfirm;file=brochure;filename="),
+ defaultValue=>undef
+ },
+ manual=>{
+ tab => "properties",
+ fieldType=>"file",
+ maxAttachments=>1,
+ label=>$i18n->get(14),
+ deleteFileUrl=>$session->url->page("func=deleteFileConfirm;file=manual;filename="),
+ defaultValue=>undef
+ },
+ warranty=>{
+ tab => "properties",
+ fieldType=>"file",
+ maxAttachments=>1,
+ label=>$i18n->get(15),
+ deleteFileUrl=>$session->url->page("func=deleteFileConfirm;file=warranty;filename="),
+ defaultValue=>undef
+ },
+ );
+ push(@{$definition}, {
+ assetName=>$i18n->get('assetName'),
+ autoGenerateForms=>1,
+ icon=>'product.gif',
+ tableName=>'Product',
+ className=>'WebGUI::Asset::Wobject::Product',
+ properties=>\%properties
+ });
return $class->SUPER::definition($session, $definition);
}
@@ -204,38 +207,6 @@ sub duplicate {
return $newAsset;
}
-#-------------------------------------------------------------------
-sub getEditForm {
- my $self = shift;
- my ($file);
- my $i18n = WebGUI::International->new($self->session,"Asset_Product");
- my $tabform = $self->SUPER::getEditForm();
- $tabform->getTab("display")->template(
- -value=>$self->getValue('templateId'),
- -namespace=>"Product",
- -label=>$i18n->get(62),
- -hoverHelp=>$i18n->get('62 description'),
- );
- $tabform->getTab("properties")->text(
- -name=>"price",
- -label=>$i18n->get(10),
- -hoverHelp=>$i18n->get('10 description'),
- -value=>$self->getValue("price")
- );
- $tabform->getTab("properties")->text(
- -name=>"productNumber",
- -label=>$i18n->get(11),
- -hoverHelp=>$i18n->get('11 description'),
- -value=>$self->getValue("productNumber")
- );
- $self->_addFileTab($tabform,"image1",7);
- $self->_addFileTab($tabform,"image2",8);
- $self->_addFileTab($tabform,"image3",9);
- $self->_addFileTab($tabform,"brochure",13);
- $self->_addFileTab($tabform,"manual",14);
- $self->_addFileTab($tabform,"warranty",15);
- return $tabform;
-}
#-------------------------------------------------------------------
sub getFileIconUrl {
@@ -356,7 +327,7 @@ sub purgeCache {
#-------------------------------------------------------------------
-sub purgeRevision {
+sub purgeRevision {
my $self = shift;
WebGUI::Storage->get($self->session,$self->get("image1"))->delete if ($self->get("image1"));
WebGUI::Storage->get($self->session,$self->get("image2"))->delete if ($self->get("image2"));
@@ -477,12 +448,13 @@ sub www_deleteFeatureConfirm {
#-------------------------------------------------------------------
sub www_deleteFileConfirm {
my $self = shift;
- my $column = $self->session->form->process("file");
return $self->session->privilege->insufficient() unless ($self->canEdit);
+ my $column = $self->session->form->process("file");
+ return $self->www_edit unless (isIn($column, qw(image1 image2 image3 manual warranty brochure)));
my $store = $self->get($column);
my $file = WebGUI::Storage->get($self->session,$store);
- $file->delete;
- $self->update({$column => ''});
+ $file->delete if defined $file;
+ $self->update({$column=>''});
return $self->www_edit;
}
@@ -504,18 +476,6 @@ sub www_deleteSpecificationConfirm {
return "";
}
-#-------------------------------------------------------------------
-sub processPropertiesFromFormPost {
- my $self = shift;
- $self->SUPER::processPropertiesFromFormPost;
- $self->_save("image1");
- $self->_save("image2");
- $self->_save("image3");
- $self->_save("brochure");
- $self->_save("manual");
- $self->_save("warranty");
- return "";
-}
#-------------------------------------------------------------------
sub www_editBenefit {
diff --git a/lib/WebGUI/AssetVersioning.pm b/lib/WebGUI/AssetVersioning.pm
index 8c4df8033..784401316 100644
--- a/lib/WebGUI/AssetVersioning.pm
+++ b/lib/WebGUI/AssetVersioning.pm
@@ -291,18 +291,22 @@ sub www_manageRevisions {
sub www_purgeRevision {
my $self = shift;
- return $self->session->privilege->insufficient() unless $self->canEdit;
- my $revisionDate = $self->session->form->process("revisionDate");
+ my $session = $self->session;
+ return $session->privilege->insufficient() unless $self->canEdit;
+ my $revisionDate = $session->form->process("revisionDate");
return undef unless $revisionDate;
-
- my $asset = WebGUI::Asset->new($self->session,$self->getId,$self->get("className"),$revisionDate);
+ my $asset = WebGUI::Asset->new($session,$self->getId,$self->get("className"),$revisionDate);
return undef if ($asset->get('revisionDate') != $revisionDate);
-
+ my $parent = $asset->getParent;
$asset->purgeRevision;
- if ($self->session->form->process("proceed") eq "manageRevisionsInTag") {
- $self->session->http->setRedirect($self->getUrl("op=manageRevisionsInTag"));
+ if ($session->form->process("proceed") eq "manageRevisionsInTag") {
+ my $working = (defined $self) ? $self : $parent;
+ $session->http->setRedirect($working->getUrl("op=manageRevisionsInTag"));
return "";
}
+ unless (defined $self) {
+ return $parent->www_view;
+ }
return $self->www_manageRevisions;
}
diff --git a/lib/WebGUI/Form/File.pm b/lib/WebGUI/Form/File.pm
index dc58ee28a..2c70d77ae 100644
--- a/lib/WebGUI/Form/File.pm
+++ b/lib/WebGUI/Form/File.pm
@@ -209,6 +209,9 @@ sub toHtml {
uploader.addRow();
!, $self->get("name"), $i18n->get("removeLabel"), $maxFiles;
$uploadControl .= WebGUI::Form::Hidden->new($self->session, {-name => $self->privateName('action'), -value => 'upload'})->toHtml()."
";
+ } else {
+ $uploadControl .= WebGUI::Form::Hidden->new($self->session, {-name => $self->get("name"), -value => $self->get("value")})->toHtml()."
";
+ $uploadControl .= WebGUI::Form::Hidden->new($self->session, {-name => $self->privateName('action'), -value => 'keep'})->toHtml()."
";
}
if (scalar(@files)) {
foreach my $file (@{$storage->getFiles}) {
diff --git a/lib/WebGUI/Form/Image.pm b/lib/WebGUI/Form/Image.pm
index 416b7630a..6491e4f8d 100644
--- a/lib/WebGUI/Form/Image.pm
+++ b/lib/WebGUI/Form/Image.pm
@@ -181,6 +181,9 @@ sub toHtml {
uploader.addRow();
!, $self->get("name"), $i18n->get("removeLabel"), $maxFiles;
$uploadControl .= WebGUI::Form::Hidden->new($self->session, {-name => $self->privateName('action'), -value => 'upload'})->toHtml()."
";
+ } else {
+ $uploadControl .= WebGUI::Form::Hidden->new($self->session, {-name => $self->get("name"), -value => $self->get("value")})->toHtml()."
";
+ $uploadControl .= WebGUI::Form::Hidden->new($self->session, {-name => $self->privateName('action'), -value => 'keep'})->toHtml()."
";
}
if (scalar(@files)) {
foreach my $file (@{$storage->getFiles}) {
diff --git a/lib/WebGUI/Group.pm b/lib/WebGUI/Group.pm
index 1fb982bcd..2a6eaeae4 100755
--- a/lib/WebGUI/Group.pm
+++ b/lib/WebGUI/Group.pm
@@ -222,6 +222,7 @@ sub clearCaches {
foreach my $group ( $self->getId, @{ $groups } ) {
WebGUI::Cache->new($self->session, $group)->delete;
}
+ $self->session->stow->delete("groupObj");
$self->session->stow->delete("isInGroup");
$self->session->stow->delete("gotGroupsInGroup");
}
@@ -437,134 +438,6 @@ sub expireOffset {
}
-#-------------------------------------------------------------------
-
-=head2 getDatabaseUsers ( )
-
-Get the set of users allowed to be in this group via a database query.
-
-=cut
-
-sub getDatabaseUsers {
- my $self = shift;
- my @dbUsers = ();
- my $gid = $self->getId;
- ### Check db database
- if ($self->get("dbQuery") && defined $self->get("databaseLinkId")) {
- my $dbLink = WebGUI::DatabaseLink->new($self->session,$self->get("databaseLinkId"));
- my $dbh = $dbLink->db;
- if (defined $dbh) {
- my $query = $self->get("dbQuery");
- WebGUI::Macro::process($self->session,\$query);
- my $sth = $dbh->unconditionalRead($query);
- unless ($sth->errorCode < 1) {
- $self->session->errorHandler->warn("There was a problem with the database query for group ID $gid.");
- }
- else {
- while(my ($userId)=$sth->array) {
- push @dbUsers, $userId;
- }
- }
- $sth->finish;
- $dbLink->disconnect;
- }
- }
- return \@dbUsers;
-}
-
-#-------------------------------------------------------------------
-
-=head2 getKarmaUsers ( )
-
-Get the set of users allowed to be in this group via their current karma setting
-and this group's karmaThreshold. The set is returned as an array ref.
-
-If karma is not enabled for this site, it will return a empty array ref.
-
-=cut
-
-sub getKarmaUsers {
- my $self = shift;
- return [] unless $self->session->setting->get('useKarma');
- return $self->session->db->buildArrayRef('select userId from users where karma >= ?', [$self->karmaThreshold]);
-}
-
-#-------------------------------------------------------------------
-
-=head2 getScratchUsers ( )
-
-Get the set of users allowed to be in this group via session scratch variable settings
-and this group's scratchFilter. The set is returned as an array ref.
-
-If no scratchFilter has been set for this group, returns an empty array ref.
-
-=cut
-
-sub getScratchUsers {
- my $self = shift;
- my $scratchFilter;
- return [] unless $scratchFilter = $self->scratchFilter();
-
- my $time = $self->session->datetime->time();
-
- $scratchFilter =~ s/\s//g;
- my @filters = split /;/, $scratchFilter;
-
- my @scratchClauses = ();
- my @scratchPlaceholders = ();
- foreach my $filter (@filters) {
- my ($name, $value) = split /=/, $filter;
- push @scratchClauses, "(s.name=? AND s.value=?)";
- push @scratchPlaceholders, $name, $value;
- }
- my $scratchClause = join ' OR ', @scratchClauses;
-
- my $query = < $time AND
- ( $scratchClause )
-EOQ
- return $self->session->db->buildArrayRef($query, [ @scratchPlaceholders ]);
-}
-
-#-------------------------------------------------------------------
-
-=head2 getIpUsers ( )
-
-Get the set of users allowed to be in this group via the lastIP recorded in
-the user's session and this group's IpFilter. The set is returned as an array ref.
-
-If no IpFilter has been set for this group, returns an empty array ref.
-
-=cut
-
-sub getIpUsers {
- my $self = shift;
- my $IpFilter;
- return [] unless $IpFilter = $self->ipFilter();
-
- my $time = $self->session->datetime->time();
-
- $IpFilter =~ s/\s//g;
- my @filters = split /;/, $IpFilter;
-
- my $query = "select userId,lastIP from userSession where expires > ?";
-
- my $sth = $self->session->db->read($query, [ $self->session->datetime->time() ]);
- my %localCache = ();
- my @ipUsers = ();
- $self->session->errorHandler->warn("Fetching IP users");
- while (my ($userId, $lastIP) = $sth->array() ) {
- if (!exists $localCache{$lastIP}) {
- $localCache{$lastIP} = isInSubnet($lastIP, \@filters);
- }
- push @ipUsers, $userId if $localCache{$lastIP};
- }
- return \@ipUsers;
-}
-
-
#-------------------------------------------------------------------
=head2 find ( session, name )
@@ -636,6 +509,87 @@ sub getAllGroupsFor {
#-------------------------------------------------------------------
+=head2 getAllUsers ( [ withoutExpired ] )
+
+Returns an array reference containing a list of users that belong to this group
+and in any group that belongs to this group.
+
+=head3 withoutExpired
+
+A boolean that if set true will return the users list minus the expired groupings.
+
+=cut
+
+sub getAllUsers {
+ my $self = shift;
+ my $withoutExpired = shift;
+ my $loopCount = shift;
+ my $expireTime = 0;
+ my $cache = WebGUI::Cache->new($self->session, $self->getId);
+ my $value = $cache->get;
+ return $value if defined $value;
+ my @users = ();
+ push @users,
+ @{ $self->getUsers($withoutExpired) },
+ @{ $self->getDatabaseUsers() },
+ @{ $self->getKarmaUsers() },
+ @{ $self->getScratchUsers() },
+ @{ $self->getIpUsers() },
+ ;
+ ++$loopCount;
+ if ($loopCount > 99) {
+ $self->session->errorHandler->fatal("Endless recursive loop detected while determining groups in group.\nRequested groupId: ".$self->getId);
+ }
+ my $groups = $self->getGroupsIn();
+ ##Have to iterate twice due to the withoutExpired clause.
+ foreach my $groupId (@{ $groups }) {
+ my $subGroup = WebGUI::Group->new($self->session, $groupId);
+ push @users, @{ $subGroup->getAllUsers(1, $withoutExpired, $loopCount) };
+ }
+ my %users = map { $_ => 1 } @users;
+ @users = keys %users;
+ $cache->set(\@users, $self->groupCacheTimeout);
+ return \@users;
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 getDatabaseUsers ( )
+
+Get the set of users allowed to be in this group via a database query.
+
+=cut
+
+sub getDatabaseUsers {
+ my $self = shift;
+ my @dbUsers = ();
+ my $gid = $self->getId;
+ ### Check db database
+ if ($self->get("dbQuery") && defined $self->get("databaseLinkId")) {
+ my $dbLink = WebGUI::DatabaseLink->new($self->session,$self->get("databaseLinkId"));
+ my $dbh = $dbLink->db;
+ if (defined $dbh) {
+ my $query = $self->get("dbQuery");
+ WebGUI::Macro::process($self->session,\$query);
+ my $sth = $dbh->unconditionalRead($query);
+ unless ($sth->errorCode < 1) {
+ $self->session->errorHandler->warn("There was a problem with the database query for group ID $gid.");
+ }
+ else {
+ while(my ($userId)=$sth->array) {
+ push @dbUsers, $userId;
+ }
+ }
+ $sth->finish;
+ $dbLink->disconnect;
+ }
+ }
+ return \@dbUsers;
+}
+
+#-------------------------------------------------------------------
+
=head2 getGroupsFor ( )
Returns an array reference containing a list of groups this group is in. This method
@@ -704,50 +658,111 @@ sub getGroupsIn {
#-------------------------------------------------------------------
-=head2 getAllUsers ( [ withoutExpired ] )
+=head2 getId ( )
-Returns an array reference containing a list of users that belong to this group
-and in any group that belongs to this group.
-
-=head3 withoutExpired
-
-A boolean that if set true will return the users list minus the expired groupings.
+Returns the groupId for this group.
=cut
-sub getAllUsers {
+sub getId {
my $self = shift;
- my $withoutExpired = shift;
- my $loopCount = shift;
- my $expireTime = 0;
- my $cache = WebGUI::Cache->new($self->session, $self->getId);
- my $value = $cache->get;
- return $value if defined $value;
- my @users = ();
- push @users,
- @{ $self->getUsers($withoutExpired) },
- @{ $self->getDatabaseUsers() },
- @{ $self->getKarmaUsers() },
- @{ $self->getScratchUsers() },
- @{ $self->getIpUsers() },
- ;
- ++$loopCount;
- if ($loopCount > 99) {
- $self->session->errorHandler->fatal("Endless recursive loop detected while determining groups in group.\nRequested groupId: ".$self->getId);
- }
- my $groups = $self->getGroupsIn();
- ##Have to iterate twice due to the withoutExpired clause.
- foreach my $groupId (@{ $groups }) {
- my $subGroup = WebGUI::Group->new($self->session, $groupId);
- push @users, @{ $subGroup->getAllUsers(1, $withoutExpired, $loopCount) };
- }
- my %users = map { $_ => 1 } @users;
- @users = keys %users;
- $cache->set(\@users, $self->groupCacheTimeout);
- return \@users;
+ return $self->{_groupId};
}
+#-------------------------------------------------------------------
+
+=head2 getIpUsers ( )
+
+Get the set of users allowed to be in this group via the lastIP recorded in
+the user's session and this group's IpFilter. The set is returned as an array ref.
+
+If no IpFilter has been set for this group, returns an empty array ref.
+
+=cut
+
+sub getIpUsers {
+ my $self = shift;
+ my $IpFilter;
+ return [] unless $IpFilter = $self->ipFilter();
+
+ my $time = $self->session->datetime->time();
+
+ $IpFilter =~ s/\s//g;
+ my @filters = split /;/, $IpFilter;
+
+ my $query = "select userId,lastIP from userSession where expires > ?";
+
+ my $sth = $self->session->db->read($query, [ $self->session->datetime->time() ]);
+ my %localCache = ();
+ my @ipUsers = ();
+ $self->session->errorHandler->warn("Fetching IP users");
+ while (my ($userId, $lastIP) = $sth->array() ) {
+ if (!exists $localCache{$lastIP}) {
+ $localCache{$lastIP} = isInSubnet($lastIP, \@filters);
+ }
+ push @ipUsers, $userId if $localCache{$lastIP};
+ }
+ return \@ipUsers;
+}
+
+
+#-------------------------------------------------------------------
+
+=head2 getKarmaUsers ( )
+
+Get the set of users allowed to be in this group via their current karma setting
+and this group's karmaThreshold. The set is returned as an array ref.
+
+If karma is not enabled for this site, it will return a empty array ref.
+
+=cut
+
+sub getKarmaUsers {
+ my $self = shift;
+ return [] unless $self->session->setting->get('useKarma');
+ return $self->session->db->buildArrayRef('select userId from users where karma >= ?', [$self->karmaThreshold]);
+}
+
+#-------------------------------------------------------------------
+
+=head2 getScratchUsers ( )
+
+Get the set of users allowed to be in this group via session scratch variable settings
+and this group's scratchFilter. The set is returned as an array ref.
+
+If no scratchFilter has been set for this group, returns an empty array ref.
+
+=cut
+
+sub getScratchUsers {
+ my $self = shift;
+ my $scratchFilter;
+ return [] unless $scratchFilter = $self->scratchFilter();
+
+ my $time = $self->session->datetime->time();
+
+ $scratchFilter =~ s/\s//g;
+ my @filters = split /;/, $scratchFilter;
+
+ my @scratchClauses = ();
+ my @scratchPlaceholders = ();
+ foreach my $filter (@filters) {
+ my ($name, $value) = split /=/, $filter;
+ push @scratchClauses, "(s.name=? AND s.value=?)";
+ push @scratchPlaceholders, $name, $value;
+ }
+ my $scratchClause = join ' OR ', @scratchClauses;
+
+ my $query = < $time AND
+ ( $scratchClause )
+EOQ
+ return $self->session->db->buildArrayRef($query, [ @scratchPlaceholders ]);
+}
+
#-------------------------------------------------------------------
=head2 getUsers ( [ withoutExpired ] )
@@ -774,20 +789,6 @@ sub getUsers {
}
-#-------------------------------------------------------------------
-
-=head2 getId ( )
-
-Returns the groupId for this group.
-
-=cut
-
-sub getId {
- my $self = shift;
- return $self->{_groupId};
-}
-
-
#-------------------------------------------------------------------
=head2 karmaThreshold ( [ value ] )
@@ -917,11 +918,13 @@ sub new {
my $self = {};
$self->{_session} = shift;
$self->{_groupId} = shift;
- return $self->{_session}->{groupData}->{$self->{_groupId}} if $self->{_session}->{groupData}->{$self->{_groupId}};
my $override = shift;
+ my $cached = $self->{_session}->stow->get("groupObj");
+ return $cached->{$self->{_groupId}} if ($cached->{$self->{_groupId}});
bless $self, $class;
$self->_create($override) if ($self->{_groupId} eq "new");
- $self->{_session}->{groupData}->{$self->{_groupId}} = $self;
+ $cached->{$self->{_groupId}} = $self;
+ $self->{_session}->stow->set("groupObj", $cached);
return $self;
}
@@ -1132,7 +1135,6 @@ sub set {
my $value = shift;
$self->get("groupId") unless ($self->{_group}); # precache group stuff
$self->{_group}{$name} = $value;
- $self->session->{groupData}->{$self->getId} = undef;
$self->session->db->setRow("groups","groupId",{groupId=>$self->getId, $name=>$value, lastUpdated=>$self->session->datetime->time()});
$self->clearCaches;
}
diff --git a/lib/WebGUI/Operation/VersionTag.pm b/lib/WebGUI/Operation/VersionTag.pm
index aa083589c..92314c8c9 100644
--- a/lib/WebGUI/Operation/VersionTag.pm
+++ b/lib/WebGUI/Operation/VersionTag.pm
@@ -397,6 +397,7 @@ sub www_manageRevisionsInTag {
my $session = shift;
my $tagId = $session->form->get("tagId");
my $tag = WebGUI::VersionTag->new($session, $tagId);
+ return www_manageVersions($session) unless (defined $tag);
return $session->privilege->insufficient() unless ($session->user->isInGroup($tag->get("groupToUse")));
my $ac = WebGUI::AdminConsole->new($session,"versions");
my $i18n = WebGUI::International->new($session,"VersionTag");
diff --git a/lib/WebGUI/SQL/ResultSet.pm b/lib/WebGUI/SQL/ResultSet.pm
index d4b7d4737..4a2e64f02 100644
--- a/lib/WebGUI/SQL/ResultSet.pm
+++ b/lib/WebGUI/SQL/ResultSet.pm
@@ -117,8 +117,9 @@ sub execute {
my $self = shift;
my $placeholders = shift || [];
my $sql = $self->{_sql};
- $self->db->session->errorHandler->query($sql,$placeholders);
- $self->sth->execute(@{ $placeholders }) or $self->db->session->errorHandler->fatal("Couldn't execute prepared statement: $sql : With place holders: ".join(", ", @{$placeholders}).". Root cause: ". $self->errorMessage);
+ my $errorHandler = $self->db->session->errorHandler;
+ $errorHandler->query($sql,$placeholders);
+ $self->sth->execute(@{ $placeholders }) or $errorHandler->fatal("Couldn't execute prepared statement: $sql : With place holders: ".join(", ", @{$placeholders}).". Root cause: ". $self->errorMessage);
}
@@ -292,10 +293,11 @@ sub unconditionalRead {
my $sql = shift;
my $db = shift;
my $placeholders = shift;
- $db->session->errorHandler->query($sql,$placeholders);
- my $sth = $db->dbh->prepare($sql) or $db->session->errorHandler->warn("Unconditional read failed: ".$sql." : ".$db->dbh->errstr);
+ my $errorHandler = $db->session->errorHandler;
+ $errorHandler->query($sql,$placeholders);
+ my $sth = $db->dbh->prepare($sql) or $errorHandler->warn("Unconditional read failed: ".$sql." : ".$db->dbh->errstr);
if ($sth) {
- $sth->execute(@$placeholders) or $db->session->errorHandler->warn("Unconditional read failed: ".$sql." : ".$sth->errstr);
+ $sth->execute(@$placeholders) or $errorHandler->warn("Unconditional read failed: ".$sql." : ".$sth->errstr);
bless {_sql=>$sql, _db=>$db, _sth=>$sth}, $class;
} else {
return undef;
diff --git a/lib/WebGUI/Session.pm b/lib/WebGUI/Session.pm
index 56a0eff24..3b6cecbd2 100644
--- a/lib/WebGUI/Session.pm
+++ b/lib/WebGUI/Session.pm
@@ -374,6 +374,7 @@ sub open {
my $sessionId = shift || $self->http->getCookies->{"wgSession"} || $self->id->generate;
my $noFuss = shift;
$self->{_var} = WebGUI::Session::Var->new($self,$sessionId, $noFuss);
+ $self->errorHandler->warn("You've disabled cache in your config file and that can cause many problems on a production site.") if ($config->get("disableCache"));
return $self;
}
diff --git a/lib/WebGUI/Session/ErrorHandler.pm b/lib/WebGUI/Session/ErrorHandler.pm
index 18455df8a..79ee054da 100644
--- a/lib/WebGUI/Session/ErrorHandler.pm
+++ b/lib/WebGUI/Session/ErrorHandler.pm
@@ -44,7 +44,6 @@ This package provides simple but effective error handling, debugging, and loggi
$logger = $errorHandler->getLogger;
- $text = $errorHandler->getSessionVars;
$text = $errorHandler->getStackTrace;
$html = $errorHandler->showDebug;
@@ -134,7 +133,7 @@ sub debug {
my $self = shift;
my $message = shift;
$self->getLogger->debug($message);
- $self->session->stow->set("debug_debug", $self->session->stow->get("debug_debug").$message."\n");
+ $self->{_debug_debug} .= $message."\n";
}
@@ -171,7 +170,7 @@ sub error {
my $message = shift;
$self->getLogger->error($message);
$self->getLogger->debug("Stack trace for ERROR ".$message."\n".$self->getStackTrace());
- $self->session->stow->set("debug_error", $self->session->stow->get("debug_error").$message."\n");
+ $self->{_debug_error} .= $message."\n";
}
@@ -224,41 +223,6 @@ sub getLogger {
}
-#-------------------------------------------------------------------
-
-=head2 getSessionVars ( )
-
-Returns a text message containing all of the session variables.
-
-=cut
-
-sub getSessionVars {
- my $self = shift;
- my $data;
- while (my ($section, $hash) = each %{$self->session}) {
- if (ref $hash eq 'HASH') {
- while (my ($key, $value) = each %$hash) {
- if (ref $value eq 'ARRAY') {
- $value = '['.join(', ',@$value).']';
- } elsif (ref $value eq 'HASH') {
- $value = '{'.join(', ',map {"$_ => $value->{$_}"} keys %$value).'}';
- }
- unless (lc($key) eq "password" || lc($key) eq "identifier" || lc($key) eq "dbpass") {
- $data .= "\t".$section.'.'.$key.' = '.$value."\n";
- }
- }
- } elsif (ref $hash eq 'ARRAY') {
- my $i = 1;
- foreach (@$hash) {
- $data .= "\t".$section.'.'.$i.' = '.$_."\n";
- $i++;
- }
- }
- }
- return $data;
-}
-
-
#-------------------------------------------------------------------
=head2 getStackTrace ( )
@@ -296,7 +260,7 @@ sub info {
my $self = shift;
my $message = shift;
$self->getLogger->info($message);
- $self->session->stow->set("debug_info", $self->session->stow->get("debug_info").$message."\n");
+ $self->{_debug_info} .= $message."\n";
}
#-------------------------------------------------------------------
@@ -394,13 +358,13 @@ Creates an HTML formatted string
sub showDebug {
my $self = shift;
- my $text = $self->session->stow->get('debug_error');
+ my $text = $self->{_debug_error};
$text =~ s/\n/\
\n/g;
my $output = ''.$text."
\n";
- $text = $self->session->stow->get('debug_warn');
+ $text = $self->{_debug_warn};
$text =~ s/\n/\
\n/g;
$output .= ''.$text."
\n";
- $text = $self->session->stow->get('debug_info');
+ $text = $self->{_debug_info};
$text =~ s/\n/\
\n/g;
$output .= ''.$text."
\n";
my $form = $self->session->form->paramsHashRef();
@@ -416,12 +380,9 @@ sub showDebug {
$text =~ s/\n/\
\n/g;
$text =~ s/ / /g;
$output .= ''.$text."
\n";
- $text = $self->session->stow->get('debug_debug');
+ $text = $self->{_debug_debug};
$text =~ s/\n/\
\n/g;
$output .= ''.$text."
\n";
- $text = $self->getSessionVars();
- $text =~ s/\n/\
\n/g;
- $output .= ''.$text."
\n";
return $output;
}
@@ -443,7 +404,7 @@ sub warn {
my $self = shift;
my $message = shift;
$self->getLogger->warn($message);
- $self->session->stow->set("debug_warn", $self->session->stow->get("debug_warn").$message."\n");
+ $self->{_debug_warn} .= $message."\n";
}