Committer: nnikulochkina
LJSUP-13017: Paid Repost in update.bml and editjournal.bmlU trunk/cgi-bin/ljprotocol.pl
Modified: trunk/cgi-bin/ljprotocol.pl =================================================================== --- trunk/cgi-bin/ljprotocol.pl 2012-08-09 11:59:14 UTC (rev 22608) +++ trunk/cgi-bin/ljprotocol.pl 2012-08-09 12:10:32 UTC (rev 22609) @@ -24,6 +24,7 @@ LJ::PersonalStats::Ratings::Journals LJ::API::RateLimiter LJ::Pay::Repost::Offer + LJ::CleanHtml::Like ); use LJ::TimeUtil; @@ -2430,24 +2431,31 @@ my $repost_offer; - if ($req->{'repost_budget'} && LJ::is_enabled("paid_repost")) { + if (LJ::is_enabled("paid_repost")) { + + my $repost_budget = LJ::CleanHtml::Like->extract_repost_budget(\$event) || $req->{'repost_budget'}; + + if ($repost_budget) { - # cannot create paid repost via api - return fail($err,222) unless $flags->{noauth}; + # cannot create paid repost via api + return fail($err,222) unless $flags->{noauth}; - $repost_offer = { - userid => $posterid, - journalid => $ownerid, - budget => $req->{repost_budget}, - }; + $repost_offer = { + userid => $posterid, + journalid => $ownerid, + budget => $repost_budget, + }; - my $error = ''; - my $res = LJ::Pay::Repost::Offer->check( - \$error, - $repost_offer, - ); + my $error = ''; + my $res = LJ::Pay::Repost::Offer->check( + \$error, + \$repost_offer, + ); - return fail($err,160,$error) unless $res; + return fail($err,160,$error) unless $res; + + LJ::CleanHtml::Like->clean_repost_budget(\$event); + } } # convert RTE lj-embeds to normal lj-embeds @@ -3094,7 +3102,9 @@ return fail( $err, 217 ) if $req->{itemid} || $req->{anum}; return fail( $err, 215 ) unless $req->{tz}; - return fail($err, 159) if $req->{repost_budget}; + if ( $req->{repost_budget} || LJ::CleanHtml::Like->extract_repost_budget(\$req->{event}) ) { + return fail($err, 159); + } $req->{ext}->{flags} = $flags; $req->{usejournal} = $req->{usejournal} || ''; @@ -3281,68 +3291,58 @@ my %curprops; LJ::load_log_props2($dbcm, $ownerid, [ $itemid ], \%curprops); - # create, edit, revoke repost offer my ($repost_offer, $repost_offer_action); - if( LJ::is_enabled("paid_repost") - && $req->{revoke_repost_offer} - && $curprops{$itemid}->{repost_offer} ) { + if(LJ::is_enabled("paid_repost") && $req->{'event'} =~ /\S/) { + + my $curr_repost_offer = $curprops{$itemid}->{repost_offer} || ''; + my $repost_budget = $req->{repost_budget}; + my $contains_repost_button = LJ::CleanHtml::Like->contains_repost_button(\$req->{event}); - # cannot revoke repost offer via api - return fail($err,222) unless $flags->{noauth}; + if ($contains_repost_button && $repost_budget) { + # cannot create or edit repost offer via api + return fail($err,222) unless $flags->{noauth}; - $repost_offer_action = 'revoke'; + $repost_offer = { + id => $curr_repost_offer, + userid => $posterid, + journalid => $ownerid, + jitemid => $itemid, + budget => int $repost_budget, + }; - $repost_offer = LJ::Pay::Repost::Offer->get_repost_offer( - $posterid, - $curprops{$itemid}->{repost_offer}, - ); - } + my $error = ''; + my $res = LJ::Pay::Repost::Offer->check( + \$error, + \$repost_offer, + ); + + return fail($err,160,$error) unless $res; + + # no need to update repost offer + if ($curr_repost_offer) { + undef $repost_offer if $repost_offer->budget == $repost_budget; + } - if (LJ::is_enabled("paid_repost") - && defined $req->{repost_budget} - && !$req->{revoke_repost_offer}) { - - # cannot create or edit repost offer via api - return fail($err,222) unless $flags->{noauth}; + $repost_offer_action = $curr_repost_offer ? 'edit' : 'create'; - $repost_offer = { - id => $curprops{$itemid}->{repost_offer}, - userid => $posterid, - journalid => $ownerid, - jitemid => $itemid, - budget => int $req->{repost_budget}, - }; + } elsif ( $curr_repost_offer && + defined $repost_budget && !$repost_budget or + !$contains_repost_button ) { + + # cannot revoke repost offer via api + return fail($err,222) unless $flags->{noauth}; - my $previous; - - my $error = ''; - my $res = LJ::Pay::Repost::Offer->check( - \$error, - $repost_offer, - \$previous, - ); - - return fail($err,160,$error) unless $res; - - if ($repost_offer->{id}) { - - unless ($repost_offer->{budget} == $previous->budget) { - $repost_offer_action = 'edit'; - $repost_offer = $previous; - } else { - # no need to update repost offer - undef $repost_offer; - } - - } else { - $repost_offer_action = 'create'; - # no need to create repost offer with zero budget - undef $repost_offer unless $repost_offer->{budget}; - } + $repost_offer_action = 'revoke'; + + $repost_offer = LJ::Pay::Repost::Offer->get_repost_offer( + $posterid, + $curprops{$itemid}->{repost_offer}, + ); + } } - + # make post sticky if ( $req->{sticky} ) { if( $uowner->get_sticky_entry_id() != $itemid ) {