コード例 #1
0
	/**
	 * 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;
	}