setName('talk:phone-number:add') ->setDescription('Add a mapping entry to map a phone number to an user') ->addArgument( 'phone', InputArgument::REQUIRED, 'Phone number that will be called', ) ->addArgument( 'user', InputArgument::REQUIRED, 'User to be added to the conversation', ) ->addOption( 'force', 'f', InputOption::VALUE_NONE, 'Force the number to the given user even when it is assigned already', ) ; } protected function execute(InputInterface $input, OutputInterface $output): int { $phoneNumber = $input->getArgument('phone'); $userId = $input->getArgument('user'); $force = (bool)$input->getOption('force'); $user = $this->userManager->get($userId); if (!$user instanceof IUser) { $output->writeln('Invalid user "' . $userId . '" provided'); return self::FAILURE; } $userId = $user->getUID(); $phoneNumberStandard = preg_match('/^[0-9]{1,20}$/', $phoneNumber) ? $phoneNumber : $this->phoneNumberUtil->convertToStandardFormat($phoneNumber); if ($phoneNumberStandard === null) { $output->writeln('Not a valid phone number ' . $phoneNumber . '. The format is invalid.'); return self::FAILURE; } $phoneNumber = $phoneNumberStandard; try { $entry = $this->mapper->findByPhoneNumber($phoneNumber); } catch (DoesNotExistException) { $entry = null; } if ($entry !== null) { $oldActor = $entry->getActorId(); if (!$force) { $output->writeln('Phone number is already assigned to ' . $oldActor . ''); return self::FAILURE; } $entry->setActorId($userId); $this->mapper->update($entry); $output->writeln('Phone number ' . $entry->getPhoneNumber() . ' is now assigned to ' . $entry->getActorId() . ''); $output->writeln('Was assigned to ' . $oldActor . ' before'); return self::SUCCESS; } $entry = new PhoneNumber(); $entry->setPhoneNumber($phoneNumber); $entry->setActorId($userId); $this->mapper->insert($entry); $output->writeln('Phone number ' . $entry->getPhoneNumber() . ' is now assigned to ' . $entry->getActorId() . ''); return self::SUCCESS; } }