learnosity-1.0.x-dev/src/LearnositySessionHandler.php

src/LearnositySessionHandler.php
<?php

namespace Drupal\learnosity;

use Drupal\Core\Database\Connection;

/**
 * Class LearnositySessionHandler.
 *
 * This is a lightweight class that manages the current active learnosity
 * sessions. This is created so that we have some control on how sessions are
 * created on assessments.
 *
 * @package Drupal\learnosity
 */
class LearnositySessionHandler {

  /**
   * The learnosity Sdk service.
   *
   * @var \Drupal\learnosity\LearnositySdk
   */
  protected $learnosity;

  /**
   * The database connection.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * LearnositySessionHandler constructor.
   *
   * @param \Drupal\learnosity\LearnositySdk $learnosity
   *   The learnosity sdk service.
   * @param \Drupal\Core\Database\Connection $database
   *   The drupal core database.
   */
  public function __construct(LearnositySdk $learnosity, Connection $database) {
    $this->learnosity = $learnosity;
    $this->database = $database;
  }

  /**
   * Fetch the user's Learnosity session ID.
   *
   * @param int $activity_id
   *   The activity id associated with this session.
   *
   * @return string
   *   The user's Learnosity session id.
   */
  public function getUserSessionId($activity_id) {
    $session = $this->database->select('learnosity_sessions', 'ls')
      ->fields('ls', ['sid'])
      ->condition('uid', \Drupal::currentUser()->id())
      ->condition('activity_id', $activity_id)
      ->condition('status', 0)
      ->execute()
      ->fetchCol();

    if (!empty($session[0])) {
      return $session[0];
    }

    return FALSE;
  }

  /**
   * Initialize the session.
   *
   * @param int $activity_id
   *   The activity id.
   *
   * @return string
   *   The session id.
   *
   * @throws \Exception
   */
  public function init($activity_id) {
    // Don't initialize a new session if one already exists.
    $sid = $this->getUserSessionId($activity_id);
    if ($sid) {
      return $sid;
    }
    $sid = $this->generateSessionUuid();
    $this->database->insert('learnosity_sessions')
      ->fields([
        'sid' => $sid,
        'uid' => \Drupal::currentUser()->id(),
        'activity_id' => $activity_id,
        'timestamp' => \Drupal::time()->getRequestTime(),
      ])->execute();

    return $sid;
  }

  /**
   * Expires a specific session.
   *
   * @param string $sid
   *   The session id.
   */
  public function expire($sid) {
    $this->database->update('learnosity_sessions')
      ->fields([
        'status' => 1,
      ])
      ->condition('sid', $sid)
      ->execute();
  }

  /**
   * Prune old sessions from the database.
   */
  public function prune() {

    // Remove sessions that have expired or are more than 12 hours old.
    $query = $this->database->delete('learnosity_sessions');
    $or_group = $query->orConditionGroup()
      ->condition('status', 1)
      ->condition('timestamp', \Drupal::time()->getRequestTime() - (3600 * 12), '<');

    $query->condition($or_group)
      ->execute();
  }

  /**
   * Generates the Session uuid.
   *
   * @return string
   *   The session uuid.
   */
  public function generateSessionUuid() {
    return $this->learnosity->generateUuid();
  }

}

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

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