Polls now use JSON instead of Storable to store graph info because Storable is not portable between OS/processors.
This commit is contained in:
parent
a2e3b54eb7
commit
8b8feb6af3
4 changed files with 128 additions and 24 deletions
|
|
@ -2,6 +2,7 @@
|
||||||
- Data Forms set reply to to the same as the from field
|
- Data Forms set reply to to the same as the from field
|
||||||
- Config file bugs fixed, see gotcha.txt for details.
|
- Config file bugs fixed, see gotcha.txt for details.
|
||||||
- Added export to context menu in asset manager
|
- Added export to context menu in asset manager
|
||||||
|
- Polls now use JSON instead of Storable to serialize graph config
|
||||||
|
|
||||||
|
|
||||||
7.4.2
|
7.4.2
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,14 @@ save you many hours of grief.
|
||||||
* You must upgrade to Config::JSON 1.1.0 or higher prior to upgrading.
|
* You must upgrade to Config::JSON 1.1.0 or higher prior to upgrading.
|
||||||
Due to a bug in CPAN you should type "force install Config::JSON" in
|
Due to a bug in CPAN you should type "force install Config::JSON" in
|
||||||
order to upgrade to this version.
|
order to upgrade to this version.
|
||||||
|
|
||||||
|
* For Poll Wobjects, we're using a new way to store the graph
|
||||||
|
configuration. If you were having problems with your Poll graphs,
|
||||||
|
you will need to re-create the graph's configuration. It may not
|
||||||
|
be possible to read your graph configuration, so if you have
|
||||||
|
problems with the Poll graphs you will need to re-create the graph's
|
||||||
|
configuration. After you create a new configuration, everything will
|
||||||
|
work fine.
|
||||||
|
|
||||||
|
|
||||||
7.4.0
|
7.4.0
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ my $quiet; # this line required
|
||||||
my $session = start(); # this line required
|
my $session = start(); # this line required
|
||||||
|
|
||||||
# upgrade functions go here
|
# upgrade functions go here
|
||||||
|
reserializePollGraphConfigs($session);
|
||||||
|
|
||||||
finish($session); # this line required
|
finish($session); # this line required
|
||||||
|
|
||||||
|
|
@ -32,6 +33,41 @@ finish($session); # this line required
|
||||||
# # and here's our code
|
# # and here's our code
|
||||||
#}
|
#}
|
||||||
|
|
||||||
|
#-------------------------------------------------
|
||||||
|
sub reserializePollGraphConfigs {
|
||||||
|
my $session = shift;
|
||||||
|
print "\tRe-serializing Poll Graph configuration... " unless ($quiet);
|
||||||
|
|
||||||
|
use Storable;
|
||||||
|
$Storable::canonical = 1;
|
||||||
|
use JSON;
|
||||||
|
|
||||||
|
my $sth = $session->db->read(
|
||||||
|
"SELECT assetId, revisionDate, graphConfiguration FROM Poll"
|
||||||
|
);
|
||||||
|
|
||||||
|
while (my %data = $sth->hash) {
|
||||||
|
next unless $data{graphConfiguration};
|
||||||
|
my ($assetId, $revisionDate, $graphConfiguration)
|
||||||
|
= @data{'assetId', 'revisionDate', 'graphConfiguration'};
|
||||||
|
|
||||||
|
my $thawed = eval { Storable::thaw($graphConfiguration) };
|
||||||
|
if ($@) {
|
||||||
|
print "\n\t!!! Could not fix graph configuration for assetId '$assetId' revisionDate '$revisionDate' !!!";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$graphConfiguration = objToJson( $thawed );
|
||||||
|
|
||||||
|
$session->db->write(
|
||||||
|
"UPDATE Poll SET graphConfiguration=? WHERE assetId=? AND revisionDate=?",
|
||||||
|
[$graphConfiguration, $assetId, $revisionDate],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
print "OK!\n" unless $quiet;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ---- DO NOT EDIT BELOW THIS LINE ----
|
# ---- DO NOT EDIT BELOW THIS LINE ----
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ use WebGUI::Utility;
|
||||||
use WebGUI::Asset::Wobject;
|
use WebGUI::Asset::Wobject;
|
||||||
use WebGUI::Image::Graph;
|
use WebGUI::Image::Graph;
|
||||||
use WebGUI::Storage::Image;
|
use WebGUI::Storage::Image;
|
||||||
use Storable;
|
use JSON;
|
||||||
|
|
||||||
our @ISA = qw(WebGUI::Asset::Wobject);
|
our @ISA = qw(WebGUI::Asset::Wobject);
|
||||||
|
|
||||||
|
|
@ -179,6 +179,23 @@ sub duplicate {
|
||||||
return $newAsset;
|
return $newAsset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
=head2 freezeGraphConfig
|
||||||
|
|
||||||
|
Serializes graph configuration. Returns a scalar containing the serialized
|
||||||
|
structure.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub freezeGraphConfig {
|
||||||
|
my $self = shift;
|
||||||
|
my $obj = shift;
|
||||||
|
|
||||||
|
return JSON::objToJson($obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
sub getEditForm {
|
sub getEditForm {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -254,10 +271,7 @@ sub getEditForm {
|
||||||
|
|
||||||
|
|
||||||
if (WebGUI::Image::Graph->getPluginList($self->session)) {
|
if (WebGUI::Image::Graph->getPluginList($self->session)) {
|
||||||
my $config = {};
|
my $config = $self->getGraphConfig;
|
||||||
if ($self->get('graphConfiguration')) {
|
|
||||||
$config = Storable::thaw($self->get('graphConfiguration'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$tabform->addTab('graph', 'Graphing');
|
$tabform->addTab('graph', 'Graphing');
|
||||||
$tabform->getTab('graph')->yesNo(
|
$tabform->getTab('graph')->yesNo(
|
||||||
|
|
@ -272,6 +286,23 @@ sub getEditForm {
|
||||||
return $tabform;
|
return $tabform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
=head2 getGraphConfig
|
||||||
|
|
||||||
|
Gets and thaws the graph configuration. Returns a reference to the original
|
||||||
|
data structure.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub getGraphConfig {
|
||||||
|
my $self = shift;
|
||||||
|
my $config = $self->get("graphConfiguration");
|
||||||
|
|
||||||
|
return unless $config;
|
||||||
|
return $self->thawGraphConfig($config);
|
||||||
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
=head2 indexContent ( )
|
=head2 indexContent ( )
|
||||||
|
|
@ -316,7 +347,7 @@ sub processPropertiesFromFormPost {
|
||||||
|
|
||||||
if (WebGUI::Image::Graph->getPluginList($self->session)) {
|
if (WebGUI::Image::Graph->getPluginList($self->session)) {
|
||||||
my $graph = WebGUI::Image::Graph->processConfigurationForm($self->session);
|
my $graph = WebGUI::Image::Graph->processConfigurationForm($self->session);
|
||||||
$property->{graphConfiguration} = Storable::freeze($graph->getConfiguration);
|
$self->setGraphConfig( $graph->getConfiguration );
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->update($property);
|
$self->update($property);
|
||||||
|
|
@ -331,6 +362,23 @@ sub purge {
|
||||||
$self->SUPER::purge();
|
$self->SUPER::purge();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
=head2 setGraphConfig
|
||||||
|
|
||||||
|
Freezes and stores the configuration for the graphing of this poll.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub setGraphConfig {
|
||||||
|
my $self = shift;
|
||||||
|
my $obj = shift;
|
||||||
|
|
||||||
|
$self->update({
|
||||||
|
graphConfiguration => $self->freezeGraphConfig($obj),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
sub setVote {
|
sub setVote {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -341,6 +389,21 @@ sub setVote {
|
||||||
".$self->session->db->quote($answer).", ".$self->session->db->quote($userId).", '$ip')");
|
".$self->session->db->quote($answer).", ".$self->session->db->quote($userId).", '$ip')");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
=head2 thawGraphConfig
|
||||||
|
|
||||||
|
Deserializes the graph configuration and returns the data structure.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub thawGraphConfig {
|
||||||
|
my $self = shift;
|
||||||
|
my $string = shift;
|
||||||
|
|
||||||
|
return JSON::jsonToObj($string);
|
||||||
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
sub view {
|
sub view {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
@ -387,27 +450,23 @@ sub view {
|
||||||
$var{answer_loop} = \@answers;
|
$var{answer_loop} = \@answers;
|
||||||
|
|
||||||
if ($self->getValue('generateGraph')) {
|
if ($self->getValue('generateGraph')) {
|
||||||
my $config = {};
|
my $config = $self->getGraphConfig;
|
||||||
if ($self->get('graphConfiguration')) {
|
if ($config) {
|
||||||
$config = Storable::thaw($self->get('graphConfiguration'));
|
my $graph = WebGUI::Image::Graph->loadByConfiguration($self->session, $config);
|
||||||
|
$graph->addDataset(\@dataset);
|
||||||
|
$graph->setLabels(\@labels);
|
||||||
|
|
||||||
if ($config) {
|
$graph->draw;
|
||||||
my $graph = WebGUI::Image::Graph->loadByConfiguration($self->session, $config);
|
|
||||||
$graph->addDataset(\@dataset);
|
|
||||||
$graph->setLabels(\@labels);
|
|
||||||
|
|
||||||
$graph->draw;
|
my $storage = WebGUI::Storage::Image->createTemp($self->session);
|
||||||
|
my $filename = 'poll'.$self->session->id->generate.".png";
|
||||||
|
$graph->saveToStorageLocation($storage, $filename);
|
||||||
|
|
||||||
my $storage = WebGUI::Storage::Image->createTemp($self->session);
|
$var{graphUrl} = $storage->getUrl($filename);
|
||||||
my $filename = 'poll'.$self->session->id->generate.".png";
|
$var{hasImageGraph} = 1;
|
||||||
$graph->saveToStorageLocation($storage, $filename);
|
} else {
|
||||||
|
$self->session->errorHandler->error('The graph configuration hash of the Poll ('.$self->getUrl.') is corrupt.');
|
||||||
$var{graphUrl} = $storage->getUrl($filename);
|
}
|
||||||
$var{hasImageGraph} = 1;
|
|
||||||
} else {
|
|
||||||
$self->session->errorHandler->error('The graph configuration hash of the Poll ('.$self->getUrl.') is corrupt.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $self->processTemplate(\%var,undef,$self->{_viewTemplate});
|
return $self->processTemplate(\%var,undef,$self->{_viewTemplate});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue