248 lines
6.9 KiB
PHP
248 lines
6.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Rules integration.
|
|
*/
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
function tmgmt_rules_action_info() {
|
|
$info['tmgmt_rules_job_request_translation'] = array(
|
|
'label' => t('Request Job translation'),
|
|
'group' => t('Translation Management'),
|
|
'parameter' => array(
|
|
'job' => array(
|
|
'type' => 'tmgmt_job',
|
|
'label' => t('Translation Job'),
|
|
'description' => t('The translation job for which translations should be requested.'),
|
|
),
|
|
),
|
|
'access callback' => 'tmgmt_rules_job_submit_access',
|
|
);
|
|
$info['tmgmt_rules_job_accept_translation'] = array(
|
|
'label' => t('Accept Job translation'),
|
|
'group' => t('Translation Management'),
|
|
'parameter' => array(
|
|
'job' => array(
|
|
'type' => 'tmgmt_job',
|
|
'label' => t('Translation Job'),
|
|
'description' => t('The translation job for which translations should be accepted.'),
|
|
),
|
|
'message' => array(
|
|
'type' => 'text',
|
|
'label' => t('An optional message'),
|
|
'description' => t('Will be stored in the job message and displayed to the user.'),
|
|
'optional' => TRUE,
|
|
),
|
|
),
|
|
'access callback' => 'tmgmt_rules_job_accept_translation_access',
|
|
);
|
|
$info['tmgmt_rules_job_abort_translation'] = array(
|
|
'label' => t('Abort translation job'),
|
|
'group' => t('Translation Management'),
|
|
'parameter' => array(
|
|
'job' => array(
|
|
'type' => 'tmgmt_job',
|
|
'label' => t('Translation Job'),
|
|
'description' => t('The translation job that should be aborted.'),
|
|
),
|
|
),
|
|
'access callback' => 'tmgmt_rules_job_submit_access',
|
|
);
|
|
$info['tmgmt_rules_job_delete'] = array(
|
|
'label' => t('Delete Job'),
|
|
'group' => t('Translation Management'),
|
|
'parameter' => array(
|
|
'job' => array(
|
|
'type' => 'tmgmt_job',
|
|
'label' => t('Translation Job'),
|
|
'description' => t('The translation job that should be deleted.'),
|
|
),
|
|
),
|
|
'access callback' => 'tmgmt_rules_job_delete_access',
|
|
);
|
|
$info['tmgmt_rules_job_checkout'] = array(
|
|
'label' => t('Checkout a job'),
|
|
'group' => t('Translation Management'),
|
|
'parameter' => array(
|
|
'job' => array(
|
|
'type' => 'tmgmt_job',
|
|
'label' => t('Translation Job'),
|
|
'description' => t('The translation job that should be checked out.'),
|
|
),
|
|
),
|
|
'access callback' => 'tmgmt_rules_job_submit_access',
|
|
);
|
|
$info['tmgmt_get_first_from_node_list'] = array(
|
|
'label' => t('Get first item from a list of nodes'),
|
|
'group' => t('Data'),
|
|
'parameter' => array(
|
|
'list' => array(
|
|
'type' => 'list<node>',
|
|
'label' => t('List'),
|
|
'restriction' => 'selector',
|
|
),
|
|
),
|
|
'provides' => array(
|
|
'first_node' => array(
|
|
'type' => 'node',
|
|
'label' => t('Node'),
|
|
),
|
|
),
|
|
);
|
|
$info['tmgmt_rules_create_job'] = array(
|
|
'label' => t('Create a job for a given source language'),
|
|
'group' => t('Translation Management'),
|
|
'parameter' => array(
|
|
'source_language' => array(
|
|
'type' => 'text',
|
|
'label' => t('Source Language'),
|
|
'description' => t('The language from which should be translated'),
|
|
'options list' => 'entity_metadata_language_list',
|
|
),
|
|
),
|
|
'provides' => array(
|
|
'job' => array(
|
|
'label' => t('Job'),
|
|
'type' => 'tmgmt_job',
|
|
),
|
|
),
|
|
);
|
|
$info['tmgmt_rules_job_add_item'] = array(
|
|
'label' => t('Add an item to a job'),
|
|
'group' => t('Translation Management'),
|
|
'parameter' => array(
|
|
'job' => array(
|
|
'type' => 'tmgmt_job',
|
|
'label' => t('Translation Job'),
|
|
'description' => t('The translation job that should be canceled.'),
|
|
),
|
|
'plugin' => array(
|
|
'type' => 'token',
|
|
'label' => t('Source plugin'),
|
|
'description' => t('The source plugin of this item'),
|
|
//'options list' => 'entity_metadata_language_list',
|
|
),
|
|
'item_type' => array(
|
|
'type' => 'token',
|
|
'label' => t('Item type'),
|
|
'description' => t('The item type'),
|
|
//'options list' => 'entity_metadata_language_list',
|
|
),
|
|
'item_id' => array(
|
|
'type' => 'text',
|
|
'label' => t('Item ID'),
|
|
'description' => t('ID of the referenced item'),
|
|
),
|
|
),
|
|
);
|
|
return $info;
|
|
}
|
|
|
|
/**
|
|
* Rules callback to request a translation of a job.
|
|
*/
|
|
function tmgmt_rules_job_request_translation(TMGMTJob $job) {
|
|
if ($job->isTranslatable()) {
|
|
$job->requestTranslation();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rules callback to accept a translation of a job.
|
|
*/
|
|
function tmgmt_rules_job_accept_translation(TMGMTJob $job, $message) {
|
|
foreach ($job->getItems() as $item) {
|
|
if ($item->isNeedsReview()) {
|
|
$item->acceptTranslation();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rules callback to cancel a translation job.
|
|
*/
|
|
function tmgmt_rules_job_abort_translation(TMGMTJob $job) {
|
|
$job->abortTranslation();
|
|
}
|
|
|
|
/**
|
|
* Rules callback to redirect to a translation job.
|
|
*/
|
|
function tmgmt_rules_job_checkout(TMGMTJob $job) {
|
|
$redirects = tmgmt_ui_job_checkout_multiple(array($job));
|
|
// If necessary, do a redirect.
|
|
if ($redirects) {
|
|
tmgmt_ui_redirect_queue_set($redirects, current_path());
|
|
drupal_goto(tmgmt_ui_redirect_queue_dequeue());
|
|
|
|
// Count of the job messages is one less due to the final redirect.
|
|
drupal_set_message(format_plural(count($redirects), t('One job needs to be checked out.'), t('@count jobs need to be checked out.')));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rules callback to get the job for a specific language combination.
|
|
*/
|
|
function tmgmt_rules_create_job($source_language) {
|
|
return array(
|
|
'job' => tmgmt_job_create($source_language, ''),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Rules callback to add an item to a job.
|
|
*/
|
|
function tmgmt_rules_job_add_item(TMGMTJob $job, $plugin, $item_type, $item_id) {
|
|
try {
|
|
$job->addItem($plugin, $item_type, $item_id);
|
|
}
|
|
catch (TMGMTException $e) {
|
|
watchdog_exception('tmgmt', $e);
|
|
drupal_set_message(t('Unable to add job item of type %type with id %id. Make sure the source content is not empty.',
|
|
array('%type' => $item_type, '%id' => $item_id)), 'error');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rules action to extract the first node from a node list.
|
|
*/
|
|
function tmgmt_get_first_from_node_list($list) {
|
|
return array(
|
|
'first_node' => reset($list),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Rules action to delete a translation job.
|
|
*/
|
|
function tmgmt_rules_job_delete(TMGMTJob $job) {
|
|
// Prevent users without job delete permission to be able to delete jobs.
|
|
if (tmgmt_job_access('delete')) {
|
|
$job->delete();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks access to rules job delete action.
|
|
*/
|
|
function tmgmt_rules_job_delete_access() {
|
|
return tmgmt_job_access('delete');
|
|
}
|
|
|
|
/**
|
|
* Checks access to rules job submit like actions.
|
|
*/
|
|
function tmgmt_rules_job_submit_access() {
|
|
return tmgmt_job_access('submit');
|
|
}
|
|
|
|
/**
|
|
* Checks access to rules accept translation action.
|
|
*/
|
|
function tmgmt_rules_job_accept_translation_access() {
|
|
return tmgmt_job_access('accept');
|
|
}
|