Rework service, change module_method configuration
This commit is contained in:
@@ -16,12 +16,45 @@ class Controller_Admin_Module extends Controller_Module {
|
||||
'list'=>TRUE,
|
||||
);
|
||||
|
||||
protected function _classes($dir,$class,$array=NULL,$key='') {
|
||||
$result = array();
|
||||
|
||||
if (is_null($array)) {
|
||||
$array = Kohana::list_files('classes');
|
||||
$array = $array['classes/Controller'];
|
||||
$key = 'classes/Controller';
|
||||
}
|
||||
|
||||
if (! $class)
|
||||
return array_keys($array);
|
||||
|
||||
if (! $dir) {
|
||||
if (! empty($array[$key.'/'.$class]))
|
||||
$result = Arr::merge($result,$this->_classes('','',$array[$key.'/'.$class],$key.'/'.$class));
|
||||
|
||||
if (! empty($array[$key.'/'.$class.'.php']))
|
||||
array_push($result,$key.'/'.$class);
|
||||
|
||||
} else {
|
||||
if (! empty($array[$key.'/'.$dir]))
|
||||
$result = Arr::merge($result,$this->_classes('',$class,$array[$key.'/'.$dir],$key.'/'.$dir));
|
||||
|
||||
if (! empty($array[$key.'/'.$dir.'/'.$class.'.php']))
|
||||
array_push($result,$key.'/'.$dir.'/'.$class);
|
||||
}
|
||||
|
||||
foreach ($result as $k=>$v)
|
||||
$result[$k] = str_replace('.php','',str_replace('/','_',preg_replace('/^classes\//','',$v)));
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of methods for a class
|
||||
*/
|
||||
protected function _methods($class) {
|
||||
$class = Kohana::classname($class);
|
||||
// Get a list of methods this module has
|
||||
$ch = 'Controller_%s';
|
||||
$methods = $secure_actions = $auth_required = array();
|
||||
|
||||
// List of classes where all our methods are, including this one.
|
||||
@@ -30,20 +63,26 @@ class Controller_Admin_Module extends Controller_Module {
|
||||
|
||||
foreach ($classes as $c) {
|
||||
$x = URL::dir($c);
|
||||
$cn = Kohana::classname('Controller_'.($x ? $x.'_'.$class : $class));
|
||||
$cp = $this->_classes($x,$class);
|
||||
|
||||
if (class_exists($cn)) {
|
||||
$r = new ReflectionClass($cn);
|
||||
foreach ($cp as $cn)
|
||||
if (class_exists($cn)) {
|
||||
$sc = preg_replace(sprintf('/^Controller_%s%s_?/',$x ? $x.'_' : '',$class),'',$cn);
|
||||
$r = new ReflectionClass($cn);
|
||||
|
||||
$rdp = $r->getDefaultProperties();
|
||||
$secure_actions[$cn] = $rdp['secure_actions'];
|
||||
$auth_required[$cn] = $rdp['auth_required'];
|
||||
$rdp = $r->getDefaultProperties();
|
||||
$secure_actions[$cn] = $rdp['secure_actions'];
|
||||
$auth_required[$cn] = $rdp['auth_required'];
|
||||
|
||||
foreach ($r->getMethods() as $method) {
|
||||
if (preg_match('/^action_/',$method->name))
|
||||
array_push($methods,str_replace('action_',strtolower(($x ? $x.'_' : $x)),$method->name));
|
||||
foreach ($r->getMethods() as $method)
|
||||
if (preg_match('/^action_/',$method->name))
|
||||
array_push($methods,
|
||||
str_replace('action_',
|
||||
#strtolower(($x ? $x.'_' : '').($sc ? $sc.'_' : '')),
|
||||
strtolower($x.($sc ? '_'.$sc : '').':'),
|
||||
$method->name)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return array('methods'=>$methods,'secure_actions'=>$secure_actions,'auth_required'=>$auth_required);
|
||||
|
@@ -39,7 +39,7 @@ class Controller_Reseller_Account extends Controller_Account {
|
||||
Block::add(array(
|
||||
'title'=>_('Customer List'),
|
||||
'body'=>Table::display(
|
||||
$this->filter(ORM::factory('Account')->list_active(),$this->ao->RTM->customers($this->ao->RTM),'sortkey(TRUE)','id'),
|
||||
$this->filter(ORM::factory('Account')->list_active(),$this->ao->RTM->customers($this->ao->RTM),'id','sortkey(TRUE)'),
|
||||
25,
|
||||
array(
|
||||
'id'=>array('label'=>'ID','url'=>URL::link('reseller','invoice/list/')),
|
||||
@@ -64,7 +64,7 @@ class Controller_Reseller_Account extends Controller_Account {
|
||||
Block::add(array(
|
||||
'title'=>_('Account Login Log'),
|
||||
'body'=>Table::display(
|
||||
$this->filter(ORM::factory('Account_Log')->find_all(),$this->ao->RTM->customers($this->ao->RTM),NULL,'account_id'),
|
||||
$this->filter(ORM::factory('Account_Log')->find_all(),$this->ao->RTM->customers($this->ao->RTM),'account_id'),
|
||||
25,
|
||||
array(
|
||||
'id'=>array('label'=>'ID'),
|
||||
|
@@ -52,9 +52,13 @@ class Controller_TemplateDefault extends lnApp_Controller_TemplateDefault {
|
||||
|
||||
/**
|
||||
* This will filter a search query to only return those accounts for a reseller
|
||||
* @todo Swap the order of these params and make flid necessary
|
||||
*
|
||||
* @param $o Our ORM Object that we are searching on
|
||||
* @param $fl Our array of items that we must return
|
||||
* @param $flid The ID that must be in the $fl
|
||||
* @param $sort Sort the results
|
||||
*/
|
||||
protected function filter($o,array $fl,$sort=NULL,$flid=NULL) {
|
||||
protected function filter($o,array $fl,$flid,$sort=NULL) {
|
||||
$result = array();
|
||||
|
||||
foreach ($o as $x)
|
||||
|
@@ -13,17 +13,17 @@ class Menu {
|
||||
private static function collapse(array $array) {
|
||||
$result = array();
|
||||
|
||||
foreach ($array as $item) {
|
||||
if (isset($result[$item->module->name])) {
|
||||
if (! is_array($result[$item->module->name]))
|
||||
$result[$item->module->name] = array($result[$item->module->name]);
|
||||
foreach ($array as $mmo) {
|
||||
if (isset($result[$mmo->module->name])) {
|
||||
if (! is_array($result[$mmo->module->name]))
|
||||
$result[$mmo->module->name] = array($result[$mmo->module->name]);
|
||||
|
||||
array_push($result[$item->module->name],$item);
|
||||
array_push($result[$mmo->module->name],$mmo);
|
||||
|
||||
continue;
|
||||
|
||||
} else {
|
||||
$result[$item->module->name] = $item;
|
||||
$result[$mmo->module->name] = $mmo;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,10 +36,10 @@ class Menu {
|
||||
if (empty(URL::$method_directory[$type]))
|
||||
return NULL;
|
||||
|
||||
$uo = Auth::instance()->get_user();
|
||||
$ao = Auth::instance()->get_user();
|
||||
|
||||
foreach ($uo->methods() as $mmo)
|
||||
if ($mmo->menu_display AND preg_match('/^'.$type.'_/',$mmo->name))
|
||||
foreach ($ao->methods() as $mmo)
|
||||
if ($mmo->menu_display AND $type == $mmo->directory())
|
||||
if (empty($result[$mmo->id]))
|
||||
$result[$mmo->id] = $mmo;
|
||||
|
||||
|
@@ -123,7 +123,7 @@ class Model_Account extends Model_Auth_UserDefault {
|
||||
if (empty($result[$mmo->id]))
|
||||
$result[$mmo->id] = $mmo;
|
||||
|
||||
Sort::MAsort($result,'module->name,name');
|
||||
Sort::MAsort($result,'module->name,menu_display');
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
@@ -31,12 +31,29 @@ class Model_Module_Method extends ORM_OSB {
|
||||
|
||||
protected $status;
|
||||
|
||||
// Temporarily adjust our name
|
||||
// @todo This is temporary until all our method names are colon delimited.
|
||||
protected function _load_values(array $values) {
|
||||
parent::_load_values($values);
|
||||
|
||||
if (substr_count($this->name,'_') == 1 AND ! substr_count($this->name,':'))
|
||||
$this->name = str_replace('_',':',$this->name);
|
||||
elseif (substr_count($this->name,'_') > 1)
|
||||
throw HTTP_Exception::factory(501,'Method :id has double underscore',array(':id'=>$this->id));
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function controller_sub() {
|
||||
return substr_count($this->name,'_') ? substr($this->name,($x=strpos($this->name,'_')),strpos($this->name,':')-$x) : '';
|
||||
}
|
||||
|
||||
public function controller() {
|
||||
return Kohana::classname(sprintf('Controller%s_%s',($this->directory() ? '_' : '').$this->directory(),$this->module->name));
|
||||
return Kohana::classname(sprintf('Controller%s_%s',($this->directory() ? '_' : '').$this->directory(),$this->module->name).$this->controller_sub());
|
||||
}
|
||||
|
||||
public function directory() {
|
||||
return substr($this->name,0,strpos($this->name,'_'));
|
||||
return substr($this->name,0,substr_count($this->name,'_') ? strpos($this->name,'_') : strpos($this->name,':'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -51,7 +68,7 @@ class Model_Module_Method extends ORM_OSB {
|
||||
}
|
||||
|
||||
public function method() {
|
||||
return substr($this->name,strpos($this->name,'_')+1);
|
||||
return substr($this->name,strpos($this->name,':')+1);
|
||||
}
|
||||
|
||||
public function status($status=NULL) {
|
||||
@@ -62,12 +79,12 @@ class Model_Module_Method extends ORM_OSB {
|
||||
}
|
||||
|
||||
public function url() {
|
||||
if (! preg_match('/_/',$this->name))
|
||||
if (! preg_match('/:/',$this->name))
|
||||
return NULL;
|
||||
|
||||
list($type,$action) = preg_split('/_/',$this->name,2);
|
||||
list($type,$action) = preg_split('/:/',$this->name,2);
|
||||
|
||||
return URL::link($type,$this->module->name.'/'.$action);
|
||||
return URL::link($this->directory(),$this->module->name.$this->controller_sub().'/'.$action);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@@ -39,13 +39,18 @@ class Request extends Kohana_Request {
|
||||
|
||||
$result = NULL;
|
||||
|
||||
$mo = ORM::factory('Module',array('name'=>$this->_controller));
|
||||
list($c,$x) = substr_count($this->_controller,'_') ? explode('_',$this->_controller,2) : array($this->_controller,'');
|
||||
|
||||
$mo = ORM::factory('Module',array('name'=>$c));
|
||||
|
||||
if ($mo->loaded() AND $mo->status) {
|
||||
$method = strtolower($this->_directory ? sprintf('%s_%s',$this->_directory,$this->_action) : $this->_action);
|
||||
$method = strtolower($this->_directory ? sprintf('%s:%s',$this->_directory.($x ? '_'.$x : ''),$this->_action) : $this->_action);
|
||||
|
||||
// Get the method number
|
||||
$mmo = $mo->module_method->where('name','=',$method)->find();
|
||||
$mmo = $mo->module_method
|
||||
->where('name','=',$method)
|
||||
->or_where('name','=',str_replace(':','_',$method)) // @todo This is temporary until all our method names have a colon delimiter
|
||||
->find();
|
||||
|
||||
if ($mmo->loaded())
|
||||
$result = $mmo;
|
||||
|
Reference in New Issue
Block a user