Unverified Commit 40fe580b authored by Stefan Auditor's avatar Stefan Auditor Committed by Stefan Auditor
Browse files

Issue #3282696 by sanduhrs: Port of l10n_community: Fix statistics

parent 3d7026f4
Loading
Loading
Loading
Loading
+54 −22
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ class L10nStatistics {
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $connection;
  protected Connection $connection;

  /**
   * Constructs a L10nStatistics object.
@@ -30,7 +30,9 @@ class L10nStatistics {
   * @param \Drupal\Core\Database\Connection $connection
   *   The database connection.
   */
  public function __construct(Connection $connection) {
  public function __construct(
      Connection $connection
  ) {
    $this->connection = $connection;
  }

@@ -55,8 +57,11 @@ class L10nStatistics {
   * @return array
   *   first element is the number of original strings, second element is the
   *   number of translations for each language
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function getReleaseStringCount(L10nServerProjectInterface $project, L10nServerReleaseInterface $release = NULL) {
  public function getReleaseStringCount(L10nServerProjectInterface $project, L10nServerReleaseInterface $release = NULL): array {
    // Faster queries with l10n_packager, first get latest release id from the
    // l10n_packager_file table for the project requested, then get the
    // translation count of the release.
@@ -68,7 +73,7 @@ class L10nStatistics {
        ->fetchField();
      if (!$rid) {
        $num_source = $sums = 0;
        return [0, 0];
        return [$num_source, $sums];
      }

      $release = \Drupal::entityTypeManager()
@@ -76,7 +81,7 @@ class L10nStatistics {
        ->load($rid);
      if (!$release) {
        $num_source = $sums = 0;
        return [0, 0];
        return [$num_source, $sums];
      }
    }

@@ -107,7 +112,9 @@ class L10nStatistics {
   */
  public function getProjectStringCount(L10nServerProjectInterface $project): int {
    $query = $this->connection
      ->query('SELECT COUNT(DISTINCT l.sid) FROM {l10n_server_line} l WHERE l.pid = :pid', [':pid' => $project->id()]);
      ->query('SELECT COUNT(DISTINCT l.sid) FROM {l10n_server_line} l WHERE l.pid = :pid', [
        ':pid' => $project->id(),
      ]);
    return (int) $query->fetchField();
  }

@@ -119,7 +126,9 @@ class L10nStatistics {
   */
  public function getProjectWarningsCount(L10nServerProjectInterface $project): int {
    $query = $this->connection
      ->query('SELECT COUNT(DISTINCT e.eid) FROM {l10n_server_project} p LEFT JOIN {l10n_server_release} r ON p.pid = r.pid LEFT JOIN {l10n_server_error} e ON r.rid = e.rid WHERE p.uri = :uri', [':uri' => $project->getUri()]);
      ->query('SELECT COUNT(DISTINCT e.eid) FROM {l10n_server_project} p LEFT JOIN {l10n_server_release} r ON p.pid = r.pid LEFT JOIN {l10n_server_error} e ON r.rid = e.rid WHERE p.uri = :uri', [
        ':uri' => $project->getUri(),
      ]);
    return (int) $query->fetchField();
  }

@@ -132,7 +141,7 @@ class L10nStatistics {
   * @return int
   *   The release count integer.
   */
  public function getProjectReleases(L10nServerProjectInterface $project) {
  public function getProjectReleases(L10nServerProjectInterface $project): int {
    $release_ids = \Drupal::entityQuery('l10n_server_release')
      ->condition('pid', $project->id())
      ->execute();
@@ -147,8 +156,11 @@ class L10nStatistics {
   *
   * @return int
   *   The parsed release count integer.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function getProjectReleasesParsed(L10nServerProjectInterface $project) {
  public function getProjectReleasesParsed(L10nServerProjectInterface $project): int {
    $release_ids = \Drupal::entityQuery('l10n_server_release')
      ->condition('pid', $project->id())
      ->execute();
@@ -168,7 +180,7 @@ class L10nStatistics {
  /**
   * Get summaries based on language codes.
   *
   * @param \Drupal\l10n_server\Entity\L10nServerProjectInterface $project
   * @param \Drupal\l10n_server\Entity\L10nServerProjectInterface|null $project
   *   A l10n_server_project entity.
   *
   * @return array
@@ -251,7 +263,9 @@ class L10nStatistics {
    // Skip anonymous since that is used for placeholders when there was no
    // prior translations for a suggestion.
    $result = $this->connection
      ->queryRange("SELECT COUNT(DISTINCT t.sid) AS sum, u.name, u.uid FROM {l10n_server_translation} t LEFT JOIN {users_field_data} u ON t.uid = u.uid WHERE t.status = 1 AND t.suggestion = 0 AND t.language = :lng AND u.uid != 0 GROUP BY t.uid ORDER BY sum DESC", 0, 10, [':lng' => $langcode]);
      ->queryRange("SELECT COUNT(DISTINCT t.sid) AS sum, u.name, u.uid FROM {l10n_server_translation} t LEFT JOIN {users_field_data} u ON t.uid = u.uid WHERE t.status = 1 AND t.suggestion = 0 AND t.language = :lng AND u.uid != 0 GROUP BY t.uid ORDER BY sum DESC", 0, 10, [
        ':lng' => $langcode,
      ]);
    return $result->fetchAll();
  }

@@ -261,18 +275,36 @@ class L10nStatistics {
   * @return array
   *   An array of language statistics.
   */
  public function getLanguageStatistics() {
  public function getLanguageStatistics(): array {
    $stats = [];
    $stats['users'] = (int) $this->connection->query("SELECT COUNT(DISTINCT uid) FROM {l10n_server_translation}")->fetchField();
    $stats['projects'] = $this->connection->query('SELECT COUNT(*) FROM {l10n_server_project} WHERE status = 1')->fetchField();
    $stats['releases_parsed'] = $this->connection->query('SELECT COUNT(*) FROM {l10n_server_release} WHERE last_parsed != 0')->fetchField();
    $stats['releases_queue'] = $this->connection->query('SELECT COUNT(*) FROM {l10n_server_release} r INNER JOIN {l10n_server_project} p ON r.pid = p.pid WHERE p.status = 1 AND r.last_parsed = 0')->fetchField();
    $stats['files'] = $this->connection->query('SELECT COUNT(*) FROM {l10n_server_file}')->fetchField();
    $stats['strings'] = $this->connection->query('SELECT COUNT(*) FROM {l10n_server_string}')->fetchField();
    $stats['translations'] = $this->connection->query('SELECT COUNT(*) FROM {l10n_server_status_flag} WHERE has_translation = 1')->fetchField();
    $stats['suggestions'] = $this->connection->query('SELECT COUNT(*) FROM {l10n_server_translation} WHERE suggestion = 1 AND status = 1')->fetchField();
    $stats['users'] = (int) $this->connection
      ->query("SELECT COUNT(DISTINCT uid) FROM {l10n_server_translation}")
      ->fetchField();
    $stats['projects'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_project} WHERE status = 1')
      ->fetchField();
    $stats['releases_parsed'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_release} WHERE last_parsed != 0')
      ->fetchField();
    $stats['releases_queue'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_release} r INNER JOIN {l10n_server_project} p ON r.pid = p.pid WHERE p.status = 1 AND r.last_parsed = 0')
      ->fetchField();
    $stats['files'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_file}')
      ->fetchField();
    $stats['strings'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_string}')
      ->fetchField();
    $stats['translations'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_status_flag} WHERE has_translation = 1')
      ->fetchField();
    $stats['suggestions'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_translation} WHERE suggestion = 1 AND status = 1')
      ->fetchField();
    if (\Drupal::moduleHandler()->moduleExists('l10n_groups')) {
      $stats['groups'] = $this->connection->query('SELECT COUNT(*) FROM {groups} WHERE type = \'translation\'')->fetchField();
      $stats['groups'] = $this->connection
        ->query('SELECT COUNT(*) FROM {groups} WHERE type = \'translation\'')
        ->fetchField();
    }
    return $stats;
  }
@@ -286,7 +318,7 @@ class L10nStatistics {
   * @return array
   *   An array of language statistics.
   */
  public function getLanguageStatisticsByLanguage(string $langcode) {
  public function getLanguageStatisticsByLanguage(string $langcode): array {
    $stats = [];
    $stats['strings'] = $this->connection
      ->query('SELECT COUNT(*) FROM {l10n_server_string}')