andWhere( ['number' => $cardNumber] )->one(); if ( $card == null ){ throw new NotFoundHttpException(); } $device = MobileDevice::find() ->andWhere( [ 'id_card' => $card->id_card, 'device_identifier' => $deviceIdentifier ] )->one(); if ( $device === null ){ throw new NotFoundHttpException(); } // if ( // in_array($device->status, [MobileDevice::STATUS_ACTIVE, MobileDevice::STATUS_INACTIVE], true) === false ){ // throw new NotFoundHttpException(); // } return $device; } public function create($cardNumber, $deviceIdentifier, $deviceName) { $card = Card::find()->andWhere( ['number' => $cardNumber] )->one(); if ( $card == null ){ throw new NotFoundHttpException(); } // do not allow registering cards without customer $customer = Customer::find()->andWhere(['id_customer_card' => $card->id_card])->one(); if ( $customer == null ){ throw new NotFoundHttpException(); } $device = MobileDevice::find() ->andWhere( [ 'id_card' => $card->id_card, 'device_identifier' => $deviceIdentifier ] )->one(); if ( $device ){ throw new BadRequestHttpException("Device already exists, can't create"); } $device = new MobileDevice(); $device->device_identifier = $deviceIdentifier; $device->id_card = $card->id_card; $device->status = MobileDevice::STATUS_INACTIVE; $device->device_name = $deviceName; $device->save(false); return $device; } /** * @param $cardNumber * @param $deviceIdentifier * @return array|MobileDevice|ActiveRecord * @throws BadRequestHttpException * @throws NotFoundHttpException */ public function loginOrCreate($cardNumber, $deviceIdentifier, $deviceName) { try { return $this->login($cardNumber, $deviceIdentifier); } catch (\Exception $e) { return $this->create($cardNumber, $deviceIdentifier, $deviceName); } } }