Rework service, change module_method configuration

This commit is contained in:
Deon George
2013-06-04 21:50:41 +10:00
parent 1a40f95b30
commit 951845f6c6
35 changed files with 780 additions and 1022 deletions

View File

@@ -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);

View File

@@ -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'),

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);
}
}
?>

View File

@@ -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;

View File

@@ -57,5 +57,5 @@
</div>
</div>
</fieldset>
</div> <!-- /span8 -->
</div> <!-- /span -->
</div> <!-- /row -->

View File

@@ -12,5 +12,5 @@
</div>
</div>
</fieldset>
</div>
</div>
</div> <!-- /span -->
</div> <!-- /row -->