3 namespace Org\Mxchange\City\Manager\Entities\Sections;
5 // Load application-specific stuff
6 use Org\Mxchange\City\Manager\BaseManager;
8 // Import framework stuff
9 use Org\Mxchange\CoreFramework\Factory\Database\Frontend\DatabaseFrontendFactory;
10 use Org\Mxchange\CoreFramework\Registry\Registerable;
13 * A city sections manager
15 * @author Roland Haeder <webmaster@ship-simu.org>
17 * @copyright Copyright (c) 2015 - 2023 City Developer Team
18 * @license GNU GPL 3.0 or any newer version
19 * @link http://www.ship-simu.org
21 * This program is free software: you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation, either version 3 of the License, or
24 * (at your option) any later version.
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
31 * You should have received a copy of the GNU General Public License
32 * along with this program. If not, see <http://www.gnu.org/licenses/>.
34 class CitySectionsManager extends BaseManager implements ManageableCitySections, Registerable {
36 * Protected constructor
40 protected function __construct () {
41 // Call parent constructor
42 parent::__construct(__CLASS__);
46 * Creates an instance of this class
48 * @return $managerInstance An instance of a ManageableCitySections class
50 public final static function createCitySectionsManager () {
52 $managerInstance = new CitySectionsManager();
54 // Get database frontend
55 $frontendInstance = DatabaseFrontendFactory::createFrontendByConfiguredName('city_sections_db_frontend_class');
58 $managerInstance->setFrontendInstance($frontendInstance);
60 // Return the prepared instance
61 return $managerInstance;
65 * Checks whether at least one city section requires expansion
67 * @return $requiresExpansion Whether a section requires expansion
70 public function isSectionPendingExpansion () {
71 // Default is no expansion is needed
72 $requireExpansion = FALSE;
74 // First, a simple check if the sections table contains any entries at all
75 if ($this->getFrontendInstance()->countTotalRows() == 0) {
76 // This definedly requires expansion
77 $requireExpansion = TRUE;
81 return $requireExpansion;
85 * Expands any map that requires expansion
89 * @todo z-coordinate not used
91 public function expandMaps () {
92 // Get a city info frontend instance
93 $cityFrontendInstance = DatabaseFrontendFactory::createFrontendByConfiguredName('city_info_db_frontend_class');
95 // Get all city ids from it
96 $cityIds = $cityFrontendInstance->getAllCityIds();
99 foreach ($cityIds as $cityId) {
100 // Does this id have any sections
101 if (!$this->getFrontendInstance()->ifCityHasSections($cityId)) {
102 // Nothing found, so it is a brand-new city that needs first initialization
103 $sections = $this->getFrontendInstance()->doInitialCityExpansion($cityId);
105 // @TODO Maybe some expansion is needed