array('far_key'=>'id'), ); protected $_sorting = array( 'position'=>'asc', 'sku'=>'asc', ); protected $_display_format = array( 'price_type'=>array('StaticList_PriceType::display'=>array()), ); /** * The feature summary should be implemented in child objects. * It is displayed on the product overview page, as a summary of the products features. */ protected function _feature_summary() { throw new Kohana_Exception(':method not defined in child class :class',array(':method'=>__METHOD__,':class'=>get_class($this))); } /** * The summary should be implemented in child objects. */ protected function _summary() { return _('No Description'); } /** * Return the object of the product plugin */ private 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)); $spn = sprintf('%s_%s',get_class($this),$this->prod_plugin_file); return new $spn($this->prod_plugin_data); } /** * Get the product name, after translating */ public function name() { return $this->product_translate->find()->display('name'); } /** * This will render the product feature summary information */ public function feature_summary() { if (is_null($plugin = $this->plugin())) return HTML::nbsp(''); else return $plugin->_feature_summary(); } /** * Get the summary description * * Generally this is used on the invoice summary page */ public function summary() { if (is_null($plugin = $this->plugin())) return _('Other'); else return $plugin->_summary(); } /** * Return the products for a given category * @todo This shouldnt be here. */ public function 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; } /** * 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'))); } } ?>