<?php defined('SYSPATH') or die('No direct access allowed.'); /** * This class supports Product Plugins. * * @package Product/Plugin * @category Models * @author Deon George * @copyright (c) 2009-2013 Open Source Billing * @license http://dev.osbill.net/license.html */ abstract class Model_Product_Plugin extends ORM_OSB { // Reset any sorting that may be defined in our parent protected $_sorting = array(); /** * The cost of this service */ abstract public function cost($annual=FALSE); /** * Return the name of the plugin */ protected function plugin() { return strtolower(preg_replace('/(.*)_([a-zA-Z]+)$/',"$2",get_class($this))); } /** * Get all the products using this plugin */ public function products($active=FALSE) { $x = ORM::factory('Product') ->where('prod_plugin_file','=',$this->plugin()) ->and_where('prod_plugin_data','=',$this); if ($active) $x->where_active(); return $x->find_all(); } /** * Form info for admins to update with plugin data */ abstract public function render_edit(); /** * Form used during service ordering */ public function render_order() { return View::factory(sprintf('product/plugin/%s/order',$this->plugin())); } /** * View the details of the product */ public function render_view() { return View::factory(sprintf('product/plugin/%s/view',$this->plugin()))->set('o',$this); } abstract public function supplier(); } ?>