Twenga_Solutions_for_Google_Shopping - Version 1.0.0

Version Notes

Extension for Magento 1.5.X and later.

Download this release

Release Info

Developer Benjamin GOSSELET
Extension Twenga_Solutions_for_Google_Shopping
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

app/code/community/Twenga/Smartfeed/Block/Adminhtml/System/Config/Account.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Twenga_Smartfeed_Block_Adminhtml_System_Config_Account extends Mage_Adminhtml_Block_System_Config_Form_Field
4
+ {
5
+
6
+ protected function _prepareLayout()
7
+ {
8
+ parent::_prepareLayout();
9
+ $this->setTemplate('twenga_smartfeed/account.phtml');
10
+ return $this;
11
+ }
12
+
13
+ /**
14
+ * Get the button and scripts contents
15
+ *
16
+ * @param Varien_Data_Form_Element_Abstract $element
17
+ * @return string
18
+ */
19
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
20
+ {
21
+ return $this->_toHtml();
22
+ }
23
+
24
+ }
app/code/community/Twenga/Smartfeed/Block/Tag.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Twenga_Smartfeed_Block_Tag extends Mage_Core_Block_Text {
4
+
5
+ protected function _toHtml() {
6
+ $html = '';
7
+
8
+ if(Mage::getStoreConfig('smartfeed/options/active') == 1) {
9
+ // Get tracking code from config
10
+ if (Mage::getStoreConfig('smartfeed/options/tracking_html')) {
11
+ $html = Mage::getStoreConfig('smartfeed/options/tracking_html');
12
+ } elseif (Mage::getStoreConfig('smartfeed/options/tracking_url')) {
13
+ $html = '<script type="text/javascript" src="' . Mage::getStoreConfig('smartfeed/options/tracking_url') . '"></script>';
14
+ }
15
+ }
16
+
17
+ $this->addText($html);
18
+ return parent::_toHtml();
19
+ }
20
+
21
+ }
app/code/community/Twenga/Smartfeed/Helper/Data.php ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Twenga_Smartfeed_Helper_Data extends Mage_Core_Helper_Abstract
4
+ {
5
+
6
+ /**
7
+ * Twenga-Solutions product id
8
+ * @var int
9
+ */
10
+ public $productId = 7;
11
+
12
+ /**
13
+ * curl headers
14
+ * @var array
15
+ */
16
+ public $headers = array(
17
+ 'Accept' => 'application/json'
18
+ );
19
+
20
+ /**
21
+ * Default options used for the curl requests
22
+ * @var array
23
+ */
24
+ public $curlOptions = array(
25
+ CURLOPT_ENCODING => 'gzip',
26
+ CURLOPT_BINARYTRANSFER => true,
27
+ CURLOPT_FOLLOWLOCATION => true,
28
+ CURLOPT_FRESH_CONNECT => true,
29
+ CURLOPT_SSL_VERIFYHOST => false,
30
+ CURLOPT_SSL_VERIFYPEER => false,
31
+ CURLOPT_RETURNTRANSFER => true,
32
+ CURLOPT_USERAGENT => 'magento',
33
+ CURLOPT_REFERER => '',
34
+ CURLOPT_CONNECTTIMEOUT => 1,
35
+ CURLOPT_TIMEOUT => 3,
36
+ CURLOPT_HEADER => true
37
+ );
38
+
39
+ /**
40
+ * Twenga Geozone id
41
+ * @var int
42
+ */
43
+ public function geoZoneId() {
44
+ $locale = Mage::app()->getLocale()->getLocaleCode();
45
+ $geoZoneId = explode('_', $locale);
46
+ if(isset($geoZoneId[1])) {
47
+ return $geoZoneId[1];
48
+ } else {
49
+ return 'UK'; // default
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Build url using path and parameters
55
+ * @param string $path
56
+ * @param array $parameters
57
+ * @return string
58
+ */
59
+ public function buildUrl($path, array $parameters = array())
60
+ {
61
+ $url = 'https://api.twenga-solutions.com' . $path;
62
+ if (!empty($parameters)) {
63
+ $url .= '?' . http_build_query($parameters);
64
+ }
65
+
66
+ return $url;
67
+ }
68
+
69
+ /**
70
+ * Get curl resource
71
+ * @param string $url
72
+ * @return resource
73
+ */
74
+ public function getCurlResource($url)
75
+ {
76
+ $curlResource = curl_init($url);
77
+ curl_setopt_array($curlResource, $this->curlOptions);
78
+
79
+ return $curlResource;
80
+ }
81
+
82
+ /**
83
+ * Execute curl call using GET
84
+ * @param $url
85
+ * @return mixed
86
+ * @throws Exception
87
+ */
88
+ public function callGET($url)
89
+ {
90
+ $resource = $this->getCurlResource($url);
91
+
92
+ return $this->curlCall($resource);
93
+ }
94
+
95
+ /**
96
+ * Execute curl call using POST with given data
97
+ * @param string $url
98
+ * @param array $data
99
+ * @return array
100
+ * @throws Exception
101
+ */
102
+ public function callPOST($url, array $data)
103
+ {
104
+ $resource = $this->getCurlResource($url);
105
+ curl_setopt_array(
106
+ $resource,
107
+ array(
108
+ CURLOPT_POST => 1,
109
+ CURLOPT_POSTFIELDS => $data
110
+ )
111
+ );
112
+
113
+ return $this->curlCall($resource);
114
+ }
115
+
116
+ /**
117
+ * Call webservice GET /module/signup
118
+ * @return mixed
119
+ */
120
+ public function getFormSignUp()
121
+ {
122
+ $url = $this->buildUrl(
123
+ '/module/signup',
124
+ array(
125
+ 'PRODUCT_ID' => $this->productId,
126
+ 'GEOZONE_CODE' => $this->geoZoneId(),
127
+ )
128
+ );
129
+
130
+ return $this->callGET($url);
131
+ }
132
+
133
+ /**
134
+ * Call webservice GET /module/login
135
+ * @return mixed
136
+ */
137
+ public function getFormLogin()
138
+ {
139
+ $url = $this->buildUrl(
140
+ '/module/login',
141
+ array(
142
+ 'PRODUCT_ID' => $this->productId,
143
+ 'GEOZONE_CODE' => $this->geoZoneId(),
144
+ )
145
+ );
146
+
147
+ return $this->callGET($url);
148
+ }
149
+
150
+ /**
151
+ * Get tracking script
152
+ * @return mixed
153
+ */
154
+ public function getTrackingScript($token)
155
+ {
156
+ $url = $this->buildUrl('/tracker', array('token' => $token));
157
+ $response = $this->callGET($url);
158
+
159
+ return $response;
160
+ }
161
+
162
+ /**
163
+ * Get current account information
164
+ * @return mixed
165
+ */
166
+ public function getAccountInfo()
167
+ {
168
+ $url = $this->buildUrl('/account', array('token' => Mage::getStoreConfig('smartfeed/options/token')));
169
+ $response = $this->callGET($url);
170
+
171
+ return $response;
172
+ }
173
+
174
+ /**
175
+ * Get current account information
176
+ * @return array
177
+ */
178
+ public function getProduct()
179
+ {
180
+ $url = $this->buildUrl(
181
+ '/product',
182
+ array(
183
+ 'token' => Mage::getStoreConfig('smartfeed/options/token'),
184
+ 'PRODUCT_ID' => $this->productId
185
+ )
186
+ );
187
+ $response = $this->callGET($url);
188
+
189
+ if (isset($response['products'])) {
190
+ foreach ($response['products'] as $product) {
191
+ if ($product['PRODUCT_ID'] == $this->productId) {
192
+ return $product;
193
+ }
194
+ }
195
+ }
196
+
197
+ return array();
198
+ }
199
+
200
+ /**
201
+ * Execute curl call
202
+ * @param $resource
203
+ * @return array
204
+ */
205
+ public function curlCall($resource)
206
+ {
207
+ curl_setopt($resource, CURLOPT_HTTPHEADER, $this->getFormattedHeaders());
208
+ $response = curl_exec($resource);
209
+ $curlInfo = curl_getinfo($resource);
210
+ if (false === $response) {
211
+ Mage::getSingleton('adminhtml/session')->addError($this->__('Bad curl response: '.$curlInfo['http_code']));
212
+ return false;
213
+ }
214
+
215
+ $headers = substr($response, 0, $curlInfo['header_size']);
216
+ $response = trim(substr($response, $curlInfo['header_size'] - 1));
217
+
218
+ $this->parseHeader($headers);
219
+ $this->lastHttpCode = $curlInfo['http_code'];
220
+
221
+ $json = json_decode($response, true);
222
+ if (false === $json || !is_array($json)) {
223
+ Mage::getSingleton('adminhtml/session')->addError($this->__('Can\'t decode json. An error may occurred with http code ' . $curlInfo['http_code']));
224
+ return false;
225
+ }
226
+
227
+ return $json;
228
+ }
229
+
230
+ /**
231
+ * Parse header string
232
+ * @param string $header
233
+ * @return $this
234
+ */
235
+ protected function parseHeader($header)
236
+ {
237
+ $this->lastHeaders = array();
238
+ $headerLines = explode("\n", $header);
239
+ foreach ($headerLines as $line) {
240
+ $headerParts = explode(':', $line, 2);
241
+ if (!isset($headerParts[1])) {
242
+ continue;
243
+ }
244
+
245
+ $value = trim($headerParts[1]);
246
+ $key = $headerParts[0];
247
+
248
+ if (isset($this->lastHeaders[$key])) {
249
+ if (!is_array($this->lastHeaders[$key])) {
250
+ $this->lastHeaders[$key] = array($this->lastHeaders[$key]);
251
+ }
252
+ $this->lastHeaders[$key][] = $value;
253
+ } else {
254
+ $this->lastHeaders[$key] = $value;
255
+ }
256
+ }
257
+
258
+ return $this;
259
+ }
260
+
261
+ /**
262
+ * Get formatted headers for curl
263
+ * @return array
264
+ */
265
+ public function getFormattedHeaders()
266
+ {
267
+ $output = array();
268
+ foreach ($this->headers as $key => $value) {
269
+ $output[] = $key . ': ' . $value;
270
+ }
271
+
272
+ return $output;
273
+ }
274
+
275
+ /**
276
+ * Add analytics parameters
277
+ * @param array $params
278
+ * @param string $content
279
+ * @return string
280
+ */
281
+ public function addUtm($params, $content)
282
+ {
283
+ if ($content) {
284
+ $trackingParameters = array(
285
+ 'utm_source' => 'magento',
286
+ 'utm_medium' => 'partner',
287
+ 'utm_campaign' => 'module_magento_smartfeed',
288
+ 'utm_content' => 'bo'
289
+ );
290
+
291
+ $parsedUrl = \parse_url($content);
292
+ if (!isset($parsedUrl['query']) || empty($parsedUrl['query'])) {
293
+ $parsedUrl['query'] = \http_build_query($trackingParameters);
294
+ } else {
295
+ $parsedUrl['query'] .= '&' . \http_build_query($trackingParameters);
296
+ }
297
+
298
+ return $parsedUrl['scheme'].'://'.$parsedUrl['host'].$parsedUrl['path'].'?'.$parsedUrl['query'];
299
+ }
300
+
301
+ return $content;
302
+ }
303
+
304
+ }
app/code/community/Twenga/Smartfeed/Model/Observer.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Twenga_Smartfeed_Model_Observer
4
+ {
5
+ /**
6
+ * @param Varien_Event_Observer $observer
7
+ */
8
+ public function deleteData(Varien_Event_Observer $observer)
9
+ {
10
+ if (Mage::getStoreConfig('smartfeed/options/token')) {
11
+ // Delete current information at login (except tracking code)
12
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/site_id', '');
13
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/api_key', '');
14
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/autolog_url', '');
15
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/token', '');
16
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/pass', '');
17
+
18
+ // Refresh magento configuration cache
19
+ Mage::app()->getCacheInstance()->cleanType('config');
20
+ }
21
+ }
22
+ }
app/code/community/Twenga/Smartfeed/controllers/Adminhtml/Smartfeed/IndexController.php ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Twenga_Smartfeed_Adminhtml_Smartfeed_IndexController extends Mage_Adminhtml_Controller_Action
4
+ {
5
+ /**
6
+ * Twenga-Solutions product id
7
+ *
8
+ * @var int
9
+ */
10
+ public $productId = 7;
11
+
12
+ /**
13
+ * Permissions
14
+ * @param
15
+ * @return
16
+ */
17
+ protected function _isAllowed() {
18
+ return Mage::getSingleton('admin/session')->isAllowed('sales/smartfeed');
19
+ }
20
+
21
+ /**
22
+ * Initialize
23
+ * @param
24
+ * @return
25
+ */
26
+ protected function _initAction() {
27
+ $this->loadLayout()->_setActiveMenu('sales/items');
28
+ return $this;
29
+ }
30
+
31
+ /**
32
+ * Display template
33
+ * @param
34
+ * @return
35
+ */
36
+ public function indexAction() {
37
+ $this->_initAction();
38
+ $this->renderLayout();
39
+ }
40
+
41
+ /**
42
+ * Call webservice POST signup
43
+ * @param array $data
44
+ * @return mixed
45
+ */
46
+ public function postSignupAction()
47
+ {
48
+ $url = Mage::helper('smartfeed/data')->buildUrl(
49
+ '/module/signup',
50
+ array(
51
+ 'PRODUCT_ID' => $this->productId,
52
+ 'GEOZONE_CODE' => Mage::helper('smartfeed/data')->geoZoneId()
53
+ )
54
+ );
55
+
56
+ $data = $this->getRequest()->getPost();
57
+ $response = Mage::helper('smartfeed/data')->callPOST($url, $data);
58
+ if($response['errors']) {
59
+ $errorText = '';
60
+ $countErrors = count($response['errors']);
61
+ foreach($response['errors'] as $error) {
62
+ if($countErrors > 1) {
63
+ $errorText .= $error.'<br/>';
64
+ } else {
65
+ $errorText .= $error;
66
+ }
67
+ }
68
+
69
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('smartfeed/data')->__($errorText));
70
+ if($response['errors']['EMAIL']) {
71
+ $param['email_exists'] = '1';
72
+ $this->_redirect('*/*/', $param);
73
+ return;
74
+ } else {
75
+ $this->_redirect('*/*/');
76
+ return;
77
+ }
78
+ } else {
79
+ //Mage::getSingleton('adminhtml/session')->addNotice($this->__('Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.'));
80
+
81
+ // Refresh magento configuration cache
82
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/register_autolog_url', urldecode($response['user']['AUTO_LOG_URL']));
83
+ Mage::app()->getCacheInstance()->cleanType('config');
84
+
85
+ $param['signup_success'] = '1';
86
+ $this->_redirect('*/*/', $param);
87
+ return;
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Call webservice POST /authenticate/email
93
+ *
94
+ * @param array $data
95
+ *
96
+ * @return array
97
+ */
98
+ public function authenticateEmailAction(array $data)
99
+ {
100
+ $data = $this->getRequest()->getPost();
101
+ $url = Mage::helper('smartfeed/data')->buildUrl('/authenticate/email');
102
+ $response = Mage::helper('smartfeed/data')->callPOST($url, $data);
103
+
104
+ if($response['errors']) {
105
+ $errorText = '';
106
+ $countErrors = count($response['errors']);
107
+ foreach($response['errors'] as $error) {
108
+ if($countErrors > 1) {
109
+ $errorText .= $error.'<br/>';
110
+ } else {
111
+ $errorText .= $error;
112
+ }
113
+ }
114
+
115
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('smartfeed/data')->__($errorText));
116
+ $param['authentication_failed'] = '1';
117
+ $this->_redirect('*/*/', $param);
118
+ return;
119
+ } elseif(isset($response['auth']) && isset($response['auth']['token'])) {
120
+ // Save information
121
+ $siteId = $response['merchant']['EXTRANET_SITE_ID'];
122
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/site_id', $siteId);
123
+ $apiKey = $response['merchant']['API_KEY'];
124
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/api_key', $apiKey);
125
+ $autoLogUrl = $response['user']['AUTO_LOG_URL'];
126
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/autolog_url', urldecode($autoLogUrl));
127
+ $token = $response['auth']['token'];
128
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/token', $token);
129
+ $pass = md5($data['PASS']);
130
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/pass', $pass);
131
+
132
+ // Get tracking code and save in config
133
+ $tracking = Mage::helper('smartfeed/data')->getTrackingScript($token);
134
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/tracking_html', $tracking['tracker_script']['html']);
135
+ Mage::getModel('core/config')->saveConfig('smartfeed/options/tracking_url', $tracking['tracker_script']['url']);
136
+
137
+ // Refresh magento configuration cache
138
+ Mage::app()->getCacheInstance()->cleanType('config');
139
+
140
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('smartfeed/data')->__('Connect with success'));
141
+ $param['install_success'] = '1';
142
+ $this->_redirect('*/*/', $param);
143
+ return;
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Authenticate
149
+ *
150
+ * @param string $extranetSiteId
151
+ * @param string $apiKey
152
+ * @return mixed
153
+ */
154
+ public function authenticateAction($extranetSiteId, $apiKey)
155
+ {
156
+ $url = Mage::helper('smartfeed/data')->buildUrl('/authenticate');
157
+ Mage::helper('smartfeed/data')->curlOptions[CURLOPT_USERPWD] = $extranetSiteId . ':' . $apiKey;
158
+ $response = Mage::helper('smartfeed/data')->callGET($url);
159
+ if (isset($response['auth']) && isset($response['auth']['token'])) {
160
+ $this->token = $response['auth']['token'];
161
+ }
162
+
163
+ return $response;
164
+ }
165
+
166
+ /**
167
+ * Send form lostpassword
168
+ * @return html
169
+ */
170
+ public function lostPasswordAction()
171
+ {
172
+ $this->_initAction();
173
+ $this->renderLayout();
174
+ }
175
+
176
+ /**
177
+ * Call webservice POST lostpassword
178
+ * @param string $email
179
+ * @return array
180
+ */
181
+ public function postLostPasswordAction()
182
+ {
183
+ $data = $this->getRequest()->getPost();
184
+ $url = Mage::helper('smartfeed/data')->buildUrl(
185
+ '/module/lostpassword',
186
+ array(
187
+ 'PRODUCT_ID' => $this->productId,
188
+ 'GEOZONE_CODE' => Mage::helper('smartfeed/data')->geoZoneId()
189
+ )
190
+ );
191
+
192
+ $response = Mage::helper('smartfeed/data')->callPOST(
193
+ $url,
194
+ array(
195
+ 'EMAIL' => $data['email']
196
+ )
197
+ );
198
+
199
+ if($response['errors']) {
200
+ $errorText = '';
201
+ foreach($response['errors'] as $error) {
202
+ $errorText .= $error.'<br/>';
203
+ }
204
+
205
+ $result['success'] = false;
206
+ $result['error'] = true;
207
+ $result['error_message'] = Mage::helper('smartfeed/data')->__($errorText);
208
+ $this->getResponse()->setBody(Zend_Json::encode($result));
209
+ return;
210
+ } else {
211
+ $successText = '';
212
+ foreach($response['success'] as $success) {
213
+ $successText .= $success.'<br/>';
214
+ }
215
+
216
+ $result['success'] = true;
217
+ $result['error'] = false;
218
+ $result['success_message'] = Mage::helper('smartfeed/data')->__($successText);
219
+ $this->getResponse()->setBody(Zend_Json::encode($result));
220
+ return;
221
+ }
222
+ }
223
+ }
224
+
app/code/community/Twenga/Smartfeed/etc/config.xml ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Twenga_Smartfeed>
5
+ <version>1.0.0</version>
6
+ </Twenga_Smartfeed>
7
+ </modules>
8
+
9
+ <global>
10
+ <resources>
11
+ <smartfeed_setup>
12
+ <setup>
13
+ <module>Twenga_Smartfeed</module>
14
+ </setup>
15
+ <connection>
16
+ <use>core_setup</use>
17
+ </connection>
18
+ </smartfeed_setup>
19
+ <smartfeed_write>
20
+ <connection>
21
+ <use>core_write</use>
22
+ </connection>
23
+ </smartfeed_write>
24
+ <smartfeed_read>
25
+ <connection>
26
+ <use>core_read</use>
27
+ </connection>
28
+ </smartfeed_read>
29
+ </resources>
30
+
31
+ <models>
32
+ <smartfeed>
33
+ <class>Twenga_Smartfeed_Model</class>
34
+ </smartfeed>
35
+ </models>
36
+
37
+ <blocks>
38
+ <smartfeed>
39
+ <class>Twenga_Smartfeed_Block</class>
40
+ </smartfeed>
41
+ </blocks>
42
+
43
+ <helpers>
44
+ <smartfeed>
45
+ <class>Twenga_Smartfeed_Helper</class>
46
+ </smartfeed>
47
+ </helpers>
48
+
49
+ <events>
50
+ <admin_session_user_login_success>
51
+ <observers>
52
+ <delete_data>
53
+ <type>singleton</type>
54
+ <class>Twenga_Smartfeed_Model_Observer</class>
55
+ <method>deleteData</method>
56
+ </delete_data>
57
+ </observers>
58
+ </admin_session_user_login_success>
59
+ </events>
60
+ </global>
61
+
62
+ <frontend>
63
+ <layout>
64
+ <updates>
65
+ <smartfeed>
66
+ <file>twenga_smartfeed.xml</file>
67
+ </smartfeed>
68
+ </updates>
69
+ </layout>
70
+ </frontend>
71
+
72
+ <admin>
73
+ <routers>
74
+ <adminhtml>
75
+ <args>
76
+ <modules>
77
+ <smartfeed after="Mage_Adminhtml">Twenga_Smartfeed_Adminhtml</smartfeed>
78
+ </modules>
79
+ </args>
80
+ </adminhtml>
81
+ </routers>
82
+ </admin>
83
+
84
+ <adminhtml>
85
+ <translate>
86
+ <modules>
87
+ <Twenga_Smartfeed>
88
+ <files>
89
+ <default>Twenga_Smartfeed.csv</default>
90
+ </files>
91
+ </Twenga_Smartfeed>
92
+ </modules>
93
+ </translate>
94
+
95
+ <layout>
96
+ <updates>
97
+ <smartfeed>
98
+ <file>twenga_smartfeed.xml</file>
99
+ </smartfeed>
100
+ </updates>
101
+ </layout>
102
+
103
+ <menu>
104
+ <sales>
105
+ <children>
106
+ <smartfeed translate="title" module="adminhtml">
107
+ <title>Twenga Smart FEED</title>
108
+ <sort_order>1000</sort_order>
109
+ <action>adminhtml/smartfeed_index</action>
110
+ </smartfeed>
111
+ </children>
112
+ </sales>
113
+ </menu>
114
+
115
+ <acl>
116
+ <resources>
117
+ <admin>
118
+ <children>
119
+ <system>
120
+ <children>
121
+ <config>
122
+ <children>
123
+ <smartfeed translate="title" module="smartfeed">
124
+ <title>Twenga Smart FEED</title>
125
+ </smartfeed>
126
+ </children>
127
+ </config>
128
+ </children>
129
+ </system>
130
+ </children>
131
+ <children>
132
+ <sales>
133
+ <children>
134
+ <smartfeed translate="title" module="smartfeed">
135
+ <title>Twenga Smart FEED</title>
136
+ </smartfeed>
137
+ </children>
138
+ </sales>
139
+ </children>
140
+ </admin>
141
+ </resources>
142
+ </acl>
143
+ </adminhtml>
144
+
145
+ <default>
146
+ <smartfeed>
147
+ <options>
148
+ <active>1</active>
149
+ </options>
150
+ </smartfeed>
151
+ </default>
152
+ </config>
app/code/community/Twenga/Smartfeed/etc/system.xml ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <sections>
4
+ <smartfeed translate="label" module="smartfeed">
5
+ <label>Twenga Smart FEED</label>
6
+ <tab>sales</tab>
7
+ <frontend_type>text</frontend_type>
8
+ <sort_order>1000</sort_order>
9
+ <show_in_default>1</show_in_default>
10
+ <show_in_website>1</show_in_website>
11
+ <show_in_store>1</show_in_store>
12
+ <groups>
13
+ <options translate="label">
14
+ <label>Configurations</label>
15
+ <frontend_type>text</frontend_type>
16
+ <sort_order>1</sort_order>
17
+ <show_in_default>1</show_in_default>
18
+ <show_in_website>1</show_in_website>
19
+ <show_in_store>1</show_in_store>
20
+ <fields>
21
+ <active translate="label comment">
22
+ <label>Enable</label>
23
+ <frontend_type>select</frontend_type>
24
+ <sort_order>0</sort_order>
25
+ <source_model>adminhtml/system_config_source_yesno</source_model>
26
+ <show_in_default>1</show_in_default>
27
+ <show_in_website>1</show_in_website>
28
+ <show_in_store>1</show_in_store>
29
+ </active>
30
+ <!--<site_id>
31
+ <label>Site ID</label>
32
+ <frontend_type>text</frontend_type>
33
+ <sort_order>1</sort_order>
34
+ <show_in_default>1</show_in_default>
35
+ <show_in_website>1</show_in_website>
36
+ <show_in_store>1</show_in_store>
37
+ </site_id>
38
+ <pass translate="label">
39
+ <label>Password</label>
40
+ <frontend_type>password</frontend_type>
41
+ <sort_order>2</sort_order>
42
+ <show_in_default>1</show_in_default>
43
+ <show_in_website>1</show_in_website>
44
+ <show_in_store>1</show_in_store>
45
+ </pass>
46
+ <api_key translate="label">
47
+ <label>API Key</label>
48
+ <frontend_type>text</frontend_type>
49
+ <sort_order>3</sort_order>
50
+ <show_in_default>1</show_in_default>
51
+ <show_in_website>1</show_in_website>
52
+ <show_in_store>1</show_in_store>
53
+ </api_key>
54
+ <autolog_url translate="label">
55
+ <label>Auto log URL</label>
56
+ <frontend_type>text</frontend_type>
57
+ <sort_order>4</sort_order>
58
+ <show_in_default>1</show_in_default>
59
+ <show_in_website>1</show_in_website>
60
+ <show_in_store>1</show_in_store>
61
+ </autolog_url>
62
+ <register_autolog_url translate="label">
63
+ <label>Register auto log URL</label>
64
+ <frontend_type>text</frontend_type>
65
+ <sort_order>4</sort_order>
66
+ <show_in_default>1</show_in_default>
67
+ <show_in_website>1</show_in_website>
68
+ <show_in_store>1</show_in_store>
69
+ </register_autolog_url>
70
+ <token translate="label">
71
+ <label>Token</label>
72
+ <frontend_type>text</frontend_type>
73
+ <sort_order>5</sort_order>
74
+ <show_in_default>1</show_in_default>
75
+ <show_in_website>1</show_in_website>
76
+ <show_in_store>1</show_in_store>
77
+ </token>
78
+ <tracking_html translate="label">
79
+ <label>Tracking HTML</label>
80
+ <frontend_type>text</frontend_type>
81
+ <sort_order>6</sort_order>
82
+ <show_in_default>1</show_in_default>
83
+ <show_in_website>1</show_in_website>
84
+ <show_in_store>1</show_in_store>
85
+ </tracking_html>
86
+ <tracking_url translate="label">
87
+ <label>Tracking URL</label>
88
+ <frontend_type>text</frontend_type>
89
+ <sort_order>6</sort_order>
90
+ <show_in_default>1</show_in_default>
91
+ <show_in_website>1</show_in_website>
92
+ <show_in_store>1</show_in_store>
93
+ </tracking_url>-->
94
+ </fields>
95
+ </options>
96
+ </groups>
97
+ </smartfeed>
98
+ </sections>
99
+ </config>
app/design/adminhtml/default/default/layout/twenga_smartfeed.xml ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <adminhtml_smartfeed_index_index>
4
+ <reference name="head">
5
+ <action method="addItem"><type>skin_css</type><value>twenga_smartfeed/css/smartfeed.css</value></action>
6
+ <action method="addJs"><script>prototype/window.js</script></action>
7
+ <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
8
+ </reference>
9
+ <reference name="content">
10
+ <block type="core/template" name="smartfeed" template="twenga_smartfeed/account.phtml" />
11
+ </reference>
12
+ </adminhtml_smartfeed_index_index>
13
+
14
+ <adminhtml_smartfeed_index_lostpassword>
15
+ <reference name="root">
16
+ <action method="setTemplate"><template>empty.phtml</template></action>
17
+ </reference>
18
+ <reference name="head">
19
+ <action method="addItem"><type>skin_css</type><value>twenga_smartfeed/css/smartfeed.css</value></action>
20
+ </reference>
21
+ <reference name="content">
22
+ <block type="core/template" name="smartfeed" template="twenga_smartfeed/lost_password.phtml" />
23
+ </reference>
24
+ </adminhtml_smartfeed_index_lostpassword>
25
+ </layout>
app/design/adminhtml/default/default/template/twenga_smartfeed/account.phtml ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- Params -->
2
+ <?php $installSuccess = $this->getRequest()->getParam('install_success'); ?>
3
+ <?php $emailExists = $this->getRequest()->getParam('email_exists'); ?>
4
+ <?php $authenticationFailed = $this->getRequest()->getParam('authentication_failed'); ?>
5
+ <?php $signupSuccess = $this->getRequest()->getParam('signup_success'); ?>
6
+ <?php $localeCountry = Mage::app()->getLocale()->getLocaleCode(); ?>
7
+ <?php $countryId = explode('_', $localeCountry); ?>
8
+
9
+ <?php
10
+ // Banner TwengaSolutions for GoogleShopping
11
+ $text = $this->__('Unlock your Google Shopping performance with the most powerful automation solution');
12
+ $image = '<a href="'.Mage::helper('smartfeed/data')->addUtm(array(), 'https://www.twenga-solutions.com/fr/smartsem/smartfeed/').'" target="_blank">
13
+ <img src="' . $this->getSkinUrl('twenga_smartfeed/images/logo-smartfeed.png') . '" />
14
+ </a>';
15
+ ?>
16
+
17
+ <!-- Content header -->
18
+ <div class="content-header">
19
+ <table cellspacing="0">
20
+ <tbody>
21
+ <tr>
22
+ <td><h3 class="icon-head head-sales-transactions"><?php echo $this->__('Twenga Smart FEED'); ?></h3></td>
23
+ </tr>
24
+ </tbody>
25
+ </table>
26
+ </div>
27
+
28
+ <!-- Steps -->
29
+ <div class="tw-smartfeed-account">
30
+ <div class="tw-banner">
31
+ <div class="tw-banner-image"><?php echo $image; ?></div>
32
+ <div class="tw-banner-text"><?php echo $text; ?></div>
33
+ </div>
34
+
35
+ <!-- Step 1: Configure your account -->
36
+ <div class="tw-field">
37
+ <div id="tw-step-one" class="tw-step <?php echo $class; ?>">
38
+ <div class="tw-step-title"><?php echo $this->__('Step 1: Configure your account'); ?></div>
39
+ </div>
40
+
41
+ <div id="tw-account" class="tw-panel">
42
+ <div id="tw-signup">
43
+ <form id="tw-form-signup" action="<?php echo Mage::helper("adminhtml")->getUrl('adminhtml/smartfeed_index/postsignup'); ?>" method="POST">
44
+ <?php echo $this->getBlockHtml('formkey') ?>
45
+ <input type="hidden" name="country_id" value="<?php echo $countryId[1]; ?>"/>
46
+ <?php $formSignup = Mage::helper('smartfeed/data')->getFormSignUp(); ?>
47
+ <?php echo $formSignup['html']; ?>
48
+ </form>
49
+ </div>
50
+ <div id="tw-login" style="display:none;">
51
+ <form id="tw-form-login" action="<?php echo Mage::helper("adminhtml")->getUrl('adminhtml/smartfeed_index/authenticateemail'); ?>" method="POST">
52
+ <?php echo $this->getBlockHtml('formkey') ?>
53
+ <?php $formLogin = Mage::helper('smartfeed/data')->getFormLogin(); ?>
54
+ <?php echo $formLogin['html']; ?>
55
+ </form>
56
+ </div>
57
+ </div>
58
+ </div>
59
+
60
+ <!-- Step 2: Finalise your module installation -->
61
+ <div class="tw-field">
62
+ <div id="tw-step-two" class="tw-step">
63
+ <div class="tw-step-title"><?php echo $this->__('Step 2: Finalise your Twenga Solutions module installation'); ?></div>
64
+ </div>
65
+
66
+ <div id="tw-finalization" class="tw-panel">
67
+ <div id="tw-tracking">
68
+ <?php if ($installSuccess == 1): ?>
69
+ <!-- After install tracking -->
70
+ <p class="tw-padding bold"><?php echo $this->__('Congratulations you have now installed Twenga Tracking!'); ?></p>
71
+ <p class="tw-padding"><?php echo $this->__('With Twenga Tracking:'); ?></p>
72
+ <ul class="tw-list">
73
+ <li class="tw-line tw-padding"><?php echo $this->__('I can measure the quality of my traffic by following my conversion rates and acquisition costs per category.'); ?></li>
74
+ <li class="tw-line tw-padding"><?php echo $this->__('I can optimise my budget by prioritising the highest performing offers thanks to Twenga\'s automatic settings.'); ?></li>
75
+ <li class="tw-line tw-padding"><?php echo $this->__('I can secure my performance thanks to proactive monitoring and recommendations from the Twenga teams.'); ?></li>
76
+ </ul>
77
+ <div class="button-wrap">
78
+ <div class="row">
79
+ <div class="col-sm-5 col-sm-offset-3">
80
+ <a href="<?php echo Mage::helper('smartfeed/data')->addUtm(array(), Mage::getStoreConfig('smartfeed/options/autolog_url')); ?>" target="_blank" class="btn btn-red btn-lg" id="tw-form-signup-submit"><?php echo $this->__('Continue to your interface'); ?></a>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ <?php elseif ($signupSuccess == 1): ?>
85
+ <!-- After signup success -->
86
+ <div class="tw-warning"></div>
87
+ <div class="tw-warning-padding"><?php echo $this->__('Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.'); ?></div>
88
+ <div class="button-wrap">
89
+ <div class="row">
90
+ <div class="col-sm-5 col-sm-offset-3">
91
+ <a href="<?php echo Mage::helper('smartfeed/data')->addUtm(array(), Mage::getStoreConfig('smartfeed/options/register_autolog_url')); ?>" target="_blank" class="btn btn-red btn-lg" id="tw-form-signup-submit"><?php echo $this->__('Finalise your subscription'); ?></a>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ <?php elseif (Mage::getStoreConfig('smartfeed/options/token')): ?>
96
+ <div class="tw-success"></div>
97
+ <div class="tw-success-padding"><?php echo $this->__('If you have already installed the module on your website, please go to your Twenga Solutions interface.'); ?></div>
98
+ <div class="button-wrap">
99
+ <div class="row">
100
+ <div class="col-sm-5 col-sm-offset-3">
101
+ <a href="<?php echo Mage::helper('smartfeed/data')->addUtm(array(), Mage::getStoreConfig('smartfeed/options/autolog_url')); ?>" target="_blank" class="btn btn-red btn-lg" id="tw-form-signup-submit"><?php echo $this->__('Continue to your interface'); ?></a>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ <?php endif; ?>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </div>
110
+
111
+ <!-- Javascript interaction -->
112
+ <script type="text/javascript">
113
+ // <![CDATA[
114
+ function displayFormLogin() {
115
+ $("tw-signup").hide();
116
+ $("tw-login").show();
117
+
118
+ // Autoselect tw-email input
119
+ var tw_email = document.getElementById('tw-email');
120
+ tw_email.focus();
121
+ tw_email.select();
122
+ }
123
+
124
+ function displayFormSignup() {
125
+ $("tw-login").hide();
126
+ $("tw-signup").show();
127
+
128
+ // Autoselect firstname input
129
+ var firstname = document.getElementById('prenom');
130
+ firstname.focus();
131
+ firstname.select();
132
+ }
133
+
134
+ function displayNextStep() {
135
+ $("tw-signup").hide();
136
+ $("tw-finalization").show();
137
+ $("tw-step-one").classList.toggle("validate");
138
+ $("tw-step-two").classList.toggle("active");
139
+ $("tw-step-two").nextElementSibling.classList.toggle("show");
140
+ }
141
+ // ]]>
142
+ </script>
143
+
144
+ <!-- Load next step if tracking exists -->
145
+ <?php if (Mage::getStoreConfig('smartfeed/options/token')): ?>
146
+ <script type="text/javascript">
147
+ displayNextStep();
148
+ </script>
149
+ <?php else: ?>
150
+ <!-- No tracking also step 1 -->
151
+ <script type="text/javascript">
152
+ $("tw-finalization").hide();
153
+ $("tw-signup").show();
154
+ $("tw-step-one").classList.toggle("active");
155
+ $("tw-step-one").nextElementSibling.classList.toggle("show");
156
+ </script>
157
+
158
+ <script type="text/javascript">
159
+ // Autoselect firstname input
160
+ window.onload = function () {
161
+ var firstname = document.getElementById('prenom');
162
+ firstname.focus();
163
+ firstname.select();
164
+ }
165
+ </script>
166
+ <?php endif; ?>
167
+
168
+ <!-- Switch login and signup -->
169
+ <script type="text/javascript">
170
+ //<![CDATA[
171
+ var switchLogin = document.getElementById("switch-login");
172
+ switchLogin.onclick = function () {
173
+ displayFormLogin();
174
+ }
175
+
176
+ var switchSignup = document.getElementById("switch-signup");
177
+ switchSignup.onclick = function () {
178
+ displayFormSignup();
179
+ }
180
+
181
+ var switchPassword = document.getElementById("lostpassword-btn");
182
+ switchPassword.setAttribute('onclick', 'javascript::void(0)');
183
+ switchPassword.onclick = function () {
184
+ win = new Window({url: '<?php echo Mage::helper("adminhtml")->getUrl('adminhtml/smartfeed_index/lostpassword'); ?>', width: 350, height: 128, minimizable: false, maximizable: false, showEffectOptions: {duration: 0.4}, hideEffectOptions: {duration: 0.4}});
185
+ win.setZIndex(100);
186
+ win.showCenter(true);
187
+ win.setCloseCallback();
188
+ }
189
+ //]]>
190
+ </script>
191
+
192
+ <!-- If email already exists or authentication failed also change interface -->
193
+ <?php if ($emailExists == 1 || $authenticationFailed == 1): ?>
194
+ <script type="text/javascript">
195
+ displayFormLogin();
196
+ </script>
197
+ <?php endif; ?>
198
+
199
+ <!-- If signup success also change interface -->
200
+ <?php if ($signupSuccess == 1): ?>
201
+ <script type="text/javascript">
202
+ displayNextStep();
203
+ </script>
204
+ <?php endif; ?>
app/design/adminhtml/default/default/template/twenga_smartfeed/lost_password.phtml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="tw-smartfeed-password">
2
+ <div class="tw-smartfeed-title">
3
+ <?php echo $this->__('Forgot your password?'); ?>
4
+ </div>
5
+
6
+ <div id="tw-smartfeed-content">
7
+ <div id="close">
8
+ <img src="<?php echo $this->getSkinUrl('twenga_smartfeed/images/window_close.png'); ?>" title="<?php echo $this->__('Close'); ?>" alt="<?php echo $this->__('Close'); ?>" />
9
+ </div>
10
+ <div id="ajaxerror"></div>
11
+ <div id="ajaxsuccess"></div>
12
+ <form id="lost_password" action="" method="POST">
13
+ <?php echo $this->getBlockHtml('formkey')?>
14
+
15
+ <div class="field">
16
+ <label for="email"><?php echo $this->__('Please enter your email address:'); ?></label>
17
+ <input id="email" type="text" name="email" class="validate-email required-entry" />
18
+ </div>
19
+
20
+ <div class="button-wrap">
21
+ <div class="row">
22
+ <div class="col-sm-5 col-sm-offset-3">
23
+ <a href="#" class="btn btn-red btn-lg" onclick="sendRequest();"><?php echo $this->__('Submit'); ?></a>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </form>
28
+ </div>
29
+ </div>
30
+
31
+ <script type="text/javascript">
32
+ //<![CDATA[
33
+ function sendRequest() {
34
+ var email = document.getElementById('email').value;
35
+ var form_key = '<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>';
36
+ var req = new Ajax.Request('<?php echo Mage::helper("adminhtml")->getUrl('adminhtml/smartfeed_index/postlostpassword'); ?>', {
37
+ method:'post',
38
+ parameters: {
39
+ email: email,
40
+ form_key: form_key
41
+ },
42
+ onSuccess: function(req, json){
43
+ eval('var json = ' + req.responseText);
44
+ if (json.error == true) {
45
+ document.getElementById('ajaxerror').innerHTML = json.error_message;
46
+ document.getElementById('ajaxsuccess').innerHTML = '';
47
+ }
48
+
49
+ if (json.success == true) {
50
+ document.getElementById('ajaxerror').innerHTML = '';
51
+ document.getElementById('ajaxsuccess').innerHTML = json.success_message;
52
+ }
53
+ }
54
+ });
55
+ }
56
+ //]]>
57
+ </script>
app/design/frontend/base/default/layout/twenga_smartfeed.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="before_body_end">
5
+ <block type="smartfeed/tag" name="smartfeed_tag" as="smartfeed_tag" />
6
+ </reference>
7
+ </default>
8
+ </layout>
app/etc/modules/Twenga_Smartfeed.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Twenga_Smartfeed>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </Twenga_Smartfeed>
8
+ </modules>
9
+ </config>
app/locale/de_DE/Twenga_Smartfeed.csv ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Unlock your Google Shopping performance with the most powerful automation solution","Maximieren Sie Ihre Performance auf Google Shopping mit der wirkungsstärksten Automatisierungslösung"
2
+ "Forgot your password?","Passwort vergessen?"
3
+ "Password","Passwort"
4
+ "Please enter your email address:","Bitte geben Sie Ihre E-Mail-Adresse ein :"
5
+ "Submit","Bestätigen"
6
+ "Telephone","Telefon"
7
+ "Your site URL","URL Ihrer Website"
8
+ "Name","Vorname"
9
+ "Surname","Name"
10
+ "Email address","E-Mail-Adresse"
11
+ "Twenga Solutions username (your email)","Ihr Twenga Solutions Login (Ihre E-Mail Adresse)"
12
+ "Twenga Solutions password","Ihr Twenga Solutions Passwort"
13
+ "Install Twenga Solutions","Twenga Solutions installieren"
14
+ "Create your account","Ihr Konto erstellen"
15
+ "Step 1: Configure your account","Schritt 1: Ihr Konto einrichten"
16
+ "Step 2: Finalise your Twenga Solutions module installation","Schritt 2: Installation des Twenga Solutions Moduls beenden"
17
+ "I already have a Twenga Solutions account","Ich habe bereits ein Twenga Solutions Konto"
18
+ "I don't have a Twenga Solutions account","Ich habe kein Twenga Solutions Konto"
19
+ "You already have a Twenga Solutions account. Please fill in the fields below.","Sie haben bereits ein Twenga Solutions Konto. Bitte füllen Sie folgende Felder aus."
20
+ "You do not have a Twenga Solutions account. Please fill in the fields below in order to begin your subscription.","Sie haben noch kein Twenga Solutions Konto. Bitte füllen Sie folgende Felder aus um sich anzumelden."
21
+ "Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.","Achtung: Wir haben Ihre Anfrage erhalten. Bitte beenden Sie Ihre Anmeldung um von unseren Dienstleistungen zu profitieren."
22
+ "Finalise your subscription","Beenden Sie Ihre Anmeldung"
23
+ "Congratulations you have now installed Twenga Tracking!","Herzlichen Glückwunsch Sie haben das Twenga-Tracking erfolgreich installiert!"
24
+ "With Twenga Tracking:","Mit dem Twenga-Tracking:"
25
+ "I can measure the quality of my traffic by following my conversion rates and acquisition costs per category.","Messe ich die Qualität meines Traffics durch die Verfolgung meiner Konversionsraten und meiner Akquisitionskosten pro Kategorie."
26
+ "I can optimise my budget by prioritising the highest performing offers thanks to Twenga's automatic settings.","Optimiere ich mein Budget durch die Bevorzugung der am besten performenden Angebote dank der automatischen Regeln von Twenga."
27
+ "I can secure my performance thanks to proactive monitoring and recommendations from the Twenga teams.","Sichere ich meine Performance dank des proaktiven Trackings und der Empfehlungen von Twenga."
28
+ "Continue to your interface","Zu Ihrer Benutzeroberfläche"
29
+ "Benefit from a complete range of marketing and analytics tools with your Twenga Solutions account","In Ihrem Twenga Solutions Konto profitieren Sie von einem kompletten Marketing und Analysetool."
30
+ "Step:","Schritt:"
31
+ "Clients:","Kunden:"
32
+ "Our clients","Unsere Referenzen"
33
+ "If you have already installed the module on your website, please go to your Twenga Solutions interface.","Sie haben das Modul bereits auf Ihrer Seite installiert. Wir bitten Sie auf Ihre Twenga Solutions-Benutzeroberfläche zuzugreifen."
34
+ "Close","Schließen"
35
+ "Authentication failed","Authentifizierung fehlgeschlagen"
36
+ "Enable","Aktivieren"
37
+ "Connect with success","Erfolgreich verbunden"
app/locale/es_ES/Twenga_Smartfeed.csv ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Unlock your Google Shopping performance with the most powerful automation solution","Maximiza tu rendimiento en Google Shopping con la solución más potente de automatización"
2
+ "Forgot your password?","¿Has olvidado la contraseña?"
3
+ "Password","Contraseña"
4
+ "Please enter your email address:","Por favor escribe tu correo electrónico:"
5
+ "Submit","Aceptar"
6
+ "Telephone","Teléfono"
7
+ "Your site URL","URL de tu tienda online"
8
+ "Name","Nombre"
9
+ "Surname","Apellidos"
10
+ "Email address","Correo electrónico"
11
+ "Twenga Solutions username (your email)","Login Twenga Solutions (tu email)"
12
+ "Twenga Solutions password","Contraseña Twenga Solutions"
13
+ "Install Twenga Solutions","Instalar Twenga Solutions"
14
+ "Create your account","Crea tu cuenta"
15
+ "Step 1: Configure your account","Paso 1: Configura tu cuenta"
16
+ "Step 2: Finalise your Twenga Solutions module installation","Paso 2: Termina la instalación del módulo Twenga Solutions"
17
+ "I already have a Twenga Solutions account","Ya tengo una cuenta en Twenga Solutions"
18
+ "I don't have a Twenga Solutions account","No tengo cuenta en Twenga Solutions"
19
+ "You already have a Twenga Solutions account. Please fill in the fields below.","Ya tienes una cuenta en Twenga Solutions. Por favor rellena los campos que encontrarás a continuación."
20
+ "You do not have a Twenga Solutions account. Please fill in the fields below in order to begin your subscription.","No tienes cuenta en Twenga Solutions. Por favor rellena los campos que encontrarás a continuación para comenzar tu inscripción."
21
+ "Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.","Importante: Tu petición ha sido tomada en cuenta. Para poder beneficiarte de nuestros servicios tienes que finalizar tu inscripción."
22
+ "Finalise your subscription","Termina tu inscripción"
23
+ "Congratulations you have now installed Twenga Tracking!","¡Enhorabuena! Has instalado correctamente el Tracking Twenga."
24
+ "With Twenga Tracking:","Con el Tracking Twenga:"
25
+ "I can measure the quality of my traffic by following my conversion rates and acquisition costs per category.","Puedes medir la calidad de tu tráfico siguiendo tu tasa de conversión y tus costes de adquisición por categoría."
26
+ "I can optimise my budget by prioritising the highest performing offers thanks to Twenga's automatic settings.","Puedes optimizar tu presupuesto privilegiando las ofertas de mayor rendimiento gracias a las reglas automáticas de Twenga."
27
+ "I can secure my performance thanks to proactive monitoring and recommendations from the Twenga teams.","Puedes asegurar tu rendimiento gracias a un seguimiento proactivo y a los consejos del equipo de Twenga."
28
+ "Continue to your interface","Accede a tu interfaz"
29
+ "Benefit from a complete range of marketing and analytics tools with your Twenga Solutions account","Ponemos a tu disposición en tu cuenta Twenga Solutions un conjunto completo de herramientas de análisis y marketing."
30
+ "Step:","Paso:"
31
+ "Clients:","Clientes:"
32
+ "Our clients","Confían en nosotros"
33
+ "If you have already installed the module on your website, please go to your Twenga Solutions interface.","Ya has instalado el módulo en tu sitio web. Te invitamos a acceder a tu interfaz Twenga Solutions."
34
+ "Close","Cerca"
35
+ "Authentication failed","Error de autenticación"
36
+ "Enable","Habilitar"
37
+ "Connect with success","Conectado con éxito"
app/locale/fr_FR/Twenga_Smartfeed.csv ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Unlock your Google Shopping performance with the most powerful automation solution","Maximisez votre performance Google Shopping avec la solution d'automatisation la plus puissante"
2
+ "Forgot your password?","Mot de passe oublié ?"
3
+ "Password","Mot de passe"
4
+ "Please enter your email address:","Veuillez saisir votre adresse e-mail :"
5
+ "Submit","Valider"
6
+ "Telephone","Téléphone"
7
+ "Your site URL","URL de votre site"
8
+ "Name","Prénom"
9
+ "Surname","Nom"
10
+ "Email address","Adresse e-mail"
11
+ "Twenga Solutions username (your email)","Login Twenga Solutions (votre email)"
12
+ "Twenga Solutions password","Mot de passe Twenga Solutions "
13
+ "Install Twenga Solutions","Installer Twenga Solutions"
14
+ "Create your account","Créer votre compte"
15
+ "Step 1: Configure your account","Etape 1 : Configurer votre compte"
16
+ "Step 2: Finalise your Twenga Solutions module installation","Etape 2 : Finaliser l'installation du module Twenga Solutions"
17
+ "I already have a Twenga Solutions account","J'ai déjà un compte Twenga Solutions"
18
+ "I don't have a Twenga Solutions account","Je n'ai pas de compte Twenga Solutions"
19
+ "You already have a Twenga Solutions account. Please fill in the fields below.","Vous avez déjà un compte Twenga Solutions. Nous vous invitons à renseigner les champs ci-dessous."
20
+ "You do not have a Twenga Solutions account. Please fill in the fields below in order to begin your subscription.","Vous n'avez pas de compte Twenga Solutions. Nous vous invitons à renseigner les champs ci-dessous afin de commencer votre inscription."
21
+ "Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.","Attention : Nous avons bien pris en compte votre demande, afin de bénéficier de nos services vous devez finaliser votre inscription."
22
+ "Finalise your subscription","Finalisez votre inscription"
23
+ "Congratulations you have now installed Twenga Tracking!","Félicitations vous avez bien installé le Tracking Twenga !"
24
+ "With Twenga Tracking:","Avec le Tracking Twenga :"
25
+ "I can measure the quality of my traffic by following my conversion rates and acquisition costs per category.","Je mesure la qualité de mon trafic en suivant mes taux de conversion et mes coûts d'acquisitions par catégorie."
26
+ "I can optimise my budget by prioritising the highest performing offers thanks to Twenga's automatic settings.","J'optimise mon budget en privilégiant les offres les plus performantes grâce aux règles automatiques Twenga."
27
+ "I can secure my performance thanks to proactive monitoring and recommendations from the Twenga teams.","Je sécurise ma performance grâce au suivi proactif et aux recommandations des équipes Twenga."
28
+ "Continue to your interface","Accéder à votre interface"
29
+ "Benefit from a complete range of marketing and analytics tools with your Twenga Solutions account","Vous bénéficierez depuis votre compte Twenga solutions d’une suite complète d’outils marketing et analytiques."
30
+ "Step:","Etape :"
31
+ "Clients:","Clients :"
32
+ "Our clients","Ils nous font déjà confiance"
33
+ "If you have already installed the module on your website, please go to your Twenga Solutions interface.","Vous avez déjà installé le module sur votre site, nous vous invitons à accéder à votre interface Twenga solutions."
34
+ "Close","Fermer"
35
+ "Authentication failed","Authentification échouée"
36
+ "Enable","Activer"
37
+ "Connect with success","Connecté avec succès"
app/locale/it_IT/Twenga_Smartfeed.csv ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Unlock your Google Shopping performance with the most powerful automation solution","Massimizza le tue performance Google Shopping con la più efficace tra le soluzioni di automazione"
2
+ "Forgot your password?","Password dimenticata?"
3
+ "Password","Password"
4
+ "Please enter your email address:","Inserisci il tuo indirizzo e-mail:"
5
+ "Submit","Conferma"
6
+ "Telephone","Telefono"
7
+ "Your site URL","URL del tuo sito"
8
+ "Name","Nome"
9
+ "Surname","Cognome"
10
+ "Email address","E-mail"
11
+ "Twenga Solutions username (your email)","Login Twenga Solutions (indirizzo email):"
12
+ "Twenga Solutions password","Password Twenga Solutions"
13
+ "Install Twenga Solutions","Installare Twenga Solutions"
14
+ "Create your account","Crea il tuo account"
15
+ "Step 1: Configure your account","Passaggio 1: Configura il tuo account"
16
+ "Step 2: Finalise your Twenga Solutions module installation","Passaggio 2: Completa l'installazione del modulo Twenga Solutions"
17
+ "I already have a Twenga Solutions account","Possiedo già un account Twenga Solutions"
18
+ "I don't have a Twenga Solutions account","Non possiedo un account Twenga Solutions"
19
+ "You already have a Twenga Solutions account. Please fill in the fields below.","Possiedi già un account Twenga Solutions. Ti invitiamo a riempire i campi qui sotto."
20
+ "You do not have a Twenga Solutions account. Please fill in the fields below in order to begin your subscription.","Non possiedi un account Twenga Solutions. Ti invitiamo a riempire i campi qui sotto per iniziare la tua iscrizione."
21
+ "Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.","Attenzione : Stiamo considerando la tua domanda. Per poter beneficiare dei nostri servizi occorre completare la tua iscrizione."
22
+ "Finalise your subscription","Completa la tua iscrizione"
23
+ "Congratulations you have now installed Twenga Tracking!","Congratulazioni hai installato il Tracking Twenga !"
24
+ "With Twenga Tracking:","Con il Tracking Twenga:"
25
+ "I can measure the quality of my traffic by following my conversion rates and acquisition costs per category.","Misuro la qualità del mio traffico seguendo i miei tassi di conversione ed i miei costi acquisizione per categoria."
26
+ "I can optimise my budget by prioritising the highest performing offers thanks to Twenga's automatic settings.","Ottimizzo il mio budget privilegiando le offerte più performanti grazie alle regole automatiche Twenga."
27
+ "I can secure my performance thanks to proactive monitoring and recommendations from the Twenga teams.","Assicuro le mie performance grazie all'analisi proattiva e alle raccomandazioni del team Twenga."
28
+ "Continue to your interface","Accedi all'interfaccia"
29
+ "Benefit from a complete range of marketing and analytics tools with your Twenga Solutions account","Grazie al tuo account Twenga Solutions potrai godere di un'intera gamma di strumenti marketing e analitici."
30
+ "Step:","Passaggio:"
31
+ "Clients:","Clienti:"
32
+ "Our clients","Sono già nostri partner"
33
+ "If you have already installed the module on your website, please go to your Twenga Solutions interface.","Hai già installato il modulo sul tuo sito, ti invitiamo ad accedere alla tua interfaccia Twenga Solutions."
34
+ "Close","Vicino"
35
+ "Authentication failed","Autenticazione fallita"
36
+ "Enable","Consentire"
37
+ "Connect with success","Collegato con successo"
app/locale/nl_NL/Twenga_Smartfeed.csv ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Unlock your Google Shopping performance with the most powerful automation solution","Optimaliseer je performance op Google Shopping met de krachtigste automatiseringsoplossing"
2
+ "Forgot your password?","Wachtwoord vergeten?"
3
+ "Password","Wachtwoord"
4
+ "Please enter your email address:","Gelieve uw e-mailadres in te vullen:"
5
+ "Submit","Bevestigen"
6
+ "Telephone","Telefoon"
7
+ "Your site URL","Uw site URL"
8
+ "Name","Voornaam"
9
+ "Surname","Achternaam"
10
+ "Email address","Email-adres"
11
+ "Twenga Solutions username (your email)","Twenga Solutions log-in (uw emailadres)"
12
+ "Twenga Solutions password","Twenga Solutions wachtwoord"
13
+ "Install Twenga Solutions","Twenga Solutions installeren"
14
+ "Create your account","Maak je account aan"
15
+ "Step 1: Configure your account","Stap 1: Configureer je account"
16
+ "Step 2: Finalise your Twenga Solutions module installation","Stap 2: Voltooi de installatie van de Twenga Solutions module"
17
+ "I already have a Twenga Solutions account","Ik heb al een Twenga Solutions account"
18
+ "I don't have a Twenga Solutions account","Ik heb geen Twenga Solutions account"
19
+ "You already have a Twenga Solutions account. Please fill in the fields below.","Je hebt al een Twenga Solutions account. Vul de velden hieronder in."
20
+ "You do not have a Twenga Solutions account. Please fill in the fields below in order to begin your subscription.","Je hebt nog geen Twenga Solutions account. We vragen je om de onderstaande velden in te vullen zodat je je inschrijving kan beginnen."
21
+ "Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.","Opgelet: We hebben je aanvraag ontvangen. Voltooi je inschrijving om gebruik te kunnen maken van onze services."
22
+ "Finalise your subscription","Voltooi je inschrijving"
23
+ "Congratulations you have now installed Twenga Tracking!","Gefeliciteerd je hebt de Twenga Tracking succesvol geïnstalleerd!"
24
+ "With Twenga Tracking:","Met de Twenga Tracking:"
25
+ "I can measure the quality of my traffic by following my conversion rates and acquisition costs per category.","Ik meet de kwaliteit van mijn traffic door mijn conversieratio en de Cost of Sales per categorie te volgen."
26
+ "I can optimise my budget by prioritising the highest performing offers thanks to Twenga's automatic settings.","Ik benut mijn budget optimaal door voorrang te geven aan de best presterende aanbiedingen dankzij de automatische instellingen van Twenga."
27
+ "I can secure my performance thanks to proactive monitoring and recommendations from the Twenga teams.","Ik ben verzekerd van een goede performance dankzij de proactieve ondersteuning van Twenga's team."
28
+ "Continue to your interface","Ga naar je interface"
29
+ "Benefit from a complete range of marketing and analytics tools with your Twenga Solutions account","Via je Twenga Solutions account profiteer je van uitgebreide marketing- en analysemogelijkheden."
30
+ "Step:","Stap:"
31
+ "Clients:","Klanten:"
32
+ "Our clients","Onze referenties"
33
+ "If you have already installed the module on your website, please go to your Twenga Solutions interface.","Je hebt de module al geïnstalleerd op je website. Ga naar de interface van Twenga Solutions."
34
+ "Close","Dichtbij"
35
+ "Authentication failed","Verificatie mislukt"
36
+ "Enable","In staat stellen"
37
+ "Connect with success","Succes aangesloten"
app/locale/pl_PL/Twenga_Smartfeed.csv ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Unlock your Google Shopping performance with the most powerful automation solution","Maksymalizuj skuteczność kampanii Google Zakupów (PLA) dzięki najbardziej zautomatyzowanemu rozwiązaniu"
2
+ "Forgot your password?","Zapomniałeś hasła?"
3
+ "Password","Hasło"
4
+ "Please enter your email address:","Wpisz swój adres e-mail:"
5
+ "Submit","Potwierdź"
6
+ "Telephone","Telefon"
7
+ "Your site URL","URL Twojej strony"
8
+ "Name","Imię"
9
+ "Surname","Nazwisko"
10
+ "Email address","Adres e-mail"
11
+ "Twenga Solutions username (your email)","Login Twenga Solutions (Twój e-mail)"
12
+ "Twenga Solutions password","Hasło Twenga Solutions"
13
+ "Install Twenga Solutions","Zainstaluj Twenga Solutions"
14
+ "Create your account","Utwórz konto"
15
+ "Step 1: Configure your account","Etap 1: Skonfiguruj konto"
16
+ "Step 2: Finalise your Twenga Solutions module installation","Etap 2: Sfinalizuj instalację modułu Twenga Solutions"
17
+ "I already have a Twenga Solutions account","Mam już konto Twenga Solutions"
18
+ "I don't have a Twenga Solutions account","Nie mam jeszcze konta Twenga Solutions"
19
+ "You already have a Twenga Solutions account. Please fill in the fields below.","Posiadasz już konto Twenga Solutions. Prosimy o wypełnienie poniższych pól."
20
+ "You do not have a Twenga Solutions account. Please fill in the fields below in order to begin your subscription.","Nie posiadasz jeszcze konta Twenga Solutions. Prosimy o wypełnienie poniższych pól aby rozpocząć rejestrację"
21
+ "Warning: We have now taken your request into account. In order to benefit from our services you must finalise your subscription.","Uwaga: Twoja prośba została poprawnie zapisana. Aby korzystać z naszych usług musisz jeszcze ukończyć proces rejestracji."
22
+ "Finalise your subscription","Dokończ proces rejestracji"
23
+ "Congratulations you have now installed Twenga Tracking!","Gratulacje zainstalowałeś właśnie Tracking Twenga!"
24
+ "With Twenga Tracking:","Dzięki Trackingowi Twenga:"
25
+ "I can measure the quality of my traffic by following my conversion rates and acquisition costs per category.","Mierzę jakość mojego ruchu śledząc współczynnik konwersji oraz kosztypozyskiwania na poziomie kategorii."
26
+ "I can optimise my budget by prioritising the highest performing offers thanks to Twenga's automatic settings.","Optymalizuję mój budżet dzięki automatycznym zasadom Twenga które faworyzują najefektywniejsze oferty."
27
+ "I can secure my performance thanks to proactive monitoring and recommendations from the Twenga teams.","Upewniam się o stabilności moich wyników dzięki aktywnemu monitoringowi i rekomendacjom zespołu Twenga."
28
+ "Continue to your interface","Przejdź do interfejsu"
29
+ "Benefit from a complete range of marketing and analytics tools with your Twenga Solutions account","Twoje konto Twenga Solutions da Ci dostęp do kompletu narzędzi analitycznych i marketingowych."
30
+ "Step:","Etap:"
31
+ "Clients:","Klienci:"
32
+ "Our clients","Oni nam zaufali"
33
+ "If you have already installed the module on your website, please go to your Twenga Solutions interface.","Moduł został już zainstalowany na Twojej stronie - zaloguj się do interfejsu Twenga Solutions."
34
+ "Close","Blisko"
35
+ "Authentication failed","Uwierzytelnianie nie powiodło się"
36
+ "Enable","Włączyć"
37
+ "Connect with success","Prawidłowo podłączony"
package.xml ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Twenga_Smartfeed</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licences/osl-3.0.php">OSL v3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Completely automate your Google Shopping campaigns &amp; improve your ROI by up to 40% in a few days with Smart FEED by Twenga Solutions.</summary>
10
+ <description>Entrust your Google Shopping campaigns to Twenga Solutions!&#xD;
11
+ By entrusting us with your campaigns, you'll no longer have to worry about the technical side of things: our teams are here to guide you.&#xD;
12
+ Our Smart FEED solution helps you by completely automating your Google Shopping campaigns, very easily listing your products and therefore increasing your revenue and online visibility. &#xD;
13
+ &#xD;
14
+ Optimised product feed&#xD;
15
+ Thanks to 10 years of expertise in traffic generation and merchant catalogue management, our solution restructures your product feed according to the Google chart.&#xD;
16
+ We maximise click rate and offer visibility by rewriting product titles, automatically selecting the best photos and excluding products with a weak performance.&#xD;
17
+ &#xD;
18
+ Estimation of intention to buy&#xD;
19
+ Twenga&#x2019;s Smart TRACKING is simple to install on merchant sites. It identifies the performance of each product and analyses user behaviour, thanks to advanced algorithms which take into account over 40 different indicators.&#xD;
20
+ Based on the information collected, we estimate the intention to buy for each click and adjust your bids in real-time depending on sales potential. &#xD;
21
+ &#xD;
22
+ Automated bid management&#xD;
23
+ AdWords bids are continually adjusted at the finest level in relation to your performance objectives, catalogue variations and shopping trends.&#xD;
24
+ Hundreds of e-retailers have improved their performance with our Smart SEM solutions.&#xD;
25
+ &#xD;
26
+ User segmentation&#xD;
27
+ The platform allows for the creation of segments based on client types and internet history, as well as your catalogue categories.&#xD;
28
+ This feature allows for bidding strategy optimisation in real-time, in relation to different audience behaviour. &#xD;
29
+ &#xD;
30
+ Keyword optimisation&#xD;
31
+ Performance is constantly evaluated and your keyword base is optimised in order to detect non-profitable terms to be deleted as well as which terms should be added.&#xD;
32
+ The solution also automates the management of negative keywords on AdWords. &#xD;
33
+ &#xD;
34
+ Automated control based on your objectives&#xD;
35
+ Our management interface allows you to set your performance indicators and adjust your objectives in each category of your catalogue, thanks to a practical and intuitive dashboard.&#xD;
36
+ Your follow-up tool regroups your Smart LEADS and Smart SEM solutions for simplified management.&#xD;
37
+ &#xD;
38
+ </description>
39
+ <notes>Extension for Magento 1.5.X and later.</notes>
40
+ <authors><author><name>Benjamin GOSSELET</name><user>Twenga</user><email>bgosselet@adexos.fr</email></author></authors>
41
+ <date>2016-06-22</date>
42
+ <time>12:32:06</time>
43
+ <contents><target name="mageetc"><dir name="modules"><file name="Twenga_Smartfeed.xml" hash="76370d36ed185248e8a3fc358bbb4ebe"/></dir></target><target name="magecommunity"><dir name="Twenga"><dir name="Smartfeed"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="Account.php" hash="580bc857097d20a9568dd347b0bf193b"/></dir></dir></dir><file name="Tag.php" hash="78f6d9e4365f05b01b5fc80abd7a3bb5"/></dir><dir name="Helper"><file name="Data.php" hash="64b70683362f40c16e9786fc33477512"/></dir><dir name="Model"><file name="Observer.php" hash="7e1a0831a0f8dc4559dd6af0ff5e1a22"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Smartfeed"><file name="IndexController.php" hash="7b8a97ecb6c3c9788438dc11bb4d95a7"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="f7f1a7ddcab8372e10fbba12c3df18fc"/><file name="system.xml" hash="883710aadb82e4805d160a1ee7dbbfdc"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="twenga_smartfeed.xml" hash="38da946bc3111a6db54d97ae8bcd409a"/></dir><dir name="template"><dir name="twenga_smartfeed"><file name="account.phtml" hash="99f08cc59e7e809c70fdebc0b799af94"/><file name="lost_password.phtml" hash="670491afcba22d7b1d21695269b4c297"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="twenga_smartfeed.xml" hash="658abd958345826d15e9b3da1a3d5baa"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="twenga_smartfeed"><dir name="css"><file name="smartfeed.css" hash="e4be06f9de028054c4cb87d2b8b09248"/></dir><dir name="images"><file name="logo-smartfeed.png" hash="61997eaaccd7d0a90bcadf6e77aa387c"/><file name="sprite.png" hash="f57d330cc3b603cf6bd1cd0402135dd7"/><file name="window_close.png" hash="5ae5afd61e937fcd2d5b84641255ee4d"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="de_DE"><file name="Twenga_Smartfeed.csv" hash="82fec22a6100019d13801c0162fa4dbd"/></dir><dir name="fr_FR"><file name="Twenga_Smartfeed.csv" hash="fa6ddbb45506f9aedb5fc52f8c1de38f"/></dir><dir name="it_IT"><file name="Twenga_Smartfeed.csv" hash="7d25bcd856630239266a7b64d8bf8664"/></dir><dir name="es_ES"><file name="Twenga_Smartfeed.csv" hash="4a7ec8fe44d5e8ae6045f83fb905925e"/></dir><dir name="nl_NL"><file name="Twenga_Smartfeed.csv" hash="4a0d3d781045cb5ea290d383aa0d4f22"/></dir><dir name="pl_PL"><file name="Twenga_Smartfeed.csv" hash="526c52130b4c6f062545436eecf06321"/></dir></target></contents>
44
+ <compatible/>
45
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
46
+ </package>
skin/adminhtml/default/default/twenga_smartfeed/css/smartfeed.css ADDED
@@ -0,0 +1,283 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /***** $GENERAL *****/
2
+
3
+ .tw-smartfeed-account {
4
+ color: #474548;
5
+ cursor: default;
6
+ font-weight: normal;
7
+ font-family: Roboto,Arial,Helvetica,sans-serif;
8
+ }
9
+
10
+ .tw-smartfeed-account .tw-field {
11
+ margin-bottom:15px;
12
+ border:1px solid #DDD;
13
+ }
14
+
15
+ .tw-smartfeed-account a,
16
+ .tw-smartfeed-account a:hover {
17
+ color: #0a88c5;
18
+ }
19
+
20
+ .tw-smartfeed-account .button-wrap {
21
+ margin-top: 20px;
22
+ padding: 20px 0;
23
+ border-top: 1px dotted #DCDCDC;
24
+ background: #f8f8f8;
25
+ }
26
+
27
+ .tw-smartfeed-account .btn,
28
+ .tw-smartfeed-password .btn {
29
+ padding: 3px 12px;
30
+ font-size: 15px;
31
+ margin-left:15px;
32
+ border:0;
33
+ border-radius: 2px;
34
+ -moz-border-radius: 2px;
35
+ -webkit-border-radius: 2px;
36
+ font-weight: bold;
37
+ color: #fff;
38
+ text-decoration:none;
39
+ }
40
+
41
+ .tw-smartfeed-account .btn:focus,
42
+ .tw-smartfeed-account .btn:hover,
43
+ .tw-smartfeed-password .btn:focus,
44
+ .tw-smartfeed-password .btn:hover {
45
+ text-decoration: none;
46
+ color: #fff;
47
+ }
48
+
49
+ .tw-smartfeed-account .btn-red,
50
+ .tw-smartfeed-password .btn-red {
51
+ background: #ee7b65;
52
+ }
53
+
54
+ .tw-smartfeed-account .btn-red:focus,
55
+ .tw-smartfeed-account .btn-red:hover,
56
+ .tw-smartfeed-password .btn-red:focus,
57
+ .tw-smartfeed-password .btn-red:hover {
58
+ background: #d73819;
59
+ }
60
+
61
+ .tw-smartfeed-account .btn-white {
62
+ color: #0a88c5;
63
+ box-shadow: 0 0 5px rgba(0,0,0,.3);
64
+ font-weight: 700;
65
+ text-align: left;
66
+ font-size: 17px;
67
+ background: #fff;
68
+ }
69
+
70
+ .tw-smartfeed-account .btn-white:focus,
71
+ .tw-smartfeed-account .btn-white:hover {
72
+ color: #0a88c5;
73
+ background: #f8f8f8;
74
+ }
75
+
76
+ .tw-smartfeed-account .btn-lg {
77
+ padding: 12px 30px;
78
+ font-size: 17px;
79
+ }
80
+
81
+ .tw-smartfeed-account .tw-warning {
82
+ width:28px;
83
+ height:28px;
84
+ background:url('../images/sprite.png') no-repeat 0px -69px;
85
+ display:inline-block;
86
+ vertical-align:middle;
87
+ margin-left:15px;
88
+ }
89
+
90
+ .tw-smartfeed-account .tw-warning-padding {
91
+ display:inline-block;
92
+ vertical-align:middle;
93
+ color:#F29625;
94
+ font-weight:bold;
95
+ height:16px;
96
+ padding-left:7px;
97
+ }
98
+
99
+ .tw-smartfeed-account .tw-success {
100
+ width:28px;
101
+ height:28px;
102
+ background:url('../images/sprite.png') no-repeat -28px -69px;
103
+ display:inline-block;
104
+ vertical-align:middle;
105
+ margin-left:15px;
106
+ }
107
+
108
+ .tw-smartfeed-account .tw-success-padding {
109
+ display:inline-block;
110
+ vertical-align:middle;
111
+ color:#1ABC9C;
112
+ font-weight:bold;
113
+ height:16px;
114
+ padding-left:7px;
115
+ }
116
+
117
+ /***** $BANNER *****/
118
+ .tw-smartfeed-account .tw-banner {
119
+ padding:10px 15px 15px 0px;
120
+ }
121
+
122
+ .tw-smartfeed-account .tw-banner-text {
123
+ font-size: 16px;
124
+ margin-left: 3px;
125
+ margin-bottom: 10px;
126
+ }
127
+
128
+ /***** $STEP *****/
129
+ .tw-smartfeed-account .tw-step {
130
+ background: #FFFFFF;
131
+ cursor: pointer;
132
+ width: 100%;
133
+ text-align: left;
134
+ border: none;
135
+ outline: none;
136
+ -webkit-transition:0.4s;
137
+ transition: 0.4s;
138
+ color: #AAAAAA;
139
+ }
140
+
141
+ .tw-smartfeed-account .tw-step.validate {
142
+ color: #0a88c5 !important;
143
+ font-weight:bold;
144
+ }
145
+
146
+ .tw-smartfeed-account .tw-step.active {
147
+ color: #444444;
148
+ }
149
+
150
+ .tw-smartfeed-account .tw-step-title {
151
+ width:100%;
152
+ padding: 15px 0 15px 15px;
153
+ font-size:14px;
154
+ }
155
+
156
+ /***** $STEP CONTENT *****/
157
+ .tw-smartfeed-account .tw-panel {
158
+ background: white;
159
+ display: none;
160
+ padding-top:5px;
161
+ }
162
+
163
+ .tw-smartfeed-account .tw-panel.show {
164
+ display: block !important;
165
+ }
166
+
167
+ .tw-smartfeed-account .tw-panel input {
168
+ border:1px solid #DDDDDD;
169
+ width:250px;
170
+ padding:2px 5px;
171
+ }
172
+
173
+ .tw-smartfeed-account .tw-panel input:focus {
174
+ border:1px solid #444444;
175
+ }
176
+
177
+ .tw-smartfeed-account .tw-panel .form-group {
178
+ margin-bottom:5px;
179
+ }
180
+
181
+ .tw-smartfeed-account .tw-padding {
182
+ padding: 0 15px;
183
+ }
184
+
185
+ .tw-smartfeed-account .bold {
186
+ font-weight:bold;
187
+ }
188
+
189
+ .tw-smartfeed-account .tw-line {
190
+ list-style:inside;
191
+ }
192
+
193
+ /***** $SWITCH *****/
194
+ .tw-smartfeed-account #switch-login,
195
+ .tw-smartfeed-account #switch-signup {
196
+ display: inline-block;
197
+ margin-left: 15px;
198
+ color: #0a88c5;
199
+ font-weight:bold;
200
+ cursor: pointer;
201
+ }
202
+
203
+ /***** $LOST PASSWORD *****/
204
+ .tw-smartfeed-password {
205
+ background: #f8f8f8;
206
+ padding:15px;
207
+ }
208
+
209
+ .tw-smartfeed-password .tw-smartfeed-title {
210
+ text-align:center;
211
+ width:100%;
212
+ display:block;
213
+ font-size:16px;
214
+ color:#0a88c5;
215
+ margin-bottom:10px;
216
+ font-weight:bold;
217
+ }
218
+
219
+ .tw-smartfeed-password input {
220
+ border:1px solid #DDDDDD;
221
+ width:308px;
222
+ padding:2px 5px;
223
+ }
224
+
225
+ .tw-smartfeed-password .button-wrap {
226
+ padding:10px 0 0 0;
227
+ background: #f8f8f8;
228
+ text-align:right;
229
+ }
230
+
231
+ .tw-smartfeed-password #ajaxerror {
232
+ color:#d73819;
233
+ margin-bottom:10px;
234
+ }
235
+
236
+ .tw-smartfeed-password #ajaxsuccess {
237
+ color:#1ABC9C;
238
+ margin-bottom:10px;
239
+ }
240
+
241
+ .tw-smartfeed-password #close {
242
+ position: absolute;
243
+ top: 19px;
244
+ right: 10px;
245
+ width: 16px;
246
+ height: 16px;
247
+ cursor:pointer;
248
+ display:none;
249
+ }
250
+
251
+ /***** $OVERRIDE WINDOW *****/
252
+ .dialog_nw,
253
+ .dialog_w,
254
+ .dialog_n,
255
+ .dialog_ne,
256
+ .dialog_sw,
257
+ .dialog_s,
258
+ .dialog_sizer,
259
+ .dialog_e {
260
+ background:#DDDDDD;
261
+ }
262
+
263
+ .dialog_content {
264
+ background:#F8F8F8;
265
+ }
266
+
267
+ .dialog_close {
268
+ width: 16px;
269
+ height: 16px;
270
+ background: transparent url('../images/window_close.png') no-repeat 0 0;
271
+ right: 10px;
272
+ left:auto;
273
+ top:5px;
274
+ position: absolute;
275
+ cursor: pointer;
276
+ z-index: 2000;
277
+ }
278
+
279
+ .dialog_sw,
280
+ .dialog_s,
281
+ .dialog_sizer {
282
+ height: 2px;
283
+ }
skin/adminhtml/default/default/twenga_smartfeed/images/logo-smartfeed.png ADDED
Binary file
skin/adminhtml/default/default/twenga_smartfeed/images/sprite.png ADDED
Binary file
skin/adminhtml/default/default/twenga_smartfeed/images/window_close.png ADDED
Binary file