array('far_key'=>'id'), 'service'=>array('far_key'=>'id'), ); protected $_sorting = array( 'position'=>'asc', 'sku'=>'asc', ); protected $_display_filters = array( 'active'=>array( array('StaticList_YesNo::display',array(':value')), ), 'price_type'=>array( array('StaticList_PriceType::display',array(':value')), ), ); /** * Return the object of the product plugin */ public function plugin() { if (! $this->prod_plugin_file) return NULL; if (! is_numeric($this->prod_plugin_data)) throw new Kohana_Exception('Missing plugin_id for :product (:type)',array(':product'=>$this->id,':type'=>$this->prod_plugin_file)); return ORM::factory(sprintf('product_plugin_%s',$this->prod_plugin_file),$this->prod_plugin_data); } /** * Get the product name, after translating * @todo This needs to be improved to find the right language item. */ public function name() { return $this->product_translate->find()->display('name'); } /** * This will render the product feature summary information */ public function feature_summary() { return (is_null($plugin = $this->plugin())) ? HTML::nbsp('') : $plugin->feature_summary(); } /** * Return the best price to the uesr based on the users group's memberships * @todo This needs to be tested with more than one price group enabled */ public function get_price_array() { if (! $this->loaded()) throw new Kohana_Exception('Call to :method where no object loaded?',array(':method'=>__METHOD__)); // Figure out our eligable groups // @todo Need to work out our default groups elsewhere, not in product // All users are members of the all user group "0" $groups = array(0); $pg = unserialize($this->price_group); if (Auth::instance()->logged_in()) foreach (Auth::instance()->get_user()->group->find_all() as $go) array_push($groups,$go->id); // Work out the best price for the user $price = array(); foreach (unserialize($this->price_group) as $bill_freq => $pg) { if ($pg['show']) foreach ($groups as $gid) { if (! empty($pg[$gid])) { if (empty($price[$bill_freq]['price_base']) OR ($pg[$gid]['price_base'] AND $price[$bill_freq]['price_base'] > $pg[$gid]['price_base'])) { $price[$bill_freq]['price_setup'] = $pg[$gid]['price_setup']; $price[$bill_freq]['price_base'] = $pg[$gid]['price_base']; } } } } return $price; } /** * Test if the product is a TRIAL product * (price_type == 2) * * @return boolean */ public function is_trial() { if ($this->price_type == 2) return TRUE; else return FALSE; } public function show_thumb() { $mediapath = Route::get('default/media'); $thumb = $mediapath->uri(array('file'=>'img/thumbnails/'.$this->thumbnail)); // @todo Change the ALT to the product name. echo HTML::image($thumb,array('alt'=>_('Thumb Nail'))); } /** * Return the products for a given category * @todo This shouldnt be here. */ public function list_category($cat) { $results = array(); foreach ($this->where('active','=',TRUE)->find_all() as $po) { if ($c = unserialize($po->avail_category_id) AND in_array($cat,$c)) array_push($results,$po); } return $results; } } ?>