/** * Attaches a product download asset to the price object * * @since 1.1 * * @return boolean **/ function attach_download ($id) { if (!$id) return false; $Download = new ProductDownload($id); $Download->parent = $this->id; $Download->save(); do_action('attach_product_download',$id,$this->id); return true; }
/** * 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; }
/** * 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 * @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; }
/** * shopp_add_product_download * * Add product download file to a product/variation. * * @api * @since 1.2 * * @param int $product id of the product the download asset will be added to * @param string $file full or correct relative path to the download file asset. * @param int $variant id of the variant the download asset will be attached to. For products with variants, this is a required parameter. * @return mixed false of failure, the new download asset id on success **/ function shopp_add_product_download($product, $file, $variant = false) { if (empty($product) || empty($file)) { shopp_debug(__FUNCTION__ . ' failed: One or more missing parameters.'); return false; } $File = new ProductDownload(); $instore = $File->found($file); if (!$instore && (!is_file($file) || !is_readable($file))) { shopp_debug(__FUNCTION__ . " failed for file {$file}: File missing or unreadable."); return false; } $Product = new ShoppProduct($product); if (empty($Product->id)) { shopp_debug(__FUNCTION__ . " failed for file {$file}: No such product with id {$product}."); return false; } $Product->load_data(array('summary', 'prices')); if ("on" == $Product->variants && false === $variant) { shopp_debug(__FUNCTION__ . " failed for file {$file}: You must specify the variant id parameter for product {$product}."); return false; } $Price = reset($Product->prices); if (empty($Price->id)) { shopp_debug(__FUNCTION__ . " failed for file {$file}: Failed to load product variants."); return false; } if ($variant) { $Price = false; foreach ($Product->prices as $Price) { if ($variant == $Price->id) { break; } } if (false === $Price) { shopp_debug(__FUNCTION__ . " failed for file {$file}: You must specify a valid variant id parameter for product {$product}."); return false; } } // Save the uploaded file $File->load(array('type' => 'download', 'parent' => $Price->id)); $File->parent = $Price->id; $File->context = "price"; $File->type = "download"; $File->name = basename($file); $File->filename = $File->name; if (!$instore) { $File->mime = file_mimetype($file, $File->name); $File->size = filesize($file); $File->store($file, 'file'); } else { $File->uri = $file; $File->readmeta(); } $File->save(); if ($File->id) { return $File->id; } shopp_debug(__FUNCTION__ . " failed for file {$file}"); return false; }
/** * AJAX behavior to process uploaded files intended as digital downloads * * Handles processing a file upload from a temporary file to a * the correct storage container (DB, file system, etc) * * @author Jonathan Davis * @return string JSON encoded result with DB id, filename, type & size **/ public static function downloads() { $error = false; if (isset($_FILES['Filedata']['error'])) { $error = $_FILES['Filedata']['error']; } if ($error) { die(json_encode(array('error' => Lookup::errors('uploads', $error)))); } if (!@is_uploaded_file($_FILES['Filedata']['tmp_name'])) { die(json_encode(array('error' => Shopp::__('The file could not be saved because the upload was not found on the server.')))); } if (0 == $_FILES['Filedata']['size']) { die(json_encode(array('error' => Shopp::__('The file could not be saved because the uploaded file is empty.')))); } FileAsset::mimetypes(); // Save the uploaded file $File = new ProductDownload(); $File->parent = 0; $File->context = "price"; $File->type = "download"; $File->name = $_FILES['Filedata']['name']; $File->filename = $File->name; list($extension, $mimetype, $properfile) = wp_check_filetype_and_ext($_FILES['Filedata']['tmp_name'], $File->name); if (empty($mimetype)) { $mimetype = 'application/octet-stream'; } $File->mime = $mimetype; if (!empty($properfile)) { $File->name = $File->filename = $properfile; } $File->size = filesize($_FILES['Filedata']['tmp_name']); $File->store($_FILES['Filedata']['tmp_name'], 'upload'); $Error = ShoppErrors()->code('storage_engine_save'); if (!empty($Error)) { die(json_encode(array('error' => $Error->message(true)))); } $File->save(); do_action('add_product_download', $File, $_FILES['Filedata']); echo json_encode(array('id' => $File->id, 'name' => stripslashes($File->name), 'type' => $File->mime, 'size' => $File->size)); }
/** * AJAX behavior to process uploaded files intended as digital downloads * * Handles processing a file upload from a temporary file to a * the correct storage container (DB, file system, etc) * * @return string JSON encoded result with DB id, filename, type & size **/ function downloads () { $error = false; if (isset($_FILES['Filedata']['error'])) $error = $_FILES['Filedata']['error']; if ($error) die(json_encode(array("error" => $this->uploadErrors[$error]))); if (!is_uploaded_file($_FILES['Filedata']['tmp_name'])) die(json_encode(array("error" => __('The file could not be saved because the upload was not found on the server.','Ecart')))); if (!is_readable($_FILES['Filedata']['tmp_name'])) die(json_encode(array("error" => __('The file could not be saved because the web server does not have permission to read the upload.','Ecart')))); if ($_FILES['Filedata']['size'] == 0) die(json_encode(array("error" => __('The file could not be saved because the uploaded file is empty.','Ecart')))); // Save the uploaded file $File = new ProductDownload(); $File->parent = 0; $File->context = "price"; $File->type = "download"; $File->name = $_FILES['Filedata']['name']; $File->filename = $File->name; $File->mime = file_mimetype($_FILES['Filedata']['tmp_name'],$File->name); $File->size = filesize($_FILES['Filedata']['tmp_name']); $File->store($_FILES['Filedata']['tmp_name'],'upload'); $File->save(); do_action('add_product_download',$File,$_FILES['Filedata']); echo json_encode(array("id"=>$File->id,"name"=>stripslashes($File->name),"type"=>$File->mime,"size"=>$File->size)); }