mocean_sms_login-8.x-1.x-dev/src/Form/SmsLoginVerifyForm.php

src/Form/SmsLoginVerifyForm.php
<?php

namespace Drupal\mocean_sms_login\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\user\Entity\User;
use Drupal\user\Entity;
use Drupal\Core\Database\Database;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\user\UserInterface;
use Drupal\Core\Routing;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Session\SessionManagerInterface;
use Drupal\Core\TempStore\PrivateTempStoreFactory;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\mocean_sms_login\Utility;

class SmsLoginVerifyForm extends FormBase {
	  
  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'mocean_sms_login_verify_form';
  }  
  
  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $uid = \Drupal::routeMatch()->getParameter('uid');
    $database = \Drupal::database();
    $query = $database->query('SELECT verified FROM mocean_sms_login WHERE id = :id LIMIT 1', [':id' => $uid,]);
    $verified = $query->fetchField();
    
    if (\Drupal::currentUser()->isAuthenticated()) { 
      $user = \Drupal\user\Entity\User::load($uid);
      user_logout($user);	
    }

    $form['mocean_sms_login_verify_form']['code'] = [
      '#title' => t('Verification Code'),
      '#type' => 'textfield',
      '#size' => 6,
      '#maxlength' => 6,
      //'#required' => TRUE,
    ];
	
	//Submit button
	$form['mocean_sms_login_verify_form']['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Submit'),
    ];
	
	//Resend code button
    $form['mocean_sms_login_verify_form']['resend'] = [
      '#type' => 'submit',
      '#value' => $this->t('Resend code'),
      '#submit' => ['::resendCode'],
    ];

    return $form;
  }
  
  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
  }
  
  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $uid = \Drupal::routeMatch()->getParameter('uid');
    $reqid = \Drupal::routeMatch()->getParameter('arg');
	
	//Function verify verification code
	$jsonResponse = (new Utility)->smsLoginVerifyCode($reqid, $form_state->getValue('code'));
	
	if ($jsonResponse['status'] == 0 && $this->currentUser()->isAnonymous()) {
      $user = \Drupal\user\Entity\User::load($uid);
      $database = \Drupal::database();
      $database->update('mocean_sms_login')
        ->fields(['verified' => 1,])
        ->condition('id', $uid)
        ->execute();
        
      user_login_finalize($user);
      $form_state->setRedirect('<front>');
	}
	else if (in_array($jsonResponse['status'], [16,17])) {
	 $this->messenger()->addError($this->t('Incorrect code or code expired.'));
	}
    else if ($jsonResponse['status'] == 19) {
	 $this->messenger()->addError($this->t('Operation too frequent.'));
	}
    else if (in_array($jsonResponse['status'], [1,2,18])) {
	  $this->messenger()->addError($this->t("Authorization failed or low on credit, report to the site's admin."));
	}
    else if ($jsonResponse['status'] == 15) {
      $this->messenger()->addError($this->t('Incorrect code was provided too many times. Maximum retry limit is 3.'));
	}
    else {
      $this->messenger()->addError($this->t('An error has occured, please try again later.'));
    }
  }
  
  public static function resendCode(array &$form, FormStateInterface $form_state) {
	$uid = \Drupal::routeMatch()->getParameter('uid');
    $database = \Drupal::database();
    $query = $database->query('SELECT phone FROM mocean_sms_login WHERE id = :id LIMIT 1', [':id' => $uid,]);
    $phone = $query->fetchField();
	
	//Function called to verification send code
	$jsonResponse = (new Utility)->smsLoginSendCode($phone);
	
	if ($jsonResponse['status'] == 0) {
	  //Verification resent successfully, redirect to new page for entering verification code
	  $form_state->setRedirect('mocean_sms_login.sms_login_verify_form', ['uid' => $uid, 'arg' => $jsonResponse['reqid']]);
	  \Drupal::messenger()->addStatus(t('Verification code resent.'));
	}
	else if (in_array($jsonResponse['status'], [16,17])) {
	  \Drupal::messenger()->addError(t('Incorrect code or code expired.'));
	}
    else if ($jsonResponse['status'] == 19) {
	  \Drupal::messenger()->addError(t('Operation too frequent.'));
	}
    else if (in_array($jsonResponse['status'], [1,2,18])) {
	  \Drupal::messenger()->addError(t("Authorization failed or low on credit, report to the site's admin."));
	}
    else if ($jsonResponse['status'] == 15) {
      \Drupal::messenger()->addError(t('Incorrect code was provided too many times. Maximum retry limit is 3.'));
	}
    else {
      \Drupal::messenger()->addError(t('An error has occured, please try again later.'));
    }
  }
  
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc