Go Back   Mosets Community > Third party Developers, Addons and Services for Mosets components > 3rd party addons & Custom Jobs

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 06-16-2005, 02:53 PM
MamboResources.com MamboResources.com is offline
Junior Member
 
Join Date: Mar 2005
Location: Arizona, USA
Posts: 23
Default How to use MamboCHARGE to limit an agent's listings

I have started a new FAQ on MamboResources.com -- the MamboCHARGE Cookbook, where we will post articles about how to set up the flexible features of MamboCHARGE to get the most out of it.

One of MamboCHARGE's unique features is a set of 20 parameters you can define yourself. Whenever a subscriber purchases a subscription with those options, they can be easily accessed within your scripts and used to control the behavior of Mambo, a single component or any function. You set up the flags and use them as you wish. Here's how:

The subscription parameters for the current user are stored in an object called, aptly enough, $CurrentSubscription. This object is instantiated inside the modified version of Mambo's index.php distributed with the program. So if you have installed the modified script, your user is logged in and has a subscription, this object is fully populated by the time your script sees it.

Insert the following line in any script or function where you need to access the $CurrentSubscription object:

global $CurrentSubscription;

And that should be enough to put that object in scope within your current script or function.

Now let's say for example you're selling agent subscriptions to your site powered by Mosets Hot Property component. You want to limit the number of ads an agent can place to 1 with a $10 subscription, 5 with a $40 subscription and 10 with a $60 subscription.

Start by making 3 different products. Make them all Mosets Hot Property agent subscriptions, and enter the different prices under the subscription price. Scroll down to the options section and enter values in the "Custom numeric value #1" field: enter 1 for the $10 product, 5 for the $40 product, and 10 for the $60 product.

Now back to the script. You need to modify Hot Property to test for the value you specified and take appropriate action. Find an appropriate place to insert the code prior to prompting the user. Here's an example:

.
... some code goes here to count the agent's active ads
.

if ($AgentListingCount >= $CurrentSubscription->OnSubscribeValue01) {
echo "Sorry, bozo! You have too many ads";
}

The field names for mos_mambocharge_plus_subscriptions are all listed in the manual. The field names are directly equivalent to the property names (eg: OnSubscribeValue01) referred to in the example.


For more information about MamboCHARGE-PLUS please visit our site at http://www.MamboResources.com

Jeff
Reply With Quote
  #2  
Old 06-23-2005, 05:12 AM
berd berd is offline
Member
 
Join Date: Jun 2005
Posts: 32
Default BerD

Hi Jeff.

Thanks for all the help on this, I have it running now
I did the following hack to get this running:
Change the first lines in the property.php file to this:
Quote:
function editproperty( $option, $activetab='0' ) {
global $database, $my, $Itemid, $task, $CurrentSubscription;

$agent = new HP_Agent($database);
$agent->load($my->id);

# Redirect to HP main page if user is not a valid Agent
if ( !($agent->user == $my->id && $agent->user > 0 && !empty($agent->id) && $my->id > 0) ) {
mosRedirect( "index.php?option=com_hotproperty&Itemid=".$It emid );
}

// maximum check
if( $task == 'addprop') {
$num = hotproperty::getAgentNumProp( $agent->id );
if( $num >= $CurrentSubscription->OnSubscribeValue01 ) {
// redirect to
echo "U kunt maximaal ".$CurrentSubscription->OnSubscribeValue01.
( $CurrentSubscription->OnSubscribeValue01 > 1 ? " huizen" : " huis" )." plaatsen!";
return false;
//mosRedirect( "index.php?option=com_hotproperty&Itemid=".$It emid );
}
}
And add the following function to the hotproperty.class.php file

Quote:
function getAgentNumProp($id) {

global $database;

$database->setQuery( "SELECT COUNT(*) AS total FROM #__hp_properties AS p"

. "\nLEFT JOIN #__hp_prop_types AS t ON t.id=p.type"

. "\nWHERE p.agent=".$id

. "\n AND (publish_up = '0000-00-00 00:00:00' OR publish_up <= NOW())"

. "\n AND (publish_down = '0000-00-00 00:00:00' OR publish_down >= NOW())");

$result = $database->loadResult();

echo $database->getErrorMsg();

return $result;

}
So here you have it: (for example)
- an agent who can subscribe for 1 property per month
- an agent who can subscribe for unlimited (127) property per year

Next things to find out:
- Is there a way to auto-unpublish property after the subscription is over.
- Is there a way to renew payment (agent gets an email that his property will ends and that he can renew his payment for a month)
- how can we add more property (127 is the mamimum) to lets say 999?
- Is there a way to delete property at the front-end?

Berd
Reply With Quote
  #3  
Old 06-23-2005, 10:06 AM
MamboResources.com MamboResources.com is offline
Junior Member
 
Join Date: Mar 2005
Location: Arizona, USA
Posts: 23
Default

Thanks for the update, BerD.

Number of ads: You discovered an error in the database setup. The mos_mambocharge_plus_subscribe table defines the optional fields as they should be - tinyint, int and varchar respectively.

The mos_mambocharge_plus_products table defines them all as tinyint. If you fix the numeric fields and make them int's you should be able to store numbers greater than 127. I will fix this in the next release.

Auto-renew - if you use an automatically renewing subscription type this will happen automatically and you don't have to worry about it.

Delete or unpublish property at the front end - good question. You already hid the published input box so you would need to add a conditional to that, so that it only hides the input box when it's set to False. HOWEVER be mindful that if you are using the pay-per-ad method that will not cancel the subscription. The user will continue to be charged for that ad even if they manually unpublish it. They need to cancel their subscription at PayPal. Also if you plan to put in a delete function, and you're using pay-per-ad functions, any IPN that attempts to update that record will fail with an error message.

Auto-unpublish at end of subscription -- as mentioned elsewhere on the board I owe you a script to do this. Or better still unless some people object,I will include it by default in the termination handler.

Jeff
Reply With Quote
  #4  
Old 06-23-2005, 10:08 PM
berd berd is offline
Member
 
Join Date: Jun 2005
Posts: 32
Default BerD

Hi Jeff

Auto-renew - if you use an automatically renewing subscription type this will happen automatically and you don't have to worry about it, this is ok for a company who can add unlimited property. But a person (property owner) who can only add 1 property per month does not need a recurring subscription because he has only one house to sell. (if is house is sold it's end of story for him) Is there any way to renew his payment for a moth, when he did not sold his house in the subscription period? And is there any automatic way (via email) to inform the property owner a week before his subscription will end?
So if he have sold his house he can delete/unpublish it, or renew his payment for a month. If he don't do anything his house should be automatically unpublished (which will be include in the termination handler)

For a company you don't have these problems you can just charge them for an automatically renewing subscription.

If this is possible I think you have a very 'hot' product because you can use these products for cars, boats etc.. etc..

BerD
Reply With Quote
  #5  
Old 06-29-2005, 11:39 AM
MamboResources.com MamboResources.com is offline
Junior Member
 
Join Date: Mar 2005
Location: Arizona, USA
Posts: 23
Default

Quote:
Originally Posted by berd
Hi Jeff

...a person (property owner) who can only add 1 property per month does not need a recurring subscription because he has only one house to sell. (if is house is sold it's end of story for him) Is there any way to renew his payment for a moth, when he did not sold his house in the subscription period?
Short answer: YES. Long answer...

MamboCHARGE can handle two types of products - "subscription" and "sale". Essentially a subscription is (or can be) a recurring billing, and a 'sale' is a one-time billing. You need to use a sale-type transaction to achieve this.

As you know transactions are processed by different plug-in transaction handlers. In the case of Hot Property listings, "Sale" transactions are possible and are processed by the mambocharge_hplisting_purchase.php handler script. This script processes a one-time purchase and inserts the publish_up and publish_down dates in the record. It responds to all the normal IPN transactions for a straight purchase. For example it will wait until an e-check clears before activating the listing. It will also cancel the listing immediately in the event of a chargeback.

The customer can come to the site any time and renew. You can specify the term, just like a regular subscription. If they are less than 30 days from expiration the "renew now" link appears, and the expiration date shows as well. They have to repeat the purchase transaction to renew for another month.

This transaction type is not dependent upon the PayPal IPN process to terminate the listing. It automatically expires, and PayPal does not automatically rebill.


Quote:

And is there any automatic way (via email) to inform the property owner a week before his subscription will end?
So if he have sold his house he can delete/unpublish it, or renew his payment for a month. If he don't do anything his house should be automatically unpublished (which will be include in the termination handler)
This functionality is not built into MamboCHARGE. You would have to write a script to read the listings table and generate emails based on the publish_down date and run it from cron or a scheduler on your server.

Hope this helps.

Jeff
Reply With Quote
  #6  
Old 07-02-2005, 07:03 PM
berd berd is offline
Member
 
Join Date: Jun 2005
Posts: 32
Post BerD

Hi JEff...

iIt's not 100% clear to me. Ok I need to use a sale-type transaction to achieve this, but can I use it together. So this is the way I can achieve this?

product1: (agent which can add unlimited property)

category: HotProperty - Agent subscription
transaction: Mosets Hot Property Agent Subscription
Type of product: Subscription
Custom Numeric Value #: 9999

product2: (house owner only 1 house with renew option)

category: HotProperty - Listings
transaction: Mosets Hot Property listings
Type of product: Sale
Custom Numeric Value #: 1

If I do this they don't show up together, because of the different product ID's

BerD
Reply With Quote
  #7  
Old 07-03-2005, 04:57 AM
MamboResources.com MamboResources.com is offline
Junior Member
 
Join Date: Mar 2005
Location: Arizona, USA
Posts: 23
Default

Berd,
You are correct, I missed an important piece of information about how to identify the type of "agent". This requires adding a field to the agent table and a modification to the registration script. I sent you some code by email however as I explained in that email this needs some additional work to integrate into MamboCHARGE. Let us know how this works out.

Jeff
Reply With Quote
  #8  
Old 07-03-2005, 06:31 AM
MamboResources.com MamboResources.com is offline
Junior Member
 
Join Date: Mar 2005
Location: Arizona, USA
Posts: 23
Default

Some use cases will help clarify the issues and the programming requirements to integrate MamboCHARGE into the site.

Scenario #1: An "Agent" comes to the site and registers using the modified registration script, where he specifies that he is an agent. The registration script creates an agent record and a user record. Since he is an agent the registration script dispatches him to a list of product options that allow him to purchase a site subscription as an HP Agent. He purchases a site subscription successfully and logs in. Mambo recognizes him as an Agent and assigns the appropriate group ID. He gets access to the agent menu. He goes to enter a listing. HP recognizes him as a subscriber and gives him access to the publish_up, publish_down and published fields in the form. HP recognises him as a subscriber and saves his listing. Since he is a subscriber, he is not asked for an additional payment. Since he is a subscriber, his listing is published immediately. He has full control over future removal and expiration of his listing.

Scenario #2: A property owner comes to the site and registers using the modified registration script, where he identifies himself as a property owner. The registration script creates an agent record with category #2 and a user record. Since he is in category #2 the script doesn't care about selling him a subscription. He goes ahead and logs into the site. Mambo recognizes him as an Agent and assigns the appropriate group ID. He gets access to the agent menu and goes to enter a listing. HP recognizes that he is a non-subscriber and DOES NOT give him access to publish_up, publish_down and publshed fields. HP saves his listing but does not publish it. Since he is a non-subscriber HP dispatches him to MamboCHARGE to show him a list of his unpublshed listings and give him payment options. These may or may not include sale type transactions or renewable subscription-type transactions. He pays for the listing successfully and the listing is published.

Let's try to implement the use case in code.

"An "Agent" comes to the site and registers using the modified registration script, where he specifies that he is an agent."

registration.html.php modification inside function registerForm:
Code:
    <tr>
      <td><?php echo _REGISTER_VPASS; ?> *</td>
      <td><input class="inputbox" type="password" name="password2" size="40" value="" /></td>
    </tr>
    <tr>

<!--JW> -->
	 <td>Type of account *</td>
      <td>
      <select name="accounttype" class='inputbox'>
      <option SELECTED value=1>Agent</option>
      <option value=2>Property owner</option>
      <option value=3>Visitor</option>
      </select>
    </tr>
<!--<JW--> 
"The registration script creates an agent record and a user record."

Modifications to registration.php in function saveRegistration:
Code:
	mosMakeHtmlSafe($row);

	$row->id = 0;
	$row->usertype = '';
//JW>
	$accounttype=$_POST["accounttype"];
	if (($accounttype == 1) || ($accounttype == 2)) 
		{
		$SearchGID = "Agent";
		}
	else
		{
		$SearchGID = "Registered";
		}
	$row->gid = $acl->get_group_id($SearchGID,'ARO');
//<JW
	if ($mosConfig_useractivation=="1") {
		$row->activation = md5( mosMakePassword() );
		$row->block = "1";
	}

	if (!$row->check()) {
		echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
		exit();
	}

	$pwd = $row->password;
	$row->password = md5( $row->password );
	$row->registerDate = date("Y-m-d H:i:s");

	if (!$row->store()) {
		echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
		exit();
	}
	$newid = $row->id;
	$row->checkin();

//JW> create a record for agent or seller in hotproperty

	if ($accounttype == 1) // agent
		{
		$SQL = "INSERT INTO #__hp_agents SET user=$newid,
			name='$row->name',
			email='$row->email', 
			company=0,
			category=1,
			need_approval=1";
		$database->setQuery($SQL);
		$database->query();
		}
	elseif ($accounttype == 2) // seller
		{
		$SQL = "INSERT INTO #__hp_agents SET user=$newid,
			name='$row->name',
			email='$row->email', 
			company=1,
			category=2,
			need_approval=0";
		$database->setQuery($SQL);
		$database->query();
		}		
		
	$name = $row->name;
	$email = $row->email;
	$username = $row->username;

	$subject = sprintf (_SEND_SUB, $name, $mosConfig_sitename);

"The registration script detects that he is an agent and dispatches him to a list of product options that allow him to purchase a site subscription."

Modifications to registration.php in function saveRegistration:
Code:
	if ( $mosConfig_useractivation == "1" ){
		echo _REG_COMPLETE_ACTIVATE;
	} else {
//		echo _REG_COMPLETE;
		if ($accounttype == 1) {
		mosRedirect("index.php?option=com_mambocharge_plus&op=showproducts&category=6", "");
		}
	}
"He purchases a site subscription successfully and logs in. Mambo recognizes him as an Agent and assigns the appropriate group ID. He gets access to the agent menu. He goes to enter a listing. HP recognizes him as a subscriber and gives him access to the publish_up, publish_down and published fields in the form."

Modifications to property.html.php in function editproperty

Code:
      </tr>
	    <tr>
        <td valign="top" align="right"><?php echo _E_CREATED; ?></td>
        <td align="left"><input class="inputbox" type="text" name="created" id="created" size="25" maxlength="19" value="<?php echo $row->created; ?>" />
          <input name="reset" type="reset" class="button" onClick="return showCalendar('created', 'y-mm-dd');" value="..."></td>
      </tr>
<?php
	global $CurrentSubscription;		// instantiated in the MC customized index.php file
	if ($CurrentSubscription->isActive == 1) { ?>
      <tr>
        <td width="20%" align="right"><?php echo _E_START_PUB; ?></td>
        <td width="80%" align="left"> <input class="inputbox" type="text" name="publish_up" id="publish_up" size="25" maxlength="19" value="<?php echo $row->publish_up; ?>" />
          <input type="reset" class="button" value="..." onClick="return showCalendar('publish_up', 'y-mm-dd');">
        </td>
      </tr>
      <tr>
        <td width="20%" align="right"><?php echo _E_FINISH_PUB; ?></td>
        <td width="80%" align="left"> <input class="inputbox" type="text" name="publish_down" id="publish_down" size="25" maxlength="19" value="<?php echo $row->publish_down; ?>" />
          <input type="reset" class="button" value="..." onClick="return showCalendar('publish_down', 'y-mm-dd');">
        </td>
      </tr>
<?php } else { ?>
<input type="hidden" name="publish_up" id="publish_up" value="<?php echo $row->publish_up; ?>" />
<input type="hidden" name="publish_down" id="publish_down" value="<?php echo $row->publish_down; ?>" />
<?php } ?>

    </table>

"HP recognises him as a subscriber and saves his listing. Since he is a subscriber, he is not asked for an additional payment. Since he is a subscriber, his listing is published immediately. He has full control over future removal and expiration of his listing."


- or -

"Since he is a non-subscriber HP dispatches him to MamboCHARGE to show him a list of his unpublshed listings and give him payment options. These may or may not include sale type transactions or renewable subscription-type transactions. He pays for the listing successfully and the listing is published."

Modifications to property.php function saveproperty

Code:
function saveproperty( $option, $task='' ) {
	global $database, $Itemid, $my, $hp_auto_approve;
//>JW
	global $CurrentSubscription;
//<JW

 	$row = new mosHPProperties( $database );
	if (!$row->bind( $_POST )) {
		echo "<script> alert('".$row->getError()."'); window.history.go(-1); </script>\n";
		exit();
.
.
.
	} else {
		$row->modified = date( "Y-m-d H:i:s" );
		$row->created = $row->created ? $row->created : date( "Y-m-d H:i:s" );
	}

//JW> If agent is a subscriber override the approved flag
	if ($CurrentSubscription->isActive==1) {
		$row->approved = 1;
	}
//<JW

	# If never fill it with all zeros
	if (trim( $row->publish_down ) == "Never") {
		$row->publish_down = "0000-00-00 00:00:00";
	}
.
.
.
	# Get agent ID
	$agent = new HP_Agent($database);
	$agent->load($my->id);

//JW> If agent is a non-subscriber send them to the products page
	if (($CurrentSubscription->isActive < 1) && ($row->approved == 0))
		{
		mosRedirect("index.php?option=com_mambocharge_plus&op=showunpublished&category=4", "");
		}
	else
		{
		if ($task == '') mosRedirect( "index.php?option=$option&task=manageprop&Itemid=".$Itemid, _HP_EDITPROP_MSG_01 );
		else mosRedirect( "index.php?option=$option&task=editprop&id=$row->id&Itemid=".$Itemid."&tab=tab3" );
		}
//<JW
}

Last edited by MamboResources.com; 07-03-2005 at 06:42 AM.
Reply With Quote
  #9  
Old 07-03-2005, 06:50 AM
MamboResources.com MamboResources.com is offline
Junior Member
 
Join Date: Mar 2005
Location: Arizona, USA
Posts: 23
Default

One more point...

Quote:
Originally Posted by berd
Hi JEff...

iIt's not 100% clear to me. Ok I need to use a sale-type transaction to achieve this, but can I use it together. So this is the way I can achieve this?

product1: (agent which can add unlimited property)

category: HotProperty - Agent subscription
transaction: Mosets Hot Property Agent Subscription
Type of product: Subscription
Custom Numeric Value #: 9999

product2: (house owner only 1 house with renew option)

category: HotProperty - Listings
transaction: Mosets Hot Property listings
Type of product: Sale
Custom Numeric Value #: 1

If I do this they don't show up together, because of the different product ID's

BerD
This is not quite the same as the use case you were trying to implement originally. In the earlier post you were offering two different subscription options with different maximum number of listings. The solution you posted earlier should handle this well.

In this example, it seems you are asking the agent to purchase a subscription to get access to certain maximum of listings (or unlimited listings, it doesn't really matter). And an individual user would purchase individual listings one at a time.

You can combine both scenarios by combining the code examples shown.

Jeff
Reply With Quote
  #10  
Old 07-05-2005, 07:33 PM
berd berd is offline
Member
 
Join Date: Jun 2005
Posts: 32
Thumbs up BerD

Thanks Jeff for the update.
We are going to test this, we keep you guys informed...

---cheers---
---b e r d---
Reply With Quote
  #11  
Old 07-09-2005, 01:17 AM
sheki sheki is offline
Junior Member
 
Join Date: May 2005
Location: Slovenia
Posts: 19
Default

Is anybody going to try using the MAMBOCharge in MossetsTree?
Reply With Quote
  #12  
Old 08-24-2005, 12:30 AM
ZulloP ZulloP is offline
Junior Member
 
Join Date: Aug 2005
Posts: 4
Default

amazing thread, thanks!

Last edited by ZulloP; 08-24-2005 at 01:10 AM.
Reply With Quote
  #13  
Old 08-24-2005, 01:30 AM
berd berd is offline
Member
 
Join Date: Jun 2005
Posts: 32
Thumbs up BerD

If you need any help or patches just let me know..
Reply With Quote
  #14  
Old 08-24-2005, 01:48 AM
ZulloP ZulloP is offline
Junior Member
 
Join Date: Aug 2005
Posts: 4
Default

hi berd,
actually, it will be really interesting to see some hack/patch that let the admin (or the agent) pay for an "upgrade" of his/her account. I mean, let's say my agent subscribes for a 20 monthly adds, and before the end of the month he/she would like to have a limt of 50 adds(instead of 20)... do you know if it will be possible shomehow to have this implemented? It doesn't matter (at least in my situation) if I have to do it manually (as admin) or the agent has to do it trough paypal.

... or the feature is already in there and I didn't find it yet... ??

another (and last) question: how do I delete the products in mambocharge?


and... by the way, thanks for sharing your knowledge with us guys!

Last edited by ZulloP; 08-24-2005 at 01:51 AM.
Reply With Quote
  #15  
Old 09-05-2005, 08:50 PM
berd berd is offline
Member
 
Join Date: Jun 2005
Posts: 32
Default BerD

Deleting products is not yet implemented, but you can change the category to [select category]

The first question i am not sure what you mean, but you can use the hack somewhere in this post and set the Custom Numeric Value # first into 20 in HotProperty if it is a sale you have the renew option, you can just change your product numeric value in 50.

BerD
Reply With Quote
  #16  
Old 09-08-2005, 02:10 PM
Lionel Lionel is offline
Member
 
Join Date: Sep 2005
Posts: 41
Default

I would be very interested in that Mossets Tree implementation too, before purchasing hot properties component.



Quote:
Originally Posted by sheki
Is anybody going to try using the MAMBOCharge in MossetsTree?
Reply With Quote
  #17  
Old 09-08-2005, 03:23 PM
berd berd is offline
Member
 
Join Date: Jun 2005
Posts: 32
Default BerD

Mambocharge can be used with mosets Tree listings.

read it here

BerD
Reply With Quote
  #18  
Old 12-22-2005, 09:12 AM
guaru guaru is offline
Mosets'd
 
Join Date: Oct 2005
Posts: 111
Default

Very good thread

So anybody can explain me one point here

in the type sale, let´s say 1 month sale

the renew option will appear, but the user will not pay by paypal, we will have to do it manually, can mambocharge show the renew button with the payment options?
__________________
Guia de Guarulhos www.guaru.net
Guia de Mairipor„ www.guiatotal.net

Last edited by guaru; 12-22-2005 at 07:39 PM.
Reply With Quote
  #19  
Old 12-22-2005, 01:04 PM
MamboResources.com MamboResources.com is offline
Junior Member
 
Join Date: Mar 2005
Location: Arizona, USA
Posts: 23
Default

A renew button is supposed to appear on the member's account starting several days before the listing expires.

Jeff
Reply With Quote
  #20  
Old 03-05-2006, 05:50 PM
nickw nickw is offline
Member
 
Join Date: Feb 2006
Posts: 40
Default hi

what if i dont want to buy mambocharge and just control the amount of properties added and the time that they are published?
Reply With Quote
  #21  
Old 06-05-2009, 06:30 PM
dinar2007 dinar2007 is offline
Mosets'd
 
Join Date: Apr 2009
Location: Italy
Posts: 70
Default

hi,
hi find people that help me to install Mambocharge...
You know if work whit comunity builder??'

Please contact me to [email protected]

yuri cristodaro
Reply With Quote
  #22  
Old 06-05-2009, 10:34 PM
dinar2007 dinar2007 is offline
Mosets'd
 
Join Date: Apr 2009
Location: Italy
Posts: 70
Default

It's possible install in COMUNITY BUILDER?
Who knwo how to make that!??!?!
Reply With Quote
  #23  
Old 06-25-2009, 02:40 AM
dinar2007 dinar2007 is offline
Mosets'd
 
Join Date: Apr 2009
Location: Italy
Posts: 70
Default

i have make the modify write up but don't work!
why!
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +8. The time now is 08:30 AM.

Copyright © 2005-2010 Mosets Consulting

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.