TRUE, 'edit'=>TRUE, 'list'=>TRUE, ); /** * Get the list of methods for a class */ protected function _methods($class) { // Get a list of methods this module has $ch = 'Controller_%s'; $methods = array(); // List of classes where all our methods are, including this one. $classes = URL::$method_directory; array_unshift($classes,''); foreach ($classes as $c) { $cn = Kohana::classname('Controller_'.$c ? $c.'_'.$class : $class); if (class_exists($cn)) { $r = new ReflectionClass($cn); foreach ($r->getMethods() as $method) if (preg_match('/^Controller_(.*_)?'.$class.'$/i',$method->class) AND ! preg_match('/^_/',$method->name)) array_push($methods,str_replace('action_',($c ? $c.'_' : $c),$method->name)); } } return $methods; } /** * List our installed modules */ public function action_list() { $mo = ORM::factory('Module'); Block::add(array( 'title'=>_('Defined Modules'), 'body'=>Table::display( $mo->find_all(), 25, array( 'id'=>array('label'=>'ID','url'=>URL::link('admin','module/edit/')), 'name'=>array('label'=>'Name'), 'status'=>array('label'=>'Active'), ), array( 'page'=>TRUE, 'type'=>'list', )), )); } /** * Edit a Module Configuration * * @todo Highlight those methods that have security, but the class does not have auth_required set to YES or the method isnt defined in secure_actions */ public function action_edit() { $mid = $this->request->param('id'); $mo = ORM::factory('Module',$mid); if (! $mo->loaded()) { SystemMessage::add(array( 'title'=>_('Invalid Module ID'), 'type'=>'error', 'body'=>sprintf(_('Module with ID %s doesnt appear to exist?'),$mid), )); return; } $output = ''; $methods = $this->_methods($mo->name); // Show methods defined in the DB already. Block::add(array( 'title'=>sprintf('%s: %s ',_('Defined Module Methods For'),$mo->display('name')), 'body'=>Table::display( $mo->module_method->find_all(), 25, array( 'id'=>array('label'=>'ID','url'=>URL::link('admin','module_method/edit/')), 'name'=>array('label'=>'Name'), 'notes'=>array('label'=>'Notes'), 'menu_display'=>array('label'=>'Menu'), ), array( 'page'=>TRUE, 'type'=>'list', )), )); // Show new methods NOT defined in the DB already. foreach ($mo->module_method->find_all() as $meo) if (($method = array_search($meo->name,$methods)) !== false) unset($methods[$method]); if (count($methods)) Block::add(array( 'title'=>sprintf('%s: %s ',_('Undefined Module Methods For'),$mo->display('name')), 'body'=>Table::display( $methods, 25, array( '__VALUE__'=>array('label'=>'Name','url'=>URL::link('admin','module_method/add/'.$mo->id)), ), array( 'page'=>TRUE, 'type'=>'list', )), )); } } ?>