Beispiel #1
0
 /**
  * Get additional content data selected
  * 
  * @param $result = Query result
  */
 public static function post_find($result)
 {
     if ($result !== null) {
         if (is_array($result)) {
             foreach ($result as $item) {
                 // It will first check if we already have result in temporary result,
                 // and only execute query if we dont. That way we dont have duplicate queries
                 // Get product categories
                 $item->get_categories = static::lazy_load(function () use($item) {
                     $categories = Model_Product_To_Categories::find(function ($query) use($item) {
                         return $query->where('product_id', $item->id);
                     }, 'category_id');
                     if (!empty($categories)) {
                         $categories = '(' . implode(',', array_keys($categories)) . ')';
                         return Model_Category::find(function ($query) use($categories) {
                             return $query->where('id', 'IN', \DB::expr($categories));
                         }, 'id');
                     }
                     return array();
                 }, $item->id, 'categories');
                 // Get product infotabs
                 $item->get_infotabs = static::lazy_load(function () use($item) {
                     return Model_Product_To_Infotabs::find(function ($query) use($item) {
                         $query->order_by('sort', 'asc');
                         return $query->where('product_id', $item->id);
                     });
                 }, $item->id, 'infotabs');
                 // Get product groups
                 $item->get_groups = static::lazy_load(function () use($item) {
                     $groups = Model_Product_To_Groups::find(function ($query) use($item) {
                         return $query->where('product_id', $item->id);
                     }, 'group_id');
                     if (!empty($groups)) {
                         $groups = '(' . implode(',', array_keys($groups)) . ')';
                         return Model_Group::find(function ($query) use($groups, $item) {
                             $query->where('id', 'IN', \DB::expr($groups));
                             $query->order_by('sort', 'asc');
                             return $query;
                         }, 'id');
                     }
                     return array();
                 }, $item->id, 'groups');
                 // Get product groups
                 $item->get_pricing_group = static::lazy_load(function () use($item) {
                     $groups = Model_Product_To_Groups::find(function ($query) use($item) {
                         return $query->where('product_id', $item->id);
                     }, 'group_id');
                     if (!empty($groups)) {
                         $groups = '(' . implode(',', array_keys($groups)) . ')';
                         $groups = Model_Group::find(function ($query) use($groups, $item) {
                             $query->where('type', 'pricing');
                             $query->where('id', 'IN', \DB::expr($groups));
                             $query->order_by('sort', 'asc');
                             return $query;
                         });
                         return !empty($groups) ? $groups[0] : false;
                     }
                     return false;
                 }, $item->id, 'pricing_group', 'object');
                 // Get related products
                 $item->get_related_products = static::lazy_load(function () use($item) {
                     $related = Model_Product_To_Related::find(function ($query) use($item) {
                         return $query->where('product_id', $item->id);
                     }, 'related_id');
                     if (!empty($related)) {
                         $related = '(' . implode(',', array_keys($related)) . ')';
                         return Model_Product::find(function ($query) use($related, $item) {
                             $query->where('id', 'IN', \DB::expr($related));
                             $query->where('id', '<>', $item->id);
                             $query->order_by('sort', 'asc');
                             return $query;
                         }, 'id');
                     }
                     return array();
                 }, $item->id, 'related_products');
                 // Get upsell products
                 $item->get_upsell_products = static::lazy_load(function () use($item) {
                     $upsell = Model_Product_To_Upsell::find(function ($query) use($item) {
                         return $query->where('product_id', $item->id);
                     }, 'upsell_id');
                     if (!empty($upsell)) {
                         $upsell = '(' . implode(',', array_keys($upsell)) . ')';
                         return Model_Product::find(function ($query) use($upsell, $item) {
                             $query->select(Model_Product_To_Upsell::get_protected('_table_name') . '.discount', Model_Product::get_protected('_table_name') . '.*');
                             $query->join(Model_Product_To_Upsell::get_protected('_table_name'));
                             $query->on(Model_Product_To_Upsell::get_protected('_table_name') . '.upsell_id', '=', Model_Product::get_protected('_table_name') . '.id');
                             $query->where(Model_Product::get_protected('_table_name') . '.id', 'IN', \DB::expr($upsell));
                             $query->where(Model_Product::get_protected('_table_name') . '.id', '<>', $item->id);
                             $query->order_by(Model_Product::get_protected('_table_name') . '.sort', 'asc');
                             return $query;
                         }, 'id');
                     }
                     return array();
                 }, $item->id, 'upsell_products');
                 // Get content images
                 $item->get_images = static::lazy_load(function () use($item) {
                     return Model_Product_Image::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc')));
                 }, $item->id, 'images');
                 // Get content files
                 $item->get_files = static::lazy_load(function () use($item) {
                     return Model_Product_File::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc')));
                 }, $item->id, 'files');
                 // Get content videos
                 $item->get_videos = static::lazy_load(function () use($item) {
                     return Model_Product_Video::find(array('where' => array('content_id' => $item->id), 'order_by' => array('sort' => 'asc')));
                 }, $item->id, 'videos');
                 // Get content children
                 $item->get_seo = static::lazy_load(function () use($item) {
                     return Model_Product_Seo::find_one_by_content_id($item->id);
                 }, $item->id, 'seo', 'object');
                 // Get attributes
                 $item->get_attributes = static::lazy_load(function () use($item) {
                     return Model_Attribute::find(array('where' => array('product_id' => $item->id)));
                 }, $item->id, 'attributes');
                 // Get default attribute
                 $item->get_default_attributes = static::lazy_load(function () use($item) {
                     return Model_Attribute::find(array('where' => array('product_id' => $item->id, 'default' => 1, 'active' => 1)));
                 }, $item->id, 'default_attributes');
                 // Get all active prices
                 $item->get_all_prices = static::lazy_load(function () use($item) {
                     $product_attributes = Model_Attribute::find(function ($query) use($item) {
                         $query->join(Model_Attribute_Price::get_protected('_table_name'));
                         $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id');
                         $query->where('product_id', $item->id);
                         $query->and_where('attributes', '!=', '');
                         $query->and_where('active', 1);
                         return $query;
                     }, 'id');
                     return $product_attributes;
                 }, $item->id, 'unit_price');
                 // Get prices for product
                 $item->get_prices = static::lazy_load(function () use($item) {
                     $product_attributes = Model_Attribute::find(function ($query) use($item) {
                         $query->join(Model_Attribute_Price::get_protected('_table_name'));
                         $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id');
                         $query->where('product_id', $item->id);
                         return $query;
                     }, 'id');
                     return $product_attributes;
                 }, $item->id, 'unit_price');
                 // Get unit price
                 $item->get_unit_price = static::lazy_load(function () use($item) {
                     $product_attributes = Model_Attribute::find(function ($query) use($item) {
                         $query->join(Model_Attribute_Price::get_protected('_table_name'));
                         $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id');
                         $query->where('product_id', $item->id);
                         $query->and_where('type', 'unit_price');
                         $query->and_where('attributes', '!=', '');
                         $query->and_where('active', 1);
                         $query->limit(1);
                         return $query;
                     }, 'id');
                     return $product_attributes;
                 }, $item->id, 'unit_price');
                 // Get sale price
                 $item->get_sale_price = static::lazy_load(function () use($item) {
                     $product_attributes = Model_Attribute::find(function ($query) use($item) {
                         $query->join(Model_Attribute_Price::get_protected('_table_name'));
                         $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id');
                         $query->where('product_id', $item->id);
                         $query->and_where('type', 'sale_price');
                         $query->and_where('attributes', '!=', '');
                         $query->and_where('active', 1);
                         $query->limit(1);
                         return $query;
                     }, 'id');
                     return $product_attributes;
                 }, $item->id, 'sale_price');
                 // Get default price (RRP or Sale price)
                 $item->get_default_price = static::lazy_load(function () use($item) {
                     $out = array(0);
                     $product_attributes = Model_Attribute::find(function ($query) use($item) {
                         $query->join(Model_Attribute_Price::get_protected('_table_name'));
                         $query->on(Model_Attribute_Price::get_protected('_table_name') . '.product_attribute_id', '=', Model_Attribute::get_protected('_table_name') . '.id');
                         $query->where('product_id', $item->id);
                         $query->and_where('type', 'sale_price');
                         $query->and_where('attributes', '!=', '');
                         $query->and_where('active', 1);
                         $query->and_where('default', 1);
                         $query->limit(1);
                         return $query;
                     }, 'id');
                     if ($product_attributes) {
                         $obj = reset($product_attributes);
                         if ($obj->price > 0) {
                             $out[0] = $obj->price;
                             $out[1] = 'sale_price';
                         } else {
                             $out[0] = $obj->retail_price;
                             $out[1] = 'retail_price';
                         }
                     }
                     return $out;
                 }, $item->id, 'default_price');
                 // Get active attribute group
                 $item->get_active_attribute_group = static::lazy_load(function () use($item) {
                     if ($attribute = Model_Attribute::find_one_by_product_id($item->id)) {
                         return $attribute->attribute_group;
                     }
                     return false;
                 }, $item->id, 'active_attribute_group');
                 // Get product data
                 $item->get_data = static::lazy_load(function () use($item) {
                     return \Product\Model_Product::product_data($item);
                 }, $item->id, 'data');
             }
         }
     }
     // return the result
     return $result;
 }
Beispiel #2
0
 /**
  * Delete content file
  * 
  * @param $file_id		= File ID
  * @param $content_id	= Content ID
  */
 public function action_delete_file($file_id = false, $content_id = false)
 {
     if ($file_id && $content_id) {
         $files = Model_Product_File::find(array('where' => array('content_id' => $content_id), 'order_by' => array('sort' => 'asc')), 'id');
         if ($files) {
             if (isset($files[$file_id])) {
                 $file = $files[$file_id];
                 // If there is only one image and image is required
                 if (count($files) == 1) {
                     if (\Config::get('details.file.required', false)) {
                         \Messages::error('You can\'t delete all files. Please add new file in order to delete this one.');
                     } else {
                         // Reset sort fields
                         \DB::update(Model_Product_File::get_protected('_table_name'))->value('sort', \DB::expr('sort - 1'))->where('sort', '>', $file->sort)->execute();
                         // Delete file
                         $this->delete_file($file->file);
                         $file->delete();
                         \Messages::success('File was successfully deleted.');
                     }
                 } else {
                     // Dont use cover option for files
                     if (FALSE && $file->cover == 1) {
                         \Messages::error('You can\'t delete cover file. Set different file as cover in order to delete this one.');
                     } else {
                         // Reset sort fields
                         \DB::update(Model_Product_File::get_protected('_table_name'))->value('sort', \DB::expr('sort - 1'))->where('sort', '>', $file->sort)->execute();
                         // Delete file
                         $this->delete_file($file->file);
                         $file->delete();
                         // Set another file as cover if cover is deleted
                         if ($file->cover == 1) {
                             $files = Model_Product_File::find(array('where' => array('content_id' => $content_id), 'order_by' => array('sort' => 'asc')));
                             $files[0]->cover = 1;
                             $files[0]->save();
                         }
                         \Messages::success('File was successfully deleted.');
                     }
                 }
             } else {
                 \Messages::error('File you are trying to delete don\'t exists. Check your url and try again.');
             }
         } else {
             \Messages::error('File you are trying to delete don\'t exists. Check your url and try again.');
         }
     }
     \Response::redirect(\Input::referrer());
 }