use Mojo::Log;
use Mail::Address;
-use MD5::Digest qw(md5_hex);
+use Digest::MD5 qw(md5_hex);
use Encode;
use Newslash::Model::Globjs;
use Newslash::Model::Discussions;
-
+use Newslash::Model::Urls;
#========================================================================
=head2 latest(\%options)
=cut
sub select {
- my ($self, $query_type, $value) = @_;
+ my $self = shift;
+ my $query_type = shift;
+ my $value = shift;
- if ($query_type !~ m/\A(subid)\z/) {
- return undef;
- }
+ if ($query_type !~ m/\A(subid|signature)\z/) {
+ return undef;
+ }
- my $dbh = $self->connect_db;
- my $sql = <<"EOSQL";
+ my $dbh = $self->connect_db;
+ my $sql = <<"EOSQL";
SELECT submissions.*, users.nickname as author, firehose.toptags, firehose.discussion, topics.*
FROM submissions
LEFT JOIN users ON submissions.uid = users.uid
return $submission;
}
+sub _email_to_domain {
+ my ($email) = @_;
+ if (!$email) {
+ return '';
+ }
+ my $addr = Mail::Address->new('', $email);
+ return '' if !$addr;
+ my $host = $addr->host();
+ return '' if !$host;
+ return fullhost_to_domain($host);
+}
+
+sub generate_signature {
+ my ($self, $intro_text, $title) = @_;
+ return md5_hex(encode_utf8($intro_text . $title));
+}
+
#========================================================================
=head2 insert(\%params, \%options)
}
$opts ||= {};
$extra_params ||= {};
- my $primaryskid = 1;
+ my $primaryskid = 1; #mainpage;
# temporary function from slash (Slash::Utility::Data)
- my $email_to_domain = sub {
- my($email) = @_;
- my $addr = Mail::Address->new('', $email);
- return '' if !$addr;
- my $host = $addr->host();
- return '' if !$host;
- return fullhost_to_domain($host);
- };
my $dbh = $self->connect_db({AutoCommit => 0,});
my $sql = <<"EOSQL";
(?, ?, ?, NOW(), ?, ?, ?, ?, ?, ?, ?, ?)
EOSQL
+ $params->{email} ||= '';
+ if ($params->{url}) {
+ #my $urls = Newslash::Model::Urls->new($self->{options});
+ my $urls = $self->new_instance_of("Newslash::Model::Urls");
+ my $url_data = {url => $params->{url}};
+ my $url_id = $urls->getUrlCreate($url_data);
+ $params->{url_id} = $url_id;
+ } else {
+ $params->{url_id} = 0;
+ }
+
+
$dbh->do($sql, undef,
$params->{email}, #email
- $email_to_domain->($params->{email}), #emaildomain
+ _email_to_domain($params->{email}), #emaildomain
$user->{nickname}, #name
$params->{title}, #subj
$params->{intro_text}, #story
- $params->{primary_tag}->tid, #tid
+ $params->{tid}, #tid
$primaryskid, #primaryskid
$user->{uid}, #uid,
$user->{ipid}, #ipid,
$user->{subnetid}, #subnetid,
- md5_hex(encode_utf8($params->{intro_text} . $params->{title})) #signature
+ $self->generate_signature($params->{intro_text}, $params->{title}) #signature
);
my $sub_id = $dbh->last_insert_id(undef, undef, undef, undef);
if (!$sub_id) {
# error occured
+ $self->set_errorno($dbh->{mysql_errno});
+ $self->set_error("mysql_error");
$dbh->rollback;
$dbh->disconnect;
return undef;
my @param_ids;
if ($extra_params) {
for my $k (keys %$extra_params) {
- my $param_id = $dbh->do($sqlm undef, $sub_id, $k, $extra_params->{$k});
+ my $param_id = $dbh->do($sql, undef, $sub_id, $k, $extra_params->{$k});
if (!$param_id) {
# error occured
+ $self->set_errorno($dbh->{mysql_errno});
+ $self->set_error("mysql_error");
$dbh->rollback;
$dbh->disconnect;
return undef;
my $rs = $sth->fetchrow_hashref;
if (!$rs) {
# error occured
+ $self->set_errorno($dbh->{mysql_errno});
+ $self->set_error("mysql_error");
$dbh->rollback;
$dbh->disconnect;
return undef;
}
+ $sth->finish;
my $create_time = $rs->{time};
# create firehose entry
- my $globjs = Newslash::Model::Globjs->new($self->options);
- my $globj_id = $globjs->getGlobjidCreate("submissions", $submission->{subid});
+ my $globjs = Newslash::Model::Globjs->new($self->{options});
+ my $globj_id = $globjs->getGlobjidCreate("submissions", $sub_id);
+ if (!$globj_id) {
+ # error occured
+ warn "invalid globjid";
+ $self->set_error("invalid globjid");
+ $dbh->rollback;
+ $dbh->disconnect;
+ return undef;
+ }
+ # TODO: sprite_info column don't have default value...
$sql = <<"EOSQL";
INSERT INTO firehose
(uid, globjid, type, createtime, popularity, editorpop, public, attention_needed, primaryskid, tid, srcid,
- url_id, email, emaildomain, name, ipid, subnetid)
+ url_id, email, emaildomain, name, ipid, subnetid, sprite_info)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
- ?, ?, ?, ?, ?, ?)
+ ?, ?, ?, ?, ?, ?, "")
EOSQL
# my $midpop = $self->getEntryPopularityForColorLevel(5);
"yes", #public
"yes", #attention_needed
$primaryskid, #primaryskid
- $params->{primary_tag}->tid, #tid
+ $params->{tid}, #tid
$sub_id, #srcid
$params->{url_id}, #url_id
$params->{email}, #email
- $email_to_domain->($params->{email}), #emaildomain
+ _email_to_domain($params->{email}), #emaildomain
$user->{nickname}, #name
$user->{ipid}, #ipid
$user->{subnetid} #subnetid
);
if (!$rs) {
# error occured
+ $self->set_errorno($dbh->{mysql_errno});
+ $self->set_error("mysql_error");
$dbh->rollback;
$dbh->disconnect;
return undef;
$rs = $dbh->do($sql, undef, $params->{title}, $params->{intro_text});
if (!$rs) {
# error occured
+ $self->set_errorno($dbh->{mysql_errno});
+ $self->set_error("mysql_error");
$dbh->rollback;
$dbh->disconnect;
return undef;
# in old slash, add 'nod' tag when author is not anonymous, but ommit them.
# create discussion
- my $discuss = Newslash::Model::Discussions->new($self->options);
+ my $discuss = Newslash::Model::Discussions->new($self->{options});
my $default_comment_status = 'logged_in';
#my $defualt_url = "$constants->{rootdir}/firehose.pl?op=view&id=$firehose_id";
- my $defualt_url = "/firehose.pl?op=view&id=$firehose_id";
+ my $default_url = "/firehose.pl?op=view&id=$firehose_id";
my $d = {
uid => 0,
kind => 'submission',
- title => $param->{title},
- topic => $param->{primary_tag}->{tid},
+ title => $params->{title},
+ topic => $params->{tid},
primaryskid => $primaryskid,
commentstatus => $default_comment_status,
url => $default_url,
ts => $create_time,
};
- my $discussion_id = $discuss->create(d, {dbh => $dbh});
+ my $discussion_id = $discuss->create($d, {dbh => $dbh});
if (!$discussion_id) {
# error occured
+ $self->set_errorno($discuss->last_error);
+ $self->set_error("mysql_error");
$dbh->rollback;
$dbh->disconnect;
return undef;
$rs = $dbh->do($sql, undef, $discussion_id, $firehose_id);
if (!$rs) {
# error occured
+ $self->set_errorno($dbh->{mysql_errno});
+ $self->set_error("mysql_error");
$dbh->rollback;
$dbh->disconnect;
return undef;