-
Notifications
You must be signed in to change notification settings - Fork 0
/
tmgmt_globalsight.module
90 lines (77 loc) · 2.66 KB
/
tmgmt_globalsight.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
global $base_url;
define ( 'GLOBALSIGHT_WSDL_URL', ($base_url . '/' . drupal_get_path ( 'module', 'tmgmt_globalsight' ) . '/AmbassadorWebService.xml') );
use Drupal\tmgmt\Entity\Job;
use Drupal\tmgmt\Entity\JobItem;
use Drupal\tmgmt_globalsight\Plugin\tmgmt\Translator\TMGMTGlobalSightConnector;
function tmgmt_job_load($tjid) {
$jobs = Job::loadMultiple ( array (
$tjid
) );
return $jobs ? reset ( $jobs ) : FALSE;
}
/**
* Implements hook_cron().
*/
function tmgmt_globalsight_cron() {
$result = db_select ( 'tmgmt_globalsight', 't' )->fields ( 't' )->condition ( 'status', 0, '>' )->execute ();
// Loop through jobs and check for translations
while ( $record = $result->fetchAssoc () ) {
$job = tmgmt_job_load ( $record ['tjid'] );
if (! $job) {
continue;
}
tmgmt_globalsight_ping ( $job, $record );
}
}
/**
* Retrieves job data from GS server and, if status is "Exported" or "Localized"
* recieves translation and adds translated data.
*
* @param $job Loaded
* TMGMT Job object.
* @param $record {tmgmt_globalsight}
* record connecting TMGMT and GS jobs
*/
function tmgmt_globalsight_ping($job, $record) {
// Initialize GlobalSight
$gs = new TMGMTGlobalSightConnector ( $job->getTranslator () );
$status = $gs->getStatus ( $record ['job_name'] );
if ($status === "PERMANENT ERROR") {
// Update our little mapping table -- archive job
$record ['status'] = 0;
db_update ( 'tmgmt_globalsight' )->condition ( 'tjid', $record ['tjid'] )->fields ( array (
'status' => 0
) )->execute ();
$job->aborted ( 'Translation job was cancelled due to unrecoverable error.' );
}
// Skip execution if GlobalSight status hasn't changed
if ($status ['status'] == $gs->code2status ( $record ['status'] )) {
return;
}
// So we have translations now!
if ($status ['status'] == 'EXPORTED' || $status ['status'] == 'LOCALIZED') {
// Send API request to GS
$translation = $gs->receive ( $record ['job_name'] );
$job->submitted ( 'The translation job has been submitted.' );
$job->addTranslatedData ( \Drupal::service ( 'tmgmt.data' )->unflatten ( $translation ) );
$record ['status'] = 0;
db_update ( 'tmgmt_globalsight' )->condition ( 'tjid', $record ['tjid'] )->fields ( array (
'status' => 0
) )->execute ();
}
}
function _tmgmt_globalsight_delete_job($tjid) {
// Delete previous jobs (if any).
$num_deleted = db_delete('tmgmt_globalsight')
->condition('tjid', $tjid)
->execute();
return $num_deleted;
}
function _tmgmt_globalsight_archive_job($tjid) {
$num_updated = db_update('tmgmt_globalsight')
->fields(array('status' => 0))
->condition('tjid', $tjid)
->execute();
return $num_updated;
}