From 9e3c1e68bf0bf5f64c298972c3e001310dc988d7 Mon Sep 17 00:00:00 2001 From: Gregory PLANCHAT Date: Mon, 28 May 2012 23:18:54 +0200 Subject: [PATCH] Added application handler Fixed fleet bugs Fixed colonization bug Updated mail handler support Fixed galaxy bugs Updated license block Signed-off-by: Gregory PLANCHAT --- src/admin/declare_list.php | 6 +- src/admin/userlist.php | 6 +- src/application/bootstrap.php | 3 +- .../Empire/Controller/DefenseController.php | 4 - .../Controller/ResearchLabController.php | 4 - .../Empire/Controller/ShipyardController.php | 4 - .../Empire/install/mysql5/install-1.5.0.php | 7 +- .../code/core/Legacies/Stats/Block/View.php | 3 +- src/application/code/core/Wootook.php | 18 +- .../code/core/Wootook/Core/App.php | 16 +- .../core/Wootook/Core/Block/Html/Page.php | 2 +- .../code/core/Wootook/Core/Config/Node.php | 34 +- .../Wootook/Core/Database/Adapter/Adapter.php | 5 + .../Core/Database/Orm/DataMapper/DateTime.php | 2 +- .../Database/Orm/DataMapper/FieldMapper.php | 4 +- .../core/Wootook/Core/Database/Sql/Delete.php | 3 +- .../Core/Database/Sql/DmlFilterableQuery.php | 4 +- .../Database/Sql/Placeholder/Variable.php | 20 + .../Core/Database/Statement/Pdo/Mysql.php | 19 +- .../Core/Database/Statement/Statement.php | 9 +- .../code/core/Wootook/Core/DateTime.php | 24 +- .../code/core/Wootook/Core/Email.php | 55 +- .../core/Wootook/Core/Email/Part/Part.php | 16 + .../Wootook/Core/Email/Transport/Sendmail.php | 162 ++ .../Core/Email/Transport/Transport.php | 22 + .../code/core/Wootook/Core/ErrorProfiler.php | 264 ++- .../Wootook/Core/Mvc/Controller/Front.php | 22 + .../Core/Mvc/Controller/Request/Http.php | 7 +- .../core/Wootook/Core/Mvc/Model/Entity.php | 3 +- .../code/core/Wootook/Core/Mvc/View/View.php | 11 + .../Core/Resource/EntityCollection.php | 21 +- .../Empire/Block/Overview/Fleet/List.php | 77 + .../Empire/Block/Overview/Fleet/List/Item.php | 153 ++ .../code/core/Wootook/Empire/Model/Fleet.php | 105 +- .../code/core/Wootook/Empire/Model/Planet.php | 64 +- .../Empire/Resource/Fleet/Collection.php | 10 +- .../Player/Controller/AccountController.php | 136 +- .../Player/Controller/OverviewController.php | 5 +- .../code/core/Wootook/Player/Model/Entity.php | 78 +- .../Player/Resource/Entity/Collection.php | 5 +- .../core/Wootook/Server/Mvc/Dispatcher.php | 1 + .../code/libraries/Wildfire/Stream.php | 1753 +++++++++++++++++ .../code/test/Legacies/Core/LayoutTest.php | 41 + .../Legacies/Empire/Model/BuilderTest.php | 237 +++ .../code/test/Legacies/ObjectTest.php | 205 ++ src/application/code/test/WootookTest.php | 119 ++ src/application/code/test/bootstrap.php | 66 + .../backend/base/default/layouts/admin.xml | 19 + .../frontend/base/default/layouts/empire.xml | 35 +- .../frontend/base/default/layouts/page.xml | 4 +- .../frontend/base/default/layouts/player.xml | 22 +- .../empire/planet/buildings/queue.phtml | 4 +- .../base/default/scripts/empire/topnav.phtml | 4 +- .../default/scripts/page/2columns-left.phtml | 13 +- .../default/scripts/page/2columns-right.phtml | 13 +- .../base/default/scripts/page/3columns.phtml | 19 +- .../base/default/scripts/player/login.phtml | 2 +- .../scripts/player/lost-password.phtml | 4 +- .../scripts/player/overview/fleet/item.phtml | 60 +- .../scripts/player/overview/fleet/list.phtml | 9 + .../scripts/player/overview/stats/mini.phtml | 11 +- .../default/scripts/player/registration.phtml | 2 +- .../gamedata/legacies/default/events.php | 12 +- src/floten3.php | 22 +- src/includes/bb.class.php | 247 --- src/includes/deprecated.php | 107 +- src/includes/functions/CheckInputStrings.php | 39 - src/includes/functions/DeleteSelectedUser.php | 74 - .../functions/ElementBuildListBox.php | 71 - src/includes/functions/FlyingFleetHandler.php | 108 - src/includes/functions/GalaxyRowPlanet.php | 6 +- .../functions/GalaxyRowPlanetName.php | 40 +- src/includes/functions/GalaxyRowUser.php | 203 +- .../functions/GetMaxConstructibleElements.php | 80 - src/includes/functions/GetRestPrice.php | 75 - .../functions/IsOfficierAccessible.php | 58 - .../functions/IsTechnologieAccessible.php | 58 - .../functions/MissionCaseColonisation.php | 177 +- .../functions/PlanetResourceUpdate.php | 51 - src/includes/functions/SendNewPassword.php | 92 - src/includes/functions/ShowGalaxyRows.php | 136 +- src/includes/functions/SortUserPlanets.php | 52 - .../UpdatePlanetBatimentQueueList.php | 62 - src/includes/todofleetcontrol.php | 56 +- src/new-tables.mysql | 112 -- src/options.php | 2 +- src/overview.php | 301 --- src/reg.php | 110 -- src/skin/frontend/base/default/css/base.css | 17 +- 89 files changed, 4256 insertions(+), 2168 deletions(-) create mode 100644 src/application/code/core/Wootook/Core/Database/Sql/Placeholder/Variable.php create mode 100644 src/application/code/core/Wootook/Core/Email/Part/Part.php create mode 100644 src/application/code/core/Wootook/Core/Email/Transport/Sendmail.php create mode 100644 src/application/code/core/Wootook/Core/Email/Transport/Transport.php create mode 100644 src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List.php create mode 100644 src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List/Item.php create mode 100644 src/application/code/core/Wootook/Server/Mvc/Dispatcher.php create mode 100644 src/application/code/libraries/Wildfire/Stream.php create mode 100644 src/application/code/test/Legacies/Core/LayoutTest.php create mode 100644 src/application/code/test/Legacies/Empire/Model/BuilderTest.php create mode 100644 src/application/code/test/Legacies/ObjectTest.php create mode 100644 src/application/code/test/WootookTest.php create mode 100644 src/application/code/test/bootstrap.php create mode 100644 src/application/design/backend/base/default/layouts/admin.xml create mode 100644 src/application/design/frontend/base/default/scripts/player/overview/fleet/list.phtml delete mode 100644 src/includes/bb.class.php delete mode 100644 src/includes/functions/CheckInputStrings.php delete mode 100644 src/includes/functions/DeleteSelectedUser.php delete mode 100644 src/includes/functions/ElementBuildListBox.php delete mode 100644 src/includes/functions/FlyingFleetHandler.php delete mode 100644 src/includes/functions/GetMaxConstructibleElements.php delete mode 100644 src/includes/functions/GetRestPrice.php delete mode 100644 src/includes/functions/IsOfficierAccessible.php delete mode 100644 src/includes/functions/IsTechnologieAccessible.php delete mode 100644 src/includes/functions/PlanetResourceUpdate.php delete mode 100644 src/includes/functions/SendNewPassword.php delete mode 100644 src/includes/functions/SortUserPlanets.php delete mode 100644 src/includes/functions/UpdatePlanetBatimentQueueList.php delete mode 100644 src/new-tables.mysql delete mode 100644 src/overview.php delete mode 100644 src/reg.php diff --git a/src/admin/declare_list.php b/src/admin/declare_list.php index 92a26e4..6ecc761 100644 --- a/src/admin/declare_list.php +++ b/src/admin/declare_list.php @@ -36,7 +36,11 @@ require_once dirname(dirname(__FILE__)) .'/application/bootstrap.php'; if (in_array($user['authlevel'], array(LEVEL_ADMIN, LEVEL_OPERATOR))) { includeLang('admin'); if ($_GET['cmd'] == 'dele') { - DeleteSelectedUser ( $_GET['user'] ); + $player = new Wootook_Player_Model_Entity(); + $player->load(intval($_GET['user'])); + if ($player->getId()) { + $player->delete(); + } } if ($_GET['cmd'] == 'sort') { $TypeSort = $_GET['type']; diff --git a/src/admin/userlist.php b/src/admin/userlist.php index 232c53c..84fb74f 100644 --- a/src/admin/userlist.php +++ b/src/admin/userlist.php @@ -36,7 +36,11 @@ require_once dirname(dirname(__FILE__)) .'/application/bootstrap.php'; if (in_array($user['authlevel'], array(LEVEL_ADMIN, LEVEL_OPERATOR))) { includeLang('admin'); if ($_GET['cmd'] == 'dele') { - DeleteSelectedUser ( $_GET['user'] ); + $player = new Wootook_Player_Model_Entity(); + $player->load(intval($_GET['user'])); + if ($player->getId()) { + $player->delete(); + } } if ($_GET['cmd'] == 'sort') { $TypeSort = $_GET['type']; diff --git a/src/application/bootstrap.php b/src/application/bootstrap.php index df0ffdc..1154c2a 100644 --- a/src/application/bootstrap.php +++ b/src/application/bootstrap.php @@ -126,7 +126,8 @@ if (!defined('DISABLE_IDENTITY_CHECK')) { exit(0); } - if (!Wootook::getGameConfig('game/general/active') && !in_array($user->getData('authlevel'), array(LEVEL_ADMIN, LEVEL_MODERATOR, LEVEL_OPERATOR))) { + //var_dump(Wootook::getGameConfig('game/general/active')); + if (!Wootook::getGameConfig('game/general/active')/* && !in_array($user->getData('authlevel'), array(LEVEL_ADMIN, LEVEL_MODERATOR, LEVEL_OPERATOR))*/) { $layout = new Wootook_Core_Model_Layout(Wootook_Core_Model_Layout::DOMAIN_FRONTEND); $layout->load('message'); diff --git a/src/application/code/core/Legacies/Empire/Controller/DefenseController.php b/src/application/code/core/Legacies/Empire/Controller/DefenseController.php index 8f3e7d0..b04103d 100644 --- a/src/application/code/core/Legacies/Empire/Controller/DefenseController.php +++ b/src/application/code/core/Legacies/Empire/Controller/DefenseController.php @@ -13,10 +13,6 @@ class Legacies_Empire_Controller_DefenseController { parent::preDispatch(); - if ($this->getResponse()->isDispatched()) { - return; - } - $planet = $this->getCurrentPlanet(); if ($planet->getElement(Legacies_Empire::ID_BUILDING_SHIPYARD) < 1) { diff --git a/src/application/code/core/Legacies/Empire/Controller/ResearchLabController.php b/src/application/code/core/Legacies/Empire/Controller/ResearchLabController.php index 06f78af..0650172 100644 --- a/src/application/code/core/Legacies/Empire/Controller/ResearchLabController.php +++ b/src/application/code/core/Legacies/Empire/Controller/ResearchLabController.php @@ -13,10 +13,6 @@ class Legacies_Empire_Controller_ResearchLabController { parent::preDispatch(); - if ($this->getResponse()->isDispatched()) { - return; - } - $planet = $this->getCurrentPlanet(); if ($planet->getElement(Legacies_Empire::ID_BUILDING_SHIPYARD) < 1) { diff --git a/src/application/code/core/Legacies/Empire/Controller/ShipyardController.php b/src/application/code/core/Legacies/Empire/Controller/ShipyardController.php index 20d8724..ebf7b90 100644 --- a/src/application/code/core/Legacies/Empire/Controller/ShipyardController.php +++ b/src/application/code/core/Legacies/Empire/Controller/ShipyardController.php @@ -13,10 +13,6 @@ class Legacies_Empire_Controller_ShipyardController { parent::preDispatch(); - if ($this->getResponse()->isDispatched() || $this->getResponse()->isRedirect()) { - return; - } - $planet = $this->getCurrentPlanet(); if ($planet->getElement(Legacies_Empire::ID_BUILDING_SHIPYARD) < 1) { diff --git a/src/application/code/core/Legacies/Empire/install/mysql5/install-1.5.0.php b/src/application/code/core/Legacies/Empire/install/mysql5/install-1.5.0.php index 53d982c..c4fc32e 100644 --- a/src/application/code/core/Legacies/Empire/install/mysql5/install-1.5.0.php +++ b/src/application/code/core/Legacies/Empire/install/mysql5/install-1.5.0.php @@ -160,14 +160,13 @@ CREATE TABLE IF NOT EXISTS {$this->getTableName('fleets')} ( `fleet_end_system` SMALLINT UNSIGNED NOT NULL, `fleet_end_planet` TINYINT UNSIGNED NOT NULL, `fleet_end_type` TINYINT UNSIGNED NOT NULL, - `fleet_taget_owner` BIGINT UNSIGNED NOT NULL, + `fleet_target_owner` BIGINT UNSIGNED NOT NULL, `fleet_resource_metal` DECIMAL(65,0) NOT NULL DEFAULT 0, `fleet_resource_crystal` DECIMAL(65,0) NOT NULL DEFAULT 0, `fleet_resource_deuterium` DECIMAL(65,0) NOT NULL DEFAULT 0, - `fleet_target_owner` BIGINT UNSIGNED NOT NULL, `fleet_group` BIGINT UNSIGNED NOT NULL, `fleet_mess` BIGINT UNSIGNED NOT NULL, - `start_time` INT, + `start_time` TIMESTAMP NOT NULL, PRIMARY KEY (`fleet_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; SQL_EOF; @@ -286,7 +285,7 @@ CREATE TABLE IF NOT EXISTS {$this->getTableName('planets')} ( `planet` TINYINT UNSIGNED NOT NULL, `last_update` DATETIME NOT NULL, `planet_type` TINYINT UNSIGNED NOT NULL, - `destruyed` BOOL NOT NULL DEFAULT FALSE, + `destruyed` INT UNSIGNED NOT NULL DEFAULT FALSE, `b_building` DATETIME NOT NULL, `b_building_id` TEXT NOT NULL, `b_tech` DATETIME NOT NULL, diff --git a/src/application/code/core/Legacies/Stats/Block/View.php b/src/application/code/core/Legacies/Stats/Block/View.php index f1a830b..d966318 100644 --- a/src/application/code/core/Legacies/Stats/Block/View.php +++ b/src/application/code/core/Legacies/Stats/Block/View.php @@ -22,7 +22,7 @@ class Legacies_Stats_Block_View return $this->_statData; } - public function getPlayerStatData($type) + public function getPlayerStatData() { if (empty($this->_statData)) { $playerId = Wootook_Player_Model_Session::getSingleton()->getPlayerId(); @@ -31,7 +31,6 @@ class Legacies_Stats_Block_View $statement = $readAdapter->select() ->from($readAdapter->getTable('statpoints')) - ->where('stat_type', $type) ->where('id_owner', $playerId) ->prepare() ; diff --git a/src/application/code/core/Wootook.php b/src/application/code/core/Wootook.php index a7dc9ca..e427d1d 100644 --- a/src/application/code/core/Wootook.php +++ b/src/application/code/core/Wootook.php @@ -189,6 +189,11 @@ class Wootook return Wootook_Core_Model_Session::factory($namespace); } + /** + * @static + * @param string|null $locale + * @return Wootook_Core_Model_Translator + */ public static function getTranslator($locale = null) { if ($locale === null) { @@ -381,7 +386,7 @@ class Wootook } try { - $adapter = Wootook_Core_Database_ConnectionManager::getSingleton() + $adapter = Wootook_Core_Database_ConnectionManager::getSingleton() ->getConnection('core_read'); } catch (Wootook_Core_Exception_Database_AdapterError $e) { self::$isInstalled = false; @@ -394,24 +399,21 @@ class Wootook switch ($type) { case 'website': $select->where(new Wootook_Core_Database_Sql_Placeholder_Expression('website_id = :website_id', array('website_id' => $model->getId()))); - $statement = $adapter->prepare($select); - $statement->execute(); break; case 'game': $select->where(new Wootook_Core_Database_Sql_Placeholder_Expression('game_id = :game_id', array('game_id' => $model->getId()))); - $statement = $adapter->prepare($select); - $statement->execute(); break; default: $select->where('website_id', 0); $select->where('game_id', 0); - $statement = $adapter->prepare($select); - $statement->execute(); break; } + $statement = $select->prepare(); + $statement->execute(); + foreach ($statement as $row) { $config->setConfig($row['config_path'], $row['config_value']); } @@ -598,6 +600,7 @@ class Wootook if (self::$_config === null) { self::loadConfig(); } + if (!self::$isInstalled) { if (isset(self::$_config['default'])) { self::$_gameConfigs[Wootook_Core_Model_Game::DEFAULT_CODE] = clone self::$_config['default']; @@ -781,6 +784,7 @@ class Wootook $queryParams = array(); if (isset($params['_query'])) { $queryParams = $params['_query']; + unset($params['_query']); } $serializedParams = array(); diff --git a/src/application/code/core/Wootook/Core/App.php b/src/application/code/core/Wootook/Core/App.php index 6bf2c02..e21368a 100644 --- a/src/application/code/core/Wootook/Core/App.php +++ b/src/application/code/core/Wootook/Core/App.php @@ -112,44 +112,44 @@ class Wootook_Core_App return $this->_newInstance($className, $constructorParams); } - public function getModel($module, $class) + public function getModel($module, $class, Array $constructorParams = array()) { $className = $this->_resolveClassType($this->_globalConfig->models, $module, $class); return $this->_newInstance($className, $constructorParams); } - public function getResource($module, $class) + public function getResource($module, $class, Array $constructorParams = array()) { $className = $this->_resolveClassType($this->_globalConfig->resources, $module, $class); return $this->_newInstance($className, $constructorParams); } - public function getHelper($module, $class) + public function getHelper($module, $class, Array $constructorParams = array()) { $className = $this->_resolveClassType($this->_globalConfig->helpers, $module, $class); return $this->_newInstance($className, $constructorParams); } - public function getBlockSingleton($module, $class) + public function getBlockSingleton($module, $class, Array $constructorParams = array()) { } - public function getModelSingleton($module, $class) + public function getModelSingleton($module, $class, Array $constructorParams = array()) { } - public function getResourceSingleton($module, $class) + public function getResourceSingleton($module, $class, Array $constructorParams = array()) { } - public function getHelperSingleton($module, $class) + public function getHelperSingleton($module, $class, Array $constructorParams = array()) { } -} \ No newline at end of file +} diff --git a/src/application/code/core/Wootook/Core/Block/Html/Page.php b/src/application/code/core/Wootook/Core/Block/Html/Page.php index b2879f8..12c7775 100644 --- a/src/application/code/core/Wootook/Core/Block/Html/Page.php +++ b/src/application/code/core/Wootook/Core/Block/Html/Page.php @@ -16,4 +16,4 @@ class Wootook_Core_Block_Html_Page return $this; } -} \ No newline at end of file +} diff --git a/src/application/code/core/Wootook/Core/Config/Node.php b/src/application/code/core/Wootook/Core/Config/Node.php index c35b58b..309c1cf 100644 --- a/src/application/code/core/Wootook/Core/Config/Node.php +++ b/src/application/code/core/Wootook/Core/Config/Node.php @@ -1,7 +1,7 @@ _children[$offset]); } } -} \ No newline at end of file + + public function valid() + { + return key($this->_children); + } + + public function next() + { + next($this->_children); + } + + public function current() + { + return current($this->_children); + } + + public function rewind() + { + reset($this->_children); + } + + public function key() + { + return key($this->_children); + } + + public function count() + { + return count($this->_children); + } +} diff --git a/src/application/code/core/Wootook/Core/Database/Adapter/Adapter.php b/src/application/code/core/Wootook/Core/Database/Adapter/Adapter.php index c101d6a..41d8bdb 100644 --- a/src/application/code/core/Wootook/Core/Database/Adapter/Adapter.php +++ b/src/application/code/core/Wootook/Core/Database/Adapter/Adapter.php @@ -11,6 +11,11 @@ abstract class Wootook_Core_Database_Adapter_Adapter return $this->_handler; } + public function getDataMapper() + { + return new Wootook_Core_Database_Orm_DataMapper(); + } + /** * * @param string $prefix diff --git a/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/DateTime.php b/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/DateTime.php index 4217302..1e37d12 100644 --- a/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/DateTime.php +++ b/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/DateTime.php @@ -35,4 +35,4 @@ class Wootook_Core_Database_Orm_DataMapper_DateTime { return new Wootook_Core_DateTime($value, $this->getFormat()); } -} \ No newline at end of file +} diff --git a/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/FieldMapper.php b/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/FieldMapper.php index 6161033..a7e989c 100644 --- a/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/FieldMapper.php +++ b/src/application/code/core/Wootook/Core/Database/Orm/DataMapper/FieldMapper.php @@ -4,7 +4,7 @@ abstract class Wootook_Core_Database_Orm_DataMapper_FieldMapper { protected $_mapper = null; - public function __construct(Wootook_Core_Database_Orm_DataMapper $mapper) + public function __construct(Wootook_Core_Database_Orm_DataMapper $mapper = null) { $this->_mapper = $mapper; } @@ -12,4 +12,4 @@ abstract class Wootook_Core_Database_Orm_DataMapper_FieldMapper abstract public function encode($value); abstract public function decode($value); -} \ No newline at end of file +} diff --git a/src/application/code/core/Wootook/Core/Database/Sql/Delete.php b/src/application/code/core/Wootook/Core/Database/Sql/Delete.php index 9a905e8..84d8e37 100644 --- a/src/application/code/core/Wootook/Core/Database/Sql/Delete.php +++ b/src/application/code/core/Wootook/Core/Database/Sql/Delete.php @@ -74,8 +74,9 @@ class Wootook_Core_Database_Sql_Delete public function renderFrom() { if ($this->_parts[self::FROM]['schema'] !== null) { - return "DELETE FROM {$this->getConnection()->quoteIdentifier($this->_parts[self::FROM]['schema'])}.{$this->getConnection()->quoteIdentifier($this->_parts[self::FROM]['schema'])}"; + return "DELETE FROM {$this->getConnection()->quoteIdentifier($this->_parts[self::FROM]['schema'])}.{$this->getConnection()->quoteIdentifier($this->_parts[self::FROM]['table'])}"; } + return "DELETE FROM {$this->getConnection()->quoteIdentifier($this->_parts[self::FROM]['table'])}"; } public function render() diff --git a/src/application/code/core/Wootook/Core/Database/Sql/DmlFilterableQuery.php b/src/application/code/core/Wootook/Core/Database/Sql/DmlFilterableQuery.php index 565143a..6ca3730 100644 --- a/src/application/code/core/Wootook/Core/Database/Sql/DmlFilterableQuery.php +++ b/src/application/code/core/Wootook/Core/Database/Sql/DmlFilterableQuery.php @@ -183,7 +183,7 @@ abstract class Wootook_Core_Database_Sql_DmlFilterableQuery $dateValues = array(); if (isset($value['from'])) { if ($value['from'] instanceof Wootook_Core_DateTime) { - $dateValues['from'] = "{$adapter->quoteIdentifier($field)} >= {$adapter->quote($this->getDataMapper()->load('DateTime')->encode($value['from']))}"; + $dateValues['from'] = "{$adapter->quoteIdentifier($field)} >= {$adapter->quote($this->getConnection()->getDataMapper()->load('DateTime')->encode($value['from']))}"; } else if (is_string($value['from'])) { $dateValues['from'] = "{$adapter->quoteIdentifier($field)} >= {$adapter->quote($value['from'])}"; } else if (is_numeric($value['from'])) { @@ -192,7 +192,7 @@ abstract class Wootook_Core_Database_Sql_DmlFilterableQuery } if (isset($value['to'])) { if ($value['to'] instanceof Wootook_Core_DateTime) { - $dateValues['to'] = "{$adapter->quoteIdentifier($field)} <= {$adapter->quote($this->getDataMapper()->load('DateTime')->encode($value['to']))}"; + $dateValues['to'] = "{$adapter->quoteIdentifier($field)} <= {$adapter->quote($this->getConnection()->getDataMapper()->load('DateTime')->encode($value['to']))}"; } else if (is_string($value['to'])) { $dateValues['to'] = "{$adapter->quoteIdentifier($field)} <= {$adapter->quote($value['to'])}"; } else if (is_numeric($value['to'])) { diff --git a/src/application/code/core/Wootook/Core/Database/Sql/Placeholder/Variable.php b/src/application/code/core/Wootook/Core/Database/Sql/Placeholder/Variable.php new file mode 100644 index 0000000..04e4217 --- /dev/null +++ b/src/application/code/core/Wootook/Core/Database/Sql/Placeholder/Variable.php @@ -0,0 +1,20 @@ +_paramName = $paramName; + $this->_paramType = $type; + } + + public function __toString() + { + return ':' . $this->_paramName; + } +} diff --git a/src/application/code/core/Wootook/Core/Database/Statement/Pdo/Mysql.php b/src/application/code/core/Wootook/Core/Database/Statement/Pdo/Mysql.php index 675fa7e..33b243d 100644 --- a/src/application/code/core/Wootook/Core/Database/Statement/Pdo/Mysql.php +++ b/src/application/code/core/Wootook/Core/Database/Statement/Pdo/Mysql.php @@ -3,6 +3,9 @@ class Wootook_Core_Database_Statement_Pdo_Mysql extends Wootook_Core_Database_Statement_Statement { + /** + * @var PDOStatement + */ protected $_handler = null; protected $_query = null; @@ -114,8 +117,20 @@ class Wootook_Core_Database_Statement_Pdo_Mysql */ public function fetchAll($style = null, $col = null) { - throw new Wootook_Core_Exception_Database_StatementError($this, 'Unimplemented', null, $e); - return array(); + try { + if ($style !== null) { + if ($col !== null) { + $result = $this->_handler->fetchAll($style, $col); + } else { + $result = $this->_handler->fetchAll($style); + } + } else { + $result = $this->_handler->fetchAll($style); + } + } catch (PDOException $e) { + throw new Wootook_Core_Exception_Database_StatementError($this, $e->getMessage(), null, $e); + } + return $result; } /** diff --git a/src/application/code/core/Wootook/Core/Database/Statement/Statement.php b/src/application/code/core/Wootook/Core/Database/Statement/Statement.php index a9b2fef..9e8875f 100644 --- a/src/application/code/core/Wootook/Core/Database/Statement/Statement.php +++ b/src/application/code/core/Wootook/Core/Database/Statement/Statement.php @@ -100,7 +100,9 @@ abstract class Wootook_Core_Database_Statement_Statement } $data = $this->fetch(Wootook_Core_Database_ConnectionManager::FETCH_ASSOC); - $object->getDataMapper()->decode($object, $data); + if ($data !== false) { + $object->getDataMapper()->decode($object, $data); + } return $object; } @@ -202,11 +204,12 @@ abstract class Wootook_Core_Database_Statement_Statement public function rewind() { - return $this->_currentIndex = 0; + return $this->_currentIndex; } public function valid() { - return $this->_currentRow !== null; + $rows = $this->rowCount(); + return $rows > 0 && $this->_currentIndex <= $rows; } } diff --git a/src/application/code/core/Wootook/Core/DateTime.php b/src/application/code/core/Wootook/Core/DateTime.php index 3f201dc..06a6d79 100644 --- a/src/application/code/core/Wootook/Core/DateTime.php +++ b/src/application/code/core/Wootook/Core/DateTime.php @@ -143,14 +143,14 @@ class Wootook_Core_DateTime case self::SECOND: $current = getdate($this->_datetime); if ($type === self::OPERATOR_ADD) { - $parts = $current[$part] += $value; + $current[$part] += $value; } else if ($type === self::OPERATOR_SUB) { - $parts = $current[$part] -= $value; + $current[$part] -= $value; } else if ($type === self::OPERATOR_SET) { - $parts = $current[$part] = $value; + $current[$part] = $value; } - $this->_datetime = $this->_mktime($parts); + $this->_datetime = $this->_mktime($current); break; case self::TIMESTAMP: @@ -173,6 +173,22 @@ class Wootook_Core_DateTime return $this->_datetime - $date->_datetime; } + public function isEarlier(self $date = null) + { + if ($date === null) { + $date = new self(); + } + return (bool) ($this->diff($date) > 0); + } + + public function isLater(self $date = null) + { + if ($date === null) { + $date = new self(); + } + return (bool) ($this->diff($date) < 0); + } + protected function _mktime(Array $parts) { return mktime($parts[self::HOUR], $parts[self::MINUTE], $parts[self::SECOND], diff --git a/src/application/code/core/Wootook/Core/Email.php b/src/application/code/core/Wootook/Core/Email.php index 0dfcba4..e94331e 100644 --- a/src/application/code/core/Wootook/Core/Email.php +++ b/src/application/code/core/Wootook/Core/Email.php @@ -2,30 +2,49 @@ class Wootook_Core_Email { - protected static $_defaultHeadrs = array( - ); + /** + * @var Wootook_Core_Email_Transport_Transport + */ + protected $_transport = null; - protected $_headers = array(); + public function __construct(Wootook_Core_Email_Transport_Transport $transport = null) + { + if ($transport === null) { + $transport = new Wootook_Core_Email_Transport_Sendmail(); + } + $this->setTransport($transport); + } + + public function setTransport(Wootook_Core_Email_Transport_Transport $transport) + { + $this->_transport = $transport; + } + + /** + * @return Wootook_Core_Email_Transport_Transport + */ + public function getTransport() + { + return $this->_transport; + } public function send($to, $from, $subject, $body, Array $headers = array()) { - $this->_prepareHeaders($headers); - } - - public function setHeader($name, $value) - { - $this->_headers[$name] = $value; - } - - protected function _prepareHeaders($headers) - { - foreach ($headers as $name => $value) { - $this->setHeader($name, $value); + try { + $this->_transport + ->addRecipient($to) + ->setFrom($from) + ->setSubject($subject) + ->addPart(new Wootook_Core_Email_Part_Part($body)) + ->addHeaders($headers) + ->connect() + ->send() + ; + } catch (Wootook_Core_Exception_RuntimeException $e) { + throw new Wootook_Core_Exception_RuntimeException('Could not send mail.', null, $e); } - $this->addHeader('X-Mailer', 'PHP/' . PHP_VERSION . ' Wootook/' . VERSION); - $this->addHeader('Content-Transfer-Encoding', '7bit'); - $this->addHeader('Content-Type', 'text/plain; charset=utf-8'); + $this->_transport->disconnect(); return $this; } diff --git a/src/application/code/core/Wootook/Core/Email/Part/Part.php b/src/application/code/core/Wootook/Core/Email/Part/Part.php new file mode 100644 index 0000000..563a051 --- /dev/null +++ b/src/application/code/core/Wootook/Core/Email/Part/Part.php @@ -0,0 +1,16 @@ +_content = $content; + } + + public function render() + { + return $this->_content; + } +} \ No newline at end of file diff --git a/src/application/code/core/Wootook/Core/Email/Transport/Sendmail.php b/src/application/code/core/Wootook/Core/Email/Transport/Sendmail.php new file mode 100644 index 0000000..165247a --- /dev/null +++ b/src/application/code/core/Wootook/Core/Email/Transport/Sendmail.php @@ -0,0 +1,162 @@ +_prepareHeaders(); + } + + public function setFrom($from) + { + if (is_array($from)) { + $this->_from = sprintf('"%s" <%s>', $this->_formatUnicode(current($from)), key($from)); + } else { + $this->_from = $from; + } + return $this; + } + + public function clearFrom() + { + $this->_from = null; + + return $this; + } + + public function addRecipient($recipient) + { + if (is_array($recipient)) { + foreach ($recipient as $email => $name) { + $this->_recipients[] = sprintf('"%s" <%s>', $this->_formatUnicode($name), $email); + } + } else { + $this->_recipients[] = $recipient; + } + return $this; + } + + public function clearRecipients() + { + $this->_recipients = array(); + + return $this; + } + + public function setSubject($subject) + { + $this->_subject = $this->_formatUnicode($subject); + + return $this; + } + + public function clearSubject() + { + $this->_subject = null; + + return $this; + } + + public function addHeader($name, $value) + { + $this->_headers[$name] = $value; + + return $this; + } + + public function addHeaders($headers) + { + foreach ($headers as $name => $value) { + $this->_headers[$name] = $value; + } + + return $this; + } + + public function clearHeaders() + { + $this->_headers = array(); + + return $this; + } + + public function addPart(Wootook_Core_Email_Part_Part $part) + { + $this->_parts[] = $part; + + return $this; + } + + public function clearParts() + { + $this->_parts = array(); + + return $this; + } + + protected function _formatUnicode($string) + { + return '=?UTF-8?B?' . base64_encode($string) . '?='; + } + + protected function _prepareHeaders(Array $headers = array()) + { + $this->addHeader('MIME-Version', '1.0'); + + foreach ($headers as $name => $value) { + $this->setHeader($name, $value); + } + + $this->addHeader('X-Mailer', 'PHP/' . PHP_VERSION . ' Wootook/' . VERSION); + $this->addHeader('Content-Transfer-Encoding', '8bit'); + $this->addHeader('Content-Type', 'text/plain; charset=utf-8; format=flowed'); + + return $this; + } + + public function reset() + { + $this->clearHeaders(); + $this->clearParts(); + $this->clearFrom(); + $this->clearRecipients(); + $this->clearSubject(); + + return $this; + } + + public function connect() + { + return $this; + } + + public function disconnect() + { + return $this; + } + + public function send() + { + $content = ''; + foreach ($this->_parts as $part) { + $content .= $part->render(); + } + + $this->addHeader('To', implode(',', $this->_recipients)); + + if (!mail(implode(',', $this->_recipients), $this->_subject, $content, implode("\r\n", $this->_headers))) { + throw new Wootook_Core_Exception_RuntimeException('Could not send mail.'); + } + + return $this; + } +} \ No newline at end of file diff --git a/src/application/code/core/Wootook/Core/Email/Transport/Transport.php b/src/application/code/core/Wootook/Core/Email/Transport/Transport.php new file mode 100644 index 0000000..fed059e --- /dev/null +++ b/src/application/code/core/Wootook/Core/Email/Transport/Transport.php @@ -0,0 +1,22 @@ +_errors[] = array( @@ -77,7 +80,8 @@ class Wootook_Core_ErrorProfiler 'message' => $errstr, 'file' => $errfile, 'line' => $errline, - 'context' => $errcontext + 'context' => $errcontext, + 'trace' => $trace ); break; @@ -89,7 +93,8 @@ class Wootook_Core_ErrorProfiler 'message' => $errstr, 'file' => $errfile, 'line' => $errline, - 'context' => $errcontext + 'context' => $errcontext, + 'trace' => $trace ); break; @@ -101,7 +106,8 @@ class Wootook_Core_ErrorProfiler 'message' => $errstr, 'file' => $errfile, 'line' => $errline, - 'context' => $errcontext + 'context' => $errcontext, + 'trace' => $trace ); break; @@ -116,7 +122,8 @@ class Wootook_Core_ErrorProfiler 'message' => $errstr, 'file' => $errfile, 'line' => $errline, - 'context' => $errcontext + 'context' => $errcontext, + 'trace' => $trace ); break; } @@ -172,10 +179,87 @@ Type: {$code} Message: {$error['message']} File: {$error['file']} Line: {$error['line']} -\n + +{$this->_renderBacktrace($error['trace'])} + ERROR_EOF; } + protected function _renderBacktrace(Array $traces) + { + $output = '
';
+        foreach (array_slice($traces, 1) as $key => $trace) {
+            if (preg_match('#^(include|require)(_once)?$#', $trace['function'])) {
+                $output .= sprintf("#%d %s(%s) called at [%s:%s]\n",
+                    $key, $trace['function'], $trace['args'][0], $trace['file'], $trace['line']);
+            } else if (!isset($trace['file']) || !isset($trace['line'])) {
+                if (isset($trace['class'])) {
+                    $output .= sprintf("#%d Internal function %s%s%s(%s)\n",
+                        $key, $trace['class'], $trace['type'], $trace['function'], implode(', ', $this->_formatArgs($trace['args'])));
+                } else {
+                    $output .= sprintf("#%d Internal function %s(%s)\n",
+                        $key, $trace['function'], implode(', ', $this->_formatArgs($trace['args'])));
+                }
+            } else {
+                if (isset($trace['class'])) {
+                    $output .= sprintf("#%d %s%s%s(%s) called at [%s:%s]\n",
+                        $key, $trace['class'], $trace['type'], $trace['function'], implode(', ', $this->_formatArgs($trace['args'])), $trace['file'], $trace['line']);
+                } else {
+                    $output .= sprintf("#%d %s(%s) called at [%s:%s]\n",
+                        $key, $trace['function'], implode(', ', $this->_formatArgs($trace['args'])), $trace['file'], $trace['line']);
+                }
+            }
+        }
+        return $output . '
'; + } + + private function _formatArgs($args) + { + $argumentList = array(); + foreach ($args as $argument) { + if (is_object($argument)) { + $argumentList[] = get_class($argument); + } else if (is_array($argument)) { + $keys = array_keys($argument); + $values = $this->_formatArgs($argument); + + $length = count($values); + $output = array(); + for ($index = 0; $index < $length; $index++) { + $output[] = sprintf('[%s] => %s', $keys[$index], $values[$index]); + } + + $argumentList[] = '[' . implode(', ', $output) . ']'; + } else { + $argumentList[] = var_export($argument, true); + } + } + + return $argumentList; + } + + protected function _renderConfig(Wootook_Core_Config_Node $config, $level = 0) + { + $output = ''; + + return $output; + } + public function shutdownManager() { if ($this->_mute === true) { @@ -185,66 +269,140 @@ ERROR_EOF; $index = 0; echo '
'; echo '

Debug profiler

'; - if (count($this->_errors) <= 0 && count($this->_warnings) <= 0 && - count($this->_notices) <= 0 && count($this->_otherErrors) <= 0 && - count($this->_exceptions) <= 0) { - echo '

Error profiler was empty.

'; - } else { - echo '
'; - foreach ($this->_errors as $error) { - ++$index; - echo '

Message #' . $index . '

'; - echo '
';
-                echo $this->_renderError($index, $error);
-                echo '
'; - } - foreach ($this->_warnings as $error) { + echo '
'; + echo '
'; + echo ''; + echo '
'; + foreach ($this->_errors as $error) { + ++$index; + echo '

Message #' . $index . '

'; + echo '
';
+            echo $this->_renderError($index, $error);
+            echo '
'; + } + echo '
'; + echo ''; + echo '
'; + foreach ($this->_warnings as $error) { + ++$index; + echo '

Message #' . $index . '

'; + echo '
';
+            echo $this->_renderError($index, $error);
+            echo '
'; + } + echo '
'; + echo ''; + echo '
'; + foreach ($this->_notices as $error) { + ++$index; + echo '

Message #' . $index . '

'; + echo '
';
+            echo $this->_renderError($index, $error);
+            echo '
'; + } + echo '
'; + foreach ($this->_otherErrors as $errno => $errorList) { + echo ''; + echo '
'; + foreach ($errorList as $error) { ++$index; echo '

Message #' . $index . '

'; echo '
';
                 echo $this->_renderError($index, $error);
                 echo '
'; } - foreach ($this->_notices as $error) { - ++$index; - echo '

Message #' . $index . '

'; - echo '
';
-                echo $this->_renderError($index, $error);
-                echo '
'; - } - foreach ($this->_otherErrors as $errorList) { - foreach ($errorList as $error) { - ++$index; - echo '

Message #' . $index . '

'; - echo '
';
-                    echo $this->_renderError($index, $error);
-                    echo '
'; - } - } - foreach ($this->_exceptions as $exception) { - ++$index; - echo '

Message #' . $index . '

'; - echo '
';
-                echo $exception->getMessage() . PHP_EOL;
-                echo $exception->getTraceAsString() . PHP_EOL;
-                echo '
'; + echo '
'; + } + echo ''; + echo '
'; + foreach ($this->_exceptions as $exception) { + ++$index; + echo '

Message #' . $index . '

'; + echo '
';
+            echo $exception->getMessage() . PHP_EOL;
+            echo $exception->getTraceAsString() . PHP_EOL;
+            echo '
'; - $child = 0; - $current = $exception; - while (($current = $current->getPrevious()) !== null) { - $child++; - echo '

Message #' . $index . ', child level #' . $child . '

'; - echo '
';
-                    echo $current->getMessage() . PHP_EOL;
-                    echo $current->getTraceAsString() . PHP_EOL;
-                    echo PHP_EOL;
-                    echo '
'; - } + $child = 0; + $current = $exception; + while (($current = $current->getPrevious()) !== null) { + $child++; + echo '

Message #' . $index . ', child level #' . $child . '

'; + echo '
';
+                echo $current->getMessage() . PHP_EOL;
+                echo $current->getTraceAsString() . PHP_EOL;
                 echo PHP_EOL;
+                echo '
'; } echo '
'; } echo '
'; + echo << +(function(){ +var sections = jQuery('.error-profiler'); +sections.each(function(){ + var element = jQuery(this); + element.hide(); + }); + +jQuery('.error-profiler-link').click(function(e){ + var rel = jQuery(this).attr('rel'); + sections.each(function(){ + var element = jQuery(this); + if (element.hasClass(rel) && !element.hasClass('opened')) { + element.slideDown(500, function(){element.addClass('opened');}); + } else { + element.slideUp(500, function(){element.removeClass('opened');}); + } + }); + }); +})(); + +JS_EOF; + echo '

Configuration profiler

'; + echo ''; + echo '
'; + $config = clone Wootook::getConfig(); + foreach ($config->getConfig('resource/database') as $node) { + if ($node->params) { + $node->params->reset(); + } + } + echo $this->_renderConfig(Wootook::getConfig(), 0); + echo '
'; + echo ''; + echo '
'; + echo $this->_renderConfig(Wootook::getWebsiteConfig()); + echo '
'; + echo ''; + echo '
'; + echo $this->_renderConfig(Wootook::getGameConfig()); + echo '
'; + echo '
'; + echo << +(function(){ +var sections = jQuery('.config-profiler'); +sections.each(function(){ + var element = jQuery(this); + element.hide(); + }); + +jQuery('.config-profiler-link').click(function(e){ + var rel = jQuery(this).attr('rel'); + sections.each(function(){ + var element = jQuery(this); + if (element.hasClass(rel) && !element.hasClass('opened')) { + element.slideDown(500, function(){element.addClass('opened');}); + } else { + element.slideUp(500, function(){element.removeClass('opened');}); + } + }); + }); +})(); + +JS_EOF; } public static function register() diff --git a/src/application/code/core/Wootook/Core/Mvc/Controller/Front.php b/src/application/code/core/Wootook/Core/Mvc/Controller/Front.php index 7823ea3..6c6b20f 100644 --- a/src/application/code/core/Wootook/Core/Mvc/Controller/Front.php +++ b/src/application/code/core/Wootook/Core/Mvc/Controller/Front.php @@ -197,6 +197,7 @@ class Wootook_Core_Mvc_Controller_Front $this->_response->setIsDispatched(); + $this->preDispatch(); $controller->preDispatch(); if (!$this->_response->isDispatched()) { continue; @@ -212,6 +213,7 @@ class Wootook_Core_Mvc_Controller_Front } $controller->postDispatch(); + $this->postDispatch(); if ($this->_response->isDispatched() || $this->_response->isRedirect()) { break; @@ -246,4 +248,24 @@ class Wootook_Core_Mvc_Controller_Front return $this; } + + public function preDispatch() + { + Wootook::dispatchEvent('core.mvc.controller.front.pre-dispatch', array( + 'request' => $this->_request, + 'response' => $this->_response + )); + + return $this; + } + + public function postDispatch() + { + Wootook::dispatchEvent('core.mvc.controller.front.post-dispatch', array( + 'request' => $this->_request, + 'response' => $this->_response + )); + + return $this; + } } diff --git a/src/application/code/core/Wootook/Core/Mvc/Controller/Request/Http.php b/src/application/code/core/Wootook/Core/Mvc/Controller/Request/Http.php index b41a7e1..3780a37 100644 --- a/src/application/code/core/Wootook/Core/Mvc/Controller/Request/Http.php +++ b/src/application/code/core/Wootook/Core/Mvc/Controller/Request/Http.php @@ -32,7 +32,12 @@ class Wootook_Core_Mvc_Controller_Request_Http $params = ''; if (($offset = strpos($this->getServer('REQUEST_URI'), $baseUri)) !== false) { - $path = substr($this->getServer('REQUEST_URI'), $offset + strlen($baseUri)); + $queryParamsOffset = strpos($this->getServer('REQUEST_URI'), '?'); + if ($queryParamsOffset !== false) { + $path = substr($this->getServer('REQUEST_URI'), $offset + strlen($baseUri), $queryParamsOffset - $offset - 1); + } else { + $path = substr($this->getServer('REQUEST_URI'), $offset + strlen($baseUri)); + } $moduleOffset = strpos($path, '/'); if ($moduleOffset !== false) { diff --git a/src/application/code/core/Wootook/Core/Mvc/Model/Entity.php b/src/application/code/core/Wootook/Core/Mvc/Model/Entity.php index 06a4181..2c19005 100644 --- a/src/application/code/core/Wootook/Core/Mvc/Model/Entity.php +++ b/src/application/code/core/Wootook/Core/Mvc/Model/Entity.php @@ -59,11 +59,12 @@ abstract class Wootook_Core_Mvc_Model_Entity if (!is_array($datas) || empty($datas)) { throw new Wootook_Core_Exception_DataAccessException('Could not load data: this id could not be found.'); } + $realId = $datas[$this->getIdFieldName()]; unset($datas[$this->getIdFieldName()]); $this->_data = array(); $this->getDataMapper()->decode($this, $datas); - $this->setId($id); + $this->setId($realId); return $this; } diff --git a/src/application/code/core/Wootook/Core/Mvc/View/View.php b/src/application/code/core/Wootook/Core/Mvc/View/View.php index b68ef69..4847061 100644 --- a/src/application/code/core/Wootook/Core/Mvc/View/View.php +++ b/src/application/code/core/Wootook/Core/Mvc/View/View.php @@ -90,6 +90,17 @@ class Wootook_Core_Mvc_View_View } } + public function renderDateTime($dateTime, $format = null) + { + if ($format === null) { + $format = 'H:i:s'; + } + if (!$dateTime instanceof Wootook_Core_DateTime) { + $dateTime = new Wootook_Core_DateTime($dateTime); + } + return $dateTime->toString($format); + } + public function escape($unescaped) { return htmlspecialchars($unescaped, ENT_QUOTES, 'UTF-8'); diff --git a/src/application/code/core/Wootook/Core/Resource/EntityCollection.php b/src/application/code/core/Wootook/Core/Resource/EntityCollection.php index 44a376a..0f0d29b 100644 --- a/src/application/code/core/Wootook/Core/Resource/EntityCollection.php +++ b/src/application/code/core/Wootook/Core/Resource/EntityCollection.php @@ -21,7 +21,7 @@ abstract class Wootook_Core_Resource_EntityCollection protected $_items = array(); - public function __construct(Wootook_Core_Database_Adapter_Pdo_Mysql $connection = null) + public function __construct(Wootook_Core_Database_Adapter_Adapter $connection = null) { $this->setReadConnection($connection); @@ -153,17 +153,28 @@ abstract class Wootook_Core_Resource_EntityCollection return $this; } - public function getSize() + public function getSize($maintainGrouping = array()) { $clone = clone $this->_select; - $clone->_fields = array(); - $clone->column('1'); + $clone->reset(Wootook_Core_Database_Sql_Select::COLUMNS); + if (empty($maintainGrouping)) { + $clone->reset(Wootook_Core_Database_Sql_Select::GROUP); + } else { + $groupingFields = $clone->getPart(Wootook_Core_Database_Sql_Select::GROUP); + $clone->reset(Wootook_Core_Database_Sql_Select::GROUP); + foreach ($groupingFields as $field) { + if (in_array($field, $maintainGrouping)) { + $clone->group($field); + } + } + } + $clone->column(new Wootook_Core_Database_Sql_Placeholder_Expression('COUNT(*)')); $database = $this->getReadConnection(); $statement = $database->prepare($clone); $statement->execute(); - $count = $statement->rowCount(); + $count = $statement->fetchColumn(); $statement->closeCursor(); return $count; diff --git a/src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List.php b/src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List.php new file mode 100644 index 0000000..770fcbb --- /dev/null +++ b/src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List.php @@ -0,0 +1,77 @@ +_fleetCollection === null) { + $player = Wootook_Player_Model_Session::getSingleton()->getPlayer(); + $this->_fleetCollection = $player->getVisibleFleets(); + } + return $this->_fleetCollection; + } + + public function setItemTemplate($template) + { + $this->_itemTemplate = $template; + + return $this; + } + + public function getItemTemplate() + { + return $this->_itemTemplate; + } + + public function setItemBlockType($blockType) + { + $this->_itemBlockType = $blockType; + + return $this; + } + + public function getItemBlockType() + { + return $this->_itemBlockType; + } + + public function getItemBlock($fleet) + { + $blockName = $this->getNameInLayout() . ".item({$fleet->getId()})"; + + return $this->getLayout() + ->createBlock($this->getItemBlockType(), $blockName) + ->setTemplate($this->getItemTemplate()) + ->setFleetItem($fleet); + } + + public function prepareLayout() + { + parent::prepareLayout(); + + $this->_initChildBlocks(); + + return $this; + } + + public function _initChildBlocks() + { + $parentBlock = $this->getLayout() + ->createBlock('core/concat', $this->getNameInLayout() . '.item-list') + ; + $this->setPartial('item-list', $parentBlock); + + foreach ($this->getFleetCollection()->load() as $fleet) { + $block = $this->getItemBlock($fleet); + $parentBlock->setPartial($block->getNameInLayout(), $block); + } + + return $this; + } +} diff --git a/src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List/Item.php b/src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List/Item.php new file mode 100644 index 0000000..cd1cffc --- /dev/null +++ b/src/application/code/core/Wootook/Empire/Block/Overview/Fleet/List/Item.php @@ -0,0 +1,153 @@ +_currentPlayer == null) { + $this->_currentPlayer = Wootook_Player_Model_Session::getSingleton()->getPlayer(); + } + return $this->_currentPlayer; + } + + /** + * @return Wootook_Player_Resource_Entity_Collection + */ + public function getFleetOwnerCollection() + { + if ($this->_ownerCollection == null) { + $this->_ownerCollection = $this->getFleetItem()->getOwnerCollection(); + } + return $this->_ownerCollection; + } + + /** + * @return Wootook_Player_Resource_Entity_Collection + */ + public function getFleetOwnerUsernames() + { + $usernameList = array(); + foreach ($this->getFleetOwnerCollection()->load() as $owner) { + $usernameList[] = $owner->getUsername(); + } + return $usernameList; + } + + public function setFleetItem(Wootook_Empire_Model_Fleet $fleetItem) + { + $this->_fleet = $fleetItem; + + return $this; + } + + /** + * @return Wootook_Empire_Model_Fleet + */ + public function getFleetItem() + { + return $this->_fleet; + } + + public function getStartTime() + { + return $this->getFleetItem()->getStartTime(); + } + + public function getActionTime() + { + return $this->getFleetItem()->getActionTime(); + } + + public function getArrivalTime() + { + return $this->getFleetItem()->getArrivalTime(); + } + + public function isOwner() + { + return $this->getFleetItem()->isOwnedBy($this->getPlayer()); + } + + public function getRowClass() + { + return $this->getFleetItem()->getRowClass($this->getPlayer()); + } + + public function getOriginPlanet() + { + return $this->getFleetItem()->getOriginPlanet(); + } + + public function getOriginPlayer() + { + return $this->getOriginPlanet()->getPlayer(); + } + + public function getOriginPlayerName() + { + $player = $this->getOriginPlanet()->getPlayer(); + + if ($player !== null) { + return $player->getUsername(); + } + return null; + } + + public function getOriginPlanetName() + { + return $this->getOriginPlanetName(); + } + + public function getOriginPlanetCoords() + { + return $this->getOriginPlanetCoords(); + } + + public function getDestinationPlanet() + { + return $this->getFleetItem()->getDestinationPlanet(); + } + + public function getDestinationPlayer() + { + return $this->getDestinationPlanet()->getPlayer(); + } + + public function getDestinationPlayerName() + { + $player = $this->getDestinationPlanet()->getPlayer(); + + if ($player !== null) { + return $player->getUsername(); + } + return null; + } + + public function getDestinationPlanetName() + { + return $this->getDestinationPlanetName(); + } + + public function getDestinationPlanetCoords() + { + return $this->getDestinationPlanetCoords(); + } + + public function getMissionLabel() + { + return $this->getFleetItem()->getMissionLabel(); + } + + public function isMission($type) + { + return $this->getFleetItem()->isMission($type); + } +} diff --git a/src/application/code/core/Wootook/Empire/Model/Fleet.php b/src/application/code/core/Wootook/Empire/Model/Fleet.php index 80d857a..e622226 100644 --- a/src/application/code/core/Wootook/Empire/Model/Fleet.php +++ b/src/application/code/core/Wootook/Empire/Model/Fleet.php @@ -34,6 +34,12 @@ class Wootook_Empire_Model_Fleet { $this->setIdFieldName('fleet_id'); $this->setTableName('fleets'); + + $this->getDataMapper() + ->addRule('fleet_start_time', 'date-time') + ->addRule('fleet_end_time', 'date-time') + ->addRule('fleet_end_stay', 'date-time') + ; } public static function planetListener($eventData) @@ -48,10 +54,16 @@ class Wootook_Empire_Model_Fleet return false; } - public function getOwner() + /** + * @return null|Wootook_Player_Resource_Entity_Collection + */ + public function getOwnerCollection() { if ($id = $this->getData('fleet_owner')) { - return Wootook_Player_Model_Entity::factory($id); + $ownerCollection = new Wootook_Player_Resource_Entity_Collection($this->getReadConnection()); + $ownerCollection->addFieldToFilter('id', $id); + + return $ownerCollection; } return null; } @@ -86,6 +98,8 @@ class Wootook_Empire_Model_Fleet return 'missiles'; } else if ($this->isMission(Legacies_Empire::ID_MISSION_EXPEDITION)) { return 'expedition'; + } else if ($this->isMission(Legacies_Empire::ID_MISSION_ORE_MINING)) { + return 'ore-mining'; } } @@ -107,25 +121,34 @@ class Wootook_Empire_Model_Fleet return Wootook::__('Missiles Launch'); } else if ($this->isMission(Legacies_Empire::ID_MISSION_EXPEDITION)) { return Wootook::__('Expedition'); + } else if ($this->isMission(Legacies_Empire::ID_MISSION_ORE_MINING)) { + return Wootook::__('Ore mining'); } return Legacies::__('Unknown'); } + /** + * @return Wootook_Core_DateTime + */ public function getStartTime() { return $this->getData('fleet_start_time'); } + /** + * @return Wootook_Core_DateTime + */ + public function getActionTime() { return $this->getData('fleet_end_stay'); } + /** + * @return Wootook_Core_DateTime + */ public function getArrivalTime() { - if ($this->isMission(Legacies_Empire::ID_MISSION_STATION) || $this->isMission(Legacies_Empire::ID_MISSION_STATION_ALLY)) { - return $this->getActionTime(); - } return $this->getData('fleet_end_time'); } @@ -141,15 +164,85 @@ class Wootook_Empire_Model_Fleet return Wootook_Empire_Model_Planet::factoryFromCoords($coords, $type); } + public function getOriginPlanetName() + { + if (!($planet = $this->getOriginPlanet()->getId())) { + return ''; + } + return $planet->getName(); + } + + public function getOriginPlanetCoords() + { + if (!($planet = $this->getOriginPlanet()->getId())) { + return sprintf('%s:%s:%s', $this->getData('fleet_start_galaxy'), $this->getData('fleet_start_system'), $this->getData('fleet_start_planet')); + } + return $planet->getCoords(); + } + public function getDestinationPlanet() { $coords = array( 'galaxy' => $this->getData('fleet_end_galaxy'), 'system' => $this->getData('fleet_end_system'), 'position' => $this->getData('fleet_end_planet') - ); + ); $type = $this->getData('fleet_end_type'); return Wootook_Empire_Model_Planet::factoryFromCoords($coords, $type); } + + public function getDestinationPlanetName() + { + if (!($planet = $this->getDestinationPlanet()->getId())) { + return ''; + } + return $planet->getName(); + } + + public function getDestinationPlanetCoords() + { + if (!($planet = $this->getDestinationPlanet()->getId())) { + return sprintf('%s:%s:%s', $this->getData('fleet_end_galaxy'), $this->getData('fleet_end_system'), $this->getData('fleet_end_planet')); + } + return $planet->getCoords(); + } + + public function goBack() + { + $this->setData('fleet_mess', 1)->save(); + + return $this; + } + + /** + * @param Wootook_Empire_Model_Planet $planet + * @return Wootook_Empire_Model_Fleet + */ + public function dock(Wootook_Empire_Model_Planet $planet) + { + // Backward-compatible way to unserialize fleet ships listing + $serializedFleetArray = $this->getData('fleet_array'); + foreach (explode(';', $serializedFleetArray) as $fleetShipData) { + if (empty($fleetShipData)) { + continue; + } + $fleetShipData = explode(',', $fleetShipData); + if (count($fleetShipData) != 2) { + continue; + } + $planet->setElement($fleetShipData[0], Math::add($planet->getElement($fleetShipData[0]), $fleetShipData[1])); + } + + $planet + ->setData('metal', Math::add($planet->getData('metal'), $this->getData('fleet_resource_metal'))) + ->setData('cristal', Math::add($planet->getData('cristal'), $this->getData('fleet_resource_crystal'))) + ->setData('deuterium', Math::add($planet->getData('deuterium'), $this->getData('fleet_resource_deuterium'))) + ->save(); + ; + + $this->delete(); + + return $this; + } } diff --git a/src/application/code/core/Wootook/Empire/Model/Planet.php b/src/application/code/core/Wootook/Empire/Model/Planet.php index 4dc76f7..980524f 100644 --- a/src/application/code/core/Wootook/Empire/Model/Planet.php +++ b/src/application/code/core/Wootook/Empire/Model/Planet.php @@ -105,7 +105,8 @@ class Wootook_Empire_Model_Planet ->getConnection('core_read'); $collection = new Wootook_Empire_Resource_Planet_Collection($adapter); $collection->addCoordsToFilter($coords['galaxy'], $coords['system'], $coords['position'], $coords['type']) - ->setPage(1, 1); + ->setPage(1, 1) + ->load(); $planet = $collection->getFirstItem(); if ($planet !== null) { @@ -166,6 +167,9 @@ class Wootook_Empire_Model_Planet throw new Wootook_Core_Exception_RuntimeException(Wootook::__('Undefined method %s::%s.', get_class($this), $method)); } + /** + * @return Wootook_Core_DateTime + */ public function getLastUpdate() { return $this->getData('last_update'); @@ -424,7 +428,7 @@ class Wootook_Empire_Model_Planet public function getFleetCollection($time = null) { - $collection = new Wootook_Empire_Resource_Fleet_Collection(); + $collection = new Wootook_Empire_Resource_Fleet_Collection($this->getReadConnection()); $collection->addPlanetToFilter($this, $time); return $collection; @@ -469,22 +473,18 @@ class Wootook_Empire_Model_Planet public function getMoon() { - static $statement = null; - if ($this->isMoon()) { return null; } if ($this->_moon === null) { - if ($statement === null) { - $collection = new Wootook_Empire_Resource_Planet_Collection($this->getReadConnection()); - $collection->addFieldToFilter('galaxy', $this->getGalaxy()) - ->addFieldToFilter('system', $this->getGalaxy()) - ->addFieldToFilter('planet', $this->getPosition()) - ->addFieldToFilter('planet_type', self::TYPE_MOON) - ->load() - ; - } + $collection = new Wootook_Empire_Resource_Planet_Collection($this->getReadConnection()); + $collection->addFieldToFilter('galaxy', $this->getGalaxy()) + ->addFieldToFilter('system', $this->getGalaxy()) + ->addFieldToFilter('planet', $this->getPosition()) + ->addFieldToFilter('planet_type', self::TYPE_MOON) + ->load() + ; $this->_moon = $collection->getFirstItem(); @@ -606,7 +606,7 @@ class Wootook_Empire_Model_Planet public function isDestroyed() { - return (bool) $this->getData('destruyed'); + return (bool) ($this->getData('destruyed') > 0); } public function destroy() @@ -641,13 +641,21 @@ class Wootook_Empire_Model_Planet } $this - ->setData('destruyed', true) + ->setData('destruyed', time() + 172800) ->setData('id_owner', 0) ->save(); return $this; } + public function isErasable() + { + if ($this->isDestroyed() && $this->getData('destruyed') >= time()) { + return true; + } + return false; + } + public function getElement($elementId) { $fields = Wootook_Empire_Helper_Config_FieldsAlias::getSingleton(); @@ -896,6 +904,32 @@ class Wootook_Empire_Model_Planet return intval($value); } + public static function planetChangeListener($eventData) + { + if (!isset($eventData['request']) || !$eventData['request'] instanceof Wootook_Core_Mvc_Controller_Request_Http) { + return; + } + + /** @var Wootook_Core_Mvc_Controller_Request_Http $request */ + $request = $eventData['request']; + if (!($planetId = $request->getQuery('___planet'))) { + return; + } + + $session = Wootook_Player_Model_Session::getSingleton(); + if (!$session->isLoggedIn()) { + return; + } + $planet = new Wootook_Empire_Model_Planet(); + $planet->load($planetId); + if (!$planet->getId()) { + return; + } + + $player = $session->getPlayer(); + $player->setCurrentPlanet($planet); + } + public static function planetUpdateListener($eventData) { if (isset($eventData['planet'])) { diff --git a/src/application/code/core/Wootook/Empire/Resource/Fleet/Collection.php b/src/application/code/core/Wootook/Empire/Resource/Fleet/Collection.php index 7c9cd8c..ea399f3 100644 --- a/src/application/code/core/Wootook/Empire/Resource/Fleet/Collection.php +++ b/src/application/code/core/Wootook/Empire/Resource/Fleet/Collection.php @@ -10,20 +10,23 @@ class Wootook_Empire_Resource_Fleet_Collection public function addPlanetToFilter(Wootook_Empire_Model_Planet $planet, $time = null) { + if ($time === null) { + $time = new Wootook_Core_DateTime(); + } $this->addFieldToFilter(null, array( array('and' => array( array('eq' => array('field' => 'fleet_start_galaxy', 'value' => $planet->getGalaxy())), array('eq' => array('field' => 'fleet_start_system', 'value' => $planet->getSystem())), array('eq' => array('field' => 'fleet_start_planet', 'value' => $planet->getPosition())), array('eq' => array('field' => 'fleet_start_type', 'value' => $planet->getType())), - array('date' => array('field' => 'fleet_start_time', 'value' => array('to' => $time))), + //array('date' => array('field' => 'fleet_start_time', 'value' => array('to' => $time))), )), array('and' => array( array('eq' => array('field' => 'fleet_end_galaxy', 'value' => $planet->getGalaxy())), array('eq' => array('field' => 'fleet_end_system', 'value' => $planet->getSystem())), array('eq' => array('field' => 'fleet_end_planet', 'value' => $planet->getPosition())), array('eq' => array('field' => 'fleet_end_type', 'value' => $planet->getType())), - array('date' => array('field' => 'fleet_end_time', 'value' => array('to' => $time))), + //array('date' => array('field' => 'fleet_end_time', 'value' => array('to' => $time))), )) )); @@ -32,6 +35,9 @@ class Wootook_Empire_Resource_Fleet_Collection public function addIsVisibleToFilter(Wootook_Player_Model_Entity $player, $time = null) { + if ($time === null) { + $time = new Wootook_Core_DateTime(); + } $this->addFieldToFilter(null, array( array('and' => array( array('eq' => array('field' => 'fleet_owner', 'value' => $player->getId())), diff --git a/src/application/code/core/Wootook/Player/Controller/AccountController.php b/src/application/code/core/Wootook/Player/Controller/AccountController.php index 98815cc..824a20d 100644 --- a/src/application/code/core/Wootook/Player/Controller/AccountController.php +++ b/src/application/code/core/Wootook/Player/Controller/AccountController.php @@ -41,7 +41,7 @@ class Wootook_Player_Controller_AccountController { $session = new Wootook_Player_Model_Session(); if ($session->isLoggedIn()) { - $this->_redirect('player/overview'); + $this->_redirect('*/overview'); return; } @@ -55,27 +55,29 @@ class Wootook_Player_Controller_AccountController $request = $this->getRequest(); if (!$request->isPost()) { - $this->_redirect('player/account/login'); + $this->_redirect('*/*/login'); return; } if ($request->getPost('username') === null || $request->getPost('password') === null) { - $this->_redirect('player/account/login'); + $this->_redirect('*/*/login'); return; } $session = new Wootook_Player_Model_Session(); if ($session->isLoggedIn()) { - $this->_redirect('player/overview'); + $this->_redirect('*/overview'); return; } $session->login($request->getPost('username'), $request->getPost('password'), (bool) $request->getPost('rememberme')); if ($session->isLoggedIn()) { - $this->_redirect('player/overview'); + $this->_redirect('*/overview'); + return; } else { - $this->_redirect('player/account/login'); + $this->_redirect('*/*/login'); + return; } } @@ -84,6 +86,9 @@ class Wootook_Player_Controller_AccountController $session = Wootook_Player_Model_Session::getSingleton(); if ($session->isLoggedIn()) { $session->logout(); + } else { + $this->_redirect('*/*/login'); + return; } $this->_redirect(''); @@ -93,16 +98,131 @@ class Wootook_Player_Controller_AccountController { $session = new Wootook_Player_Model_Session(); if ($session->isLoggedIn()) { - $this->_redirect('player/overview'); + $this->_redirect('*/overview'); return; } $this->loadLayout('player.registration'); + $this->_prepareLayoutMessages(Wootook_Player_Model_Entity::SESSION_KEY); $this->renderLayout(); } - public function logoutSuccessAction() + public function newPostAction() { + $session = Wootook_Player_Model_Session::getSingleton(); + if ($session->isLoggedIn()) { + $this->_redirect('*/overview'); + return; + } + + $request = $this->getRequest(); + + if ($request->getPost('password') != $request->getPost('password_confirm')) { + $session->addError(Wootook::__('Passwords does not match. Please check your input.')); + $this->_redirect('*/*/new'); + return; + } + + if ($request->getPost('email') != $request->getPost('email_confirm')) { + $session->addError(Wootook::__('Both emails does not match. Please check your input.')); + $this->_redirect('*/*/new'); + return; + } + + try { + $user = Wootook_Player_Model_Entity::register($request->getPost('username'), $request->getPost('email'), $request->getPost('password')); + } catch (Wootook_Empire_Exception_RuntimeException $e) { + $session->addError(Wootook::__('Could not create user: %s', $e->getMessage())); + $this->_redirect('*/*/new'); + return; + } + + if (!$user || !$user->getId()) { + $session->addError(Wootook::__('Could not create user. Please contact the game administrator for more information.')); + $this->_redirect('*/*/new'); + return; + } + + $session->setLoggedIn($user); + if ($request->getPost('planet_name') != '') { + $user->getHomePlanet()->setName($request->getPost('planet_name'))->save(); + } else { + $user->getHomePlanet()->setName(Wootook::__('Planet'))->save(); + } + + $this->_redirect('*/overview'); + } + + public function lostPasswordAction() + { + $session = new Wootook_Player_Model_Session(); + if ($session->isLoggedIn()) { + $this->_redirect('*/overview'); + return; + } + + $this->loadLayout('player.lost-password'); + $this->_prepareLayoutMessages(Wootook_Player_Model_Entity::SESSION_KEY); + $this->renderLayout(); + } + + /** + * Send new password by mail + */ + public function lostPasswordPostAction() + { + $session = new Wootook_Player_Model_Session(); + if ($session->isLoggedIn()) { + $this->_redirect('*/overview'); + return; + } + + if (!$this->getRequest()->isPost()) { + $this->_redirect('*/*/lost-password'); + return; + } + + $email = $this->getRequest()->getPost('email'); + $username = $this->getRequest()->getPost('username'); + + $player = new Wootook_Player_Model_Entity(); + $player->loadByEmail($email); + + if (!$player->getId() || strtolower($player->getUsername()) != strtolower(trim($username))) { + $session->addError(Wootook::__('The information you entered could not be found.')); + $this->_redirect('*/*/lost-password'); + return; + } + + $chars = array( + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', + 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', + 'f', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', '2', '3', '4', '5', '6', '7', '8', '9' + ); + + shuffle($chars); + $passwordChars = array_slice($chars, 0, 10); + $newPassword = implode($passwordChars); + + $player->setPassword($newPassword)->save(); + + try { + $mailer = new Wootook_Core_Email(); + $mailer->send( + array($player->getEmail() => $player->getUsername()), + array('contact@wootook.org' => 'Wootook'), + Wootook::__('Your new password'), + Wootook::__('Your new password is %s', $newPassword)); + } catch (Wootook_Core_Exception_RuntimeException $e) { + Wootook_Player_Model_Session::getSingleton() + ->addError($e->getMessage()); + + $this->_redirect('*/*/lost-password'); + return; + } + + $this->_redirect('*/*/login'); } public function editAction() diff --git a/src/application/code/core/Wootook/Player/Controller/OverviewController.php b/src/application/code/core/Wootook/Player/Controller/OverviewController.php index 62a0884..97db0cf 100644 --- a/src/application/code/core/Wootook/Player/Controller/OverviewController.php +++ b/src/application/code/core/Wootook/Player/Controller/OverviewController.php @@ -6,10 +6,7 @@ class Wootook_Player_Controller_OverviewController public function indexAction() { $this->loadLayout('player.overview'); + $this->_prepareLayoutMessages(Wootook_Player_Model_Entity::SESSION_KEY); $this->renderLayout(); - /* - $this->getResponse() - ->setRedirect(Wootook::getStaticUrl('overview.php'), Wootook_Core_Mvc_Controller_Response_Http::REDIRECT_TEMPORARY); - */ } } \ No newline at end of file diff --git a/src/application/code/core/Wootook/Player/Model/Entity.php b/src/application/code/core/Wootook/Player/Model/Entity.php index fe296c3..389b8ba 100644 --- a/src/application/code/core/Wootook/Player/Model/Entity.php +++ b/src/application/code/core/Wootook/Player/Model/Entity.php @@ -88,6 +88,21 @@ class Wootook_Player_Model_Entity return $this->getData('username'); } + public function getEmail() + { + return $this->getData('email'); + } + + public function loadByEmail($email) + { + return $this->load($email, 'email'); + } + + public function setPassword($newPassword) + { + return $this->setData('password', $this->hash($newPassword)); + } + public static function hash($password, $salt = null) { if ($salt === null) { @@ -222,12 +237,10 @@ class Wootook_Player_Model_Entity public function createNewPlanet($galaxy, $system, $position, $type, $name, $size = null) { if ($size === null) { - $baseSize = Wootook::getGameConfig('planet/initial/fields'); - - $factor = $position * 10 / (1 + log($position * 10)); - $fuzz = 2 * $factor * pow(sin($factor), 2) / 2 + $factor / 4; - - $size = mt_rand(floor($factor / 10), ceil($factor * 5 / 4)) + mt_rand(0, $fuzz); + $size = Wootook::getGameConfig('planet/initial/fields'); + } + if ($size === null) { + $size = 200; } $now = new Wootook_Core_DateTime(); @@ -464,6 +477,11 @@ class Wootook_Player_Model_Entity return $this; } + /** + * Returns all the flying fleets owned by the player + * + * @return Wootook_Empire_Resource_Fleet_Collection + */ public function getFleets() { $collection = new Wootook_Empire_Resource_Fleet_Collection($this->getReadConnection()); @@ -473,15 +491,22 @@ class Wootook_Player_Model_Entity return $collection; } + /** + * Counts all the flying fleets owned by the player + * + * @return mixed + */ public function getFleetCount() { - $collection = new Wootook_Empire_Resource_Fleet_Collection($this->getReadConnection()); - - $this->_prepareFleetCollection($collection); - - return $collection->getSize(); + return $this->getFleets()->getSize(); } + /** + * Returns all the visible fleets + * + * @param null $time + * @return Wootook_Empire_Resource_Fleet_Collection + */ public function getVisibleFleets($time = null) { $collection = new Wootook_Empire_Resource_Fleet_Collection($this->getReadConnection()); @@ -494,6 +519,19 @@ class Wootook_Player_Model_Entity return $collection; } + /** + * Returns all the visible fleets + * + * @param null $time + * @return Wootook_Empire_Resource_Fleet_Collection + * @deprecated + * @alias getVisibleFleets + */ + public function getFleetCollection($time = null) + { + return $this->getVisibleFleets($time); + } + public function getElement($elementId) { $fields = Wootook_Empire_Helper_Config_FieldsAlias::getSingleton(); @@ -538,14 +576,6 @@ class Wootook_Player_Model_Entity return false; } - public function getFleetCollection($time = null) - { - $fleetCollection = new Wootook_Empire_Resource_Fleet_Collection($this->getReadConnection()); - $fleetCollection->addIsVisibleToFilter($this, $time); - - return $fleetCollection; - } - public function getNewMessagesCount() { $messageCollection = new Wootook_Player_Resource_Message_Collection($this->getReadConnection()); @@ -582,6 +612,11 @@ class Wootook_Player_Model_Entity } } + public function isBanned() + { + return $this->getData('bana') ? true : false; + } + public function isVacation() { return $this->getData('urlaubs_modus') ? true : false; @@ -592,6 +627,11 @@ class Wootook_Player_Model_Entity return $this->getData('urlaubs_until'); } + public function getLastLoginDate() + { + return $this->getData('onlinetime'); + } + public function setVacation($active = true) { $this->setData('urlaubs_modus', $active); diff --git a/src/application/code/core/Wootook/Player/Resource/Entity/Collection.php b/src/application/code/core/Wootook/Player/Resource/Entity/Collection.php index 7ff8a91..3e2c1bc 100644 --- a/src/application/code/core/Wootook/Player/Resource/Entity/Collection.php +++ b/src/application/code/core/Wootook/Player/Resource/Entity/Collection.php @@ -23,9 +23,12 @@ class Wootook_Player_Resource_Entity_Collection { $onlineTime = (int) $onlineTime; + $date = new Wootook_Core_DateTime(); + $date->sub($onlineTime, Wootook_Core_DateTime::TIMESTAMP); + if ($onlineTime > 0) { $this->addFieldToFilter('onlinetime', array(array( - 'gt' => new Wootook_Core_Database_Sql_Placeholder_Expression('UNIX_TIMESTAMP() - :online_time))', array('online_time' => $onlineTime)) + Wootook_Core_Database_Sql_Select::OPERATOR_DATE => array('from' => $date) ))); } diff --git a/src/application/code/core/Wootook/Server/Mvc/Dispatcher.php b/src/application/code/core/Wootook/Server/Mvc/Dispatcher.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/src/application/code/core/Wootook/Server/Mvc/Dispatcher.php @@ -0,0 +1 @@ + + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHPCore + */ + + +/** + * Sends the given data to the FirePHP Firefox Extension. + * The data can be displayed in the Firebug Console or in the + * "Server" request tab. + * + * For more information see: http://www.firephp.org/ + * + * @copyright Copyright (C) 2007-2009 Christoph Dorn + * @author Christoph Dorn + * @license http://www.opensource.org/licenses/bsd-license.php + * @package FirePHPCore + */ +class Wildfire_Stream { + + /** + * FirePHP version + * + * @var string + */ + const VERSION = '0.3'; // @pinf replace '0.3' with '%%package.version%%' + + /** + * Firebug LOG level + * + * Logs a message to firebug console. + * + * @var string + */ + const LOG = 'LOG'; + + /** + * Firebug INFO level + * + * Logs a message to firebug console and displays an info icon before the message. + * + * @var string + */ + const INFO = 'INFO'; + + /** + * Firebug WARN level + * + * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise. + * + * @var string + */ + const WARN = 'WARN'; + + /** + * Firebug ERROR level + * + * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count. + * + * @var string + */ + const ERROR = 'ERROR'; + + /** + * Dumps a variable to firebug's server panel + * + * @var string + */ + const DUMP = 'DUMP'; + + /** + * Displays a stack trace in firebug console + * + * @var string + */ + const TRACE = 'TRACE'; + + /** + * Displays an exception in firebug console + * + * Increments the firebug error count. + * + * @var string + */ + const EXCEPTION = 'EXCEPTION'; + + /** + * Displays an table in firebug console + * + * @var string + */ + const TABLE = 'TABLE'; + + /** + * Starts a group in firebug console + * + * @var string + */ + const GROUP_START = 'GROUP_START'; + + /** + * Ends a group in firebug console + * + * @var string + */ + const GROUP_END = 'GROUP_END'; + + /** + * Singleton instance of FirePHP + * + * @var FirePHP + */ + protected static $instance = null; + + /** + * Flag whether we are logging from within the exception handler + * + * @var boolean + */ + protected $inExceptionHandler = false; + + /** + * Flag whether to throw PHP errors that have been converted to ErrorExceptions + * + * @var boolean + */ + protected $throwErrorExceptions = true; + + /** + * Flag whether to convert PHP assertion errors to Exceptions + * + * @var boolean + */ + protected $convertAssertionErrorsToExceptions = true; + + /** + * Flag whether to throw PHP assertion errors that have been converted to Exceptions + * + * @var boolean + */ + protected $throwAssertionExceptions = false; + + /** + * Wildfire protocol message index + * + * @var int + */ + protected $messageIndex = 1; + + /** + * Options for the library + * + * @var array + */ + protected $options = array('maxDepth' => 10, + 'maxObjectDepth' => 5, + 'maxArrayDepth' => 5, + 'useNativeJsonEncode' => true, + 'includeLineNumbers' => true); + + /** + * Filters used to exclude object members when encoding + * + * @var array + */ + protected $objectFilters = array( + 'firephp' => array('objectStack', 'instance', 'json_objectStack'), + 'firephp_test_class' => array('objectStack', 'instance', 'json_objectStack') + ); + + /** + * A stack of objects used to detect recursion during object encoding + * + * @var object + */ + protected $objectStack = array(); + + /** + * Flag to enable/disable logging + * + * @var boolean + */ + protected $enabled = true; + + /** + * The insight console to log to if applicable + * + * @var object + */ + protected $logToInsightConsole = null; + + /** + * When the object gets serialized only include specific object members. + * + * @return array + */ + public function __sleep() + { + return array('options','objectFilters','enabled'); + } + + /** + * Gets singleton instance of FirePHP + * + * @param boolean $AutoCreate + * @return FirePHP + */ + public static function getInstance($AutoCreate = false) + { + if ($AutoCreate===true && !self::$instance) { + self::init(); + } + return self::$instance; + } + + /** + * Creates FirePHP object and stores it for singleton access + * + * @return FirePHP + */ + public static function init() + { + return self::setInstance(new self()); + } + + /** + * Set the instance of the FirePHP singleton + * + * @param FirePHP $instance The FirePHP object instance + * @return FirePHP + */ + public static function setInstance($instance) + { + return self::$instance = $instance; + } + + /** + * Set an Insight console to direct all logging calls to + * + * @param object $console The console object to log to + * @return void + */ + public function setLogToInsightConsole($console) + { + if(is_string($console)) { + if(get_class($this)!='FirePHP_Insight' && !is_subclass_of($this, 'FirePHP_Insight')) { + throw new Exception('FirePHP instance not an instance or subclass of FirePHP_Insight!'); + } + $this->logToInsightConsole = $this->to('request')->console($console); + } else { + $this->logToInsightConsole = $console; + } + } + + /** + * Enable and disable logging to Firebug + * + * @param boolean $Enabled TRUE to enable, FALSE to disable + * @return void + */ + public function setEnabled($Enabled) + { + $this->enabled = $Enabled; + } + + /** + * Check if logging is enabled + * + * @return boolean TRUE if enabled + */ + public function getEnabled() + { + return $this->enabled; + } + + /** + * Specify a filter to be used when encoding an object + * + * Filters are used to exclude object members. + * + * @param string $Class The class name of the object + * @param array $Filter An array of members to exclude + * @return void + */ + public function setObjectFilter($Class, $Filter) + { + $this->objectFilters[strtolower($Class)] = $Filter; + } + + /** + * Set some options for the library + * + * Options: + * - maxDepth: The maximum depth to traverse (default: 10) + * - maxObjectDepth: The maximum depth to traverse objects (default: 5) + * - maxArrayDepth: The maximum depth to traverse arrays (default: 5) + * - useNativeJsonEncode: If true will use json_encode() (default: true) + * - includeLineNumbers: If true will include line numbers and filenames (default: true) + * + * @param array $Options The options to be set + * @return void + */ + public function setOptions($Options) + { + $this->options = array_merge($this->options,$Options); + } + + /** + * Get options from the library + * + * @return array The currently set options + */ + public function getOptions() + { + return $this->options; + } + + /** + * Set an option for the library + * + * @param string $Name + * @param mixed $Value + * @throws Exception + * @return void + */ + public function setOption($Name, $Value) + { + if (!isset($this->options[$Name])) { + throw $this->newException('Unknown option: ' . $Name); + } + $this->options[$Name] = $Value; + } + + /** + * Get an option from the library + * + * @param string $Name + * @throws Exception + * @return mixed + */ + public function getOption($Name) + { + if (!isset($this->options[$Name])) { + throw $this->newException('Unknown option: ' . $Name); + } + return $this->options[$Name]; + } + + /** + * Register FirePHP as your error handler + * + * Will throw exceptions for each php error. + * + * @return mixed Returns a string containing the previously defined error handler (if any) + */ + public function registerErrorHandler($throwErrorExceptions = false) + { + //NOTE: The following errors will not be caught by this error handler: + // E_ERROR, E_PARSE, E_CORE_ERROR, + // E_CORE_WARNING, E_COMPILE_ERROR, + // E_COMPILE_WARNING, E_STRICT + + $this->throwErrorExceptions = $throwErrorExceptions; + + return set_error_handler(array($this,'errorHandler')); + } + + /** + * FirePHP's error handler + * + * Throws exception for each php error that will occur. + * + * @param int $errno + * @param string $errstr + * @param string $errfile + * @param int $errline + * @param array $errcontext + */ + public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) + { + // Don't throw exception if error reporting is switched off + if (error_reporting() == 0) { + return; + } + // Only throw exceptions for errors we are asking for + if (error_reporting() & $errno) { + + $exception = new ErrorException($errstr, 0, $errno, $errfile, $errline); + if ($this->throwErrorExceptions) { + throw $exception; + } else { + $this->fb($exception); + } + } + } + + /** + * Register FirePHP as your exception handler + * + * @return mixed Returns the name of the previously defined exception handler, + * or NULL on error. + * If no previous handler was defined, NULL is also returned. + */ + public function registerExceptionHandler() + { + return set_exception_handler(array($this,'exceptionHandler')); + } + + /** + * FirePHP's exception handler + * + * Logs all exceptions to your firebug console and then stops the script. + * + * @param Exception $Exception + * @throws Exception + */ + function exceptionHandler($Exception) + { + + $this->inExceptionHandler = true; + + header('HTTP/1.1 500 Internal Server Error'); + + try { + $this->fb($Exception); + } catch (Exception $e) { + echo 'We had an exception: ' . $e; + } + $this->inExceptionHandler = false; + } + + /** + * Register FirePHP driver as your assert callback + * + * @param boolean $convertAssertionErrorsToExceptions + * @param boolean $throwAssertionExceptions + * @return mixed Returns the original setting or FALSE on errors + */ + public function registerAssertionHandler($convertAssertionErrorsToExceptions = true, $throwAssertionExceptions = false) + { + $this->convertAssertionErrorsToExceptions = $convertAssertionErrorsToExceptions; + $this->throwAssertionExceptions = $throwAssertionExceptions; + + if ($throwAssertionExceptions && !$convertAssertionErrorsToExceptions) { + throw $this->newException('Cannot throw assertion exceptions as assertion errors are not being converted to exceptions!'); + } + + return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler')); + } + + /** + * FirePHP's assertion handler + * + * Logs all assertions to your firebug console and then stops the script. + * + * @param string $file File source of assertion + * @param int $line Line source of assertion + * @param mixed $code Assertion code + */ + public function assertionHandler($file, $line, $code) + { + if ($this->convertAssertionErrorsToExceptions) { + + $exception = new ErrorException('Assertion Failed - Code[ '.$code.' ]', 0, null, $file, $line); + + if ($this->throwAssertionExceptions) { + throw $exception; + } else { + $this->fb($exception); + } + + } else { + $this->fb($code, 'Assertion Failed', FirePHP::ERROR, array('File'=>$file,'Line'=>$line)); + } + } + + /** + * Start a group for following messages. + * + * Options: + * Collapsed: [true|false] + * Color: [#RRGGBB|ColorName] + * + * @param string $Name + * @param array $Options OPTIONAL Instructions on how to log the group + * @return true + * @throws Exception + */ + public function group($Name, $Options = null) + { + + if (!$Name) { + throw $this->newException('You must specify a label for the group!'); + } + + if ($Options) { + if (!is_array($Options)) { + throw $this->newException('Options must be defined as an array!'); + } + if (array_key_exists('Collapsed', $Options)) { + $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false'; + } + } + + return $this->fb(null, $Name, FirePHP::GROUP_START, $Options); + } + + /** + * Ends a group you have started before + * + * @return true + * @throws Exception + */ + public function groupEnd() + { + return $this->fb(null, null, FirePHP::GROUP_END); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::LOG + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function log($Object, $Label = null, $Options = array()) + { + return $this->fb($Object, $Label, FirePHP::LOG, $Options); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::INFO + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function info($Object, $Label = null, $Options = array()) + { + return $this->fb($Object, $Label, FirePHP::INFO, $Options); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::WARN + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function warn($Object, $Label = null, $Options = array()) + { + return $this->fb($Object, $Label, FirePHP::WARN, $Options); + } + + /** + * Log object with label to firebug console + * + * @see FirePHP::ERROR + * @param mixes $Object + * @param string $Label + * @return true + * @throws Exception + */ + public function error($Object, $Label = null, $Options = array()) + { + return $this->fb($Object, $Label, FirePHP::ERROR, $Options); + } + + /** + * Dumps key and variable to firebug server panel + * + * @see FirePHP::DUMP + * @param string $Key + * @param mixed $Variable + * @return true + * @throws Exception + */ + public function dump($Key, $Variable, $Options = array()) + { + if (!is_string($Key)) { + throw $this->newException('Key passed to dump() is not a string'); + } + if (strlen($Key)>100) { + throw $this->newException('Key passed to dump() is longer than 100 characters'); + } + if (!preg_match_all('/^[a-zA-Z0-9-_\.:]*$/', $Key, $m)) { + throw $this->newException('Key passed to dump() contains invalid characters [a-zA-Z0-9-_\.:]'); + } + return $this->fb($Variable, $Key, FirePHP::DUMP, $Options); + } + + /** + * Log a trace in the firebug console + * + * @see FirePHP::TRACE + * @param string $Label + * @return true + * @throws Exception + */ + public function trace($Label) + { + return $this->fb($Label, FirePHP::TRACE); + } + + /** + * Log a table in the firebug console + * + * @see FirePHP::TABLE + * @param string $Label + * @param string $Table + * @return true + * @throws Exception + */ + public function table($Label, $Table, $Options = array()) + { + return $this->fb($Table, $Label, FirePHP::TABLE, $Options); + } + + /** + * Insight API wrapper + * + * @see Insight_Helper::to() + */ + public static function to() + { + $instance = self::getInstance(); + if (!method_exists($instance, "_to")) { + throw new Exception("FirePHP::to() implementation not loaded"); + } + $args = func_get_args(); + return call_user_func_array(array($instance, '_to'), $args); + } + + /** + * Insight API wrapper + * + * @see Insight_Helper::plugin() + */ + public static function plugin() + { + $instance = self::getInstance(); + if (!method_exists($instance, "_plugin")) { + throw new Exception("FirePHP::plugin() implementation not loaded"); + } + $args = func_get_args(); + return call_user_func_array(array($instance, '_plugin'), $args); + } + + /** + * Check if FirePHP is installed on client + * + * @return boolean + */ + public function detectClientExtension() + { + // Check if FirePHP is installed on client via User-Agent header + if (@preg_match_all('/\sFirePHP\/([\.\d]*)\s?/si',$this->getUserAgent(),$m) && + version_compare($m[1][0],'0.0.6','>=')) { + return true; + } else + // Check if FirePHP is installed on client via X-FirePHP-Version header + if (@preg_match_all('/^([\.\d]*)$/si',$this->getRequestHeader("X-FirePHP-Version"),$m) && + version_compare($m[1][0],'0.0.6','>=')) { + return true; + } + return false; + } + + /** + * Log varible to Firebug + * + * @see http://www.firephp.org/Wiki/Reference/Fb + * @param mixed $Object The variable to be logged + * @return true Return TRUE if message was added to headers, FALSE otherwise + * @throws Exception + */ + public function fb($Object) + { + if($this instanceof FirePHP_Insight && method_exists($this, '_logUpgradeClientMessage')) { + if(!FirePHP_Insight::$upgradeClientMessageLogged) { // avoid infinite recursion as _logUpgradeClientMessage() logs a message + $this->_logUpgradeClientMessage(); + } + } + + static $insightGroupStack = array(); + + if (!$this->getEnabled()) { + return false; + } + + if ($this->headersSent($filename, $linenum)) { + // If we are logging from within the exception handler we cannot throw another exception + if ($this->inExceptionHandler) { + // Simply echo the error out to the page + echo '
FirePHP ERROR: Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.
'; + } else { + throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.'); + } + } + + $Type = null; + $Label = null; + $Options = array(); + + if (func_num_args()==1) { + } else + if (func_num_args()==2) { + switch(func_get_arg(1)) { + case self::LOG: + case self::INFO: + case self::WARN: + case self::ERROR: + case self::DUMP: + case self::TRACE: + case self::EXCEPTION: + case self::TABLE: + case self::GROUP_START: + case self::GROUP_END: + $Type = func_get_arg(1); + break; + default: + $Label = func_get_arg(1); + break; + } + } else + if (func_num_args()==3) { + $Type = func_get_arg(2); + $Label = func_get_arg(1); + } else + if (func_num_args()==4) { + $Type = func_get_arg(2); + $Label = func_get_arg(1); + $Options = func_get_arg(3); + } else { + throw $this->newException('Wrong number of arguments to fb() function!'); + } + + if($this->logToInsightConsole!==null && (get_class($this)=='FirePHP_Insight' || is_subclass_of($this, 'FirePHP_Insight'))) { + $msg = $this->logToInsightConsole; + if ($Object instanceof Exception) { + $Type = self::EXCEPTION; + } + if($Label && $Type!=self::TABLE && $Type!=self::GROUP_START) { + $msg = $msg->label($Label); + } + switch($Type) { + case self::DUMP: + case self::LOG: + return $msg->log($Object); + case self::INFO: + return $msg->info($Object); + case self::WARN: + return $msg->warn($Object); + case self::ERROR: + return $msg->error($Object); + case self::TRACE: + return $msg->trace($Object); + case self::EXCEPTION: + return $this->plugin('engine')->handleException($Object, $msg); + case self::TABLE: + if (isset($Object[0]) && !is_string($Object[0]) && $Label) { + $Object = array($Label, $Object); + } + return $msg->table($Object[0], array_slice($Object[1],1), $Object[1][0]); + case self::GROUP_START: + $insightGroupStack[] = $msg->group(md5($Label))->open(); + return $msg->log($Label); + case self::GROUP_END: + if(count($insightGroupStack)==0) { + throw new Error('Too many groupEnd() as opposed to group() calls!'); + } + $group = array_pop($insightGroupStack); + return $group->close(); + default: + return $msg->log($Object); + } + } + + if (!$this->detectClientExtension()) { + return false; + } + + $meta = array(); + $skipFinalObjectEncode = false; + + if ($Object instanceof Exception) { + + $meta['file'] = $this->_escapeTraceFile($Object->getFile()); + $meta['line'] = $Object->getLine(); + + $trace = $Object->getTrace(); + if ($Object instanceof ErrorException + && isset($trace[0]['function']) + && $trace[0]['function']=='errorHandler' + && isset($trace[0]['class']) + && $trace[0]['class']=='FirePHP') { + + $severity = false; + switch($Object->getSeverity()) { + case E_WARNING: $severity = 'E_WARNING'; break; + case E_NOTICE: $severity = 'E_NOTICE'; break; + case E_USER_ERROR: $severity = 'E_USER_ERROR'; break; + case E_USER_WARNING: $severity = 'E_USER_WARNING'; break; + case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break; + case E_STRICT: $severity = 'E_STRICT'; break; + case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break; + case E_DEPRECATED: $severity = 'E_DEPRECATED'; break; + case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break; + } + + $Object = array('Class'=>get_class($Object), + 'Message'=>$severity.': '.$Object->getMessage(), + 'File'=>$this->_escapeTraceFile($Object->getFile()), + 'Line'=>$Object->getLine(), + 'Type'=>'trigger', + 'Trace'=>$this->_escapeTrace(array_splice($trace,2))); + $skipFinalObjectEncode = true; + } else { + $Object = array('Class'=>get_class($Object), + 'Message'=>$Object->getMessage(), + 'File'=>$this->_escapeTraceFile($Object->getFile()), + 'Line'=>$Object->getLine(), + 'Type'=>'throw', + 'Trace'=>$this->_escapeTrace($trace)); + $skipFinalObjectEncode = true; + } + $Type = self::EXCEPTION; + + } else + if ($Type==self::TRACE) { + + $trace = debug_backtrace(); + if (!$trace) return false; + for( $i=0 ; $i_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if (isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if ($trace[$i]['function']=='fb' + || $trace[$i]['function']=='trace' + || $trace[$i]['function']=='send') { + + $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'', + 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'', + 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'', + 'Message'=>$trace[$i]['args'][0], + 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'', + 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'', + 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'', + 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1))); + + $skipFinalObjectEncode = true; + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + + } else + if ($Type==self::TABLE) { + + if (isset($Object[0]) && is_string($Object[0])) { + $Object[1] = $this->encodeTable($Object[1]); + } else { + $Object = $this->encodeTable($Object); + } + + $skipFinalObjectEncode = true; + + } else + if ($Type==self::GROUP_START) { + + if (!$Label) { + throw $this->newException('You must specify a label for the group!'); + } + + } else { + if ($Type===null) { + $Type = self::LOG; + } + } + + if ($this->options['includeLineNumbers']) { + if (!isset($meta['file']) || !isset($meta['line'])) { + + $trace = debug_backtrace(); + for( $i=0 ; $trace && $i_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' + || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { + /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ + } else + if (isset($trace[$i]['class']) + && isset($trace[$i+1]['file']) + && $trace[$i]['class']=='FirePHP' + && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip fb() */ + } else + if (isset($trace[$i]['file']) + && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') { + /* Skip FB::fb() */ + } else { + $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; + $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; + break; + } + } + } + } else { + unset($meta['file']); + unset($meta['line']); + } + + $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); + $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION); + + $structure_index = 1; + if ($Type==self::DUMP) { + $structure_index = 2; + $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1'); + } else { + $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'); + } + + if ($Type==self::DUMP) { + $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}'; + } else { + $msg_meta = $Options; + $msg_meta['Type'] = $Type; + if ($Label!==null) { + $msg_meta['Label'] = $Label; + } + if (isset($meta['file']) && !isset($msg_meta['File'])) { + $msg_meta['File'] = $meta['file']; + } + if (isset($meta['line']) && !isset($msg_meta['Line'])) { + $msg_meta['Line'] = $meta['line']; + } + $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']'; + } + + $parts = explode("\n",chunk_split($msg, 5000, "\n")); + + for( $i=0 ; $i2) { + // Message needs to be split into multiple parts + $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + (($i==0)?strlen($msg):'') + . '|' . $part . '|' + . (($isetHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, + strlen($part) . '|' . $part . '|'); + } + + $this->messageIndex++; + + if ($this->messageIndex > 99999) { + throw $this->newException('Maximum number (99,999) of messages reached!'); + } + } + } + + $this->setHeader('X-Wf-1-Index',$this->messageIndex-1); + + return true; + } + + /** + * Standardizes path for windows systems. + * + * @param string $Path + * @return string + */ + protected function _standardizePath($Path) + { + return preg_replace('/\\\\+/','/',$Path); + } + + /** + * Escape trace path for windows systems + * + * @param array $Trace + * @return array + */ + protected function _escapeTrace($Trace) + { + if (!$Trace) return $Trace; + for( $i=0 ; $i_escapeTraceFile($Trace[$i]['file']); + } + if (isset($Trace[$i]['args'])) { + $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']); + } + } + return $Trace; + } + + /** + * Escape file information of trace for windows systems + * + * @param string $File + * @return string + */ + protected function _escapeTraceFile($File) + { + /* Check if we have a windows filepath */ + if (strpos($File,'\\')) { + /* First strip down to single \ */ + + $file = preg_replace('/\\\\+/','\\',$File); + + return $file; + } + return $File; + } + + /** + * Check if headers have already been sent + * + * @param string $Filename + * @param integer $Linenum + */ + protected function headersSent(&$Filename, &$Linenum) + { + return headers_sent($Filename, $Linenum); + } + + /** + * Send header + * + * @param string $Name + * @param string $Value + */ + protected function setHeader($Name, $Value) + { + return header($Name.': '.$Value); + } + + /** + * Get user agent + * + * @return string|false + */ + protected function getUserAgent() + { + if (!isset($_SERVER['HTTP_USER_AGENT'])) return false; + return $_SERVER['HTTP_USER_AGENT']; + } + + /** + * Get all request headers + * + * @return array + */ + public static function getAllRequestHeaders() { + static $_cached_headers = false; + if($_cached_headers!==false) { + return $_cached_headers; + } + $headers = array(); + if(function_exists('getallheaders')) { + foreach( getallheaders() as $name => $value ) { + $headers[strtolower($name)] = $value; + } + } else { + foreach($_SERVER as $name => $value) { + if(substr($name, 0, 5) == 'HTTP_') { + $headers[strtolower(str_replace(' ', '-', str_replace('_', ' ', substr($name, 5))))] = $value; + } + } + } + return $_cached_headers = $headers; + } + + /** + * Get a request header + * + * @return string|false + */ + protected function getRequestHeader($Name) + { + $headers = self::getAllRequestHeaders(); + if (isset($headers[strtolower($Name)])) { + return $headers[strtolower($Name)]; + } + return false; + } + + /** + * Returns a new exception + * + * @param string $Message + * @return Exception + */ + protected function newException($Message) + { + return new Exception($Message); + } + + /** + * Encode an object into a JSON string + * + * Uses PHP's jeson_encode() if available + * + * @param object $Object The object to be encoded + * @return string The JSON string + */ + public function jsonEncode($Object, $skipObjectEncode = false) + { + if (!$skipObjectEncode) { + $Object = $this->encodeObject($Object); + } + + if (function_exists('json_encode') + && $this->options['useNativeJsonEncode']!=false) { + + return json_encode($Object); + } else { + return $this->json_encode($Object); + } + } + + /** + * Encodes a table by encoding each row and column with encodeObject() + * + * @param array $Table The table to be encoded + * @return array + */ + protected function encodeTable($Table) + { + + if (!$Table) return $Table; + + $new_table = array(); + foreach($Table as $row) { + + if (is_array($row)) { + $new_row = array(); + + foreach($row as $item) { + $new_row[] = $this->encodeObject($item); + } + + $new_table[] = $new_row; + } + } + + return $new_table; + } + + /** + * Encodes an object including members with + * protected and private visibility + * + * @param Object $Object The object to be encoded + * @param int $Depth The current traversal depth + * @return array All members of the object + */ + protected function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1, $MaxDepth = 1) + { + if ($MaxDepth > $this->options['maxDepth']) { + return '** Max Depth ('.$this->options['maxDepth'].') **'; + } + + $return = array(); + + if (is_resource($Object)) { + + return '** '.(string)$Object.' **'; + + } else + if (is_object($Object)) { + + if ($ObjectDepth > $this->options['maxObjectDepth']) { + return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **'; + } + + foreach ($this->objectStack as $refVal) { + if ($refVal === $Object) { + return '** Recursion ('.get_class($Object).') **'; + } + } + array_push($this->objectStack, $Object); + + $return['__className'] = $class = get_class($Object); + $class_lower = strtolower($class); + + $reflectionClass = new ReflectionClass($class); + $properties = array(); + foreach( $reflectionClass->getProperties() as $property) { + $properties[$property->getName()] = $property; + } + + $members = (array)$Object; + + foreach( $properties as $plain_name => $property ) { + + $name = $raw_name = $plain_name; + if ($property->isStatic()) { + $name = 'static:'.$name; + } + if ($property->isPublic()) { + $name = 'public:'.$name; + } else + if ($property->isPrivate()) { + $name = 'private:'.$name; + $raw_name = "\0".$class."\0".$raw_name; + } else + if ($property->isProtected()) { + $name = 'protected:'.$name; + $raw_name = "\0".'*'."\0".$raw_name; + } + + if (!(isset($this->objectFilters[$class_lower]) + && is_array($this->objectFilters[$class_lower]) + && in_array($plain_name,$this->objectFilters[$class_lower]))) { + + if (array_key_exists($raw_name,$members) + && !$property->isStatic()) { + + $return[$name] = $this->encodeObject($members[$raw_name], $ObjectDepth + 1, 1, $MaxDepth + 1); + + } else { + if (method_exists($property,'setAccessible')) { + $property->setAccessible(true); + $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1, $MaxDepth + 1); + } else + if ($property->isPublic()) { + $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1, $MaxDepth + 1); + } else { + $return[$name] = '** Need PHP 5.3 to get value **'; + } + } + } else { + $return[$name] = '** Excluded by Filter **'; + } + } + + // Include all members that are not defined in the class + // but exist in the object + foreach( $members as $raw_name => $value ) { + + $name = $raw_name; + + if ($name{0} == "\0") { + $parts = explode("\0", $name); + $name = $parts[2]; + } + + $plain_name = $name; + + if (!isset($properties[$name])) { + $name = 'undeclared:'.$name; + + if (!(isset($this->objectFilters[$class_lower]) + && is_array($this->objectFilters[$class_lower]) + && in_array($plain_name,$this->objectFilters[$class_lower]))) { + + $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1, $MaxDepth + 1); + } else { + $return[$name] = '** Excluded by Filter **'; + } + } + } + + array_pop($this->objectStack); + + } elseif (is_array($Object)) { + + if ($ArrayDepth > $this->options['maxArrayDepth']) { + return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **'; + } + + foreach ($Object as $key => $val) { + + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if ($key=='GLOBALS' + && is_array($val) + && array_key_exists('GLOBALS',$val)) { + $val['GLOBALS'] = '** Recursion (GLOBALS) **'; + } + + $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1, $MaxDepth + 1); + } + } else { + if (self::is_utf8($Object)) { + return $Object; + } else { + return utf8_encode($Object); + } + } + return $return; + } + + /** + * Returns true if $string is valid UTF-8 and false otherwise. + * + * @param mixed $str String to be tested + * @return boolean + */ + protected static function is_utf8($str) + { + if(function_exists('mb_detect_encoding')) { + return (mb_detect_encoding($str) == 'UTF-8'); + } + $c=0; $b=0; + $bits=0; + $len=strlen($str); + for($i=0; $i<$len; $i++){ + $c=ord($str[$i]); + if ($c > 128){ + if (($c >= 254)) return false; + elseif ($c >= 252) $bits=6; + elseif ($c >= 248) $bits=5; + elseif ($c >= 240) $bits=4; + elseif ($c >= 224) $bits=3; + elseif ($c >= 192) $bits=2; + else return false; + if (($i+$bits) > $len) return false; + while($bits > 1){ + $i++; + $b=ord($str[$i]); + if ($b < 128 || $b > 191) return false; + $bits--; + } + } + } + return true; + } + + /** + * Converts to and from JSON format. + * + * JSON (JavaScript Object Notation) is a lightweight data-interchange + * format. It is easy for humans to read and write. It is easy for machines + * to parse and generate. It is based on a subset of the JavaScript + * Programming Language, Standard ECMA-262 3rd Edition - December 1999. + * This feature can also be found in Python. JSON is a text format that is + * completely language independent but uses conventions that are familiar + * to programmers of the C-family of languages, including C, C++, C#, Java, + * JavaScript, Perl, TCL, and many others. These properties make JSON an + * ideal data-interchange language. + * + * This package provides a simple encoder and decoder for JSON notation. It + * is intended for use with client-side Javascript applications that make + * use of HTTPRequest to perform server communication functions - data can + * be encoded into JSON notation for use in a client-side javascript, or + * decoded from incoming Javascript requests. JSON format is native to + * Javascript, and can be directly eval()'ed with no further parsing + * overhead + * + * All strings should be in ASCII or UTF-8 format! + * + * LICENSE: Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: Redistributions of source code must retain the + * above copyright notice, this list of conditions and the following + * disclaimer. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * @category + * @package Services_JSON + * @author Michal Migurski + * @author Matt Knapp + * @author Brett Stimmerman + * @author Christoph Dorn + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + + + /** + * Keep a list of objects as we descend into the array so we can detect recursion. + */ + private $json_objectStack = array(); + + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + private function json_utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if (function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + private function json_encode($var) + { + + if (is_object($var)) { + if (in_array($var,$this->json_objectStack)) { + return '"** Recursion **"'; + } + } + + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2})); + $c += 2; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->json_utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($var), + array_values($var)); + + array_pop($this->json_objectStack); + + foreach($properties as $property) { + if ($property instanceof Exception) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + $this->json_objectStack[] = $var; + + // treat it like a regular array + $elements = array_map(array($this, 'json_encode'), $var); + + array_pop($this->json_objectStack); + + foreach($elements as $element) { + if ($element instanceof Exception) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = self::encodeObject($var); + + $this->json_objectStack[] = $var; + + $properties = array_map(array($this, 'json_name_value'), + array_keys($vars), + array_values($vars)); + + array_pop($this->json_objectStack); + + foreach($properties as $property) { + if ($property instanceof Exception) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return null; + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + private function json_name_value($name, $value) + { + // Encoding the $GLOBALS PHP array causes an infinite loop + // if the recursion is not reset here as it contains + // a reference to itself. This is the only way I have come up + // with to stop infinite recursion in this case. + if ($name=='GLOBALS' + && is_array($value) + && array_key_exists('GLOBALS',$value)) { + $value['GLOBALS'] = '** Recursion **'; + } + + $encoded_value = $this->json_encode($value); + + if ($encoded_value instanceof Exception) { + return $encoded_value; + } + + return $this->json_encode(strval($name)) . ':' . $encoded_value; + } +} diff --git a/src/application/code/test/Legacies/Core/LayoutTest.php b/src/application/code/test/Legacies/Core/LayoutTest.php new file mode 100644 index 0000000..1e2a2fd --- /dev/null +++ b/src/application/code/test/Legacies/Core/LayoutTest.php @@ -0,0 +1,41 @@ +markTestIncomplete(); + /* + $layoutDir = vfsStreamWrapper::getContent(''); + vfsStream::addStructure(array()); + + $this->_object = new Legacies_Core_Layout(); + */ + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } + + public function testEmpty() + { + + } +} diff --git a/src/application/code/test/Legacies/Empire/Model/BuilderTest.php b/src/application/code/test/Legacies/Empire/Model/BuilderTest.php new file mode 100644 index 0000000..45b7013 --- /dev/null +++ b/src/application/code/test/Legacies/Empire/Model/BuilderTest.php @@ -0,0 +1,237 @@ +_planet = new Legacies_Empire_Model_Planet(array( + 'id' => 1, + 'id_owner' => 1 + )); + + $this->_user = new Legacies_Empire_Model_User(array( + 'id' => 1 + )); + + $this->_planet->setUser($this->_user); + + $this->_user->setCurrentPlanet($this->_planet); + $this->_user->setHomePlanet($this->_planet); + + $this->_queueItemsData = array( + 'IDX0001' => array( + 'item_id' => 1, + 'level' => 1, + 'created_at' => 0, + 'updated_at' => 0 + ), + 'IDX0002' => array( + 'item_id' => 1, + 'level' => 2, + 'created_at' => 100, + 'updated_at' => 100 + ), + 'IDX0003' => array( + 'item_id' => 1, + 'level' => 3, + 'created_at' => 150, + 'updated_at' => 150 + ) + ); + } + + protected function _getMockedInstance($planet, $user, $methods = array()) + { + $reflector = new ReflectionClass($this->_class); + + foreach ($reflector->getMethods() as $method) { + if ($method->isAbstract()) { + $methods[] = $method->getName(); + } + } + + if (empty($methods)) { + $methods = null; + } + + return $this->getMock($this->_class, $methods, array($planet, $user)); + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } + + public function testInit() + { + $stub = $this->getMockBuilder('Legacies_Empire_Model_BuilderAbstract') + ->disableOriginalConstructor() + ->setMethods(array('init', '_initItem', 'updateQueue', 'appendQueue', 'getResourcesNeeded', 'getBuildingTime')) + ->getMock(); + + $stub->expects($this->once()) + ->method('init') + ->will($this->returnValue($stub)); + + $stub->expects($this->never()) + ->method('_serializeQueue') + ->will($this->returnValue($stub)); + + $stub->expects($this->never()) + ->method('_unserializeQueue') + ->will($this->returnValue($stub)); + + $stub->__construct($this->_planet, $this->_user); + } + + public function testSerializingQueue() + { + $items = array( + 'IDX0001' => array( + 'item_id' => 1, + 'level' => 1, + 'created_at' => 0, + 'updated_at' => 0 + ), + 'IDX0002' => array( + 'item_id' => 1, + 'level' => 2, + 'created_at' => 100, + 'updated_at' => 100 + ), + 'IDX0003' => array( + 'item_id' => 1, + 'level' => 3, + 'created_at' => 150, + 'updated_at' => 150 + ) + ); + + $stub = $this->_getMockedInstance($this->_planet, $this->_user, array('_generateIndex')); + + $stub->expects($this->exactly(3)) + ->method('_initItem') + ->will($this->onConsecutiveCalls( + new Legacies_Empire_Model_Builder_Item($this->_queueItemsData['IDX0001']), + new Legacies_Empire_Model_Builder_Item($this->_queueItemsData['IDX0002']), + new Legacies_Empire_Model_Builder_Item($this->_queueItemsData['IDX0003']) + )); + + $stub->expects($this->exactly(3)) + ->method('_generateIndex') + ->will($this->onConsecutiveCalls( + 'IDX0001', + 'IDX0002', + 'IDX0003' + )); + + $stub->enqueue($this->_queueItemsData['IDX0001']); + $stub->enqueue($this->_queueItemsData['IDX0002']); + $stub->enqueue($this->_queueItemsData['IDX0003']); + + $this->assertEquals(serialize($this->_queueItemsData), $stub->serialize()); + } + + public function testUnSerializingQueue() + { + $serializedData = serialize($this->_queueItemsData); + + $stub = $this->_getMockedInstance($this->_planet, $this->_user, array('_generateIndex')); + + $stub->expects($this->exactly(3)) + ->method('_initItem') + ->will($this->onConsecutiveCalls( + new Legacies_Empire_Model_Builder_Item($this->_queueItemsData['IDX0001']), + new Legacies_Empire_Model_Builder_Item($this->_queueItemsData['IDX0002']), + new Legacies_Empire_Model_Builder_Item($this->_queueItemsData['IDX0003']) + )); + + $stub->expects($this->never()) + ->method('_generateIndex'); + + $stub->unserialize($serializedData); + + $this->assertAttributeNotEmpty('_queue', $stub); + + $this->assertEquals(serialize($this->_queueItemsData), $stub->serialize()); + } + + public function testUnSerializingQueueWithInvalidData() + { + $serializedData = ''; + + $stub = $this->_getMockedInstance($this->_planet, $this->_user, array('_generateIndex')); + + $stub->expects($this->never()) + ->method('_initItem'); + + $stub->expects($this->never()) + ->method('_generateIndex'); + + $stub->unserialize($serializedData); + + $this->assertAttributeEmpty('_queue', $stub); + + $this->assertEquals('a:0:{}', $stub->serialize()); + } + + public function testInitItemReturningNull() + { + $serializedData = serialize($this->_queueItemsData); + + $stub = $this->_getMockedInstance($this->_planet, $this->_user, array('_generateIndex')); + + $stub->expects($this->exactly(3)) + ->method('_initItem') + ->will($this->returnValue(null)); + + $stub->unserialize($serializedData); + + $this->assertAttributeEmpty('_queue', $stub); + + $this->assertEquals('a:0:{}', $stub->serialize()); + } + + public function testCheckAvailability() + { + $serializedData = serialize($this->_queueItemsData); + + $stub = $this->_getMockedInstance($this->_planet, $this->_user, array('_generateIndex')); + + $stub->expects($this->any()) + ->method('_initItem') + ->will($this->onConsecutiveCalls( + new Legacies_Empire_Model_Builder_Item($this->_queueItemsData['IDX0001']) + )); + + $this->assertTrue($stub->checkAvailability(Legacies_Empire::ID_BUILDING_METAL_MINE)); + $this->assertTrue($stub->checkAvailability(Legacies_Empire::ID_BUILDING_CRISTAL_MINE)); + $this->assertTrue($stub->checkAvailability(Legacies_Empire::ID_BUILDING_DEUTERIUM_SYNTHETISER)); + $this->assertTrue($stub->checkAvailability(Legacies_Empire::ID_BUILDING_FUSION_REACTOR)); + } +} diff --git a/src/application/code/test/Legacies/ObjectTest.php b/src/application/code/test/Legacies/ObjectTest.php new file mode 100644 index 0000000..234f744 --- /dev/null +++ b/src/application/code/test/Legacies/ObjectTest.php @@ -0,0 +1,205 @@ +_object = new Wootook_Object(); + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } + + /** + * @todo Implement testSetData(). + */ + public function testSetData() + { + $this->assertAttributeEmpty('_data', $this->_object); + + $this->_object->setData('test', true); + $expected = array('test' => true); + $this->assertAttributeEquals($expected, '_data', $this->_object); + + $this->_object->setData('test', 'testing'); + $expected = array('test' => 'testing'); + $this->assertAttributeEquals($expected, '_data', $this->_object); + } + + /** + * @requires testSetData + */ + public function testGetData() + { + $this->_object->setData('test', 'testing'); + + $this->assertEquals('testing', $this->_object->getData('test')); + + $this->_object->setData('test', true); + $this->assertTrue($this->_object->getData('test')); + + $this->assertNull($this->_object->getData('testing')); + } + + /** + * @requires testSetData + * @requires testGetData + */ + public function testGetAllDatas() + { + $this->_object->setData('test', 'testing'); + + $expected = array('test' => 'testing'); + $this->assertEquals($expected, $this->_object->getAllDatas()); + + $this->_object->setData('test', true); + $expected = array('test' => true); + $this->assertEquals($expected, $this->_object->getAllDatas()); + } + + /** + * @requires testSetData + * @requires testGetData + */ + public function testHasData() + { + $this->_object->setData('test', 'testing'); + + $this->assertTrue($this->_object->hasData('test')); + $this->assertFalse($this->_object->hasData('testing')); + } + + /** + * @requires testSetData + */ + public function testAddData() + { + $this->_object->setData('test', 'testing'); + + $expected = array( + 'test' => 'testing', + 'testing' => true, + 'legacies' => false + ); + + $this->_object->addData(array( + 'testing' => true, + 'legacies' => false + )); + $this->assertAttributeEquals($expected, '_data', $this->_object); + + $expected = array( + 'test' => 'legacies', + 'testing' => false, + 'legacies' => 'Wootook_Object' + ); + + $this->_object->addData($expected); + $this->assertAttributeEquals($expected, '_data', $this->_object); + } + + /** + * @requires testSetData + */ + public function testUnsetData() + { + $this->_object->setData('test', 'testing'); + $this->_object->setData('testing', true); + $this->_object->setData('removed', 'me!'); + $this->_object->setData('legacies', false); + + $expected = array( + 'test' => 'testing', + 'testing' => true, + 'legacies' => false + ); + + $this->_object->unsetData('removed'); + $this->assertAttributeEquals($expected, '_data', $this->_object); + } + + /** + * @todo Implement testClearData(). + */ + public function testClearData() + { + $this->_object->setData('test', 'testing'); + $this->_object->setData('testing', true); + $this->_object->setData('removed', 'me!'); + $this->_object->setData('legacies', false); + + $expected = array( + 'test' => 'testing', + 'testing' => true, + 'legacies' => false + ); + + $this->_object->clearData(); + $this->assertAttributeEmpty('_data', $this->_object); + } + + /** + * @requires testSetData + * @requires testHasData + */ + public function testOffsetExists() + { + $this->_object->setData('test', 'testing'); + + $this->assertTrue(isset($this->_object['test'])); + } + + /** + * @requires testSetData + * @requires testGetData + */ + public function testOffsetGet() + { + $this->_object->setData('test', 'testing'); + + $this->assertEquals('testing', $this->_object['test']); + } + + /** + * @requires testGetData + * @requires testSetData + */ + public function testOffsetSet() + { + $this->_object['test'] = 'testing'; + + $this->assertEquals('testing', $this->_object->getData('test')); + } + + /** + * @requires testSetData + * @requires testGetData + */ + public function testOffsetUnset() + { + $this->_object->setData('test', 'testing'); + + unset($this->_object['test']); + + $this->assertAttributeEmpty('_data', $this->_object); + $this->assertNull($this->_object->getData('test')); + } +} diff --git a/src/application/code/test/WootookTest.php b/src/application/code/test/WootookTest.php new file mode 100644 index 0000000..8962684 --- /dev/null +++ b/src/application/code/test/WootookTest.php @@ -0,0 +1,119 @@ +setData('success', true); + } + + public static function staticListener($observer) + { + $observer->setData('success', true); + } + + public function testRegisteringNonStaticEvent() + { + Wootook::registerListener('testing', array($this, 'nonStaticListener')); + + $observer = Wootook::dispatchEvent('testing', array('success' => false)); + + $this->assertInstanceOf('Legacies_Core_Event', $observer); + $this->assertTrue($observer->getData('success')); + } + + public function testRegisteringStaticEvent() + { + Wootook::registerListener('testing', array(get_class($this), 'staticListener')); + + $observer = Wootook::dispatchEvent('testing', array('success' => false)); + + $this->assertInstanceOf('Legacies_Core_Event', $observer); + $this->assertTrue($observer->getData('success')); + } + + public function testDispatchNonExistingEvent() + { + $observer = Wootook::dispatchEvent('testing', array('success' => true)); + + $this->assertInstanceOf('Legacies_Core_Event', $observer); + $this->assertTrue($observer->getData('success')); + } + + /** + * @depends testRegisteringNonStaticEvent + */ + public function testUnregisteringNonStaticEvent() + { + Wootook::registerListener('testing', array($this, 'nonStaticListener')); + + Wootook::clearEventListeners('testing'); + + $observer = Wootook::dispatchEvent('testing', array('success' => false)); + + $this->assertInstanceOf('Legacies_Core_Event', $observer); + $this->assertFalse($observer->getData('success')); + } + + /** + * @depends testRegisteringStaticEvent + */ + public function testUnregisteringStaticEvent() + { + Wootook::registerListener('testing', array(get_class($this), 'staticListener')); + + Wootook::clearEventListeners('testing'); + + $observer = Wootook::dispatchEvent('testing', array('success' => false)); + + $this->assertInstanceOf('Legacies_Core_Event', $observer); + $this->assertFalse($observer->getData('success')); + } + + public function testGetSession() + { + $this->markTestSkipped('Sessions could not be tested in CLI.'); + $this->assertInstanceOf('Legacies_Core_Model_Session', Wootook::getSession('test')); + } + + public function testGetTranslator() + { + $this->assertInstanceOf('Legacies_Core_Model_Translator', Wootook::getTranslator('test')); + + $this->assertInstanceOf('Legacies_Core_Model_Translator', Wootook::getTranslator()); + } + + public function testTranslate() + { + $this->assertEquals('My testing message!', Wootook::translate('test', 'My %s message!', array('testing'))); + } + + public function testTranslateGettextStyle() + { + $this->assertEquals('My testing message!', Wootook::__('My %s message!', 'testing')); + } + + public function testSetDefaultLocale() + { + Wootook::setDefaultLocale('test'); + + $this->assertAttributeEquals('test', '_defaultLocale', 'Beyond'); + } + + /** + * + * @requires testSetDefaultLocale + */ + public function testGetDefaultLocale() + { + Wootook::setDefaultLocale('test'); + + $this->assertEquals('test', Wootook::getDefaultLocale()); + } +} diff --git a/src/application/code/test/bootstrap.php b/src/application/code/test/bootstrap.php new file mode 100644 index 0000000..b304533 --- /dev/null +++ b/src/application/code/test/bootstrap.php @@ -0,0 +1,66 @@ + array( + 'application' => array( + 'code' => array( + 'community' => array(), + 'core' => array(), + 'libraries' => array(), + 'local' => array(), + ), + 'design' => array( + 'layouts' => array(), + 'scripts' => array() + ) + ), + 'data' => array( + 'combat.php' => ' ' ' ' ' ' ' ' ' array( + 'date' => array( + 'timezone' => 'Europe/Paris' + ), + 'database' => array( + 'engine' => 'mysql', + 'options' => array( + 'hostname' => 'localhost', + 'username' => 'root', + 'password' => '', + 'database' => 'db_xnova' + ), + 'table_prefix' => 'game_', + ), + 'layout' => array( + 'page' => 'page.php', + 'empire' => 'empire.php' + ) + ) + ), true) . ';' + ), 'root', 644); + +define('ROOT_PATH', vfsStream::url('')); +define('APPLICATION_PATH', vfsStream::url('includes/application')); + diff --git a/src/application/design/backend/base/default/layouts/admin.xml b/src/application/design/backend/base/default/layouts/admin.xml new file mode 100644 index 0000000..18fde20 --- /dev/null +++ b/src/application/design/backend/base/default/layouts/admin.xml @@ -0,0 +1,19 @@ + + + + + + + + + system + System + + + players + Player Accounts + + + + + diff --git a/src/application/design/frontend/base/default/layouts/empire.xml b/src/application/design/frontend/base/default/layouts/empire.xml index 9fca984..f18da5b 100644 --- a/src/application/design/frontend/base/default/layouts/empire.xml +++ b/src/application/design/frontend/base/default/layouts/empire.xml @@ -1,8 +1,6 @@ - - @@ -186,23 +184,44 @@ + + + + + + + - + + + overview + + + - + + + + player/overview/fleet/item.phtml + + + empire/overview.fleet.list.item + + - + + @@ -210,7 +229,8 @@ - + + @@ -218,6 +238,7 @@ + @@ -242,6 +263,7 @@ + @@ -276,6 +298,7 @@ + diff --git a/src/application/design/frontend/base/default/layouts/page.xml b/src/application/design/frontend/base/default/layouts/page.xml index 53a6c80..b2975e7 100644 --- a/src/application/design/frontend/base/default/layouts/page.xml +++ b/src/application/design/frontend/base/default/layouts/page.xml @@ -59,8 +59,6 @@ - - public @@ -90,6 +88,7 @@ + @@ -103,6 +102,7 @@ + diff --git a/src/application/design/frontend/base/default/layouts/player.xml b/src/application/design/frontend/base/default/layouts/player.xml index 19b1e65..16bd812 100644 --- a/src/application/design/frontend/base/default/layouts/player.xml +++ b/src/application/design/frontend/base/default/layouts/player.xml @@ -1,6 +1,7 @@ + @@ -24,6 +25,7 @@ + @@ -47,6 +49,7 @@ + @@ -68,21 +71,4 @@ - - - - - - - - - - - - - - Overview - - - - \ No newline at end of file + diff --git a/src/application/design/frontend/base/default/scripts/empire/planet/buildings/queue.phtml b/src/application/design/frontend/base/default/scripts/empire/planet/buildings/queue.phtml index d11b574..0549d6c 100644 --- a/src/application/design/frontend/base/default/scripts/empire/planet/buildings/queue.phtml +++ b/src/application/design/frontend/base/default/scripts/empire/planet/buildings/queue.phtml @@ -1,6 +1,6 @@ isEmpty()):?>

__('Work in progress')?>

-getPartial('item-list')->render() ?> +renderPartial('item-list') ?>
- \ No newline at end of file + diff --git a/src/application/design/frontend/base/default/scripts/empire/topnav.phtml b/src/application/design/frontend/base/default/scripts/empire/topnav.phtml index ab4f285..cd3877b 100644 --- a/src/application/design/frontend/base/default/scripts/empire/topnav.phtml +++ b/src/application/design/frontend/base/default/scripts/empire/topnav.phtml @@ -7,11 +7,11 @@

escape($planet->getName())?>

getMoon()) !== null): ?> - + - +
diff --git a/src/application/design/frontend/base/default/scripts/page/2columns-left.phtml b/src/application/design/frontend/base/default/scripts/page/2columns-left.phtml index 2a5d895..c2a4134 100644 --- a/src/application/design/frontend/base/default/scripts/page/2columns-left.phtml +++ b/src/application/design/frontend/base/default/scripts/page/2columns-left.phtml @@ -7,11 +7,14 @@
header->render()?>
-
- left->render()?> -
-
- content->render()?> +
+
+ left->render()?> +
+
+ content->render()?> +
+
diff --git a/src/application/design/frontend/base/default/scripts/page/2columns-right.phtml b/src/application/design/frontend/base/default/scripts/page/2columns-right.phtml index 95fd758..946e2c1 100644 --- a/src/application/design/frontend/base/default/scripts/page/2columns-right.phtml +++ b/src/application/design/frontend/base/default/scripts/page/2columns-right.phtml @@ -7,11 +7,14 @@
header->render()?>
-
- content->render()?> -
-
- left->render()?> +
+
+ content->render()?> +
+
+ left->render()?> +
+
diff --git a/src/application/design/frontend/base/default/scripts/page/3columns.phtml b/src/application/design/frontend/base/default/scripts/page/3columns.phtml index 0611279..1b1248a 100644 --- a/src/application/design/frontend/base/default/scripts/page/3columns.phtml +++ b/src/application/design/frontend/base/default/scripts/page/3columns.phtml @@ -7,14 +7,17 @@
header->render()?>
-
- left->render()?> -
-
- content->render()?> -
-
- left->render()?> +
+
+ left->render()?> +
+
+ content->render()?> +
+
+ left->render()?> +
+
diff --git a/src/application/design/frontend/base/default/scripts/player/login.phtml b/src/application/design/frontend/base/default/scripts/player/login.phtml index 602e6be..c4222de 100644 --- a/src/application/design/frontend/base/default/scripts/player/login.phtml +++ b/src/application/design/frontend/base/default/scripts/player/login.phtml @@ -15,7 +15,7 @@

- __('I have lost my password.')?> + __('I have lost my password.')?>

diff --git a/src/application/design/frontend/base/default/scripts/player/lost-password.phtml b/src/application/design/frontend/base/default/scripts/player/lost-password.phtml index 67454ca..f44b287 100644 --- a/src/application/design/frontend/base/default/scripts/player/lost-password.phtml +++ b/src/application/design/frontend/base/default/scripts/player/lost-password.phtml @@ -6,9 +6,9 @@

-

+

diff --git a/src/application/design/frontend/base/default/scripts/player/overview/fleet/item.phtml b/src/application/design/frontend/base/default/scripts/player/overview/fleet/item.phtml index f01fb8e..f66e128 100644 --- a/src/application/design/frontend/base/default/scripts/player/overview/fleet/item.phtml +++ b/src/application/design/frontend/base/default/scripts/player/overview/fleet/item.phtml @@ -1,21 +1,39 @@ -getData('fleet')?> -getData('user')?> - - getData('fleet_javai')?> - -

-
- getArrivalTime()?> - - - isOwnedBy($user) || $fleet->isMission(Legacies_Empire::ID_MISSION_TRANSPORT) || $fleet->isMission(Legacies_Empire::ID_MISSION_STATION) || $fleet->isMission(Legacies_Empire::ID_MISSION_STATION_ALLY)):?> - __('An hostile fleet sent by %1$s, coming from %2$s, reaches your planet %3$d. It has been sent with the mission: %4$d', $fleet->getOwner()->getUsername(), $fleet->getOriginPlanet()->getName(), $fleet->getDestinationPlanet()->getName(), $fleet->getMissionLabel())?> - isOwnedBy($user) || $fleet->isMission(Legacies_Empire::ID_MISSION_ATTACK) || $fleet->isMission(Legacies_Empire::ID_MISSION_GROUP_ATTACK) || $fleet->isMission(Legacies_Empire::ID_MISSION_DESTROY) || $fleet->isMission(Legacies_Empire::ID_MISSION_MISSILES) || $fleet->isMission(Legacies_Empire::ID_MISSION_SPY)):?> - __('Your hostile fleet, sent from %1$s, reaches %2$d\'s planet %3$d. It has been sent with the mission: %4$d', $fleet->getOriginPlanet()->getName(), $fleet->getDestinationPlanet()->getUser()->getUsername(), $fleet->getDestinationPlanet()->getName(), $fleet->getMissionLabel())?> - isOwnedBy($user)):?> - __('Your peaceful fleet, sent from %2$s, reaches the planet %3$d. It has been sent with the mission: %4$d', $fleet->getOwner()->getUsername(), $fleet->getOriginPlanet()->getName(), $fleet->getDestinationPlanet()->getName(), $fleet->getMissionLabel())?> - - __('A peaceful fleet sent by %1$s, coming from %2$s, reaches your planet %3$d. It has been sent with the mission: %4$d', $fleet->getOwner()->getUsername(), $fleet->getOriginPlanet()->getName(), $fleet->getDestinationPlanet()->getName(), $fleet->getMissionLabel())?> - - - getData('fleet_javas')?> - \ No newline at end of file +
+ renderDateTime($this->getStartTime())?> + renderDateTime($this->getActionTime())?> + renderDateTime($this->getArrivalTime())?> +
+ getPlayer() ?> + isOwner() && ($this->isMission(Legacies_Empire::ID_MISSION_TRANSPORT) || $this->isMission(Legacies_Empire::ID_MISSION_STATION) || $this->isMission(Legacies_Empire::ID_MISSION_STATION_ALLY))):?> + + __('An hostile fleet sent by %1$s, coming from %2$s[%3$s], reaches your planet %4$s[%5$s]. It has been sent with the mission: %6$s', + implode(', ', $this->getFleetOwnerUsernames()), + $this->getOriginPlanetName(), $this->getOriginPlanetCoords(), + $this->getDestinationPlanetName(), $this->getDestinationPlanetCoords(), + $this->getMissionLabel())?> + + isOwner() && ($this->isMission(Legacies_Empire::ID_MISSION_ATTACK) || $this->isMission(Legacies_Empire::ID_MISSION_GROUP_ATTACK) || $this->isMission(Legacies_Empire::ID_MISSION_DESTROY) || $this->isMission(Legacies_Empire::ID_MISSION_MISSILES) || $this->isMission(Legacies_Empire::ID_MISSION_SPY))):?> + + __('Your hostile fleet sent from %1$s[%2$s], reaches %3$s\'s planet %4$s[%5$s]. It has been sent with the mission: %6$s', + $this->getOriginPlanetName(), $this->getOriginPlanetCoords(), + implode(', ', $this->getFleetOwnerUsernames()), + $this->getDestinationPlanetName(), $this->getDestinationPlanetCoords(), + $this->getMissionLabel())?> + + isOwner()):?> + + __('Your peaceful fleet sent from %1$s[%2$s], reaches the planet %3$s[%4$s]. It has been sent with the mission: %5$s', + $this->getOriginPlanetName(), $this->getOriginPlanetCoords(), + $this->getDestinationPlanetName(), $this->getDestinationPlanetCoords(), + $this->getMissionLabel())?> + + + + __('A peaceful fleet sent by %1$s, coming from %2$s[%3$s], reaches the planet %4$s[%5$s]. It has been sent with the mission: %6$s', + implode(', ', $this->getFleetOwnerUsernames()), + $this->getOriginPlanetName(), $this->getOriginPlanetCoords(), + $this->getDestinationPlanetName(), $this->getDestinationPlanetCoords(), + $this->getMissionLabel())?> + +
+
diff --git a/src/application/design/frontend/base/default/scripts/player/overview/fleet/list.phtml b/src/application/design/frontend/base/default/scripts/player/overview/fleet/list.phtml new file mode 100644 index 0000000..d5d0e4e --- /dev/null +++ b/src/application/design/frontend/base/default/scripts/player/overview/fleet/list.phtml @@ -0,0 +1,9 @@ +
+

__('Fleets') ?>

+ getFleetCollection()?> + getSize() > 0): ?> + renderPartial('item-list')?> + +

__('There are currently no fleets.')?>

+ +
diff --git a/src/application/design/frontend/base/default/scripts/player/overview/stats/mini.phtml b/src/application/design/frontend/base/default/scripts/player/overview/stats/mini.phtml index 04101c6..6ca6d7d 100644 --- a/src/application/design/frontend/base/default/scripts/player/overview/stats/mini.phtml +++ b/src/application/design/frontend/base/default/scripts/player/overview/stats/mini.phtml @@ -1,7 +1,8 @@
-

escape($this->getPlanetName())?>

-

escape($this->getPlanetCoords())?>

-

- -

+

__('Your statistics')?>

+
    + getPlayerStatData() as $stat): ?> +
  • + +
diff --git a/src/application/design/frontend/base/default/scripts/player/registration.phtml b/src/application/design/frontend/base/default/scripts/player/registration.phtml index 0be5fbc..efdea56 100644 --- a/src/application/design/frontend/base/default/scripts/player/registration.phtml +++ b/src/application/design/frontend/base/default/scripts/player/registration.phtml @@ -1,5 +1,5 @@ getLayout()->getMessagesBlock()->renderGroupedHtml()?> -
+

__('Register')?>

__('User data:')?> diff --git a/src/application/gamedata/legacies/default/events.php b/src/application/gamedata/legacies/default/events.php index c9e7667..09af7ec 100644 --- a/src/application/gamedata/legacies/default/events.php +++ b/src/application/gamedata/legacies/default/events.php @@ -9,14 +9,15 @@ 'register.before' => array(), 'register.failure' => array(), 'register.success' => array(), - 'planet.update' => array( - array('Wootook_Empire_Model_Planet', 'planetUpdateListener'), - array('Legacies_Empire_Model_Planet_Building_Shipyard', 'planetUpdateListener') - ), 'user.init' => array(), 'planet.init' => array( array('Wootook_Empire_Model_Galaxy_Position', 'initPlanetListerner') ), + 'planet.update' => array( + array('Wootook_Empire_Model_Planet', 'planetUpdateListener'), + array('Legacies_Empire_Model_Planet_Building_Shipyard', 'planetUpdateListener'), + 'flyingFleetListener' + ), 'planet.shipyard.check-availability' => array(), 'planet.shipyard.update-queue.before' => array(), 'planet.shipyard.update-queue.after' => array(), @@ -34,5 +35,8 @@ ), 'planet.research-lab.technology.speed-enhancement' => array( array('Legacies_Empire_Model_Player_Technology_IntergalacticResearchNetwork', 'researchTechnologyEnhancementListener') + ), + 'core.mvc.controller.front.pre-dispatch' => array( + array('Wootook_Empire_Model_Planet', 'planetChangeListener') ) ); diff --git a/src/floten3.php b/src/floten3.php index b7abdec..23f3985 100644 --- a/src/floten3.php +++ b/src/floten3.php @@ -425,19 +425,22 @@ if ($destinationUser['authlevel'] > $user['authlevel']) { try { $writeAdapter->beginTransaction(); + $mapper = $writeAdapter->getDataMapper(); + $dateMapper = $mapper->load('date-time'); + $writeAdapter->insert() ->into($writeAdapter->getTable('fleets')) ->set('fleet_owner', $user->getId()) ->set('fleet_mission', $mission) ->set('fleet_amount', $FleetShipCount) ->set('fleet_array', $serializedFleetArray) - ->set('fleet_start_time', $startTime) + ->set('fleet_start_time', $dateMapper->encode($startTime)) ->set('fleet_start_galaxy', $planet->getGalaxy()) ->set('fleet_start_system', $planet->getSystem()) ->set('fleet_start_planet', $planet->getPosition()) ->set('fleet_start_type', $planet->getType()) - ->set('fleet_end_time', $endTime) - ->set('fleet_end_stay', $StayDuration) + ->set('fleet_end_time', $dateMapper->encode($endTime)) + ->set('fleet_end_stay', $dateMapper->encode($StayTime)) ->set('fleet_end_galaxy', $galaxy) ->set('fleet_end_system', $system) ->set('fleet_end_planet', $position) @@ -446,7 +449,7 @@ try { ->set('fleet_resource_crystal', intval($TransCrystal)) // FIXME: refactor field name ->set('fleet_resource_deuterium', intval($TransDeuterium)) ->set('fleet_target_owner', $destination['id_owner']) - ->set('start_time', time()) + ->set('start_time', $dateMapper->encode(time())) ->execute() ; @@ -481,10 +484,10 @@ $page .= "". $lang['fl_deute_need'] .""; $page .= "". pretty_number($consumption) .""; $page .= ""; $page .= "". $lang['fl_from'] .""; -$page .= "". $_POST['thisgalaxy'] .":". $_POST['thissystem']. ":". $_POST['thisplanet'] .""; +$page .= "". $planet->getCoords() .""; $page .= ""; $page .= "". $lang['fl_dest'] .""; -$page .= "". $galaxy .":". $system .":". $planet .""; +$page .= "". $galaxy . ':' . $system . ':' . $position .""; $page .= ""; $page .= "". $lang['fl_time_go'] .""; $page .= "". date("M D d H:i:s", $startTime) .""; @@ -494,10 +497,11 @@ $page .= "". date("M D d H:i:s", $endTime) .""; $page .= ""; $page .= "". $lang['fl_title'] .""; -foreach ($fleetArray as $Ship => $Count) { +$helper = Wootook_Empire_Helper_Config_Labels::getSingleton(); +foreach ($fleetArray as $shipId => $shipCount) { $page .= ""; - $page .= "". $lang['tech'][$Ship] .""; - $page .= "". pretty_number($Count) .""; + $page .= "". $helper[$shipId]['name'] .""; + $page .= "". pretty_number($shipCount) .""; } $page .= ""; diff --git a/src/includes/bb.class.php b/src/includes/bb.class.php deleted file mode 100644 index 53aab63..0000000 --- a/src/includes/bb.class.php +++ /dev/null @@ -1,247 +0,0 @@ -$1", - //soulignement - "$1", - //mise en italique - "$1", - //mise en couleur - "$2", - //liste � puce 1 - "
    $1
", - //liste � puce 2 - "
  • $1
  • ", - // Lien nomm� - "$2", - //afficher les images - "", - // Lien - "$1", - // Email nomm� - "$2", - // Email - "$1", - //Size H1 - "

    $1

    ", - //Size H2 - "

    $1

    ", - //Size H3 - "

    $1

    ", - //Size H4 - "

    $1

    ", - //Size H5 - "
    $1
    ", - //Size Tres Petit - "

    $1

    ", - //Size Petit - "

    $1

    ", - //Size Normal - "

    $1

    ", - //Size Moyen - "
    $1
    ", - //Size Grand - "$1", - // Size 18 - "
    $1
    ", - // Quote - "
    Citation :
    $1


    ", - // Quote nomm� - "
    $1 :
    $2


    ", - // Code - "
    Code :
    $1


    ", - - ); - - $texte = preg_replace($bbcode,$html,$texte); - - return $texte ; - - } - ############################################################################################################## - function div_page($nb_s,$d,$id,$cat,$nb_ep) - { - if($nb_s > $nb_ep) - { - $nb_p = ceil($nb_s / $nb_ep); - $p_suiv = $d+1; - $p_prec = $d-1; - - if($d > 1) - { - echo '<< '; - echo ''; - } - - echo ' Page n� '.$d.' / '.$nb_p.''; - - if($d < $nb_p) - { - echo ' >'; - echo ' >>'; - } - echo '

    '; - } - } - - function div_page_l($nb_s,$d,$id,$p,$s) - { - - if(strlen($s) > 1) - { - $s_lien = "&s=".$s; - } - else - { - $s_lien = ""; - } - - if($nb_s > 10) - { - echo'
    '; - $nb_p = ceil($nb_s / 10); - $p_suiv = $p+1; - $p_prec = $p-1; - - if($p > 1) - { - echo '<< '; - echo ''; - } - - echo ' Page n� '.$p.' / '.$nb_p.''; - - if($p < $nb_p) - { - echo ' >'; - echo ' >>'; - } - echo '
    '; - - - } - - } - - ############################################################################################################## - function smileys($chaine) - { - global $userrow; - - $chaine = str_replace(":D", "", $chaine); - $chaine = str_replace(";)", "", $chaine); - $chaine = str_replace(":(", "", $chaine); - $chaine = str_replace(":surpris:", "", $chaine); - $chaine = str_replace(":o", "", $chaine); - $chaine = str_replace(":confus:", "", $chaine); - $chaine = str_replace(":lol:", "", $chaine); - $chaine = str_replace(":fire:", " ", $chaine); - $chaine = str_replace(":splif:", "", $chaine); - $chaine = str_replace(":bigsmile:", "", $chaine); - $chaine = str_replace(":x", "", $chaine); - $chaine = str_replace(":roll:", "", $chaine); - $chaine = str_replace(":bigcry:", "", $chaine); - $chaine = str_replace(":colere:", "", $chaine); - $chaine = str_replace(":P", "", $chaine); - $chaine = str_replace("8)", "", $chaine); - $chaine = str_replace(":)", "", $chaine); - $chaine = str_replace("^^oops:", "", $chaine); - - return($chaine); - - } - - - -} - -?> \ No newline at end of file diff --git a/src/includes/deprecated.php b/src/includes/deprecated.php index f8ec4a6..e8bee69 100644 --- a/src/includes/deprecated.php +++ b/src/includes/deprecated.php @@ -529,7 +529,7 @@ function display($page, $title = '', $topnav = true, $metatags = '', $adminPage // TODO: implement extra meta tags $layout = Deprecated::getLayout($adminPage); if ($adminPage === false) { - $layout->load('empire'); + $layout->load('deprecated'); } else { $layout->setDomain(Wootook_Core_Model_Layout::DOMAIN_BACKEND); $layout->load('admin'); @@ -715,3 +715,108 @@ function AdminMessage($message, $title = 'Error', $dest = null, $time = '3', $co echo $layout->render(); exit(0); } + +/** + * + * @deprecated + * @param Wootook_Empire_Model_Planet $planet + */ +function flyingFleetListener($event) +{ + // defined('DEPRECATION') || Wootook_Core_ErrorProfiler::getSingleton()->addException(new Wootook_Core_Exception_Deprecated(sprintf('Function "%s" is deprecated', __FUNCTION__))); + + $planet = $event->getData('planet'); + + FlyingFleetHandler($planet); +} + +/** + * + * @deprecated + * @param Wootook_Empire_Model_Planet $planet + */ +function FlyingFleetHandler($planet) +{ + // defined('DEPRECATION') || Wootook_Core_ErrorProfiler::getSingleton()->addException(new Wootook_Core_Exception_Deprecated(sprintf('Function "%s" is deprecated', __FUNCTION__))); + + foreach ($planet->getFleetCollection()->load() as $fleet) { + try { + $fleet->getWriteConnection()->beginTransaction(); + + switch ($fleet["fleet_mission"]) { + case Legacies_Empire::ID_MISSION_ATTACK: + // Attaquer + MissionCaseAttack($fleet); + break; + + case Legacies_Empire::ID_MISSION_TRANSPORT: + // Transporter + MissionCaseTransport($fleet); + break; + + case Legacies_Empire::ID_MISSION_STATION: + // Stationner + MissionCaseStay($fleet); + break; + + case Legacies_Empire::ID_MISSION_STATION_ALLY: + // Stationner chez un Allié + MissionCaseStayAlly($fleet); + break; + + case Legacies_Empire::ID_MISSION_SPY: + // Flotte d'espionnage + MissionCaseSpy($fleet); + break; + + case Legacies_Empire::ID_MISSION_SETTLE_COLONY: + // Coloniser + MissionCaseColonisation($fleet); + break; + + case Legacies_Empire::ID_MISSION_RECYCLE: + // Recyclage + MissionCaseRecycling($fleet); + break; + + case Legacies_Empire::ID_MISSION_DESTROY: + // Detruire ??? dans le code ogame c'est 9 !! + MissionCaseDestruction($fleet); + break; + + case Legacies_Empire::ID_MISSION_EXPEDITION: + // Expeditions + MissionCaseExpedition($fleet); + break; + + case Legacies_Empire::ID_MISSION_ORE_MINING: + // Exploitation + MissionCaseExploit($fleet); + break; + + case Legacies_Empire::ID_MISSION_GROUP_ATTACK: // TODO: implement mission type + case Legacies_Empire::ID_MISSION_MISSILES: // TODO: implement mission type + default: + $fleet->delete(); + break; + } + + $fleet->getWriteConnection()->commit(); + } catch (Wootook_Core_Exception_Exception $e) { + $fleet->getWriteConnection()->rollback(); + Wootook_Core_ErrorProfiler::getSingleton()->addException($e); + } + } +} + +/** + * + * @deprecated + * @param unknown_type $String + */ +function CheckInputStrings($string) +{ + defined('DEPRECATION') || Wootook_Core_ErrorProfiler::getSingleton()->addException(new Wootook_Core_Exception_Deprecated(sprintf('Function "%s" is deprecated', __FUNCTION__))); + + return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); +} diff --git a/src/includes/functions/CheckInputStrings.php b/src/includes/functions/CheckInputStrings.php deleted file mode 100644 index 04b60c8..0000000 --- a/src/includes/functions/CheckInputStrings.php +++ /dev/null @@ -1,39 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $String - */ -function CheckInputStrings($string) -{ - return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); -} \ No newline at end of file diff --git a/src/includes/functions/DeleteSelectedUser.php b/src/includes/functions/DeleteSelectedUser.php deleted file mode 100644 index 4a69a9b..0000000 --- a/src/includes/functions/DeleteSelectedUser.php +++ /dev/null @@ -1,74 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $UserID - */ -function DeleteSelectedUser ( $UserID ) { - - trigger_error(sprintf('%s is deprecated', __FUNCTION__), E_USER_DEPRECATED); - $TheUser = doquery ( "SELECT * FROM {{table}} WHERE `id` = '" . $UserID . "';", 'users', true ); - if ( $TheUser['ally_id'] != 0 ) { - $TheAlly = doquery ( "SELECT * FROM {{table}} WHERE `id` = '" . $TheUser['ally_id'] . "';", 'alliance', true ); - $TheAlly['ally_members'] -= 1; - if ( $TheAlly['ally_members'] > 0 ) { - doquery ( "UPDATE {{table}} SET `ally_members` = '" . $TheAlly['ally_members'] . "' WHERE `id` = '" . $TheAlly['id'] . "';", 'alliance' ); - } else { - doquery ( "DELETE FROM {{table}} WHERE `id` = '" . $TheAlly['id'] . "';", 'alliance' ); - doquery ( "DELETE FROM {{table}} WHERE `stat_type` = '2' AND `id_owner` = '" . $TheAlly['id'] . "';", 'statpoints' ); - } - } - doquery ( "DELETE FROM {{table}} WHERE `stat_type` = '1' AND `id_owner` = '" . $UserID . "';", 'statpoints' ); - - $ThePlanets = doquery ( "SELECT * FROM {{table}} WHERE `id_owner` = '" . $UserID . "';", 'planets' ); - while ( $OnePlanet = $ThePlanets->fetch(PDO::FETCH_ASSOC) ) { - if ( $OnePlanet['planet_type'] == 1 ) { - doquery ( "DELETE FROM {{table}} WHERE `galaxy` = '" . $OnePlanet['galaxy'] . "' AND `system` = '" . $OnePlanet['system'] . "' AND `planet` = '" . $OnePlanet['planet'] . "';", 'galaxy' ); - } elseif ( $OnePlanet['planet_type'] == 3 ) { - doquery ( "DELETE FROM {{table}} WHERE `galaxy` = '" . $OnePlanet['galaxy'] . "' AND `system` = '" . $OnePlanet['system'] . "' AND `lunapos` = '" . $OnePlanet['planet'] . "';", 'lunas' ); - } - doquery ( "DELETE FROM {{table}} WHERE `id` = '" . $OnePlanet['id'] . "';", 'planets' ); - } - doquery ( "DELETE FROM {{table}} WHERE `message_sender` = '" . $UserID . "';", 'messages' ); - doquery ( "DELETE FROM {{table}} WHERE `message_owner` = '" . $UserID . "';", 'messages' ); - doquery ( "DELETE FROM {{table}} WHERE `owner` = '" . $UserID . "';", 'notes' ); - doquery ( "DELETE FROM {{table}} WHERE `fleet_owner` = '" . $UserID . "';", 'fleets' ); - doquery ( "DELETE FROM {{table}} WHERE `id_owner1` = '" . $UserID . "';", 'rw' ); - doquery ( "DELETE FROM {{table}} WHERE `id_owner2` = '" . $UserID . "';", 'rw' ); - doquery ( "DELETE FROM {{table}} WHERE `sender` = '" . $UserID . "';", 'buddy' ); - doquery ( "DELETE FROM {{table}} WHERE `owner` = '" . $UserID . "';", 'buddy' ); - doquery ( "DELETE FROM {{table}} WHERE `user` = '" . $UserID . "';", 'annonce' ); - doquery ( "DELETE FROM {{table}} WHERE `id` = '" . $UserID . "';", 'users' ); - -} - -?> \ No newline at end of file diff --git a/src/includes/functions/ElementBuildListBox.php b/src/includes/functions/ElementBuildListBox.php deleted file mode 100644 index 51c1141..0000000 --- a/src/includes/functions/ElementBuildListBox.php +++ /dev/null @@ -1,71 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $CurrentUser - * @param unknown_type $CurrentPlanet - */ -function ElementBuildListBox ( $CurrentUser, $CurrentPlanet ) { - global $lang, $pricelist; - - trigger_error(sprintf('%s is deprecated', __FUNCTION__), E_USER_DEPRECATED); -// // Array del b_hangar_id -// $ElementQueue = explode(';', $CurrentPlanet['b_hangar_id']); -// $NbrePerType = ""; -// $NamePerType = ""; -// $TimePerType = ""; -// -// foreach($ElementQueue as $ElementLine => $Element) { -// if ($Element != '') { -// $Element = explode(',', $Element); -// $ElementTime = GetBuildingTime( $CurrentUser, $CurrentPlanet, $Element[0] ); -// $QueueTime += $ElementTime * $Element[1]; -// $TimePerType .= "".$ElementTime.","; -// $NamePerType .= "'". html_entity_decode($lang['tech'][$Element[0]]) ."',"; -// $NbrePerType .= "".$Element[1].","; -// } -// } -// -// $parse = $lang; -// $parse['a'] = $NbrePerType; -// $parse['b'] = $NamePerType; -// $parse['c'] = $TimePerType; -// $parse['b_hangar_id_plus'] = $CurrentPlanet['b_hangar']; -// -// $parse['pretty_time_b_hangar'] = pretty_time($QueueTime - $CurrentPlanet['b_hangar']); -// -// $text .= parsetemplate(gettemplate('buildings_script'), $parse); -// -// return $text; -} - -?> \ No newline at end of file diff --git a/src/includes/functions/FlyingFleetHandler.php b/src/includes/functions/FlyingFleetHandler.php deleted file mode 100644 index 9933f7e..0000000 --- a/src/includes/functions/FlyingFleetHandler.php +++ /dev/null @@ -1,108 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $planet - */ -function FlyingFleetHandler($planet) { - global $resource; - - $sql =<<getFleetCollection(Wootook::now()) as $CurrentFleet) { - switch ($CurrentFleet["fleet_mission"]) { - case Legacies_Empire::ID_MISSION_ATTACK: - // Attaquer - MissionCaseAttack ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_TRANSPORT: - // Transporter - MissionCaseTransport ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_STATION: - // Stationner - MissionCaseStay ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_STATION_ALLY: - // Stationner chez un Allié - MissionCaseStayAlly ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_SPY: - // Flotte d'espionnage - MissionCaseSpy ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_SETTLE_COLONY: - // Coloniser - MissionCaseColonisation ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_RECYCLE: - // Recyclage - MissionCaseRecycling ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_DESTROY: - // Detruire ??? dans le code ogame c'est 9 !! - MissionCaseDestruction ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_EXPEDITION: - // Expeditions - MissionCaseExpedition ( $CurrentFleet ); - break; - - case Legacies_Empire::ID_MISSION_GROUP_ATTACK: // TODO: implement mission type - case Legacies_Empire::ID_MISSION_MISSILES: // TODO: implement mission type - default: - $CurrentFleet->delete(); - break; - } - } - - //doquery("UNLOCK TABLES", ""); // FIXME: use transactions -} \ No newline at end of file diff --git a/src/includes/functions/GalaxyRowPlanet.php b/src/includes/functions/GalaxyRowPlanet.php index 888f791..36301be 100644 --- a/src/includes/functions/GalaxyRowPlanet.php +++ b/src/includes/functions/GalaxyRowPlanet.php @@ -109,7 +109,7 @@ function GalaxyRowPlanet ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowUser, $Galaxy $Result .= ""; $Result .= ""; $Result .= ""; - $Result .= ""; + $Result .= ""; $Result .= ""; $Result .= ""; $Result .= $MissionType6Link; @@ -124,7 +124,7 @@ function GalaxyRowPlanet ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowUser, $Galaxy // $Result .= ", STICKY, MOUSEOFF, DELAY, ". ($user["settings_tooltiptime"] * 1000) .", CENTER, OFFSETX, -40, OFFSETY, -40 );'"; $Result .= ", STICKY, MOUSEOFF, DELAY, 750, CENTER, OFFSETX, -40, OFFSETY, -40 );'"; $Result .= " onmouseout='return nd();'>"; - $Result .= ""; + $Result .= ""; // $Result .= $GalaxyRowPlanet["name"]; $Result .= ""; } @@ -133,4 +133,4 @@ function GalaxyRowPlanet ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowUser, $Galaxy return $Result; } -?> \ No newline at end of file +?> diff --git a/src/includes/functions/GalaxyRowPlanetName.php b/src/includes/functions/GalaxyRowPlanetName.php index 60a2477..5a108ce 100644 --- a/src/includes/functions/GalaxyRowPlanetName.php +++ b/src/includes/functions/GalaxyRowPlanetName.php @@ -62,9 +62,14 @@ function GalaxyRowPlanetName ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowUser, $Ga $EndColor = ""; } - if ($GalaxyRowPlanet['last_update'] > (time()-59 * 60) AND - $GalaxyRowUser['id'] != $user['id']) { - $Inactivity = pretty_time_hour(time() - $GalaxyRowPlanet['last_update']); + $updateTimeLimit = new Wootook_Core_DateTime(); + $updateTimeLimit->sub(3600); + if ($updateTimeLimit->isLater($GalaxyRowPlanet['last_update']) && $GalaxyRowUser['id'] != $user['id']) { + if ($GalaxyRowPlanet['last_update'] instanceof Wootook_Core_DateTime) { + $Inactivity = pretty_time_hour(time() - $GalaxyRowPlanet['last_update']->getTimestamp()); + } else { + $Inactivity = pretty_time_hour(0); + } } if ($GalaxyRow && $GalaxyRowPlanet["destruyed"] == 0) { if ($HavePhalanx <> 0) { @@ -85,22 +90,25 @@ function GalaxyRowPlanetName ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowUser, $Ga $Result .= $TextColor . $PhalanxTypeLink . $EndColor; - if ($GalaxyRowPlanet['last_update'] > (time()-59 * 60) AND - $GalaxyRowUser['id'] != $user['id']) { - if ($GalaxyRowPlanet['last_update'] > (time()-10 * 60) AND - $GalaxyRowUser['id'] != $user['id']) { - $Result .= "(*)"; - } else { - $Result .= " (".$Inactivity.")"; - } - } - } elseif ($GalaxyRowPlanet["destruyed"] != 0) { - $Result .= $lang['gl_destroyedplanet']; - } + if ($GalaxyRowUser->getId() && $updateTimeLimit->isLater($GalaxyRowPlanet['last_update']) && + $GalaxyRowUser['id'] != $user['id']) { + + $updateTimeLimit = new Wootook_Core_DateTime(); + $updateTimeLimit->sub(600); + if ($GalaxyRowUser->getId() && $updateTimeLimit->isLater($GalaxyRowPlanet['last_update']) && + $GalaxyRowUser['id'] != $user['id']) { + $Result .= "(*)"; + } else { + $Result .= " (".$Inactivity.")"; + } + } + } elseif ($GalaxyRowPlanet["destruyed"] != 0) { + $Result .= $lang['gl_destroyedplanet']; + } $Result .= ""; return $Result; } -?> \ No newline at end of file +?> diff --git a/src/includes/functions/GalaxyRowUser.php b/src/includes/functions/GalaxyRowUser.php index a516dab..6e4f460 100644 --- a/src/includes/functions/GalaxyRowUser.php +++ b/src/includes/functions/GalaxyRowUser.php @@ -31,111 +31,106 @@ /** * * @deprecated - * @param unknown_type $GalaxyRow - * @param unknown_type $GalaxyRowPlanet - * @param unknown_type $GalaxyRowUser - * @param unknown_type $Galaxy - * @param unknown_type $System - * @param unknown_type $Planet - * @param unknown_type $PlanetType + * @param Wootook_Empire_Model_Planet $currentPlanet + * @param Wootook_Player_Model_Entity $currentPlayer */ -function GalaxyRowUser ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowUser, $Galaxy, $System, $Planet, $PlanetType ) { - global $lang, $user; +function GalaxyRowUser($currentPlanet, $currentPlayer) { + global $user; - // Joueur - $Result = ""; - if ($GalaxyRowUser && $GalaxyRowPlanet["destruyed"] == 0) { - $NoobProt = doquery("SELECT * FROM {{table}} WHERE `config_name` = 'noobprotection';", 'config', true); - $NoobTime = doquery("SELECT * FROM {{table}} WHERE `config_name` = 'noobprotectiontime';", 'config', true); - $NoobMulti = doquery("SELECT * FROM {{table}} WHERE `config_name` = 'noobprotectionmulti';", 'config', true); - $UserPoints = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $user['id'] ."';", 'statpoints', true); - $User2Points = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $GalaxyRowUser['id'] ."';", 'statpoints', true); - $CurrentPoints = $UserPoints['total_points']; - $RowUserPoints = $User2Points['total_points']; - $CurrentLevel = $CurrentPoints * $NoobMulti['config_value']; - $RowUserLevel = $RowUserPoints * $NoobMulti['config_value']; - if ($GalaxyRowUser['bana'] == 1 AND - $GalaxyRowUser['urlaubs_modus'] == 1) { - $Systemtatus2 = $lang['vacation_shortcut']." ".$lang['banned_shortcut'].""; - $Systemtatus = ""; - } elseif ($GalaxyRowUser['bana'] == 1) { - $Systemtatus2 = "".$lang['banned_shortcut'].""; - $Systemtatus = ""; - } elseif ($GalaxyRowUser['urlaubs_modus'] == 1) { - $Systemtatus2 = "".$lang['vacation_shortcut'].""; - $Systemtatus = ""; - } elseif ($GalaxyRowUser['onlinetime'] < (time()-60 * 60 * 24 * 7) AND - $GalaxyRowUser['onlinetime'] > (time()-60 * 60 * 24 * 28)) { - $Systemtatus2 = "".$lang['inactif_7_shortcut'].""; - $Systemtatus = ""; - } elseif ($GalaxyRowUser['onlinetime'] < (time()-60 * 60 * 24 * 28)) { - $Systemtatus2 = "".$lang['inactif_7_shortcut']." ".$lang['inactif_28_shortcut'].""; - $Systemtatus = ""; - } elseif ($RowUserLevel < $CurrentPoints AND - $NoobProt['config_value'] == 1 AND - $NoobTime['config_value'] * 1000 > $RowUserPoints) { - $Systemtatus2 = "".$lang['weak_player_shortcut'].""; - $Systemtatus = ""; - } elseif ($RowUserPoints > $CurrentLevel AND - $NoobProt['config_value'] == 1 AND - $NoobTime['config_value'] * 1000 > $CurrentPoints) { - $Systemtatus2 = $lang['strong_player_shortcut']; - $Systemtatus = ""; - } else { - $Systemtatus2 = ""; - $Systemtatus = ""; - } - $Systemtatus4 = $User2Points['total_rank']; - if ($Systemtatus2 != '') { - $Systemtatus6 = "("; - $Systemtatus7 = ")"; - } - if ($Systemtatus2 == '') { - $Systemtatus6 = ""; - $Systemtatus7 = ""; - } - $admin = ""; - if ($GalaxyRowUser['authlevel'] == LEVEL_ADMIN) { - $admin = "A"; - } else if ($GalaxyRowUser['authlevel'] == LEVEL_OPERATOR) { - $admin = "O"; - } else if ($GalaxyRowUser['authlevel'] == LEVEL_MODERATOR) { - $admin = "M"; - } - $Systemtart = $User2Points['total_rank']; - if (strlen($Systemtart) < 3) { - $Systemtart = 1; - } else { - $Systemtart = (floor( $User2Points['total_rank'] / 100 ) * 100) + 1; - } - $Result .= ""; - $Result .= ""; - if ($GalaxyRowUser['id'] != $user['id']) { - $Result .= "".$lang['gl_sendmess'].""; - $Result .= ""; - $Result .= "".$lang['gl_buddyreq'].""; - $Result .= ""; - } - $Result .= "".$lang['gl_stats'].""; - $Result .= ""; - $Result .= "\""; - $Result .= ", STICKY, MOUSEOFF, DELAY, 750, CENTER, OFFSETX, -40, OFFSETY, -40 );'"; - $Result .= " onmouseout='return nd();'>"; - $Result .= $Systemtatus; - $Result .= $GalaxyRowUser["username"].""; - $Result .= $Systemtatus6; - $Result .= $Systemtatus; - $Result .= $Systemtatus2; - $Result .= $Systemtatus7." ".$admin; - $Result .= ""; - } - $Result .= ""; + if (is_array($currentPlayer)) { + $currentPlayer = new Wootook_Player_Model_Entity($currentPlayer); + } + if (is_array($currentPlanet)) { + $currentPlanet = new Wootook_Empire_Model_Planet($currentPlanet); + $currentPlanet->setData('last_update', new Wootook_Core_DateTime($currentPlanet->getData('last_update'))); + } + if (!$currentPlayer || !$currentPlayer->getId() || !$currentPlanet || $currentPlanet->isDestroyed()) { + return ''; + } - return $Result; + $activeNoobProtection = Wootook::getGameConfig('game/noob-protection/active'); + $noobProtectionMultiplier = Wootook::getGameConfig('game/noob-protection/multiplier'); + $noobProtectionPointsLimit = Wootook::getGameConfig('game/noob-protection/points-cap'); + + $readAdapter = Wootook_Core_Database_ConnectionManager::getSingleton()->getConnection('core_read'); + + $statement = $readAdapter->select() + ->column('total_points') + ->column('total_rank') + ->from(array('stats' => $readAdapter->getTable('statpoints'))) + ->where('id_owner', new Wootook_Core_Database_Sql_Placeholder_Variable('player_id')) + ->where('stat_code', 1) + ->where('stat_type', 1) + ->prepare() + ; + + $statement->execute(array('player_id' => $user->getId())); + $playerPoints = $statement->fetchColumn(0); + + $statement->execute(array('player_id' => $currentPlayer->getId())); + $currentPlayerPoints = $statement->fetchColumn(0); + $currentPlayerRank = $statement->fetchColumn(1); + + $classes = array(); + if ($currentPlayer->isBanned()) { + $classes['banned'] = 'B'; + } + if ($currentPlayer->isVacation()) { + $classes['vacation'] = 'V'; + } + $pastDate = new Wootook_Core_DateTime(); + $pastDate->sub(8, Wootook_Core_DateTime::DAY); + if ($pastDate->isLater($currentPlayer->getLastLoginDate())) { + $classes['inactive'] = 'i'; + } + + $pastDate->sub(22, Wootook_Core_DateTime::DAY); + if ($pastDate->isLater($currentPlayer->getLastLoginDate())) { + $classes['long-inactive'] = 'I'; + } + if ($currentPlayer->isAuthorized(LEVEL_ADMIN)) { + $classes['admin'] = 'A'; + } else if ($currentPlayer->isAuthorized(LEVEL_OPERATOR)) { + $classes['operator'] = 'O'; + } else if ($currentPlayer->isAuthorized(LEVEL_MODERATOR)) { + $classes['moderator'] = 'M'; + } + + if ($activeNoobProtection) { + if ($playerPoints <= $noobProtectionPointsLimit && ($playerPoints * $noobProtectionMultiplier) < $currentPlayerPoints) { + $classes['strong'] = 'F'; + } else if ($currentPlayerPoints <= $noobProtectionPointsLimit && ($currentPlayerPoints * $noobProtectionMultiplier) < $playerPoints) { + $classes['strong'] = 'F'; + } + } + + $output = ''; + if (count($classes) > 0) { + $output .= '' . $currentPlayer->getUsername() . ''; + foreach ($classes as $class => $identifier) { + $output .= '' . $identifier . ''; + } + } else { + $output .= '' . $currentPlayer->getUsername() . ''; + } + + if (true || $currentPlayer->getId() !== $user->getId()) { + $translator = Wootook::getTranslator(); + $messageUrl = Wootook::getStaticUrl('messages.php', array('mode' => 'write', 'id' => $currentPlayer->getId())); + $buddyUrl = Wootook::getStaticUrl('buddy.php', array('a' => '2', 'u' => $currentPlayer->getId())); + $statsUrl = Wootook::getStaticUrl('stat.php', array('who' => 'player', 'start' => 100 * floor($currentPlayerRank / 100))); + + $output .=<< +

    {$translator->translate('Player: %s', $currentPlayer->getUsername())}

    +

    {$translator->translate('Rank: %d', $currentPlayerRank)}

    +

    {$translator->translate('Send a message')}

    +

    {$translator->translate('Add to buddy list')}

    +

    {$translator->translate('Statistics')}

    + +HTML_EOF; + } + + $output .= ''; + return $output; } - -?> \ No newline at end of file diff --git a/src/includes/functions/GetMaxConstructibleElements.php b/src/includes/functions/GetMaxConstructibleElements.php deleted file mode 100644 index b665883..0000000 --- a/src/includes/functions/GetMaxConstructibleElements.php +++ /dev/null @@ -1,80 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $Element - * @param unknown_type $Ressources - */ -function GetMaxConstructibleElements ($Element, $Ressources) { - global $pricelist; - // On test les 4 Type de ressource pour voir si au moins on sait en construire 1 - if ($pricelist[$Element]['metal'] != 0) { - $ResType_1_Needed = $pricelist[$Element]['metal']; - $Buildable = floor($Ressources["metal"] / $ResType_1_Needed); - $MaxElements = $Buildable; - } - - if ($pricelist[$Element]['crystal'] != 0) { - $ResType_2_Needed = $pricelist[$Element]['crystal']; - $Buildable = floor($Ressources["crystal"] / $ResType_2_Needed); - } - if (!isset($MaxElements)) { - $MaxElements = $Buildable; - } elseif ($MaxElements > $Buildable) { - $MaxElements = $Buildable; - } - - if ($pricelist[$Element]['deuterium'] != 0) { - $ResType_3_Needed = $pricelist[$Element]['deuterium']; - $Buildable = floor($Ressources["deuterium"] / $ResType_3_Needed); - } - if (!isset($MaxElements)) { - $MaxElements = $Buildable; - } elseif ($MaxElements > $Buildable) { - $MaxElements = $Buildable; - } - - if ($pricelist[$Element]['energy'] != 0) { - $ResType_4_Needed = $pricelist[$Element]['energy']; - $Buildable = floor($Ressources["energy_max"] / $ResType_4_Needed); - } - if ($Buildable < 1) { - $MaxElements = 0; - } - - return $MaxElements; -} -// Verion History -// - 1.0 Version initiale (creation) -// - 1.1 Correction bug ressources n�gatives ... -// - 1.2 Correction bug quand pas de m�tal -?> \ No newline at end of file diff --git a/src/includes/functions/GetRestPrice.php b/src/includes/functions/GetRestPrice.php deleted file mode 100644 index 82993ed..0000000 --- a/src/includes/functions/GetRestPrice.php +++ /dev/null @@ -1,75 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $user - * @param unknown_type $planet - * @param unknown_type $Element - * @param unknown_type $userfactor - */ -function GetRestPrice ($user, $planet, $Element, $userfactor = true) { - global $pricelist, $resource, $lang; - trigger_error(sprintf('%s is deprecated', __FUNCTION__), E_USER_DEPRECATED); - - if ($userfactor) { - $level = ($planet[$resource[$Element]]) ? $planet[$resource[$Element]] : $user[$resource[$Element]]; - } - - $array = array( - 'metal' => $lang["Metal"], - 'crystal' => $lang["Crystal"], - 'deuterium' => $lang["Deuterium"], - 'energy_max' => $lang["Energy"] - ); - - $text = "
    ". $lang['Rest_ress'] .": "; - foreach ($array as $ResType => $ResTitle) { - if ($pricelist[$Element][$ResType] != 0) { - $text .= $ResTitle . ": "; - if ($userfactor) { - $cost = floor($pricelist[$Element][$ResType] * pow($pricelist[$Element]['factor'], $level)); - } else { - $cost = floor($pricelist[$Element][$ResType]); - } - if ($cost > $planet[$ResType]) { - $text .= "". pretty_number($planet[$ResType] - $cost) ." "; - } else { - $text .= "". pretty_number($planet[$ResType] - $cost) ." "; - } - } - } - $text .= ""; - - return $text; -} - -?> \ No newline at end of file diff --git a/src/includes/functions/IsOfficierAccessible.php b/src/includes/functions/IsOfficierAccessible.php deleted file mode 100644 index 3173aad..0000000 --- a/src/includes/functions/IsOfficierAccessible.php +++ /dev/null @@ -1,58 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $CurrentUser - * @param unknown_type $Officier - */ -function IsOfficierAccessible ($CurrentUser, $Officier) { - global $requirements, $resource, $pricelist; - - if (isset($requirements[$Officier])) { - $enabled = true; - foreach($requirements[$Officier] as $ReqOfficier => $OfficierLevel) { - if ($CurrentUser[$resource[$ReqOfficier]] && - $CurrentUser[$resource[$ReqOfficier]] >= $OfficierLevel) { - $enabled = 1; - } else { - return 0; - } - } - } - if ($CurrentUser[$resource[$Officier]] < $pricelist[$Officier]['max'] ) { - return 1; - } else { - return -1; - } -} - -?> \ No newline at end of file diff --git a/src/includes/functions/IsTechnologieAccessible.php b/src/includes/functions/IsTechnologieAccessible.php deleted file mode 100644 index ea13aba..0000000 --- a/src/includes/functions/IsTechnologieAccessible.php +++ /dev/null @@ -1,58 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $user - * @param unknown_type $planet - * @param unknown_type $element - */ -function IsTechnologieAccessible($user, $planet, $element) -{ - trigger_error(sprintf('%s is deprecated', __FUNCTION__), E_USER_DEPRECATED); - global $requirements, $resource; - - if (isset($requirements[$element])) { - $enabled = true; - foreach($requirements[$element] as $ReqElement => $EleLevel) { - if (@$user[$resource[$ReqElement]] && $user[$resource[$ReqElement]] >= $EleLevel) { - // break; - } elseif ($planet[$resource[$ReqElement]] && $planet[$resource[$ReqElement]] >= $EleLevel) { - $enabled = true; - } else { - return false; - } - } - return $enabled; - } else { - return true; - } -} \ No newline at end of file diff --git a/src/includes/functions/MissionCaseColonisation.php b/src/includes/functions/MissionCaseColonisation.php index 9eff5b8..b736091 100644 --- a/src/includes/functions/MissionCaseColonisation.php +++ b/src/includes/functions/MissionCaseColonisation.php @@ -31,85 +31,108 @@ /** * * @deprecated - * @param unknown_type $FleetRow + * @param Wootook_Empire_Model_Fleet|array $fleet */ -function MissionCaseColonisation ( $FleetRow ) { - global $lang, $resource; +function MissionCaseColonisation($fleet) +{ + $readConnection = Wootook_Core_Database_ConnectionManager::getSingleton()->getConnection('core_read'); - $statement = doquery ("SELECT count(*) FROM {{table}} WHERE `id_owner` = '". $FleetRow['fleet_owner'] ."' AND `planet_type` = '1'", 'planets'); - $iPlanetCount = $statement->fetch(PDO::FETCH_ASSOC); - if ($FleetRow['fleet_mess'] == 0) { - // Déjà, sommes nous a l'aller ?? - $statement2 = doquery ("SELECT count(*) FROM {{table}} WHERE `galaxy` = '". $FleetRow['fleet_end_galaxy']."' AND `system` = '". $FleetRow['fleet_end_system']."' AND `planet` = '". $FleetRow['fleet_end_planet']."';", 'galaxy'); - $iGalaxyPlace = $statement2->fetch(PDO::FETCH_ASSOC); - $TargetAdress = sprintf ($lang['sys_adress_planet'], $FleetRow['fleet_end_galaxy'], $FleetRow['fleet_end_system'], $FleetRow['fleet_end_planet']); - if ($iGalaxyPlace == 0) { - // Y a personne qui s'y est mis avant que je ne debarque ! - if ($iPlanetCount >= MAX_PLAYER_PLANETS && $user['authlevel'] != LEVEL_ADMIN) { - $TheMessage = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_maxcolo'] . MAX_PLAYER_PLANETS . $lang['sys_colo_planet']; - SendSimpleMessage ( $FleetRow['fleet_owner'], '', $FleetRow['fleet_start_time'], 0, $lang['sys_colo_mess_from'], $lang['sys_colo_mess_report'], $TheMessage); - doquery("UPDATE {{table}} SET `fleet_mess` = '1' WHERE `fleet_id` = ". $FleetRow["fleet_id"], 'fleets'); - } else { - $user = Wootook_Player_Model_Entity::factory($FleetRow['fleet_owner']); - $user->createNewPlanet( - intval($FleetRow['fleet_end_galaxy']), - intval($FleetRow['fleet_end_system']), - intval($FleetRow['fleet_end_planet']), - Wootook_Empire_Model_Planet::TYPE_PLANET, - Wootook::__('Colony') - ); + $player = new Wootook_Player_Model_Entity(); + $player->load($fleet->getData('fleet_owner')); + if (!$player->getId()) { + $fleet->delete(); + return; + } - if ( $NewOwnerPlanet == true ) { - $TheMessage = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_allisok']; - SendSimpleMessage ( $FleetRow['fleet_owner'], '', $FleetRow['fleet_start_time'], 0, $lang['sys_colo_mess_from'], $lang['sys_colo_mess_report'], $TheMessage); - // Verifier ce que contient fleet_array (et le cas et cheant retirer un element '208' - if ($FleetRow['fleet_amount'] == 1) { - doquery("DELETE FROM {{table}} WHERE fleet_id=" . $FleetRow["fleet_id"], 'fleets'); - } else { - $CurrentFleet = explode(";", $FleetRow['fleet_array']); - $NewFleet = ""; - foreach ($CurrentFleet as $Item => $Group) { - if ($Group != '') { - $Class = explode (",", $Group); - if ($Class[0] == 208) { - if ($Class[1] > 1) { - $NewFleet .= $Class[0].",".($Class[1] - 1).";"; - } - } else { - if ($Class[1] <> 0) { - $NewFleet .= $Class[0].",".$Class[1].";"; - } - } - } - } - $QryUpdateFleet = "UPDATE {{table}} SET "; - $QryUpdateFleet .= "`fleet_array` = '". $NewFleet ."', "; - $QryUpdateFleet .= "`fleet_amount` = `fleet_amount` - 1, "; - $QryUpdateFleet .= "`fleet_mess` = '1' "; - $QryUpdateFleet .= "WHERE `fleet_id` = '". $FleetRow["fleet_id"] ."';"; - doquery( $QryUpdateFleet, 'fleets'); - } - } else { - $TheMessage = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_badpos']; - SendSimpleMessage ( $FleetRow['fleet_owner'], '', $FleetRow['fleet_start_time'], 0, $lang['sys_colo_mess_from'], $lang['sys_colo_mess_report'], $TheMessage); - doquery("UPDATE {{table}} SET `fleet_mess` = '1' WHERE `fleet_id` = ". $FleetRow["fleet_id"], 'fleets'); - } - } - } else { - // Pas de bol coiffé sur le poteau ! - $TheMessage = $lang['sys_colo_arrival'] . $TargetAdress . $lang['sys_colo_notfree']; - SendSimpleMessage ( $FleetRow['fleet_owner'], '', $FleetRow['fleet_end_time'], 0, $lang['sys_colo_mess_from'], $lang['sys_colo_mess_report'], $TheMessage); - // Mettre a jour la flotte pour qu'effectivement elle revienne ! - doquery("UPDATE {{table}} SET `fleet_mess` = '1' WHERE `fleet_id` = ". $FleetRow["fleet_id"], 'fleets'); + $event = Wootook::dispatchEvent('fleet.mission.colonize.max-allowed-planets', array( + 'base_count' => MAX_PLAYER_PLANETS, + 'count' => MAX_PLAYER_PLANETS, + 'player' => $player, + 'fleet' => $fleet + )); - } - } else { - if ($FleetRow['fleet_end_time'] <= time()) { - // Retour de flotte - RestoreFleetToPlanet ( $FleetRow, true ); - doquery("DELETE FROM {{table}} WHERE fleet_id=" . $FleetRow["fleet_id"], 'fleets'); - } - } -} + $maxAllowedPlanetCount = $event->getData('count'); -?> \ No newline at end of file + /* first trip */ + if ($fleet->getData('fleet_mess') == 0) { + if ($fleet->getActionTime()->isEarlier()) { + return; + } + if ($player->getPlanetCollection()->getSize() >= $maxAllowedPlanetCount && !$player->isAuthorized(array(LEVEL_ADMIN))) { + /* no more planets to colonize */ + + $coords = sprintf('%d:%d:%d', $fleet->getData('fleet_end_galaxy'), $fleet->getData('fleet_end_system'), $fleet->getData('fleet_end_planet')); + SendSimpleMessage($player->getId(), null, $fleet['fleet_end_time'], 0, + Wootook::__('Colonization'), Wootook::__('Colonization report'), + Wootook::__("The fleet has arrived at the coordinates [%1\$s], but unfortunatly colonization cannot happen : you can't have more than %2\$d colonies.", $coords, $maxAllowedPlanetCount)); + + $fleet->goBack(); + return; + } + + $statement = $readConnection->select() + ->column(new Wootook_Core_Database_Sql_Placeholder_Expression('COUNT(*)')) + ->from($readConnection->getTable('planets')) + ->where('galaxy', $fleet->getData('fleet_end_galaxy')) + ->where('system', $fleet->getData('fleet_end_system')) + ->where('planet', $fleet->getData('fleet_end_planet')) + ->prepare() + ; + + $statement->execute(); + if ($statement->fetchColumn() > 0) { + $coords = sprintf('%d:%d:%d', $fleet->getData('fleet_end_galaxy'), $fleet->getData('fleet_end_system'), $fleet->getData('fleet_end_planet')); + SendSimpleMessage($player->getId(), null, $fleet['fleet_end_time'], 0, + Wootook::__('Colonization'), Wootook::__('Colonization report'), + Wootook::__("The fleet has arrived at the coordinates [%1\$s], but unfortunatly colonization cannot happen : the planet is already colonized.", $coords)); + + $fleet->goBack(); + return; + } + + if (mt_rand(0, 100) >= 75) { + $baseSize = Wootook::getGameConfig('planet/initial/fields'); + $factor = 2 * $position / (1 + log($position)); + $fuzz = 2 * $factor * pow(sin($factor), 2) / 2 + $factor / 4; + $size = ($baseSize * mt_rand(floor($factor / 10), ceil($factor * 5 / 4))) + mt_rand(0, $fuzz); + + $player->createNewPlanet( + $fleet->getData('fleet_end_galaxy'), + $fleet->getData('fleet_end_system'), + $fleet->getData('fleet_end_planet'), + Wootook_Empire_Model_Planet::TYPE_PLANET, + Wootook::__('Colony'), + $size + ); + + $coords = sprintf('%d:%d:%d', $fleet->getData('fleet_end_galaxy'), $fleet->getData('fleet_end_system'), $fleet->getData('fleet_end_planet')); + SendSimpleMessage($player->getId(), null, $fleet['fleet_end_time'], 0, + Wootook::__('Colonization'), Wootook::__('Colonization report'), + Wootook::__("The fleet has arrived at the coordinates [%1\$s], the settlers succeeded creating your new colony.", $coords)); + + $fleet->delete(); + return; + } else { + $coords = sprintf('%d:%d:%d', $fleet->getData('fleet_end_galaxy'), $fleet->getData('fleet_end_system'), $fleet->getData('fleet_end_planet')); + SendSimpleMessage($player->getId(), null, $fleet['fleet_end_time'], 0, + Wootook::__('Colonization'), Wootook::__('Colonization report'), + Wootook::__("The fleet has arrived at the coordinates [%1\$s], the settlers failed creating your new colony, no planet was there.", $coords)); + + $fleet->goBack(); + return; + } + } + + /* back trip */ + if ($fleet->getArrivalTime()->isEarlier()) { + return; + } + + $fleet->dock($fleet->getOriginPlanet()); + + $coords = sprintf('%d:%d:%d', $fleet->getData('fleet_end_galaxy'), $fleet->getData('fleet_end_system'), $fleet->getData('fleet_end_planet')); + SendSimpleMessage($player->getId(), null, $fleet['fleet_end_time'], 0, + Wootook::__('Colonization'), Wootook::__('Colonization report'), + Wootook::__("The fleet went back from the coordinates [%1\$s], the settlers failed creating your new colony.", $coords)); + return; +} \ No newline at end of file diff --git a/src/includes/functions/PlanetResourceUpdate.php b/src/includes/functions/PlanetResourceUpdate.php deleted file mode 100644 index 8a53dd8..0000000 --- a/src/includes/functions/PlanetResourceUpdate.php +++ /dev/null @@ -1,51 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param array $CurrentUser - * @param array $CurrentPlanet - * @param int $UpdateTime - */ -function PlanetResourceUpdate($CurrentUser, &$CurrentPlanet, $UpdateTime) -{ - trigger_error(sprintf('%s is deprecated', __FUNCTION__), E_USER_DEPRECATED); - $planet = Legacies_Empire_Model_User::factory($CurrentPlanet['id']); - - /* - * Update planet resources and constructions - */ - Wootook::dispatchEvent('planet.update', array( - 'planet' => $planet, - 'time' => $UpdateTime - )); - $planet->save(); -} diff --git a/src/includes/functions/SendNewPassword.php b/src/includes/functions/SendNewPassword.php deleted file mode 100644 index 8eb35f3..0000000 --- a/src/includes/functions/SendNewPassword.php +++ /dev/null @@ -1,92 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $mail - */ - function sendnewpassword($mail){ - trigger_error(sprintf('%s is deprecated', __FUNCTION__), E_USER_DEPRECATED); - - $ExistMail = doquery("SELECT `email` FROM {{table}} WHERE `email` = '". $mail ."' LIMIT 1;", 'users', true); - - if (empty($ExistMail['email'])) { - message('L\'adresse n\'existe pas !','Erreur'); - } - - else{ - //Caractere qui seront contenus dans le nouveau mot de passe - $Caracters="aazertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN1234567890"; - - $Count=strlen($Caracters); - - $NewPass=""; - $Taille=6; - - - srand((double)microtime()*1000000); - - for($i=0;$i<$Taille;$i++){ - - $CaracterBoucle=rand(0,$Count-1); - - $NewPass=$NewPass.substr($Caracters,$CaracterBoucle,1); - } - - //Et un nouveau mot de passe tout chaud ^^ - - //On va maintenant l'envoyer au destinataire - $Title = "Wootook : Nouveau mot de passe"; - $Body = "Voici votre nouveau mot de passe : "; - $Body .= $NewPass; - - mail($mail,$Title,$Body); - - //Email envoy�, maintenant place au changement dans la BDD - - $NewPassSql = md5($NewPass); - - $QryPassChange = "UPDATE {{table}} SET "; - $QryPassChange .= "`password` ='". $NewPassSql ."' "; - $QryPassChange .= "WHERE `email`='". $mail ."' LIMIT 1;"; - - doquery( $QryPassChange, 'users'); - - - } - - - - } - - - -?> \ No newline at end of file diff --git a/src/includes/functions/ShowGalaxyRows.php b/src/includes/functions/ShowGalaxyRows.php index ed78a53..fa5eef7 100644 --- a/src/includes/functions/ShowGalaxyRows.php +++ b/src/includes/functions/ShowGalaxyRows.php @@ -31,73 +31,91 @@ /** * * @deprecated - * @param unknown_type $Galaxy - * @param unknown_type $System + * @param int $Galaxy + * @param int $System */ -function ShowGalaxyRows ($Galaxy, $System) { - global $lang, $planetcount, $CurrentRC, $dpath, $user; +function ShowGalaxyRows($Galaxy, $System) +{ + global $planetcount; + + $readAdapter = Wootook_Core_Database_ConnectionManager::getSingleton()->getConnection('core_read'); - $Result = ""; - for ($Planet = 1; $Planet <= Wootook::getGameConfig('engine/universe/positions'); $Planet++) { + $galaxyStatement = $readAdapter->select() + ->column('*') + ->from($readAdapter->getTable('galaxy')) + ->where('galaxy', $Galaxy) + ->where('system', $System) + ->where('planet', new Wootook_Core_Database_Sql_Placeholder_Variable('planet')) + ->limit(1) + ->prepare() + ; - $GalaxyRowPlanet = array(); - $GalaxyRowMoon = array(); - $GalaxyRowPlayer = array(); - $GalaxyRowAlly = array(); + $planetStatement = $readAdapter->select() + ->column('*') + ->from($readAdapter->getTable('planets')) + ->where('id', new Wootook_Core_Database_Sql_Placeholder_Variable('planet_id')) + ->limit(1) + ->prepare() + ; - $GalaxyRow = doquery("SELECT * FROM {{table}} WHERE `galaxy` = '".$Galaxy."' AND `system` = '".$System."' AND `planet` = '".$Planet."';", 'galaxy', true); + $output = ""; + for ($Planet = 1; $Planet <= Wootook::getGameConfig('engine/universe/positions'); $Planet++) { + if ($galaxyStatement->execute(array('planet' => $Planet))) { + /** @var Wootook_Empire_Model_Galaxy_Position $galaxyPosition */ + $galaxyPosition = $galaxyStatement->fetchEntity('Wootook_Empire_Model_Galaxy_Position'); + } else { + $output .= ''; + continue; + } - $Result .= "\n"; - $Result .= ""; // Depart de ligne - if ($GalaxyRow) { - // Il existe des choses sur cette ligne de planete - if ($GalaxyRow["id_planet"] != 0) { - $GalaxyRowPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '". $GalaxyRow["id_planet"] ."';", 'planets', true); + $output .= ""; + if ($galaxyPosition->getData('galaxy') && $galaxyPosition["id_planet"] != 0) { + if ($planetStatement->execute(array('planet_id' => $galaxyPosition["id_planet"]))) { + /** @var Wootook_Empire_Model_Planet $currentPlanet */ + $currentPlanet = $planetStatement->fetchEntity('Wootook_Empire_Model_Planet'); + } else { + $currentPlanet = new Wootook_Empire_Model_Planet(); + } - if ($GalaxyRowPlanet['destruyed'] != 0 AND - $GalaxyRowPlanet['id_owner'] != '' AND - $GalaxyRow["id_planet"] != '') { - CheckAbandonPlanetState ($GalaxyRowPlanet); - } else { - $planetcount++; - $GalaxyRowPlayer = doquery("SELECT * FROM {{table}} WHERE `id` = '". $GalaxyRowPlanet["id_owner"] ."';", 'users', true); - } + if ($currentPlanet->getId() && !$currentPlanet->isDestroyed()) { + $planetcount++; + $currentPlayer = $currentPlanet->getPlayer(); + } else { + CheckAbandonPlanetState($currentPlanet); + $currentPlayer = new Wootook_Player_Model_Entity(); + } - if ($GalaxyRow["id_luna"] != 0) { - $GalaxyRowMoon = doquery("SELECT * FROM {{table}} WHERE `id` = '". $GalaxyRow["id_luna"] ."';", 'lunas', true); - if ($GalaxyRowMoon["destruyed"] != 0) { - CheckAbandonMoonState ($GalaxyRowMoon); - } - } - $GalaxyRowPlanet = doquery("SELECT * FROM {{table}} WHERE `id` = '". $GalaxyRow["id_planet"] ."';", 'planets', true); - if ($GalaxyRowPlanet['id_owner'] <> 0) { - $GalaxyRowUser = doquery("SELECT * FROM {{table}} WHERE `id` = '". $GalaxyRowPlanet['id_owner'] ."';", 'users', true); - } else { - $GalaxyRowUser = array(); - } - } - } - $Result .= "\n"; - $Result .= GalaxyRowPos ( $Planet, $GalaxyRow ); - $Result .= "\n"; - $Result .= GalaxyRowPlanet ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowPlayer, $Galaxy, $System, $Planet, 1 ); - $Result .= "\n"; - $Result .= GalaxyRowPlanetName ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowPlayer, $Galaxy, $System, $Planet, 1 ); - $Result .= "\n"; - $Result .= GalaxyRowMoon ( $GalaxyRow, $GalaxyRowMoon , $GalaxyRowPlayer, $Galaxy, $System, $Planet, 3 ); - $Result .= "\n"; - $Result .= GalaxyRowDebris ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowPlayer, $Galaxy, $System, $Planet, 2 ); - $Result .= "\n"; - $Result .= GalaxyRowUser ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowPlayer, $Galaxy, $System, $Planet, 0 ); - $Result .= "\n"; - $Result .= GalaxyRowAlly ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowPlayer, $Galaxy, $System, $Planet, 0 ); - $Result .= "\n"; - $Result .= GalaxyRowActions ( $GalaxyRow, $GalaxyRowPlanet, $GalaxyRowPlayer, $Galaxy, $System, $Planet, 0 ); - $Result .= "\n"; - $Result .= ""; - } + if ($galaxyPosition["id_luna"] != 0) { + if ($planetStatement->execute(array('planet_id' => $galaxyPosition["id_luna"]))) { + /** @var Wootook_Empire_Model_Planet $currentMoon */ + $currentMoon = $planetStatement->fetchEntity('Wootook_Empire_Model_Planet'); + } else { + $currentMoon = new Wootook_Empire_Model_Planet(); + } - return $Result; + if ($currentMoon->isDestroyed()) { + CheckAbandonMoonState($currentMoon); + } + } else { + $currentMoon = new Wootook_Empire_Model_Planet(); + } + } else { + $currentPlanet = new Wootook_Empire_Model_Planet(); + $currentPlayer = new Wootook_Player_Model_Entity(); + $currentMoon = new Wootook_Empire_Model_Planet(); + } + $output .= GalaxyRowPos($Planet, $galaxyPosition); + $output .= GalaxyRowPlanet($galaxyPosition, $currentPlanet, $currentPlayer, $Galaxy, $System, $Planet, 1); + $output .= GalaxyRowPlanetName($galaxyPosition, $currentPlanet, $currentPlayer, $Galaxy, $System, $Planet, 1); + $output .= GalaxyRowMoon($galaxyPosition, $currentMoon , $currentPlayer, $Galaxy, $System, $Planet, 3); + $output .= GalaxyRowDebris($galaxyPosition, $currentPlanet, $currentPlayer, $Galaxy, $System, $Planet, 2); + $output .= GalaxyRowUser($currentPlanet, $currentPlayer); + $output .= GalaxyRowAlly($galaxyPosition, $currentPlanet, $currentPlayer, $Galaxy, $System, $Planet, 0); + $output .= GalaxyRowActions($galaxyPosition, $currentPlanet, $currentPlayer, $Galaxy, $System, $Planet, 0); + $output .= ""; + } + + return $output; } ?> \ No newline at end of file diff --git a/src/includes/functions/SortUserPlanets.php b/src/includes/functions/SortUserPlanets.php deleted file mode 100644 index a5178ca..0000000 --- a/src/includes/functions/SortUserPlanets.php +++ /dev/null @@ -1,52 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $CurrentUser - */ -function SortUserPlanets ( $CurrentUser ) { - $Order = ( $CurrentUser['planet_sort_order'] == 1 ) ? "DESC" : "ASC" ; - $Sort = $CurrentUser['planet_sort']; - - $QryPlanets = "SELECT `id`, `name`, `galaxy`, `system`, `planet`, `planet_type` FROM {{table}} WHERE `id_owner` = '". $CurrentUser['id'] ."' ORDER BY "; - if ( $Sort == 0 ) { - $QryPlanets .= "`id` ". $Order; - } elseif ( $Sort == 1 ) { - $QryPlanets .= "`galaxy`, `system`, `planet`, `planet_type` ". $Order; - } elseif ( $Sort == 2 ) { - $QryPlanets .= "`name` ". $Order; - } - $Planets = doquery ( $QryPlanets, 'planets'); - - return $Planets; -} -?> \ No newline at end of file diff --git a/src/includes/functions/UpdatePlanetBatimentQueueList.php b/src/includes/functions/UpdatePlanetBatimentQueueList.php deleted file mode 100644 index da486ad..0000000 --- a/src/includes/functions/UpdatePlanetBatimentQueueList.php +++ /dev/null @@ -1,62 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -/** - * - * @deprecated - * @param unknown_type $CurrentPlanet - * @param unknown_type $CurrentUser - */ -function UpdatePlanetBatimentQueueList ( &$CurrentPlanet, &$CurrentUser ) { - trigger_error(sprintf('%s is deprecated', __FUNCTION__), E_USER_DEPRECATED); - $RetValue = false; - if ( $CurrentPlanet['b_building_id'] != 0 ) { - while ( $CurrentPlanet['b_building_id'] != 0 ) { - if ( $CurrentPlanet['b_building'] <= time() ) { - PlanetResourceUpdate ( $CurrentUser, $CurrentPlanet, $CurrentPlanet['b_building'], false ); - $IsDone = CheckPlanetBuildingQueue( $CurrentPlanet, $CurrentUser ); - if ( $IsDone == true ) { - SetNextQueueElementOnTop ( $CurrentPlanet, $CurrentUser ); - } - } else { - $RetValue = true; - break; - } - } - } - return $RetValue; -} - -// Revision History -// - 1.0 Mise en module initiale -// - 1.1 Mise a jour des ressources sur la planete verifi�e (pour prendre en compte les ressources produites -// pendant la construction et avant l'evolution evantuel d'une mine ou d'en batiment - -?> \ No newline at end of file diff --git a/src/includes/todofleetcontrol.php b/src/includes/todofleetcontrol.php index 63de1e6..819c79f 100644 --- a/src/includes/todofleetcontrol.php +++ b/src/includes/todofleetcontrol.php @@ -34,7 +34,6 @@ require_once ROOT_PATH . 'includes/deprecated.php'; * @deprecated * {{{ */ -include(ROOT_PATH . 'includes/functions/FlyingFleetHandler.'.PHPEXT); include(ROOT_PATH . 'includes/functions/MissionCaseAttack.'.PHPEXT); include(ROOT_PATH . 'includes/functions/MissionCaseStay.'.PHPEXT); include(ROOT_PATH . 'includes/functions/MissionCaseStayAlly.'.PHPEXT); @@ -47,36 +46,29 @@ include(ROOT_PATH . 'includes/functions/MissionCaseExpedition.'.PHPEXT); include(ROOT_PATH . 'includes/functions/SendSimpleMessage.'.PHPEXT); include(ROOT_PATH . 'includes/functions/SpyTarget.'.PHPEXT); include(ROOT_PATH . 'includes/functions/RestoreFleetToPlanet.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/StoreGoodsToPlanet.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/InsertJavaScriptChronoApplet.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/IsTechnologieAccessible.'.PHPEXT); // <- TODO: delete -include(ROOT_PATH . 'includes/functions/GetRestPrice.'.PHPEXT); // <- TODO: delete -include(ROOT_PATH . 'includes/functions/InsertGalaxyScripts.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyCheckFunctions.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/ShowGalaxyRows.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GetPhalanxRange.'.PHPEXT); // <- TODO: delete -include(ROOT_PATH . 'includes/functions/GetMissileRange.'.PHPEXT); // <- TODO: delete -include(ROOT_PATH . 'includes/functions/GalaxyRowPos.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyRowPlanet.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyRowPlanetName.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyRowMoon.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyRowDebris.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyRowUser.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyRowAlly.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyRowActions.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/ShowGalaxySelector.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/ShowGalaxyMISelector.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/ShowGalaxyTitles.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/GalaxyLegendPopup.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/ShowGalaxyFooter.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/MessageForm.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/SendNewPassword.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/IsOfficierAccessible.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/CheckInputStrings.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/MipCombatEngine.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/DeleteSelectedUser.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/SortUserPlanets.'.PHPEXT); -include(ROOT_PATH . 'includes/functions/BuildFleetEventTable.'.PHPEXT); +include(ROOT_PATH . 'includes/functions/StoreGoodsToPlanet.'.PHPEXT); // includes/functions/StoreGoodsToPlanet.php +include(ROOT_PATH . 'includes/functions/InsertJavaScriptChronoApplet.'.PHPEXT); // infos.php, includes/functions/BuildFleetEventTable.php +include(ROOT_PATH . 'includes/functions/InsertGalaxyScripts.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyCheckFunctions.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/ShowGalaxyRows.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GetPhalanxRange.'.PHPEXT); // <- TODO: delete +include(ROOT_PATH . 'includes/functions/GetMissileRange.'.PHPEXT); // <- TODO: delete +include(ROOT_PATH . 'includes/functions/GalaxyRowPos.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyRowPlanet.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyRowPlanetName.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyRowMoon.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyRowDebris.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyRowUser.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyRowAlly.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyRowActions.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/ShowGalaxySelector.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/ShowGalaxyMISelector.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/ShowGalaxyTitles.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/GalaxyLegendPopup.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/ShowGalaxyFooter.'.PHPEXT); // galaxy.php +include(ROOT_PATH . 'includes/functions/MessageForm.'.PHPEXT); // alliance.php +include(ROOT_PATH . 'includes/functions/MipCombatEngine.'.PHPEXT); // mipattack.php +include(ROOT_PATH . 'includes/functions/BuildFleetEventTable.'.PHPEXT); // phalanx.php /** * }}} - */ \ No newline at end of file + */ diff --git a/src/new-tables.mysql b/src/new-tables.mysql deleted file mode 100644 index cf38bed..0000000 --- a/src/new-tables.mysql +++ /dev/null @@ -1,112 +0,0 @@ -SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; - -CREATE TABLE IF NOT EXISTS `game_core_config` ( - `website_id` tinyint(3) unsigned NOT NULL, - `game_id` tinyint(3) unsigned NOT NULL, - `config_path` varchar(64) NOT NULL, - `config_value` varchar(255) NOT NULL, - PRIMARY KEY (`website_id`,`game_id`,`config_path`), - KEY `website_id` (`website_id`), - KEY `game_id` (`game_id`), - KEY `config_path` (`config_path`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `game_core_config` (`website_id`, `game_id`, `config_path`, `config_value`) VALUES -(0, 0, 'engine/ban/duration', '86400'), -(0, 0, 'engine/bot/active', '0'), -(0, 0, 'engine/bot/email', 'contact@wootook.org'), -(0, 0, 'engine/bot/name', 'Woot'), -(0, 0, 'engine/options/announces', '0'), -(0, 0, 'engine/options/banner', '0'), -(0, 0, 'engine/options/bbcode', '1'), -(0, 0, 'engine/options/chat', '0'), -(0, 0, 'engine/options/ga', '1'), -(0, 0, 'engine/options/notes', '0'), -(0, 0, 'engine/options/retailer', '0'), -(0, 0, 'engine/options/vacation-min-time', '172800'), -(0, 0, 'game/news/active', '0'), -(0, 0, 'game/news/content', 'Bienvenue sur le nouveau serveur de jeu Wootook!'), -(0, 0, 'web/cookie/name', '__wtk'), -(0, 0, 'web/cookie/time', '2592000'), -(0, 0, 'web/session/time', '900'), -(1, 1, 'game/debris/cristal-percent', '30'), -(1, 1, 'game/debris/defense', '0'), -(1, 1, 'game/debris/deuterium-percent', '0'), -(1, 1, 'game/debris/energy-percent', '0'), -(1, 1, 'game/debris/fleet', '1'), -(1, 1, 'game/debris/metal-percent', '30'), -(1, 1, 'game/general/active', '1'), -(1, 1, 'game/general/boards-url', 'http://wootook.org/board/'), -(1, 1, 'game/general/closing-message', 'Le jeu est clos pour le moment.'), -(1, 1, 'game/general/extra-url', 'http://wootook.org/'), -(1, 1, 'game/general/extra-url-title', 'Wootook!'), -(1, 1, 'game/general/locale', 'fr_FR'), -(1, 1, 'game/general/name', 'Wootook'), -(1, 1, 'game/noob-protection/active', '0'), -(1, 1, 'game/noob-protection/multiplier', '5'), -(1, 1, 'game/noob-protection/points-cap', '5000'), -(1, 1, 'game/resource/multiplier', '1000'), -(1, 1, 'game/speed/fleet', '2500'), -(1, 1, 'game/speed/general', '2500'), -(1, 1, 'resource/base-income/cristal', '10'), -(1, 1, 'resource/base-income/deuterium', '0'), -(1, 1, 'resource/base-income/energy', '0'), -(1, 1, 'resource/base-income/metal', '20'), -(1, 1, 'resource/initial/cristal', '500'), -(1, 1, 'resource/initial/deuterium', '0'), -(1, 1, 'resource/initial/energy', '0'), -(1, 1, 'resource/initial/fields', '163'), -(1, 1, 'resource/initial/metal', '500'), -(1, 1, 'web/cookie/name', '__wtk_1_1'); - -CREATE TABLE IF NOT EXISTS `game_core_game` ( - `game_id` smallint(5) unsigned NOT NULL, - `group_id` tinyint(3) unsigned NOT NULL, - `website_id` tinyint(3) unsigned NOT NULL, - `code` varchar(64) NOT NULL, - `name` varchar(255) NOT NULL, - `sort_order` tinyint(3) unsigned NOT NULL, - `is_default` tinyint(1) NOT NULL, - `is_staging` tinyint(1) NOT NULL, - `is_active` tinyint(1) NOT NULL, - PRIMARY KEY (`group_id`), - UNIQUE KEY `code` (`code`), - KEY `website_id` (`website_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `game_core_game` (`game_id`, `group_id`, `website_id`, `code`, `name`, `sort_order`, `is_default`, `is_staging`, `is_active`) VALUES -(0, 0, 0, 'admin', 'Administration', 0, 0, 0, 1), -(1, 1, 1, 'default', 'Default Game', 1, 1, 0, 1); - -CREATE TABLE IF NOT EXISTS `game_core_game_group` ( - `group_id` tinyint(3) unsigned NOT NULL, - `website_id` tinyint(3) unsigned NOT NULL, - `code` varchar(64) NOT NULL, - `name` varchar(255) NOT NULL, - `sort_order` tinyint(3) unsigned NOT NULL, - `is_default` tinyint(1) NOT NULL, - PRIMARY KEY (`group_id`), - UNIQUE KEY `code` (`code`), - KEY `website_id` (`website_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `game_core_game_group` (`group_id`, `website_id`, `code`, `name`, `sort_order`, `is_default`) VALUES -(0, 0, 'admin', 'Administration', 0, 0), -(1, 1, 'default', 'Default Group', 1, 1); - -CREATE TABLE IF NOT EXISTS `game_core_website` ( - `website_id` tinyint(3) unsigned NOT NULL, - `code` varchar(64) NOT NULL, - `name` varchar(255) NOT NULL, - `sort_order` tinyint(3) unsigned NOT NULL, - `default_group_id` tinyint(3) unsigned NOT NULL, - `is_default` tinyint(1) NOT NULL, - `is_staging` tinyint(1) NOT NULL, - `is_active` tinyint(1) NOT NULL, - PRIMARY KEY (`website_id`), - UNIQUE KEY `code` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `game_core_website` (`website_id`, `code`, `name`, `sort_order`, `default_group_id`, `is_default`, `is_staging`, `is_active`) VALUES -(0, 'admin', 'Administration', 0, 0, 0, 0, 1), -(1, 'default', 'Default Website', 1, 1, 1, 0, 1); diff --git a/src/options.php b/src/options.php index 8d0b801..a33c7bb 100644 --- a/src/options.php +++ b/src/options.php @@ -155,7 +155,7 @@ $mode = isset($_GET['mode']) ? $_GET['mode'] : null; //Selectionne si le joueur a des techno en cours $tech = doquery("SELECT COUNT(id) AS `tech` FROM {{table}} WHERE `id` = '".$user['id']."' and `b_tech_planet`!=0;", 'users', true); //Selectionne si le joueur est en train de se faire attaquer - $attack = doquery("SELECT COUNT(fleet_taget_owner) AS `attack` FROM {{table}} WHERE `fleet_taget_owner` = '".$user['id']."';", 'fleets', true); + $attack = doquery("SELECT COUNT(fleet_target_owner) AS `attack` FROM {{table}} WHERE `fleet_target_owner` = '".$user['id']."';", 'fleets', true); if ($fleet['actcnt'] == 0 && $build['building'] == 0 && $tech['tech'] == 0 && $attack['attack'] == 0) { $user->setVacation(); diff --git a/src/overview.php b/src/overview.php deleted file mode 100644 index 3721ddf..0000000 --- a/src/overview.php +++ /dev/null @@ -1,301 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -define('INSTALL' , false); -require_once dirname(__FILE__) .'/application/bootstrap.php'; - -$user = Wootook_Player_Model_Session::getSingleton()->getPlayer(); -$planet = $user->getCurrentPlanet(); -$moon = $planet->getMoon(); - -includeLang('resources'); -includeLang('overview'); - -$layout = new Wootook_Core_Model_Layout(); -$layout->load('overview'); - -if ($user->getId()) { - $planetCollection = $user->getPlanetCollection(); - $planetBlock = $layout->createBlock('core/deprecated', 'planet.view'); - $planetBlock->setTemplate('empire/overview/planet/view.phtml'); - - $planetList = $layout->createBlock('core/concat', 'planet.list'); - $planetBlock->planetList = $planetList; - - $i = 0; - foreach ($planetCollection as $userPlanet) { - if ($userPlanet->getId() == $planet->getId()) { - continue; - } - - /* - * Update planet resources and constructions - */ - Wootook::dispatchEvent('planet.update', array( - 'planet' => $userPlanet - )); - $userPlanet->save(); - - if ($userPlanet->getId() != $user->getCurrentPlanet()->getId() && $userPlanet->isPlanet()) { - $id = uniqid(); - $block = $layout->createBlock('core/deprecated', "planet.list.item.{$id}"); - $block->setTemplate('empire/overview/planet/list/item.phtml'); - $block['planet'] = $userPlanet; - - $buildingQueue = $userPlanet->getBuildingQueue(); - $buildingQueue->rewind(); - $currentItem = $buildingQueue->current(); - $block['queue_item'] = $currentItem; - $block['even'] = (($i++ % 4) == 3); - - $planetList->$id = $block; - } - } - - /** - * Missile attack management - * Refactoring needed - * {{{ - */ - $iraks_query = doquery("SELECT * FROM {{table}} WHERE owner = '" . $user['id'] . "'", 'iraks'); - $Record = 4000; - while ($irak = $iraks_query->fetch(PDO::FETCH_ASSOC)) { - $Record++; - $fpage[$irak['zeit']] = ''; - - if ($irak['zeit'] > time()) { - $time = $irak['zeit'] - time(); - - $fpage[$irak['zeit']] .= InsertJavaScriptChronoApplet ("fm", $Record, $time, true); - - $planet_start = doquery("SELECT * FROM {{table}} WHERE - galaxy = '" . $irak['galaxy'] . "' AND - system = '" . $irak['system'] . "' AND - planet = '" . $irak['planet'] . "' AND - planet_type = '1'", 'planets'); - - $user_planet = doquery("SELECT * FROM {{table}} WHERE - galaxy = '" . $irak['galaxy_angreifer'] . "' AND - system = '" . $irak['system_angreifer'] . "' AND - planet = '" . $irak['planet_angreifer'] . "' AND - planet_type = '1'", 'planets', true); - - if ($planet_start->rowCount() == 1) { - $planet = mysql_fetch_array($planet_start); - } - - $fpage[$irak['zeit']] .= "
    " . gmdate("H:i:s", $irak['zeit'] + 1 * 60 * 60) . " Une attaque de missiles (" . $irak['anzahl'] . ") de " . $user_planet['name'] . " "; - $fpage[$irak['zeit']] .= '[' . $irak["galaxy_angreifer"] . ':' . $irak["system_angreifer"] . ':' . $irak["planet_angreifer"] . ']'; - $fpage[$irak['zeit']] .= ' arrive sur la planète' . $planet["name"] . ' '; - $fpage[$irak['zeit']] .= '[' . $irak["galaxy"] . ':' . $irak["system"] . ':' . $irak["planet"] . ']'; - $fpage[$irak['zeit']] .= ''; - $fpage[$irak['zeit']] .= InsertJavaScriptChronoApplet ("fm", $Record, $time, false); - $fpage[$irak['zeit']] .= ""; - } - } - /** - * }}} - */ - - /* - * Update fleet list - */ - Wootook::dispatchEvent('fleet.update', array( - 'player' => $user - )); - - $fleetList = $layout->createBlock('core/concat', 'fleet.list'); - $fleetCollection = $user->getFleetCollection(); - foreach ($fleetCollection as $fleet) { - $id = uniqid(); - $block = $layout->createBlock('core/deprecated', "fleet.list.item.{$id}"); - $block->setTemplate('empire/overview/fleet/item.phtml'); - - $block['class'] = $fleet->getRowClass(); - $block['fleet'] = $fleet; - $block['user'] = $user; - - $fleetList->setPartial($id, $block); - } - - $messageCollection = $user->getNewMessagesCount(); - - $newMessages = $layout->createBlock('core/deprecated', 'overview.messages'); - $newMessages->setTemplate('empire/overview/messages.phtml'); - $newMessages['count'] = (int) $count; - - /** - * Page display - * Refactoring needed - * {{{ - */ - // ----------------------------------------------------------------------------------------------- - $parse = $lang; - // ----------------------------------------------------------------------------------------------- - // News Frame ... - // External Chat Frame ... - // Banner ADS Google (meme si je suis contre cela) - if (Wootook::getGameConfig('game/news/active')) { - $parse['NewsFrame'] = "" . $lang['ov_news_title'] . "" . htmlentities(Wootook::getGameConfig('game/news/content'), ENT_QUOTES, 'UTF-8') . ""; - } - if (Wootook::getGameConfig('engine/options/chat')) { - $parse['ExternalTchatFrame'] = "" . Wootook::__('Open the chat.') . ""; - } - if (Wootook::getGameConfig('engine/options/banner')) { - $bannerUrl = Wootook::getStaticUrl('scripts/createbanner.php', array('id' => $user['id'])); - - $parse['bannerframe'] = "
    ".$lang['InfoBanner']."
    "; - } - // --- Gestion de l'affichage d'une lune --------------------------------------------------------- - if ($moon['id']) { - if ($planet->isPlanet()) { - $lune = doquery ("SELECT * FROM {{table}} WHERE `galaxy` = '" . $planet['galaxy'] . "' AND `system` = '" . $planet['system'] . "' AND `planet` = '" . $planet['planet'] . "' AND `planet_type` = '3'", 'planets', true); - $parse['moon_img'] = "'; - $parse['moon'] = $planet->getMoon()->getName(); - } else { - $parse['moon_img'] = ""; - $parse['moon'] = ""; - } - } else { - $parse['moon_img'] = ""; - $parse['moon'] = ""; - } - // Moon END - $parse['planet_name'] = $planet['name']; - $parse['planet_diameter'] = Math::render($planet['diameter']); - $parse['planet_field_current'] = Math::render($planet->getUsedFields()); - $parse['planet_field_max'] = Math::render($planet->getBuildingFields()); - $parse['planet_temp_min'] = $planet['temp_min']; - $parse['planet_temp_max'] = $planet['temp_max']; - $parse['galaxy_galaxy'] = $planet['galaxy']; - $parse['galaxy_planet'] = $planet['planet']; - $parse['galaxy_system'] = $planet['system']; - $StatRecord = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '" . $user['id'] . "';", 'statpoints', true); - - $parse['user_points'] = Math::render($StatRecord['build_points']); - $parse['user_fleet'] = Math::render($StatRecord['fleet_points']); - $parse['player_points_tech'] = Math::render($StatRecord['tech_points']); - $parse['total_points'] = Math::render($StatRecord['total_points']);; - - $parse['user_rank'] = $StatRecord['total_rank']; - $ile = $StatRecord['total_old_rank'] - $StatRecord['total_rank']; - if ($ile >= 1) { - $parse['ile'] = "+" . $ile . ""; - } elseif ($ile < 0) { - $parse['ile'] = "-" . $ile . ""; - } elseif ($ile == 0) { - $parse['ile'] = "" . $ile . ""; - } - $parse['u_user_rank'] = $StatRecord['total_rank']; - $parse['user_username'] = $user['username']; - - //$parse['fleet_list'] = $fleetList->render(); - $parse['energy_used'] = $planet["energy_max"] - $planet["energy_used"]; - - //$parse['Have_new_message'] = $newMessages->render(); - $parse['time'] = "
    "; - $parse['planet_image'] = $planet['image']; - //$parse['anothers_planets'] = $planetBlock->render(); - - $collection = new Wootook_Player_Resource_Entity_Collection($user->getReadConnection()); - $collection->addAuthlevelToFilter(array(LEVEL_ADMIN), true); - $parse['max_users'] = $collection->getSize(); - - $galaxyData = $planet->getGalaxyData(); - $parse['metal_debris'] = Math::render($galaxyData['metal']); - $parse['crystal_debris'] = Math::render($galaxyData['crystal']); - if (($galaxyData['metal'] != 0 || $galaxyData['crystal'] != 0) && Math::isPositive($planet->getElement(Legacies_Empire::ID_SHIP_RECYCLER))) { - $parse['get_link'] = " (" . $lang['type_mission'][Legacies_Empire::ID_MISSION_RECYCLE] . ")"; - } else { - $parse['get_link'] = ''; - } - - $latestPlayerStatement = $user->getReadConnection()->prepare("SELECT user.username AS `latest_player` FROM {$user->getReadConnection()->getTable('users')} AS user WHERE user.authlevel IN({$displayedPlayerLevels}) ORDER BY user.`register_time` DESC LIMIT 1"); - $latestPlayerStatement->execute(); - $latestPlayer = $latestPlayerStatement->fetch(Wootook_Core_Database_Adapter_Pdo_Mysql::FETCH_COLUMN, 0); - - $collection = new Wootook_Player_Resource_Entity_Collection($user->getReadConnection()); - $collection->addAuthlevelToFilter(array(LEVEL_ADMIN), true); - $collection->addIsOnlineToFilter(); - $onlinePlayers = $collection->getSize(); - - $query = doquery('SELECT username FROM {{table}} ORDER BY register_time DESC', 'users', true); - $parse['last_user'] = $latestPlayer; - $query = doquery("SELECT COUNT(DISTINCT(id)) FROM {{table}} WHERE onlinetime>" . (time()-900), 'users', true); - $parse['online_users'] = $onlinePlayers; - $parse['users_amount'] = $userCount; - - // Rajout d'une barre pourcentage - // Calcul du pourcentage de remplissage - // Barre de remplissage - $size = floor($planet->getUsedFields() / $planet->getBuildingFields() * 100); - // Couleur de la barre de remplissage - $parse['case_pourcentage'] = $size . $lang['o/o']; - if ($size > 100) { - $size = 100; - $parse['case_barre_barcolor'] = '#C00000'; - } elseif ($size >= 80) { - $parse['case_barre_barcolor'] = '#C0C000'; - } else { - $parse['case_barre_barcolor'] = '#00C000'; - } - $parse['case_barre'] = $size; - - // Mode Améliorations - $parse['xpminier'] = $user['xpminier']; - $parse['xpraid'] = $user['xpraid']; - $parse['lvl_minier'] = $user['lvl_minier']; - $parse['lvl_raid'] = $user['lvl_raid']; - - $LvlMinier = $user['lvl_minier']; - $LvlRaid = $user['lvl_raid']; - - $parse['lvl_up_minier'] = $LvlMinier * 5000; - $parse['lvl_up_raid'] = $LvlRaid * 10; - // Nombre de raids, pertes, etc ... - $parse['Raids'] = $lang['Raids']; - $parse['NumberOfRaids'] = $lang['NumberOfRaids']; - $parse['RaidsWin'] = $lang['RaidsWin']; - $parse['RaidsLoose'] = $lang['RaidsLoose']; - - $parse['raids'] = $user['raids']; - $parse['raidswin'] = $user['raidswin']; - $parse['raidsloose'] = $user['raidsloose']; - // Compteur de Membres en ligne - $OnlineUsers = doquery("SELECT COUNT(*) FROM {{table}} WHERE onlinetime>='" . (time()-15 * 60) . "'", 'users', 'true'); - $parse['NumberMembersOnline'] = $OnlineUsers[0]; - - $page = parsetemplate(gettemplate('overview_body'), $parse); - - display($page); - /** - * }}} - */ -} diff --git a/src/reg.php b/src/reg.php deleted file mode 100644 index eb9e880..0000000 --- a/src/reg.php +++ /dev/null @@ -1,110 +0,0 @@ - - * All rights reserved. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * --> NOTICE <-- - * This file is part of the core development branch, changing its contents will - * make you unable to use the automatic updates manager. Please refer to the - * documentation for further information about customizing Wootook. - * - */ - -define('INSIDE', true); -define('INSTALL', false); -define('DISABLE_IDENTITY_CHECK', true); -require_once dirname(__FILE__) .'/application/bootstrap.php'; - -includeLang('reg'); - -if (!empty($_POST) && isset($_POST['username']) && isset($_POST['planet_name']) && isset($_POST['email']) && isset($_POST['email_confirm']) && isset($_POST['password']) && isset($_POST['password_confirm'])) { - $session = Wootook::getSession(Wootook_Player_Model_Entity::SESSION_KEY); - if ($_POST['password'] !== $_POST['password_confirm']) { - $session->addError('Password and password confirmation does not match.'); - } - if ($_POST['email'] !== $_POST['email_confirm']) { - $session->addError('Email and email confirmation does not match.'); - } - - $user = null; - if (true || count($session->getMessages(false)) === 0) { - $user = Wootook_Player_Model_Entity::register($_POST['username'], $_POST['email'], $_POST['password']); - - if ($user !== null) { - $user->getHomePlanet()->setName($_POST['planet_name'])->save(); - } - } - - if ($user !== null && $user->getId()) { - header("HTTP/1.1 302 Found"); - //header("Location: welcome.php"); - header("Location: overview.php"); - } else { - header("HTTP/1.1 302 Found"); - header("Location: reg.php"); - } - Wootook_Core_ErrorProfiler::unregister(true); - exit(0); -} - -$layout = new Wootook_Core_Model_Layout(); -$layout->load('registration'); -$block = $layout->getBlock('registration'); - -echo $layout->render(); -/* -function sendpassemail($emailaddress, $password) -{ - global $lang; - - $parse['gameurl'] = Wootook::getStaticUrl('/'); - $parse['password'] = $password; - $email = parsetemplate($lang['mail_welcome'], $parse); - $status = mymail($emailaddress, $lang['mail_title'], $email); - return $status; -} - -function mymail($to, $title, $body, $from = '') -{ - $from = trim($from); - - if (!$from) { - $from = ADMINEMAIL; - } - - $rp = ADMINEMAIL; - - $head = ''; - $head .= "Content-Type: text/plain \r\n"; - $head .= "Date: " . date('r') . " \r\n"; - $head .= "Return-Path: $rp \r\n"; - $head .= "From: $from \r\n"; - $head .= "Sender: $from \r\n"; - $head .= "Reply-To: $from \r\n"; - $head .= "Organization: $org \r\n"; - $head .= "X-Sender: $from \r\n"; - $head .= "X-Priority: 3 \r\n"; - $body = str_replace("\r\n", "\n", $body); - $body = str_replace("\n", "\r\n", $body); - - return mail($to, $title, $body, $head); -} -*/ diff --git a/src/skin/frontend/base/default/css/base.css b/src/skin/frontend/base/default/css/base.css index 45a7186..38b8445 100644 --- a/src/skin/frontend/base/default/css/base.css +++ b/src/skin/frontend/base/default/css/base.css @@ -106,14 +106,17 @@ input[type=submit],input[type=button] {height:2em;border:#58939f 0 solid;border- * Overview */ -.global .content .overview {width:740px;padding:10px 30px;margin:10px auto 0;background:#FFF;color:#000;border:10px solid #58939f;border-radius:10px;border-top-left-radius:30px;border-top-right-radius:30px;} -.global .content .overview h1 {border-bottom:10px solid #58939f;height:30px;margin:10px 10px 30px;font-size:2.3em;} -.global .content .overview .clear {clear:left;height:50px;} +.overview .global .container {width:740px;padding:10px 30px;margin:10px auto 0;background:#FFF;color:#000;border:10px solid #58939f;border-radius:10px;border-top-left-radius:30px;border-top-right-radius:30px;} +.overview .global .container h1 {border-bottom:10px solid #58939f;height:30px;margin:10px 10px 30px;font-size:2.3em;} +.overview .global .container .clear {clear:left;height:50px;} +.overview .global .container .item-container h2 {text-decoration:none;margin-bottom:0;font-size:1.3em;} +.overview .global .container .item-container h3 {text-decoration:none;margin-top:0;font-size:1em;color:#58939f;font-weight:bold;} +.overview .global .container .item-container {padding:10px;margin:10px;border:3px solid #58939f;background-color:#EFEFEF;border-radius:15px 3px 15px 3px;} -.global .content .overview .left {width:250px;float:left;} -.global .content .overview .left h2 {text-decoration:none;margin-bottom:0;font-size:1.3em;} -.global .content .overview .left h3 {text-decoration:none;margin-top:0;font-size:1em;color:#58939f;font-weight:bold;} -.global .content .overview .left .item-container {width:200px;padding:10px;margin:10px;height:250px;border:3px solid #58939f;background-color:#EFEFEF;} +.overview .global .container .left {width:250px;float:left;} +.overview .global .container .content {margin-left:250px;width:490px;} +.overview .global .container .left .item-container {width:200px;} +.overview .global .container .content .item-container {width:440px;} /** * Public pages