• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

XF 1.1 Regarding user upgrades

#1
How to list a user upgrade which can purchase more than one time?
Let's say I want to sell SEO package and same user can buy more than one time as he needed.
 

Jake Bunce

XenForo moderator
Staff member
#2
XenForo appears to have code in the user upgrade model to handle extensions to existing upgrades, but the account_upgrades template does not present the user with the option to purchase again upgrades which are already active for them. You can try editing the template:

Admin CP -> Appearance -> Templates -> account_upgrades

Use this code. I changed the foreach contents for purchased upgrades to match the available upgrades so that it shows the purchase button:

Code:
<xen:title>{xen:phrase account_upgrades}</xen:title>

<xen:require css="account_upgrades.css" />

<xen:if is="{$available}">
	<div class="section">
		<h3 class="subHeading">{xen:phrase available_upgrades}</h3>
		<ul>
		<xen:foreach loop="$available" value="$upgrade">
			<li class="primaryContent">
				<div class="upgrade">					
					<form action="{$payPalUrl}" method="post" class="upgradeForm">
						<div class="cost">{$upgrade.costPhrase}</div>
						<xen:if is="{$upgrade.length_unit} AND {$upgrade.recurring}">
								
							<input type="hidden" name="cmd" value="_xclick-subscriptions" />
							<input type="hidden" name="a3" value="{$upgrade.cost_amount}" />
							<input type="hidden" name="p3" value="{$upgrade.length_amount}" />
							<input type="hidden" name="t3" value="{$upgrade.lengthUnitPP}" />
							<input type="hidden" name="src" value="1" />
							<input type="hidden" name="sra" value="1" />
							
							<input type="submit" value="{xen:phrase subscribe}" class="button" />
						<xen:else />
							<input type="hidden" name="cmd" value="_xclick" />
							<input type="hidden" name="amount" value="{$upgrade.cost_amount}" />
							
							<input type="submit" value="{xen:phrase purchase}" class="button" />
						</xen:if>
						
						<input type="hidden" name="business" value="{$xenOptions.payPalPrimaryAccount}" />
						<input type="hidden" name="currency_code" value="{$upgrade.currency}" />
						<input type="hidden" name="item_name" value="{xen:phrase account_upgrade}: {$upgrade.title} ({$visitor.username})" />
						<input type="hidden" name="quantity" value="1" />
						<input type="hidden" name="no_note" value="1" />
						<input type="hidden" name="no_shipping" value="1" />
						<input type="hidden" name="custom" value="{$visitor.user_id},{$upgrade.user_upgrade_id},token,{$visitor.csrf_token_page}" />
						
						<input type="hidden" name="charset" value="utf-8" />
						<input type="hidden" name="email" value="{$visitor.email}" />
						
						<input type="hidden" name="return" value="{$requestPaths.fullBasePath}{xen:link account/upgrade-purchase}" />
						<input type="hidden" name="cancel_return" value="{$requestPaths.fullBasePath}{xen:link index}" />
						<input type="hidden" name="notify_url" value="{$xenOptions.boardUrl}/payment_callback.php" />
					</form>
					
					<div class="upgradeMain">
						<h4 class="title">{$upgrade.title}</h4>
						<xen:if is="{$upgrade.description}">
							<div class="description">{xen:string nl2br, $upgrade.description}</div>
						</xen:if>
					</div>
				</div>
			</li>
		</xen:foreach>
		</ul>
	</div>
</xen:if>

<xen:if is="{$purchased}">
	<div class="section">
		<h3 class="subHeading">{xen:phrase purchased_upgrades}</h3>
		<ul>
		<xen:foreach loop="$purchased" value="$upgrade">
			<li class="primaryContent">
				<div class="upgrade">					
					<form action="{$payPalUrl}" method="post" class="upgradeForm">
						<div class="cost">{$upgrade.costPhrase}</div>
						<xen:if is="{$upgrade.length_unit} AND {$upgrade.recurring}">
								
							<input type="hidden" name="cmd" value="_xclick-subscriptions" />
							<input type="hidden" name="a3" value="{$upgrade.cost_amount}" />
							<input type="hidden" name="p3" value="{$upgrade.length_amount}" />
							<input type="hidden" name="t3" value="{$upgrade.lengthUnitPP}" />
							<input type="hidden" name="src" value="1" />
							<input type="hidden" name="sra" value="1" />
							
							<input type="submit" value="{xen:phrase subscribe}" class="button" />
						<xen:else />
							<input type="hidden" name="cmd" value="_xclick" />
							<input type="hidden" name="amount" value="{$upgrade.cost_amount}" />
							
							<input type="submit" value="{xen:phrase purchase}" class="button" />
						</xen:if>
						
						<input type="hidden" name="business" value="{$xenOptions.payPalPrimaryAccount}" />
						<input type="hidden" name="currency_code" value="{$upgrade.currency}" />
						<input type="hidden" name="item_name" value="{xen:phrase account_upgrade}: {$upgrade.title} ({$visitor.username})" />
						<input type="hidden" name="quantity" value="1" />
						<input type="hidden" name="no_note" value="1" />
						<input type="hidden" name="no_shipping" value="1" />
						<input type="hidden" name="custom" value="{$visitor.user_id},{$upgrade.user_upgrade_id},token,{$visitor.csrf_token_page}" />
						
						<input type="hidden" name="charset" value="utf-8" />
						<input type="hidden" name="email" value="{$visitor.email}" />
						
						<input type="hidden" name="return" value="{$requestPaths.fullBasePath}{xen:link account/upgrade-purchase}" />
						<input type="hidden" name="cancel_return" value="{$requestPaths.fullBasePath}{xen:link index}" />
						<input type="hidden" name="notify_url" value="{$xenOptions.boardUrl}/payment_callback.php" />
					</form>
					
					<div class="upgradeMain">
						<h4 class="title">{$upgrade.title}</h4>
						<xen:if is="{$upgrade.description}">
							<div class="description">{xen:string nl2br, $upgrade.description}</div>
						</xen:if>
					</div>
				</div>
			</li>
		</xen:foreach>
		</ul>
	</div>
</xen:if>
I haven't tested this with an actual purchase, but I think it will work. You should test it to make sure it extends upgrades with multiple purchases.