PDA

View Full Version : Is this right (sql query) for Paid Subscriptions


doa24uk
06-08-2009, 05:59 PM
Hi guys,

I'm trying to make it so that once a paid subscription is processed, my users reputation points are automatically updated to reflect the subscription they've bought (as well as their primary usergroup being upgraded).

I have 2 subscriptions set up.

Subscription 1 = 20 rep points
Subscription 2 = 50 rep points

Ok here's the idea for my (pseudo-) code. This would go at the end of payment_gateway.php if I'm not mistaken....

SELECT * from subscriptionlog WHERE userid=$userid AND status=1
// This gets all info about the subscription where the status denotes it as active (therefore if a user has previous expired subscriptions it won't grab them)

switch

case=1 {

SELECT * from user WHERE userid=$userid;

$newreputation = $row['reputation']+20;

UPDATE user SET reputation=$newreputation, usergroupid=10 WHERE userid=$userid;
{

case=2{

SELECT * from user WHERE userid=$userid;

$newreputation = $row['reputation']+50;

UPDATE user SET reputation=$newreputation, usergroupid=10 WHERE userid=$userid;

default;
//Something went wrong, do nothing;


Would this work or do I need extra error checking to make sure failed transactions aren't included in this??


Many thanks in advance, I'm quite desperate for this!

DoA

Carnage
06-11-2009, 02:56 PM
I've been looking at doing something similar myself. From my research into how the process works i'd suggest taking a look at class_paid_subscription.php.

line 338 contains a hook thats called once a user has completed payment for a subscription.


/**
* Creates user subscription
*
* @param int The id of the subscription
* @param int The subid of the subscription, this indicates the length
* @param int The userid the subscription is to be applied to
* @param int The start timestamp of the subscription
* @param int The expiry timestamp of the subscription
*
*/
function build_user_subscription($subscriptionid, $subid, $userid, $regdate = 0, $expirydate = 0)


Thats the method the hook appears in you would need to use $subscriptionid and possibly $subid in deciding what to do in your switch statement.

As a final note, try to use the vbulletin datamanagers for editing the users reputation as opposed to doing it manually.