Beispiel #1
0
 /**
  * Update product download
  *
  * @param object $product Product
  * @return bool
  */
 public function updateDownloadProduct($product, $edit = 0)
 {
     if ((int) Tools::getValue('is_virtual_file') == 1) {
         if (isset($_FILES['virtual_product_file_uploader']) && $_FILES['virtual_product_file_uploader']['size'] > 0) {
             $virtual_product_filename = ProductDownload::getNewFilename();
             $helper = new HelperUploader('virtual_product_file_uploader');
             $files = $helper->setPostMaxSize(Tools::getOctets(ini_get('upload_max_filesize')))->setSavePath(_PS_DOWNLOAD_DIR_)->upload($_FILES['virtual_product_file_uploader'], $virtual_product_filename);
         } else {
             $virtual_product_filename = Tools::getValue('virtual_product_filename', ProductDownload::getNewFilename());
         }
         $product->setDefaultAttribute(0);
         //reset cache_default_attribute
         if (Tools::getValue('virtual_product_expiration_date') && !Validate::isDate(Tools::getValue('virtual_product_expiration_date'))) {
             if (!Tools::getValue('virtual_product_expiration_date')) {
                 $this->errors[] = Tools::displayError('The expiration-date attribute is required.');
                 return false;
             }
         }
         // Trick's
         if ($edit == 1) {
             $id_product_download = (int) ProductDownload::getIdFromIdProduct((int) $product->id);
             if (!$id_product_download) {
                 $id_product_download = (int) Tools::getValue('virtual_product_id');
             }
         } else {
             $id_product_download = Tools::getValue('virtual_product_id');
         }
         $is_shareable = Tools::getValue('virtual_product_is_shareable');
         $virtual_product_name = Tools::getValue('virtual_product_name');
         $virtual_product_nb_days = Tools::getValue('virtual_product_nb_days');
         $virtual_product_nb_downloable = Tools::getValue('virtual_product_nb_downloable');
         $virtual_product_expiration_date = Tools::getValue('virtual_product_expiration_date');
         $download = new ProductDownload((int) $id_product_download);
         $download->id_product = (int) $product->id;
         $download->display_filename = $virtual_product_name;
         $download->filename = $virtual_product_filename;
         $download->date_add = date('Y-m-d H:i:s');
         $download->date_expiration = $virtual_product_expiration_date ? $virtual_product_expiration_date . ' 23:59:59' : '';
         $download->nb_days_accessible = (int) $virtual_product_nb_days;
         $download->nb_downloadable = (int) $virtual_product_nb_downloable;
         $download->active = 1;
         $download->is_shareable = (int) $is_shareable;
         if ($download->save()) {
             return true;
         }
     } else {
         /* unactive download product if checkbox not checked */
         if ($edit == 1) {
             $id_product_download = (int) ProductDownload::getIdFromIdProduct((int) $product->id);
             if (!$id_product_download) {
                 $id_product_download = (int) Tools::getValue('virtual_product_id');
             }
         } else {
             $id_product_download = ProductDownload::getIdFromIdProduct($product->id);
         }
         if (!empty($id_product_download)) {
             $product_download = new ProductDownload((int) $id_product_download);
             $product_download->date_expiration = date('Y-m-d H:i:s', time() - 1);
             $product_download->active = 0;
             return $product_download->save();
         }
     }
     return false;
 }
 /**
  * Update product download
  *
  * @param object $product Product
  */
 public function updateDownloadProduct($product)
 {
     /* add or update a virtual product */
     if (Tools::getValue('is_virtual_good') == 'true') {
         if (!Tools::getValue('virtual_product_name')) {
             $this->_errors[] = $this->l('the field') . ' <b>' . $this->l('display filename') . '</b> ' . $this->l('is required');
             return false;
         }
         if (!Tools::getValue('virtual_product_nb_days')) {
             $this->_errors[] = $this->l('the field') . ' <b>' . $this->l('number of days') . '</b> ' . $this->l('is required');
             return false;
         }
         if (Tools::getValue('virtual_product_expiration_date') and !Validate::isDate(Tools::getValue('virtual_product_expiration_date'))) {
             $this->_errors[] = $this->l('the field') . ' <b>' . $this->l('expiration date') . '</b> ' . $this->l('is not valid');
             return false;
         }
         // The oos behavior MUST be "Deny orders" for virtual products
         if (Tools::getValue('out_of_stock') != 0) {
             $this->_errors[] = $this->l('The "when out of stock" behavior selection must be "deny order" for virtual products');
             return false;
         }
         $download = new ProductDownload(Tools::getValue('virtual_product_id'));
         $download->id_product = $product->id;
         $download->display_filename = Tools::getValue('virtual_product_name');
         $download->physically_filename = Tools::getValue('virtual_product_filename') ? Tools::getValue('virtual_product_filename') : $download->getNewFilename();
         $download->date_deposit = date('Y-m-d H:i:s');
         $download->date_expiration = Tools::getValue('virtual_product_expiration_date') ? Tools::getValue('virtual_product_expiration_date') . ' 23:59:59' : '';
         $download->nb_days_accessible = Tools::getValue('virtual_product_nb_days');
         $download->nb_downloadable = Tools::getValue('virtual_product_nb_downloable');
         $download->active = 1;
         if ($download->save()) {
             return true;
         }
     } else {
         /* unactive download product if checkbox not checked */
         if ($id_product_download = ProductDownload::getIdFromIdProduct($product->id)) {
             $productDownload = new ProductDownload($id_product_download);
             $productDownload->date_expiration = date('Y-m-d H:i:s', time() - 1);
             $productDownload->active = 0;
             return $productDownload->save();
         }
     }
     return false;
 }
    protected function productImportOne($info, $default_language_id, $id_lang, $force_ids, $regenerate, $shop_is_feature_active, $shop_ids, $match_ref, &$accessories, $validateOnly = false)
    {
        if ($force_ids && isset($info['id']) && (int) $info['id']) {
            $product = new Product((int) $info['id']);
        } elseif ($match_ref && array_key_exists('reference', $info)) {
            $datas = Db::getInstance()->getRow('
					SELECT p.`id_product`
					FROM `' . _DB_PREFIX_ . 'product` p
					' . Shop::addSqlAssociation('product', 'p') . '
					WHERE p.`reference` = "' . pSQL($info['reference']) . '"
				', false);
            if (isset($datas['id_product']) && $datas['id_product']) {
                $product = new Product((int) $datas['id_product']);
            } else {
                $product = new Product();
            }
        } elseif (array_key_exists('id', $info) && (int) $info['id'] && Product::existsInDatabase((int) $info['id'], 'product')) {
            $product = new Product((int) $info['id']);
        } else {
            $product = new Product();
        }
        $update_advanced_stock_management_value = false;
        if (isset($product->id) && $product->id && Product::existsInDatabase((int) $product->id, 'product')) {
            $product->loadStockData();
            $update_advanced_stock_management_value = true;
            $category_data = Product::getProductCategories((int) $product->id);
            if (is_array($category_data)) {
                foreach ($category_data as $tmp) {
                    if (!isset($product->category) || !$product->category || is_array($product->category)) {
                        $product->category[] = $tmp;
                    }
                }
            }
        }
        AdminImportController::setEntityDefaultValues($product);
        AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $product);
        if (!$shop_is_feature_active) {
            $product->shop = (int) Configuration::get('PS_SHOP_DEFAULT');
        } elseif (!isset($product->shop) || empty($product->shop)) {
            $product->shop = implode($this->multiple_value_separator, Shop::getContextListShopID());
        }
        if (!$shop_is_feature_active) {
            $product->id_shop_default = (int) Configuration::get('PS_SHOP_DEFAULT');
        } else {
            $product->id_shop_default = (int) Context::getContext()->shop->id;
        }
        // link product to shops
        $product->id_shop_list = array();
        foreach (explode($this->multiple_value_separator, $product->shop) as $shop) {
            if (!empty($shop) && !is_numeric($shop)) {
                $product->id_shop_list[] = Shop::getIdByName($shop);
            } elseif (!empty($shop)) {
                $product->id_shop_list[] = $shop;
            }
        }
        if ((int) $product->id_tax_rules_group != 0) {
            if (Validate::isLoadedObject(new TaxRulesGroup($product->id_tax_rules_group))) {
                $address = $this->context->shop->getAddress();
                $tax_manager = TaxManagerFactory::getManager($address, $product->id_tax_rules_group);
                $product_tax_calculator = $tax_manager->getTaxCalculator();
                $product->tax_rate = $product_tax_calculator->getTotalRate();
            } else {
                $this->addProductWarning('id_tax_rules_group', $product->id_tax_rules_group, $this->trans('Unknown tax rule group ID. You need to create a group with this ID first.', array(), 'Admin.Parameters.Notification'));
            }
        }
        if (isset($product->manufacturer) && is_numeric($product->manufacturer) && Manufacturer::manufacturerExists((int) $product->manufacturer)) {
            $product->id_manufacturer = (int) $product->manufacturer;
        } elseif (isset($product->manufacturer) && is_string($product->manufacturer) && !empty($product->manufacturer)) {
            if ($manufacturer = Manufacturer::getIdByName($product->manufacturer)) {
                $product->id_manufacturer = (int) $manufacturer;
            } else {
                $manufacturer = new Manufacturer();
                $manufacturer->name = $product->manufacturer;
                $manufacturer->active = true;
                if (($field_error = $manufacturer->validateFields(UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $manufacturer->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && !$validateOnly && $manufacturer->add()) {
                    $product->id_manufacturer = (int) $manufacturer->id;
                    $manufacturer->associateTo($product->id_shop_list);
                } else {
                    if (!$validateOnly) {
                        $this->errors[] = sprintf($this->trans('%1$s (ID: %2$s) cannot be saved', array(), 'Admin.Parameters.Notification'), $manufacturer->name, isset($manufacturer->id) && !empty($manufacturer->id) ? $manufacturer->id : 'null');
                    }
                    if ($field_error !== true || isset($lang_field_error) && $lang_field_error !== true) {
                        $this->errors[] = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
                    }
                }
            }
        }
        if (isset($product->supplier) && is_numeric($product->supplier) && Supplier::supplierExists((int) $product->supplier)) {
            $product->id_supplier = (int) $product->supplier;
        } elseif (isset($product->supplier) && is_string($product->supplier) && !empty($product->supplier)) {
            if ($supplier = Supplier::getIdByName($product->supplier)) {
                $product->id_supplier = (int) $supplier;
            } else {
                $supplier = new Supplier();
                $supplier->name = $product->supplier;
                $supplier->active = true;
                if (($field_error = $supplier->validateFields(UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $supplier->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && !$validateOnly && $supplier->add()) {
                    $product->id_supplier = (int) $supplier->id;
                    $supplier->associateTo($product->id_shop_list);
                } else {
                    if (!$validateOnly) {
                        $this->errors[] = sprintf($this->trans('%1$s (ID: %2$s) cannot be saved', array(), 'Admin.Parameters.Notification'), $supplier->name, isset($supplier->id) && !empty($supplier->id) ? $supplier->id : 'null');
                    }
                    if ($field_error !== true || isset($lang_field_error) && $lang_field_error !== true) {
                        $this->errors[] = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
                    }
                }
            }
        }
        if (isset($product->price_tex) && !isset($product->price_tin)) {
            $product->price = $product->price_tex;
        } elseif (isset($product->price_tin) && !isset($product->price_tex)) {
            $product->price = $product->price_tin;
            // If a tax is already included in price, withdraw it from price
            if ($product->tax_rate) {
                $product->price = (double) number_format($product->price / (1 + $product->tax_rate / 100), 6, '.', '');
            }
        } elseif (isset($product->price_tin) && isset($product->price_tex)) {
            $product->price = $product->price_tex;
        }
        if (!Configuration::get('PS_USE_ECOTAX')) {
            $product->ecotax = 0;
        }
        if (isset($product->category) && is_array($product->category) && count($product->category)) {
            $product->id_category = array();
            // Reset default values array
            foreach ($product->category as $value) {
                if (is_numeric($value)) {
                    if (Category::categoryExists((int) $value)) {
                        $product->id_category[] = (int) $value;
                    } else {
                        $category_to_create = new Category();
                        $category_to_create->id = (int) $value;
                        $category_to_create->name = AdminImportController::createMultiLangField($value);
                        $category_to_create->active = 1;
                        $category_to_create->id_parent = Configuration::get('PS_HOME_CATEGORY');
                        // Default parent is home for unknown category to create
                        $category_link_rewrite = Tools::link_rewrite($category_to_create->name[$default_language_id]);
                        $category_to_create->link_rewrite = AdminImportController::createMultiLangField($category_link_rewrite);
                        if (($field_error = $category_to_create->validateFields(UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $category_to_create->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && !$validateOnly && $category_to_create->add()) {
                            $product->id_category[] = (int) $category_to_create->id;
                        } else {
                            if (!$validateOnly) {
                                $this->errors[] = sprintf($this->trans('%1$s (ID: %2$s) cannot be saved', array(), 'Admin.Parameters.Notification'), $category_to_create->name[$default_language_id], isset($category_to_create->id) && !empty($category_to_create->id) ? $category_to_create->id : 'null');
                            }
                            if ($field_error !== true || isset($lang_field_error) && $lang_field_error !== true) {
                                $this->errors[] = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
                            }
                        }
                    }
                } elseif (!$validateOnly && is_string($value) && !empty($value)) {
                    $category = Category::searchByPath($default_language_id, trim($value), $this, 'productImportCreateCat');
                    if ($category['id_category']) {
                        $product->id_category[] = (int) $category['id_category'];
                    } else {
                        $this->errors[] = sprintf($this->trans('%1$s cannot be saved', array(), 'Admin.Parameters.Notification'), trim($value));
                    }
                }
            }
            $product->id_category = array_values(array_unique($product->id_category));
            // Will update default category if category column is not ignored AND if there is categories that are set in the import file row.
            if (isset($product->id_category[0])) {
                $product->id_category_default = (int) $product->id_category[0];
            } else {
                $defaultProductShop = new Shop($product->id_shop_default);
                $product->id_category_default = Category::getRootCategory(null, Validate::isLoadedObject($defaultProductShop) ? $defaultProductShop : null)->id;
            }
        }
        // Will update default category if there is none set here. Home if no category at all.
        if (!isset($product->id_category_default) || !$product->id_category_default) {
            // this if will avoid ereasing default category if category column is not present in the CSV file (or ignored)
            if (isset($product->id_category[0])) {
                $product->id_category_default = (int) $product->id_category[0];
            } else {
                $defaultProductShop = new Shop($product->id_shop_default);
                $product->id_category_default = Category::getRootCategory(null, Validate::isLoadedObject($defaultProductShop) ? $defaultProductShop : null)->id;
            }
        }
        $link_rewrite = is_array($product->link_rewrite) && isset($product->link_rewrite[$id_lang]) ? trim($product->link_rewrite[$id_lang]) : '';
        $valid_link = Validate::isLinkRewrite($link_rewrite);
        if (isset($product->link_rewrite[$id_lang]) && empty($product->link_rewrite[$id_lang]) || !$valid_link) {
            $link_rewrite = Tools::link_rewrite($product->name[$id_lang]);
            if ($link_rewrite == '') {
                $link_rewrite = 'friendly-url-autogeneration-failed';
            }
        }
        if (!$valid_link) {
            $this->informations[] = sprintf($this->trans('Rewrite link for %1$s (ID %2$s): re-written as %3$s.', array(), 'Admin.Parameters.Notification'), $product->name[$id_lang], isset($info['id']) && !empty($info['id']) ? $info['id'] : 'null', $link_rewrite);
        }
        if (!$valid_link || !($match_ref || $force_ids) || !(is_array($product->link_rewrite) && count($product->link_rewrite) && !empty($product->link_rewrite[$id_lang]))) {
            $product->link_rewrite = AdminImportController::createMultiLangField($link_rewrite);
        }
        // replace the value of separator by coma
        if ($this->multiple_value_separator != ',') {
            if (is_array($product->meta_keywords)) {
                foreach ($product->meta_keywords as &$meta_keyword) {
                    if (!empty($meta_keyword)) {
                        $meta_keyword = str_replace($this->multiple_value_separator, ',', $meta_keyword);
                    }
                }
            }
        }
        // Convert comma into dot for all floating values
        foreach (Product::$definition['fields'] as $key => $array) {
            if ($array['type'] == Product::TYPE_FLOAT) {
                $product->{$key} = str_replace(',', '.', $product->{$key});
            }
        }
        // Indexation is already 0 if it's a new product, but not if it's an update
        $product->indexed = 0;
        $productExistsInDatabase = false;
        if ($product->id && Product::existsInDatabase((int) $product->id, 'product')) {
            $productExistsInDatabase = true;
        }
        if ($match_ref && $product->reference && $product->existsRefInDatabase($product->reference) || $productExistsInDatabase) {
            $product->date_upd = date('Y-m-d H:i:s');
        }
        $res = false;
        $field_error = $product->validateFields(UNFRIENDLY_ERROR, true);
        $lang_field_error = $product->validateFieldsLang(UNFRIENDLY_ERROR, true);
        if ($field_error === true && $lang_field_error === true) {
            // check quantity
            if ($product->quantity == null) {
                $product->quantity = 0;
            }
            // If match ref is specified && ref product && ref product already in base, trying to update
            if ($match_ref && $product->reference && $product->existsRefInDatabase($product->reference)) {
                $datas = Db::getInstance()->getRow('
					SELECT product_shop.`date_add`, p.`id_product`
					FROM `' . _DB_PREFIX_ . 'product` p
					' . Shop::addSqlAssociation('product', 'p') . '
					WHERE p.`reference` = "' . pSQL($product->reference) . '"
				', false);
                $product->id = (int) $datas['id_product'];
                $product->date_add = pSQL($datas['date_add']);
                $res = $validateOnly || $product->update();
            } elseif ($productExistsInDatabase) {
                $datas = Db::getInstance()->getRow('
					SELECT product_shop.`date_add`
					FROM `' . _DB_PREFIX_ . 'product` p
					' . Shop::addSqlAssociation('product', 'p') . '
					WHERE p.`id_product` = ' . (int) $product->id, false);
                $product->date_add = pSQL($datas['date_add']);
                $res = $validateOnly || $product->update();
            }
            // If no id_product or update failed
            $product->force_id = (bool) $force_ids;
            if (!$res) {
                if (isset($product->date_add) && $product->date_add != '') {
                    $res = $validateOnly || $product->add(false);
                } else {
                    $res = $validateOnly || $product->add();
                }
            }
            if (!$validateOnly) {
                if ($product->getType() == Product::PTYPE_VIRTUAL) {
                    StockAvailable::setProductOutOfStock((int) $product->id, 1);
                } else {
                    StockAvailable::setProductOutOfStock((int) $product->id, (int) $product->out_of_stock);
                }
                if ($product_download_id = ProductDownload::getIdFromIdProduct((int) $product->id)) {
                    $product_download = new ProductDownload($product_download_id);
                    $product_download->delete(true);
                }
                if ($product->getType() == Product::PTYPE_VIRTUAL) {
                    $product_download = new ProductDownload();
                    $product_download->filename = ProductDownload::getNewFilename();
                    Tools::copy($info['file_url'], _PS_DOWNLOAD_DIR_ . $product_download->filename);
                    $product_download->id_product = (int) $product->id;
                    $product_download->nb_downloadable = (int) $info['nb_downloadable'];
                    $product_download->date_expiration = $info['date_expiration'];
                    $product_download->nb_days_accessible = (int) $info['nb_days_accessible'];
                    $product_download->display_filename = basename($info['file_url']);
                    $product_download->add();
                }
            }
        }
        $shops = array();
        $product_shop = explode($this->multiple_value_separator, $product->shop);
        foreach ($product_shop as $shop) {
            if (empty($shop)) {
                continue;
            }
            $shop = trim($shop);
            if (!empty($shop) && !is_numeric($shop)) {
                $shop = Shop::getIdByName($shop);
            }
            if (in_array($shop, $shop_ids)) {
                $shops[] = $shop;
            } else {
                $this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Shop is not valid'));
            }
        }
        if (empty($shops)) {
            $shops = Shop::getContextListShopID();
        }
        // If both failed, mysql error
        if (!$res) {
            $this->errors[] = sprintf($this->trans('%1$s (ID: %2$s) cannot be saved', array(), 'Admin.Parameters.Notification'), isset($info['name']) && !empty($info['name']) ? Tools::safeOutput($info['name']) : 'No Name', isset($info['id']) && !empty($info['id']) ? Tools::safeOutput($info['id']) : 'No ID');
            $this->errors[] = ($field_error !== true ? $field_error : '') . (isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '') . Db::getInstance()->getMsgError();
        } else {
            // Product supplier
            if (!$validateOnly && isset($product->id) && $product->id && isset($product->id_supplier) && property_exists($product, 'supplier_reference')) {
                $id_product_supplier = (int) ProductSupplier::getIdByProductAndSupplier((int) $product->id, 0, (int) $product->id_supplier);
                if ($id_product_supplier) {
                    $product_supplier = new ProductSupplier($id_product_supplier);
                } else {
                    $product_supplier = new ProductSupplier();
                }
                $product_supplier->id_product = (int) $product->id;
                $product_supplier->id_product_attribute = 0;
                $product_supplier->id_supplier = (int) $product->id_supplier;
                $product_supplier->product_supplier_price_te = $product->wholesale_price;
                $product_supplier->product_supplier_reference = $product->supplier_reference;
                $product_supplier->save();
            }
            // SpecificPrice (only the basic reduction feature is supported by the import)
            if (!$shop_is_feature_active) {
                $info['shop'] = 1;
            } elseif (!isset($info['shop']) || empty($info['shop'])) {
                $info['shop'] = implode($this->multiple_value_separator, Shop::getContextListShopID());
            }
            // Get shops for each attributes
            $info['shop'] = explode($this->multiple_value_separator, $info['shop']);
            $id_shop_list = array();
            foreach ($info['shop'] as $shop) {
                if (!empty($shop) && !is_numeric($shop)) {
                    $id_shop_list[] = (int) Shop::getIdByName($shop);
                } elseif (!empty($shop)) {
                    $id_shop_list[] = $shop;
                }
            }
            if (isset($info['reduction_price']) && $info['reduction_price'] > 0 || isset($info['reduction_percent']) && $info['reduction_percent'] > 0) {
                foreach ($id_shop_list as $id_shop) {
                    $specific_price = SpecificPrice::getSpecificPrice($product->id, $id_shop, 0, 0, 0, 1, 0, 0, 0, 0);
                    if (is_array($specific_price) && isset($specific_price['id_specific_price'])) {
                        $specific_price = new SpecificPrice((int) $specific_price['id_specific_price']);
                    } else {
                        $specific_price = new SpecificPrice();
                    }
                    $specific_price->id_product = (int) $product->id;
                    $specific_price->id_specific_price_rule = 0;
                    $specific_price->id_shop = $id_shop;
                    $specific_price->id_currency = 0;
                    $specific_price->id_country = 0;
                    $specific_price->id_group = 0;
                    $specific_price->price = -1;
                    $specific_price->id_customer = 0;
                    $specific_price->from_quantity = 1;
                    $specific_price->reduction = isset($info['reduction_price']) && $info['reduction_price'] ? $info['reduction_price'] : $info['reduction_percent'] / 100;
                    $specific_price->reduction_type = isset($info['reduction_price']) && $info['reduction_price'] ? 'amount' : 'percentage';
                    $specific_price->from = isset($info['reduction_from']) && Validate::isDate($info['reduction_from']) ? $info['reduction_from'] : '0000-00-00 00:00:00';
                    $specific_price->to = isset($info['reduction_to']) && Validate::isDate($info['reduction_to']) ? $info['reduction_to'] : '0000-00-00 00:00:00';
                    if (!$validateOnly && !$specific_price->save()) {
                        $this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Discount is invalid'));
                    }
                }
            }
            if (!$validateOnly && isset($product->tags) && !empty($product->tags)) {
                if (isset($product->id) && $product->id) {
                    $tags = Tag::getProductTags($product->id);
                    if (is_array($tags) && count($tags)) {
                        if (!empty($product->tags)) {
                            $product->tags = explode($this->multiple_value_separator, $product->tags);
                        }
                        if (is_array($product->tags) && count($product->tags)) {
                            foreach ($product->tags as $key => $tag) {
                                if (!empty($tag)) {
                                    $product->tags[$key] = trim($tag);
                                }
                            }
                            $tags[$id_lang] = $product->tags;
                            $product->tags = $tags;
                        }
                    }
                }
                // Delete tags for this id product, for no duplicating error
                Tag::deleteTagsForProduct($product->id);
                if (!is_array($product->tags) && !empty($product->tags)) {
                    $product->tags = AdminImportController::createMultiLangField($product->tags);
                    foreach ($product->tags as $key => $tags) {
                        $is_tag_added = Tag::addTags($key, $product->id, $tags, $this->multiple_value_separator);
                        if (!$is_tag_added) {
                            $this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Tags list is invalid'));
                            break;
                        }
                    }
                } else {
                    foreach ($product->tags as $key => $tags) {
                        $str = '';
                        foreach ($tags as $one_tag) {
                            $str .= $one_tag . $this->multiple_value_separator;
                        }
                        $str = rtrim($str, $this->multiple_value_separator);
                        $is_tag_added = Tag::addTags($key, $product->id, $str, $this->multiple_value_separator);
                        if (!$is_tag_added) {
                            $this->addProductWarning(Tools::safeOutput($info['name']), (int) $product->id, 'Invalid tag(s) (' . $str . ')');
                            break;
                        }
                    }
                }
            }
            //delete existing images if "delete_existing_images" is set to 1
            if (!$validateOnly && isset($product->delete_existing_images)) {
                if ((bool) $product->delete_existing_images) {
                    $product->deleteImages();
                }
            }
            if (!$validateOnly && isset($product->image) && is_array($product->image) && count($product->image)) {
                $product_has_images = (bool) Image::getImages($this->context->language->id, (int) $product->id);
                foreach ($product->image as $key => $url) {
                    $url = trim($url);
                    $error = false;
                    if (!empty($url)) {
                        $url = str_replace(' ', '%20', $url);
                        $image = new Image();
                        $image->id_product = (int) $product->id;
                        $image->position = Image::getHighestPosition($product->id) + 1;
                        $image->cover = !$key && !$product_has_images ? true : false;
                        $alt = $product->image_alt[$key];
                        if (strlen($alt) > 0) {
                            $image->legend = self::createMultiLangField($alt);
                        }
                        // file_exists doesn't work with HTTP protocol
                        if (($field_error = $image->validateFields(UNFRIENDLY_ERROR, true)) === true && ($lang_field_error = $image->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $image->add()) {
                            // associate image to selected shops
                            $image->associateTo($shops);
                            if (!AdminImportController::copyImg($product->id, $image->id, $url, 'products', !$regenerate)) {
                                $image->delete();
                                $this->warnings[] = sprintf($this->trans('Error copying image: %s', array(), 'Admin.Parameters.Notification'), $url);
                            }
                        } else {
                            $error = true;
                        }
                    } else {
                        $error = true;
                    }
                    if ($error) {
                        $this->warnings[] = sprintf($this->trans('Product #%1$d: the picture (%2$s) cannot be saved.', array(), 'Admin.Parameters.Notification'), $image->id_product, $url);
                    }
                }
            }
            if (!$validateOnly && isset($product->id_category) && is_array($product->id_category)) {
                $product->updateCategories(array_map('intval', $product->id_category));
            }
            $product->checkDefaultAttributes();
            if (!$validateOnly && !$product->cache_default_attribute) {
                Product::updateDefaultAttribute($product->id);
            }
            // Features import
            $features = get_object_vars($product);
            if (!$validateOnly && isset($features['features']) && !empty($features['features'])) {
                foreach (explode($this->multiple_value_separator, $features['features']) as $single_feature) {
                    if (empty($single_feature)) {
                        continue;
                    }
                    $tab_feature = explode(':', $single_feature);
                    $feature_name = isset($tab_feature[0]) ? trim($tab_feature[0]) : '';
                    $feature_value = isset($tab_feature[1]) ? trim($tab_feature[1]) : '';
                    $position = isset($tab_feature[2]) ? (int) $tab_feature[2] - 1 : false;
                    $custom = isset($tab_feature[3]) ? (int) $tab_feature[3] : false;
                    if (!empty($feature_name) && !empty($feature_value)) {
                        $id_feature = (int) Feature::addFeatureImport($feature_name, $position);
                        $id_product = null;
                        if ($force_ids || $match_ref) {
                            $id_product = (int) $product->id;
                        }
                        $id_feature_value = (int) FeatureValue::addFeatureValueImport($id_feature, $feature_value, $id_product, $id_lang, $custom);
                        Product::addFeatureProductImport($product->id, $id_feature, $id_feature_value);
                    }
                }
            }
            // clean feature positions to avoid conflict
            Feature::cleanPositions();
            // set advanced stock managment
            if (!$validateOnly && isset($product->advanced_stock_management)) {
                if ($product->advanced_stock_management != 1 && $product->advanced_stock_management != 0) {
                    $this->warnings[] = sprintf($this->trans('Advanced stock management has incorrect value. Not set for product %1$s ', array(), 'Admin.Parameters.Notification'), $product->name[$default_language_id]);
                } elseif (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $product->advanced_stock_management == 1) {
                    $this->warnings[] = sprintf($this->trans('Advanced stock management is not enabled, cannot enable on product %1$s ', array(), 'Admin.Parameters.Notification'), $product->name[$default_language_id]);
                } elseif ($update_advanced_stock_management_value) {
                    $product->setAdvancedStockManagement($product->advanced_stock_management);
                }
                // automaticly disable depends on stock, if a_s_m set to disabled
                if (StockAvailable::dependsOnStock($product->id) == 1 && $product->advanced_stock_management == 0) {
                    StockAvailable::setProductDependsOnStock($product->id, 0);
                }
            }
            // Check if warehouse exists
            if (isset($product->warehouse) && $product->warehouse) {
                if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) {
                    $this->warnings[] = sprintf($this->trans('Advanced stock management is not enabled, warehouse not set on product %1$s ', array(), 'Admin.Parameters.Notification'), $product->name[$default_language_id]);
                } elseif (!$validateOnly) {
                    if (Warehouse::exists($product->warehouse)) {
                        // Get already associated warehouses
                        $associated_warehouses_collection = WarehouseProductLocation::getCollection($product->id);
                        // Delete any entry in warehouse for this product
                        foreach ($associated_warehouses_collection as $awc) {
                            $awc->delete();
                        }
                        $warehouse_location_entity = new WarehouseProductLocation();
                        $warehouse_location_entity->id_product = $product->id;
                        $warehouse_location_entity->id_product_attribute = 0;
                        $warehouse_location_entity->id_warehouse = $product->warehouse;
                        if (WarehouseProductLocation::getProductLocation($product->id, 0, $product->warehouse) !== false) {
                            $warehouse_location_entity->update();
                        } else {
                            $warehouse_location_entity->save();
                        }
                        StockAvailable::synchronize($product->id);
                    } else {
                        $this->warnings[] = sprintf($this->trans('Warehouse did not exist, cannot set on product %1$s.', array(), 'Admin.Parameters.Notification'), $product->name[$default_language_id]);
                    }
                }
            }
            // stock available
            if (isset($product->depends_on_stock)) {
                if ($product->depends_on_stock != 0 && $product->depends_on_stock != 1) {
                    $this->warnings[] = sprintf($this->trans('Incorrect value for "Depends on stock" for product %1$s ', array(), 'Admin.Parameters.Notification'), $product->name[$default_language_id]);
                } elseif ((!$product->advanced_stock_management || $product->advanced_stock_management == 0) && $product->depends_on_stock == 1) {
                    $this->warnings[] = sprintf($this->trans('Advanced stock management is not enabled, cannot set "Depends on stock" for product %1$s ', array(), 'Admin.Parameters.Notification'), $product->name[$default_language_id]);
                } elseif (!$validateOnly) {
                    StockAvailable::setProductDependsOnStock($product->id, $product->depends_on_stock);
                }
                // This code allows us to set qty and disable depends on stock
                if (!$validateOnly && isset($product->quantity) && (int) $product->quantity) {
                    // if depends on stock and quantity, add quantity to stock
                    if ($product->depends_on_stock == 1) {
                        $stock_manager = StockManagerFactory::getManager();
                        $price = str_replace(',', '.', $product->wholesale_price);
                        if ($price == 0) {
                            $price = 1.0E-6;
                        }
                        $price = round(floatval($price), 6);
                        $warehouse = new Warehouse($product->warehouse);
                        if ($stock_manager->addProduct((int) $product->id, 0, $warehouse, (int) $product->quantity, 1, $price, true)) {
                            StockAvailable::synchronize((int) $product->id);
                        }
                    } else {
                        if ($shop_is_feature_active) {
                            foreach ($shops as $shop) {
                                StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $shop);
                            }
                        } else {
                            StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $this->context->shop->id);
                        }
                    }
                }
            } elseif (!$validateOnly) {
                // if not depends_on_stock set, use normal qty
                if ($shop_is_feature_active) {
                    foreach ($shops as $shop) {
                        StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $shop);
                    }
                } else {
                    StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $this->context->shop->id);
                }
            }
            // Accessories linkage
            if (isset($product->accessories) && !$validateOnly && is_array($product->accessories) && count($product->accessories)) {
                $accessories[$product->id] = $product->accessories;
            }
        }
    }
 /**
  * Update product download
  *
  * @param object $product Product
  * @return bool
  */
 public function updateDownloadProduct($product, $edit = 0)
 {
     $is_virtual_file = (int) Tools::getValue('is_virtual_file');
     // add or update a virtual product
     if (Tools::getValue('is_virtual_good') == 'true') {
         $product->setDefaultAttribute(0);
         //reset cache_default_attribute
         if (Tools::getValue('virtual_product_expiration_date') && !Validate::isDate(Tools::getValue('virtual_product_expiration_date') && !empty($is_virtual_file))) {
             if (!Tools::getValue('virtual_product_expiration_date')) {
                 $this->errors[] = Tools::displayError('The expiration-date attribute is required.');
                 return false;
             }
         }
         // Trick's
         if ($edit == 1) {
             $id_product_download = (int) ProductDownload::getIdFromIdProduct((int) $product->id);
             if (!$id_product_download) {
                 $id_product_download = (int) Tools::getValue('virtual_product_id');
             }
         } else {
             $id_product_download = Tools::getValue('virtual_product_id');
         }
         $is_shareable = Tools::getValue('virtual_product_is_shareable');
         $virtual_product_name = Tools::getValue('virtual_product_name');
         $virtual_product_filename = Tools::getValue('virtual_product_filename');
         $virtual_product_nb_days = Tools::getValue('virtual_product_nb_days');
         $virtual_product_nb_downloable = Tools::getValue('virtual_product_nb_downloable');
         $virtual_product_expiration_date = Tools::getValue('virtual_product_expiration_date');
         if ($virtual_product_filename) {
             $filename = $virtual_product_filename;
         } else {
             $filename = ProductDownload::getNewFilename();
         }
         $download = new ProductDownload((int) $id_product_download);
         $download->id_product = (int) $product->id;
         $download->display_filename = $virtual_product_name;
         $download->filename = $filename;
         $download->date_add = date('Y-m-d H:i:s');
         $download->date_expiration = $virtual_product_expiration_date ? $virtual_product_expiration_date . ' 23:59:59' : '';
         $download->nb_days_accessible = (int) $virtual_product_nb_days;
         $download->nb_downloadable = (int) $virtual_product_nb_downloable;
         $download->active = 1;
         $download->is_shareable = (int) $is_shareable;
         if ($download->save()) {
             return true;
         }
     } else {
         /* unactive download product if checkbox not checked */
         if ($edit == 1) {
             $id_product_download = (int) ProductDownload::getIdFromIdProduct((int) $product->id);
             if (!$id_product_download) {
                 $id_product_download = (int) Tools::getValue('virtual_product_id');
             }
         } else {
             $id_product_download = ProductDownload::getIdFromIdProduct($product->id);
         }
         if (!empty($id_product_download)) {
             $product_download = new ProductDownload((int) $id_product_download);
             $product_download->date_expiration = date('Y-m-d H:i:s', time() - 1);
             $product_download->active = 0;
             return $product_download->save();
         }
     }
     return false;
 }
Beispiel #5
0
    public static function duplicateDownload($id_product_old, $id_product_new)
    {
        $sql = 'SELECT `display_filename`, `filename`, `date_add`, `date_expiration`, `nb_days_accessible`, `nb_downloadable`, `active`, `is_shareable`
				FROM `' . _DB_PREFIX_ . 'product_download`
				WHERE `id_product` = ' . (int) $id_product_old;
        $results = Db::getInstance()->executeS($sql);
        if (!$results) {
            return true;
        }
        $data = array();
        foreach ($results as $row) {
            $new_filename = ProductDownload::getNewFilename();
            copy(_PS_DOWNLOAD_DIR_ . $row['filename'], _PS_DOWNLOAD_DIR_ . $new_filename);
            $data[] = array('id_product' => (int) $id_product_new, 'display_filename' => pSQL($row['display_filename']), 'filename' => pSQL($new_filename), 'date_expiration' => pSQL($row['date_expiration']), 'nb_days_accessible' => (int) $row['nb_days_accessible'], 'nb_downloadable' => (int) $row['nb_downloadable'], 'active' => (int) $row['active'], 'is_shareable' => (int) $row['is_shareable'], 'date_add' => date('Y-m-d H:i:s'));
        }
        return Db::getInstance()->insert('product_download', $data);
    }
<?php

define('PS_ADMIN_DIR', getcwd());
include PS_ADMIN_DIR . '/../config/config.inc.php';
if (!class_exists('Cookie')) {
    exit;
}
$cookie = new Cookie('psAdmin', substr($_SERVER['SCRIPT_NAME'], strlen(__PS_BASE_URI__), -10));
if (!$cookie->isLoggedBack()) {
    die;
}
if (isset($_FILES['virtual_product_file']) and is_uploaded_file($_FILES['virtual_product_file']['tmp_name']) and (isset($_FILES['virtual_product_file']['error']) and !$_FILES['virtual_product_file']['error']) or !empty($_FILES['virtual_product_file']['tmp_name']) and $_FILES['virtual_product_file']['tmp_name'] != 'none') {
    $filename = $_FILES['virtual_product_file']['name'];
    $file = $_FILES['virtual_product_file']['tmp_name'];
    $newfilename = ProductDownload::getNewFilename();
    if (!copy($file, _PS_DOWNLOAD_DIR_ . $newfilename)) {
        header('HTTP/1.1 500 Error');
        echo '<return result="error" msg="no rights" filename="' . $filename . '" />';
    }
    @unlink($file);
    header('HTTP/1.1 200 OK');
    echo '<return result="success" msg="' . $newfilename . '" filename="' . $filename . '" />';
} else {
    header('HTTP/1.1 500 Error');
    echo '<return result="error" msg="big error" filename="' . ProductDownload::getNewFilename() . '" />';
}
Beispiel #7
0
 /**
  * Return a sha1 filename
  *
  * @return string Sha1 unique filename
  */
 public static function getNewFilename()
 {
     $ret = sha1(microtime());
     if (file_exists(_PS_DOWNLOAD_DIR_ . $ret)) {
         $ret = ProductDownload::getNewFilename();
     }
     return $ret;
 }
/// This source file is subject to the Software License Agreement that is bundled with this 
/// package in the file license.txt, or you can get it here
/// http://addons-modules.com/store/en/content/3-terms-and-conditions-of-use
///
/// @copyright  2009-2012 Addons-Modules.com
///
*/
${"GLOBALS"}["ehlrhvdb"] = "newfilename";
${"GLOBALS"}["jwxvtcivdngx"] = "file";
${"GLOBALS"}["pcopxkfgk"] = "filename";
include dirname(__FILE__) . "/config/config.inc.php";
if (!isset(Context::getContext()->customer) || !Context::getContext()->customer->id || !Context::getContext()->customer->isLogged()) {
    die(Tools::displayError("Permission Denied"));
}
if (isset($_FILES["virtual_product_file_attribute"]) && is_uploaded_file($_FILES["virtual_product_file_attribute"]["tmp_name"]) && (isset($_FILES["virtual_product_file_attribute"]["error"]) && !$_FILES["virtual_product_file_attribute"]["error"]) || !empty($_FILES["virtual_product_file_attribute"]["tmp_name"]) && $_FILES["virtual_product_file_attribute"]["tmp_name"] != "none") {
    ${${"GLOBALS"}["pcopxkfgk"]} = $_FILES["virtual_product_file_attribute"]["name"];
    ${"GLOBALS"}["uyfemhd"] = "newfilename";
    ${"GLOBALS"}["dyqkzhiilxah"] = "file";
    ${${"GLOBALS"}["jwxvtcivdngx"]} = $_FILES["virtual_product_file_attribute"]["tmp_name"];
    ${${"GLOBALS"}["uyfemhd"]} = ProductDownload::getNewFilename();
    if (!copy(${${"GLOBALS"}["dyqkzhiilxah"]}, _PS_DOWNLOAD_DIR_ . ${${"GLOBALS"}["ehlrhvdb"]})) {
        header("HTTP/1.1 500 Error");
        echo "<return result=\"error\" msg=\"No permissions to write in the download folder\" filename=\"" . Tools::safeOutput(${${"GLOBALS"}["pcopxkfgk"]}) . "\" />";
    }
    @unlink(${${"GLOBALS"}["jwxvtcivdngx"]});
    header("HTTP/1.1 200 OK");
    echo "<return result=\"success\" msg=\"" . Tools::safeOutput(${${"GLOBALS"}["ehlrhvdb"]}) . "\" filename=\"" . Tools::safeOutput(${${"GLOBALS"}["pcopxkfgk"]}) . "\" />";
} else {
    header("HTTP/1.1 500 Error");
    echo "<return result=\"error\" msg=\"Unknown error\" filename=\"" . Tools::safeOutput(ProductDownload::getNewFilename()) . "\" />";
}
 public function updateDownloadProduct($product, $edit = 0)
 {
     $bqhdst = "is_virtual_file";
     ${$bqhdst} = (int) Tools::getValue("is_virtual_file");
     if (Tools::getValue("is_virtual_good") == "true") {
         if (Tools::getValue("virtual_product_expiration_date") && !Validate::isDate(Tools::getValue("virtual_product_expiration_date") && !empty(${${"GLOBALS"}["ofnqhqwloxy"]}))) {
             if (!Tools::getValue("virtual_product_expiration_date")) {
                 $this->errors[] = Tools::displayError("This field expiration date attribute is required.");
                 return false;
             }
         }
         ${"GLOBALS"}["sawwdmhhhf"] = "is_shareable";
         $pvfvdbstogj = "download";
         if (${${"GLOBALS"}["pjupudkhthj"]} == 1) {
             ${${"GLOBALS"}["oketuohcmb"]} = (int) ProductDownload::getIdFromIdProduct((int) $product->id);
             $yduygdht = "id_product_download";
             if (!${${"GLOBALS"}["oketuohcmb"]}) {
                 ${$yduygdht} = (int) Tools::getValue("virtual_product_id");
             }
         } else {
             ${${"GLOBALS"}["oketuohcmb"]} = Tools::getValue("virtual_product_id");
         }
         $mpudnceviio = "virtual_product_expiration_date";
         $njckiqo = "filename";
         ${"GLOBALS"}["kvmjgmdvfpxk"] = "virtual_product_expiration_date";
         ${${"GLOBALS"}["sawwdmhhhf"]} = Tools::getValue("virtual_product_is_shareable");
         ${"GLOBALS"}["qgipvncl"] = "virtual_product_filename";
         ${${"GLOBALS"}["dfdmmppxadnp"]} = Tools::getValue("virtual_product_name");
         ${${"GLOBALS"}["qgipvncl"]} = Tools::getValue("virtual_product_filename");
         ${${"GLOBALS"}["xpylkyaysxls"]} = Tools::getValue("virtual_product_nb_days");
         $dtltqsd = "virtual_product_filename";
         $cbycann = "virtual_product_filename";
         ${${"GLOBALS"}["ebothfnmt"]} = Tools::getValue("virtual_product_nb_downloable");
         ${${"GLOBALS"}["bktmulsvfp"]} = Tools::getValue("virtual_product_expiration_date");
         if (${$cbycann}) {
             ${${"GLOBALS"}["letornu"]} = ${$dtltqsd};
         } else {
             ${${"GLOBALS"}["letornu"]} = ProductDownload::getNewFilename();
         }
         ${$pvfvdbstogj} = new ProductDownload((int) ${${"GLOBALS"}["oketuohcmb"]});
         $download->id_product = (int) $product->id;
         $download->display_filename = ${${"GLOBALS"}["dfdmmppxadnp"]};
         $download->filename = ${$njckiqo};
         $download->date_add = date("Y-m-d H:i:s");
         $vcyhlrvrm = "is_shareable";
         $download->date_expiration = ${${"GLOBALS"}["kvmjgmdvfpxk"]} ? ${$mpudnceviio} . " 23:59:59" : "";
         $download->nb_days_accessible = (int) ${${"GLOBALS"}["xpylkyaysxls"]};
         $download->nb_downloadable = (int) ${${"GLOBALS"}["ebothfnmt"]};
         $download->active = 1;
         $download->is_shareable = (int) ${$vcyhlrvrm};
         if ($download->save()) {
             return true;
         }
     } else {
         ${"GLOBALS"}["eycluxdax"] = "id_product_download";
         ${"GLOBALS"}["ikiqrzgois"] = "edit";
         if (${${"GLOBALS"}["ikiqrzgois"]} == 1) {
             $kmioedds = "id_product_download";
             ${$kmioedds} = (int) ProductDownload::getIdFromIdProduct((int) $product->id);
             if (!${${"GLOBALS"}["oketuohcmb"]}) {
                 ${${"GLOBALS"}["oketuohcmb"]} = (int) Tools::getValue("virtual_product_id");
             }
         } else {
             ${${"GLOBALS"}["eycluxdax"]} = ProductDownload::getIdFromIdProduct($product->id);
         }
         if (!empty(${${"GLOBALS"}["oketuohcmb"]})) {
             $ykdgublwd = "product_download";
             ${$ykdgublwd} = new ProductDownload((int) ${${"GLOBALS"}["oketuohcmb"]});
             $product_download->date_expiration = date("Y-m-d H:i:s", time() - 1);
             $product_download->active = 0;
             return $product_download->save();
         }
     }
     return false;
 }
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <*****@*****.**>
*  @copyright  2007-2013 PrestaShop SA
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
define('_PS_ADMIN_DIR_', getcwd());
include _PS_ADMIN_DIR_ . '/../config/config.inc.php';
if (!isset(Context::getContext()->employee) || !Context::getContext()->employee->isLoggedBack()) {
    die;
}
if (isset($_FILES['virtual_product_file_attribute']) && is_uploaded_file($_FILES['virtual_product_file_attribute']['tmp_name']) && (isset($_FILES['virtual_product_file_attribute']['error']) && !$_FILES['virtual_product_file_attribute']['error']) || !empty($_FILES['virtual_product_file_attribute']['tmp_name']) && $_FILES['virtual_product_file_attribute']['tmp_name'] != 'none') {
    $filename = $_FILES['virtual_product_file_attribute']['name'];
    $file = $_FILES['virtual_product_file_attribute']['tmp_name'];
    $newfilename = ProductDownload::getNewFilename();
    if (!copy($file, _PS_DOWNLOAD_DIR_ . $newfilename)) {
        header('HTTP/1.1 500 Error');
        echo '<return result="error" msg="No permissions to write in the download folder" filename="' . Tools::safeOutput($filename) . '" />';
    }
    @unlink($file);
    header('HTTP/1.1 200 OK');
    echo '<return result="success" msg="' . Tools::safeOutput($newfilename) . '" filename="' . Tools::safeOutput($filename) . '" />';
} else {
    header('HTTP/1.1 500 Error');
    echo '<return result="error" msg="Unknown error" filename="' . Tools::safeOutput(ProductDownload::getNewFilename()) . '" />';
}
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <*****@*****.**>
*  @copyright  2007-2012 PrestaShop SA
*  @version  Release: $Revision: 6844 $
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
define('_PS_ADMIN_DIR_', getcwd());
include _PS_ADMIN_DIR_ . '/../config/config.inc.php';
if (!isset(Context::getContext()->employee) || !Context::getContext()->employee->isLoggedBack()) {
    die;
}
if (isset($_FILES['virtual_product_file']) and is_uploaded_file($_FILES['virtual_product_file']['tmp_name']) and (isset($_FILES['virtual_product_file']['error']) and !$_FILES['virtual_product_file']['error']) or !empty($_FILES['virtual_product_file']['tmp_name']) and $_FILES['virtual_product_file']['tmp_name'] != 'none') {
    $filename = $_FILES['virtual_product_file']['name'];
    $file = $_FILES['virtual_product_file']['tmp_name'];
    $newfilename = ProductDownload::getNewFilename();
    if (!copy($file, _PS_DOWNLOAD_DIR_ . $newfilename)) {
        header('HTTP/1.1 500 Error');
        echo '<return result="error" msg="No permissions to write in the download folder" filename="' . Tools::safeOutput($filename) . '" />';
    }
    @unlink($file);
    header('HTTP/1.1 200 OK');
    echo '<return result="success" msg="' . Tools::safeOutput($newfilename) . '" filename="' . Tools::safeOutput($filename) . '" />';
} else {
    header('HTTP/1.1 500 Error');
    echo '<return result="error" msg="Could not upload file" filename="' . Tools::safeOutput(ProductDownload::getNewFilename()) . '" />';
}