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 +1 -1
- app/code/community/Plumrocket/SocialLogin/Helper/Data.php +179 -175
- app/code/community/Plumrocket/SocialLogin/Model/Account.php +7 -7
- app/code/community/Plumrocket/SocialLogin/Model/Facebook.php +14 -10
- app/code/community/Plumrocket/SocialLogin/controllers/AccountController.php +15 -4
- app/code/community/Plumrocket/SocialLogin/etc/config.xml +3 -1
- app/code/community/Plumrocket/SocialLogin/etc/system.xml +36 -16
- app/etc/modules/Plumrocket_SocialLogin.xml +1 -1
- package.xml +8 -7
- skin/adminhtml/default/default/css/plumrocket/pslogin/pslogin.css +8 -3
- skin/frontend/base/default/css/plumrocket/pslogin/pslogin.css +5 -587
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 |
-
|
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 |
-
|
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(
|
107 |
-
|
108 |
-
|
|
|
109 |
|
110 |
-
|
111 |
-
|
112 |
-
|
|
|
|
|
|
|
113 |
|
114 |
-
|
115 |
-
|
116 |
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
|
121 |
-
|
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 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
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 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
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 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
$referer = strtok($referer, '?');
|
373 |
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
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(
|
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
|
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('
|
|
|
|
|
|
|
|
|
226 |
}
|
227 |
}
|
228 |
|
229 |
public function runjsAction()
|
230 |
{
|
231 |
-
$this->getResponse()->setBody(
|
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('
|
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.
|
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 & 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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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>
|
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 & 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.
|
8 |
<name>Twitter & 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 & 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.
|
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 & 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 & Twitter Login free to quickly register & place order.</summary>
|
10 |
<description>Plumrocket Twitter & 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
|
12 |
-
-
|
13 |
-
|
|
|
14 |
<authors><author><name>Plumrocket Team</name><user>plumrocket</user><email>support@plumrocket.com</email></author></authors>
|
15 |
-
<date>2016-
|
16 |
-
<time>
|
17 |
-
<contents><target name="mageetc"><dir name="modules"><file name="Plumrocket_SocialLogin.xml" hash="
|
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 & 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 & Twitter Login free to quickly register & place order.</summary>
|
10 |
<description>Plumrocket Twitter & 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
|
12 |
+
- Added "Ask for Birthday" option to the Facebook network configuration
|
13 |
+
- Fixed bug on Magento registration page
|
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 |
}
|