public static function getPluginModels($plugin) {
        return self::cache(array(__METHOD__, $plugin), function() use ($plugin) {
            $search = 'Model';
            $core = Configure::read('Admin.coreName') ?: 'Core';

            if ($plugin !== $core) {
                $search = $plugin . '.' . $search;
            }

            // Fetch models and filter out AppModel's
            $models = array_filter(App::objects($search), function($value) {
                return (mb_strpos($value, 'AppModel') === false);
            });

            // Filter out models that don't connect to the database or are admin disabled
            $map = array();
            $ignore = Configure::read('Admin.ignoreModels');

            foreach ($models as $model) {
                list($plugin, $model, $id, $class) = Admin::parseName($plugin . '.' . $model);

                if (in_array($id, $ignore)) {
                    continue;
                }

                $object = Admin::introspectModel($id);

                if (!$object) {
                    continue;
                }

                $map[] = array_merge($object->admin, array(
                    'id' => $id,
                    'title' => $object->pluralName,
                    'alias' => $model,
                    'class' => $class,
                    'url' => Inflector::underscore($id),
                    'installed' => Admin::isModelInstalled($id),
                    'group' => $object->useDbConfig
                ));
            }

            return $map;
        });
    }