Beispiel #1
0
	/**
	 * 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;
 }
Beispiel #3
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
  * @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
/**
 * 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;
}
Beispiel #6
0
 /**
  * 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));
 }
Beispiel #7
0
	/**
	 * 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));
	}