GPI_Translation_Services_Connector - Version 1.0.0.3

Version Notes

Always install the latest, stable version of the GPI Translation Services Connector for Magento.

Download this release

Release Info

Developer Kevin Blake-Thomas
Extension GPI_Translation_Services_Connector
Version 1.0.0.3
Comparing to
See all releases


Code changes from version 1.0.0.2 to 1.0.0.3

app/code/community/Gpi/Tsc/Helper/webclient/AbstractTscClientPlugin.php CHANGED
@@ -74,7 +74,7 @@ abstract class AbstractTscClientPlugin implements ITscClientPlugin {
74
  return $statuses;
75
  }
76
 
77
- public abstract function GetChildren($parentNodeID, $sourceLanguage, $paneID);
78
 
79
  public function Import($quoteID, $userName) {
80
  $arguments = new ImportArguments();
@@ -229,7 +229,7 @@ abstract class AbstractTscClientPlugin implements ITscClientPlugin {
229
  return $quote;
230
  }
231
 
232
- throw new IllegalArgumentException();
233
  }
234
 
235
  public function SendQuoteToGpms($quoteID, $userName, $quickQuote) {
@@ -254,6 +254,8 @@ abstract class AbstractTscClientPlugin implements ITscClientPlugin {
254
  $totalCount += sizeof($children);
255
  $nodes[$root->ID][] = $children;
256
  }
 
 
257
 
258
  $arguments = new ExportArguments();
259
  $arguments->Quote = $this->GetQuoteByID($quoteID);
74
  return $statuses;
75
  }
76
 
77
+ public abstract function GetChildren($parentNodeID, $sourceLanguage, $paneID);
78
 
79
  public function Import($quoteID, $userName) {
80
  $arguments = new ImportArguments();
229
  return $quote;
230
  }
231
 
232
+ return null;
233
  }
234
 
235
  public function SendQuoteToGpms($quoteID, $userName, $quickQuote) {
254
  $totalCount += sizeof($children);
255
  $nodes[$root->ID][] = $children;
256
  }
257
+
258
+ Mage::log("Nodes:'" . print_r($nodes, true) . "'");
259
 
260
  $arguments = new ExportArguments();
261
  $arguments->Quote = $this->GetQuoteByID($quoteID);
app/code/community/Gpi/Tsc/Helper/webclient/Constants.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
 
3
  class Constants {
4
- const TRANSFER_SIZE_LIMIT = 4194304;//4mb
5
- const MAX_TRANSFER_SIZE_LIMIT = 5242880;//5mb
6
  const MAX_TRANSFER_COUNT_LIMIT = 96;
7
  }
1
  <?php
2
 
3
  class Constants {
4
+ const TRANSFER_SIZE_LIMIT = 2097152;//2mb
5
+ const MAX_TRANSFER_SIZE_LIMIT = 3145728;//3mb
6
  const MAX_TRANSFER_COUNT_LIMIT = 96;
7
  }
app/code/community/Gpi/Tsc/Helper/webclient/ExportBackgroundJob.php CHANGED
@@ -49,11 +49,12 @@ class ExportBackgroundJob extends BackgroundJob {
49
 
50
  $client = $this->remoteConnection->create();
51
  try {
52
-
53
  $result = $client->AddDocuments($params);
54
  var_dump($result);
55
  }catch(Exception $ex){
56
- var_dump($ex);
 
57
  }
58
 
59
  Mage::log($client->__getLastRequest());
@@ -97,12 +98,13 @@ class ExportBackgroundJob extends BackgroundJob {
97
 
98
  $userName = $this->args->UserName;
99
  $quoteId = $this->args->Quote->ID;
 
100
 
101
  $paneIds = array_keys($this->args->Nodes);
102
  foreach($paneIds as $paneId)
103
  {
104
  $nextDocument = null;
105
- for ($i = 0, $l = count($this->args->Nodes[$paneId][0]), $last = $l-1; $i < 1; ++$i ) {
106
  $documentID = $this->args->Nodes[$paneId][0][$i];
107
  $doc;
108
  if ($nextDocument == null) {
@@ -124,7 +126,7 @@ class ExportBackgroundJob extends BackgroundJob {
124
 
125
  if ($i < $last) {//check if next document size will grown up the total size by more than a mb...
126
  $nextDocument = $this->args->Plugin->GetRemoteDocument($paneId, $this->args->Nodes[$paneId][0][$i + 1], $context);
127
- $breakNow = ($size + sizeof($nextDocument['Contents']) > Constants::MAX_TRANSFER_SIZE_LIMIT);
128
  }
129
 
130
  if (!$breakNow && $count < Constants::MAX_TRANSFER_COUNT_LIMIT && $size - Constants::MAX_TRANSFER_SIZE_LIMIT < 0) {//96 files, 4mb limit or next accumulated bigger than 5mb
49
 
50
  $client = $this->remoteConnection->create();
51
  try {
52
+ Mage::log($documents);
53
  $result = $client->AddDocuments($params);
54
  var_dump($result);
55
  }catch(Exception $ex){
56
+ echo $ex->getMessage();
57
+ Mage::logException($ex);
58
  }
59
 
60
  Mage::log($client->__getLastRequest());
98
 
99
  $userName = $this->args->UserName;
100
  $quoteId = $this->args->Quote->ID;
101
+ $quickQuote = $this->args->QuickQuote;
102
 
103
  $paneIds = array_keys($this->args->Nodes);
104
  foreach($paneIds as $paneId)
105
  {
106
  $nextDocument = null;
107
+ for ($i = 0, $l = count($this->args->Nodes[$paneId][0]), $last = $l-1; $i < $l; ++$i ) {
108
  $documentID = $this->args->Nodes[$paneId][0][$i];
109
  $doc;
110
  if ($nextDocument == null) {
126
 
127
  if ($i < $last) {//check if next document size will grown up the total size by more than a mb...
128
  $nextDocument = $this->args->Plugin->GetRemoteDocument($paneId, $this->args->Nodes[$paneId][0][$i + 1], $context);
129
+ $breakNow = ($size + strlen($nextDocument['Contents']) > Constants::MAX_TRANSFER_SIZE_LIMIT);
130
  }
131
 
132
  if (!$breakNow && $count < Constants::MAX_TRANSFER_COUNT_LIMIT && $size - Constants::MAX_TRANSFER_SIZE_LIMIT < 0) {//96 files, 4mb limit or next accumulated bigger than 5mb
app/code/community/Gpi/Tsc/Helper/webclient/ITscClientPlugin.php CHANGED
@@ -13,10 +13,10 @@ interface ITscClientPlugin {
13
  * Lists all the children nodes that have pParentNodeID as parent
14
  * @param parentNodeID The parent node ID
15
  * @param sourceLanguage Source language used to filter possible nodes
16
- * @param paneID The ID of the pane that requested the nodes
17
  * @return A collection of TreeNodes, or an empty list if the node does not has any children
18
  */
19
- public function GetChildren($parentNodeID, $sourceLanguage, $paneID);
20
 
21
  /**
22
  * Imports the translated document(s) to the specified quote.
13
  * Lists all the children nodes that have pParentNodeID as parent
14
  * @param parentNodeID The parent node ID
15
  * @param sourceLanguage Source language used to filter possible nodes
16
+ * @param paneID The ID of the pane that requested the nodes
17
  * @return A collection of TreeNodes, or an empty list if the node does not has any children
18
  */
19
+ public function GetChildren($parentNodeID, $sourceLanguage, $paneID);
20
 
21
  /**
22
  * Imports the translated document(s) to the specified quote.
app/code/community/Gpi/Tsc/Helper/webclient/ImportBackgroundJob.php CHANGED
@@ -66,7 +66,7 @@ class ImportBackgroundJob extends BackgroundJob {
66
  } catch (Exception $e) {
67
  Mage::log("ImportBackgroundJob::doWork exception");
68
  $this->args->Plugin->ImportFailed($context, $e);
69
- Mage::log($e->getMessage());
70
  }
71
 
72
  unset($context);
66
  } catch (Exception $e) {
67
  Mage::log("ImportBackgroundJob::doWork exception");
68
  $this->args->Plugin->ImportFailed($context, $e);
69
+ Mage::logException($e);
70
  }
71
 
72
  unset($context);
app/code/community/Gpi/Tsc/Helper/webclient/XliffReader.php CHANGED
@@ -21,7 +21,7 @@
21
  class XliffReader {
22
 
23
  public static function parseData($xml){
24
- $dom = new DOMDocument();
25
  $dom->loadXML($xml);
26
  $transUnits = $dom->getElementsByTagName('trans-unit');
27
 
@@ -32,8 +32,11 @@ class XliffReader {
32
  }
33
 
34
  $key = $transUnit->getAttribute('rel');
35
- $target = $transUnit->childNodes->item(1);
36
- $data[$key] = $target->nodeValue;
 
 
 
37
  }
38
 
39
  return $data;
21
  class XliffReader {
22
 
23
  public static function parseData($xml){
24
+ $dom = new DOMDocument();
25
  $dom->loadXML($xml);
26
  $transUnits = $dom->getElementsByTagName('trans-unit');
27
 
32
  }
33
 
34
  $key = $transUnit->getAttribute('rel');
35
+ $target = $transUnit->getElementsByTagName('target');
36
+ if ($target->length != 1) {
37
+ continue;
38
+ }
39
+ $data[$key] = $target->item(0)->nodeValue;
40
  }
41
 
42
  return $data;
app/code/community/Gpi/Tsc/Model/Cron.php CHANGED
@@ -35,6 +35,8 @@ include_once($webclientPath . DS . 'RemoteConnection.php');
35
  include_once($webclientPath . DS . 'XliffReader.php');
36
  include_once($webclientPath . DS . 'XliffWriter.php');
37
 
 
 
38
  /**
39
  * Tsc Cron Model
40
  *
@@ -87,33 +89,178 @@ class Gpi_Tsc_Model_Cron extends Mage_Core_Model_Abstract {
87
 
88
  Mage::log("Cron::cleanUpQuotes completed");
89
  }
90
-
91
 
92
- /**
93
- * Initiates any queued export/import operations
94
- **/
95
- public function run()
96
- {
 
 
 
 
 
 
 
 
 
97
 
98
- /*$page = Mage::getModel('cms/page')->setStoreId(2)->load('about-magento-demo-store', 'identifier');
99
- var_dump($page);
100
- */
 
 
 
101
 
102
- $product = Mage::getModel('catalog/product')->setStoreId(1)->load(905);
103
- var_dump($product);
104
- /*
105
- var_dump($product->getName());
106
 
107
- $product = Mage::getModel('catalog/product')->setStoreId(2)->load(905);
108
- var_dump($product->getName());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
- $product = Mage::getModel('catalog/product')->setStoreId(3)->load(905);
111
- var_dump($product->getName());
112
- */
 
 
113
 
 
 
 
 
 
 
 
114
  return;
 
 
 
 
 
 
 
 
 
 
 
 
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
 
 
 
117
 
118
  Mage::log("Cron::run entered");
119
  $lock = Gpi_Tsc_Model_Lock::getInstance();
35
  include_once($webclientPath . DS . 'XliffReader.php');
36
  include_once($webclientPath . DS . 'XliffWriter.php');
37
 
38
+ include_once($webclientPath . DS . 'ExportArguments.php');
39
+
40
  /**
41
  * Tsc Cron Model
42
  *
89
 
90
  Mage::log("Cron::cleanUpQuotes completed");
91
  }
 
92
 
93
+ private function testImportCmsPage($document)
94
+ {
95
+ return;
96
+ $data = XliffReader::parseData($document->Contents);
97
+ unset($data['page_id']);
98
+ unset($data['creation_time']);
99
+ unset($data['update_time']);
100
+ //var_dump($data);
101
+ echo 'importing CmsPage: id ' . $document->ID . ', lang: ' . $document->Language . ' url-key: ' . $data['identifier'] . '<br/>';
102
+
103
+
104
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
105
+ $langPage = Mage::getModel('cms/page')->setStoreId($storeId)->load($data['identifier'], 'identifier');
106
+ $langData = $langPage->getData();
107
 
108
+ // language version does not exist
109
+ if (!isset($langData['page_id'])) {
110
+ $langPage = Mage::getModel('cms/page');
111
+ $langData = array('stores' => array($storeId));
112
+ }
113
+ //var_dump($langData);
114
 
115
+ $langData = array_merge($langData, $data);
116
+ var_dump($langData);
 
 
117
 
118
+ $langPage->setData($langData)->save();
119
+ echo 'Done<br/>';
120
+ }
121
+
122
+ private function testImportCmsBlock($document)
123
+ {
124
+ return;
125
+
126
+ $data = XliffReader::parseData($document->Contents);
127
+ $blockId = $data['block_id'];
128
+ unset($data['block_id']);
129
+ unset($data['creation_time']);
130
+ unset($data['update_time']);
131
+ echo 'import-data....<br/>';
132
+ var_dump($data);
133
+ echo '-------------------<br/>';
134
+ echo 'importing CmsBlock: id ' . $document->ID . ', lang: ' . $document->Language . ' url-key: ' . $data['identifier'] . '<br/>';
135
+
136
+
137
+ echo 'original-source-block....<br/>';
138
+ $blockData = Mage::getModel('cms/block')->load($blockId)->getData();
139
+ var_dump($blockData);
140
+ echo '-------------------<br/>';
141
+
142
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
143
+ $langBlock = Mage::getModel('cms/block')->setStoreId($storeId)->load($data['identifier'], 'identifier');
144
+ $langData = $langBlock->getData();
145
+
146
+ // language version does not exist
147
+ if (!isset($langData['block_id'])) {
148
+ $langBlock = Mage::getModel('cms/block');
149
+ $langData = array('stores' => array($storeId));
150
+ }
151
+ echo 'lang-only-data....<br/>';
152
+ var_dump($langData);
153
+ echo '-------------------<br/>';
154
+
155
+ $langData = array_merge($langData, $data);
156
+ echo 'final-merged-data....<br/>';
157
+ var_dump($langData);
158
+ echo '-------------------<br/>';
159
+
160
+ $langBlock->setData($langData)->save();
161
+ echo 'Done<br/>';
162
+ }
163
+
164
+ private function testImportCategory($document)
165
+ {
166
+ $data = XliffReader::parseData($document->Contents);
167
+ unset($data['store_id']);
168
+ unset($data['creation_time']);
169
+ unset($data['update_time']);
170
+ //var_dump($data);
171
+ echo 'importing Category: id ' . $document->ID . ', lang: ' . $document->Language . ' entity_id: ' . $data['entity_id'] . '<br/>';
172
+
173
 
174
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
175
+ $langCategory = Mage::getModel('catalog/category')->setStoreId($storeId)->load($data['entity_id']);
176
+ $langData = $langCategory->getData();
177
+ $langData = array_merge($langData, $data);
178
+ var_dump($langData);
179
 
180
+ $langCategory->setData($langData)->save();
181
+ echo 'Done<br/>';
182
+
183
+ }
184
+
185
+ private function testImportProduct($document)
186
+ {
187
  return;
188
+ $data = XliffReader::parseData($document->Contents);
189
+ unset($data['creation_time']);
190
+ unset($data['update_time']);
191
+ //var_dump($data);
192
+ echo 'importing Product: id ' . $document->ID . ', lang: ' . $document->Language . ' entity_id: ' . $data['entity_id'] . '<br/>';
193
+
194
+
195
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
196
+ $langProduct = Mage::getModel('catalog/product')->setStoreId($storeId)->load($data['entity_id']);
197
+ $langData = $langProduct->getData();
198
+ $langData = array_merge($langData, $data);
199
+ var_dump($langData);
200
 
201
+ $langProduct->setData($langData)->save();
202
+ echo 'Done<br/>';
203
+ }
204
+
205
+ private function testImport()
206
+ {
207
+ $quoteId = 249184;
208
+ $requestId = com_create_guid();
209
+
210
+ $params = array(
211
+ "pQueryIdentifier" => $requestId,
212
+ "quoteId" => $quoteId,
213
+ "userName" => 'admin'
214
+ );
215
+
216
+ $clientConfigurationService = new ClientConfigurationServiceImpl();
217
+ $remoteConnection = new RemoteConnection($clientConfigurationService);
218
+
219
+ echo 'initiating request for document batch...<br/>';
220
+ while(true) {
221
+
222
+ $response = $remoteConnection
223
+ ->create()
224
+ ->GetDocuments($params)
225
+ ->GetDocumentsResult;
226
+
227
+ $documents = $response->Documents->RemoteDocument;
228
+ foreach ($documents as $document) {
229
+ switch ($document->DocumentType) {
230
+ case MagentoGpiClient::CONTENT_TYPE_CMS_PAGES:
231
+ $this->testImportCmsPage($document);
232
+ break;
233
+ case MagentoGpiClient::CONTENT_TYPE_CMS_BLOCKS:
234
+ $this->testImportCmsBlock($document);
235
+ break;
236
+ case MagentoGpiClient::CONTENT_TYPE_CATEGORIES:
237
+ $this->testImportCategory($document);
238
+ break;
239
+ case MagentoGpiClient::CONTENT_TYPE_PRODUCTS:
240
+ $this->testImportProduct($document);
241
+ break;
242
+ }
243
+ }
244
+
245
+ if ($response->LastBatch)
246
+ break;
247
+ }
248
+ }
249
+
250
+
251
+ /**
252
+ * Initiates any queued export/import operations
253
+ **/
254
+ public function run()
255
+ {
256
+ /*$storeId = 3;
257
+ $langPage = Mage::getModel('cms/page')->setStoreId($storeId)->load('no-route', 'identifier');
258
+ $langData = $langPage->getData();
259
+ var_dump($langData);
260
+ return;
261
 
262
+ $this->testImport();
263
+ return;*/
264
 
265
  Mage::log("Cron::run entered");
266
  $lock = Gpi_Tsc_Model_Lock::getInstance();
app/code/community/Gpi/Tsc/Model/MagentoGpiClient.php CHANGED
@@ -44,19 +44,20 @@ class MagentoGpiClient extends AbstractTscClientPlugin {
44
  public function GetChildren($parentNodeID, $sourceLanguage, $paneID) {
45
 
46
  $children = array();
47
-
 
48
  switch ($paneID) {
49
  case self::CONTENT_TYPE_CMS_PAGES:
50
- $children = Utilities::GetCMSPages();
51
  break;
52
  case self::CONTENT_TYPE_CMS_BLOCKS:
53
- $children = Utilities::GetCMSBlocks();
54
  break;
55
  case self::CONTENT_TYPE_CATEGORIES:
56
- $children = Utilities::GetCategories();
57
  break;
58
  case self::CONTENT_TYPE_PRODUCTS:
59
- $children = Utilities::GetProducts();
60
  break;
61
  }
62
 
@@ -118,25 +119,19 @@ class MagentoGpiClient extends AbstractTscClientPlugin {
118
  return $ids;
119
  }
120
 
121
- private function getStoreLanguage($storeId) {
122
- $storeLanguage = Mage::getStoreConfig('general/locale/code', $storeId);
123
- $storeLanguage = str_replace("_", "-", $storeLanguage);
124
- return $storeLanguage;
125
- }
126
-
127
  public function CreateQuote($quoteName, $quoteComments, $sourceStoreId, array $storeIds, $userName) {
128
 
129
  $storeLanguages = array();
130
  $target = array();
131
  foreach ($storeIds as $storeId) {
132
- $storeLanguage = $this->getStoreLanguage($storeId);
133
  if (!in_array($storeLanguage, $storeLanguages)) {
134
  $storeLanguages[] = $storeLanguage;
135
  $target[$storeLanguage] = $storeId;
136
  }
137
  }
138
 
139
- $sourceStoreLanguage = $this->getStoreLanguage($sourceStoreId);
140
  $remoteQuote = parent::CreateQuote($quoteName, $quoteComments, $sourceStoreLanguage, $storeLanguages, $userName);
141
 
142
  $source = array();
44
  public function GetChildren($parentNodeID, $sourceLanguage, $paneID) {
45
 
46
  $children = array();
47
+ $storeId = Utilities::getStoreIdByLanguageCode($sourceLanguage);
48
+
49
  switch ($paneID) {
50
  case self::CONTENT_TYPE_CMS_PAGES:
51
+ $children = Utilities::GetCMSPages($storeId);
52
  break;
53
  case self::CONTENT_TYPE_CMS_BLOCKS:
54
+ $children = Utilities::GetCMSBlocks($storeId);
55
  break;
56
  case self::CONTENT_TYPE_CATEGORIES:
57
+ $children = Utilities::GetCategories($storeId);
58
  break;
59
  case self::CONTENT_TYPE_PRODUCTS:
60
+ $children = Utilities::GetProducts($storeId);
61
  break;
62
  }
63
 
119
  return $ids;
120
  }
121
 
 
 
 
 
 
 
122
  public function CreateQuote($quoteName, $quoteComments, $sourceStoreId, array $storeIds, $userName) {
123
 
124
  $storeLanguages = array();
125
  $target = array();
126
  foreach ($storeIds as $storeId) {
127
+ $storeLanguage = Utilities::getStoreLanguage($storeId);
128
  if (!in_array($storeLanguage, $storeLanguages)) {
129
  $storeLanguages[] = $storeLanguage;
130
  $target[$storeLanguage] = $storeId;
131
  }
132
  }
133
 
134
+ $sourceStoreLanguage = Utilities::getStoreLanguage($sourceStoreId);
135
  $remoteQuote = parent::CreateQuote($quoteName, $quoteComments, $sourceStoreLanguage, $storeLanguages, $userName);
136
 
137
  $source = array();
app/code/community/Gpi/Tsc/Model/Utilities.php CHANGED
@@ -20,12 +20,37 @@
20
 
21
  class Utilities {
22
 
23
- public static function GetCMSPages () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
 
 
 
 
 
 
 
 
 
25
  $pages = Mage::getModel('cms/page')
26
  ->getCollection()
27
- //->addFieldToFilter('is_active',1)
28
- ->load();
29
 
30
  $collection = array();
31
 
@@ -43,11 +68,12 @@ class Utilities {
43
  return $collection;
44
  }
45
 
46
- public static function GetCMSBlocks () {
47
 
48
  $blocks = Mage::getModel('cms/block')
49
  ->getCollection()
50
- ->load();
 
51
 
52
  $collection = array();
53
 
@@ -64,14 +90,14 @@ class Utilities {
64
  return $collection;
65
  }
66
 
67
- public static function GetProducts () {
68
 
69
- $products = Mage::getModel('catalog/product')
 
70
  ->getCollection()
71
  ->addAttributeToSelect('*');
72
 
73
- $collection = array();
74
-
75
  foreach ($products as $product)
76
  {
77
  $node = new TreeNode();
@@ -83,30 +109,32 @@ class Utilities {
83
  return $collection;
84
  }
85
 
86
- public static function GetCategories () {
87
-
88
- $model = Mage::getModel('catalog/category');
89
- $tree = $model->getTreeModel();
90
- $tree->load();
91
-
92
- $categories = $tree->getCollection()->getAllIds();
93
-
94
- $collection = array();
95
-
96
- foreach ($categories as $id ) {
97
- $categ = new TreeNode();
98
- $categ->ID = $id;
99
- $categ->Name = $model->load($id)->getName();
100
- $collection[] = $categ;
101
- }
102
-
103
- return $collection;
 
104
  }
105
 
106
-
107
-
108
  public static function ExportCMSPage ($nodeID, $context) {
109
- $page = Mage::getModel('cms/page')->load($nodeID);
 
 
 
110
  $data = $page->getData();
111
 
112
  $doc = array();
@@ -127,7 +155,10 @@ class Utilities {
127
  }
128
 
129
  public static function ExportCMSBlock ($nodeID, $context) {
130
- $block = Mage::getModel('cms/block')->load($nodeID);
 
 
 
131
  $data = $block->getData();
132
 
133
  $doc = array();
@@ -148,15 +179,18 @@ class Utilities {
148
  }
149
 
150
  public static function ExportProduct ($nodeID, $context) {
151
- $product = Mage::getModel('catalog/product')->load($nodeID);
152
- $data = $product->getData();
153
 
 
 
 
 
 
154
  $doc = array();
155
- $doc['ID'] = $data['product_id'];
156
- $doc['Title'] = $data['title'];
157
- $doc['DocumentType'] = MagentoGpiClient::CONTENT_TYPE_CMS_PAGES;
158
  $doc['LastModified'] = date("Y-m-d\Th:i:s\.u\Z");
159
- $doc['FileName'] = sprintf("%s.xml", $data['page_id']);
160
 
161
  $xliff = new XliffWriter();
162
  foreach ($data as $key => $value) {
@@ -168,99 +202,100 @@ class Utilities {
168
  return $doc;
169
  }
170
 
171
- public static function ExportCategory () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  }
173
 
174
  public static function ImportCMSPage ($document, $context) {
175
 
176
- //$data = XliffReader::parseData($document->Contents);
177
- //var_dump($data);
178
-
179
- /*
180
- /* CMS Pages
181
- /*
182
- $pages = Mage::getModel('cms/page')->getCollection();
183
- $page = Mage::getModel('cms/page')->load('home','identifier');
184
- $title = $page->getTitle();
185
- $content = $page->getContent();
186
- $keywords = $page->getMetaKeywords();
187
- $descriptions = $page->getMetaDescription();
188
- /*
189
- /* Create new CMS Page
190
- $cmsPage = array(
191
- 'title' => 'Test Page',
192
- 'identifier' => 'test-page',
193
- 'content' => 'Sample Test Page',
194
- 'is_active' => 1,
195
- 'sort_order' => 0,
196
- 'stores' => array(0),
197
- 'root_template' => 'three_columns'
198
- );
199
- Mage::getModel('cms/page')->setData($cmsPage)->save();
200
- */
201
- }
202
-
203
- public static function ImportCMSBlock () {
204
- /*
205
- /* CMS Blocks
206
- /*
207
- $blocks = Mage::getModel('cms/block')->getCollection();
208
- $page = Mage::getModel('cms/block')->load('footer_links','identifier');
209
- $title = $page->getTitle();
210
- $content = $page->getContent();
211
 
212
- /* Save New Block
213
- $staticBlock = array(
214
- 'title' => 'Test Block',
215
- 'identifier' => 'test-block',
216
- 'content' => 'Sample Test Block',
217
- 'is_active' => 1,
218
- 'stores' => array(o)
219
- );
220
-
221
- Mage::getModel('cms/block')->setData($staticBlock)->save();
222
- */
223
  }
224
 
225
- public static function ImportProduct () {
226
- /*
227
- /* Products */
228
- /* http://gauss-development.com/blog/e-commerce-blog/magento-mass-export-xml-format/
229
- /*
230
- /* $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*');
231
- // select all attributes
232
-
233
- foreach($collection as $product){
234
- $i++;
235
- // something
236
- }
237
- */
238
-
239
- /*
240
- /* Products */
241
- /* http://gauss-development.com/blog/e-commerce-blog/magento-mass-export-xml-format/
242
- /*
243
- $category = Mage::getModel ( 'catalog/category' );
244
- $tree = $category->getTreeModel ();
245
- $tree->load ();
246
-
247
- $ids = $tree->getCollection ()->getAllIds ();
248
-
249
- if ($ids) {
250
- foreach ( $ids as $id ) {
251
- $string = $id . ', ' .$category->load($id)->getName() . "\n";
252
- Mage::log(print_r($string,true));
253
- }
254
- }
255
- */
256
 
257
- /*
258
- /* https://github.com/bippo/magento-bulk
259
- /*
260
- Mage::log(print_r(Mage::getModel('eav/entity_attribute')->getCollection(),true));
261
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
  }
263
 
264
- public static function ImportCategory () {
 
 
 
 
 
 
 
 
 
 
 
265
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
266
  }
20
 
21
  class Utilities {
22
 
23
+ public static function getStoreLanguage($storeId) {
24
+ $storeLanguage = Mage::getStoreConfig('general/locale/code', $storeId);
25
+ $storeLanguage = str_replace("_", "-", $storeLanguage);
26
+ return $storeLanguage;
27
+ }
28
+
29
+ public static function getStoreIdByLanguageCode($languageCode) {
30
+ $stores = Mage::app()->getStores();
31
+ foreach ($stores as $key => $val) {
32
+ $storeId = Mage::app()->getStore($key)->getId();
33
+ $storeLanguage = Utilities::getStoreLanguage($storeId);
34
+ if ($storeLanguage == $languageCode) {
35
+ return $storeId;
36
+ }
37
+ }
38
+ return 0;
39
+ }
40
 
41
+ public static function getSourceLanguageStoreIdFromQuote($quoteId) {
42
+ $quoteModel = Mage::getModel('gpi_tsc/quotes')->load($quoteId);
43
+ $quoteMeta = unserialize($quoteModel->QuoteMeta);
44
+ $storeId = reset($quoteMeta['source']);
45
+ return $storeId;
46
+ }
47
+
48
+ public static function GetCMSPages ($storeId) {
49
+
50
  $pages = Mage::getModel('cms/page')
51
  ->getCollection()
52
+ ->addStoreFilter($storeId)
53
+ ->addFieldToFilter('is_active', 1);
54
 
55
  $collection = array();
56
 
68
  return $collection;
69
  }
70
 
71
+ public static function GetCMSBlocks ($storeId) {
72
 
73
  $blocks = Mage::getModel('cms/block')
74
  ->getCollection()
75
+ ->addStoreFilter($storeId)
76
+ ->addFieldToFilter('is_active', 1);
77
 
78
  $collection = array();
79
 
90
  return $collection;
91
  }
92
 
93
+ public static function GetProducts ($storeId) {
94
 
95
+ $products = Mage::getModel('catalog/product')
96
+ ->setStoreId($storeId)
97
  ->getCollection()
98
  ->addAttributeToSelect('*');
99
 
100
+ $collection = array();
 
101
  foreach ($products as $product)
102
  {
103
  $node = new TreeNode();
109
  return $collection;
110
  }
111
 
112
+ public static function GetCategories ($storeId) {
113
+
114
+ $rootCategoryId = Mage::app()->getStore($storeId)->getRootCategoryId();
115
+ $categories = Mage::getModel('catalog/category')
116
+ ->getCollection()
117
+ ->setStoreId($storeId)
118
+ ->addFieldToFilter('is_active', 1)
119
+ ->addAttributeToFilter('path', array('like' => "1/{$rootCategoryId}/%"))
120
+ ->addAttributeToSelect('*');
121
+
122
+ $collection = array();
123
+ foreach ($categories as $category) {
124
+ $categ = new TreeNode();
125
+ $categ->ID = $category->getId();
126
+ $categ->Name = $category->getName();
127
+ $collection[] = $categ;
128
+ }
129
+
130
+ return $collection;
131
  }
132
 
 
 
133
  public static function ExportCMSPage ($nodeID, $context) {
134
+
135
+ $quote = $context['quote'];
136
+ $storeId = Utilities::getSourceLanguageStoreIdFromQuote($quote->ID);
137
+ $page = Mage::getModel('cms/page')->setStoreId($storeId)->load($nodeID);
138
  $data = $page->getData();
139
 
140
  $doc = array();
155
  }
156
 
157
  public static function ExportCMSBlock ($nodeID, $context) {
158
+
159
+ $quote = $context['quote'];
160
+ $storeId = Utilities::getSourceLanguageStoreIdFromQuote($quote->ID);
161
+ $block = Mage::getModel('cms/block')->setStoreId($storeId)->load($nodeID);
162
  $data = $block->getData();
163
 
164
  $doc = array();
179
  }
180
 
181
  public static function ExportProduct ($nodeID, $context) {
 
 
182
 
183
+ $quote = $context['quote'];
184
+ $storeId = Utilities::getSourceLanguageStoreIdFromQuote($quote->ID);
185
+ $product = Mage::getModel('catalog/product')->setStoreId($storeId)->load($nodeID);
186
+ $data = $product->getData();
187
+
188
  $doc = array();
189
+ $doc['ID'] = $data['entity_id'];
190
+ $doc['Title'] = $data['name'];
191
+ $doc['DocumentType'] = MagentoGpiClient::CONTENT_TYPE_PRODUCTS;
192
  $doc['LastModified'] = date("Y-m-d\Th:i:s\.u\Z");
193
+ $doc['FileName'] = sprintf("%s.xml", $data['entity_id']);
194
 
195
  $xliff = new XliffWriter();
196
  foreach ($data as $key => $value) {
202
  return $doc;
203
  }
204
 
205
+ public static function ExportCategory ($nodeID, $context) {
206
+ $quote = $context['quote'];
207
+ $storeId = Utilities::getSourceLanguageStoreIdFromQuote($quote->ID);
208
+ $category = Mage::getModel('catalog/category')->setStoreId($storeId)->load($nodeID);
209
+ $data = $category->getData();
210
+
211
+ $doc = array();
212
+ $doc['ID'] = $data['entity_id'];
213
+ $doc['Title'] = $data['name'];
214
+ $doc['DocumentType'] = MagentoGpiClient::CONTENT_TYPE_CATEGORIES;
215
+ $doc['LastModified'] = date("Y-m-d\Th:i:s\.u\Z");
216
+ $doc['FileName'] = sprintf("%s.xml", $data['entity_id']);
217
+
218
+ $xliff = new XliffWriter();
219
+ foreach ($data as $key => $value) {
220
+ if (!is_array($value) && !is_null($value)) {
221
+ $xliff->addTransUnit($key, $value);
222
+ }
223
+ }
224
+ $doc['Contents'] = $xliff->getDocument();
225
+ return $doc;
226
  }
227
 
228
  public static function ImportCMSPage ($document, $context) {
229
 
230
+ $data = XliffReader::parseData($document->Contents);
231
+ unset($data['page_id']);
232
+ unset($data['creation_time']);
233
+ unset($data['update_time']);
234
+
235
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
236
+ $langPage = Mage::getModel('cms/page')
237
+ ->setStoreId($storeId)
238
+ ->load($data['identifier'], 'identifier');
239
+ $langData = $langPage->getData();
240
+
241
+ // language version does not exist
242
+ if (!isset($langData['page_id'])) {
243
+ $langPage = Mage::getModel('cms/page');
244
+ $langData = array('stores' => array($storeId));
245
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
 
247
+ $langData = array_merge($langData, $data);
248
+ $langPage->setData($langData)->save();
 
 
 
 
 
 
 
 
 
249
  }
250
 
251
+ public static function ImportCMSBlock ($document, $context) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
 
253
+ $data = XliffReader::parseData($document->Contents);
254
+ unset($data['block_id']);
255
+ unset($data['creation_time']);
256
+ unset($data['update_time']);
257
+
258
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
259
+ $langBlock = Mage::getModel('cms/block')
260
+ ->setStoreId($storeId)
261
+ ->load($data['identifier'], 'identifier');
262
+ $langData = $langBlock->getData();
263
+
264
+ // language version does not exist
265
+ if (!isset($langData['block_id'])) {
266
+ $langBlock = Mage::getModel('cms/block');
267
+ $langData = array('stores' => array($storeId));
268
+ }
269
+
270
+ $langData = array_merge($langData, $data);
271
+ $langBlock->setData($langData)->save();
272
  }
273
 
274
+ public static function ImportProduct ($document, $context) {
275
+
276
+ $data = XliffReader::parseData($document->Contents);
277
+ unset($data['creation_time']);
278
+ unset($data['update_time']);
279
+
280
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
281
+ $langProduct = Mage::getModel('catalog/product')->setStoreId($storeId)->load($data['entity_id']);
282
+ $langData = $langProduct->getData();
283
+ $langData = array_merge($langData, $data);
284
+
285
+ $langProduct->setData($langData)->save();
286
  }
287
+
288
+ public static function ImportCategory ($document, $context) {
289
+ $data = XliffReader::parseData($document->Contents);
290
+ unset($data['store_id']);
291
+ unset($data['creation_time']);
292
+ unset($data['update_time']);
293
+
294
+ $storeId = Utilities::getStoreIdByLanguageCode($document->Language);
295
+ $langCategory = Mage::getModel('catalog/category')->setStoreId($storeId)->load($data['entity_id']);
296
+ $langData = $langCategory->getData();
297
+ $langData = array_merge($langData, $data);
298
+
299
+ $langCategory->setData($langData)->save();
300
+ }
301
  }
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>GPI_Translation_Services_Connector</name>
4
- <version>1.0.0.2</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
  <channel>community</channel>
@@ -10,9 +10,9 @@
10
  <description>GPI's Translation Services Connector for Magento enables users of Magento-based websites to launch and manage multi-language websites. The Translation Services Connector streamlines content exports and reimports allowing for the initiation of web content translation workflows with a single click. User will gain access to an array of reports to track and manage global translation web projects through GPI's Translation Portal</description>
11
  <notes>Always install the latest, stable version of the GPI Translation Services Connector for Magento.</notes>
12
  <authors><author><name>Kevin Blake-Thomas</name><user>kBlakeThomas</user><email>kBlakeThomas@globalizationpartners.com</email></author><author><name>Globalization Partners International</name><user>gpiconnector</user><email>magento@globalizationpartners.com</email></author></authors>
13
- <date>2015-03-28</date>
14
- <time>15:42:09</time>
15
- <contents><target name="magecommunity"><dir name="Gpi"><dir name="Tsc"><dir name="Block"><dir name="Adminhtml"><file name="ITscClientPlugin.php" hash="1a20dff985c97bd42647efb3e51557ab"/><dir name="Tsc"><file name="Grid.php" hash="56d842ea3dd2b34d13d6cab01f66cfc7"/></dir><file name="Tsc.php" hash="908839a3705e0802e3548937f5c6c5c2"/></dir></dir><dir name="Helper"><file name="Admin.php" hash="7160b2693a723d2369546cd08a5d829a"/><file name="Data.php" hash="2caf2ff9913bdc98455dcaa49ca9c598"/><dir name="shareddata"><dir name="popo"><file name="PojoFactory.php" hash="65e93b316e599234ef06fc33afabea8c"/><file name="RemoteConfig.php" hash="9c4f2bfcb24225b7561540da0fcc082f"/><file name="RemoteQuote.php" hash="f518c1f94fb5bc6911c039a83f6b38f9"/><file name="TreeNode.php" hash="ce51cce40023022784cb4d77b85099ca"/><file name="WorkStatus.php" hash="b72313bb1e4a3736d7854d2f8368b9c0"/></dir></dir><dir name="webclient"><file name="AbstractTscClientPlugin.php" hash="b609a1e983376d5cae6fba92f21845a4"/><file name="BackgroundJob.php" hash="d04fffcef07c617d6fb9a37f475c250c"/><file name="ClientConfigurationService.php" hash="53c932080d9d42f90466ba1959d16619"/><file name="ClientConfigurationServiceImpl.php" hash="a1b9cd2aa95dde0fe8830fd30b52c8ea"/><file name="ConnectorConfiguration.php" hash="bbbd1199c88f9052476ed82edd321bdf"/><file name="Constants.php" hash="d0ace62dc3b91a4c3da4ef51c9183a34"/><file name="ExportArguments.php" hash="3f9d45c57de969af36d66fff5cb402e9"/><file name="ExportBackgroundJob.php" hash="a9e90c38e611048401ee78636b0eae4e"/><file name="ITscClientPlugin.php" hash="e6895dc6cb63ad8055d7c737208eb9e6"/><file name="ImportArguments.php" hash="abd5920a2990b1d859c80b9f9f114003"/><file name="ImportBackgroundJob.php" hash="2e5addf70cbe8dec9eda8bcdf0f8bd17"/><file name="NameIDPair.php" hash="71b814fc256468d172896787079998f8"/><file name="RemoteConnection.php" hash="0433b648f79be34bd43e406be15a80c2"/><file name="Utils.php" hash="7e1497cacdb1360641d7c8805d52e343"/><file name="WorkerList.php" hash="a3eba6f5d525bc51bb74581f2e316c7e"/><file name="XLIFFConstruct.php" hash="4fa1cdcadf86b4614750c14dc5101ab3"/><file name="XliffReader.php" hash="80ce1a2352ddf405ef7ac2f15611016c"/><file name="XliffWriter.php" hash="fa7e162891db14419f02ac7eaab70ccb"/><file name="Xxtea.php" hash="db82c46cd2ed92658789c5597f224282"/></dir></dir><dir name="Model"><file name="Backgroundjobs.php" hash="94a35eb899f2c0026d2bf4ea31ae65f1"/><file name="Configurations.php" hash="c412c0d0c1a3d7d70b942376411b20f5"/><file name="Cron.php" hash="596c21dc3b9693263d75f465315061fb"/><file name="Lock.php" hash="5cc6b56c4c92d06da55bf56aa9959029"/><file name="MagentoGpiClient.php" hash="94b35e23ff9da0e6740493ccf4a0fc6a"/><file name="Quotes.php" hash="90abba913984ba0a142f6ab3eb0e2d64"/><dir name="Resource"><dir name="Backgroundjobs"><file name="Collection.php" hash="9f26ec484e0380d10f0264a02ac6caac"/></dir><file name="Backgroundjobs.php" hash="eb4f828adb7ae0bc7f90634dbed71519"/><dir name="Configurations"><file name="Collection.php" hash="7309514526bd3712f199822fef838a95"/></dir><file name="Configurations.php" hash="ea118f6ee2a1c660a969129abfd34370"/><dir name="Quotes"><file name="Collection.php" hash="fbd8bda82e1aba4b8fac3036e094831c"/></dir><file name="Quotes.php" hash="03544a96450579ae443276ce05fa1499"/></dir><file name="Tsc.php" hash="d8f24ea8886f84ef1ee0db906c597c7a"/><file name="Utilities.php" hash="f369cb7e74238b53560f8311f2c3084d"/></dir><dir name="controllers"><file name="IndexController.php" hash="c1a118eaefc965b8521021247327aca3"/><dir name="adminhtml"><file name="TscController.php" hash="5a72a45625224f45e490cdf8b4bbf311"/></dir></dir><dir name="data"><dir name="gpi_tsc_setup"><file name="data-install-1.0.0.1.php" hash="130d4463721de0d5aab9215a05325a72"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="dcf5d7880d722babb0f2b7eb3376e5af"/><file name="config.xml" hash="6009b616e21f3a183e27a04b919c4dc5"/></dir><dir name="sql"><dir name="gpi_tsc_setup"><file name="install-1.0.0.1.php" hash="d77568e6ad8da7337ab1cf3e1be7c778"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="gpi_tsc.xml" hash="9e48b81a5d22698a163f365881035ff1"/></dir><dir name="template"><dir name="gpi"><file name="tsc.phtml" hash="b0b4f11929d18606733ff09f6f5d8601"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gpi_Tsc.xml" hash="f26ab12182688362116ebc3c70e9b79f"/></dir></target><target name="magelocale"><dir name="de_DE"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="en_US"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="es_ES"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="fr_FR"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="nl_NL"><file name="Gpi_Tsc.csv" hash="8ab5f4b16532bd62334742526c4af9f1"/></dir><dir name="pt_BR"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="zh_CN"><file name="Gpi_Tsc.csv" hash="8ab5f4b16532bd62334742526c4af9f1"/></dir></target><target name="mageweb"><dir name="js"><dir name="gpi_tsc"><file name="Crypto.js" hash="3861701ea9d2f881d80bb3707a930611"/><file name="Crypto.min.js" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="EcmaScript5.js" hash="61a75a6ea2475bb12d69b7d1f49648dc"/><file name="EcmaScript5.min.js" hash="507aa9c06a0d7e4a8b86954260b89fcf"/><file name="JSON.js" hash="626ef1f5cc397ec996c9008437379bb2"/><file name="JSON.min.js" hash="f9a4a32a6aaf1bede55c14fd9a72f211"/><file name="JSON.min.js.mine" hash="f9a4a32a6aaf1bede55c14fd9a72f211"/><file name="JSON.min.js.r118" hash="fd59f781fae50afcfc8f88e14d098259"/><file name="JSON.min.js.r175" hash="30e7aa2d1d98809514369109f9f08179"/><dir name="langs"><file name="en.js" hash="cf72c74c85ba30da0c14c171b4737677"/><file name="en.min.js" hash="9c3176f90a4f9348efd2b0d9ed249c04"/></dir><file name="tsc.js" hash="070bc8771a4dfdff8483b3190e85f18d"/><file name="tsc.min.js" hash="971d6c939b08da26a483e49d05338e2a"/><file name="tsc.min.js.mine" hash="fc53c843aa24dafd91a71c104e614f88"/><file name="tsc.min.js.r118" hash="e133e0c8aa7208ab1c43ddf29d0527e5"/><file name="tsc.min.js.r175" hash="9fed06c449dd0064d36b0da736c47e1a"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="css"><file name="gpiconnector_tsc.css" hash="e796cc8653c86210f428137533faa30b"/></dir><dir name="images"><dir name="gpi_tsc"><file name="YesNo.png" hash="6025ac2d2c98339e0f569ad9d749ab4c"/><file name="accept.png" hash="b5a898b96d3d6159097194867a4cfee0"/><file name="back.png" hash="c224e24db0e1a027fc755e07e4676d83"/><file name="box__arrow.png" hash="fbd869339052f79cfae46e1f7d3cd48e"/><file name="document__pencil.png" hash="8cb3d67573814b446c5025b19ff401c3"/><file name="envelope_arrow.png" hash="f982568ed75a4ae8af5dcffa7af5db31"/><file name="error.png" hash="3a9064713f2d4fa72b57c8085cdf5234"/><file name="expand__tree.png" hash="43ae5dd7266c772cd48fdc593b7292df"/><file name="icon_plus.png" hash="403929bd8fc029a8d8e168e3452e8104"/><file name="info.png" hash="5c7fe97d78e6e27ddfa6ba116fae2baf"/><file name="input-focus.png" hash="d20285eeef57c6746f0a5fb51c05f5ba"/><file name="input-normal.png" hash="a324de13591fcd42f5e0407900caf424"/><file name="loading.gif" hash="332841820de58396c9632e359731fef0"/><file name="lock.png" hash="1ec90e836676a761a93f9a8b573f567f"/><file name="logo.png" hash="9524b9a0cf195df1e6e6fbeeb7b05a0e"/><file name="magnifier__arrow.png" hash="6e5b5887bd35ab4cb0890b3b0a059f34"/><file name="minus_circle.png" hash="54975349ccea6124c4e7880b5ca84729"/><file name="progressBar.png" hash="75988d35574d74325ec869e35f5ee0d8"/><file name="required.png" hash="e1904cb7e749547bd5a48504ac253f3f"/><file name="settings.png" hash="7ec53f029df8c2cca7c9cf7951f7acb9"/><file name="success.png" hash="169c64bf6086a79d1344f7fa88c7da09"/><file name="transparency.png" hash="125cb55ab7051f989937f48a67d1e45d"/><dir name="tree"><file name="checkboxes.png" hash="299ad74f9ada13c59af63714806cfb24"/><file name="folderClosed.png" hash="c1832e87bd7309f538ff978be9baaba2"/><file name="folderOpen.png" hash="40d66d2f6e6dbacce6aa74a1bca830d5"/><file name="iconText.png" hash="ffd15319ef6a458160ed30faf78e693f"/><file name="iconTexts.png" hash="116533258d950954c990fbe83bdb28df"/><file name="leaf.png" hash="7bdc23897c9dae10ef126cf1940c48f1"/><file name="lines.png" hash="c8d18f5213baf1171430c68f7f132f1e"/><file name="minus.png" hash="62f0fb56f759699e7b2ba514a03257cc"/><file name="plus.png" hash="d5dc9ef7735dac152239b738bfd9ede0"/></dir><file name="tsc_styles.css" hash="aeae9ff88ff6caa9f132ecfd0efd135f"/><file name="tsc_styles.min.css" hash="af24b63370bb4c7b6e18e7c591641a61"/><file name="validation.png" hash="7c1a391c73d4559bae640e25992194ba"/><file name="warning.png" hash="32ff0ead65d861223a5198eca240ffed"/></dir></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.5.0.1</min><max>1.9</max></package></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>GPI_Translation_Services_Connector</name>
4
+ <version>1.0.0.3</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
  <channel>community</channel>
10
  <description>GPI's Translation Services Connector for Magento enables users of Magento-based websites to launch and manage multi-language websites. The Translation Services Connector streamlines content exports and reimports allowing for the initiation of web content translation workflows with a single click. User will gain access to an array of reports to track and manage global translation web projects through GPI's Translation Portal</description>
11
  <notes>Always install the latest, stable version of the GPI Translation Services Connector for Magento.</notes>
12
  <authors><author><name>Kevin Blake-Thomas</name><user>kBlakeThomas</user><email>kBlakeThomas@globalizationpartners.com</email></author><author><name>Globalization Partners International</name><user>gpiconnector</user><email>magento@globalizationpartners.com</email></author></authors>
13
+ <date>2015-04-29</date>
14
+ <time>02:29:26</time>
15
+ <contents><target name="magecommunity"><dir name="Gpi"><dir name="Tsc"><dir name="Block"><dir name="Adminhtml"><file name="ITscClientPlugin.php" hash="1a20dff985c97bd42647efb3e51557ab"/><dir name="Tsc"><file name="Grid.php" hash="56d842ea3dd2b34d13d6cab01f66cfc7"/></dir><file name="Tsc.php" hash="908839a3705e0802e3548937f5c6c5c2"/></dir></dir><dir name="Helper"><file name="Admin.php" hash="7160b2693a723d2369546cd08a5d829a"/><file name="Data.php" hash="2caf2ff9913bdc98455dcaa49ca9c598"/><dir name="shareddata"><dir name="popo"><file name="PojoFactory.php" hash="65e93b316e599234ef06fc33afabea8c"/><file name="RemoteConfig.php" hash="9c4f2bfcb24225b7561540da0fcc082f"/><file name="RemoteQuote.php" hash="f518c1f94fb5bc6911c039a83f6b38f9"/><file name="TreeNode.php" hash="ce51cce40023022784cb4d77b85099ca"/><file name="WorkStatus.php" hash="b72313bb1e4a3736d7854d2f8368b9c0"/></dir></dir><dir name="webclient"><file name="AbstractTscClientPlugin.php" hash="9ef5b11677a8eaf5d4c15a299ce555e4"/><file name="BackgroundJob.php" hash="d04fffcef07c617d6fb9a37f475c250c"/><file name="ClientConfigurationService.php" hash="53c932080d9d42f90466ba1959d16619"/><file name="ClientConfigurationServiceImpl.php" hash="a1b9cd2aa95dde0fe8830fd30b52c8ea"/><file name="ConnectorConfiguration.php" hash="bbbd1199c88f9052476ed82edd321bdf"/><file name="Constants.php" hash="35afbc21a00683ca18277d062b6ddd7a"/><file name="ExportArguments.php" hash="3f9d45c57de969af36d66fff5cb402e9"/><file name="ExportBackgroundJob.php" hash="66eb457fbb165d78857199a8cdb7583b"/><file name="ITscClientPlugin.php" hash="f3aa09b98d50070963b440c374bc6f43"/><file name="ImportArguments.php" hash="abd5920a2990b1d859c80b9f9f114003"/><file name="ImportBackgroundJob.php" hash="3abb34da6c76bcd3bc59178bd0a9ef03"/><file name="NameIDPair.php" hash="71b814fc256468d172896787079998f8"/><file name="RemoteConnection.php" hash="0433b648f79be34bd43e406be15a80c2"/><file name="Utils.php" hash="7e1497cacdb1360641d7c8805d52e343"/><file name="WorkerList.php" hash="a3eba6f5d525bc51bb74581f2e316c7e"/><file name="XLIFFConstruct.php" hash="4fa1cdcadf86b4614750c14dc5101ab3"/><file name="XliffReader.php" hash="b7805019606b538e2223c6c74f151246"/><file name="XliffWriter.php" hash="fa7e162891db14419f02ac7eaab70ccb"/><file name="Xxtea.php" hash="db82c46cd2ed92658789c5597f224282"/></dir></dir><dir name="Model"><file name="Backgroundjobs.php" hash="94a35eb899f2c0026d2bf4ea31ae65f1"/><file name="Configurations.php" hash="c412c0d0c1a3d7d70b942376411b20f5"/><file name="Cron.php" hash="7215c069dc62163d481deaa12d36e26e"/><file name="Lock.php" hash="5cc6b56c4c92d06da55bf56aa9959029"/><file name="MagentoGpiClient.php" hash="a6c5d21dcaab2cce4c2eda1ee5972384"/><file name="Quotes.php" hash="90abba913984ba0a142f6ab3eb0e2d64"/><dir name="Resource"><dir name="Backgroundjobs"><file name="Collection.php" hash="9f26ec484e0380d10f0264a02ac6caac"/></dir><file name="Backgroundjobs.php" hash="eb4f828adb7ae0bc7f90634dbed71519"/><dir name="Configurations"><file name="Collection.php" hash="7309514526bd3712f199822fef838a95"/></dir><file name="Configurations.php" hash="ea118f6ee2a1c660a969129abfd34370"/><dir name="Quotes"><file name="Collection.php" hash="fbd8bda82e1aba4b8fac3036e094831c"/></dir><file name="Quotes.php" hash="03544a96450579ae443276ce05fa1499"/></dir><file name="Tsc.php" hash="d8f24ea8886f84ef1ee0db906c597c7a"/><file name="Utilities.php" hash="3a7a34b7a033fc7a9269cf5876be2696"/></dir><dir name="controllers"><file name="IndexController.php" hash="c1a118eaefc965b8521021247327aca3"/><dir name="adminhtml"><file name="TscController.php" hash="5a72a45625224f45e490cdf8b4bbf311"/></dir></dir><dir name="data"><dir name="gpi_tsc_setup"><file name="data-install-1.0.0.1.php" hash="130d4463721de0d5aab9215a05325a72"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="dcf5d7880d722babb0f2b7eb3376e5af"/><file name="config.xml" hash="6009b616e21f3a183e27a04b919c4dc5"/></dir><dir name="sql"><dir name="gpi_tsc_setup"><file name="install-1.0.0.1.php" hash="d77568e6ad8da7337ab1cf3e1be7c778"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="gpi_tsc.xml" hash="9e48b81a5d22698a163f365881035ff1"/></dir><dir name="template"><dir name="gpi"><file name="tsc.phtml" hash="b0b4f11929d18606733ff09f6f5d8601"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gpi_Tsc.xml" hash="f26ab12182688362116ebc3c70e9b79f"/></dir></target><target name="magelocale"><dir name="de_DE"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="en_US"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="es_ES"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="fr_FR"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="nl_NL"><file name="Gpi_Tsc.csv" hash="8ab5f4b16532bd62334742526c4af9f1"/></dir><dir name="pt_BR"><file name="Gpi_Tsc.csv" hash="095cdabff2891e4e419ee372006307c4"/></dir><dir name="zh_CN"><file name="Gpi_Tsc.csv" hash="8ab5f4b16532bd62334742526c4af9f1"/></dir></target><target name="mageweb"><dir name="js"><dir name="gpi_tsc"><file name="Crypto.js" hash="3861701ea9d2f881d80bb3707a930611"/><file name="Crypto.min.js" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="EcmaScript5.js" hash="61a75a6ea2475bb12d69b7d1f49648dc"/><file name="EcmaScript5.min.js" hash="507aa9c06a0d7e4a8b86954260b89fcf"/><file name="JSON.js" hash="626ef1f5cc397ec996c9008437379bb2"/><file name="JSON.min.js" hash="f9a4a32a6aaf1bede55c14fd9a72f211"/><file name="JSON.min.js.mine" hash="f9a4a32a6aaf1bede55c14fd9a72f211"/><file name="JSON.min.js.r118" hash="fd59f781fae50afcfc8f88e14d098259"/><file name="JSON.min.js.r175" hash="30e7aa2d1d98809514369109f9f08179"/><dir name="langs"><file name="en.js" hash="cf72c74c85ba30da0c14c171b4737677"/><file name="en.min.js" hash="9c3176f90a4f9348efd2b0d9ed249c04"/></dir><file name="tsc.js" hash="070bc8771a4dfdff8483b3190e85f18d"/><file name="tsc.min.js" hash="971d6c939b08da26a483e49d05338e2a"/><file name="tsc.min.js.mine" hash="fc53c843aa24dafd91a71c104e614f88"/><file name="tsc.min.js.r118" hash="e133e0c8aa7208ab1c43ddf29d0527e5"/><file name="tsc.min.js.r175" hash="9fed06c449dd0064d36b0da736c47e1a"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="css"><file name="gpiconnector_tsc.css" hash="e796cc8653c86210f428137533faa30b"/></dir><dir name="images"><dir name="gpi_tsc"><file name="YesNo.png" hash="6025ac2d2c98339e0f569ad9d749ab4c"/><file name="accept.png" hash="b5a898b96d3d6159097194867a4cfee0"/><file name="back.png" hash="c224e24db0e1a027fc755e07e4676d83"/><file name="box__arrow.png" hash="fbd869339052f79cfae46e1f7d3cd48e"/><file name="document__pencil.png" hash="8cb3d67573814b446c5025b19ff401c3"/><file name="envelope_arrow.png" hash="f982568ed75a4ae8af5dcffa7af5db31"/><file name="error.png" hash="3a9064713f2d4fa72b57c8085cdf5234"/><file name="expand__tree.png" hash="43ae5dd7266c772cd48fdc593b7292df"/><file name="icon_plus.png" hash="403929bd8fc029a8d8e168e3452e8104"/><file name="info.png" hash="5c7fe97d78e6e27ddfa6ba116fae2baf"/><file name="input-focus.png" hash="d20285eeef57c6746f0a5fb51c05f5ba"/><file name="input-normal.png" hash="a324de13591fcd42f5e0407900caf424"/><file name="loading.gif" hash="332841820de58396c9632e359731fef0"/><file name="lock.png" hash="1ec90e836676a761a93f9a8b573f567f"/><file name="logo.png" hash="9524b9a0cf195df1e6e6fbeeb7b05a0e"/><file name="magnifier__arrow.png" hash="6e5b5887bd35ab4cb0890b3b0a059f34"/><file name="minus_circle.png" hash="54975349ccea6124c4e7880b5ca84729"/><file name="progressBar.png" hash="75988d35574d74325ec869e35f5ee0d8"/><file name="required.png" hash="e1904cb7e749547bd5a48504ac253f3f"/><file name="settings.png" hash="7ec53f029df8c2cca7c9cf7951f7acb9"/><file name="success.png" hash="169c64bf6086a79d1344f7fa88c7da09"/><file name="transparency.png" hash="125cb55ab7051f989937f48a67d1e45d"/><dir name="tree"><file name="checkboxes.png" hash="299ad74f9ada13c59af63714806cfb24"/><file name="folderClosed.png" hash="c1832e87bd7309f538ff978be9baaba2"/><file name="folderOpen.png" hash="40d66d2f6e6dbacce6aa74a1bca830d5"/><file name="iconText.png" hash="ffd15319ef6a458160ed30faf78e693f"/><file name="iconTexts.png" hash="116533258d950954c990fbe83bdb28df"/><file name="leaf.png" hash="7bdc23897c9dae10ef126cf1940c48f1"/><file name="lines.png" hash="c8d18f5213baf1171430c68f7f132f1e"/><file name="minus.png" hash="62f0fb56f759699e7b2ba514a03257cc"/><file name="plus.png" hash="d5dc9ef7735dac152239b738bfd9ede0"/></dir><file name="tsc_styles.css" hash="aeae9ff88ff6caa9f132ecfd0efd135f"/><file name="tsc_styles.min.css" hash="af24b63370bb4c7b6e18e7c591641a61"/><file name="validation.png" hash="7c1a391c73d4559bae640e25992194ba"/><file name="warning.png" hash="32ff0ead65d861223a5198eca240ffed"/></dir></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.5.0.1</min><max>1.9</max></package></required></dependencies>
18
  </package>