Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Points/Rewards Module


Guest

Recommended Posts

it's working now in my site. thx for lovely work and support.

 

i appreciate anyone who has helped me on this.

 

thx once again. u r my hero

Hi are you still having the same problem of points being automatically deducted regardless if the customer doesnt have enough or doesnt want to use the points?

Link to comment
Share on other sites

  • Replies 87
  • Created
  • Last Reply

Top Posters In This Topic

Hi are you still having the same problem of points being automatically deducted regardless if the customer doesnt have enough or doesnt want to use the points?

 

Jolan,

 

Yea, I have that same problem, but I didn?t ever realize it because the application that I am using this module it doesn?t matter in my case, but if you use this as advertised this is a problem that needs to be tracked down.

 

I unfortunately don?t have enough smarts when it comes to php code to know where to look to fix this problem

 

If anybody has any suggestions of where to start, post them here and I'd be happy to work on this some more and let everyone know what I find.

Link to comment
Share on other sites

it's working now in my site. thx for lovely work and support.

 

i appreciate anyone who has helped me on this.

 

thx once again. u r my hero

 

Ivan,

 

Thanks for the very kind words, this is what this community is all about.

 

I would reccomond checking on the problem that was pointed out about your customers points being deducted even when they dont select for points to be reedemed.

 

Again, If anyone has an idea of how to stop this, please share your thoughts and I'll work on it and post what I find.

 

Thanks again

Link to comment
Share on other sites

Now an other stupid guy has a question (stupid guy: it is me).

I installed the the Points/Rewards thing as well the Credit Class/Gift Vouchers/Discount

The Gift Voucher is working fine and the points/Rewards partly. The customers can collect their points, see their points, but they are not able to spend the points.

 

I read this forum many times, and made all changes (besides the whole reinstallation, this is not possible, because my shop system has to many modifications, it would takes weeks to rebuilt everything).

 

Anyway, i could need help. I have a develop system of my shop and if you want to help, i can give you the access you need.

 

rgds

 

Markus

Link to comment
Share on other sites

Yes this contrib is bugged and points are ALWAYS used even if the customer doesnt want to use them. Its a pity, this contrib has great potential and I would be using it also, however I myself dont have know how to make things right :(

Link to comment
Share on other sites

  • 1 month later...
Great idea! There is only a major problem I see with it:

 

This would work fine, if we had 1 - 10 orders a day. But, it is not suitable if you receive enough orders to run an online shop. Why? Well, consider this:

 

We have credit cards enable, cash on delivery, money wires, and cash in advance. Due to our large sales volume we have a considerable amount of voided sales and it be virtually impossible to keep track of all orders and points. This could easily be solved if it only awarded the points to orders which reach a certain status (delivery) instead of number of days. Depending on where the money wire is coming from, it varies weeks. Manually deleting the orders which are voided is not possible at all! We would lose more time tracking each sale then it is worth awarding points in return for additional sales.

 

Can you change the module to award points according to sales status? Makes a lot more sense to me. What do you think?

 

You are completely dead on with that statement. Once people found out the loop hole you'd have a tonne of bunk orders.

 

Unfortunately this mod didn't get fixed up, just tried it and it's horribly broken. Maybe the gracious OSC genie will fix it one day.

Link to comment
Share on other sites

  • 2 weeks later...

This code below is Ok but I use the coupon and when a client validate a coupon, I don't want the client use the redemption. How to do to realise that.

I think it's important because, if you use the coupon + redemption, there is a problem. The client must, in my opinion, use the coupon only or the redemption only but not the 2 in the same time.

 

 

 

 

<?php
/*
 $Id: ot_redemptions.php,v 1 Exp $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2002 osCommerce

 Released under the GNU General Public License
*/

 class ot_redemptions {
   var $title, $output;

   function ot_redemptions() {
     $this->code = 'ot_redemptions';
     $this->title = MODULE_ORDER_TOTAL_REDEMPTIONS_TITLE;
     $this->header = MODULE_ORDER_TOTAL_REDEMPTIONS_HEADER;
     $this->description = MODULE_ORDER_TOTAL_REDEMPTIONS_DESCRIPTION;
     $this->user_prompt = MODULE_ORDER_TOTAL_REDEMPTIONS_USER_PROMPT;
     $this->enabled = true;
     $this->sort_order = 800;
     //$this->include_shipping = MODULE_ORDER_TOTAL_GV_INC_SHIPPING;
     //$this->include_tax = MODULE_ORDER_TOTAL_GV_INC_TAX;
     //$this->calculate_tax = MODULE_ORDER_TOTAL_GV_CALC_TAX;
     //$this->credit_tax = MODULE_ORDER_TOTAL_GV_CREDIT_TAX;
     //$this->tax_class  = MODULE_ORDER_TOTAL_GV_TAX_CLASS;
     //$this->show_redeem_box = MODULE_ORDER_TOTAL_GV_REDEEM_BOX;
     $this->credit_class = true;
     $this->checkbox = $this->user_prompt . '<input type="checkbox" onClick="submitFunction()" name="' . 'c' . $this->code . '">';
     $this->output = array();
   }

   function process() {
     global $order, $currencies;
       
       $order_total = $this->get_order_total();
// if($_SESSION['cot_redemptions'])
       if(!$_SESSION['cot_redemptions'])
       {
       $od_amount = $this->calculate_credit($order_total);
//        if ($this->calculate_tax != "none") {
//          $tod_amount = $this->calculate_tax_deduction($order_total, $od_amount, $this->calculate_tax);
//          $od_amount = $this->calculate_credit($order_total);
//        }
       $this->deduction = $od_amount;
//        if (($this->calculate_tax == "Credit Note") && (DISPLAY_PRICE_WITH_TAX != 'true')) {
//          $od_amount -= $tod_amount;
//          $order->info['total'] -= $tod_amount;
//        }



// ############# calcul de la r?duction - Amount reduction
       $order->info['total'] = $order->info['total'] - $od_amount;

//  ############ Apparition de l'affichage    Dysplay in checkout confirmation            
       if ($od_amount > 0) {
         $this->output[] = array('title' => $this->title . ':',
                          'text' => '<b>' . $currencies->format($od_amount) . '</b>',
                          'value' => $sod_amount);
        }else{
         $this->output[] = array('title' => '<font color=red><b>Vous n\avez pas assez acquis de points pour b?n?ficier d\'un rachat</b></font>',
                          'text' => '',
                          'value' => $sod_amount);                
        }      
       }
     }

   function selection_test() {
     global $customer_id, $order;
     if ($this->user_has_points($customer_id)) {
     for ($i=0, $n=sizeof($order->products); $i<$n; $i++)
     {  
   if (!(substr($order->products[$i]['model'], 0, 10) == 'REDEMPTION'))
   {
 // 	 return false;
  	 return true;
  }
  }
       return true;
     } else {
       return false;
     }
   }

   function pre_confirmation_check($order_total) {
 $gv_payment_amount = 0;
     if (!$SESSION['cot_redemptions']) {
       $gv_payment_amount = $this->calculate_credit($order_total);
     }
     return $gv_payment_amount;
   }

   function use_credit_amount() {
   
  global $customer_id;
  $ptpoints = 0;
  
     !$_SESSION['cot_redemptions'] = false;     
     
     $pt_query = tep_db_query("select points from customer_points where customer_id = '" . $customer_id . "'");
     if ($pt_result = tep_db_fetch_array($pt_query)) 
     {
       $ptpoints = $pt_result['points'];
     }
     
     if ($this->selection_test()) {
       $output_string .=  '    <td align="right" class="main">';
       $output_string .= '<b>' . $this->checkbox . '</b>' . '' . "\n";
       $output_string .= "<br> Points valide = $ptpoints </td>\n";
       
     }
     return $output_string;
   }

   function update_credit_account($i) {
     
     global $order, $customer_id, $insert_id, $REMOTE_ADDR;
     
/************************************************************************      
     if (ereg('^GIFT', addslashes($order->products[$i]['model']))) {
       $gv_order_amount = ($order->products[$i]['final_price'] * $order->products[$i]['qty']);
       if ($this->credit_tax=='true') $gv_order_amount = $gv_order_amount * (100 + $order->products[$i]['tax']) / 100;
//        $gv_order_amount += 0.001;
       $gv_order_amount = $gv_order_amount * 100 / 100;
       if (MODULE_ORDER_TOTAL_GV_QUEUE == 'false') {
         // GV_QUEUE is true so release amount to account immediately
         $gv_query=tep_db_query("select amount from " . TABLE_COUPON_GV_CUSTOMER . " where customer_id = '" . $customer_id . "'");
         $customer_gv = false;
         $total_gv_amount = 0;
       
         if ($gv_result = tep_db_fetch_array($gv_query)) {
           $total_gv_amount = $gv_result['amount'];
           $customer_gv = true;
         }     
         $total_gv_amount = $total_gv_amount + $gv_order_amount;
         if ($customer_gv) {
           $gv_update=tep_db_query("update " . TABLE_COUPON_GV_CUSTOMER . " set amount = '" . $total_gv_amount . "' where customer_id = '" . $customer_id . "'");
         } else {
           $gv_insert=tep_db_query("insert into " . TABLE_COUPON_GV_CUSTOMER . " (customer_id, amount) values ('" . $customer_id . "', '" . $total_gv_amount . "')");
         }
       } else {
        // GV_QUEUE is true - so queue the gv for release by store owner
         $gv_insert=tep_db_query("insert into " . TABLE_COUPON_GV_QUEUE . " (customer_id, order_id, amount, date_created, ipaddr) values ('" . $customer_id . "', '" . $insert_id . "', '" . $gv_order_amount . "', NOW(), '" . $REMOTE_ADDR . "')");
       }
     }
********************************************************************************
**/      
   }

   function credit_selection() {	
     global $customer_id, $currencies, $language;
     $selection_string = '';            
     
     /*
     $gv_query = tep_db_query("select coupon_id from " . TABLE_COUPONS . " where coupon_type = 'G' and coupon_active='Y'");
     if (tep_db_num_rows($gv_query)) {
       $selection_string .= '<tr>' . "\n";
       $selection_string .= '  <td width="10">' .  tep_draw_separator('pixel_trans.gif', '10', '1') .'</td>';
       $selection_string .= '  <td class="main">' . "\n";
       $image_submit = '<input type="image" name="submit_redeem" onClick="submitFunction()" src="' . DIR_WS_LANGUAGES . $language . '/images/buttons/button_redeem.gif" border="0" alt="' . IMAGE_REDEEM_VOUCHER . '" title = "' . IMAGE_REDEEM_VOUCHER . '">';
       $selection_string .= TEXT_ENTER_GV_CODE . tep_draw_input_field('gv_redeem_code') . '</td>';
       $selection_string .= '  <td align="right"' . $image_submit . '</td>';
       $selection_string .= '  <td width="10">' . tep_draw_separator('pixel_trans.gif', '10', '1') . '</td>';
       $selection_string .= '</tr>' . "\n";
     }
     */
   return $selection_string;
   }

   function apply_credit() {
     global $order, $customer_id, $coupon_no, $insert_id;
     if (!$_SESSION['cot_redemptions']) {
       $gv_query = tep_db_query("select points  from customer_points where customer_id = '" . $customer_id . "'");
       $gv_result = tep_db_fetch_array($gv_query);
       $points_balance = $gv_result['points'];
       
       $con_query = tep_db_query("select configuration_value from configuration where configuration_key = 'DOLLAR_REDEEM_PER_POINT'");      
    $con_result=tep_db_fetch_array($con_query);
       $conf_points = $con_result['configuration_value'];
       
       $points_spent = $this->deduction/$conf_points;
 $points_balance = $points_balance - $points_spent;
 
 if($points_spent > 0)
 {
	 $gv_update = tep_db_query("update customer_points set points = '" . $points_balance . "' where customer_id = '" . $customer_id . "'");        
	 $gv_ins = tep_db_query("insert into customer_points_redeemed values (null, $customer_id, $points_spent, now(),  $insert_id )");
 }
       
     }
     return $this->deduction;
   }

   function collect_posts() {

  }  

   function calculate_credit($amount) {
     global $customer_id, $order;
     $red_query=tep_db_query("select points from customer_points  where customer_id = '" . $customer_id . "'");
     
     $red_result=tep_db_fetch_array($red_query);
     $red_points = $red_result['points'];
     
     $con_query = tep_db_query("select configuration_value from configuration where configuration_key = 'DOLLAR_REDEEM_PER_POINT'");      
     $con_result= tep_db_fetch_array($con_query);
     $conf_points = $con_result['configuration_value'];

     $red_amount = $red_points * $conf_points;

     $save_total_cost = $amount;
     $full_cost = $save_total_cost - $red_amount;
     if ($full_cost <= 0) {
       $full_cost = 0;
       $red_amount = $save_total_cost;
     }
     else
 $red_amount = 0;
 
     return tep_round($red_amount,2);
   }

   function calculate_tax_deduction($amount, $od_amount, $method) {
   }

   function user_has_points($c_id) {
     $pt_query = tep_db_query("select points from customer_points where customer_id = '" . $c_id . "'");
     if ($pt_result = tep_db_fetch_array($pt_query)) {
       if ($pt_result['points']>0) {
         return true;
       }
     }
     return false;
   }

   function get_order_total() {
     global $order;
     $order_total = $order->info['total'];
     
     $con_query = tep_db_query("select configuration_value from configuration where configuration_key = 'USE_POINTS_FOR_SHIPPING'");      
     $con_result=tep_db_fetch_array($con_query);
     $conf_use = $con_result['configuration_value'];
     
     //if ($conf_use == 'false') $order_total = $order_total - $order->info['tax'];
     if ($conf_use == 'false') $order_total = $order_total - $order->info['shipping_cost'];

     return $order_total;
   }    

   function check() {
     if (!isset($this->check)) {
       $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'POINTS_PER_DOLLAR_PURCHASE'");
       $this->check = tep_db_num_rows($check_query);
     }

     //return $this->check;
     return 1;
   }

   function keys() {
//      return array('MODULE_ORDER_TOTAL_GV_STATUS', 'MODULE_ORDER_TOTAL_GV_SORT_ORDER', 'MODULE_ORDER_TOTAL_GV_QUEUE', 'MODULE_ORDER_TOTAL_GV_INC_SHIPPING', 'MODULE_ORDER_TOTAL_GV_INC_TAX', 'MODULE_ORDER_TOTAL_GV_CALC_TAX', 'MODULE_ORDER_TOTAL_GV_TAX_CLASS', 'MODULE_ORDER_TOTAL_GV_CREDIT_TAX');
     return array ();
   }

   function install() {
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Afficher le Total', 'MODULE_ORDER_TOTAL_GV_STATUS', 'true', 'Souhaitez vous afficher la valeur du coupon ?', '6', '1','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Ordre de Tri', 'MODULE_ORDER_TOTAL_GV_SORT_ORDER', '740', 'Affichage de l\'ordre d\'apparition.', '6', '2', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Queue Purchases', 'MODULE_ORDER_TOTAL_GV_QUEUE', 'true', 'Do you want to queue purchases of the Gift Voucher?', '6', '3','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Include Shipping', 'MODULE_ORDER_TOTAL_GV_INC_SHIPPING', 'true', 'Include Shipping in calculation', '6', '5', 'tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Include Tax', 'MODULE_ORDER_TOTAL_GV_INC_TAX', 'true', 'Include Tax in calculation.', '6', '6','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Re-calculate Tax', 'MODULE_ORDER_TOTAL_GV_CALC_TAX', 'None', 'Re-Calculate Tax', '6', '7','tep_cfg_select_option(array(\'None\', \'Standard\', \'Credit Note\'), ', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_ORDER_TOTAL_GV_TAX_CLASS', '0', 'Use the following tax class when treating Gift Voucher as Credit Note.', '6', '0', 'tep_get_tax_class_title', 'tep_cfg_pull_down_tax_classes(', now())");
     tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function ,date_added) values ('Credit including Tax', 'MODULE_ORDER_TOTAL_GV_CREDIT_TAX', 'false', 'Add tax to purchased Gift Voucher when crediting to Account', '6', '8','tep_cfg_select_option(array(\'true\', \'false\'), ', now())");
   }

   function remove() {

   }
 }
?>


Regards
-----------------------------------------
Loïc

Contact me by skype for business
Contact me @gyakutsuki for an answer on the forum

 

Link to comment
Share on other sites

  • 4 months later...
Hi guys.

I can answer my first question. It looks like the instructions are not complete.

In order to let the users see the the points and redemtions, here is what you need to do.

 

1. edit catalog/includes/filenames.php and add the following to it:

 ?define('FILENAME_MY_POINTS', 'mypoints.php');
?define('FILENAME_MY_REDEMPTIONS', 'myredemptions.php');

 

2. edit catalog/accounts.php and below the order history or any other place you want, add the folloing:

 

 ? ? ?<tr>
? ? ? ?<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
? ? ?</tr>
? ? ?<tr>
? ? ? ?<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
? ? ? ? ?<tr>
? ? ? ? ? ?<td class="main"><b><?php echo MY_POINTS_AND_REDEMPTIONS; ?></b></td>
? ? ? ? ?</tr>
? ? ? ?</table></td>
? ? ?</tr>
? ? ?<tr>
? ? ? ?<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
? ? ? ? ?<tr class="infoBoxContents">
? ? ? ? ? ?<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
? ? ? ? ? ? ?<tr>
? ? ? ? ? ? ? ?<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
? ? ? ? ? ? ? ?<td width="60"><?php echo tep_image(DIR_WS_IMAGES . 'account_orders.gif'); ?></td>
? ? ? ? ? ? ? ?<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
? ? ? ? ? ? ? ?<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
? ? ? ? ? ? ? ? ?<tr>
? ? ? ? ? ? ? ? ? ?<td class="main"><?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' <a href="' . tep_href_link(FILENAME_MY_POINTS, '', 'SSL') . '">' . VIEW_POINTS . '</a>'; ?></td>
? ? ? ? ? ? ? ? ?</tr>

? ? ? ? ? ? ? ? ?<tr>
? ? ? ? ? ? ? ? ? ?<td class="main"><?php echo tep_image(DIR_WS_IMAGES . 'arrow_green.gif') . ' <a href="' . tep_href_link(FILENAME_MY_REDEMPTIONS, '', 'SSL') . '">' . VIEW_REDEMPTIONS . '</a>'; ?></td>
? ? ? ? ? ? ? ? ?</tr>
? ? ? ? ? ? ? ?</table></td>
? ? ? ? ? ? ? ?<td width="10" align="right"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
? ? ? ? ? ? ?</tr>
? ? ? ? ? ?</table></td>
? ? ? ? ?</tr>
? ? ? ?</table></td>
? ? ?</tr>

 

3. Edit mypoints.php and myredemptions.php and delete teh instances of the following, or if you want to keep the mouseover effect youwill need to define them somewhere, or elese you will get errors.

 onMouseOver="rowOverEffect(this)" onMouseOut="rowOutEffect(this)"

If anyone has a solution for my second question, please let me know.

 

an addin from Marco that terminate the rowovereffect Error:

onMouseOver="rowOverEffect(this)" onMouseOut="rowOutEffect(this)"

adding follow rows in the header Tag of mypoints.php and myredemptions.php :

-----------------------------------------------------------------------------------------------

<script language="javascript"><!--

function rowOverEffect(object) {

if (object.className == 'moduleRow') object.className = 'moduleRowOver';

}

 

function rowOutEffect(object) {

if (object.className == 'moduleRowOver') object.className = 'moduleRow';

}

 

function checkBox(object) {

document.account_notifications.elements[object].checked = !document.account_notifications.elements[object].checked;

}

//--></script>

-----------------------------------------------------------------------------------------------------------------------

Sorry for my English, I'm german. I hope this Addin help anyone...

Edited by webschiff
Link to comment
Share on other sites

  • 1 year later...
  • 1 year later...

Hi there,

 

I've tried to install the Rewards/Point System from this contribution. I have been getting errors. When a customer purchases an item, when they click confirm order this happens:

 

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and class = 'ot_total'' at line 1

 

SELECT value from orders_total where orders_id = and class = 'ot_total'

 

[TEP STOP]

 

===================================

 

And also in the Admin Panel, under Customer Points the top of the page has this error message:

 

Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /home/****/public_html/shop/admin/customer_points.php on line 490

 

Warning: reset() [function.reset]: Passed variable is not an array or object in /home/****/public_html/shop/admin/includes/classes/object_info.php on line 17

 

Warning: Variable passed to each() is not an array or object in /home/****/public_html/shop/admin/includes/classes/object_info.php on line 18

 

===================================

 

 

Once I click on Add Points for the customer the top of the admin panel has this message:

 

Warning: reset() [function.reset]: Passed variable is not an array or object in /home/****/public_html/shop/admin/includes/classes/object_info.php on line 17

 

Warning: Variable passed to each() is not an array or object in /home/****/public_html/shop/admin/includes/classes/object_info.php on line 18

 

===================================

 

If I actually try to add points to a customer, this message pops up and takes over the page:

 

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

 

select count(*) c from customer_points where customer_id =

 

[TEP STOP]

 

==================================

 

Last but not least, inside the customer's Account page, it does not even show their points and menus for the items added in includes/languages/english/account.php

 

I have tried 4-5 times, checking back and forth very slowly what is wrong. I can't find any! (well it's 10am now and I've been working all night)

 

Please some one help me if they can? Thanks very much, it would be greatly appreciated.

 

www.justek.com.au

 

Best Regards,

 

Jon

Link to comment
Share on other sites

By the looks of the previous posts, I think no one is supporting this thread and the contritution. I have un-installed the contribution and gone back to how it was. I might try the other rewards/points module v1, seems to have a lot of updates.

 

Good luck guys,

 

Best Regards,

 

Jon

Link to comment
Share on other sites

  • 8 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...