array(), ); /** * When does our service expire */ abstract public function expire(); /** * Our service name as defined in the DB */ abstract public function name(); /** * The table attributes that provide username/password values */ abstract public function password(); abstract public function username(); /** * Provide the button that launches the management of this service, generally from a 3rd party */ protected function manage() { // Dont show the manage button for expired or inactive services if (! $this->service->status OR $this->service->expiring()) return FALSE; static $x = ''; // If $x is already set, we've rendered this JS if (! $x) { $x = Random::char(); Session::instance()->set('manage_button',$x); Script::factory() ->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: "'.$x.'",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; } /** * Return the name of the plugin */ protected function plugin() { return strtolower(preg_replace('/(.*)_([a-zA-Z]+)$/',"$2",get_class($this))); } /** * Form info for admins to update plugin data */ public function render_edit() { return View::factory(sprintf('service/admin/plugin/%s/edit',$this->plugin())) ->set('o',$this); } /** * View details of the service */ public function render_view() { return View::factory(sprintf('service/user/plugin/%s/view',$this->plugin())) ->set('o',$this); } /** * 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()); } /** * 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)); } } } ?>