/** * Gets default aliases from all user-defined controllers. * @param bool $filterWithExisting Whether to filter the result list with existing (recorded in DB). * @return array An array contains information about interfaces. Format of an element: {defaultAlias}=>array({controllerName}, {actionName}). */ public function getInterfaces($filterWithExisting=false) { $interfaces = array(); $controllersDir = Yii::import('application.modules.autoadmin.controllers.*'); if(is_dir($controllersDir)) { $cFiles = CFileHelper::findFiles($controllersDir, array('fileTypes'=>array('php'))); foreach($cFiles as $cfile) { $controllerName = substr($cfile, strrpos($cfile, DIRECTORY_SEPARATOR)+1, -4); $methods = @get_class_methods($controllerName); if($methods) { $controllerID = substr($controllerName, 0, strrpos($controllerName, 'Controller')); foreach($methods as $methodName) { if($methodName == 'actions' || !preg_match('/^action([a-z_]+)$/i', $methodName, $m)) continue; $actionID = $m[1]; $interfaces[AutoAdmin::interfaceID($controllerID, $actionID)] = array($controllerID, $actionID); } } } } if($interfaces && $filterWithExisting) { $exInterfaces = Yii::app()->dbAdmin->createCommand() ->select('id, alias')->from(AutoAdminAccess::sqlAdminTableName('interfaces')) ->queryAll(); foreach($exInterfaces as $exInterface) { if(isset($interfaces[$exInterface['alias']])) unset($interfaces[$exInterface['alias']]); } } return $interfaces; }