/** * {@inheritdoc} */ public function query() { $this->ensureMyTable(); $source = $this->tableAlias . '.source_language'; $target = $this->tableAlias . '.target_language'; // Add a new group for the language abilities, which are a set of source // and target language combinations. $this->query->setWhereGroup('OR', 'eligible'); // Return all language abilities for the current user. foreach (tmgmt_local_supported_language_pairs(NULL, array(\Drupal::currentUser()->id())) as $key => $ability) { $key = str_replace('-', '_', $key); $arguments = array(':source_' . $key => $ability['source_language'], ':target_' . $key => $ability['target_language']); $this->query->addWhereExpression('eligible', "{$source} = :source_{$key} AND {$target} = :target_{$key}", $arguments); } }
public function testAbilitiesAPI() { $this->addLanguage('fr'); $this->addLanguage('ru'); $this->addLanguage('it'); $all_assignees = array(); $assignee1 = $this->drupalCreateUser($this->localTranslatorPermissions); $all_assignees[$assignee1->id()] = $assignee1->getUsername(); $this->drupalLogin($assignee1); $edit = array('tmgmt_translation_skills[0][language_from]' => 'en', 'tmgmt_translation_skills[0][language_to]' => 'de'); $this->drupalPostForm('user/' . $assignee1->id() . '/edit', $edit, t('Save')); $assignee2 = $this->drupalCreateUser($this->localTranslatorPermissions); $all_assignees[$assignee2->id()] = $assignee2->getUsername(); $this->drupalLogin($assignee2); $edit = array('tmgmt_translation_skills[0][language_from]' => 'en', 'tmgmt_translation_skills[0][language_to]' => 'ru'); $this->drupalPostForm('user/' . $assignee2->id() . '/edit', $edit, t('Save')); $edit = array('tmgmt_translation_skills[1][language_from]' => 'en', 'tmgmt_translation_skills[1][language_to]' => 'fr'); $this->drupalPostForm('user/' . $assignee2->id() . '/edit', $edit, t('Save')); $edit = array('tmgmt_translation_skills[2][language_from]' => 'fr', 'tmgmt_translation_skills[2][language_to]' => 'it'); $this->drupalPostForm('user/' . $assignee2->id() . '/edit', $edit, t('Save')); $assignee3 = $this->drupalCreateUser($this->localTranslatorPermissions); $all_assignees[$assignee3->id()] = $assignee3->getUsername(); $this->drupalLogin($assignee3); $edit = array('tmgmt_translation_skills[0][language_from]' => 'fr', 'tmgmt_translation_skills[0][language_to]' => 'ru'); $this->drupalPostForm('user/' . $assignee3->id() . '/edit', $edit, t('Save')); $edit = array('tmgmt_translation_skills[1][language_from]' => 'it', 'tmgmt_translation_skills[1][language_to]' => 'en'); $this->drupalPostForm('user/' . $assignee3->id() . '/edit', $edit, t('Save')); // Test target languages. $target_languages = tmgmt_local_supported_target_languages('fr'); $this->assertTrue(isset($target_languages['it'])); $this->assertTrue(isset($target_languages['ru'])); $target_languages = tmgmt_local_supported_target_languages('en'); $this->assertTrue(isset($target_languages['fr'])); $this->assertTrue(isset($target_languages['ru'])); // Test language pairs. $this->assertEqual(tmgmt_local_supported_language_pairs(), array('en__de' => array('source_language' => 'en', 'target_language' => 'de'), 'en__ru' => array('source_language' => 'en', 'target_language' => 'ru'), 'en__fr' => array('source_language' => 'en', 'target_language' => 'fr'), 'fr__it' => array('source_language' => 'fr', 'target_language' => 'it'), 'fr__ru' => array('source_language' => 'fr', 'target_language' => 'ru'), 'it__en' => array('source_language' => 'it', 'target_language' => 'en'))); $this->assertEqual(tmgmt_local_supported_language_pairs('fr', array($assignee2->id())), array('fr__it' => array('source_language' => 'fr', 'target_language' => 'it'))); // Test if we got all translators. $assignees = tmgmt_local_assignees(); foreach ($all_assignees as $uid => $name) { if (!isset($assignees[$uid])) { $this->fail('Expected translator not present'); } if (!in_array($name, $all_assignees)) { $this->fail('Expected translator name not present'); } } // Only translator2 has such abilities. $assignees = tmgmt_local_assignees('en', array('ru', 'fr')); $this->assertTrue(isset($assignees[$assignee2->id()])); }