Plumrocket_Twitter_Facebook_Login - Version 1.4.0

Version Notes

- Added "Subscribe Customer To Email Newsletter" option
- Added "Ask for Birthday" option to the Facebook network configuration
- Fixed bug on Magento registration page
- Minor fixes and modifications

Download this release

Release Info

Developer Plumrocket Team
Extension Plumrocket_Twitter_Facebook_Login
Version 1.4.0
Comparing to
See all releases


Code changes from version 1.3.0 to 1.4.0

app/code/community/Plumrocket/SocialLogin/Block/Page/Html/Header.php CHANGED
@@ -46,7 +46,7 @@ class Plumrocket_SocialLogin_Block_Page_Html_Header extends Mage_Page_Block_Html
46
  }
47
  return $this->getSkinUrl($this->_data['logo_src_rwd_small']);
48
  }
49
-
50
  public function getWelcome()
51
  {
52
  $this->setTemplate('pslogin/page/html/welcome.phtml');
46
  }
47
  return $this->getSkinUrl($this->_data['logo_src_rwd_small']);
48
  }
49
+
50
  public function getWelcome()
51
  {
52
  $this->setTemplate('pslogin/page/html/welcome.phtml');
app/code/community/Plumrocket/SocialLogin/Helper/Data.php CHANGED
@@ -27,7 +27,7 @@ class Plumrocket_SocialLogin_Helper_Data extends Plumrocket_SocialLogin_Helper_M
27
  const DEBUG_MODE = false;
28
 
29
  protected $_buttons = null;
30
- protected $_buttonsPrepared = null;
31
 
32
  public function moduleEnabled()
33
  {
@@ -91,34 +91,38 @@ class Plumrocket_SocialLogin_Helper_Data extends Plumrocket_SocialLogin_Helper_M
91
  }
92
 
93
  if(Mage::getSingleton('customer/session')->isLoggedIn()) {
94
- return false;
95
- }
96
 
97
  return (bool)$this->getButtons();
98
  }
99
 
100
- public function getPhotoPath($checkIsEnabled = true)
101
  {
102
  if($checkIsEnabled && !$this->photoEnabled()) {
103
  return false;
104
  }
105
 
106
- if(!Mage::getSingleton('customer/session')->isLoggedIn()) {
107
- return false;
108
- }
 
109
 
110
- if(!$customerId = Mage::getSingleton('customer/session')->getCustomerId()) {
111
- return false;
112
- }
 
 
 
113
 
114
- $path = Mage::getBaseDir(Mage_Core_Model_Store::URL_TYPE_MEDIA) . DS .'pslogin'. DS .'photo'. DS . $customerId .'.'. Plumrocket_SocialLogin_Model_Account::PHOTO_FILE_EXT;
115
- $pathUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) .'pslogin/photo/' . $customerId .'.'. Plumrocket_SocialLogin_Model_Account::PHOTO_FILE_EXT;
116
 
117
- if(!file_exists($path)) {
118
- return false;
119
- }
120
 
121
- return $pathUrl;
122
  }
123
 
124
  public function isGlobalScope()
@@ -143,43 +147,43 @@ class Plumrocket_SocialLogin_Helper_Data extends Plumrocket_SocialLogin_Helper_M
143
  $websiteCode = $request->getParam('website');
144
 
145
  $defaultStoreId = Mage::app()
146
- ->getWebsite( $byRequest? $websiteCode : null )
147
- ->getDefaultGroup()
148
- ->getDefaultStoreId();
149
-
150
- if(!$defaultStoreId) {
151
- $websites = Mage::app()->getWebsites(true);
152
- foreach($websites as $website) {
153
- $defaultStoreId = $website
154
- ->getDefaultGroup()
155
- ->getDefaultStoreId();
156
-
157
- if ($defaultStoreId) {
158
- break;
159
- }
160
- }
161
- }
162
-
163
- if(!$defaultStoreId) {
164
- $defaultStoreId = 1;
165
- }
166
-
167
- $url = Mage::app()->getStore($defaultStoreId)->getUrl('pslogin/account/login', array('type' => $provider, '_nosid' => true));
168
-
169
- if(false !== ($length = stripos($url, '?'))) {
170
- $url = substr($url, 0, $length);
171
- }
172
-
173
- if($byRequest) {
174
- /*if(Mage::getStoreConfig('web/url/use_store')) {
175
- // $url = str_replace('admin/', '', $url);
176
- }*/
177
- if(Mage::getStoreConfig('web/seo/use_rewrites')) {
178
- $url = str_replace('index.php/', '', $url);
179
- }
180
- }
181
-
182
- return $url;
183
  }
184
 
185
  public function getTypes($onlyEnabled = true)
@@ -202,71 +206,71 @@ class Plumrocket_SocialLogin_Helper_Data extends Plumrocket_SocialLogin_Helper_M
202
  }
203
 
204
  public function getButtons()
205
- {
206
- if (is_null($this->_buttons)) {
207
- $types = $this->getTypes();
208
-
209
- $this->_buttons = array();
210
- foreach ($types as $type) {
211
- $type = Mage::getSingleton("pslogin/$type");
212
- if($type->enabled()) {
213
- $button = $type->getButton();
214
- $this->_buttons[ $button['type'] ] = $button;
215
- }
216
- }
217
- }
218
- return $this->_buttons;
219
- }
220
-
221
- public function getPreparedButtons($part = null)
222
- {
223
- if(is_null($this->_buttonsPrepared)) {
224
- $this->_buttonsPrepared = array(
225
- 'visible' => array(),
226
- 'hidden' => array()
227
- );
228
- $buttons = $this->getButtons();
229
-
230
- $storeName = Mage::app()->getRequest()->getParam('store');
231
- $sortableString = Mage::getStoreConfig('pslogin/general/sortable', $storeName);
232
- $sortable = null;
233
- parse_str($sortableString, $sortable);
234
-
235
- if(is_array($sortable)) {
236
- foreach ($sortable as $partName => $partButtons) {
237
- foreach ($partButtons as $button) {
238
- if(isset($buttons[$button])) {
239
- $this->_buttonsPrepared[$partName][] = $buttons[$button];
240
- unset($buttons[$button]);
241
- }
242
- }
243
- }
244
-
245
- // If has not sortabled enabled buttons.
246
- if(!empty($buttons)) {
247
- if(empty($this->_buttonsPrepared['visible'])) {
248
- $this->_buttonsPrepared['visible'] = array();
249
- }
250
- $this->_buttonsPrepared['visible'] = array_merge($this->_buttonsPrepared['visible'], $buttons);
251
- }
252
-
253
- // If visible list is empty.
254
- if(empty($this->_buttonsPrepared['visible'])) {
255
- $this->_buttonsPrepared['visible'] = $this->_buttonsPrepared['hidden'];
256
- $this->_buttonsPrepared['hidden'] = array();
257
- }
258
-
259
- // Set visible.
260
- foreach($this->_buttonsPrepared['visible'] as &$btn) {
261
- $btn['visible'] = true;
262
- }
263
- }
264
- }
265
-
266
- return isset($this->_buttonsPrepared[$part]) ?
267
- $this->_buttonsPrepared[$part] :
268
- array_merge($this->_buttonsPrepared['visible'], $this->_buttonsPrepared['hidden']);
269
- }
270
 
271
  public function refererLink($value = false)
272
  {
@@ -352,65 +356,65 @@ class Plumrocket_SocialLogin_Helper_Data extends Plumrocket_SocialLogin_Helper_M
352
  }
353
 
354
  public function getRedirectUrl($after = 'login')
355
- {
356
- $redirectUrl = null;
357
- $redirect = $this->getRedirect();
358
- switch($redirect[$after]) {
359
-
360
- case '__referer__':
361
- if(!$referer = Mage::app()->getRequest()->getParam(self::REFERER_QUERY_PARAM_NAME)) {
362
- $referer = $this->refererLink();
363
- }
364
-
365
- if ($referer) {
366
- // Rebuild referer URL to handle the case when SID was changed
367
- $referer = Mage::getSingleton('core/url')
368
- ->getRebuiltUrl( Mage::helper('core')->urlDecode($referer));
369
-
370
- // Remove params, like SID.
371
- // $referer = preg_replace('#SID=[[:alnum:]]+#', '', $referer);
372
  $referer = strtok($referer, '?');
373
 
374
- if ($this->isUrlInternal($referer)) {
375
- $redirectUrl = $referer;
376
- }
377
- }else{
378
- $redirectUrl = Mage::helper('customer')->getDashboardUrl();
379
- }
380
- break;
381
-
382
- case '__custom__':
383
- $redirectUrl = $redirect["{$after}_link"];
384
- if (!$this->isUrlInternal($redirectUrl)) {
385
- $redirectUrl = Mage::getBaseUrl() . $redirectUrl;
386
- }
387
- break;
388
-
389
- case '__dashboard__':
390
- $redirectUrl = Mage::helper('customer')->getDashboardUrl();
391
- break;
392
-
393
- default:
394
- if(is_numeric($redirect[$after])) {
395
- $redirectUrl = Mage::helper('cms/page')->getPageUrl($redirect[$after]);
396
- }
397
- }
398
-
399
- return $redirectUrl;
400
- }
401
-
402
- public function isUrlInternal($url)
403
- {
404
- return (stripos($url, 'http') === 0);
405
- /*if (strpos($url, 'http') !== false) {
406
- if ((strpos($url, Mage::app()->getStore()->getBaseUrl()) === 0)
407
- || (strpos($url, Mage::app()->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK, true)) === 0)
408
- ) {
409
- return true;
410
- }
411
- }
412
- return false;*/
413
- }
414
 
415
  public function moduleInvitationsEnabled()
416
  {
27
  const DEBUG_MODE = false;
28
 
29
  protected $_buttons = null;
30
+ protected $_buttonsPrepared = null;
31
 
32
  public function moduleEnabled()
33
  {
91
  }
92
 
93
  if(Mage::getSingleton('customer/session')->isLoggedIn()) {
94
+ return false;
95
+ }
96
 
97
  return (bool)$this->getButtons();
98
  }
99
 
100
+ public function getPhotoPath($checkIsEnabled = true, $customerId = null)
101
  {
102
  if($checkIsEnabled && !$this->photoEnabled()) {
103
  return false;
104
  }
105
 
106
+ if ($customerId === null) {
107
+ if(!Mage::getSingleton('customer/session')->isLoggedIn()) {
108
+ return false;
109
+ }
110
 
111
+ if(!$customerId = Mage::getSingleton('customer/session')->getCustomerId()) {
112
+ return false;
113
+ }
114
+ } else if (!is_numeric($customerId) || $customerId <= 0) {
115
+ return false;
116
+ }
117
 
118
+ $path = Mage::getBaseDir(Mage_Core_Model_Store::URL_TYPE_MEDIA) . DS .'pslogin'. DS .'photo'. DS . $customerId .'.'. Plumrocket_SocialLogin_Model_Account::PHOTO_FILE_EXT;
119
+ $pathUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) .'pslogin/photo/' . $customerId .'.'. Plumrocket_SocialLogin_Model_Account::PHOTO_FILE_EXT;
120
 
121
+ if(!file_exists($path)) {
122
+ return false;
123
+ }
124
 
125
+ return $pathUrl;
126
  }
127
 
128
  public function isGlobalScope()
147
  $websiteCode = $request->getParam('website');
148
 
149
  $defaultStoreId = Mage::app()
150
+ ->getWebsite( $byRequest? $websiteCode : null )
151
+ ->getDefaultGroup()
152
+ ->getDefaultStoreId();
153
+
154
+ if(!$defaultStoreId) {
155
+ $websites = Mage::app()->getWebsites(true);
156
+ foreach($websites as $website) {
157
+ $defaultStoreId = $website
158
+ ->getDefaultGroup()
159
+ ->getDefaultStoreId();
160
+
161
+ if ($defaultStoreId) {
162
+ break;
163
+ }
164
+ }
165
+ }
166
+
167
+ if(!$defaultStoreId) {
168
+ $defaultStoreId = 1;
169
+ }
170
+
171
+ $url = Mage::app()->getStore($defaultStoreId)->getUrl('pslogin/account/login', array('type' => $provider, '_nosid' => true));
172
+
173
+ if(false !== ($length = stripos($url, '?'))) {
174
+ $url = substr($url, 0, $length);
175
+ }
176
+
177
+ if($byRequest) {
178
+ /*if(Mage::getStoreConfig('web/url/use_store')) {
179
+ // $url = str_replace('admin/', '', $url);
180
+ }*/
181
+ if(Mage::getStoreConfig('web/seo/use_rewrites')) {
182
+ $url = str_replace('index.php/', '', $url);
183
+ }
184
+ }
185
+
186
+ return $url;
187
  }
188
 
189
  public function getTypes($onlyEnabled = true)
206
  }
207
 
208
  public function getButtons()
209
+ {
210
+ if (is_null($this->_buttons)) {
211
+ $types = $this->getTypes();
212
+
213
+ $this->_buttons = array();
214
+ foreach ($types as $type) {
215
+ $type = Mage::getSingleton("pslogin/$type");
216
+ if($type->enabled()) {
217
+ $button = $type->getButton();
218
+ $this->_buttons[ $button['type'] ] = $button;
219
+ }
220
+ }
221
+ }
222
+ return $this->_buttons;
223
+ }
224
+
225
+ public function getPreparedButtons($part = null)
226
+ {
227
+ if(is_null($this->_buttonsPrepared)) {
228
+ $this->_buttonsPrepared = array(
229
+ 'visible' => array(),
230
+ 'hidden' => array()
231
+ );
232
+ $buttons = $this->getButtons();
233
+
234
+ $storeName = Mage::app()->getRequest()->getParam('store');
235
+ $sortableString = Mage::getStoreConfig('pslogin/general/sortable', $storeName);
236
+ $sortable = null;
237
+ parse_str($sortableString, $sortable);
238
+
239
+ if(is_array($sortable)) {
240
+ foreach ($sortable as $partName => $partButtons) {
241
+ foreach ($partButtons as $button) {
242
+ if(isset($buttons[$button])) {
243
+ $this->_buttonsPrepared[$partName][] = $buttons[$button];
244
+ unset($buttons[$button]);
245
+ }
246
+ }
247
+ }
248
+
249
+ // If has not sortabled enabled buttons.
250
+ if(!empty($buttons)) {
251
+ if(empty($this->_buttonsPrepared['visible'])) {
252
+ $this->_buttonsPrepared['visible'] = array();
253
+ }
254
+ $this->_buttonsPrepared['visible'] = array_merge($this->_buttonsPrepared['visible'], $buttons);
255
+ }
256
+
257
+ // If visible list is empty.
258
+ if(empty($this->_buttonsPrepared['visible'])) {
259
+ $this->_buttonsPrepared['visible'] = $this->_buttonsPrepared['hidden'];
260
+ $this->_buttonsPrepared['hidden'] = array();
261
+ }
262
+
263
+ // Set visible.
264
+ foreach($this->_buttonsPrepared['visible'] as &$btn) {
265
+ $btn['visible'] = true;
266
+ }
267
+ }
268
+ }
269
+
270
+ return isset($this->_buttonsPrepared[$part]) ?
271
+ $this->_buttonsPrepared[$part] :
272
+ array_merge($this->_buttonsPrepared['visible'], $this->_buttonsPrepared['hidden']);
273
+ }
274
 
275
  public function refererLink($value = false)
276
  {
356
  }
357
 
358
  public function getRedirectUrl($after = 'login')
359
+ {
360
+ $redirectUrl = null;
361
+ $redirect = $this->getRedirect();
362
+ switch($redirect[$after]) {
363
+
364
+ case '__referer__':
365
+ if(!$referer = Mage::app()->getRequest()->getParam(self::REFERER_QUERY_PARAM_NAME)) {
366
+ $referer = $this->refererLink();
367
+ }
368
+
369
+ if ($referer) {
370
+ // Rebuild referer URL to handle the case when SID was changed
371
+ $referer = Mage::getSingleton('core/url')
372
+ ->getRebuiltUrl( Mage::helper('core')->urlDecode($referer));
373
+
374
+ // Remove params, like SID.
375
+ // $referer = preg_replace('#SID=[[:alnum:]]+#', '', $referer);
376
  $referer = strtok($referer, '?');
377
 
378
+ if ($this->isUrlInternal($referer)) {
379
+ $redirectUrl = $referer;
380
+ }
381
+ }else{
382
+ $redirectUrl = Mage::helper('customer')->getDashboardUrl();
383
+ }
384
+ break;
385
+
386
+ case '__custom__':
387
+ $redirectUrl = $redirect["{$after}_link"];
388
+ if (!$this->isUrlInternal($redirectUrl)) {
389
+ $redirectUrl = Mage::getBaseUrl() . $redirectUrl;
390
+ }
391
+ break;
392
+
393
+ case '__dashboard__':
394
+ $redirectUrl = Mage::helper('customer')->getDashboardUrl();
395
+ break;
396
+
397
+ default:
398
+ if(is_numeric($redirect[$after])) {
399
+ $redirectUrl = Mage::helper('cms/page')->getPageUrl($redirect[$after]);
400
+ }
401
+ }
402
+
403
+ return $redirectUrl;
404
+ }
405
+
406
+ public function isUrlInternal($url)
407
+ {
408
+ return (stripos($url, 'http') === 0);
409
+ /*if (strpos($url, 'http') !== false) {
410
+ if ((strpos($url, Mage::app()->getStore()->getBaseUrl()) === 0)
411
+ || (strpos($url, Mage::app()->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK, true)) === 0)
412
+ ) {
413
+ return true;
414
+ }
415
+ }
416
+ return false;*/
417
+ }
418
 
419
  public function moduleInvitationsEnabled()
420
  {
app/code/community/Plumrocket/SocialLogin/Model/Account.php CHANGED
@@ -94,7 +94,7 @@ class Plumrocket_SocialLogin_Model_Account extends Mage_Core_Model_Abstract
94
 
95
  $customerId = $collection->getFirstItem()->getData('customer_id');
96
  }
97
-
98
  return $customerId;
99
  }
100
 
@@ -131,7 +131,7 @@ class Plumrocket_SocialLogin_Model_Account extends Mage_Core_Model_Abstract
131
  $customerId = 0;
132
  $errors = array();
133
  $customer = Mage::getSingleton('customer/customer')->setId(null);
134
-
135
  try{
136
  $customer->setData($this->getUserData())
137
  ->setConfirmation($this->getUserData('password'))
@@ -139,7 +139,7 @@ class Plumrocket_SocialLogin_Model_Account extends Mage_Core_Model_Abstract
139
  ->setData('is_active', 1)
140
  ->getGroupId();
141
 
142
- if(!Mage::helper('pslogin')->isFakeMail( $this->getUserData('email') )) {
143
  $customer->setIsSubscribed(1);
144
  }
145
 
@@ -169,7 +169,7 @@ class Plumrocket_SocialLogin_Model_Account extends Mage_Core_Model_Abstract
169
  protected function _validateErrors($customer)
170
  {
171
  $errors = array();
172
-
173
  // Date of birth.
174
  $entityType = Mage::getSingleton('eav/config')->getEntityType('customer');
175
  $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'dob');
@@ -292,7 +292,7 @@ class Plumrocket_SocialLogin_Model_Account extends Mage_Core_Model_Abstract
292
  $io->mkdir($this->_photoDir);
293
  if($file = $this->_loadFile($fileUrl)) {
294
  if(file_put_contents($tmpPath, $file) > 0) {
295
-
296
  $image = new Varien_Image($tmpPath);
297
  $image->resize($this->_photoSize);
298
 
@@ -349,7 +349,7 @@ class Plumrocket_SocialLogin_Model_Account extends Mage_Core_Model_Abstract
349
  return $body;
350
  }
351
  }
352
-
353
  public function postToMail()
354
  {
355
  if(!Mage::helper('pslogin')->isFakeMail( $this->getUserData('email') )) {
@@ -433,7 +433,7 @@ class Plumrocket_SocialLogin_Model_Account extends Mage_Core_Model_Abstract
433
  if($paramsStr) {
434
  $url .= '?'. urldecode($paramsStr);
435
  }
436
-
437
  $curl = is_resource($curlResource)? $curlResource : curl_init();
438
 
439
  if($method == 'POST') {
94
 
95
  $customerId = $collection->getFirstItem()->getData('customer_id');
96
  }
97
+
98
  return $customerId;
99
  }
100
 
131
  $customerId = 0;
132
  $errors = array();
133
  $customer = Mage::getSingleton('customer/customer')->setId(null);
134
+
135
  try{
136
  $customer->setData($this->getUserData())
137
  ->setConfirmation($this->getUserData('password'))
139
  ->setData('is_active', 1)
140
  ->getGroupId();
141
 
142
+ if(!Mage::helper('pslogin')->isFakeMail($this->getUserData('email')) && Mage::getStoreConfig('pslogin/general/enable_subscription')) {
143
  $customer->setIsSubscribed(1);
144
  }
145
 
169
  protected function _validateErrors($customer)
170
  {
171
  $errors = array();
172
+
173
  // Date of birth.
174
  $entityType = Mage::getSingleton('eav/config')->getEntityType('customer');
175
  $attribute = Mage::getModel('customer/attribute')->loadByCode($entityType, 'dob');
292
  $io->mkdir($this->_photoDir);
293
  if($file = $this->_loadFile($fileUrl)) {
294
  if(file_put_contents($tmpPath, $file) > 0) {
295
+
296
  $image = new Varien_Image($tmpPath);
297
  $image->resize($this->_photoSize);
298
 
349
  return $body;
350
  }
351
  }
352
+
353
  public function postToMail()
354
  {
355
  if(!Mage::helper('pslogin')->isFakeMail( $this->getUserData('email') )) {
433
  if($paramsStr) {
434
  $url .= '?'. urldecode($paramsStr);
435
  }
436
+
437
  $curl = is_resource($curlResource)? $curlResource : curl_init();
438
 
439
  if($method == 'POST') {
app/code/community/Plumrocket/SocialLogin/Model/Facebook.php CHANGED
@@ -19,7 +19,7 @@
19
  class Plumrocket_SocialLogin_Model_Facebook extends Plumrocket_SocialLogin_Model_Account
20
  {
21
  protected $_type = 'facebook';
22
-
23
  protected $_url = 'https://www.facebook.com/dialog/oauth';
24
 
25
  protected $_fields = array(
@@ -33,16 +33,20 @@ class Plumrocket_SocialLogin_Model_Facebook extends Plumrocket_SocialLogin_Model
33
  );
34
 
35
  protected $_buttonLinkParams = array(
36
- 'scope' => 'email,user_birthday',
37
  'display' => 'popup',
38
  );
39
 
40
  protected $_popupSize = array(650, 350);
41
 
42
  public function _construct()
43
- {
44
  parent::_construct();
45
-
 
 
 
 
46
  $this->_buttonLinkParams = array_merge($this->_buttonLinkParams, array(
47
  'client_id' => $this->_applicationId,
48
  'redirect_uri' => $this->_redirectUri,
@@ -64,31 +68,31 @@ class Plumrocket_SocialLogin_Model_Facebook extends Plumrocket_SocialLogin_Model
64
  'code' => $response,
65
  'redirect_uri' => $this->_redirectUri
66
  );
67
-
68
  $token = null;
69
  if($response = $this->_call('https://graph.facebook.com/oauth/access_token', $params)) {
70
  parse_str($response, $token);
71
  }
72
  $this->_setLog($response, true);
73
  $this->_setLog($token, true);
74
-
75
  if (isset($token['access_token'])) {
76
  $params = array(
77
  'access_token' => $token['access_token'],
78
  'fields' => implode(',', $this->_fields)
79
  );
80
-
81
  if($response = $this->_call('https://graph.facebook.com/me', $params)) {
82
  $data = json_decode($response, true);
83
  }
84
-
85
  if(!empty($data['id'])) {
86
  $data['picture'] = 'https://graph.facebook.com/'. $data['id'] .'/picture?return_ssl_resources=true';
87
  }
88
-
89
  $this->_setLog($data, true);
90
  }
91
-
92
  if(!$this->_userData = $this->_prepareData($data)) {
93
  return false;
94
  }
19
  class Plumrocket_SocialLogin_Model_Facebook extends Plumrocket_SocialLogin_Model_Account
20
  {
21
  protected $_type = 'facebook';
22
+
23
  protected $_url = 'https://www.facebook.com/dialog/oauth';
24
 
25
  protected $_fields = array(
33
  );
34
 
35
  protected $_buttonLinkParams = array(
36
+ 'scope' => 'email',
37
  'display' => 'popup',
38
  );
39
 
40
  protected $_popupSize = array(650, 350);
41
 
42
  public function _construct()
43
+ {
44
  parent::_construct();
45
+
46
+ if (Mage::getStoreConfig('pslogin/'. $this->_type .'/enable_birthday')) {
47
+ $this->_buttonLinkParams['scope'] .= ',user_birthday';
48
+ }
49
+
50
  $this->_buttonLinkParams = array_merge($this->_buttonLinkParams, array(
51
  'client_id' => $this->_applicationId,
52
  'redirect_uri' => $this->_redirectUri,
68
  'code' => $response,
69
  'redirect_uri' => $this->_redirectUri
70
  );
71
+
72
  $token = null;
73
  if($response = $this->_call('https://graph.facebook.com/oauth/access_token', $params)) {
74
  parse_str($response, $token);
75
  }
76
  $this->_setLog($response, true);
77
  $this->_setLog($token, true);
78
+
79
  if (isset($token['access_token'])) {
80
  $params = array(
81
  'access_token' => $token['access_token'],
82
  'fields' => implode(',', $this->_fields)
83
  );
84
+
85
  if($response = $this->_call('https://graph.facebook.com/me', $params)) {
86
  $data = json_decode($response, true);
87
  }
88
+
89
  if(!empty($data['id'])) {
90
  $data['picture'] = 'https://graph.facebook.com/'. $data['id'] .'/picture?return_ssl_resources=true';
91
  }
92
+
93
  $this->_setLog($data, true);
94
  }
95
+
96
  if(!$this->_userData = $this->_prepareData($data)) {
97
  return false;
98
  }
app/code/community/Plumrocket/SocialLogin/controllers/AccountController.php CHANGED
@@ -210,7 +210,9 @@ class Plumrocket_SocialLogin_AccountController extends Mage_Core_Controller_Fron
210
  }
211
 
212
  // Loged in.
213
- $session->loginById($customerId);
 
 
214
 
215
  // Unset referer link.
216
  $this->_getHelper()->refererLink(null);
@@ -222,13 +224,17 @@ class Plumrocket_SocialLogin_AccountController extends Mage_Core_Controller_Fron
222
  'redirectUrl' => $redirectUrl
223
  )));
224
  }else{
225
- $this->getResponse()->setBody('<script type="text/javascript">if(window.opener && window.opener.location && !window.opener.closed) { window.close(); window.opener.location.href = "'.$redirectUrl.'"; }else{ window.location.href = "'.$redirectUrl.'"; }</script>');
 
 
 
 
226
  }
227
  }
228
 
229
  public function runjsAction()
230
  {
231
- $this->getResponse()->setBody('<script type="text/javascript">'. $this->getRequest()->getPost('js') .'</script>');
232
  }
233
 
234
  protected function _windowClose()
@@ -239,12 +245,17 @@ class Plumrocket_SocialLogin_AccountController extends Mage_Core_Controller_Fron
239
  'windowClose' => true
240
  )));
241
  }else{
242
- $this->getResponse()->setBody('<script type="text/javascript">window.close();</script>');
243
  }
244
  // $this->getResponse()->setBody('<script type="text/javascript">if(window.name == "pslogin_popup") { window.close(); }</script>');
245
  return true;
246
  }
247
 
 
 
 
 
 
248
  protected function _dispatchRegisterSuccess($customer)
249
  {
250
  Mage::dispatchEvent('customer_register_success',
210
  }
211
 
212
  // Loged in.
213
+ if ($session->loginById($customerId)) {
214
+ $session->renewSession();
215
+ }
216
 
217
  // Unset referer link.
218
  $this->_getHelper()->refererLink(null);
224
  'redirectUrl' => $redirectUrl
225
  )));
226
  }else{
227
+ $this->getResponse()->setBody($this->_jsWrap('if(window.opener && window.opener.location && !window.opener.closed) { window.close(); window.opener.location.href = "'.$redirectUrl.'"; }else{ window.location.href = "'.$redirectUrl.'"; }'));
228
+
229
+ Mage::dispatchEvent('prsociallogin_login_success',
230
+ array('account_controller' => $this, 'redirectUrl' => $redirectUrl)
231
+ );
232
  }
233
  }
234
 
235
  public function runjsAction()
236
  {
237
+ $this->getResponse()->setBody($this->_jsWrap($this->getRequest()->getPost('js')));
238
  }
239
 
240
  protected function _windowClose()
245
  'windowClose' => true
246
  )));
247
  }else{
248
+ $this->getResponse()->setBody($this->_jsWrap('window.close();'));
249
  }
250
  // $this->getResponse()->setBody('<script type="text/javascript">if(window.name == "pslogin_popup") { window.close(); }</script>');
251
  return true;
252
  }
253
 
254
+ protected function _jsWrap($js)
255
+ {
256
+ return '<html><head></head><body><script type="text/javascript">'.$js.'</script></body></html>';
257
+ }
258
+
259
  protected function _dispatchRegisterSuccess($customer)
260
  {
261
  Mage::dispatchEvent('customer_register_success',
app/code/community/Plumrocket/SocialLogin/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Plumrocket_SocialLogin>
5
- <version>1.3.0</version>
6
  </Plumrocket_SocialLogin>
7
  </modules>
8
  <frontend>
@@ -147,6 +147,7 @@
147
  <enable_for_login>1</enable_for_login>
148
  <enable_for_register>1</enable_for_register>
149
  <validate_ignore>1</validate_ignore>
 
150
  <enable_photo>1</enable_photo>
151
  <redirect_for_login>__referer__</redirect_for_login>
152
  <redirect_for_register>__referer__</redirect_for_register>
@@ -158,6 +159,7 @@
158
  <page>2</page>
159
  </share>
160
  <facebook>
 
161
  <login_btn_text>Login with Facebook</login_btn_text>
162
  <register_btn_text>Register with Facebook</register_btn_text>
163
  </facebook>
2
  <config>
3
  <modules>
4
  <Plumrocket_SocialLogin>
5
+ <version>1.4.0</version>
6
  </Plumrocket_SocialLogin>
7
  </modules>
8
  <frontend>
147
  <enable_for_login>1</enable_for_login>
148
  <enable_for_register>1</enable_for_register>
149
  <validate_ignore>1</validate_ignore>
150
+ <enable_subscription>1</enable_subscription>
151
  <enable_photo>1</enable_photo>
152
  <redirect_for_login>__referer__</redirect_for_login>
153
  <redirect_for_register>__referer__</redirect_for_register>
159
  <page>2</page>
160
  </share>
161
  <facebook>
162
+ <enable_birthday>1</enable_birthday>
163
  <login_btn_text>Login with Facebook</login_btn_text>
164
  <register_btn_text>Register with Facebook</register_btn_text>
165
  </facebook>
app/code/community/Plumrocket/SocialLogin/etc/system.xml CHANGED
@@ -9,7 +9,7 @@
9
  <sort_order>101</sort_order>
10
  </plumrocket>
11
  </tabs>
12
-
13
  <sections>
14
  <pslogin>
15
  <label>Twitter &amp; Facebook Login</label>
@@ -19,7 +19,7 @@
19
  <show_in_default>1</show_in_default>
20
  <show_in_website>1</show_in_website>
21
  <show_in_store>1</show_in_store>
22
-
23
  <groups>
24
  <general>
25
  <label>General</label>
@@ -29,7 +29,7 @@
29
  <show_in_default>1</show_in_default>
30
  <show_in_website>1</show_in_website>
31
  <show_in_store>1</show_in_store>
32
-
33
  <fields>
34
  <version translate="label">
35
  <frontend_type>text</frontend_type>
@@ -52,7 +52,7 @@
52
  <label>Replace Templates</label>
53
  <frontend_type>select</frontend_type>
54
  <source_model>adminhtml/system_config_source_yesno</source_model>
55
- <sort_order>3</sort_order>
56
  <show_in_default>1</show_in_default>
57
  <show_in_website>1</show_in_website>
58
  <show_in_store>1</show_in_store>
@@ -62,7 +62,7 @@
62
  <label>Display on Login Form</label>
63
  <frontend_type>select</frontend_type>
64
  <source_model>adminhtml/system_config_source_yesno</source_model>
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>
@@ -72,7 +72,7 @@
72
  <label>Display on Registration Form</label>
73
  <frontend_type>select</frontend_type>
74
  <source_model>adminhtml/system_config_source_yesno</source_model>
75
- <sort_order>5</sort_order>
76
  <show_in_default>1</show_in_default>
77
  <show_in_website>1</show_in_website>
78
  <show_in_store>1</show_in_store>
@@ -82,17 +82,27 @@
82
  <label>Ignore Missing Data from Social Networks</label>
83
  <frontend_type>select</frontend_type>
84
  <source_model>adminhtml/system_config_source_yesno</source_model>
85
- <sort_order>6</sort_order>
86
  <show_in_default>1</show_in_default>
87
  <show_in_website>1</show_in_website>
88
  <show_in_store>1</show_in_store>
89
  <comment>Many (but not all) social networks share only limited user profile/personal information. If this option is enabled, all required fields in magento that are missing will be pre-filled with temporary data to speed-up the registration process. If this option is set to "No" - the user will be sent to the registration form to enter missing info.</comment>
90
  </validate_ignore>
 
 
 
 
 
 
 
 
 
 
91
  <enable_photo translate="label">
92
  <label>Display Customer Photo</label>
93
  <frontend_type>select</frontend_type>
94
  <source_model>adminhtml/system_config_source_yesno</source_model>
95
- <sort_order>7</sort_order>
96
  <show_in_default>1</show_in_default>
97
  <show_in_website>1</show_in_website>
98
  <show_in_store>1</show_in_store>
@@ -102,7 +112,7 @@
102
  <label>Login Success Page</label>
103
  <frontend_type>select</frontend_type>
104
  <source_model>pslogin/system_config_source_redirectto</source_model>
105
- <sort_order>8</sort_order>
106
  <show_in_default>1</show_in_default>
107
  <show_in_website>1</show_in_website>
108
  <show_in_store>1</show_in_store>
@@ -111,7 +121,7 @@
111
  <redirect_for_login_link translate="label">
112
  <label>Login Custom Success Page URL</label>
113
  <frontend_type>text</frontend_type>
114
- <sort_order>9</sort_order>
115
  <show_in_default>1</show_in_default>
116
  <show_in_website>1</show_in_website>
117
  <show_in_store>1</show_in_store>
@@ -121,7 +131,7 @@
121
  <label>Registration Success Page</label>
122
  <frontend_type>select</frontend_type>
123
  <source_model>pslogin/system_config_source_redirectto</source_model>
124
- <sort_order>10</sort_order>
125
  <show_in_default>1</show_in_default>
126
  <show_in_website>1</show_in_website>
127
  <show_in_store>1</show_in_store>
@@ -130,7 +140,7 @@
130
  <redirect_for_register_link translate="label">
131
  <label>Registration Custom Success Page URL</label>
132
  <frontend_type>text</frontend_type>
133
- <sort_order>11</sort_order>
134
  <show_in_default>1</show_in_default>
135
  <show_in_website>1</show_in_website>
136
  <show_in_store>1</show_in_store>
@@ -140,14 +150,14 @@
140
  <label>Social Buttons Sorting</label>
141
  <frontend_type>text</frontend_type>
142
  <frontend_model>pslogin/system_config_sortable</frontend_model>
143
- <sort_order>12</sort_order>
144
  <show_in_default>1</show_in_default>
145
  <show_in_website>1</show_in_website>
146
  <show_in_store>1</show_in_store>
147
  </sortable_drag_and_drop>
148
  <sortable translate="label">
149
  <frontend_type>hidden</frontend_type>
150
- <sort_order>13</sort_order>
151
  <show_in_default>1</show_in_default>
152
  <show_in_website>1</show_in_website>
153
  <show_in_store>1</show_in_store>
@@ -164,7 +174,7 @@
164
  <show_in_default>1</show_in_default>
165
  <show_in_website>1</show_in_website>
166
  <show_in_store>1</show_in_store>
167
-
168
  <fields>
169
  <enable translate="label">
170
  <label>Enable</label>
@@ -227,7 +237,7 @@
227
  <show_in_default>1</show_in_default>
228
  <show_in_website>1</show_in_website>
229
  <show_in_store>1</show_in_store>
230
-
231
  <fields>
232
  <enable translate="label">
233
  <label>Enable</label>
@@ -256,6 +266,16 @@
256
  <show_in_website>1</show_in_website>
257
  <show_in_store>1</show_in_store>
258
  </secret>
 
 
 
 
 
 
 
 
 
 
259
  <icon_btn translate="label">
260
  <label>Small Icon Button</label>
261
  <frontend_type>image</frontend_type>
9
  <sort_order>101</sort_order>
10
  </plumrocket>
11
  </tabs>
12
+
13
  <sections>
14
  <pslogin>
15
  <label>Twitter &amp; Facebook Login</label>
19
  <show_in_default>1</show_in_default>
20
  <show_in_website>1</show_in_website>
21
  <show_in_store>1</show_in_store>
22
+
23
  <groups>
24
  <general>
25
  <label>General</label>
29
  <show_in_default>1</show_in_default>
30
  <show_in_website>1</show_in_website>
31
  <show_in_store>1</show_in_store>
32
+
33
  <fields>
34
  <version translate="label">
35
  <frontend_type>text</frontend_type>
52
  <label>Replace Templates</label>
53
  <frontend_type>select</frontend_type>
54
  <source_model>adminhtml/system_config_source_yesno</source_model>
55
+ <sort_order>4</sort_order>
56
  <show_in_default>1</show_in_default>
57
  <show_in_website>1</show_in_website>
58
  <show_in_store>1</show_in_store>
62
  <label>Display on Login Form</label>
63
  <frontend_type>select</frontend_type>
64
  <source_model>adminhtml/system_config_source_yesno</source_model>
65
+ <sort_order>5</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>
72
  <label>Display on Registration Form</label>
73
  <frontend_type>select</frontend_type>
74
  <source_model>adminhtml/system_config_source_yesno</source_model>
75
+ <sort_order>6</sort_order>
76
  <show_in_default>1</show_in_default>
77
  <show_in_website>1</show_in_website>
78
  <show_in_store>1</show_in_store>
82
  <label>Ignore Missing Data from Social Networks</label>
83
  <frontend_type>select</frontend_type>
84
  <source_model>adminhtml/system_config_source_yesno</source_model>
85
+ <sort_order>7</sort_order>
86
  <show_in_default>1</show_in_default>
87
  <show_in_website>1</show_in_website>
88
  <show_in_store>1</show_in_store>
89
  <comment>Many (but not all) social networks share only limited user profile/personal information. If this option is enabled, all required fields in magento that are missing will be pre-filled with temporary data to speed-up the registration process. If this option is set to "No" - the user will be sent to the registration form to enter missing info.</comment>
90
  </validate_ignore>
91
+ <enable_subscription translate="label">
92
+ <label>Subscribe Customer To Email Newsletter</label>
93
+ <frontend_type>select</frontend_type>
94
+ <source_model>adminhtml/system_config_source_yesno</source_model>
95
+ <sort_order>8</sort_order>
96
+ <show_in_default>1</show_in_default>
97
+ <show_in_website>1</show_in_website>
98
+ <show_in_store>1</show_in_store>
99
+ <comment>Automatically sign up customer to the Newsletter Subscribers list during the registration</comment>
100
+ </enable_subscription>
101
  <enable_photo translate="label">
102
  <label>Display Customer Photo</label>
103
  <frontend_type>select</frontend_type>
104
  <source_model>adminhtml/system_config_source_yesno</source_model>
105
+ <sort_order>9</sort_order>
106
  <show_in_default>1</show_in_default>
107
  <show_in_website>1</show_in_website>
108
  <show_in_store>1</show_in_store>
112
  <label>Login Success Page</label>
113
  <frontend_type>select</frontend_type>
114
  <source_model>pslogin/system_config_source_redirectto</source_model>
115
+ <sort_order>10</sort_order>
116
  <show_in_default>1</show_in_default>
117
  <show_in_website>1</show_in_website>
118
  <show_in_store>1</show_in_store>
121
  <redirect_for_login_link translate="label">
122
  <label>Login Custom Success Page URL</label>
123
  <frontend_type>text</frontend_type>
124
+ <sort_order>11</sort_order>
125
  <show_in_default>1</show_in_default>
126
  <show_in_website>1</show_in_website>
127
  <show_in_store>1</show_in_store>
131
  <label>Registration Success Page</label>
132
  <frontend_type>select</frontend_type>
133
  <source_model>pslogin/system_config_source_redirectto</source_model>
134
+ <sort_order>12</sort_order>
135
  <show_in_default>1</show_in_default>
136
  <show_in_website>1</show_in_website>
137
  <show_in_store>1</show_in_store>
140
  <redirect_for_register_link translate="label">
141
  <label>Registration Custom Success Page URL</label>
142
  <frontend_type>text</frontend_type>
143
+ <sort_order>13</sort_order>
144
  <show_in_default>1</show_in_default>
145
  <show_in_website>1</show_in_website>
146
  <show_in_store>1</show_in_store>
150
  <label>Social Buttons Sorting</label>
151
  <frontend_type>text</frontend_type>
152
  <frontend_model>pslogin/system_config_sortable</frontend_model>
153
+ <sort_order>14</sort_order>
154
  <show_in_default>1</show_in_default>
155
  <show_in_website>1</show_in_website>
156
  <show_in_store>1</show_in_store>
157
  </sortable_drag_and_drop>
158
  <sortable translate="label">
159
  <frontend_type>hidden</frontend_type>
160
+ <sort_order>15</sort_order>
161
  <show_in_default>1</show_in_default>
162
  <show_in_website>1</show_in_website>
163
  <show_in_store>1</show_in_store>
174
  <show_in_default>1</show_in_default>
175
  <show_in_website>1</show_in_website>
176
  <show_in_store>1</show_in_store>
177
+
178
  <fields>
179
  <enable translate="label">
180
  <label>Enable</label>
237
  <show_in_default>1</show_in_default>
238
  <show_in_website>1</show_in_website>
239
  <show_in_store>1</show_in_store>
240
+
241
  <fields>
242
  <enable translate="label">
243
  <label>Enable</label>
266
  <show_in_website>1</show_in_website>
267
  <show_in_store>1</show_in_store>
268
  </secret>
269
+ <enable_birthday translate="label">
270
+ <label>Ask for Birthday</label>
271
+ <frontend_type>select</frontend_type>
272
+ <source_model>adminhtml/system_config_source_yesno</source_model>
273
+ <sort_order>4</sort_order>
274
+ <show_in_default>1</show_in_default>
275
+ <show_in_website>1</show_in_website>
276
+ <show_in_store>1</show_in_store>
277
+ <comment>Request customer's birthday date from Facebook</comment>
278
+ </enable_birthday>
279
  <icon_btn translate="label">
280
  <label>Small Icon Button</label>
281
  <frontend_type>image</frontend_type>
app/etc/modules/Plumrocket_SocialLogin.xml CHANGED
@@ -4,7 +4,7 @@
4
  <Plumrocket_SocialLogin>
5
  <active>true</active>
6
  <codePool>community</codePool>
7
- <version>1.3.0</version>
8
  <name>Twitter &amp; Facebook Login</name>
9
  <wiki>http://wiki.plumrocket.com/wiki/Magento_Twitter_and_Facebook_Login_v1.x_Extension</wiki>
10
  <depends>
4
  <Plumrocket_SocialLogin>
5
  <active>true</active>
6
  <codePool>community</codePool>
7
+ <version>1.4.0</version>
8
  <name>Twitter &amp; Facebook Login</name>
9
  <wiki>http://wiki.plumrocket.com/wiki/Magento_Twitter_and_Facebook_Login_v1.x_Extension</wiki>
10
  <depends>
package.xml CHANGED
@@ -1,20 +1,21 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Plumrocket_Twitter_Facebook_Login</name>
4
- <version>1.3.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://wiki.plumrocket.net/wiki/EULA">End-user License Agreement</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Plumrocket Twitter &amp; Facebook Login v1.x was designed to help online store owners reach as many customers as possible. Increase sales, allow clients to use Magento Facebook Login &amp; Twitter Login free to quickly register &amp; place order.</summary>
10
  <description>Plumrocket Twitter &amp; Facebook Login is a free magento extension that will let online store owners benefit from all the social media advantages. It helps to increase conversion rates by allowing your customers quickly login and place order.</description>
11
- <notes>- Added compatibility with the latest version of Social Login Pro extension supporting Alipay and WeChat social networks&#xD;
12
- - Minor fixes and modifications&#xD;
13
- </notes>
 
14
  <authors><author><name>Plumrocket Team</name><user>plumrocket</user><email>support@plumrocket.com</email></author></authors>
15
- <date>2016-05-11</date>
16
- <time>12:34:57</time>
17
- <contents><target name="mageetc"><dir name="modules"><file name="Plumrocket_SocialLogin.xml" hash="e7029c26dbf5f6b022ac8ffcf8a5b8fe"/></dir></target><target name="magecommunity"><dir name="Plumrocket"><dir name="SocialLogin"><dir name="Block"><file name="Buttons.php" hash="01e4058d3a9d2886d3d299108df5e39e"/><file name="General.php" hash="b91d1eec3ee0f4d70164230d8fcdf73c"/><dir name="Page"><dir name="Html"><file name="Header.php" hash="4e194b50036e46d60a12f51d879c50ff"/><file name="Welcome.php" hash="af7adad8c6c05dc6b51eb40e7d345519"/></dir></dir><file name="Share.php" hash="8447182219873dee7caaf620950157e4"/><dir name="System"><dir name="Config"><file name="Callbackurl.php" hash="18db5ba86eba4692530d674c556d198c"/><file name="Comingsoon.php" hash="dd6c106da378297ab6dd6724fe014281"/><file name="Notinstalled.php" hash="c263ec689c84b028dc4abdf06c7f0e5d"/><file name="Sortable.php" hash="2ae8f2236270e459223e10a84e123e07"/><file name="Version.php" hash="dcbf01e3752a5beb030b3aec752af6dd"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="cbd35ae6bbb7f6c6828e3763b69dae5e"/><file name="Main.php" hash="91b6f4aec64610bca0254a3bf196f208"/></dir><dir name="Model"><file name="Account.php" hash="8e37efd5e819b93d0ce0b90b96baea05"/><file name="Facebook.php" hash="03385dd53fa1acac970f146ab86187db"/><dir name="Mysql4"><dir name="Account"><file name="Collection.php" hash="ca4211392ef934ce33391408092a9737"/></dir><file name="Account.php" hash="3fd0a1c891d31577d873247e17ce01ce"/></dir><file name="Observer.php" hash="1edb8fc92e3db12f7869eb102cb3d75e"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Redirectto.php" hash="c2bcb34b36ae88ce3bfdfe242463ba9a"/><file name="Shareurl.php" hash="a28729927bf70baa36ebade8e3919d3b"/></dir></dir></dir><file name="Twitter.php" hash="3dec05ac8d4ace4c9b0f57779c6b7b82"/></dir><dir name="controllers"><file name="AccountController.php" hash="2b8b3e01fa57b590cd85815b65a8553b"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0aa82ee4ebe19c26943b496f45ce590d"/><file name="config.xml" hash="fd3eec458caea92d49b535b5efd18d0d"/><file name="system.xml" hash="c7e749f7fd5033a346db1c3cec13a51b"/></dir><dir name="sql"><dir name="pslogin_setup"><file name="install-1.0.0.php" hash="553fa30329657c4ae11cd85e8abd9784"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="pslogin.xml" hash="7f6dface7e33a1e667a568deb5aea0ec"/></dir><dir name="template"><dir name="pslogin"><dir name="system"><dir name="config"><file name="sortable.phtml" hash="398697865280d2f7d516645d62b1569d"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="pslogin.xml" hash="2f49444acbd196a4182ef7b2d3fc41af"/></dir><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="7e5f3be44a2e87b2e2a23fab1b4e0e7c"/><dir name="message"><file name="fake_email.phtml" hash="4df9c4f220333606f758d730b9246942"/></dir></dir></dir><dir name="customer"><dir name="form"><dir name="edit"><file name="fake_email.phtml" hash="28e38c06e2d833ff469e2c50f89d922c"/></dir><dir name="login"><file name="buttons.phtml" hash="8b861b6891438a4cf30a97d6084f0208"/></dir><file name="login.phtml" hash="8d95198607fdc776865eb0647d7743cd"/><dir name="register"><file name="buttons.phtml" hash="723d467b91d795204d8b60703e75ddcd"/><file name="sharedata.phtml" hash="21e3d413a95289b676033f6ca254f018"/><file name="sharepopup.phtml" hash="834dd13f11319f5fc58931463fdbd4f0"/></dir><file name="register.phtml" hash="99fe1381f5c6f03f771fd3523d1c166f"/></dir></dir><file name="footer.phtml" hash="2423782e83c9b05a5199500d4cb55544"/><file name="js.phtml" hash="4f1716f6f3b5401a6b29865a189b4aec"/><dir name="page"><dir name="html"><file name="welcome.phtml" hash="de89796d6555f732aaad8099c012d3bb"/></dir></dir><file name="runjs.phtml" hash="b9c6df4f25e740b10edfd8ac503bfea1"/></dir></dir></dir></dir><dir name="ultimo"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="eca273c65a41c809cd7cb5328f190214"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="cf337e019cbe443f9d1cd0dbe3a145ad"/><file name="register.phtml" hash="bfd2cceeb59a70dea2682282533af959"/></dir></dir></dir></dir></dir></dir><dir name="shopper"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="23c109bf666a64637630e08fc40961b1"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="072d3a2449ca53d90153719ac01c8aae"/><file name="register.phtml" hash="ed6d1e11eff2a0213d72b9020f2ac29e"/></dir></dir></dir></dir></dir></dir><dir name="fortis"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="6b724ba7eb1714dfc390445c293581c1"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="249520a604a0220b6646506ebe573011"/><file name="register.phtml" hash="bfd2cceeb59a70dea2682282533af959"/></dir></dir></dir></dir></dir></dir><dir name="default"><dir name="blanco"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="db8fdf238e7d868a6e55ea34f80358c5"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="887c951966ab3540093c4c3a3832b331"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir></dir></dir></dir><dir name="buyshop"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="5c11e51aae76613c3405610914c014ad"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="1f7c8854dba5149030bc61b14d644614"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir></dir></dir></dir><dir name="milano"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="db8fdf238e7d868a6e55ea34f80358c5"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="887c951966ab3540093c4c3a3832b331"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir></dir></dir></dir></dir><dir name="gravdept"><dir name="acumen"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="c8e29c0cb2bf8d9da545f8829cfe9aec"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="bde5923d16bf48ca0aeb5a824ea6bbff"/><file name="register.phtml" hash="36a99a65114e61333fc96051f1b4da58"/></dir></dir></dir></dir></dir></dir><dir name="blacknwhite"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="customer"><dir name="form"><file name="login.phtml" hash="ef1349603e09651ac66755546dab3116"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir><dir name="onepagecheckout"><file name="login.phtml" hash="b188ec7d0fde220ce78e60d70af63557"/></dir></dir></dir></dir></dir><dir name="venedor"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="f079f7525326c990372324d02a3441ed"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="e5f3a79f1cc36d88807561bdd3461a8c"/><file name="register.phtml" hash="721e19772d4355070fd5b71b755be5b5"/></dir></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Plumrocket_SocialLogin.csv" hash="7572e6085fbc927180c11c7fcb060389"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin.css" hash="d3d9e60b5d31c131c9ccedd296339ae0"/></dir></dir></dir><dir name="images"><dir name="plumrocket"><dir name="pslogin"><file name="social_admin.png" hash="f0d366be8ba53bc7510816a998861904"/></dir></dir></dir><dir name="js"><dir name="plumrocket"><dir name="pslogin"><file name="config.js" hash="a2c074dcd3c228afc2f144b8de8103c8"/><file name="jquery-1.10.2.min.js" hash="73042c373edc5879d6cdd9f569b9a234"/><file name="jquery-ui.min.js" hash="a0e434a17ebc022fb565e08fd446baef"/><file name="pslogin.js" hash="4770ef59857cd6eca2534d74e1dcf67c"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="pslogin.css" hash="599be906291b1b667dc6fd5ace6c6432"/></dir></dir></dir><dir name="images"><dir name="plumrocket"><dir name="pslogin"><file name="loader.gif" hash="013fe7725d917198766631696bbe40d1"/><file name="social.png" hash="5e8399f752da8dd769f5150fe647cf79"/><file name="social_retina.png" hash="b224ce068c5bb2fd7a4066e23073057a"/></dir></dir></dir><dir name="js"><dir name="plumrocket"><dir name="pslogin"><file name="jquery-1.10.2.min.js" hash="73042c373edc5879d6cdd9f569b9a234"/><file name="pslogin.js" hash="fe0f64ab37951d5229aaea132cb73915"/></dir></dir></dir></dir></dir><dir name="shopper"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="56be3d4ce52002b666072f42515b12d8"/></dir></dir></dir></dir></dir><dir name="default"><dir name="buyshop"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="08ae88742d436464733e060c95e50569"/></dir></dir></dir></dir></dir><dir name="venedor"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="2f95248995f04c7b831fd81bcc16b6d8"/></dir></dir></dir></dir></dir></dir></target></contents>
18
  <compatible/>
19
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Plumrocket_Base</name><channel>community</channel><min/><max/></package></required></dependencies>
20
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Plumrocket_Twitter_Facebook_Login</name>
4
+ <version>1.4.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://wiki.plumrocket.net/wiki/EULA">End-user License Agreement</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Plumrocket Twitter &amp; Facebook Login v1.x was designed to help online store owners reach as many customers as possible. Increase sales, allow clients to use Magento Facebook Login &amp; Twitter Login free to quickly register &amp; place order.</summary>
10
  <description>Plumrocket Twitter &amp; Facebook Login is a free magento extension that will let online store owners benefit from all the social media advantages. It helps to increase conversion rates by allowing your customers quickly login and place order.</description>
11
+ <notes>- Added "Subscribe Customer To Email Newsletter" option&#xD;
12
+ - Added "Ask for Birthday" option to the Facebook network configuration&#xD;
13
+ - Fixed bug on Magento registration page&#xD;
14
+ - Minor fixes and modifications</notes>
15
  <authors><author><name>Plumrocket Team</name><user>plumrocket</user><email>support@plumrocket.com</email></author></authors>
16
+ <date>2016-09-02</date>
17
+ <time>13:09:34</time>
18
+ <contents><target name="mageetc"><dir name="modules"><file name="Plumrocket_SocialLogin.xml" hash="f51b1720dd175c2b8df1756c15269fb4"/></dir></target><target name="magecommunity"><dir name="Plumrocket"><dir name="SocialLogin"><dir name="Block"><file name="Buttons.php" hash="01e4058d3a9d2886d3d299108df5e39e"/><file name="General.php" hash="b91d1eec3ee0f4d70164230d8fcdf73c"/><dir name="Page"><dir name="Html"><file name="Header.php" hash="04650dafc2c33c69b6c7f346a9442e4f"/><file name="Welcome.php" hash="af7adad8c6c05dc6b51eb40e7d345519"/></dir></dir><file name="Share.php" hash="8447182219873dee7caaf620950157e4"/><dir name="System"><dir name="Config"><file name="Callbackurl.php" hash="18db5ba86eba4692530d674c556d198c"/><file name="Comingsoon.php" hash="dd6c106da378297ab6dd6724fe014281"/><file name="Notinstalled.php" hash="c263ec689c84b028dc4abdf06c7f0e5d"/><file name="Sortable.php" hash="2ae8f2236270e459223e10a84e123e07"/><file name="Version.php" hash="dcbf01e3752a5beb030b3aec752af6dd"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5811ae1b5a77951e01d035e12a23de09"/><file name="Main.php" hash="91b6f4aec64610bca0254a3bf196f208"/></dir><dir name="Model"><file name="Account.php" hash="bf9a0bced6759106a620562485eb897a"/><file name="Facebook.php" hash="c1a82a47cbef8dc1c77f91cc4b586499"/><dir name="Mysql4"><dir name="Account"><file name="Collection.php" hash="ca4211392ef934ce33391408092a9737"/></dir><file name="Account.php" hash="3fd0a1c891d31577d873247e17ce01ce"/></dir><file name="Observer.php" hash="1edb8fc92e3db12f7869eb102cb3d75e"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Redirectto.php" hash="c2bcb34b36ae88ce3bfdfe242463ba9a"/><file name="Shareurl.php" hash="a28729927bf70baa36ebade8e3919d3b"/></dir></dir></dir><file name="Twitter.php" hash="3dec05ac8d4ace4c9b0f57779c6b7b82"/></dir><dir name="controllers"><file name="AccountController.php" hash="19089c56b74db85af1f178dcb61bcb41"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0aa82ee4ebe19c26943b496f45ce590d"/><file name="config.xml" hash="1fe16a8e7a3ffdb52ed11f403257c47d"/><file name="system.xml" hash="3858c7dc04723341bc6fd0eae7e6fa05"/></dir><dir name="sql"><dir name="pslogin_setup"><file name="install-1.0.0.php" hash="553fa30329657c4ae11cd85e8abd9784"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="pslogin.xml" hash="7f6dface7e33a1e667a568deb5aea0ec"/></dir><dir name="template"><dir name="pslogin"><dir name="system"><dir name="config"><file name="sortable.phtml" hash="398697865280d2f7d516645d62b1569d"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="pslogin.xml" hash="2f49444acbd196a4182ef7b2d3fc41af"/></dir><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="7e5f3be44a2e87b2e2a23fab1b4e0e7c"/><dir name="message"><file name="fake_email.phtml" hash="4df9c4f220333606f758d730b9246942"/></dir></dir></dir><dir name="customer"><dir name="form"><dir name="edit"><file name="fake_email.phtml" hash="28e38c06e2d833ff469e2c50f89d922c"/></dir><dir name="login"><file name="buttons.phtml" hash="8b861b6891438a4cf30a97d6084f0208"/></dir><file name="login.phtml" hash="8d95198607fdc776865eb0647d7743cd"/><dir name="register"><file name="buttons.phtml" hash="723d467b91d795204d8b60703e75ddcd"/><file name="sharedata.phtml" hash="21e3d413a95289b676033f6ca254f018"/><file name="sharepopup.phtml" hash="834dd13f11319f5fc58931463fdbd4f0"/></dir><file name="register.phtml" hash="99fe1381f5c6f03f771fd3523d1c166f"/></dir></dir><file name="footer.phtml" hash="2423782e83c9b05a5199500d4cb55544"/><file name="js.phtml" hash="4f1716f6f3b5401a6b29865a189b4aec"/><dir name="page"><dir name="html"><file name="welcome.phtml" hash="de89796d6555f732aaad8099c012d3bb"/></dir></dir><file name="runjs.phtml" hash="b9c6df4f25e740b10edfd8ac503bfea1"/></dir></dir></dir></dir><dir name="ultimo"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="eca273c65a41c809cd7cb5328f190214"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="cf337e019cbe443f9d1cd0dbe3a145ad"/><file name="register.phtml" hash="bfd2cceeb59a70dea2682282533af959"/></dir></dir></dir></dir></dir></dir><dir name="shopper"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="23c109bf666a64637630e08fc40961b1"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="072d3a2449ca53d90153719ac01c8aae"/><file name="register.phtml" hash="ed6d1e11eff2a0213d72b9020f2ac29e"/></dir></dir></dir></dir></dir></dir><dir name="fortis"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="6b724ba7eb1714dfc390445c293581c1"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="249520a604a0220b6646506ebe573011"/><file name="register.phtml" hash="bfd2cceeb59a70dea2682282533af959"/></dir></dir></dir></dir></dir></dir><dir name="default"><dir name="blanco"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="db8fdf238e7d868a6e55ea34f80358c5"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="887c951966ab3540093c4c3a3832b331"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir></dir></dir></dir><dir name="buyshop"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="5c11e51aae76613c3405610914c014ad"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="1f7c8854dba5149030bc61b14d644614"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir></dir></dir></dir><dir name="milano"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="db8fdf238e7d868a6e55ea34f80358c5"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="887c951966ab3540093c4c3a3832b331"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir></dir></dir></dir></dir><dir name="gravdept"><dir name="acumen"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="c8e29c0cb2bf8d9da545f8829cfe9aec"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="bde5923d16bf48ca0aeb5a824ea6bbff"/><file name="register.phtml" hash="36a99a65114e61333fc96051f1b4da58"/></dir></dir></dir></dir></dir></dir><dir name="blacknwhite"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="customer"><dir name="form"><file name="login.phtml" hash="ef1349603e09651ac66755546dab3116"/><file name="register.phtml" hash="3adc3800e8d855b49c286db74923c549"/></dir></dir><dir name="onepagecheckout"><file name="login.phtml" hash="b188ec7d0fde220ce78e60d70af63557"/></dir></dir></dir></dir></dir><dir name="venedor"><dir name="default"><dir name="template"><dir name="pslogin"><dir name="checkout"><dir name="onepage"><file name="login.phtml" hash="f079f7525326c990372324d02a3441ed"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="e5f3a79f1cc36d88807561bdd3461a8c"/><file name="register.phtml" hash="721e19772d4355070fd5b71b755be5b5"/></dir></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Plumrocket_SocialLogin.csv" hash="7572e6085fbc927180c11c7fcb060389"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin.css" hash="d8451b5f06ed93283a34a28829e5d9d7"/></dir></dir></dir><dir name="images"><dir name="plumrocket"><dir name="pslogin"><file name="social_admin.png" hash="f0d366be8ba53bc7510816a998861904"/></dir></dir></dir><dir name="js"><dir name="plumrocket"><dir name="pslogin"><file name="config.js" hash="a2c074dcd3c228afc2f144b8de8103c8"/><file name="jquery-1.10.2.min.js" hash="73042c373edc5879d6cdd9f569b9a234"/><file name="jquery-ui.min.js" hash="a0e434a17ebc022fb565e08fd446baef"/><file name="pslogin.js" hash="4770ef59857cd6eca2534d74e1dcf67c"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="pslogin.css" hash="3f5e0dc49947fd3989b21ccecd46537c"/></dir></dir></dir><dir name="images"><dir name="plumrocket"><dir name="pslogin"><file name="loader.gif" hash="013fe7725d917198766631696bbe40d1"/><file name="social.png" hash="5e8399f752da8dd769f5150fe647cf79"/><file name="social_retina.png" hash="b224ce068c5bb2fd7a4066e23073057a"/></dir></dir></dir><dir name="js"><dir name="plumrocket"><dir name="pslogin"><file name="jquery-1.10.2.min.js" hash="73042c373edc5879d6cdd9f569b9a234"/><file name="pslogin.js" hash="fe0f64ab37951d5229aaea132cb73915"/></dir></dir></dir></dir></dir><dir name="shopper"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="56be3d4ce52002b666072f42515b12d8"/></dir></dir></dir></dir></dir><dir name="default"><dir name="buyshop"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="08ae88742d436464733e060c95e50569"/></dir></dir></dir></dir></dir><dir name="venedor"><dir name="default"><dir name="css"><dir name="plumrocket"><dir name="pslogin"><file name="pslogin-custom.css" hash="2f95248995f04c7b831fd81bcc16b6d8"/></dir></dir></dir></dir></dir></dir></target></contents>
19
  <compatible/>
20
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Plumrocket_Base</name><channel>community</channel><min/><max/></package></required></dependencies>
21
  </package>
skin/adminhtml/default/default/css/plumrocket/pslogin/pslogin.css CHANGED
@@ -220,8 +220,6 @@
220
  .pslogin-form ul li.orange .soc-li-icon { background-color: #ff6600; }
221
  .pslogin-form ul li.orange .soc-li-icon { background-position: -0px -102px; }
222
 
223
-
224
-
225
  .pslogin-form ul li.bitbucket .soc-li-icon { background-color: #013567; }
226
  .pslogin-form ul li.bitbucket .soc-li-icon { background-position: -33px -102px; }
227
 
@@ -249,7 +247,6 @@
249
  .pslogin-form ul li.renren .soc-li-icon { background-color: #153765; }
250
  .pslogin-form ul li.renren .soc-li-icon { background-position: -51px -119px; }
251
 
252
-
253
  .pslogin-form ul li.etsy .soc-li-icon { background-color: #ee5931; }
254
  .pslogin-form ul li.etsy .soc-li-icon { background-position: -68px -119px; }
255
 
@@ -274,6 +271,14 @@
274
  .pslogin-form ul li.lastfm .soc-li-icon { background-color: #c02c0c; }
275
  .pslogin-form ul li.lastfm .soc-li-icon { background-position: -68px -136px; }
276
 
 
 
 
 
 
 
 
 
277
  .entry-edit-head.pslogin-notinstalled-section {
278
  background: #BDBDBD;
279
  }
220
  .pslogin-form ul li.orange .soc-li-icon { background-color: #ff6600; }
221
  .pslogin-form ul li.orange .soc-li-icon { background-position: -0px -102px; }
222
 
 
 
223
  .pslogin-form ul li.bitbucket .soc-li-icon { background-color: #013567; }
224
  .pslogin-form ul li.bitbucket .soc-li-icon { background-position: -33px -102px; }
225
 
247
  .pslogin-form ul li.renren .soc-li-icon { background-color: #153765; }
248
  .pslogin-form ul li.renren .soc-li-icon { background-position: -51px -119px; }
249
 
 
250
  .pslogin-form ul li.etsy .soc-li-icon { background-color: #ee5931; }
251
  .pslogin-form ul li.etsy .soc-li-icon { background-position: -68px -119px; }
252
 
271
  .pslogin-form ul li.lastfm .soc-li-icon { background-color: #c02c0c; }
272
  .pslogin-form ul li.lastfm .soc-li-icon { background-position: -68px -136px; }
273
 
274
+ .pslogin-form ul li.alipay .soc-li-icon { background-color: #00a0e9; }
275
+ .pslogin-form ul li.alipay .soc-li-icon { background-position: -101px -136px; }
276
+
277
+ .pslogin-form ul li.wechat .soc-li-icon { background-color: #4ec034; }
278
+ .pslogin-form ul li.wechat .soc-li-icon { background-position: -1px -153px; }
279
+
280
+
281
+
282
  .entry-edit-head.pslogin-notinstalled-section {
283
  background: #BDBDBD;
284
  }
skin/frontend/base/default/css/plumrocket/pslogin/pslogin.css CHANGED
@@ -640,8 +640,6 @@
640
  .pslogin-block .pslogin-buttons ul li.renren span.pslogin-button-auto { background-color: #153765; }
641
  .pslogin-block .pslogin-buttons ul li.renren .pslogin-button-icon { background-position: -101px -239px; }
642
 
643
-
644
-
645
  .pslogin-block .pslogin-buttons ul li.etsy span.pslogin-button-auto { background-color: #ee5931; }
646
  .pslogin-block .pslogin-buttons ul li.etsy .pslogin-button-icon { background-position: -134px -239px; }
647
 
@@ -668,6 +666,11 @@
668
  .pslogin-block .pslogin-buttons ul li.lastfm span.pslogin-button-auto { background-color: #c02c0c; }
669
  .pslogin-block .pslogin-buttons ul li.lastfm .pslogin-button-icon { background-position: -135px -273px; }
670
 
 
 
 
 
 
671
 
672
  /*======= social buttons =======*/
673
  #prpop-pop-up-bg .pslogin-block {
@@ -1102,9 +1105,6 @@
1102
 
1103
  }
1104
 
1105
-
1106
-
1107
-
1108
  /*=== animate ===*/
1109
  #pslogin-pop-up-bg {
1110
  -webkit-animation-duration: 1s;
@@ -1114,81 +1114,6 @@
1114
  animation-fill-mode: both;
1115
  }
1116
 
1117
- @-webkit-keyframes fadeIn {
1118
- 0% {opacity: 0;}
1119
- 100% {opacity: 1;}
1120
- }
1121
-
1122
- @-moz-keyframes fadeIn {
1123
- 0% {opacity: 0;}
1124
- 100% {opacity: 1;}
1125
- }
1126
-
1127
- @keyframes fadeIn {
1128
- 0% {opacity: 0;}
1129
- 100% {opacity: 1;}
1130
- }
1131
-
1132
- .fadeIn {
1133
- -webkit-animation-name: fadeIn;
1134
- -moz-animation-name: fadeIn;
1135
- animation-name: fadeIn;
1136
- }
1137
-
1138
- @-webkit-keyframes fadeInDown {
1139
- 0% {
1140
- opacity: 0;
1141
- -webkit-transform: translate3d(0, -10%, 0);
1142
- -moz-transform: translate3d(0, -10%, 0);
1143
- transform: translate3d(0, -10%, 0);
1144
- }
1145
-
1146
- 100% {
1147
- opacity: 1;
1148
- -webkit-transform: none;
1149
- -moz-transform: none;
1150
- transform: none;
1151
- }
1152
- }
1153
-
1154
- @-moz-keyframes fadeInDown {
1155
- 0% {
1156
- opacity: 0;
1157
- -webkit-transform: translate3d(0, -10%, 0);
1158
- -moz-transform: translate3d(0, -10%, 0);
1159
- transform: translate3d(0, -10%, 0);
1160
- }
1161
-
1162
- 100% {
1163
- opacity: 1;
1164
- -webkit-transform: none;
1165
- -moz-transform: none;
1166
- transform: none;
1167
- }
1168
- }
1169
-
1170
- @keyframes fadeInDown {
1171
- 0% {
1172
- opacity: 0;
1173
- -webkit-transform: translate3d(0, -10%, 0);
1174
- -moz-transform: translate3d(0, -10%, 0);
1175
- transform: translate3d(0, -10%, 0);
1176
- }
1177
-
1178
- 100% {
1179
- opacity: 1;
1180
- -webkit-transform: none;
1181
- -moz-transform: none;
1182
- transform: none;
1183
- }
1184
- }
1185
-
1186
- .fadeInDown {
1187
- -webkit-animation-name: fadeInDown;
1188
- -moz-animation-name: fadeInDown;
1189
- animation-name: fadeInDown;
1190
- }
1191
-
1192
  @-webkit-keyframes fadeInDownBig {
1193
  0% {
1194
  opacity: 0;
@@ -1241,511 +1166,4 @@
1241
  -webkit-animation-name: fadeInDownBig;
1242
  -moz-animation-name: fadeInDownBig;
1243
  animation-name: fadeInDownBig;
1244
- }
1245
-
1246
- @-webkit-keyframes fadeInLeft {
1247
- 0% {
1248
- opacity: 0;
1249
- -webkit-transform: translate3d(-10%, 0, 0);
1250
- -moz-transform: translate3d(-10%, 0, 0);
1251
- transform: translate3d(-10%, 0, 0);
1252
- }
1253
-
1254
- 100% {
1255
- opacity: 1;
1256
- -webkit-transform: none;
1257
- -moz-transform: none;
1258
- transform: none;
1259
- }
1260
- }
1261
-
1262
- @-moz-keyframes fadeInLeft {
1263
- 0% {
1264
- opacity: 0;
1265
- -webkit-transform: translate3d(-10%, 0, 0);
1266
- -moz-transform: translate3d(-10%, 0, 0);
1267
- transform: translate3d(-10%, 0, 0);
1268
- }
1269
-
1270
- 100% {
1271
- opacity: 1;
1272
- -webkit-transform: none;
1273
- -moz-transform: none;
1274
- transform: none;
1275
- }
1276
- }
1277
-
1278
- @keyframes fadeInLeft {
1279
- 0% {
1280
- opacity: 0;
1281
- -webkit-transform: translate3d(-10%, 0, 0);
1282
- -moz-transform: translate3d(-10%, 0, 0);
1283
- transform: translate3d(-10%, 0, 0);
1284
- }
1285
-
1286
- 100% {
1287
- opacity: 1;
1288
- -webkit-transform: none;
1289
- -moz-transform: none;
1290
- transform: none;
1291
- }
1292
- }
1293
-
1294
- .fadeInLeft {
1295
- -webkit-animation-name: fadeInLeft;
1296
- -moz-animation-name: fadeInLeft;
1297
- animation-name: fadeInLeft;
1298
- }
1299
-
1300
- @-webkit-keyframes fadeInLeftBig {
1301
- 0% {
1302
- opacity: 0;
1303
- -webkit-transform: translate3d(-2000px, 0, 0);
1304
- -moz-transform: translate3d(-2000px, 0, 0);
1305
- transform: translate3d(-2000px, 0, 0);
1306
- }
1307
-
1308
- 100% {
1309
- opacity: 1;
1310
- -webkit-transform: none;
1311
- -moz-transform: none;
1312
- transform: none;
1313
- }
1314
- }
1315
-
1316
- @-moz-keyframes fadeInLeftBig {
1317
- 0% {
1318
- opacity: 0;
1319
- -webkit-transform: translate3d(-2000px, 0, 0);
1320
- -moz-transform: translate3d(-2000px, 0, 0);
1321
- transform: translate3d(-2000px, 0, 0);
1322
- }
1323
-
1324
- 100% {
1325
- opacity: 1;
1326
- -webkit-transform: none;
1327
- -moz-transform: none;
1328
- transform: none;
1329
- }
1330
- }
1331
-
1332
- @keyframes fadeInLeftBig {
1333
- 0% {
1334
- opacity: 0;
1335
- -webkit-transform: translate3d(-2000px, 0, 0);
1336
- -moz-transform: translate3d(-2000px, 0, 0);
1337
- transform: translate3d(-2000px, 0, 0);
1338
- }
1339
-
1340
- 100% {
1341
- opacity: 1;
1342
- -webkit-transform: none;
1343
- -moz-transform: none;
1344
- transform: none;
1345
- }
1346
- }
1347
-
1348
- .fadeInLeftBig {
1349
- -webkit-animation-name: fadeInLeftBig;
1350
- -moz-animation-name: fadeInLeftBig;
1351
- animation-name: fadeInLeftBig;
1352
- }
1353
-
1354
- @-webkit-keyframes fadeInRight {
1355
- 0% {
1356
- opacity: 0;
1357
- -webkit-transform: translate3d(10%, 0, 0);
1358
- -moz-transform: translate3d(10%, 0, 0);
1359
- transform: translate3d(10%, 0, 0);
1360
- }
1361
-
1362
- 100% {
1363
- opacity: 1;
1364
- -webkit-transform: none;
1365
- -moz-transform: none;
1366
- transform: none;
1367
- }
1368
- }
1369
-
1370
- @-moz-keyframes fadeInRight {
1371
- 0% {
1372
- opacity: 0;
1373
- -webkit-transform: translate3d(10%, 0, 0);
1374
- -moz-transform: translate3d(10%, 0, 0);
1375
- transform: translate3d(10%, 0, 0);
1376
- }
1377
-
1378
- 100% {
1379
- opacity: 1;
1380
- -webkit-transform: none;
1381
- -moz-transform: none;
1382
- transform: none;
1383
- }
1384
- }
1385
-
1386
- @keyframes fadeInRight {
1387
- 0% {
1388
- opacity: 0;
1389
- -webkit-transform: translate3d(10%, 0, 0);
1390
- -moz-transform: translate3d(10%, 0, 0);
1391
- transform: translate3d(10%, 0, 0);
1392
- }
1393
-
1394
- 100% {
1395
- opacity: 1;
1396
- -webkit-transform: none;
1397
- -moz-transform: none;
1398
- transform: none;
1399
- }
1400
- }
1401
-
1402
- .fadeInRight {
1403
- -webkit-animation-name: fadeInRight;
1404
- -moz-animation-name: fadeInRight;
1405
- animation-name: fadeInRight;
1406
- }
1407
-
1408
- @-webkit-keyframes fadeInRightBig {
1409
- 0% {
1410
- opacity: 0;
1411
- -webkit-transform: translate3d(2000px, 0, 0);
1412
- -moz-transform: translate3d(2000px, 0, 0);
1413
- transform: translate3d(2000px, 0, 0);
1414
- }
1415
-
1416
- 100% {
1417
- opacity: 1;
1418
- -webkit-transform: none;
1419
- -moz-transform: none;
1420
- transform: none;
1421
- }
1422
- }
1423
-
1424
- @-moz-keyframes fadeInRightBig {
1425
- 0% {
1426
- opacity: 0;
1427
- -webkit-transform: translate3d(2000px, 0, 0);
1428
- -moz-transform: translate3d(2000px, 0, 0);
1429
- transform: translate3d(2000px, 0, 0);
1430
- }
1431
-
1432
- 100% {
1433
- opacity: 1;
1434
- -webkit-transform: none;
1435
- -moz-transform: none;
1436
- transform: none;
1437
- }
1438
- }
1439
-
1440
- @keyframes fadeInRightBig {
1441
- 0% {
1442
- opacity: 0;
1443
- -webkit-transform: translate3d(2000px, 0, 0);
1444
- -moz-transform: translate3d(2000px, 0, 0);
1445
- transform: translate3d(2000px, 0, 0);
1446
- }
1447
-
1448
- 100% {
1449
- opacity: 1;
1450
- -webkit-transform: none;
1451
- -moz-transform: none;
1452
- transform: none;
1453
- }
1454
- }
1455
-
1456
- .fadeInRightBig {
1457
- -webkit-animation-name: fadeInRightBig;
1458
- -moz-animation-name: fadeInRightBig;
1459
- animation-name: fadeInRightBig;
1460
- }
1461
-
1462
- @-webkit-keyframes fadeInUp {
1463
- 0% {
1464
- opacity: 0;
1465
- -webkit-transform: translate3d(0, 10%, 0);
1466
- -moz-transform: translate3d(0, 10%, 0);
1467
- transform: translate3d(0, 10%, 0);
1468
- }
1469
-
1470
- 100% {
1471
- opacity: 1;
1472
- -webkit-transform: none;
1473
- -moz-transform: none;
1474
- transform: none;
1475
- }
1476
- }
1477
-
1478
- @-moz-keyframes fadeInUp {
1479
- 0% {
1480
- opacity: 0;
1481
- -webkit-transform: translate3d(0, 10%, 0);
1482
- -moz-transform: translate3d(0, 10%, 0);
1483
- transform: translate3d(0, 10%, 0);
1484
- }
1485
-
1486
- 100% {
1487
- opacity: 1;
1488
- -webkit-transform: none;
1489
- -moz-transform: none;
1490
- transform: none;
1491
- }
1492
- }
1493
-
1494
- @keyframes fadeInUp {
1495
- 0% {
1496
- opacity: 0;
1497
- -webkit-transform: translate3d(0, 10%, 0);
1498
- -moz-transform: translate3d(0, 10%, 0);
1499
- transform: translate3d(0, 10%, 0);
1500
- }
1501
-
1502
- 100% {
1503
- opacity: 1;
1504
- -webkit-transform: none;
1505
- -moz-transform: none;
1506
- transform: none;
1507
- }
1508
- }
1509
-
1510
- .fadeInUp {
1511
- -webkit-animation-name: fadeInUp;
1512
- -moz-animation-name: fadeInUp;
1513
- animation-name: fadeInUp;
1514
- }
1515
-
1516
- @-webkit-keyframes fadeInUpBig {
1517
- 0% {
1518
- opacity: 0;
1519
- -webkit-transform: translate3d(0, 2000px, 0);
1520
- -moz-transform: translate3d(0, 2000px, 0);
1521
- transform: translate3d(0, 2000px, 0);
1522
- }
1523
-
1524
- 100% {
1525
- opacity: 1;
1526
- -webkit-transform: none;
1527
- -moz-transform: none;
1528
- transform: none;
1529
- }
1530
- }
1531
-
1532
- @-moz-keyframes fadeInUpBig {
1533
- 0% {
1534
- opacity: 0;
1535
- -webkit-transform: translate3d(0, 2000px, 0);
1536
- -moz-transform: translate3d(0, 2000px, 0);
1537
- transform: translate3d(0, 2000px, 0);
1538
- }
1539
-
1540
- 100% {
1541
- opacity: 1;
1542
- -webkit-transform: none;
1543
- -moz-transform: none;
1544
- transform: none;
1545
- }
1546
- }
1547
-
1548
- @keyframes fadeInUpBig {
1549
- 0% {
1550
- opacity: 0;
1551
- -webkit-transform: translate3d(0, 2000px, 0);
1552
- -moz-transform: translate3d(0, 2000px, 0);
1553
- transform: translate3d(0, 2000px, 0);
1554
- }
1555
-
1556
- 100% {
1557
- opacity: 1;
1558
- -webkit-transform: none;
1559
- -moz-transform: none;
1560
- transform: none;
1561
- }
1562
- }
1563
-
1564
- .fadeInUpBig {
1565
- -webkit-animation-name: fadeInUpBig;
1566
- -moz-animation-name: fadeInUpBig;
1567
- animation-name: fadeInUpBig;
1568
- }
1569
-
1570
-
1571
- @-webkit-keyframes zoomIn {
1572
- 0% {
1573
- opacity: 0;
1574
- -webkit-transform: scale3d(.3, .3, .3);
1575
- -moz-transform: scale3d(.3, .3, .3);
1576
- transform: scale3d(.3, .3, .3);
1577
- }
1578
-
1579
- 50% {
1580
- opacity: 1;
1581
- }
1582
- }
1583
-
1584
- @-moz-keyframes zoomIn {
1585
- 0% {
1586
- opacity: 0;
1587
- -webkit-transform: scale3d(.3, .3, .3);
1588
- -moz-transform: scale3d(.3, .3, .3);
1589
- transform: scale3d(.3, .3, .3);
1590
- }
1591
-
1592
- 50% {
1593
- opacity: 1;
1594
- }
1595
- }
1596
-
1597
- @keyframes zoomIn {
1598
- 0% {
1599
- opacity: 0;
1600
- -webkit-transform: scale3d(.3, .3, .3);
1601
- -moz-transform: scale3d(.3, .3, .3);
1602
- transform: scale3d(.3, .3, .3);
1603
- }
1604
-
1605
- 50% {
1606
- opacity: 1;
1607
- }
1608
- }
1609
-
1610
- .zoomIn .prpop-splash-container {
1611
- -webkit-animation-name: zoomIn;
1612
- -moz-animation-name: zoomIn;
1613
- animation-name: zoomIn;
1614
- -webkit-animation-duration: 1s;
1615
- -moz-animation-duration:1s;
1616
- animation-duration: 1s;
1617
- -webkit-animation-fill-mode: both;
1618
- animation-fill-mode: both;
1619
- }
1620
-
1621
-
1622
-
1623
- /* Effect 8: 3D flip horizontal */
1624
- @-webkit-keyframes flip3d_hor {
1625
- 0% {
1626
- -webkit-transform-style: preserve-3d;
1627
- -moz-transform-style: preserve-3d;
1628
- transform-style: preserve-3d;
1629
- -webkit-transform: rotateY(-110deg);
1630
- -moz-transform: rotateY(-110deg);
1631
- -ms-transform: rotateY(-110deg);
1632
- transform: rotateY(-110deg);
1633
- -webkit-transition: all 0.3s;
1634
- -moz-transition: all 0.3s;
1635
- transition: all 0.3s;
1636
- opacity: 0;
1637
- }
1638
-
1639
- 100% {
1640
- -webkit-transform: rotateY(0deg);
1641
- -moz-transform: rotateY(0deg);
1642
- -ms-transform: rotateY(0deg);
1643
- transform: rotateY(0deg);
1644
- opacity: 1;
1645
- }
1646
- }
1647
-
1648
- @-moz-keyframes flip3d_hor {
1649
- 0% {
1650
- -webkit-transform-style: preserve-3d;
1651
- -moz-transform-style: preserve-3d;
1652
- transform-style: preserve-3d;
1653
- -webkit-transform: rotateY(-110deg);
1654
- -moz-transform: rotateY(-110deg);
1655
- -ms-transform: rotateY(-110deg);
1656
- transform: rotateY(-110deg);
1657
- -webkit-transition: all 0.3s;
1658
- -moz-transition: all 0.3s;
1659
- transition: all 0.3s;
1660
- opacity: 0;
1661
- }
1662
-
1663
- 100% {
1664
- -webkit-transform: rotateY(0deg);
1665
- -moz-transform: rotateY(0deg);
1666
- -ms-transform: rotateY(0deg);
1667
- transform: rotateY(0deg);
1668
- opacity: 1;
1669
- }
1670
- }
1671
-
1672
-
1673
- @keyframes flip3d_hor {
1674
- 0% {
1675
- -webkit-transform-style: preserve-3d;
1676
- -moz-transform-style: preserve-3d;
1677
- transform-style: preserve-3d;
1678
- -webkit-transform: rotateY(-110deg);
1679
- -moz-transform: rotateY(-110deg);
1680
- -ms-transform: rotateY(-110deg);
1681
- transform: rotateY(-110deg);
1682
- -webkit-transition: all 0.3s;
1683
- -moz-transition: all 0.3s;
1684
- transition: all 0.3s;
1685
- opacity: 0;
1686
- }
1687
-
1688
- 100% {
1689
- -webkit-transform: rotateY(0deg);
1690
- -moz-transform: rotateY(0deg);
1691
- -ms-transform: rotateY(0deg);
1692
- transform: rotateY(0deg);
1693
- opacity: 1;
1694
- }
1695
- }
1696
-
1697
- .flip3d_hor .prpop-splash-container {
1698
- -webkit-animation-name: flip3d_hor;
1699
- -moz-animation-name: flip3d_hor;
1700
- animation-name: flip3d_hor;
1701
- -webkit-animation-duration: 1s;
1702
- -moz-animation-duration:1s;
1703
- animation-duration: 1s;
1704
- -webkit-animation-fill-mode: both;
1705
- animation-fill-mode: both;
1706
- }
1707
-
1708
-
1709
- /*background animation*/
1710
- #prpop-addedoverlay {
1711
- -webkit-animation-duration: 0.25s;
1712
- -moz-animation-duration:0.25s;
1713
- animation-duration: 0.25s;
1714
- -webkit-animation-fill-mode: both;
1715
- -moz-animation-fill-mode: both;
1716
- animation-fill-mode: both;
1717
- -webkit-animation-name: background_a;
1718
- -moz-animation-name: background_a;
1719
- animation-name: background_a;
1720
- }
1721
-
1722
-
1723
- @-webkit-keyframes background_a {
1724
- 0% {
1725
- opacity: 0;
1726
- }
1727
-
1728
- 100% {
1729
- opacity: 0.6;
1730
- }
1731
- }
1732
-
1733
- @-moz-keyframes background_a {
1734
- 0% {
1735
- opacity: 0;
1736
- }
1737
-
1738
- 100% {
1739
- opacity: 0.6;
1740
- }
1741
- }
1742
-
1743
- @keyframes background_a {
1744
- 0% {
1745
- opacity: 0;
1746
- }
1747
-
1748
- 100% {
1749
- opacity: 0.6;
1750
- }
1751
  }
640
  .pslogin-block .pslogin-buttons ul li.renren span.pslogin-button-auto { background-color: #153765; }
641
  .pslogin-block .pslogin-buttons ul li.renren .pslogin-button-icon { background-position: -101px -239px; }
642
 
 
 
643
  .pslogin-block .pslogin-buttons ul li.etsy span.pslogin-button-auto { background-color: #ee5931; }
644
  .pslogin-block .pslogin-buttons ul li.etsy .pslogin-button-icon { background-position: -134px -239px; }
645
 
666
  .pslogin-block .pslogin-buttons ul li.lastfm span.pslogin-button-auto { background-color: #c02c0c; }
667
  .pslogin-block .pslogin-buttons ul li.lastfm .pslogin-button-icon { background-position: -135px -273px; }
668
 
669
+ .pslogin-block .pslogin-buttons ul li.alipay span.pslogin-button-auto { background-color: #00a0e9; }
670
+ .pslogin-block .pslogin-buttons ul li.alipay .pslogin-button-icon { background-position: -202px -274px; }
671
+
672
+ .pslogin-block .pslogin-buttons ul li.wechat span.pslogin-button-auto { background-color: #4ec034; }
673
+ .pslogin-block .pslogin-buttons ul li.wechat .pslogin-button-icon { background-position: -1px -306px; }
674
 
675
  /*======= social buttons =======*/
676
  #prpop-pop-up-bg .pslogin-block {
1105
 
1106
  }
1107
 
 
 
 
1108
  /*=== animate ===*/
1109
  #pslogin-pop-up-bg {
1110
  -webkit-animation-duration: 1s;
1114
  animation-fill-mode: both;
1115
  }
1116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1117
  @-webkit-keyframes fadeInDownBig {
1118
  0% {
1119
  opacity: 0;
1166
  -webkit-animation-name: fadeInDownBig;
1167
  -moz-animation-name: fadeInDownBig;
1168
  animation-name: fadeInDownBig;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1169
  }