You are here

public function AnonymousPublishingController::verifyAnonymousPost in Anonymous Publishing 8

1 string reference to 'AnonymousPublishingController::verifyAnonymousPost'
anonymous_publishing_cl.routing.yml in modules/anonymous_publishing_cl/anonymous_publishing_cl.routing.yml
modules/anonymous_publishing_cl/anonymous_publishing_cl.routing.yml

File

modules/anonymous_publishing_cl/src/Controller/AnonymousPublishingController.php, line 43

Class

AnonymousPublishingController
Default controller for the anonymous_publishing_cl module.

Namespace

Drupal\anonymous_publishing_cl\Controller

Code

public function verifyAnonymousPost() {
  $akey = \Drupal::request()->query
    ->get('akey', NULL);
  if ($akey == NULL) {
    $this->messenger
      ->addStatus(t('No activation key present.'));
    return $this
      ->redirect('<front>');
  }

  // Check if the key exists.
  $result = \Drupal::database()
    ->select('anonymous_publishing')
    ->fields('anonymous_publishing')
    ->condition('akey', $akey)
    ->execute()
    ->fetchAssoc();
  $nid = $result['nid'];
  $cid = $result['cid'];
  $rkey = $result['akey'];
  $wish = $result['alias'];
  $vfied = $result['verified'];
  $email = $result['email'];
  $at = $akey[0];
  if ($akey != $rkey) {
    $this->messenger
      ->addError(t('Invalid activation key.'));
    return $this
      ->redirect('<front>');
  }
  if ($vfied) {
    $this->messenger
      ->addError(t('Stale activation key.'));
    return $this
      ->redirect('<front>');
  }
  $result = \Drupal::database()
    ->select('anonymous_publishing_emails')
    ->fields('anonymous_publishing_emails')
    ->condition('email', $email)
    ->execute()
    ->fetchAssoc();
  if (!empty($result)) {
    if ($result['blocked']) {

      // Hand-moderate if already blocked.
      $at = 'V';
    }
  }
  else {
    $ip = \Drupal::request()
      ->getClientIp();
    $now = date('Y-m-d');
    $auid = \Drupal::database()
      ->insert('anonymous_publishing_emails')
      ->fields(array(
      'email' => $email,
      'ipaddress' => $ip,
      'firstseen' => $now,
      'lastseen' => $now,
    ))
      ->execute();
    $aliasopt = \Drupal::config('anonymous_publishing_cl.settings')
      ->get('user_alias');
    if ($aliasopt == 'alias') {
      $alias = 'user' . $auid;
    }
    elseif (!empty($wish)) {
      $alias = $wish;
    }
    else {
      $alias = '';
    }
    \Drupal::database()
      ->update('anonymous_publishing_emails')
      ->fields([
      'alias' => $alias,
    ])
      ->condition('auid', $auid, '=')
      ->execute();
  }
  \Drupal::database()
    ->update('anonymous_publishing')
    ->fields([
    'verified' => 1,
  ])
    ->condition('akey', $akey, '=')
    ->execute();
  $vfymsg = t('Thanks for verifying your email,');
  if ('V' == $at) {
    $this->messenger
      ->addMessage($vfymsg . ' ' . t('your content will be published when it has been approved by an administrator.'));
    return $this
      ->redirect('<front>');
  }
  else {

    // Activate (unless comment moderation).
    if ($cid && \Drupal::currentUser()
      ->hasPermission('skip comment approval')) {
      $comment = Comment::load($cid);
      $comment
        ->setPublished(TRUE);
      $comment
        ->save();
      $this->messenger
        ->addMessage($vfymsg . ' ' . t('your comment has been published and will appear on the site soon.'));
      $url = $comment
        ->permalink();
      return $this
        ->redirect($url
        ->getRouteName(), $url
        ->getRouteParameters(), $url
        ->getOptions());
    }
    elseif ($cid) {
      $this->messenger
        ->addMessage($vfymsg . ' ' . t('your comment will be published when it has been approved by an administrator.'));
      return $this
        ->redirect('<front>');
    }
    else {
      $node = Node::load($nid);
      $node
        ->setPublished(TRUE);
      $node
        ->save();
      $this->messenger
        ->addMessage($vfymsg . ' ' . t('your content has been published and will appear on the site soon.'));
      if ($node
        ->access('view')) {
        return $this
          ->redirect($node
          ->toUrl()
          ->getRouteName(), array(
          'node' => $nid,
        ));
      }
    }
  }
}