143 lines
4.2 KiB
PHP
143 lines
4.2 KiB
PHP
|
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||
|
|
||
|
/**
|
||
|
* This class provides Admin Product management
|
||
|
*
|
||
|
* @package Product
|
||
|
* @category Controllers/Admin
|
||
|
* @author Deon George
|
||
|
* @copyright (c) 2009-2013 Open Source Billing
|
||
|
* @license http://dev.osbill.net/license.html
|
||
|
*/
|
||
|
class Controller_Admin_Product extends Controller_TemplateDefault_Admin {
|
||
|
protected $secure_actions = array(
|
||
|
'ajaxtranslateform'=>TRUE,
|
||
|
'list'=>TRUE,
|
||
|
'update'=>TRUE,
|
||
|
'view'=>TRUE,
|
||
|
);
|
||
|
|
||
|
public function action_ajaxtranslateform() {
|
||
|
$this->auto_render = FALSE;
|
||
|
|
||
|
$po = ORM::factory('Product',$this->request->param('id'));
|
||
|
|
||
|
if (! $this->request->is_ajax() OR ! $po->loaded() OR ! isset($_REQUEST['key']))
|
||
|
$this->response->body(_('Unable to find translate data'));
|
||
|
|
||
|
else {
|
||
|
|
||
|
$pto = $po->product_translate->where('language_id','=',$_REQUEST['key'])->find();
|
||
|
|
||
|
$this->response->body(View::factory($this->viewpath())->set('pto',$pto));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Show a list of products
|
||
|
*/
|
||
|
public function action_list() {
|
||
|
if ($this->request->param('id'))
|
||
|
$prods = ORM::factory('Product_Category',$this->request->param('id'))->products();
|
||
|
else
|
||
|
$prods = ORM::factory('Product')->order_by('status DESC,prod_plugin_file')->find_all();
|
||
|
|
||
|
Block::add(array(
|
||
|
'title'=>_('Customer Products'),
|
||
|
'body'=>Table::display(
|
||
|
$prods,
|
||
|
25,
|
||
|
array(
|
||
|
'id'=>array('label'=>'ID','url'=>URL::link('admin','product/view/')),
|
||
|
'name()'=>array('label'=>'Details'),
|
||
|
'status'=>array('label'=>'Active'),
|
||
|
'prod_plugin_file'=>array('label'=>'Plugin Name'),
|
||
|
'prod_plugin_data'=>array('label'=>'Plugin Data'),
|
||
|
'price_type'=>array('label'=>'Price Type'),
|
||
|
'taxable'=>array('label'=>'Taxable'),
|
||
|
'count_services()'=>array('label'=>'Services'),
|
||
|
'count_invoices()'=>array('label'=>'Invoices'),
|
||
|
),
|
||
|
array(
|
||
|
'page'=>TRUE,
|
||
|
'type'=>'select',
|
||
|
'form'=>URL::link('admin','product/view'),
|
||
|
)),
|
||
|
));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Edit a product configuration
|
||
|
*/
|
||
|
public function action_update() {
|
||
|
$po = ORM::factory('Product',$this->request->param('id'));
|
||
|
|
||
|
if (! $po->loaded())
|
||
|
HTTP::redirect('welcome/index');
|
||
|
|
||
|
if ($_POST) {
|
||
|
if (isset($_POST['product_translate']['id']) AND ($pto=ORM::factory('Product_Translate',$_POST['product_translate']['id'])) AND $pto->loaded())
|
||
|
if (! $pto->values($_POST['product_translate'])->save())
|
||
|
throw new Kohana_Exception('Failed to save updates to product_translate data for record :record',array(':record'=>$po->id()));
|
||
|
|
||
|
if (! $po->values($_POST)->save())
|
||
|
throw new Kohana_Exception('Failed to save updates to product data for record :record',array(':record'=>$so->id()));
|
||
|
}
|
||
|
|
||
|
Block::add(array(
|
||
|
'title'=>sprintf('%s %s:%s',_('Update Product'),$po->id,$po->name()),
|
||
|
'body'=>View::factory($this->viewpath())
|
||
|
->set('po',$po)
|
||
|
->set('mediapath',Route::get('default/media'))
|
||
|
->set('plugin_form',$po->admin_update()),
|
||
|
));
|
||
|
|
||
|
Script::add(array('type'=>'stdin','data'=>'
|
||
|
$(document).ready(function() {
|
||
|
$("select[name=language_id]").change(function() {
|
||
|
// Send the request and update sub category dropdown
|
||
|
$.ajax({
|
||
|
type: "GET",
|
||
|
data: "key="+$(this).val(),
|
||
|
dataType: "html",
|
||
|
cache: false,
|
||
|
url: "'.URL::link('admin','product/ajaxtranslateform/'.$po->id,TRUE).'",
|
||
|
timeout: 2000,
|
||
|
error: function(x) {
|
||
|
alert("Failed to submit");
|
||
|
},
|
||
|
success: function(data) {
|
||
|
$("div[id=translate]").replaceWith(data);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
'));
|
||
|
}
|
||
|
|
||
|
public function action_view() {
|
||
|
$po = ORM::factory('Product',$this->request->param('id'));
|
||
|
|
||
|
Block::add(array(
|
||
|
'title'=>sprintf('%s: %s',_('Current Services Using this Product'),$po->name()),
|
||
|
'body'=>Table::display(
|
||
|
ORM::factory('Service')->where('product_id','=',$po->id)->find_all(),
|
||
|
25,
|
||
|
array(
|
||
|
'id'=>array('label'=>'ID','url'=>URL::link('user','service/view/')),
|
||
|
'account->accnum()'=>array(),
|
||
|
'account->name()'=>array('label'=>'Account'),
|
||
|
'name()'=>array('label'=>'Details'),
|
||
|
'status'=>array('label'=>'Active'),
|
||
|
'price(TRUE,TRUE)'=>array('label'=>'Price','align'=>'right'),
|
||
|
),
|
||
|
array(
|
||
|
'page'=>TRUE,
|
||
|
'type'=>'select',
|
||
|
'form'=>URL::link('user','service/view'),
|
||
|
)),
|
||
|
));
|
||
|
}
|
||
|
}
|
||
|
?>
|