*/ /** * Klasa myUser * * @package stUser * @subpackage libs */ class stUser extends sfGuardSecurityUser { /** * Koszyk * * @var stBasket */ protected $basket = null; /** * Domyślne dane dostawy * * @author Marcin Butlak * @var UserData */ private $userDataDelivery = null; /** * Domyślne dane bilingowe * * @author Marcin Butlak * @var UserData */ private $userDataBilling = null; /** * Wersja językowa * * @var Language */ private $language; public static function addUser($username, $password = 'anonymous') { $username = str_replace(' ', '', $username); $user = new sfGuardUser(); $user->setUsername($username); $user->setPassword($password); $user->setHashCode(md5(microtime())); $user->save(); stNewsletter::addNewUserToNewsletterList($user->getUsername(), $user->getId()); $user->addGroupByName('user'); return $user; } public static function addEmptyUserData($isBilling = "0", $isDefault) { $userData = new UserData(); $userData->setIsBilling($isBilling); $userData->setIsDefault($isDefault); $country = CountriesPeer::doSelectDefault(new Criteria()); $userData->setCountriesId($country ? $country->getId() : null); return $userData; } public static function addEmptyUser() { $user = new sfGuardUser(); return $user; } public static function setIsConfirm($username, $confirm = 1) { $c = new Criteria(); $c->add(sfGuardUserPeer::USERNAME, $username); if ($user = sfGuardUserPeer::doSelectOne($c)) { $user->setIsConfirm($confirm); $user->save(); return $user; } return false; } public static function setExternalAccount($username, $external) { $c = new Criteria(); $c->add(sfGuardUserPeer::USERNAME, $username); if ($user = sfGuardUserPeer::doSelectOne($c)) { $user->setExternalAccount($external); $user->save(); return $user; } return false; } public function hasVatEu() { return (bool)$this->getAttribute('vat_eu', false, 'sfGuardSecurityUser'); } public function setVatEu($v) { $this->setAttribute('vat_eu', $v, 'sfGuardSecurityUser'); } public function hasValidVatEu() { return (bool)$this->getAttribute('valid_vat_eu', false, 'sfGuardSecurityUser'); } public function setValidVatEu($v) { $this->setAttribute('valid_vat_eu', $v, 'sfGuardSecurityUser'); } public function setVatEx($v) { $this->setAttribute('vat_ex', $v, 'sfGuardSecurityUser'); } public function hasVatEx() { return (bool)$this->getAttribute('vat_ex', false, 'sfGuardSecurityUser'); } public function getVatEx() { return $this->getAttribute('vat_ex', null, 'sfGuardSecurityUser'); } public function loginUser($username, $password = "anonymous", $remember = false) { $user = sfGuardUserPeer::retrieveByUsername($username); // user exists? if ($user) { // password is ok? if ($user->checkPassword($password)) { $this->signIn($user, $remember); return true; } } } public function getBasket() { if (null === $this->basket) { $this->basket = stBasket::getInstance($this); } return $this->basket; } /** * Zwraca wersje językową * * @return Language */ public function getLanguage() { if (null === $this->language) { $this->language = LanguagePeer::retrieveByCulture($this->getCulture()); } return $this->language; } public function setCulture($culture) { parent::setCulture($culture); $this->language = null; } /** * @param sfGuardUser $user */ public function signIn($user, $remember = false, $con = null) { parent::signIn($user, $remember, $con); if ($this->isAuthenticated()) { $default = $this->getUserDataDefaultDelivery(); if ($default && $default->getCountriesId()) { $delivery = stDeliveryFrontend::getInstance($this->getBasket()); $delivery->setDefaultDeliveryCountry($default->getCountriesId()); } $billing = $this->getUserDataDefaultBilling(); $isCompany = null === $billing || $billing->isCompany(); stTax::setIsCustomerEuTaxEnabled(!$isCompany); stProductObservePluginListener::updateObserveProductDataBase(); } } public static function hiddenLoginUser($username, $password, $remember = false) { $user = sfGuardUserPeer::retrieveByUsername($username); if (is_object($user)) { if ($user->checkPassword($password)) { $sf_context = sfContext::getInstance(); $sf_user = $sf_context->getUser(); $sf_user->signIn($user, $remember); // if ($user->getLanguage() && LanguagePeer::retrieveByCulture($user->getLanguage())) // { // $sf_user->setCulture($user->getLanguage()); // } return true; } } return false; } public static function loginUserOnlyUsername($username, $remember = false) { $user = sfGuardUserPeer::retrieveByUsername($username); if (is_object($user)) { $context = sfContext::getInstance(); $context->getUser()->signIn($user, $remember); return true; } return false; } public static function isFullAccount($username) { $user = $username instanceof sfGuardUser ? $username : sfGuardUserPeer::retrieveByUsername($username); return null !== $user && !$user->checkPassword("anonymous"); } public function setGuardUser($user) { $this->setAttribute('user_id', $user->getId(), 'sfGuardSecurityUser'); } public function unsetGuardUser() { $this->setAttribute('user_id', null, 'sfGuardSecurityUser'); } public function logoutUser() { $this->signOut(); } public function signOut() { $ret = parent::signOut(); $this->getBasket()->needRefresh(true); return $ret; } public function getGuardUser() { try { $user = parent::getGuardUser(); } catch (sfException $e) { $user = null; } return $user; } public function getEmail() { return $this->getGuardUser()->getUsername(); } public static function updateUserData($user_data_id = null, $user_id, $isBilling, $isDefault = 0, $data = null) { if ($user_data_id == null) { $userData = new UserData(); } else { $c = new Criteria(); $c->add(UserDataPeer::ID, $user_data_id); $userData = UserDataPeer::doSelectOne($c); } $userData->setSfGuardUserId($user_id); $userData->setIsBilling($isBilling); $userData->setIsDefault($isDefault); $defaultCountry = CountriesPeer::doSelectDefault(new Criteria()); $userData->setCountriesId($defaultCountry->getId()); if ($data != null) { if (isset($data['customer_type']) && $data['customer_type'] != UserData::COMPANY_TYPE) { $data['company'] = null; $data['vat_number'] = null; } $userData->setFullName($data['full_name']); $userData->setAddress($data['address']); if (isset($data['address_more'])) { $userData->setAddressMore($data['address_more']); } $userData->setRegion($data['region']); $userData->setCode($data['code']); $userData->setTown($data['town']); $userData->setCountriesId($data['country']); $userData->setPhone($data['phone']); $userData->setCompany(isset($data['company']) ? $data['company'] : null); if ($isBilling == 1) { $userData->setVatNumber(isset($data['vat_number']) ? $data['vat_number'] : null); $userData->setPesel(isset($data['pesel']) ? $data['pesel'] : null); } } $userData->save(); if ($isDefault) { stUser::setDefaultUserData($userData->getId(), $isBilling, $user_id); if ($isBilling) { stTax::setIsCustomerEuTaxEnabled(!$userData->isCompany()); } } return $userData; } public static function setDefaultUserData($userDataId, $isBilling, $user_id) { $con = Propel::getConnection(); $c1 = new Criteria(); $c1->add(UserDataPeer::SF_GUARD_USER_ID, $user_id); if ($isBilling == 1) { $c1->add(UserDataPeer::IS_BILLING, 1); } else { $c1->add(UserDataPeer::IS_BILLING, 0); } $c1->add(UserDataPeer::IS_DEFAULT, 1); $c2 = new Criteria(); $c2->add(UserDataPeer::IS_DEFAULT, 0); BasePeer::doUpdate($c1, $c2, $con); $c = new Criteria(); $c->add(UserDataPeer::SF_GUARD_USER_ID, $user_id); $c->add(UserDataPeer::ID, $userDataId); $userData = UserDataPeer::doSelectOne($c); $userData->setIsDefault(1); $userData->save(); } public static function checkExsistUserData($user_id) { $c = new Criteria(); $c->add(UserDataPeer::SF_GUARD_USER_ID, $user_id); $userDataAll = UserDataPeer::doSelect($c); if ($userDataAll) { foreach ($userDataAll as $userData) { if ($userData->getStreet() == "") { return false; } } } return true; } /** * * @deprecated Zastąpiona przez getUserData() (usunąć w alpha-3) */ public static function getUserDataAll($user_id, $is_billing, $country_id = null, $without_default = null) { $c = new Criteria(); if ($without_default) { $c->add(UserDataPeer::IS_DEFAULT, 0); } if ($country_id) { $c->add(UserDataPeer::COUNTRIES_ID, $country_id); } $c->add(UserDataPeer::SF_GUARD_USER_ID, $user_id); $c->add(UserDataPeer::IS_BILLING, $is_billing); return UserDataPeer::doSelect($c); } /** * Zwraca dane użytkownika * * @author Marcin Butlak * @param bool $default Zwracaj dane domyślne * @param bool $billing Zwracaj dane bilingowe * @return array Tablica danych użytkownika (array of UserData) */ public function getUserData($default = null, $billing = null) { if (!$this->isAuthenticated()) { return array(); } $c = new Criteria(); $c->add(UserDataPeer::SF_GUARD_USER_ID, $this->getGuardUser()->getId()); if (isset($billing)) { $c->add(UserDataPeer::IS_BILLING, $billing); } if (isset($default)) { $c->add(UserDataPeer::IS_DEFAULT, $default); } return UserDataPeer::doSelect($c); } /** * Zwraca domyślne dane bilingowe * * @author Marcin Butlak * @return UserData */ public function getUserDataDefaultBilling() { if (is_null($this->userDataBilling)) { $billing = $this->getUserData(true, true); if ($billing) { $this->userDataBilling = $billing[0]; } } return $this->userDataBilling; } /** * Zwraca domyślne dane dostawy * * @author Marcin Butlak * @return UserData */ public function getUserDataDefaultDelivery() { if (is_null($this->userDataDelivery)) { $delivery = $this->getUserData(true, false); if ($delivery) { $this->userDataDelivery = $delivery[0]; } } return $this->userDataDelivery; } public static function createNewUserWithUserData($userDataBilling, $userDataDelivery, $diffrentData = 0) { $user_id = stUser::addUser($userDataBilling['email'], "anonymous"); if ($diffrentData == 1) { stUser::updateUserData('', $user_id, 1, 1, $userDataBilling); stUser::updateUserData('', $user_id, 0, 1, $userDataDelivery); } else { stUser::updateUserData('', $user_id, 1, 1, $userDataBilling); stUser::updateUserData('', $user_id, 0, 1, $userDataBilling); } } public function thisSameUserData($userDataArray, $userDataObject) { if ($userDataArray['company'] != $userDataObject->getCompany()) { return false; } if ($userDataArray['vat_number'] != $userDataObject->getVatNumber()) { return false; } if ($userDataArray['full_name'] != $userDataObject->getFullName()) { return false; } if ($userDataArray['address'] != $userDataObject->getAddress()) { return false; } if ($userDataArray['address_more'] != $userDataObject->getAddressMore()) { return false; } if ($userDataArray['region'] != $userDataObject->getRegion()) { return false; } if ($userDataArray['pesel'] != $userDataObject->getPesel()) { return false; } if ($userDataArray['code'] != $userDataObject->getCode()) { return false; } if ($userDataArray['town'] != $userDataObject->getTown()) { return false; } if ($userDataArray['country'] != $userDataObject->getCountriesId()) { return false; } if ($userDataArray['phone'] != $userDataObject->getPhone()) { return false; } return true; } public function thisSameUserDataArray($user_data_1, $user_data_2) { if ($user_data_1['company'] != $user_data_2['company']) { return false; } if ($user_data_1['vat_number'] != $user_data_2['vat_number']) { return false; } if ($user_data_1['full_name'] != $user_data_2['full_name']) { return false; } if ($user_data_1['address'] != $user_data_2['address']) { return false; } if ($user_data_1['address_more'] != $user_data_2['address_more']) { return false; } if ($user_data_1['code'] != $user_data_2['code']) { return false; } if ($user_data_1['town'] != $user_data_2['town']) { return false; } if ($user_data_1['country'] != $user_data_2['country']) { return false; } if ($user_data_1['phone'] != $user_data_2['phone']) { return false; } if ($user_data_1['region'] != $user_data_2['region']) { return false; } if ($user_data_1['pesel'] != $user_data_2['pesel']) { return false; } return true; } public function sessionTimeOut() { return $this->isAnonymous() && $this->hasAccount() && $this->getAttribute('user_id', null, 'sfGuardSecurityUser'); } public function hasAccount() { return !$this->isAnonymousAccount(); } public function isAnonymousAccount() { $guard_user = $this->getGuardUser(); return $guard_user ? $guard_user->checkPassword("anonymous") : false; } public function isSameUser($user_id) { $guard_user = $this->getUser()->getGuardUser(); return ($guard_user ? $guard_user->getId() : 0) == $user_id; } public static function processAuthentication() { $context = sfContext::getInstance(); $controller = $context->getController(); $user = $context->getUser(); $url = $controller->genUrl('stUser/loginUser', true); // if($user->sessionTimeOut()) // { // $url = $controller->genUrl('stUser/loginUser', true); // } // else // { // $url = $controller->genUrl('@homepage'); // } $controller->redirect($url); } public function thisSameUserDataObject($obj1, $obj2) { if (is_null($obj1) || is_null($obj2)) return false; $attributes = array( 'company', 'full_name', 'address', 'address_more', 'region', 'pesel', 'code', 'town', 'countries_id', 'phone' ); foreach ($attributes as $attribute) { $method = 'get' . sfInflector::camelize($attribute); if ($obj1->$method() != $obj2->$method()) return false; } return true; } }