<?php /** * Project: MyAAC * Automatic Account Creator for Open Tibia Servers * * This is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * @package MyAAC * @author Slawkens <slawkens@gmail.com> * @copyright 2020 MyAAC * @link https://my-aac.org */ /** * Class Towns */ class Towns { /** * @var string */ private static $filename = CACHE . 'towns.php'; /** * Determine towns * * @return array */ public static function determine() { global $db; if($db->hasTable('towns')) { return self::getFromDatabase(); } return self::getFromOTBM(); } /** * Load cached towns file */ public static function load() { $towns = config('towns'); if (file_exists(self::$filename)) { $towns = require self::$filename; } config(['towns', $towns]); } /** * Save into cache file * * @return bool */ public static function save() { $towns = self::determine(); if (count($towns) > 0) { file_put_contents(self::$filename, '<?php return ' . var_export($towns, true) . ';', LOCK_EX); return true; } return false; } /** * Load from OTBM map file * * @return array */ public static function getFromOTBM() { $mapName = configLua('mapName'); if (!isset($mapName)) { $mapName = configLua('map'); $mapFile = config('server_path') . $mapName; } if (strpos($mapName, '.otbm') === false) { $mapName .= '.otbm'; } if (!isset($mapFile)) { $mapFile = config('data_path') . 'world/' . $mapName; } if (strpos($mapFile, '.gz') !== false) { $mapFile = str_replace('.gz', '', $mapFile); } $towns = []; if (file_exists($mapFile)) { ini_set('memory_limit', '-1'); require LIBS . 'TownsReader.php'; $townsReader = new TownsReader($mapFile); $townsReader->load(); $towns = $townsReader->get(); } return $towns; } /** * Load from database * * @return array */ public static function getFromDatabase() { global $db; $query = $db->query('SELECT `id`, `name` FROM `towns`;')->fetchAll(PDO::FETCH_ASSOC); $towns = []; foreach($query as $town) { $towns[$town['id']] = $town['name']; } return $towns; } }