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 +4 -2
- app/code/community/Gpi/Tsc/Helper/webclient/Constants.php +2 -2
- app/code/community/Gpi/Tsc/Helper/webclient/ExportBackgroundJob.php +6 -4
- app/code/community/Gpi/Tsc/Helper/webclient/ITscClientPlugin.php +2 -2
- app/code/community/Gpi/Tsc/Helper/webclient/ImportBackgroundJob.php +1 -1
- app/code/community/Gpi/Tsc/Helper/webclient/XliffReader.php +6 -3
- app/code/community/Gpi/Tsc/Model/Cron.php +165 -18
- app/code/community/Gpi/Tsc/Model/MagentoGpiClient.php +8 -13
- app/code/community/Gpi/Tsc/Model/Utilities.php +156 -121
- package.xml +4 -4
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 |
-
|
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 |
-
|
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 =
|
5 |
-
const MAX_TRANSFER_SIZE_LIMIT =
|
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 |
-
|
|
|
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 <
|
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 +
|
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 |
-
|
17 |
* @return A collection of TreeNodes, or an empty list if the node does not has any children
|
18 |
*/
|
19 |
-
|
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::
|
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 |
-
|
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->
|
36 |
-
|
|
|
|
|
|
|
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 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
|
98 |
-
|
99 |
-
|
100 |
-
|
|
|
|
|
|
|
101 |
|
102 |
-
$
|
103 |
-
var_dump($
|
104 |
-
/*
|
105 |
-
var_dump($product->getName());
|
106 |
|
107 |
-
$
|
108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
|
110 |
-
$
|
111 |
-
|
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 =
|
133 |
if (!in_array($storeLanguage, $storeLanguages)) {
|
134 |
$storeLanguages[] = $storeLanguage;
|
135 |
$target[$storeLanguage] = $storeId;
|
136 |
}
|
137 |
}
|
138 |
|
139 |
-
$sourceStoreLanguage =
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
$pages = Mage::getModel('cms/page')
|
26 |
->getCollection()
|
27 |
-
|
28 |
-
->
|
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 |
-
->
|
|
|
51 |
|
52 |
$collection = array();
|
53 |
|
@@ -64,14 +90,14 @@ class Utilities {
|
|
64 |
return $collection;
|
65 |
}
|
66 |
|
67 |
-
public static function GetProducts () {
|
68 |
|
69 |
-
$products =
|
|
|
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 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
104 |
}
|
105 |
|
106 |
-
|
107 |
-
|
108 |
public static function ExportCMSPage ($nodeID, $context) {
|
109 |
-
|
|
|
|
|
|
|
110 |
$data = $page->getData();
|
111 |
|
112 |
$doc = array();
|
@@ -127,7 +155,10 @@ class Utilities {
|
|
127 |
}
|
128 |
|
129 |
public static function ExportCMSBlock ($nodeID, $context) {
|
130 |
-
|
|
|
|
|
|
|
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['
|
156 |
-
$doc['Title'] = $data['
|
157 |
-
$doc['DocumentType'] = MagentoGpiClient::
|
158 |
$doc['LastModified'] = date("Y-m-d\Th:i:s\.u\Z");
|
159 |
-
$doc['FileName'] = sprintf("%s.xml", $data['
|
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 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
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 |
-
|
213 |
-
|
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
|
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 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
}
|
263 |
|
264 |
-
public static function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
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-
|
14 |
-
<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="
|
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>
|