Jump to content

mcmannehan

Members
  • Content count

    363
  • Joined

  • Last visited

  • Days Won

    4

mcmannehan last won the day on April 29 2018

mcmannehan had the most liked content!

5 Followers

About mcmannehan

  • Rank
    That's Me
  • Birthday 12/07/1960

Profile Information

  • Real Name
    Manfred Wedel
  • Gender
    Male
  • Location
    Thailand

Recent Profile Visitors

6,338 profile views
  1. mcmannehan

    Where is The Orders

    I use https://github.com/gburton/Responsive-osCommerce/archive/2341-Frozen.zip I did coded a complett new ccbill add-on. This add-on will be verified by ccbill, soon. If this happen, can PM me for to get the add-on.
  2. mcmannehan

    Upload Class File

    Changes in the Regex are wrong. For to allow only a-z A-Z 0-9 - _ . The regex must be: if (preg_match('/^[-A-Za-z0-9._]+$/i', $file['name']) == false) { $message = sprintf(ERROR_FILE_ILLEGAL_CHAR, $file['name']); if ($this->message_location == 'direct') { $messageStack->add($message, 'error'); } else { $messageStack->add_session($message, 'error'); } return false; }
  3. mcmannehan

    Where is The Orders

    This problem is the customer. He don't finish the purchased correct. Than the order is still in the basket and don't appear in the order list. I get this problem of the customers with a lot payment systems like PayPal, CCBill, Moneybroker and so on. I can fix this. Pm me if you still needs help.
  4. mcmannehan

    Upload Class File

    I wondering, why the check for illegal character dosen't exist!!! In the frozen and in the boostrap 4 version. So i recommand change complett the function parse to this: Start about at line 35 catalog/admin/includes/classes/upload.php function parse() { global $messageStack; $file = array(); if (isset($_FILES[$this->file])) { $file = array('name' => $_FILES[$this->file]['name'], 'type' => $_FILES[$this->file]['type'], 'size' => $_FILES[$this->file]['size'], 'tmp_name' => $_FILES[$this->file]['tmp_name']); } elseif (isset($_FILES[$this->file])) { $file = array('name' => $_FILES[$this->file]['name'], 'type' => $_FILES[$this->file]['type'], 'size' => $_FILES[$this->file]['size'], 'tmp_name' => $_FILES[$this->file]['tmp_name']); } if ( tep_not_null($file['tmp_name']) && ($file['tmp_name'] != 'none') && is_uploaded_file($file['tmp_name']) ) { if (sizeof($this->extensions) > 0) { if (!in_array(strtolower(substr($file['name'], strrpos($file['name'], '.')+1)), $this->extensions)) { if ($this->message_location == 'direct') { $messageStack->add(ERROR_FILETYPE_NOT_ALLOWED, 'error'); } else { $messageStack->add_session(ERROR_FILETYPE_NOT_ALLOWED, 'error'); } return false; } } //BOC by mcmannehan if (preg_match('/^([-\.\w]+)$/', $file['name']) !== true) { $message = sprintf(ERROR_FILE_ILLEGAL_CHAR, $file['name']); if ($this->message_location == 'direct') { $messageStack->add($message, 'error'); } else { $messageStack->add_session($message, 'error'); } return false; } //EOC $this->set_file($file); $this->set_filename($file['name']); $this->set_tmp_filename($file['tmp_name']); return $this->check_destination(); } else { if ($this->message_location == 'direct') { $messageStack->add(WARNING_NO_FILE_UPLOADED, 'warning'); } else { $messageStack->add_session(WARNING_NO_FILE_UPLOADED, 'warning'); } return false; } } And add to the catalog/admin/includes/languages/english.php: const ERROR_FILE_ILLEGAL_CHAR = 'Invalid character in the file name! <strong>%s</strong>. Spaces and special characters are not allowed in Internet filenames. Allowed are: a-z A-Z 0-9 - _'; "const" have some restriction but it's much more better and faster than define.
  5. mcmannehan

    value output

    The resolution from @MrPhil is very good. Clear and effective!!! @YePix Your explode isn't right. You don't need an start or an end tag. I recommand you shoul read here https://www.php.net/manual/en/function.explode.php
  6. mcmannehan

    Still some important stuff missing in the admin area

    I recomand one more changes. Only copy if attributes available: $attributes_query = tep_db_query("select products_attributes_id, options_id, options_values_id, options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = " . (int)$products_id); if (tep_db_num_rows($attributes_query) > 0) { while ($attributes = tep_db_fetch_array($attributes_query)) { tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " (products_id, options_id, options_values_id, options_values_price, price_prefix) values ('" . (int)$last_new_products_id . "', '" . (int)$attributes['options_id'] . "', '" . (int)$attributes['options_values_id'] . "', '" . tep_db_input($attributes['options_values_price']) . "', '" . tep_db_input($attributes['price_prefix']) . "')"); } }
  7. mcmannehan

    Still some important stuff missing in the admin area

    Thx typo error all the time happens 😉
  8. To copy a product to a differnt category or the same category, i still miss in every new version some important copy stuff 😞 If a product have attributes, there dosen't get copied. So here is my suggestion for to change that: start about line 340 in catalog/admin/categories.php change this: case 'copy_to_confirm': if (isset($_POST['products_id']) && isset($_POST['categories_id'])) { $products_id = tep_db_prepare_input($_POST['products_id']); $categories_id = tep_db_prepare_input($_POST['categories_id']); if ($_POST['copy_as'] == 'link') { if ($categories_id != $current_category_id) { $check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$categories_id . "'"); $check = tep_db_fetch_array($check_query); if ($check['total'] < '1') { tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$products_id . "', '" . (int)$categories_id . "')"); } } else { $messageStack->add_session(ERROR_CANNOT_LINK_TO_SAME_CATEGORY, 'error'); } } elseif ($_POST['copy_as'] == 'duplicate') { $product_query = tep_db_query("select products_quantity, products_model, products_image, products_price, products_date_available, products_weight, products_tax_class_id, manufacturers_id, products_gtin from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'"); $product = tep_db_fetch_array($product_query); tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id, products_gtin) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "', now(), " . (empty($product['products_date_available']) ? "null" : "'" . tep_db_input($product['products_date_available']) . "'") . ", '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "', '" . tep_db_input($product['products_gtin']) . "')"); $dup_products_id = tep_db_insert_id(); $description_query = tep_db_query("select language_id, products_name, products_description, products_url, products_seo_title, products_seo_description, products_seo_keywords from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$products_id . "'"); while ($description = tep_db_fetch_array($description_query)) { tep_db_query("insert into " . TABLE_PRODUCTS_DESCRIPTION . " (products_id, language_id, products_name, products_description, products_url, products_viewed, products_seo_title, products_seo_description, products_seo_keywords) values ('" . (int)$dup_products_id . "', '" . (int)$description['language_id'] . "', '" . tep_db_input($description['products_name']) . "', '" . tep_db_input($description['products_description']) . "', '" . tep_db_input($description['products_url']) . "', '0', '" . tep_db_input($description['products_seo_title']) . "', '" . tep_db_input($description['products_seo_description']) . "', '" . tep_db_input($description['products_seo_keywords']) . "')"); } $product_images_query = tep_db_query("select image, htmlcontent, sort_order from " . TABLE_PRODUCTS_IMAGES . " where products_id = '" . (int)$products_id . "'"); while ($product_images = tep_db_fetch_array($product_images_query)) { tep_db_query("insert into " . TABLE_PRODUCTS_IMAGES . " (products_id, image, htmlcontent, sort_order) values ('" . (int)$dup_products_id . "', '" . tep_db_input($product_images['image']) . "', '" . tep_db_input($product_images['htmlcontent']) . "', '" . tep_db_input($product_images['sort_order']) . "')"); } tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$dup_products_id . "', '" . (int)$categories_id . "')"); $products_id = $dup_products_id; } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } } tep_redirect(tep_href_link('categories.php', 'cPath=' . $categories_id . '&pID=' . $products_id)); break; to this: case 'copy_to_confirm': if (isset($_POST['products_id']) && isset($_POST['categories_id'])) { $products_id = tep_db_prepare_input($_POST['products_id']); $categories_id = tep_db_prepare_input($_POST['categories_id']); if ($_POST['copy_as'] == 'link') { if ($categories_id != $current_category_id) { $check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$categories_id . "'"); $check = tep_db_fetch_array($check_query); if ($check['total'] < '1') { tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$products_id . "', '" . (int)$categories_id . "')"); } } else { $messageStack->add_session(ERROR_CANNOT_LINK_TO_SAME_CATEGORY, 'error'); } } elseif ($_POST['copy_as'] == 'duplicate') { $product_query = tep_db_query("select products_quantity, products_model, products_image, products_price, products_date_available, products_weight, products_tax_class_id, manufacturers_id, products_gtin from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'"); $product = tep_db_fetch_array($product_query); tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id, products_gtin) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "', now(), " . (empty($product['products_date_available']) ? "null" : "'" . tep_db_input($product['products_date_available']) . "'") . ", '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "', '" . tep_db_input($product['products_gtin']) . "')"); $dup_products_id = tep_db_insert_id(); //BOC by McMannehan $attributes_query = tep_db_query("select products_attributes_id, options_id, options_values_id, options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = " . (int)$product_id); while ($attributes = tep_db_fetch_array($attributes_query)) { tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " (products_id, options_id, options_values_id, options_values_price, price_prefix) values ('" . (int)$dup_products_id . "', '" . (int)$attributes['options_id'] . "', '" . (int)$attributes['options_values_id'] . "', '" . tep_db_input($attributes['options_values_price']) . "', '" . tep_db_input($attributes['price_prefix']) . "')"); } //EOC by McMannehan $description_query = tep_db_query("select language_id, products_name, products_description, products_url, products_seo_title, products_seo_description, products_seo_keywords from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$products_id . "'"); while ($description = tep_db_fetch_array($description_query)) { tep_db_query("insert into " . TABLE_PRODUCTS_DESCRIPTION . " (products_id, language_id, products_name, products_description, products_url, products_viewed, products_seo_title, products_seo_description, products_seo_keywords) values ('" . (int)$dup_products_id . "', '" . (int)$description['language_id'] . "', '" . tep_db_input($description['products_name']) . "', '" . tep_db_input($description['products_description']) . "', '" . tep_db_input($description['products_url']) . "', '0', '" . tep_db_input($description['products_seo_title']) . "', '" . tep_db_input($description['products_seo_description']) . "', '" . tep_db_input($description['products_seo_keywords']) . "')"); } $product_images_query = tep_db_query("select image, htmlcontent, sort_order from " . TABLE_PRODUCTS_IMAGES . " where products_id = '" . (int)$products_id . "'"); while ($product_images = tep_db_fetch_array($product_images_query)) { tep_db_query("insert into " . TABLE_PRODUCTS_IMAGES . " (products_id, image, htmlcontent, sort_order) values ('" . (int)$dup_products_id . "', '" . tep_db_input($product_images['image']) . "', '" . tep_db_input($product_images['htmlcontent']) . "', '" . tep_db_input($product_images['sort_order']) . "')"); } tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$dup_products_id . "', '" . (int)$categories_id . "')"); $products_id = $dup_products_id; } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } } tep_redirect(tep_href_link('categories.php', 'cPath=' . $categories_id . '&pID=' . $products_id)); break; now the attributes will be copy. This changes should really be in the core code. The example code above is used from @burt Boostrap 4 version.
  9. The issue is the customer. If he don't finish the payment correct, than this happens. After he paid, than he close the webbrowser or he use the back buttons of his browser. Same problem if customer pay with PayPal. And if the basket not empty, than it's logical, that the stock dosent decrease.
  10. Kostenfreie Hilfe und Info gibts hier: https://support.google.com/webmasters/answer/7451184?hl=de
  11. Great new modern admin nice work, but i find an issue: this (line 20): $low_query = tep_db_query("select distinct p.products_id, pd.products_name, p.products_quantity from products p, products_description pd where p.products_id = pd.products_id and p.products_quantity < '" . (int)$low_amount . "' and p.products_quantity <> '0' order by p.products_quantity"); // with that and p.products_quantity <> '0' you get also the minus quantity. have to change to: $low_query = tep_db_query("select distinct p.products_id, pd.products_name, p.products_quantity from products p, products_description pd where p.products_id = pd.products_id and p.products_quantity < '" . (int)$low_amount . "' and p.products_quantity > '0' order by p.products_quantity"); // with p.products_quantity > '0' you get only the range about STOCK_REORDER_LEVEL! and this (line25): $out_query = tep_db_query("select distinct p.products_id, pd.products_name, p.products_quantity from products p, products_description pd where p.products_id = pd.products_id and p.products_quantity = '0' order by p.products_quantity"); //with p.products_quantity = '0' you don't get the minus quantity have to change to: $out_query = tep_db_query("select distinct p.products_id, pd.products_name, p.products_quantity from products p, products_description pd where p.products_id = pd.products_id and p.products_quantity <= '0' order by p.products_quantity"); // with p.products_quantity <= '0' you get the minus quantity And what's the reason to do in line 19 that: $low_amount = STOCK_REORDER_LEVEL + 1; To check STOCK_REORDER_LEVEL > 0 the resolution should be different.
  12. @burt ofcourse i still support it. to provide support and service is one of my greates rule 🙂
  13. I read it. Thank you, @burt but my fork is frozen too. I did deleted today from Github.
  14. Interessting that my fork stillis used. its frozen too. And by the way, to to this: error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT); is a bad solution. All the bad code will work with that. a good code run with the error reporting like error_reporting(E_ALL & ~E_NOTICE); and a very good code runs with: error_reporting(E_ALL); but any way after 20 years of oscommerce still no version suitable for the EU law. A lot need to change in the code. the opencart-3.0.3.1is much more better, because i read here in the forum that osC 3.0 is dead. This tells me a lot! Enjoy the frozen version of @burt here. He did a lot work to make this run with PHP7. I did try it on PHP7.3 and for PHP 7.3 it's not working well.
  15. mcmannehan

    Email queuing system

    Guest Account is one of the badest thing an Online Shop can have. This was good in the past, but now this feature for Online Shops get more and more down.
×