示例#1
0
 /**
  * Save all the data
  * 
  * 
  * @param unknown_type $data
  * @param unknown_type $locale
  */
 public static function saveAll($id, $params, $locale = 1)
 {
     $products = new Products();
     // Set the new values
     if (is_numeric($id)) {
         $products = self::find($id, null, false, $locale);
         if ($products[0]) {
             $products = $products[0];
         }
     } else {
         $products->inserted_at = date('Y-m-d H:i:s');
     }
     // Product UUID is missing, generate a new one
     if (empty($products->uuid)) {
         $products->uuid = Shineisp_Commons_Uuid::generate();
     }
     try {
         if (!empty($_FILES['attachments'])) {
             $file = $_FILES['attachments'];
             if (!empty($file)) {
                 if (!is_dir(PUBLIC_PATH . "/media/products/")) {
                     @mkdir(PUBLIC_PATH . "/media");
                     @mkdir(PUBLIC_PATH . "/media/products");
                 }
             }
         }
         if (is_array($params)) {
             $products->updated_at = date('Y-m-d H:i:s');
             $products->categories = !empty($params['categories']) ? $params['categories'] : null;
             $products->uri = !empty($params['uri']) ? Shineisp_Commons_UrlRewrites::format($params['uri']) : Shineisp_Commons_UrlRewrites::format($params['name']);
             $products->sku = !empty($params['sku']) ? $params['sku'] : '';
             $products->cost = $params['cost'];
             $products->price_1 = !empty($params['price_1']) ? $params['price_1'] : NULL;
             $products->setupfee = !empty($params['setupfee']) ? $params['setupfee'] : NULL;
             $products->enabled = !empty($params['enabled']) ? 1 : 0;
             $products->iscomparable = !empty($params['iscomparable']) ? 1 : 0;
             $products->tax_id = !empty($params['tax_id']) ? $params['tax_id'] : NULL;
             $products->type = !empty($params['type']) ? $params['type'] : "generic";
             $products->blocks = !empty($params['blocks']) ? $params['blocks'] : NULL;
             $products->group_id = !empty($params['group_id']) ? $params['group_id'] : NULL;
             $products->position = !empty($params['position']) ? $params['position'] : NULL;
             $products->setup = !empty($params['setup']) ? $params['setup'] : NULL;
             $products->ishighlighted = !empty($params['ishighlighted']) ? 1 : 0;
             $products->isrefundable = !empty($params['isrefundable']) ? 1 : 0;
             $products->showonrss = !empty($params['showonrss']) ? 1 : 0;
             $products->external_id = !empty($params['external_id']) ? $params['external_id'] : NULL;
             $products->downgradable = !empty($params['downgradable']) ? 1 : 0;
             $products->server_group_id = !empty($params['server_group_id']) ? intval($params['server_group_id']) : null;
             $products->autosetup = !empty($params['autosetup']) ? intval($params['autosetup']) : 0;
             $products->isp_id = Shineisp_Registry::get('ISP')->isp_id;
             // If 0 or NULL, se to NULL. Avoid constraint errors
             $products->welcome_mail_id = !empty($params['welcome_mail_id']) && intval($params['welcome_mail_id']) > 0 ? intval($params['welcome_mail_id']) : null;
             // Save the data
             $products->save();
             $product_id = $products->product_id;
             // Save the product attributes
             ProductsAttributesIndexes::saveAll($params, $product_id);
             $Pdata = ProductsData::findbyProductID($product_id, $locale);
             if (empty($Pdata)) {
                 $Pdata = new ProductsData();
             }
             // TODO: Guestisp: this criteria is not complete. I cannot translate a product already sold in another language
             // a solution is write the name of the product sold in the order as flat data
             //* Product name can not be changed if product is sold
             // 				if ( ! (bool)OrdersItems::CheckIfProductExist($product_id) ) {
             // 					$Pdata->name = $params ['name'];
             // 				}
             $Pdata->name = $params['name'];
             $Pdata->nickname = $params['nickname'];
             $Pdata->shortdescription = $params['shortdescription'];
             $Pdata->description = $params['description'];
             $Pdata->metakeywords = $params['metakeywords'];
             $Pdata->metadescription = $params['metadescription'];
             $Pdata->product_id = $product_id;
             $Pdata->language_id = $locale;
             $Pdata->save();
             // Create the price tranches
             if (!empty($params['tranche_qty']) && !empty($params['tranche_measure']) && !empty($params['tranche_price'])) {
                 $params['tranche_setupfee'] = isset($params['tranche_setupfee']) ? $params['tranche_setupfee'] : 0;
                 $tranches = ProductsTranches::saveAll($product_id, $params['tranche_billing_cycle_id'], $params['tranche_qty'], $params['tranche_measure'], $params['tranche_price'], $params['tranche_setupfee']);
                 $trancheid = $tranches['tranche_id'];
                 if (!empty($params['tranche_includes_domains'])) {
                     foreach ($params['tranche_includes_domains'] as $includeid) {
                         ProductsTranchesIncludes::saveAll($trancheid, $includeid, 'domains');
                     }
                 }
             }
             // Attach the wiki pages to a product
             if (!empty($params['wikipages'])) {
                 Wikilinks::addWikiPages2Products($product_id, $params['wikipages']);
             }
             // Add the related products
             if (!empty($params['related'])) {
                 self::AddRelatedProducts($product_id, $params['related']);
             }
             // Add the upgrade products
             if (!empty($params['upgrade'])) {
                 self::AddUpgradeProducts($product_id, $params['upgrade']);
             }
             // Before to get the Values of the form I upload the files in the folders
             if (!empty($file)) {
                 if ($_FILES['attachments']['error'] == 0) {
                     // Uploading the file
                     $filename = mt_rand(10, 999) . '_' . $_FILES['attachments']['name'];
                     $retval = move_uploaded_file($_FILES['attachments']['tmp_name'], PUBLIC_PATH . "/media/products/" . $filename);
                     if ($retval) {
                         $media = new ProductsMedia();
                         $media->filename = $filename;
                         $media->path = "/media/products/{$filename}";
                         $media->product_id = $product_id;
                         $media->description = $params['filedescription'];
                         $media->enabled = 1;
                         $media->save();
                     }
                 }
             }
             return $product_id;
         } else {
             throw new Exception('Parameters data are not correct.');
         }
     } catch (Exception $e) {
         echo $e->getMessage();
         die;
         return false;
     }
 }