<?php defined('SYSPATH') or die('No direct access allowed.'); /** * This class supports Service Plugins. * * @package Service * @category Models * @author Deon George * @copyright (c) 2009-2013 Open Source Billing * @license http://dev.osbill.net/license.html */ abstract class Model_Service_Plugin extends ORM_OSB { // Reset any sorting that may be defined in our parent protected $_sorting = array(); /** * Form info for admins to update */ abstract public function admin_update(); /** * Our service name as defined in the DB */ abstract public function name(); /** * When does our service expire */ abstract public function expire(); /** * Show our service name as defined in the DB with product suffix. */ public function service_name() { return sprintf('%s - %s',$this->service->product->title(),$this->name()); } /** * View details of the service */ abstract public function service_view(); /** * The table attributes that provide username/password values */ abstract public function username_value(); abstract public function password_value(); public function manage_button() { if (! $this->service->status) return FALSE; static $k = ''; // If $k is already set, we've rendered this JS if ($k) return TRUE; $k = Random::char(); Session::instance()->set('manage_button',$k); Script::add(array('type'=>'stdin','data'=>' $(document).ready(function() { var x=0; $("button[name=submit]").click(function() { var t=$(this).val().split(":"); if (x++) { alert("Session expired, please refresh the page!"); return false; } $.getJSON("'.URL::link('user','service/ajaxmanage/'.$this->service_id,TRUE).'", { k: "'.$k.'",t: t[1] }, function(data) { $.each(data, function(key, val) { $("#"+key+"_"+t[0]+"_"+t[1]).val(val); }); }).error(function() { alert("There was a problem with the request"); return false; }).success( function() { $("form[id=id_"+t[0]+"_"+t[1]+"]").submit(); }); }); });' )); return TRUE; } /** * Get specific service details for use in other modules * For Example: Invoice * * @todo Make the rendered items configurable * @todo Change this method name, now that it is public */ public function _details($type) { switch ($type) { // Nothing to add for invoices case 'invoice_detail_items': return array(); default: throw new Kohana_Exception('Unkown detail request :type',array(':type'=>$type)); } } } ?>