3 * A special member class for Ship-Simu
5 * @author Roland Haeder <webmaster@ship-simu.org>
7 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Ship-Simu Developer Team
8 * @license GNU GPL 3.0 or any newer version
9 * @link http://www.ship-simu.org
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 class ShipSimuBaseUser extends BaseUser implements Registerable, Updateable {
26 * Protected constructor
28 * @param $className Name of the class
31 protected function __construct ($className) {
32 // Call parent constructor
33 parent::__construct($className);
37 * Checks wether the user has reached maximum allowed companies to found
39 * @return $reached Wether the user has reached maximum allowed companies to found
41 public function ifUserCreatedMaximumAllowedCompanies () {
42 // Get max allowed companies to found
43 $maxFound = $this->getConfigInstance()->getConfigEntry('max_allowed_companies_found');
45 // Now get a search criteria and set the user's name as criteria
46 $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
47 $criteriaInstance->addCriteria(UserDatabaseWrapper::DB_COLUMN_USERNAME, $this->getUserName());
48 $criteriaInstance->setLimit($maxFound);
50 // Get a company wrapper
51 $wrapperInstance = ObjectFactory::createObjectByConfiguredName('company_db_wrapper_class');
53 // Do the count-select by criteria
54 $totalRows = $wrapperInstance->doSelectCountByCriteria($criteriaInstance);
56 // Does the user have reached maximum?
57 $reached = ($totalRows >= $maxFound);
64 * Checks wether the user has the required amount of points left for the specified action
66 * @param $action The action or configuration entry plus prefix the user wants to perform
67 * @return $hasRequired Wether the user has the required points
69 public function ifUserHasRequiredPoints ($action) {
70 // Default is that everyone is poor... ;-)
74 // Get a points instance from registry
75 $pointsInstance = Registry::getRegistry()->getInstance('points');
76 } catch (NullPointerException $e) {
77 // Instance not found in registry
78 // @TODO We should log this exception later
81 // Is there an instance?
82 if (is_null($pointsInstance)) {
84 $pointsInstance = ObjectFactory::createObjectByConfiguredName('user_points_class', array($this));
86 // And store it in registry
87 Registry::getRegistry()->addInstance('points', $pointsInstance);
90 // Just forward this request to the user points class
91 $hasRequired = $pointsInstance->ifUserHasRequiredPoints($action);
98 * Determines if government can still pay a "virtual training course" in general
100 * @return $ifGovHelps Wether if government helps the user with a virtual training course
102 public function ifGovernmentPaysTraining () {
103 // By default they want to help.
106 // First get a government instance from registry
107 $governmentInstance = Registry::getRegistry()->getInstance('government');
110 if (is_null($governmentInstance)) {
111 // Then create a new one
112 $governmentInstance = ObjectFactory::createObjectByConfiguredName('government_class', array($this));
114 // Store it in registry
115 Registry::getRegistry()->addInstance('government', $governmentInstance);
118 // Then ask the government if they want to pay a "startup help" to the user
119 if ($governmentInstance->ifGovernmentAlreadyPayedTraining()) {
120 // Training already given!
124 // Return result here
129 * Determines if government can still pay a "startup help" to the user
131 * @return $ifGovHelps Wether if government helps the user with some startup money
133 public function ifGovernmentPaysStartupHelp () {
134 // By default they want to help.
137 // First get a government instance from registry
138 $governmentInstance = Registry::getRegistry()->getInstance('government');
141 if (is_null($governmentInstance)) {
142 // Then create a new one
143 $governmentInstance = ObjectFactory::createObjectByConfiguredName('government_class', array($this));
145 // Store it in registry
146 Registry::getRegistry()->addInstance('government', $governmentInstance);
149 // Then ask the government if they want to pay a "startup help" to the user
150 if ($governmentInstance->ifGovernmentPayedMaxmimumStartupHelp()) {
151 // They can't pay anymore to the user (excited amount)
155 // Return result here
160 * Checks wether the user can take points from the money bank
162 * @return $bankLends Wether the money bank is able to lend money
163 * @todo Need to implement MoneyBank::ifBankLendsMoreMoney()
165 public function ifUserAllowedTakeCreditsFromMoneyBank () {
166 // Per default the money bank cannot pay
169 // Get a money bank instance from registry
170 $bankInstance = Registry::getRegistry()->getInstance('money_bank');
173 if (is_null($bankInstance)) {
174 // Then create a new one
175 $bankInstance = ObjectFactory::createObjectByConfiguredName('bank_class', array($this));
177 // Store it in registry
178 Registry::getRegistry()->addInstance('money_bank', $bankInstance);
181 // Does the money bank lend more money?
183 if ($bankInstance->ifBankLendsMoreMoney()) {
184 // Okay, that they will do
194 * Checks wether the user has maximum credits with the money bank. This
195 * should be done seperately from checking if the user is allowed to take
196 * credits from the bank.
198 * @return $hasMaxCredits Wether the user has maximum credits with the bank
199 * @todo Need to check the bank if they can lend more money
201 public function ifUserHasMaximumCreditsWithMoneyBank () {
202 // For default he can still get money
203 $hasMaxCredits = false;
205 // Get a money bank instance from registry
206 $bankInstance = Registry::getRegistry()->getInstance('money_bank');
209 if (is_null($bankInstance)) {
210 // Then create a new one
211 $bankInstance = ObjectFactory::createObjectByConfiguredName('bank_class', array($this));
213 // Store it in registry
214 Registry::getRegistry()->addInstance('money_bank', $bankInstance);
217 // Now check if the user has maximum credits
219 if ($bankInstance->ifUserHasMaxCredits()) {
221 $hasMaxCredits = true;
226 return $hasMaxCredits;