Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

CONTRIBUTION Product Tabs


Cyperis

Recommended Posts

@@Bonnie

 

Technically the Reviews Tab, Ask a Question tab, and the Tell a Friend Tab are all already included in this contribution.

 

They are controlled by three configuration vales that I excluded from release. Once the configuration values are added to the database, all you would need then would be the files for the reviews/question/friend tabs (those are available through my Info Box contribution (See my signature) and then include them in the filenames.php and you are done.

 

I took all three of these out at the last minute so that people would combine both of my contributions in order to make their entire product info page look better overall. If you install JUST the tabs, then there is a pretty big empty spot to the left of the product image. I ask this: What do you do with that area?

 

If there is enough demand, I will release another version of the tabs to include the reviews and other tabs that were left out.

Link to comment
Share on other sites

@@Heatherbell

 

The Tabs is a pretty simple install. The only file you will have to worry about really is product_info.php Since you already have the info box installed you have gotten the hard part out of the way. Just download the tabs and use a program like ExamDiff to compare your product_info.php to the one included in the Tabs download. There isnt much to change since you are mainly just removing the included line for the description and adding in an include for the tabs.

Link to comment
Share on other sites

@@Heatherbell

 

For that file edit your admin/includes/filenames.php and add the following lines:

 define('FILENAME_PRODUCT_TABS_ADMIN', 'product_tabs_admin.php');
 define('FILENAME_PRODUCTS_TABS', 'products_tabs.php');

Those will add the filenames for that are used for the admin side.

 

In the admin/includes/boxes/echo_customizations.php you will have to add the array for the tabs so that they will be included in the admin configuration panel:

  array(
    'code' => FILENAME_PRODUCT_TABS_ADMIN,
    'title' => 'Product Tabs',
    'link' => tep_href_link(FILENAME_PRODUCT_TABS_ADMIN)
  )

 

However take not that on the arrays in that file. All the arrays have a comma at the end except for the LAST array, which does not have a coma at the end. Here is what my file looks like:

<?php
/*
 $Id$
 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com
 Copyright (c) 2010 osCommerce
 Released under the GNU General Public License
*/
 $cl_box_groups[] = array(
   'heading' => 'Echo Customizations',
   'apps' => array(
  array(
    'code' => FILENAME_PRODUCT_INFO_PAGE_BOX_ADMIN,
    'title' => 'Product Info Box',
    'link' => tep_href_link(FILENAME_PRODUCT_INFO_PAGE_BOX_ADMIN)
  ),
  array(
    'code' => FILENAME_PRODUCT_TABS_ADMIN,
    'title' => 'Product Tabs',
    'link' => tep_href_link(FILENAME_PRODUCT_TABS_ADMIN)
  )
   )
 );
?>

 

Hope this helps.

Link to comment
Share on other sites

Thank you but can you detail the changes needed for product_info, I have product info box running OK but every time I've tried to change product_info, the page is displaying wrong. I think it's because the description isn't showing in the tabs. i really need help to get this running.

Link to comment
Share on other sites

@@Heatherbell

 

There are only three edits to the product_info.php as per the installation file in the product tabs.

 

Find:

});
</script>
<!-- END Scripts for Popups -->

 </div>

Add AFTER:

<?php include_once (DIR_WS_MODULES . FILENAME_PRODUCTS_TABS); ?>

 

Find:

   $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 . "'");

Recplace With:

// Start Product Tabs
   $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, pd.products_tab_1, pd.products_tab_2, pd.products_tab_3, pd.products_tab_4, pd.products_tab_5, pd.products_tab_6 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 . "'");
// End Product tabs

 

Find:

<?php echo stripslashes($product_info['products_description']); ?>

Replace With:

<?php //echo stripslashes($product_info['products_description']); ?>

Link to comment
Share on other sites

Thank you but I've done this and double checked and description is still not showing in tabs. I've got Tabs working by itself and Product Info Box working by itself but not both together. This is product info file in case you can find where I have gone wrong

 

<?php

/*

$Id$

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright © 2010 osCommerce

Released under the GNU General Public License

*/

require('includes/application_top.php');

 

if (!isset($HTTP_GET_VARS['products_id'])) {

tep_redirect(tep_href_link(FILENAME_DEFAULT));

}

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);

require(DIR_WS_INCLUDES . 'template_top.php');

 

if ($product_check['total'] < 1) {

?>

<!-- // START Product Info Page Box -->

<script type="text/javascript" src="includes/general.js"></script>

<script type="text/javascript"><!--

function popupWindow(url) {

window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=600,height=280,screenX=150,screenY=150,top=150,left=150')

}

//--></script>

<!-- // END Product Info Page Box -->

<div class="contentContainer">

<div class="contentText">

<?php echo TEXT_PRODUCT_NOT_FOUND; ?>

</div>

<div style="float: right;">

<?php echo tep_draw_button(IMAGE_BUTTON_CONTINUE, 'triangle-1-e', tep_href_link(FILENAME_DEFAULT)); ?>

</div>

</div>

<?php

} else {

// Start Product Tabs

$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, pd.products_tab_1, pd.products_tab_2, pd.products_tab_3, pd.products_tab_4, pd.products_tab_5, pd.products_tab_6 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 . "'");

// End Product tabs

$product_info = tep_db_fetch_array($product_info_query);

 

 

$manufacturer_query = tep_db_query("select m.manufacturers_id, m.manufacturers_name, m.manufacturers_image, mi.manufacturers_url from " . TABLE_MANUFACTURERS . " m left join " . TABLE_MANUFACTURERS_INFO . " mi on (m.manufacturers_id = mi.manufacturers_id and mi.languages_id = '" . (int)$languages_id . "'), " . TABLE_PRODUCTS . " p where p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and p.manufacturers_id = m.manufacturers_id");

if (tep_db_num_rows($manufacturer_query)) {

$manufacturer = tep_db_fetch_array($manufacturer_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 = '<del>' . $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) . '</del> <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'];

}

?>

<div class="contentContainer">

<div class="contentText">

<?php

if (tep_not_null($product_info['products_image'])) {

$pi_query = tep_db_query("select image, htmlcontent from " . TABLE_PRODUCTS_IMAGES . " where products_id = '" . (int)$product_info['products_id'] . "' order by sort_order");

if (tep_db_num_rows($pi_query) > 0) {

?>

<div id="piGal" style="float: right;">

<ul>

<?php

$pi_counter = 0;

while ($pi = tep_db_fetch_array($pi_query)) {

$pi_counter++;

$pi_entry = ' <li><a href="';

if (tep_not_null($pi['htmlcontent'])) {

$pi_entry .= '#piGalimg_' . $pi_counter;

} else {

$pi_entry .= tep_href_link(DIR_WS_IMAGES . $pi['image'], '', 'NONSSL', false);

}

$pi_entry .= '" target="_blank" rel="fancybox">' . tep_image(DIR_WS_IMAGES . $pi['image']) . '</a>';

if (tep_not_null($pi['htmlcontent'])) {

$pi_entry .= '<div style="display: none;"><div id="piGalimg_' . $pi_counter . '">' . $pi['htmlcontent'] . '</div></div>';

}

$pi_entry .= '</li>';

echo $pi_entry;

}

?>

</ul>

</div>

<script type="text/javascript">

$('#piGal ul').bxGallery({

maxwidth: 300,

maxheight: 200,

thumbwidth: <?php echo (($pi_counter > 1) ? '75' : '0'); ?>,

thumbcontainer: 300,

load_image: 'ext/jquery/bxGallery/spinner.gif'

});

</script>

<?php

} else {

?>

<div id="piGal" style="float: right;">

<?php echo '<a href="' . tep_href_link(DIR_WS_IMAGES . $product_info['products_image'], '', 'NONSSL', false) . '" target="_blank" rel="fancybox">' . tep_image(DIR_WS_IMAGES . $product_info['products_image'], addslashes($product_info['products_name']), null, null, 'hspace="5" vspace="5"') . '</a>'; ?>

</div>

<?php

}

?>

<script type="text/javascript">

$("#piGal a[rel^=fancybox]").fancybox({

cyclic: true

});

</script>

<?php

}

?>

<!-- // START Product Info Page Box -->

<div class="productinfobox">

<div class="ui-widget infoBoxContainer">

<div class="ui-widget-header infoBoxHeading">

<?php echo $products_name = $product_info['products_name']; ?>

</div>

<div class="ui-widget-content infoBoxContents" style='overflow:hidden;'>

<div style='width: 50%; float: left;'>

<?php

if (PRODUCT_INFO_PAGE_BOX_PRODUCT_MODEL == 'True') {

echo TEXT_MODEL . '<br />';

}

?>

 

<font size="+1"><?php echo TEXT_PRICE; ?></font><br />

<?php if (PRODUCT_INFO_PAGE_BOX_PRODUCT_STOCK == 'True') {

echo TEXT_STOCK_LEVEL . '<br />';

}

?>

<?php

if (PRODUCT_INFO_PAGE_BOX_MANUFACTURER_INFO == 'True') {

echo TEXT_MANUFACTURER . '<br /><br /><br />';

}

?>

</div>

<div style='width: 50%; float: right;'>

<?php

if (PRODUCT_INFO_PAGE_BOX_PRODUCT_MODEL == 'True') {

echo $product_info['products_model'] . '<br />';

}

?>

<font size="+1"><?php echo $products_price; ?></font><br /><br />

<?php if (PRODUCT_INFO_PAGE_BOX_PRODUCT_STOCK == 'True') {

echo tep_get_products_stock($product_info['products_id']) . '<br />';

}

?>

<?php

if (PRODUCT_INFO_PAGE_BOX_MANUFACTURER_INFO == 'True') {

echo $manufacturer['manufacturers_name'] . '<br />';

echo '<a href="' . tep_href_link(FILENAME_REDIRECT, 'action=manufacturer&manufacturers_id=' . $manufacturer['manufacturers_id']) . '" target="_blank">';

echo TEXT_HOMEPAGE;

echo '</a><br />';

echo '<a href="' . tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $manufacturer['manufacturers_id']) . '">';

echo MODULE_BOXES_MANUFACTURER_INFO_BOX_OTHER_PRODUCTS;

echo '</a><br />';

}

?>

</div>

<?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=add_product')); ?>

<!-- Attributes Start -->

<?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) {

?>

<p><strong><?php echo TEXT_PRODUCT_OPTIONS; ?></strong></p>

<p>

<?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 (is_string($HTTP_GET_VARS['products_id']) && 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;

}

?>

<div style='width: 50%; float: left;'>

<?php echo $products_options_name['products_options_name'] . ':'; ?>

</div>

 

<div style='width: 50%; float: right;'>

<?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute); ?>

</div><br />

<?php

}

?>

</p>

<?php

}

?>

<!-- Attributes End -->

<div class="buttonSet">

<span class="buttonActionProductInfoCart">

<?php

echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_draw_button(IMAGE_BUTTON_IN_CART, 'cart', null, 'primary');

?></form>

</span>

</div><br />

<div class="buttonSet">

<span class="buttonAction">

<div class="buttonSetActionLeft">

<?php

if (PRODUCT_INFO_PAGE_BOX_QUESTION_BUTTON == 'True') {

echo '<a href="' . tep_href_link(FILENAME_ASK_A_QUESTION_POPUP) . '" target="_blank" onclick="$(\'#askaquestion\').dialog(\'open\'); return false;">';

echo tep_draw_button(TEXT_ASK_A_QUESTION_POPUP, 'help');

echo '</a>';

}

?>

</div>

</span>

<div class="buttonSetActionLeft">

<?php

if (PRODUCT_INFO_PAGE_BOX_REVIEW_BUTTON == 'True') {

echo '<a href="' . tep_href_link(FILENAME_REVIEWS_POPUP) . '" target="_blank" onclick="$(\'#reviews\').dialog(\'open\'); return false;">';

echo tep_draw_button(TEXT_REVIEWS_POPUP, 'comment');

echo '</a>';

}

?>

</div>

<div align="center">

<?php

if (PRODUCT_INFO_PAGE_BOX_TELL_BUTTON == 'True') {

echo tep_draw_form('email_friend', tep_href_link(FILENAME_TELL_A_FRIEND, 'action=process&products_id=' . (int)$HTTP_GET_VARS['products_id']), 'post', '', true);

echo '<a href="' . tep_href_link(FILENAME_TELL_A_FRIEND_POPUP) . '" target="_blank" onclick="$(\'#tellafriend\').dialog(\'open\'); return false;">';

echo tep_draw_button(TEXT_TELL_A_FRIEND_POPUP, 'mail-closed');

echo '</a>';

}

?>

</div>

</div>

</div>

</div>

</div>

<?php //echo stripslashes($product_info['products_description']); ?>

<div id="reviews" title="<?php

echo 'Reviews for ';

echo tep_get_products_name($product_info['products_id']); ?>">

<?php include(FILENAME_REVIEWS_POPUP); ?>

</div></form>

<div id="tellafriend" title="<?php

echo 'Tell a Friend About ';

echo tep_get_products_name($product_info['products_id']); ?>">

<?php include(FILENAME_TELL_A_FRIEND_POPUP); ?>

</div></form>

<div id="askaquestion" title="<?php

echo 'As Us a Question About ';

echo tep_get_products_name($product_info['products_id']); ?>">

<?php include(FILENAME_ASK_A_QUESTION_POPUP); ?>

</div></form>

<script type="text/javascript">

$('#reviews').dialog({

autoOpen: false,

width: 700,

buttons: {

'Close Dialog Box': function() {

$(this).dialog('close');

}

}

});

</script>

<script type="text/javascript">

$('#tellafriend').dialog({

autoOpen: false,

width: 400,

buttons: {

'Close Dialog Box': function() {

$(this).dialog('close');

}

}

});

</script>

<script type="text/javascript">

$('#askaquestion').dialog({

autoOpen: false,

width: 500,

buttons: {

'Close Dialog Box': function() {

$(this).dialog('close');

}

}

});

</script>

<!-- END Scripts for Popups -->

 

</div>

<?php include_once (DIR_WS_MODULES . FILENAME_PRODUCTS_TABS); ?>

<?php

$reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " r, " . TABLE_REVIEWS_DESCRIPTION . " rd where r.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and r.reviews_id = rd.reviews_id and rd.languages_id = '" . (int)$languages_id . "' and reviews_status = 1");

$reviews = tep_db_fetch_array($reviews_query);

?>

 

<?php

if ((USE_CACHE == 'true') && empty($SID)) {

echo tep_cache_also_purchased(3600);

} else {

include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);

}

?>

</div>

<!--</form>-->

<?php

}

require(DIR_WS_INCLUDES . 'template_bottom.php');

require(DIR_WS_INCLUDES . 'application_bottom.php');

?>

Link to comment
Share on other sites

Thanks but error:

Warning: require(): open_basedir restriction in effect. File(../../../wamp/www/infobox/includes/application_top.php) is not within the allowed path(s): (/home/sites/vip6484896/httpd/:/home/sites/vip6484896/tmp/:/srv/www/htdocs/userscripts/:/usr/share/pear/) in /home/sites/vip6484896/httpd/htdocs/catalog/product_info.php on line 13 Warning: require(../../../wamp/www/infobox/includes/application_top.php): failed to open stream: Operation not permitted in /home/sites/vip6484896/httpd/htdocs/catalog/product_info.php on line 13 Warning: require(): open_basedir restriction in effect. File(../../../wamp/www/infobox/includes/application_top.php) is not within the allowed path(s): (/home/sites/vip6484896/httpd/:/home/sites/vip6484896/tmp/:/srv/www/htdocs/userscripts/:/usr/share/pear/) in /home/sites/vip6484896/httpd/htdocs/catalog/product_info.php on line 13 Warning: require(../../../wamp/www/infobox/includes/application_top.php): failed to open stream: Operation not permitted in /home/sites/vip6484896/httpd/htdocs/catalog/product_info.php on line 13 Fatal error: require(): Failed opening required '../../../wamp/www/infobox/includes/application_top.php' (include_path='.:/usr/share/php5:/usr/share/php5/PEAR') in /home/sites/vip6484896/httpd/htdocs/catalog/product_info.php on line 13

Link to comment
Share on other sites

@@Heatherbell

 

All I can recommend is installing the info box first like you did, then just install the tabs. Any files that need editing just use a program to compare the two and just go one edit at a time. It will be a while before I get time to release a combined contribution.

Link to comment
Share on other sites

Thanks for your add-on

I had a problem with the text messed up the linefeed , so even that data was the right line feed in database, PT forgot the linefeed, so text layout was gone .

I add some code to your :

 

includes/modules/products_tabs.php:

 

Change all "products_tab_* " :

 

echo stripslashes ($product_info['products_tab_1']);

->

echo nl2br(stripslashes ($product_info['products_tab_1']));

 

and

echo stripslashes($product_info['products_description']);

->

echo nl2br(stripslashes($product_info['products_description']));

 

Then my layout was right in every tab ..

Link to comment
Share on other sites

@@Bonnie

I took all three of these out at the last minute so that people would combine both of my contributions in order to make their entire product info page look better overall. If you install JUST the tabs, then there is a pretty big empty spot to the left of the product image. I ask this: What do you do with that area?

 

If there is enough demand, I will release another version of the tabs to include the reviews and other tabs that were left out.

 

I plan on making the product image a page-wide product banner instead. So in my case at least, your other module isn't what I need and would prefer reviews in a tab. Looking good otherwise! Nice work.

Link to comment
Share on other sites

Hello, thanks for the contribute, something went wrong on my website. A message appears when I try to open a product page and also in the admin when trying to edit product info or add new product.

The message is:

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, pd.products_tab_1, pd.products_tab_2, pd.products_tab_3, pd.products_tab_4, pd.products_tab_5, pd.products_tab_6 from products p, products_description pd where p.products_status = '1' and p.products_id = '92' and pd.products_id = p.products_id and pd.language_id = '1' [TEP STOP]

 

Do you know what can be wrong? I have checked files several times to find any mistake but everything is ok. Im using version 2.3.2, you can check message at www.inovastore.com.mx

 

Thanks for your time

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