mirror of
https://github.com/slawkens/myaac.git
synced 2025-10-14 09:44:55 +02:00
Save towns as plain PHP File in cache folder
+ Also load them on install + on reload items = better performance when in dev mode
This commit is contained in:
134
system/libs/Towns.php
Normal file
134
system/libs/Towns.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?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;
|
||||
}
|
||||
|
||||
$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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user