3 * A special member class for Ship-Simu
5 * @author Roland Haeder <webmaster@ship-simu.org>
7 * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software
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()->readConfig('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... ;-)
73 // Get a points instance from registry
74 $pointsInstance = Registry::getRegistry()->getInstance('points');
76 // Is there an instance?
77 if (is_null($pointsInstance)) {
79 $pointsInstance = ObjectFactory::createObjectByConfiguredName('user_ppints_class', array($this));
81 // And store it in registry
82 Registry::getRegistry()->addInstance('points', $pointsInstance);
85 // Just forward this request to the user points class
86 $hasRequired = $pointsInstance->ifUserHasRequiredPoints($action);
93 * Determines if government can still pay a "virtual training course" in general
95 * @return $ifGovHelps Wether if government helps the user with a virtual training course
97 public function ifGovernmentPaysTraining () {
98 // By default they want to help.
101 // First get a government instance from registry
102 $governmentInstance = Registry::getRegistry()->getInstance('government');
105 if (is_null($governmentInstance)) {
106 // Then create a new one
107 $governmentInstance = ObjectFactory::createObjectByConfiguredName('government_class', array($this));
109 // Store it in registry
110 Registry::getRegistry()->addInstance('government', $governmentInstance);
113 // Then ask the government if they want to pay a "startup help" to the user
114 if ($governmentInstance->ifGovernmentAlreadyPayedTraining()) {
115 // Training already given!
119 // Return result here
124 * Determines if government can still pay a "startup help" to the user
126 * @return $ifGovHelps Wether if government helps the user with some startup money
128 public function ifGovernmentPaysStartupHelp () {
129 // By default they want to help.
132 // First get a government instance from registry
133 $governmentInstance = Registry::getRegistry()->getInstance('government');
136 if (is_null($governmentInstance)) {
137 // Then create a new one
138 $governmentInstance = ObjectFactory::createObjectByConfiguredName('government_class', array($this));
140 // Store it in registry
141 Registry::getRegistry()->addInstance('government', $governmentInstance);
144 // Then ask the government if they want to pay a "startup help" to the user
145 if ($governmentInstance->ifGovernmentPayedMaxmimumStartupHelp()) {
146 // They can't pay anymore to the user (excited amount)
150 // Return result here
155 * Checks wether the user can take points from the money bank
157 * @return $bankLends Wether the money bank is able to lend money
158 * @todo Need to implement MoneyBank::ifBankLendsMoreMoney()
160 public function ifUserAllowedTakeCreditsFromMoneyBank () {
161 // Per default the money bank cannot pay
164 // Get a money bank instance from registry
165 $bankInstance = Registry::getRegistry()->getInstance('money_bank');
168 if (is_null($bankInstance)) {
169 // Then create a new one
170 $bankInstance = ObjectFactory::createObjectByConfiguredName('bank_class', array($this));
172 // Store it in registry
173 Registry::getRegistry()->addInstance('money_bank', $bankInstance);
176 // Does the money bank lend more money?
178 if ($bankInstance->ifBankLendsMoreMoney()) {
179 // Okay, that they will do
189 * Checks wether the user has maximum credits with the money bank. This
190 * should be done seperately from checking if the user is allowed to take
191 * credits from the bank.
193 * @return $hasMaxCredits Wether the user has maximum credits with the bank
194 * @todo Need to check the bank if they can lend more money
196 public function ifUserHasMaximumCreditsWithMoneyBank () {
197 // For default he can still get money
198 $hasMaxCredits = false;
200 // Get a money bank instance from registry
201 $bankInstance = Registry::getRegistry()->getInstance('money_bank');
204 if (is_null($bankInstance)) {
205 // Then create a new one
206 $bankInstance = ObjectFactory::createObjectByConfiguredName('bank_class', array($this));
208 // Store it in registry
209 Registry::getRegistry()->addInstance('money_bank', $bankInstance);
212 // Now check if the user has maximum credits
214 if ($bankInstance->ifUserHasMaxCredits()) {
216 $hasMaxCredits = true;
221 return $hasMaxCredits;