You are here

lingotek.rules.inc in Lingotek Translation 7.7

Same filename and directory in other branches
  1. 7.5 lingotek.rules.inc
  2. 7.6 lingotek.rules.inc

Lingotek Module + Rules Module Integration

File

lingotek.rules.inc
View source
<?php

/**
 * @file
 * Lingotek Module + Rules Module Integration
 */

/**
 * Implements hook_rules_action_info().
 */
function lingotek_rules_action_info() {
  $actions['lingotek_entity_upload'] = array(
    'group' => t('Lingotek'),
    'label' => t('Upload an entity'),
    'base' => 'lingotek_rules_entity_upload',
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
      ),
    ),
  );
  $actions['lingotek_entity_download'] = array(
    'group' => t('Lingotek'),
    'label' => t('Download specified translations'),
    'base' => 'lingotek_rules_entity_download',
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
      ),
      'language' => array(
        'type' => 'list<text>',
        'label' => t('Language'),
        'options list' => 'lingotek_rules_languages',
      ),
    ),
  );
  $actions['lingotek_entity_download_all_translations'] = array(
    'group' => t('Lingotek'),
    'label' => t('Download all translations'),
    'base' => 'lingotek_rules_entity_download_all',
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
      ),
    ),
  );
  $actions['lingotek_entity_change_profile'] = array(
    'group' => t('Lingotek'),
    'label' => t('Change Profile'),
    'base' => 'lingotek_rules_entity_change_profile',
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
      ),
      'language' => array(
        'type' => 'text',
        'label' => t('Profile'),
        'options list' => 'lingotek_get_profile_options',
      ),
    ),
  );
  $actions['lingotek_entity_change_workflow'] = array(
    'group' => t('Lingotek'),
    'label' => t('Change Workflow'),
    'base' => 'lingotek_rules_entity_change_workflow',
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
      ),
      'language' => array(
        'type' => 'text',
        'label' => t('Workflow'),
        'options list' => 'lingotek_get_workflow_options',
      ),
    ),
  );
  return $actions;
}
function lingotek_rules_languages() {
  return Lingotek::getLanguages('language');
}
function lingotek_rules_entity_upload($wrapper, $settings, $state) {
  $entity_type = $wrapper
    ->type();
  $id = $wrapper
    ->getIdentifier();
  $entity = lingotek_entity_load_single($entity_type, $id);
  lingotek_entity_changed($entity_type, $entity, $id);
  lingotek_entity_upload($entity, $entity_type);
}
function lingotek_rules_entity_download($wrapper, $languages, $settings, $state) {
  $entity_type = $wrapper
    ->type();
  $id = $wrapper
    ->getIdentifier();
  $entity = $wrapper
    ->value();
  foreach ($languages as $lingotek_locale) {
    lingotek_entity_download($entity, $entity_type, $lingotek_locale);
  }
}
function lingotek_rules_entity_download_all($wrapper, $settings, $state) {
  $entity_type = $wrapper
    ->type();
  $id = $wrapper
    ->getIdentifier();
  $entity = $wrapper
    ->value();
  $source_lingotek_locale = Lingotek::convertDrupal2Lingotek($entity->language);
  $target_languages = Lingotek::getLanguagesWithoutSource($source_lingotek_locale);
  foreach ($target_languages as $lingotek_locale) {
    lingotek_entity_download($entity, $entity_type, $lingotek_locale);
  }
}
function lingotek_rules_entity_change_profile($wrapper, $profile, $settings, $state) {
  $entity_type = $wrapper
    ->type();
  $id = $wrapper
    ->getIdentifier();
  $entity = $wrapper
    ->value();
  $entity->lingotek['profile'] = $profile;
  lingotek_entity_save($entity, $entity_type);
}
function lingotek_rules_entity_change_workflow($wrapper, $workflow_id, $settings, $state) {
  $entity_type = $wrapper
    ->type();
  $entity_id = $wrapper
    ->getIdentifier();
  $ids = array();
  $ids[] = $entity_id;
  lingotek_entity_change_workflow($entity_type, $ids, $workflow_id);
}

/**
 * Implements hook_rules_condition_info().
 */
function lingotek_rules_condition_info() {
  $items = array();
  $items['lingotek_rules_entity_all_downloaded'] = array(
    'group' => t('Lingotek'),
    'module' => 'lingotek',
    'label' => t('Entity has all translations downloaded'),
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
        'desciption' => t('Specifies the entity for which the translation was downloaded.'),
      ),
    ),
  );
  $items['lingotek_rules_entity_all_ready_for_download'] = array(
    'group' => t('Lingotek'),
    'module' => 'lingotek',
    'label' => t('Entity has all translations ready for download'),
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
        'desciption' => t('Specifies the entity for which the translation is ready for download.'),
      ),
    ),
  );
  $items['lingotek_rules_entity_all_translations_of_status'] = array(
    'group' => t('Lingotek'),
    'module' => 'lingotek',
    'label' => t('Entity has all translations of status'),
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
        'desciption' => t('Specifies the entity for which the translation is ready for download.'),
      ),
      'status' => array(
        'type' => 'token',
        'label' => t('Status'),
        'description' => t('The Lingotek translation status'),
        'options list' => 'LingotekSync::getTargetStatusOptions',
        'restriction' => 'input',
      ),
    ),
  );
  $items['lingotek_rules_entity_has_profile'] = array(
    'group' => t('Lingotek'),
    'module' => 'lingotek',
    'label' => t('Entity has profile'),
    'parameter' => array(
      'entity' => array(
        'type' => 'entity',
        'label' => t('Entity'),
        'desciption' => t('Specifies the entity for which the translation was downloaded.'),
      ),
      'profile' => array(
        'type' => 'token',
        'label' => t('Profile'),
        'description' => t('The Lingotek profile assigned to this entity'),
        'options list' => 'lingotek_get_profiles_by_name',
        'restriction' => 'input',
      ),
    ),
  );
  return $items;
}
function lingotek_rules_entity_all_downloaded($wrapper) {
  return lingotek_rules_entity_all_translations_of_status($wrapper, LingotekSync::STATUS_CURRENT);
}
function lingotek_rules_entity_all_ready_for_download($wrapper) {
  return lingotek_rules_entity_all_translations_of_status($wrapper, LingotekSync::STATUS_READY);
}
function lingotek_rules_entity_all_translations_of_status($wrapper, $status) {
  $entity = $wrapper
    ->value();
  $entity_id = $wrapper
    ->getIdentifier();
  $entity_type = $wrapper
    ->type();
  $source_lingotek_locale = Lingotek::convertDrupal2Lingotek($entity->language);
  $target_languages = Lingotek::getLanguagesWithoutSource($source_lingotek_locale);
  $target_status_keys = array();
  foreach ($target_languages as $target_lingotek_locale) {
    $target_status_keys[] = 'target_sync_status_' . $target_lingotek_locale;
  }
  if (empty($target_status_keys)) {
    return FALSE;
  }
  $query = db_select('lingotek_entity_metadata', 'lem')
    ->fields('lem', array(
    'entity_id',
  ))
    ->condition('lem.entity_id', $entity_id)
    ->condition('lem.entity_type', $entity_type)
    ->condition('lem.entity_key', $target_status_keys, 'IN')
    ->condition('lem.value', $status);
  $result = $query
    ->execute();
  return $result
    ->rowCount() === count($target_languages);
}
function lingotek_rules_entity_has_profile($wrapper, $profile) {
  $entity = $wrapper
    ->value();

  // $wrapper is a DrupalEntityWrapper object
  $entity_profile_id = isset($entity->lingotek['profile']) ? $entity->lingotek['profile'] : "NONE";
  return $entity_profile_id === $profile;
}

/**
 * Implements hook_rules_event_info().
 */
function lingotek_rules_event_info() {
  $defaults = array(
    'group' => t('Lingotek'),
    'module' => 'lingotek',
  );
  return array(
    'lingotek_entity_pre_upload' => $defaults + array(
      'label' => t('Before an entity is uploaded'),
      'variables' => array(
        'entity' => array(
          'type' => 'entity',
          'label' => t('entity uploaded'),
        ),
      ),
    ),
    'lingotek_entity_post_upload' => $defaults + array(
      'label' => t('After an entity was uploaded'),
      'variables' => array(
        'entity' => array(
          'type' => 'entity',
          'label' => t('entity uploaded'),
        ),
      ),
    ),
    'lingotek_entity_translation_pre_download' => $defaults + array(
      'label' => t('Before a translation is downloaded (acting on source entity)'),
      'variables' => array(
        'entity' => array(
          'type' => 'entity',
          'label' => t('entity translation downloaded'),
        ),
      ),
    ),
    'lingotek_entity_translation_post_download' => $defaults + array(
      'label' => t('After a translation was downloaded (acting on translated entity)'),
      'variables' => array(
        'entity' => array(
          'type' => 'entity',
          'label' => t('entity translation downloaded'),
        ),
      ),
    ),
    'lingotek_entity_translation_ready' => $defaults + array(
      'label' => t('A translation is ready for download'),
      'variables' => array(
        'entity' => array(
          'type' => 'entity',
          'label' => t('entity translation ready for download'),
        ),
      ),
    ),
  );
}