Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution] SEO-G


Guest

Recommended Posts

You can change the linkage column in G-Types. Set it for products, categories, manufacturers to the same value (default 1). This will force SEO-G to concatenate the parameters for generated links.

Thanks! My problem was that I was changing the sort order instead of the linkage. Since the default setting and your recommendation in the readme.txt are for the product only, I am confused about changing it though. It is my understanding that, as long as they are relevant, words in the URL are given extra weight by search engines. I know it is beyond the scope of this forum, but can you point me in the right direction so I can understand your reason for this recommendation?

Link to comment
Share on other sites

  • Replies 1.1k
  • Created
  • Last Reply

Top Posters In This Topic

Mark, SEO-G is back active and SEF is again now off. I didnt want my site just sitting there with half of the links not working.

 

Thanks Again

Keith

ok this is the error I see from the html when I click a category

 

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">

<html dir="LTR" lang="en">

<head>

 

 

 

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<title><br />

<b>Fatal error</b>: Call to a member function on a non-object in <b>/var/www/vhosts/pdas4u.co.uk/httpdocs/shop/index.php</b> on line <b>70</b><br />

So whats on line 70 of the index.php?

Link to comment
Share on other sites

Thanks! My problem was that I was changing the sort order instead of the linkage. Since the default setting and your recommendation in the readme.txt are for the product only, I am confused about changing it though. It is my understanding that, as long as they are relevant, words in the URL are given extra weight by search engines. I know it is beyond the scope of this forum, but can you point me in the right direction so I can understand your reason for this recommendation?

Well it can be debated. But basically, on the one hand you want shorter links but on the other hand you want the primary keywords to go with the link. So this depends how the categories are structured.

 

If you had for example:

 

Category: DVD-Movies

Product underneath: The Matrix DVD Movie

 

Now you have the movie, DVD word both in categories and products so it creates a long link which is not necessary. If you had:

Category: DVD

Product underneath: The Matrix

in that case concatenating the category and product strings might been more relevant trying to sell the particular DVD as the plain matrix could be assumed to be a part of math formula.

 

So with SEO-G you have the option to choose which approach suits you best. Another issue is if you want to link products to multiple categories and have them being visible then you need the same linkage value to differentiate.

Edited by enigma1
Link to comment
Share on other sites

ok this is the error I see from the html when I click a category

So whats on line 70 of the index.php?

 

 

This is the top section of index.php, line 70 is he breadcrumb tags?

 

 

 

<?php

/*

$Id: index.php,v 1.1 2003/06/11 17:37:59 hpdl Exp $

 

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

 

Copyright © 2003 osCommerce

 

Released under the GNU General Public License

*/

 

require('includes/application_top.php');

 

// the following cPath references come from application_top.php

$category_depth = 'top';

if (isset($cPath) && tep_not_null($cPath)) {

$categories_products_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$current_category_id . "'");

$cateqories_products = tep_db_fetch_array($categories_products_query);

if ($cateqories_products['total'] > 0) {

$category_depth = 'products'; // display products

} else {

$category_parent_query = tep_db_query("select count(*) as total from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$current_category_id . "'");

$category_parent = tep_db_fetch_array($category_parent_query);

if ($category_parent['total'] > 0) {

$category_depth = 'nested'; // navigate through the categories

} else {

$category_depth = 'products'; // category has no products, but display the 'no products' message

}

}

}

if (isset($_GET['cPath'])) {

$category_name_query = tep_db_query("select cd.categories_name from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . (int)$current_category_id . "' and cd.categories_id = '" . (int)$current_category_id . "' and cd.language_id = '" . (int)$languages_id . "'");

$category_name = tep_db_fetch_array($category_name_query);

define('HEADING_TITLE_NEW', $category_name['categories_name']);

}

if (isset($HTTP_GET_VARS['manufacturers_id'])) {

$manufacturers_name_query = tep_db_query("select m.manufacturers_name from " . TABLE_MANUFACTURERS . " m where m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");

$manufacturers_name = tep_db_fetch_array($manufacturers_name_query);

define('HEADING_TITLE_NEW', $manufacturers_name['manufacturers_name']);

}

 

 

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

?>

<!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; ?>">

<?php if (isset($HTTP_GET_VARS['manufacturers_id'])) { ?>

<title><?php echo $manufacturers_name['manufacturers_name']; ?></title>

<meta name="description" content="<?php echo $manufacturers_name['manufacturers_name']; ?>">

<meta name="keywords" content="<?php echo $manufacturers_name['manufacturers_name']; ?>">

<?php

}

if ((basename($PHP_SELF) == FILENAME_DEFAULT) and (!isset($_GET['cPath']))) {

if ((basename($PHP_SELF) == FILENAME_DEFAULT) and (!isset($HTTP_GET_VARS['manufacturers_id']))) {

?>

<title><?php echo INDEX_META_TITLE; ?></title>

<meta name="description" content="<?php echo INDEX_META_DESCRIPTION; ?>">

<meta name="keywords" content="<?php echo INDEX_META_KEYWORDS; ?>">

<?php

}

}

if (isset($_GET['cPath'])) {

?>

<title><?php echo (strlen($categories['categories_name']) > 1) || (strlen($manufacturers['manufacturers_name']) > 1) ? $breadcrumb_tags->trail_tags(' ') . ' - ' . TITLE : TITLE; ?></title>

<meta name="description" content="<?php echo strip_tags($breadcrumb_tags->trail_tags(' ')); ?>">

<meta name="keywords" content="<?php echo strip_tags($breadcrumb_tags->trail_tags(', ')); ?>">

 

<?php

}

?>

<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">

<link rel="stylesheet" type="text/css" href="stylesheet.css">

 

 

 

 

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

<?php

 

 

 

 

 

 

Thanks

Keith

Link to comment
Share on other sites

Okay I am confused, i installed this on a fresh install of osC, I copied all the files and changed the .htaccess file, but when I go to the Admin side of my site, I do not see the options for the SEO-G what could I have missed?

Powered By osC 2.2RC2a STS 4.5.8 - HTC 2.6.3 - FP 1.5.9 - BCH 1.0.0

Link to comment
Share on other sites

Ok I installed this and here is the error I am getting.

 

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /home/.../.../osc/root.php on line 136

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/.../.../osc/root.php:136) in /home/.../.../osc/includes/functions/sessions.php on line 98

 

Thanks for any help you can give.

Link to comment
Share on other sites

Okay I am confused, i installed this on a fresh install of osC, I copied all the files and changed the .htaccess file, but when I go to the Admin side of my site, I do not see the options for the SEO-G what could I have missed?

 

 

Did you do all the admin files? When installed the SEO-G is placed at the bottom left of the admin screen (below even tools)

 

Keith

Edited by boom71
Link to comment
Share on other sites

This is the top section of index.php, line 70 is he breadcrumb tags?

so this is not part of the stock osc. There is an object $breadcrumb not breadcrumb_tags, maybe a different contribution? Did you blindly overrided the application_top.php of the SEO-G archive? You need to do manual integration.

Link to comment
Share on other sites

so this is not part of the stock osc. There is an object $breadcrumb not breadcrumb_tags, maybe a different contribution? Did you blindly overrided the application_top.php of the SEO-G archive? You need to do manual integration.

 

 

No I manually intergrated it all, the above maybe one of the header tags..

 

Keith

Link to comment
Share on other sites

Ok I installed this and here is the error I am getting.

 

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /home/.../.../osc/root.php on line 136

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/.../.../osc/root.php:136) in /home/.../.../osc/includes/functions/sessions.php on line 98

 

Thanks for any help you can give.

post your entire .htaccess and root.php files.

Link to comment
Share on other sites

No I manually intergrated it all, the above maybe one of the header tags..

 

Keith

yea maybe, and that should been defined in application_top.php so why is not there?

That's not SEO-G related. Ask the equivalent thread and check that contribution's install instructions

Link to comment
Share on other sites

post your entire .htaccess and root.php files.

 

 

# $Id: .htaccess,v 1.3 2003/06/12 10:53:20 hpdl Exp $
#
# This is used with Apache WebServers
#
# For this to work, you must include the parameter 'Options' to
# the AllowOverride configuration
#
# Example:
#
# <Directory "/usr/local/apache/htdocs">
#   AllowOverride Options
# </Directory>
#
# 'All' with also work. (This configuration is in the
# apache/conf/httpd.conf file)

# The following makes adjustments to the SSL protocol for Internet
# Explorer browsers

<IfModule mod_setenvif.c>
 <IfDefine SSL>
SetEnvIf User-Agent ".*MSIE.*" \
		 nokeepalive ssl-unclean-shutdown \
		 downgrade-1.0 force-response-1.0
 </IfDefine>
</IfModule>

# If Search Engine Friendly URLs do not work, try enabling the
# following Apache configuration parameter
#
# AcceptPathInfo On

# Fix certain PHP values
# (commented out by default to prevent errors occuring on certain
# servers)
#
#<IfModule mod_php4.c>
#  php_value session.use_trans_sid 0
#  php_value register_globals 1
#</IfModule>

#-MS- SEO-G Added
Options +FollowSymLinks
RewriteEngine On
# Next line must be changed to match your osCommerce folder - the relative path
RewriteBase /
RewriteRule ^(.*).html$ root.php?$1.html&%{QUERY_STRING}
#-MS- SEO-G Added EOM

 

<?php
/*
//----------------------------------------------------------------------------
// Copyright (c) 2006-2007 Asymmetric Software - Innovation & Excellence
// Author: Mark Samios
// http://www.asymmetrics.com
// SEO-G Root page
// Main handler script
// Includes part of the includes/application_top.php from osCommerce to
// initialize the database.
//----------------------------------------------------------------------------
// Script is intended to be used with:
// osCommerce, Open Source E-Commerce Solutions
// http://www.oscommerce.com
// Copyright (c) 2003 osCommerce
//----------------------------------------------------------------------------
// Released under the GNU General Public License
//----------------------------------------------------------------------------
// MAKE SURE THE FOLLOWING SECTION IS COPIED DIRECTLY FROM YOUR OWN 
// catalog\includes\application_top.php and then set the $g_relpath, $g_server
// variables in this file such that:
//----------------------------------------------------------------------------
 if ($request_type == 'NONSSL') {
define('DIR_WS_CATALOG', DIR_WS_HTTP_CATALOG);
$g_relpath = HTTP_SERVER . DIR_WS_CATALOG;
$g_server = HTTP_SERVER;
 } else {
define('DIR_WS_CATALOG', DIR_WS_HTTPS_CATALOG);
$g_relpath = HTTPS_SERVER . DIR_WS_CATALOG;
$g_server = HTTPS_SERVER;
 }
//----------------------------------------------------------------------------
// Also note the $request_type has to be determined accurately between
// SSL and NON-SSL pages.
// See also documentation for details for this line:
//  $request_type = (getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';
//----------------------------------------------------------------------------
*/
//----------------------------------------------------------------------------
//-MS- Beginning of application_top.php section
//----------------------------------------------------------------------------
// start the timer for the page parse time log
 define('PAGE_PARSE_START_TIME', microtime());

// set the level of error reporting
 error_reporting(E_ALL & ~E_NOTICE);

// check if register_globals is enabled.
// since this is a temporary measure this message is hardcoded. The requirement will be removed before 2.2 is finalized.
// >>> BEGIN REGISTER_GLOBALS
//  if (function_exists('ini_get')) {
//	ini_get('register_globals') or exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory.');
//  }
// <<< END REGISTER_GLOBALS

// Set the local configuration parameters - mainly for developers
 if (file_exists('includes/local/configure.php')) include('includes/local/configure.php');

// include server parameters
 require('includes/configure.php');

 if (strlen(DB_SERVER) < 1) {
if (is_dir('install')) {
  header('Location: install/index.php');
}
 }

// define the project version
 define('PROJECT_VERSION', 'osCommerce 2.2-MS2');

// set the type of request (secure or not)
 $request_type = (getenv('HTTPS') == 'on') ? 'SSL' : 'NONSSL';

// set php_self in the local scope
 if (!isset($PHP_SELF)) $PHP_SELF = $HTTP_SERVER_VARS['PHP_SELF'];

 if ($request_type == 'NONSSL') {
define('DIR_WS_CATALOG', DIR_WS_HTTP_CATALOG);
$g_relpath = HTTP_SERVER . DIR_WS_CATALOG;
$g_server = HTTP_SERVER;
 } else {
define('DIR_WS_CATALOG', DIR_WS_HTTPS_CATALOG);
$g_relpath = HTTPS_SERVER . DIR_WS_CATALOG;
$g_server = HTTPS_SERVER;
 }

// include the list of project filenames
 require(DIR_WS_INCLUDES . 'filenames.php');

// include the list of project database tables
 require(DIR_WS_INCLUDES . 'database_tables.php');

// customization for the design layout
 define('BOX_WIDTH', 125); // how wide the boxes should be in pixels (default: 125)

// include the database functions
 require(DIR_WS_FUNCTIONS . 'database.php');

// make a connection to the database... now
 tep_db_connect() or die('Unable to connect to database server!');

// set the application parameters
 $configuration_query = tep_db_query('select configuration_key as cfgKey, configuration_value as cfgValue from ' . TABLE_CONFIGURATION);
 while ($configuration = tep_db_fetch_array($configuration_query)) {
define($configuration['cfgKey'], $configuration['cfgValue']);
 }

//----------------------------------------------------------------------------
//-MS- End of application_top.php section
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
// SEO-G Section starts here. This part is required for proper operation 
// Do not override the code below
//----------------------------------------------------------------------------
 require(DIR_WS_CLASSES . 'seo_url.php');
 $g_seo_url = new seoURL;
 $osc_url = $osc_params = $osc_parse = '';
 if( $g_seo_url->get_osc_url($g_server . $_SERVER['REQUEST_URI'], $osc_url, $osc_params, $osc_parse) ) {
$PHP_SELF = $HTTP_SERVER_VARS['PHP_SELF'] = $_SERVER['PHP_SELF'] = $_SERVER['SCRIPT_NAME'] = $osc_parse['path'];
if(basename($_SERVER['PHP_SELF']) == 'root.php' ) {
  echo '<b>SEO-G Error</b>: Invalid Self-Request - Check recorded URLs';
  exit();
}
$tmp_array = array();
for($i=0, $j=count($osc_params); $i<$j; $i++ ) {
  $array_equal = explode('=', $osc_params[$i]);
  if( is_array($array_equal) ) {
	if( isset($array_equal[1]) ) {
	  $tmp_array[$array_equal[0]] = $array_equal[1];
	} else {
	  $tmp_array[$array_equal[0]] = '';
	}
  }
}
$tmp_array = array_merge($HTTP_GET_VARS,$tmp_array);
// Synchronize global arrays.
$HTTP_GET_VARS = $_GET = $tmp_array;
unset($tmp_array);
// Synchronize query string variables
$HTTP_SERVER_VARS['QUERY_STRING'] = $_SERVER['QUERY_STRING'] = implode('&',$osc_params);
$g_script = basename($PHP_SELF);
// Signal SEO-G translation.
$g_seo_flag = true;
require(basename($PHP_SELF));
 } elseif( file_exists(basename($osc_parse['path']))) {
$PHP_SELF = $HTTP_SERVER_VARS['PHP_SELF'] = $_SERVER['PHP_SELF'] = $_SERVER['SCRIPT_NAME'] = $osc_parse['path'];
if(basename($_SERVER['PHP_SELF']) == 'root.php' ) {
  echo '<b>SEO-G Error</b>: Invalid Self-Request, passed URI Request: ' . $_SERVER['REQUEST_URI'];
  exit();
}
$g_script = basename($PHP_SELF);
$g_seo_flag = true;
require(basename($osc_parse['path']));
 } else {
// Script not found. Initiate redirection
header("HTTP/1.1 " . SEO_DEFAULT_ERROR_HEADER);
header('Location: ' . $g_relpath . SEO_DEFAULT_ERROR_REDIRECT);
//echo STORE_NAME . ' - Page was moved';
 }
 exit();
?>

Link to comment
Share on other sites

Did you do all the admin files? When installed the SEO-G is placed at the bottom left of the admin screen (below even tools)

 

Keith

 

Hi Keith, I did upload all the admin files as well as all the other files. This was a fresh install of osC and SEO-G I used the pre-modded files that came in the package as well as going through and checking them to see if all the edits was made.

 

Quite frankly I am confused as I know the contribution works as everybpdy is using it, I just can not seem to get it to show up in the admin section. :blush:

 

Would somebody who just has SEO-G installed mind sending me their files as I do not know what is going wrong.

Powered By osC 2.2RC2a STS 4.5.8 - HTC 2.6.3 - FP 1.5.9 - BCH 1.0.0

Link to comment
Share on other sites

Hi Keith, I did upload all the admin files as well as all the other files. This was a fresh install of osC and SEO-G I used the pre-modded files that came in the package as well as going through and checking them to see if all the edits was made.

 

Quite frankly I am confused as I know the contribution works as everybpdy is using it, I just can not seem to get it to show up in the admin section. :blush:

 

Would somebody who just has SEO-G installed mind sending me their files as I do not know what is going wrong.

have you done item-4 from the documentation?

Link to comment
Share on other sites

have you done item-4 from the documentation?

 

Yes, I use the pre-modded files that came with the package, and then when nothing came up double check the edits in each of the files compared to the edits in the instructions.

Powered By osC 2.2RC2a STS 4.5.8 - HTC 2.6.3 - FP 1.5.9 - BCH 1.0.0

Link to comment
Share on other sites

Yes, I use the pre-modded files that came with the package, and then when nothing came up double check the edits in each of the files compared to the edits in the instructions.

The left_column.php change is straight forward. When you add a line to include a new box it shows up with the osc admin. Check if you placed the files to the correct folders.

Link to comment
Share on other sites

Ok I installed this and here is the error I am getting.

 

 

CODE

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /home/.../.../osc/root.php on line 136

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/.../.../osc/root.php:136) in /home/.../.../osc/includes/functions/sessions.php on line 98

 

 

Thanks for any help you can give.

ok your .htaccess does not look right. You have a relative path (I cannot tell exactly but is at least /osc/ while your .htaccess shows to be at the root of the domain. Read the install instractions how to setup your configure.php and .htaccess files.

Link to comment
Share on other sites

Hi.

 

I've installed this contribution and it is working perfectly but, I have just had a callback failure from WorldPay; would this contribution affect callbacks as WorldPay does not tolerate any sort of redirection?

 

Regards,

 

 

Graham.

Link to comment
Share on other sites

Hi.

 

I've installed this contribution and it is working perfectly but, I have just had a callback failure from WorldPay; would this contribution affect callbacks as WorldPay does not tolerate any sort of redirection?

 

Regards,

Graham.

What redirections? SEO-G does not do redirections unless you set up the redirection table to do so, or a recorded url is not found. The module also has an exclusion list where you could specify files to be excluded. And a process SSL pages switch. All these are documented and should give you plenty of options to isolate the issue.

Link to comment
Share on other sites

What redirections? SEO-G does not do redirections unless you set up the redirection table to do so, or a recorded url is not found. The module also has an exclusion list where you could specify files to be excluded. And a process SSL pages switch. All these are documented and should give you plenty of options to isolate the issue.

 

Hi.

 

Thanks for that.

 

Perhaps redirection was the wrong term to use, WorldPay callback doesn't tolerate any sort of alteration of the URL.

 

I just switched off SEO G and tried the call back and it works OK so following what you have said, I added wpcallback.php to the exclusion list but it still doesn't work. The WorldPay callback appears to be being redirected to cookie_useage.php

 

Your help is much appreciated.

 

Regards,

 

 

Graham.

Link to comment
Share on other sites

I don't know if this is an error: when I go into admin/seo-g redirects, there is nothing showing except the text at the top of the page, there are no buttons etc.

 

Regards,

Graham.

it's not an error, is simply means you don't have any redirects. The redirection section is used when you have old urls where you want to signal the spiders the pages are moved. (see documentation).

 

Adding wpcallback.php to the exclusion list won't do anything really as this is the return url from the gateway. You need to add the checkout pages in the exclusion list. But that's not the root of the problem as I am using it with several gateways and the urls are converted back and forth. Could be your configure.php file not setup properly. And the default for SEO-G is not to process secure pages so if you're with an SSL it shouldn't. And if you are using an SSL, having this problem, means you did not customize the root.php file to properly identify the connection type. Failure to do that can cause this problem.

Edited by enigma1
Link to comment
Share on other sites

it's not an error, is simply means you don't have any redirects. The redirection section is used when you have old urls where you want to signal the spiders the pages are moved. (see documentation).

 

Adding wpcallback.php to the exclusion list won't do anything really as this is the return url from the gateway. You need to add the checkout pages in the exclusion list. But that's not the root of the problem as I am using it with several gateways and the urls are converted back and forth. Could be your configure.php file not setup properly. And the default for SEO-G is not to process secure pages so if you're with an SSL it shouldn't. And if you are using an SSL, having this problem, means you did not customize the root.php file to properly identify the connection type. Failure to do that can cause this problem.

 

I am using SSL and I haven't done anything in root.php so this could be the problem. What changes do I need to make in root.php?

 

Regards,

 

 

Graham.

Link to comment
Share on other sites

I am using SSL and I haven't done anything in root.php so this could be the problem. What changes do I need to make in root.php?

 

Regards,

Graham.

see post #194, there was a discussion about it as well as the documentation shows this info under item-9.

Link to comment
Share on other sites

see post #194, there was a discussion about it as well as the documentation shows this info under item-9.

 

Hi Again,

 

Followed that through, adding $request_type = ($_SERVER['SERVER_PORT'] == '443') ? 'SSL' : 'NONSSL'; to root and application_top but still the callback failed. ( my _SERVER["SERVER_PORT"] value is 443 so I'm assuming this line is correct).

 

Reconfigured the WorldPay callback url to http: as opposed to https: and the callback works.

 

Regards,

 

 

Graham.

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