/** * @method setMobileNumber * @param {string} $mobileNumber * @param {boolean} [$verified=false] * @throws {Q_Exception_MissingRow} * If mobile number is missing * @throws {Users_Exception_AlreadyVerified} * If user was already verified * @throws {Users_Exception_WrongState} * If verification state is wrong */ function setMobileNumber($mobileNumber, $verified = false) { Q_Valid::phone($mobileNumber, $normalized); $mobile = new Users_Mobile(); $mobile->number = $normalized; $retrieved = $mobile->retrieve('*', array('ignoreCache' => true)); if (empty($mobile->activationCode)) { $mobile->activationCode = ''; $mobile->activationCodeExpires = '0000-00-00 00:00:00'; } $mobile->authCode = md5(microtime() + mt_rand()); if ($verified) { $mobile->userId = $this->id; } else { if (!$retrieved) { throw new Q_Exception_MissingRow(array('table' => "a mobile phone", 'criteria' => "number {$normalized}"), 'mobileNumber'); } if ($mobile->userId != $this->id) { // We're going to tell them it's verified for someone else, // even though it may not have been verified yet. // In the future, might throw a more accurate exception. throw new Users_Exception_AlreadyVerified(array('key' => 'mobile number', 'userId' => $mobile->userId)); } if (!in_array($mobile->state, array('unverified', 'active'))) { throw new Users_Exception_WrongState(array('key' => $mobile->number, 'state' => $mobile->state), 'mobileNumber'); } } // Everything is okay. Assign it! $mobile->state = 'active'; $mobile->save(); $ui = new Users_Identify(); $ui->identifier = "mobile_hashed:" . Q_Utils::hash($normalized); $ui->state = 'verified'; $ui->userId = $this->id; $ui->save(true); $this->mobileNumberPending = ''; $this->mobileNumber = $normalized; $this->save(); $user = $this; /** * @event Users/setMobileNumber {after} * @param {string} user * @param {string} mobile */ Q::event('Users/setMobileNumber', compact('user', 'mobile'), 'after'); return true; }
function setMobileNumber($mobile_number) { // TODO: implement Users_Mobile::sendMessage $m = new Users_Mobile(); $m->number = $mobile_number; if (!$m->retrieve()) { throw new Pie_Exception_MissingRow(array('table' => "a mobile phone", 'criteria' => "number {$mobile_number}"), 'mobile_number'); } if ($m->user_id != $this->id) { // We're going to tell them it's verified for someone else, // even though it may not have been verified yet. // In the future, might throw a more accurate exception. throw new Users_Exception_AlreadyVerified(array('key' => $m->number, 'user_id' => $m->user_id)); } if ($m->state != 'unverified') { throw new Users_Exception_WrongState(array('key' => $m->number, 'state' => $m->state), 'mobile_number'); } // Everything is okay. Assign it! $this->mobile_number = $mobile_number; $m->state = 'active'; $m->save(); Pie::event('users/setMobileNumber', compact('mobile_number'), 'after'); return true; }