Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Wishlist 3.0 Support Thread


dblake

Recommended Posts

I have been working this when I can and I finally have something to put up for testers and for additions to be added. I have re-wrote the code so this is not an update for 2.4. You will need to uninstall the older version and install this one.

 

Features:

 

1. Optimized queries down to 1-2 per product depending on attributes or not.

2. Attributes now work correctly, you can add the same product with different attributes and it will show up correctly on your wishlist.

3. If a user is not logged in and they press "Add to Wishlist" then the product id is stored throughout there logging or creating an account. Once there done it will add to there wishlist.

4. Added in the capability to redirect back to the products page or stay on the wishlist page when a user pushes the add to wishlist button. Setting done in admin.

5. Combined the email functions into the main wishlist page. Added in mulitple emails the user can send to. The number is editable through the admin settings.

6. Added a public_wishlist view instead of emailing products through email, it just emails them there unique link. The public wishlist will only allow the user to view and add to cart from that list. They will not be able to delete. For security measures.

7. When a user adds an item from there wishlist, it displays "Item in Cart" instead of removing it from the wishlist. Once a user checks out, it will check to see if they are buying anything from there wishlist and at that point remove it. I did this just in case someone added a product to their cart and for some reason didnt check out.

8. Removed all that crap in application_top and just added about 5 lines to it to keep more of the code separate from osc.

 

 

Other updates and changes as well. I have not created a wishlist_help.php file so if someone would like to create that, then by all means. Let me know of any problems you run acrossed and let me know of anything that needs to be added. This is not final so don replace your exisiting one until we work out any kinks.

 

Download here: http://www.oscommerce.com/community/contributions,1682/

 

-Dennis

Link to comment
Share on other sites

Nice rewrite.

 

The wishlist.php was breaking my layout, and by putting the <form> tags inside of the <table> tags, I fixed this. I also added a missing </td> and updated the install.txt file and posted it as a full package.

 

Changes:

 

In wishlist.php:

 

<!-- body_text //-->
         <td width="100%" valign="top">
       <?php echo tep_draw_form('wishlist_form', tep_href_link(FILENAME_WISHLIST)); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">
        <tr>
            <td>
[CODE]

changes to

[CODE]
<!-- body_text //-->
       <table border="0" width="100%" cellspacing="0" cellpadding="0">
       <?php echo tep_draw_form('wishlist_form', tep_href_link(FILENAME_WISHLIST)); 
         <tr>
           <td>
?>

 

This:

        </table></form>
<?php

/*******************************************************************
*********** CODE TO SPECIFY HOW MANY EMAILS TO DISPLAY *************
*******************************************************************/

 

changed to this:

 

        </form>
       </table>
<?php

/*******************************************************************
*********** CODE TO SPECIFY HOW MANY EMAILS TO DISPLAY *************
*******************************************************************/

 

 

 

and I added an extra </td> ABOVE these lines:

 

<td valign="top" class="productListing-data"><?php echo $products_price; ?></td>
<td valign="top" class="productListing-data" align="center"><?php echo tep_draw_checkbox_field('add_wishprod[]',$wishlist['products_id']); ?></td>

 

so it looked like this:

 

</td>
<td valign="top" class="productListing-data"><?php echo $products_price; ?></td>
<td valign="top" class="productListing-data" align="center"><?php echo tep_draw_checkbox_field('add_wishprod[]',$wishlist['products_id']); ?></td>

 

 

Your mileage may vary.

Edited by linuxdave

LinuxDave

Link to comment
Share on other sites

This change:

 

       </form>
      </table>
<?php

/*******************************************************************
*********** CODE TO SPECIFY HOW MANY EMAILS TO DISPLAY *************
*******************************************************************/

 

is not applicable. My mistake.

LinuxDave

Link to comment
Share on other sites

Installed this version, however, the "Add to wish list" button is not showing up - it's supposed to be displayed between reviews and add to cart, but its no where to be seen.

 

Also, the wishlist.php page seems to show column_right.php on the left hand side, underneath column_left.php

 

I'm not sure if the above is an error in your coding, or just the other contributions i have installed on my website- friendly url link and on the fly thumbnailer, but i fail to see how they can conflict with this contribution.

 

Any help would be welcome

Link to comment
Share on other sites

I'm pulling my hair out over this!

 

I thought the problem lied in the product_info.php file, but any change doesn't make a single difference.

 

I've read the whole of the wishlist 2.0 support thread and that has not helped me at all.

 

My question is, how do i make the "add to wishlist" button appear on the product page?

Link to comment
Share on other sites

Part of Step 5

 

Find

               <td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td>

Add directly below

               <td align="center"><?php echo tep_image_submit('button_wishlist.gif', 'Add to Wishlist', 'name="wishlist" value="wishlist"'); ?></td>

 

Thats weird that the form needs to be inside the table, cuz "proper" html says it needs to be before the table. Maybe it was just that </td> I forgot? And did I forget that in the public_wishlist.php too?

 

Thanks,

Dennis

Link to comment
Share on other sites

The gurux is right. It's seem to be breaking out the layout. I just install the latest version and in wishlist.php the right column is now under the left column and it's out of format. Any way to correct it. My Osc is fresh out of box without any contributions. It's for testing only.

 

Thanks

Link to comment
Share on other sites

I'm really stuck now

 

Whats the point in changing the product_info.php file? Because Regardless of what i do to it, it still doesn't make any differnce. Just deleted the product_info.php file and it doesn't make any difference to the appearance of the review and add to cart buttons on product descriptions.

 

i'm stumped here :o

Link to comment
Share on other sites

I dont understand what your trying to say thegurux. You have to put in the code for the button to show up, which is in step 5. Then you have to upload the button which is before you make any file changes.

 

I will look into why the format is breaking.

 

Dennis

Link to comment
Share on other sites

OK found the problem

 

Find this line

   	 <td valign="top" class="productListing-data"><?php echo $products_price; ?></td>

 

Add this above so it looks like this now

 

   	 </td>
  	 <td valign="top" class="productListing-data"><?php echo $products_price; ?></td>

 

-Dennis

 

Updated to 3.02 Beta

Edited by dblake
Link to comment
Share on other sites

dblake, i've already done all of that.

 

I really hate to be a pain, but i'm certain there is something i haven't done. Have a look at a page on my un-live website : http://exosports.net/Catalog/Manchester-Un...ize-5-Football/

 

As you can see, there is no add to wishlist button.

 

This is my product_info.php file

 

<?php
/*
 $Id: product_info.php,v 1.97 2003/07/01 14:34:54 hpdl Exp $

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

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 require('includes/application_top.php');

 require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_PRODUCT_INFO);

 $product_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
 $product_check = tep_db_fetch_array($product_check_query);
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<base href="<?php echo (($request_type == 'file:///C|/Documents%20and%20Settings/Martint/My%20Documents/oscommerce-2.2ms2/catalog/SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="file:///C|/Documents%20and%20Settings/Martint/My%20Documents/oscommerce-2.2ms2/catalog/stylesheet.css">
<script language="javascript"><!--
function popupWindow(url) {
 window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,res
izable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,le
ft=150')
}
//--></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="3" cellpadding="3">
 <tr>
   <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
   </table></td>
<!-- body_text //-->
   <td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=add_product')); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">
<?php
 if ($product_check['total'] < 1) {
?>
     <tr>
       <td><?php new infoBox(array(array('text' => TEXT_PRODUCT_NOT_FOUND))); ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></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 align="right"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
<?php
 } else {
   $product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
   $product_info = tep_db_fetch_array($product_info_query);

   tep_db_query("update " . TABLE_PRODUCTS_DESCRIPTION . " set products_viewed = products_viewed+1 where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and language_id = '" . (int)$languages_id . "'");

   if ($new_price = tep_get_products_special_price($product_info['products_id'])) {
     $products_price = '<s>' . $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) . '</s> <span class="productSpecialPrice">' . $currencies->display_price($new_price, tep_get_tax_rate($product_info['products_tax_class_id'])) . '</span>';
   } else {
     $products_price = $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id']));
   }

   if (tep_not_null($product_info['products_model'])) {
     $products_name = $product_info['products_name'] . '<br><span class="smallText">[' . $product_info['products_model'] . ']</span>';
   } else {
     $products_name = $product_info['products_name'];
   }

//DISPLAY PRODUCT WAS ADDED TO WISHLIST IF WISHLIST REDIRECT IS ENABLED
if(tep_session_is_registered('wishlist_id')) {

?>
  <tr>
 <td class="messageStackSuccess"><?php echo PRODUCT_ADDED_TO_WISHLIST; ?></td>
  </tr>

<?php
 tep_session_unregister('wishlist_id');
}
?>
     <tr>
       <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
         <tr>
           <td class="pageHeading" valign="top"><?php echo $products_name; ?></td>
           <td class="pageHeading" align="right" valign="top"><?php echo $products_price; ?></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="main">
<?php
   if (tep_not_null($product_info['products_image'])) {
?>
         <table border="0" cellspacing="0" cellpadding="2" align="right">
           <tr>
             <td align="center" class="smallText">
<script language="javascript"><!--
document.write('<?php echo '<a href="javascript:popupWindow(\\\'' . tep_href_link(FILENAME_POPUP_IMAGE, 'pID=' . $product_info['products_id']) . '\\\')">' . tep_image(DIR_WS_IMAGES . $product_info['products_image'], addslashes($product_info['products_name']), SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>');
//--></script>
<noscript>
<?php echo '<a href="' . tep_href_link(DIR_WS_IMAGES . $product_info['products_image']) . '" target="_blank">' . tep_image(DIR_WS_IMAGES . $product_info['products_image'], $product_info['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>
</noscript>
             </td>
           </tr>
         </table>
<?php
   }
?>
         <p><?php echo stripslashes($product_info['products_description']); ?></p>
<?php
   $products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "'");
   $products_attributes = tep_db_fetch_array($products_attributes_query);
   if ($products_attributes['total'] > 0) {
?>
         <table border="0" cellspacing="0" cellpadding="2">
           <tr>
             <td class="main" colspan="2"><?php echo TEXT_PRODUCT_OPTIONS; ?></td>
           </tr>
<?php
     $products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "' order by popt.products_options_name");
     while ($products_options_name = tep_db_fetch_array($products_options_name_query)) {
       $products_options_array = array();
       $products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov where pa.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pa.options_id = '" . (int)$products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)$languages_id . "'");
       while ($products_options = tep_db_fetch_array($products_options_query)) {
         $products_options_array[] = array('id' => $products_options['products_options_values_id'], 'text' => $products_options['products_options_values_name']);
         if ($products_options['options_values_price'] != '0') {
           $products_options_array[sizeof($products_options_array)-1]['text'] .= ' (' . $products_options['price_prefix'] . $currencies->display_price($products_options['options_values_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) .') ';
         }
       }

       if (isset($cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']])) {
         $selected_attribute = $cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']];
       } else {
         $selected_attribute = false;
       }
?>
           <tr>
             <td class="main"><?php echo $products_options_name['products_options_name'] . ':'; ?></td>
             <td class="main"><?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute); ?></td>
           </tr>
<?php
     }
?>
         </table>
<?php
   }
?>
       </td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
   $reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
   $reviews = tep_db_fetch_array($reviews_query);
   if ($reviews['count'] > 0) {
?>
     <tr>
       <td class="main"><?php echo TEXT_CURRENT_REVIEWS . ' ' . $reviews['count']; ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
   }

   if (tep_not_null($product_info['products_url'])) {
?>
     <tr>
       <td class="main"><?php echo sprintf(TEXT_MORE_INFORMATION, tep_href_link(FILENAME_REDIRECT, 'action=url&goto=' . urlencode($product_info['products_url']), 'NONSSL', true, false)); ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
   }

   if ($product_info['products_date_available'] > date('Y-m-d H:i:s')) {
?>
     <tr>
       <td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_AVAILABLE, tep_date_long($product_info['products_date_available'])); ?></td>
     </tr>
<?php
   } else {
?>
     <tr>
       <td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_ADDED, tep_date_long($product_info['products_date_added'])); ?></td>
     </tr>
<?php
   }
?>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></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 class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td>
   <td align="center"><?php echo tep_image_submit('button_wishlist.gif', 'Add to Wishlist', 'name="wishlist" value="wishlist"'); ?></td>
               <td class="main" align="right"><?php echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td>
<?php
   if ((USE_CACHE == 'true') && empty($SID)) {
     echo tep_cache_also_purchased(3600);
   } else {
     include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
   }
 }
?>
       </td>
     </tr>
   </table></form></td>
<!-- body_text_eof //-->
   <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- right_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!-- right_navigation_eof //-->
   </table></td>
 </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

Link to comment
Share on other sites

Or you didnt upload your product_info.php file correctly.  Cause the code isnt showing up on your pages, thats why I said cache.  Let me know.

 

-Dennis

 

Hi Dennis, there was nothing in the cache, although i chmod 777'd to make sure it was working. There file was uploaded correctly, as it was uploaded same method as all my other php files.

 

Heres a zip file of my product_info.php file if you could take a look at for me.

 

http://exosports.net/product_info.zip

 

The product_info.php file does look messed up when viewed via an internet browser, however, it happens as soon as i add:

 

//DISPLAY PRODUCT WAS ADDED TO WISHLIST IF WISHLIST REDIRECT IS ENABLED
if(tep_session_is_registered('wishlist_id')) {

?>
  <tr>
 <td class="messageStackSuccess"><?php echo PRODUCT_ADDED_TO_WISHLIST; ?></td>
  </tr>

<?php
 tep_session_unregister('wishlist_id');
}

Link to comment
Share on other sites

/******************************/

/********** UPDATE 3.1 **********/

/******************************/

 

 

Added functionality for a guest wishlist. Modeled after the shopping cart. Did away with the wishlist functions and turned it into a class.

 

Guests now have the ability to store things in a wishlist. They may also email them the same as if they were registered. Differences are:

 

1. Guests have to fill out there name and email.

2. Guests products on their wishlist are emailed where if there registered the email sends out the public_wishlist.php instead. The email sends the products like this:

$product_name ($product_attribute)

$product_link

 

3. Once the Guests session is terminated, so is there guest wishlist.

4. If a guest starts a wishlist and then signups, the wishlist is converted to the database and stored like there cart.

5. If a customer comes to your site and adds products to there wishlist and then logins, the items are merged with there existing products in there wishlist.

6. Upon checkout if the customer is buying the product, the product is removed from their wishlist.

 

I still need the wishlist_help.php file.

 

This is still beta so I need testers to get this finalized.

Download Here: http://www.oscommerce.com/community/contributions,1682

 

I was going to put up a test link, but I prefer people to install this themselves so I can fix different senarios with people.

 

There is no upgrade instructions from 3.0 so let me know if thats needed. I didnt think alot of people installed it.

 

-Dennis

Edited by dblake
Link to comment
Share on other sites

Dennis,

 

Just finished installing and testing the wishlist 3.1; very, very nice.

 

Other than the older code still in some of the product_info.php, it worked the first time. Of course, because of the upgrade, some layout needs to be cleaned up but for the most part; v.3.1 worked the very first time. Outstanding!

 

I'll even point out that when emailing to a friend it even adds the url to that product (very nice as the older one did not do this). It even fixed the default "tell a friend" bug that once you are logged in and you "tell a friend", the old version took you straight to the wish list. Not good. Version 3.1 fixed this as well.

 

The only thing I would suggest is to remove the ?10? email friends and just make it one as this could lead to email spamming.

 

For those of you, who want to see this in action before installing it onto your shopping cart, go to http://www.elegantunderwear.com/company/teststore/. Please remember that this is a test store; please don?t make any purchases :).

 

If you break it, great. Help with this great mod by posting the breakage in this topic.

 

Great job, Dennis.

Link to comment
Share on other sites

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...