Move Calendar feeds into the Calendar Asset table as JSON collateral.
Update tests and workflows to follow.
This commit is contained in:
parent
bfd25d6de2
commit
22d462166f
5 changed files with 425 additions and 309 deletions
|
|
@ -20,8 +20,9 @@ use WebGUI::Search;
|
|||
use WebGUI::Form;
|
||||
use WebGUI::HTML;
|
||||
use WebGUI::DateTime;
|
||||
use Class::C3;
|
||||
|
||||
use base 'WebGUI::Asset::Wobject';
|
||||
use base qw/WebGUI::Asset::Wobject WebGUI::JSONCollateral/;
|
||||
|
||||
use DateTime;
|
||||
use JSON;
|
||||
|
|
@ -255,6 +256,14 @@ sub definition {
|
|||
unitsAvailable => [ qw( days weeks months years ) ],
|
||||
},
|
||||
|
||||
icalFeeds => {
|
||||
fieldType => "textarea",
|
||||
defaultValue => [],
|
||||
serialize => 1,
|
||||
noFormPost => 1,
|
||||
tab => "display",
|
||||
},
|
||||
|
||||
icalInterval => {
|
||||
fieldType => "interval",
|
||||
defaultValue => $session->datetime->intervalToSeconds( 3, 'months' ),
|
||||
|
|
@ -263,7 +272,7 @@ sub definition {
|
|||
hoverHelp => $i18n->get('editForm icalInterval description'),
|
||||
unitsAvailable => [ qw( days weeks months years ) ],
|
||||
},
|
||||
|
||||
|
||||
workflowIdCommit => {
|
||||
fieldType => "workflow",
|
||||
defaultValue => $session->setting->get('defaultVersionTagWorkflow'),
|
||||
|
|
@ -309,6 +318,45 @@ sub addChild {
|
|||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 addFeed ( $feedParams )
|
||||
|
||||
Adds a new Feed to this calendar. This is a wrapper around WebGUI::JSONCollateral's setJSONCollateral
|
||||
method.
|
||||
|
||||
=head3 $feedParams
|
||||
|
||||
A hashref of parameters that describe the feed.
|
||||
|
||||
=head4 feedId
|
||||
|
||||
GUID for this feed.
|
||||
|
||||
=head4 url
|
||||
|
||||
URL for this feed.
|
||||
|
||||
=head4 lastUpdated
|
||||
|
||||
The date this feed was added, or edited last.
|
||||
|
||||
=head4 lastResult
|
||||
|
||||
The results of what happened the last time this feed was accessed to pull iCal.
|
||||
|
||||
=head4 feedType
|
||||
|
||||
What kind of feed this is.
|
||||
|
||||
=cut
|
||||
|
||||
sub addFeed {
|
||||
my $self = shift;
|
||||
my $feedParams = shift;
|
||||
return $self->setJSONCollateral('icalFeeds', 'feedId', 'new', $feedParams);
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 appendTemplateVarsDateTime( var, datetime [, prefix ] )
|
||||
|
||||
Append template vars from the given datetime. C<var> is a hash reference.
|
||||
|
|
@ -460,6 +508,25 @@ sub createSubscriptionGroup {
|
|||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 deleteFeed ( $feedId )
|
||||
|
||||
Deletes a Feed from this calendar. This is a wrapper around WebGUI::JSONCollateral's deleteJSONCollateral
|
||||
method.
|
||||
|
||||
=head3 $feedId
|
||||
|
||||
GUID of the feed to delete.
|
||||
|
||||
=cut
|
||||
|
||||
sub deleteFeed {
|
||||
my $self = shift;
|
||||
my $feedId = shift;
|
||||
return $self->deleteJSONCollateral('icalFeeds', 'feedId', $feedId);
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 getEditForm
|
||||
|
||||
Adds an additional tab for feeds.
|
||||
|
|
@ -613,9 +680,9 @@ ENDHTML
|
|||
# Add the existing feeds
|
||||
my $feeds = $self->getFeeds();
|
||||
$tab->raw('<script type="text/javascript">'."\n");
|
||||
for my $feedId (keys %$feeds) {
|
||||
my %row = %{ $feeds->{ $feedId } };
|
||||
$tab->raw("FeedsManager.addFeed('feeds','".$feedId."',".JSON->new->encode( \%row ).");\n");
|
||||
for my $feed (@{ $feeds }) {
|
||||
my $feedId = $feed->{feedId};
|
||||
$tab->raw("FeedsManager.addFeed('feeds','".$feedId."',".JSON->new->encode( $feed ).");\n");
|
||||
}
|
||||
$tab->raw('</script>');
|
||||
|
||||
|
|
@ -779,9 +846,28 @@ sub getEventVars {
|
|||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 getFeed ( $feedId )
|
||||
|
||||
Gets the data structure for one particular feed from this Calendar. This is a wrapper
|
||||
for getJSONCollateral.
|
||||
|
||||
=head3 $feedId
|
||||
|
||||
The GUID of the feed to fetch.
|
||||
|
||||
=cut
|
||||
|
||||
sub getFeed {
|
||||
my $self = shift;
|
||||
my $feedId = shift;
|
||||
return $self->getJSONCollateral('icalFeeds', 'feedId', $feedId);
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 getFeeds ( )
|
||||
|
||||
Gets a hashref of hashrefs of all the feeds attached to this calendar.
|
||||
Gets an arrayref of hashrefs of all the feeds attached to this calendar.
|
||||
|
||||
TODO: Format lastUpdated into the user's time zone
|
||||
|
||||
|
|
@ -789,12 +875,7 @@ TODO: Format lastUpdated into the user's time zone
|
|||
|
||||
sub getFeeds {
|
||||
my $self = shift;
|
||||
|
||||
return $self->session->db->buildHashRefOfHashRefs(
|
||||
"select * from Calendar_feeds where assetId=?",
|
||||
[$self->get("assetId")],
|
||||
"feedId"
|
||||
);
|
||||
return $self->get('icalFeeds');
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
@ -950,30 +1031,23 @@ sub processPropertiesFromFormPost {
|
|||
$feeds{$feedId}++;
|
||||
}
|
||||
my @feedsFromForm = keys %feeds;
|
||||
|
||||
|
||||
# Delete old feeds that are not in @feeds
|
||||
my @oldFeeds
|
||||
= $session->db->buildArray(
|
||||
"select feedId from Calendar_feeds where assetId=?",
|
||||
[$self->get("assetId")]
|
||||
);
|
||||
my @oldFeeds = map { $_->{feedId} } @{ $self->getFeeds };
|
||||
|
||||
for my $feedId (@oldFeeds) {
|
||||
if (!grep /^$feedId$/, @feedsFromForm) {
|
||||
$session->db->write(
|
||||
"delete from Calendar_feeds where feedId=? and assetId=?",
|
||||
[$feedId,$self->get("assetId")]
|
||||
);
|
||||
if (!isIn($feedId, @feedsFromForm)) {
|
||||
$self->deleteFeed($feedId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Create new feeds
|
||||
for my $feedId (grep /^new(\d+)/, @feedsFromForm) {
|
||||
$session->db->setRow("Calendar_feeds","feedId",{
|
||||
feedId => "new",
|
||||
assetId => $self->get("assetId"),
|
||||
$self->addFeed({
|
||||
url => $form->param("feeds-".$feedId),
|
||||
feedType => "ical",
|
||||
lastUpdated => 'never',
|
||||
lastResult => '',
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -983,18 +1057,26 @@ sub processPropertiesFromFormPost {
|
|||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
=head2 purge ( )
|
||||
=head2 setFeed ( $feedId, $feedParams )
|
||||
|
||||
Handle Asset specific purge tasks.
|
||||
Adds a new Feed to this calendar. This is a wrapper around WebGUI::JSONCollateral's setJSONCollateral
|
||||
method.
|
||||
|
||||
Delete iCal feeds for this Calendar.
|
||||
=head3 $feedId
|
||||
|
||||
The GUID of the feed to update.
|
||||
|
||||
=head3 $feedParams
|
||||
|
||||
See L<addFeed> for a list of parameters.
|
||||
|
||||
=cut
|
||||
|
||||
sub purge {
|
||||
my $self = shift;
|
||||
$self->session->db->write('delete from Calendar_feeds where assetId=?',[$self->get('assetId')]);
|
||||
$self->SUPER::purge;
|
||||
sub setFeed {
|
||||
my $self = shift;
|
||||
my $feedId = shift;
|
||||
my $feedParams = shift;
|
||||
return $self->setJSONCollateral('icalFeeds', 'feedId', $feedId, $feedParams);
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue