public function getEnvironments(Project $project, $refresh = null, $events = true)
    {
        $projectId = $project->id;

        if (!$refresh && isset(self::$environmentsCache[$projectId])) {
            return self::$environmentsCache[$projectId];
        }

        $cacheKey = 'environments:' . $projectId;
        $cached = $this->cache->fetch($cacheKey);

        if ($refresh === false && !$cached) {
            return [];
        } elseif ($refresh || !$cached) {
            $environments = [];
            $toCache = [];
            foreach ($project->getEnvironments() as $environment) {
                $environments[$environment->id] = $environment;
                $toCache[$environment->id] = $environment->getData();
            }

            // Dispatch an event if the list of environments has changed.
            if ($events && (!$cached || array_diff_key($environments, $cached))) {
                $this->dispatcher->dispatch(
                    'environments_changed',
                    new EnvironmentsChangedEvent($project, $environments)
                );
            }

            $this->cache->save($cacheKey, $toCache, $this->config->get('api.environments_ttl'));
            self::$environmentsCacheRefreshed = true;
        } else {
            $environments = [];
            $endpoint = $project->getUri();
            $guzzleClient = $this->getHttpClient();
            foreach ((array) $cached as $id => $data) {
                $environments[$id] = new Environment($data, $endpoint, $guzzleClient, true);
            }
        }

        self::$environmentsCache[$projectId] = $environments;

        return $environments;
    }
public function getEnvironments(Project $project, $refresh = null, $events = true)
    {
        $projectId = $project->id;

        if (!$refresh && isset(self::$environmentsCache[$projectId])) {
            return self::$environmentsCache[$projectId];
        }

        $cacheKey = 'environments:' . $projectId;
        $cached = $this->cache->fetch($cacheKey);

        if ($refresh === false && !$cached) {
            return [];
        } elseif ($refresh || !$cached) {
            $environments = [];
            $toCache = [];
            foreach ($project->getEnvironments() as $environment) {
                $environments[$environment->id] = $environment;
                $toCache[$environment->id] = $environment->getData();
            }

            // Dispatch an event if the list of environments has changed.
            if ($events && (!$cached || array_diff_key($environments, $cached))) {
                $this->dispatcher->dispatch(
                    'environments_changed',
                    new EnvironmentsChangedEvent($project, $environments)
                );
            }

            $this->cache->save($cacheKey, $toCache, $this->config->get('api.environments_ttl'));
            self::$environmentsCacheRefreshed = true;
        } else {
            $environments = [];
            $endpoint = $project->getUri();
            $guzzleClient = $this->getHttpClient();
            foreach ((array) $cached as $id => $data) {
                $environments[$id] = new Environment($data, $endpoint, $guzzleClient, true);
            }
        }

        self::$environmentsCache[$projectId] = $environments;

        return $environments;
    }
public function getEnvironments ( Project $ project , $ refresh = null , $ events = true ) { $ projectId = $ project -> id ; if ( ! $ refresh && isset ( self :: $ environmentsCache [ $ projectId ] ) ) { return self :: $ environmentsCache [ $ projectId ] ; } $ cacheKey = 'environments:' . $ projectId ; $ cached = $ this -> cache -> fetch ( $ cacheKey ) ; if ( $ refresh === false && ! $ cached ) { return [ ] ; } elseif ( $ refresh || ! $ cached ) { $ environments = [ ] ; $ toCache = [ ] ; foreach ( $ project -> getEnvironments ( ) as $ environment ) { $ environments [ $ environment -> id ] = $ environment ; $ toCache [ $ environment -> id ] = $ environment -> getData ( ) ; } // Dispatch an event if the list of environments has changed. if ( $ events && ( ! $ cached || array_diff_key ( $ environments , $ cached ) ) ) { $ this -> dispatcher -> dispatch ( 'environments_changed' , new EnvironmentsChangedEvent ( $ project , $ environments ) ) ; } $ this -> cache -> save ( $ cacheKey , $ toCache , $ this -> config -> get ( 'api.environments_ttl' ) ) ; self :: $ environmentsCacheRefreshed = true ; } else { $ environments = [ ] ; $ endpoint = $ project -> getUri ( ) ; $ guzzleClient = $ this -> getHttpClient ( ) ; foreach ( ( array ) $ cached as $ id => $ data ) { $ environments [ $ id ] = new Environment ( $ data , $ endpoint , $ guzzleClient , true ) ; } } self :: $ environmentsCache [ $ projectId ] = $ environments ; return $ environments ; }
Return the user's environments.

@param Project   $project The project.
@param bool|null $refresh Whether to refresh the list.
@param bool      $events  Whether to update Drush aliases if the list changes.

@return Environment[] The user's environments, keyed by ID.
Return the user s environments .