fixed 8899 and 8891: Calendar feeds cause edit screen to fail and Calendar still pull feeds from the trash

This commit is contained in:
Doug Bell 2008-10-28 17:10:06 +00:00
parent 52a21ff854
commit 18585200a7
3 changed files with 21 additions and 15 deletions

View file

@ -635,7 +635,8 @@ ENDHTML
my $feeds = $self->getFeeds();
$tab->raw('<script type="text/javascript">'."\n");
for my $feedId (keys %$feeds) {
$tab->raw("FeedsManager.addFeed('feeds','".$feedId."',".encode_json($feeds->{$feedId}).");\n");
my %row = %{ $feeds->{ $feedId } };
$tab->raw("FeedsManager.addFeed('feeds','".$feedId."',".JSON->new->encode( \%row ).");\n");
}
$tab->raw('</script>');

View file

@ -99,6 +99,16 @@ sub execute {
my $sth = $self->session->db->read("select * from Calendar_feeds");
FEED: while (my $feed = $sth->hashRef) {
my $calendar = WebGUI::Asset->newByDynamicClass($self->session,$feed->{assetId});
if (!defined $calendar) {
$self->session->errorHandler->error("Calendar object failed to instanciate. Did you commit the calendar wobject?");
next FEED;
}
elsif ( $calendar->get( "state" ) ne "published" ) {
$self->session->errorHandler->info( "Calendar is not state='published', skipping..." );
next FEED;
}
#!!! KLUDGE - If the feed is on the same server, set a scratch value
# I do not know how dangerous this is, so THIS MUST CHANGE!
# Preferably: Spectre would add a userSession to the database,
@ -157,6 +167,7 @@ sub execute {
my $uid = lc $current_event{uid}[1];
delete $current_event{uid};
$events{$uid} = {%current_event};
$self->session->log->info( "Found event $uid from feed " . $feed->{feedId} );
%current_event = ();
}
elsif ($line =~ /^ /) {
@ -358,6 +369,7 @@ sub execute {
$currentVersionTag->clearWorking;
}
my $ttl = $self->getTTL;
$self->session->log->info( "Have to add " . scalar( @$eventList ) . " events..." );
while (@$eventList) {
if ($startTime + $ttl < time()) {
$instance->setScratch('events', JSON::to_json($eventList));
@ -378,11 +390,11 @@ sub execute {
my $feed = $feedList->{$properties->{feedId}};
# Update event
my ($assetId) = $self->session->db->quickArray("select assetId from Event where feedUid=?",[$id]);
my $assetId = $self->session->db->quickScalar("select assetId from Event where feedUid=?",[$id]);
# If this event already exists, update
if ($assetId) {
#warn "Updating $assetId\n";
$self->session->log->info( "Updating existing asset $assetId" );
my $event = WebGUI::Asset->newByDynamicClass($self->session,$assetId);
if ($event) {
@ -391,19 +403,9 @@ sub execute {
}
}
else {
$self->session->log->info( "Creating new Event!" );
my $calendar = WebGUI::Asset->newByDynamicClass($self->session,$feed->{assetId});
if (!defined $calendar) {
$self->session->errorHandler->error("CalendarUpdateFeeds Activity: Calendar object failed to instanciate. Did you commit the calendar wobject?");
my $newVersionTag = WebGUI::VersionTag->getWorking($self->session, 1);
if ($newVersionTag) {
$newVersionTag->requestCommit;
}
if ($currentVersionTag) {
$currentVersionTag->setWorking;
}
return $self->ERROR;
}
my $event = $calendar->addChild($properties, { skipAutoCommitWorkflows => 1});
my $event = $calendar->addChild($properties, undef, undef, { skipAutoCommitWorkflows => 1});
$feed->{added}++;
if ($recur) {
$event->setRecurrence($recur);
@ -413,6 +415,7 @@ sub execute {
# TODO: Only update if last-updated field is
# greater than the event's lastUpdated property
$self->session->log->info( scalar @$eventList . " events left to load" );
}
my $newVersionTag = WebGUI::VersionTag->getWorking($self->session, 1);
if ($newVersionTag) {