/** * Loads a site from the database using its name. * * @param $siteName The name of the site to load. * * @return bool|Site On success return a populated site object. On failure returns false. * @throws InvalidOperationException If database credentials have not been set. */ public static final function loadSite($siteName) { if (is_null(self::$databaseCredentials)) { throw new InvalidOperationException('Database credentials must be set at the class level to allow this action to take place.'); } Dune::setDatabaseCredentials(self::$databaseCredentials); $DBH = call_user_func_array('DatabaseHelper::getInstance', self::$databaseCredentials); if ($siteId = Site::getIdByName($siteName)) { $site = new Site($siteName); } else { return FALSE; } $loadDunesQuery = <<<MYSQL SELECT * FROM dunes d INNER JOIN sites s ON d.site_id = s.site_id WHERE s.site = :site MYSQL; $loadDunesParams = array('site' => $siteName); $loadDunesResult = DatabaseHelper::query($DBH, $loadDunesQuery, $loadDunesParams); while ($duneData = $loadDunesResult->fetch(PDO::FETCH_ASSOC)) { $dune = new Dune(new LatLng($duneData['latitude'], $duneData['longitude']), $duneData['site'], $duneData['toe'], $duneData['crest'], (int) $duneData['dune_id']); $dune->loadTwlTimeSeries(); if ($dune->hasTimeSeries()) { $site->addDune($dune); } } return $site; }