Dwimmer

 view release on metacpan or  search on metacpan

lib/Dwimmer/Feed/DB.pm  view on Meta::CPAN

	my $id = $self->dbh->last_insert_id('', '', '', '');
	main::LOG("   ID: $id");

	# only deliver new things
	my $NOT_TOO_OLD = 60*60*24;
	if ($issued->epoch > time - $NOT_TOO_OLD) {
		$self->dbh->do(q{INSERT INTO delivery_queue (channel, entry, site_id) VALUES ('mail', ?, ?)},
			{}, $id, $args{site_id});
	}

	return;
}

sub get_queue {
	my ($self, $channel) = @_;

	my $sth = $self->dbh->prepare('SELECT * FROM entries, delivery_queue WHERE entries.id=delivery_queue.entry AND channel = ?');
	$sth->execute($channel);
	my @results;
	while (my $h = $sth->fetchrow_hashref) {
		push @results, $h;
	}
	return \@results;
}

sub delete_from_queue {
	my ($self, $channel, $id) = @_;

	$self->dbh->do('DELETE FROM delivery_queue WHERE channel=? AND entry=?', {}, $channel, $id);

	return;
}

sub get_sources {
	my ( $self, %opt ) = @_;

	my $sql = 'SELECT * FROM sources';
	my @fields = sort keys %opt;
	if (%opt) {
		$sql .= ' WHERE ';
		$sql .= join ' AND ', map { "$_=?" } @fields;
	}
	my $sth = $self->dbh->prepare($sql);
	$sth->execute(@opt{@fields});
	my @r;
	while (my $h = $sth->fetchrow_hashref) {
		push @r, $h;
	}

	return \@r;
}

sub get_source_by_id {
	my ( $self, $id ) = @_;

	my $sources = $self->get_sources;
	my ($s) = grep { $_->{id} eq $id }  @$sources;
	return $s;
}

sub update_last_fetch {
	my ($self, $source_id, $status, $error) = @_;
	my $sql = qq{UPDATE sources SET last_fetch_time=?, last_fetch_status=?, last_fetch_error=? WHERE id=?};
	$self->dbh->do($sql, undef, time(), $status, $error, $source_id);

	return;
}


sub update {
	my ($self, $id, $field, $value) = @_;

	Carp::croak("Invalid field '$field'")
		if $field !~ m{^(feed|comment|twitter|status|title|url)$};
	Carp::croak("Invalid value for status '$value'")
		if $field eq 'status' and $value !~ m{^(enabled|disabled)$};

	my $sql = qq{UPDATE sources SET $field = ? WHERE id=?};
	$self->dbh->do($sql, undef, $value, $id);
}

sub set_config {
	my ($self, %args) = @_;
	foreach my $field (qw(key value site_id)) {
		die "Missing $field" if not defined $args{$field};
	}
	$self->delete_config( %args );
	$self->dbh->do('INSERT INTO config (key, value, site_id) VALUES (?, ?, ?)',
		undef,
		$args{key}, $args{value}, $args{site_id});
	return;
}

sub delete_config {
	my ($self, %args) = @_;
	foreach my $field (qw(key site_id)) {
		die "Missing $field" if not defined $args{$field};
	}
	$self->dbh->do('DELETE FROM config WHERE key=? AND site_id=?', undef, $args{key}, $args{site_id});
	return;
}

sub get_config {
	my ($self, %args) = @_;

	my $sql = 'SELECT * FROM config ';
	if (defined $args{site_id}) {
		$sql .= 'WHERE site_id=?';
	}
	$sql .= ' ORDER BY key DESC';
	my $sth = $self->dbh->prepare($sql);
	defined $args{site_id} ? $sth->execute($args{site_id}) : $sth->execute();;
	my @results;
	while (my $h = $sth->fetchrow_hashref) {
		push @results, $h;
	}

	return \@results;
}
sub get_config_hash {
	my ($self, %args) = @_;

	my $sql = 'SELECT * FROM config ';
	if (defined $args{site_id}) {
		$sql .= 'WHERE site_id=?';
	}
	$sql .= ' ORDER BY key DESC';

	my $sth = $self->dbh->prepare($sql);
	defined $args{site_id} ? $sth->execute($args{site_id}) : $sth->execute();



( run in 0.642 second using v1.01-cache-2.11-cpan-98e64b0badf )