Version Description
2019-11-21 =
Fix PRO: LinkedIn invalid scope error on old installs
Download this release
Release Info
Developer | codeinwp |
Plugin | Revive Old Posts – Auto Post to Social Media |
Version | 8.5.1 |
Comparing to | |
See all releases |
Code changes from version 8.5.0 to 8.5.1
- CHANGELOG.md +6 -2
- includes/admin/abstract/class-rop-services-abstract.php +6 -1
- includes/admin/services/class-rop-linkedin-service.php +50 -24
- includes/class-rop.php +1 -1
- readme.md +8 -0
- readme.txt +8 -0
- themeisle-hash.json +1 -1
- tweet-old-post.php +2 -2
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +5 -5
CHANGELOG.md
CHANGED
@@ -1,7 +1,11 @@
|
|
1 |
|
2 |
-
### v8.5.
|
|
|
|
|
|
|
|
|
3 |
**Changes:**
|
4 |
-
*
|
5 |
|
6 |
### v8.5.0 - 2019-11-21
|
7 |
**Changes:**
|
1 |
|
2 |
+
### v8.5.1 - 2019-12-10
|
3 |
+
**Changes:**
|
4 |
+
* add codeinwp and themeisle links to readme
|
5 |
+
|
6 |
+
### v8.5.1 - 2019-11-21
|
7 |
**Changes:**
|
8 |
+
* V851
|
9 |
|
10 |
### v8.5.0 - 2019-11-21
|
11 |
**Changes:**
|
includes/admin/abstract/class-rop-services-abstract.php
CHANGED
@@ -522,11 +522,16 @@ abstract class Rop_Services_Abstract {
|
|
522 |
),
|
523 |
|
524 |
// LinkedIn errors
|
525 |
-
''submitted-url' can not be empty'
|
526 |
'message' => 'There might be an issue with link creations on your website.',
|
527 |
'link' => 'https://is.gd/fix_link_issue',
|
528 |
),
|
529 |
|
|
|
|
|
|
|
|
|
|
|
530 |
// Pinterest errors
|
531 |
'Pinterest error (code: 429) with message: You have exceeded your rate limit' => array(
|
532 |
'message' => 'You\'ve hit the Pinterest rate limit.',
|
522 |
),
|
523 |
|
524 |
// LinkedIn errors
|
525 |
+
''submitted-url' can not be empty' => array(
|
526 |
'message' => 'There might be an issue with link creations on your website.',
|
527 |
'link' => 'https://is.gd/fix_link_issue',
|
528 |
),
|
529 |
|
530 |
+
'[ unauthorized_scope_error ] Scope "r_organization_social"' => array(
|
531 |
+
'message' => 'You might need to reconnect your LinkedIn account. ',
|
532 |
+
'link' => 'https://is.gd/fix_linkedin_scope_error',
|
533 |
+
),
|
534 |
+
|
535 |
// Pinterest errors
|
536 |
'Pinterest error (code: 429) with message: You have exceeded your rate limit' => array(
|
537 |
'message' => 'You\'ve hit the Pinterest rate limit.',
|
includes/admin/services/class-rop-linkedin-service.php
CHANGED
@@ -44,10 +44,20 @@ class Rop_Linkedin_Service extends Rop_Services_Abstract {
|
|
44 |
* @var array $scopes The scopes to authorize with LinkedIn.
|
45 |
*/
|
46 |
protected $scopes = array( 'r_liteprofile', 'r_emailaddress', 'w_member_social', 'r_organization_social', 'w_organization_social', 'rw_organization_admin');
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
// Company(organization) sharing scope cannot be used unless app approved for this scope.
|
49 |
-
// Added here for future reference
|
50 |
-
// https://stackoverflow.com/questions/54821731/in-linkedin-api-v2-0-how-to-get-company-list-by-persons-token
|
51 |
// https://business.linkedin.com/marketing-solutions/marketing-partners/become-a-partner/marketing-developer-program
|
52 |
|
53 |
|
@@ -105,6 +115,7 @@ class Rop_Linkedin_Service extends Rop_Services_Abstract {
|
|
105 |
if ( isset( $_GET['error'], $_GET['error_description'] ) ) {
|
106 |
$message = 'Linkedin Error: [ ' . $_GET['error'] . ' ] ' . html_entity_decode( urldecode( $_GET['error_description'] ) );
|
107 |
$this->logger->alert_error( $message );
|
|
|
108 |
}
|
109 |
exit( wp_redirect( $this->get_legacy_url() ) );
|
110 |
} else {
|
@@ -119,6 +130,7 @@ class Rop_Linkedin_Service extends Rop_Services_Abstract {
|
|
119 |
|
120 |
$message = 'Linkedin Error: Code[ ' . $e->getCode() . ' ] ' . $e->getDescription();
|
121 |
$this->logger->alert_error( $message );
|
|
|
122 |
$referrer = $_SERVER['HTTP_REFERER'];
|
123 |
// If the user is trying to authenticate.
|
124 |
if ( ! empty( substr_count( $referrer, 'linkedin.com' ) ) ) {
|
@@ -325,36 +337,41 @@ class Rop_Linkedin_Service extends Rop_Services_Abstract {
|
|
325 |
|
326 |
$users = array( $user_details );
|
327 |
|
328 |
-
|
|
|
|
|
329 |
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
|
337 |
-
|
338 |
-
|
339 |
|
340 |
-
|
341 |
|
342 |
-
|
343 |
|
344 |
-
|
345 |
|
346 |
-
|
347 |
-
|
348 |
|
349 |
-
|
350 |
-
|
|
|
351 |
}
|
352 |
}
|
353 |
}
|
354 |
-
}
|
355 |
-
|
356 |
-
$this->logger->alert_error( 'Got in exception: ' . $e );
|
357 |
|
|
|
|
|
|
|
358 |
return $users;
|
359 |
}
|
360 |
|
@@ -458,8 +475,15 @@ class Rop_Linkedin_Service extends Rop_Services_Abstract {
|
|
458 |
$_SESSION['rop_linkedin_credentials'] = $credentials;
|
459 |
$this->set_api( $credentials['client_id'], $credentials['secret'] );
|
460 |
$api = $this->get_api();
|
461 |
-
$url = $api->getLoginUrl( $this->scopes );
|
462 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
463 |
return $url;
|
464 |
}
|
465 |
|
@@ -482,7 +506,9 @@ class Rop_Linkedin_Service extends Rop_Services_Abstract {
|
|
482 |
// check if linkedin Account was added using Revive Social app
|
483 |
$added_with_app = get_option( 'rop_linkedin_via_rs_app' );
|
484 |
|
485 |
-
if
|
|
|
|
|
486 |
$token = new \LinkedIn\AccessToken( $args['credentials'] );
|
487 |
} else {
|
488 |
$this->set_api( $this->credentials['client_id'], $this->credentials['secret'] );
|
44 |
* @var array $scopes The scopes to authorize with LinkedIn.
|
45 |
*/
|
46 |
protected $scopes = array( 'r_liteprofile', 'r_emailaddress', 'w_member_social', 'r_organization_social', 'w_organization_social', 'rw_organization_admin');
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Old permissions required by custom user apps.
|
50 |
+
*
|
51 |
+
* This does not try to pull in the company profile, just the user's profile.
|
52 |
+
* LinkedIn made it so that all new apps being created require company verification to work (which would give them the permissions in $scope).
|
53 |
+
* So this is only valid for old apps that were already created.
|
54 |
+
*
|
55 |
+
* @since 8.5.0
|
56 |
+
* @access protected
|
57 |
+
* @var array $scopes_old The scopes to authorize with LinkedIn.
|
58 |
+
*/
|
59 |
+
protected $scopes_old = array( 'r_liteprofile', 'r_emailaddress', 'w_member_social');
|
60 |
// Company(organization) sharing scope cannot be used unless app approved for this scope.
|
|
|
|
|
61 |
// https://business.linkedin.com/marketing-solutions/marketing-partners/become-a-partner/marketing-developer-program
|
62 |
|
63 |
|
115 |
if ( isset( $_GET['error'], $_GET['error_description'] ) ) {
|
116 |
$message = 'Linkedin Error: [ ' . $_GET['error'] . ' ] ' . html_entity_decode( urldecode( $_GET['error_description'] ) );
|
117 |
$this->logger->alert_error( $message );
|
118 |
+
$this->rop_get_error_docs( $message );
|
119 |
}
|
120 |
exit( wp_redirect( $this->get_legacy_url() ) );
|
121 |
} else {
|
130 |
|
131 |
$message = 'Linkedin Error: Code[ ' . $e->getCode() . ' ] ' . $e->getDescription();
|
132 |
$this->logger->alert_error( $message );
|
133 |
+
$this->rop_get_error_docs( $message );
|
134 |
$referrer = $_SERVER['HTTP_REFERER'];
|
135 |
// If the user is trying to authenticate.
|
136 |
if ( ! empty( substr_count( $referrer, 'linkedin.com' ) ) ) {
|
337 |
|
338 |
$users = array( $user_details );
|
339 |
|
340 |
+
// only new installs can connect company accounts because they will have the organization scope
|
341 |
+
if ( $this->rop_show_li_app_btn() ) {
|
342 |
+
try {
|
343 |
|
344 |
+
$admined_linkedin_pages = $this->api->api(
|
345 |
+
// 'organizationalEntityAcls?q=roleAssignee&role=ADMINISTRATOR&projection=(elements*(organizationalTarget~(localizedName,vanityName,logoV2)))',
|
346 |
+
'organizationalEntityAcls?q=roleAssignee&role=ADMINISTRATOR&state=APPROVED',
|
347 |
+
array(),
|
348 |
+
'GET'
|
349 |
+
);
|
350 |
|
351 |
+
$all_organization_urns = array();
|
352 |
+
foreach ( $admined_linkedin_pages as $key => $value ) {
|
353 |
|
354 |
+
if ( $key === 'elements' ) {
|
355 |
|
356 |
+
foreach ( $value as $key2 => $value2 ) {
|
357 |
|
358 |
+
$organizationalTarget = $value2['organizationalTarget'];
|
359 |
|
360 |
+
// urn:li:organization:5552231
|
361 |
+
$parts = explode( ':', $organizationalTarget );
|
362 |
|
363 |
+
if ( ! in_array( $parts[3], $all_organization_urns ) ) {
|
364 |
+
$all_organization_urns[] = $parts[3];
|
365 |
+
}
|
366 |
}
|
367 |
}
|
368 |
}
|
369 |
+
} catch ( Exception $e ) {
|
370 |
+
$this->logger->alert_error( 'Got in exception: ' . $e );
|
|
|
371 |
|
372 |
+
return $users;
|
373 |
+
}
|
374 |
+
} else {
|
375 |
return $users;
|
376 |
}
|
377 |
|
475 |
$_SESSION['rop_linkedin_credentials'] = $credentials;
|
476 |
$this->set_api( $credentials['client_id'], $credentials['secret'] );
|
477 |
$api = $this->get_api();
|
|
|
478 |
|
479 |
+
// NOTE: When we open up new linkedin login method for all users we need to give users a notice in their dashboard
|
480 |
+
// NOTE: Letting them know that they need to go through the upgrade process by connecting through our APP
|
481 |
+
// NOTE: Or we can simply keep them using their old app by keeping this rop_show_li_app_btn method which would be present only in this file and renaming it to something like rop_is_new_install
|
482 |
+
if ( $this->rop_show_li_app_btn() ) {
|
483 |
+
$url = $api->getLoginUrl( $this->scopes );
|
484 |
+
} else {
|
485 |
+
$url = $api->getLoginUrl( $this->scopes_old );
|
486 |
+
}
|
487 |
return $url;
|
488 |
}
|
489 |
|
506 |
// check if linkedin Account was added using Revive Social app
|
507 |
$added_with_app = get_option( 'rop_linkedin_via_rs_app' );
|
508 |
|
509 |
+
// if linkedin was connected with "Sign into Linkedin" button, use appropriate key for access token
|
510 |
+
// accounts added with "Sign into Linkedin" button will not have the ['credentials']['client_id'] array key
|
511 |
+
if ( ! empty( $added_with_app ) && empty( $args['credentials']['client_id'] ) ) {
|
512 |
$token = new \LinkedIn\AccessToken( $args['credentials'] );
|
513 |
} else {
|
514 |
$this->set_api( $this->credentials['client_id'], $this->credentials['secret'] );
|
includes/class-rop.php
CHANGED
@@ -68,7 +68,7 @@ class Rop {
|
|
68 |
public function __construct() {
|
69 |
|
70 |
$this->plugin_name = 'rop';
|
71 |
-
$this->version = '8.5.
|
72 |
|
73 |
$this->load_dependencies();
|
74 |
$this->set_locale();
|
68 |
public function __construct() {
|
69 |
|
70 |
$this->plugin_name = 'rop';
|
71 |
+
$this->version = '8.5.1';
|
72 |
|
73 |
$this->load_dependencies();
|
74 |
$this->set_locale();
|
readme.md
CHANGED
@@ -161,6 +161,9 @@ Post questions and issues on the [Support Forum](https://wordpress.org/support/p
|
|
161 |
- See where ROP is headed, check out the roadmap [here](https://trello.com/b/svAZqXO1/roadmap-revive-old-posts).
|
162 |
- For plugin documentation [see here](https://docs.revive.social/).
|
163 |
- Read more about social media marketing on [our blog](https://revive.social/blog/).
|
|
|
|
|
|
|
164 |
|
165 |
|
166 |
### Translations ###
|
@@ -251,6 +254,11 @@ http://revive.social/plugins/revive-old-post
|
|
251 |
|
252 |
|
253 |
## Changelog ##
|
|
|
|
|
|
|
|
|
|
|
254 |
### 8.5.0 - 2019-11-21 ###
|
255 |
|
256 |
* New PRO: Made it easier to connect LinkedIn Accounts for new installs
|
161 |
- See where ROP is headed, check out the roadmap [here](https://trello.com/b/svAZqXO1/roadmap-revive-old-posts).
|
162 |
- For plugin documentation [see here](https://docs.revive.social/).
|
163 |
- Read more about social media marketing on [our blog](https://revive.social/blog/).
|
164 |
+
- Read more about WordPress on [our blog](https://www.codeinwp.com/blog/).
|
165 |
+
- Take a look at our other plugins [see here](https://themeisle.com/wordpress-plugins/).
|
166 |
+
|
167 |
|
168 |
|
169 |
### Translations ###
|
254 |
|
255 |
|
256 |
## Changelog ##
|
257 |
+
### 8.5.1 - 2019-11-21 ###
|
258 |
+
|
259 |
+
* Fix PRO: LinkedIn invalid scope error on old installs
|
260 |
+
|
261 |
+
|
262 |
### 8.5.0 - 2019-11-21 ###
|
263 |
|
264 |
* New PRO: Made it easier to connect LinkedIn Accounts for new installs
|
readme.txt
CHANGED
@@ -161,6 +161,9 @@ Post questions and issues on the [Support Forum](https://wordpress.org/support/p
|
|
161 |
- See where ROP is headed, check out the roadmap [here](https://trello.com/b/svAZqXO1/roadmap-revive-old-posts).
|
162 |
- For plugin documentation [see here](https://docs.revive.social/).
|
163 |
- Read more about social media marketing on [our blog](https://revive.social/blog/).
|
|
|
|
|
|
|
164 |
|
165 |
|
166 |
= Translations =
|
@@ -251,6 +254,11 @@ http://revive.social/plugins/revive-old-post
|
|
251 |
|
252 |
|
253 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
254 |
= 8.5.0 - 2019-11-21 =
|
255 |
|
256 |
* New PRO: Made it easier to connect LinkedIn Accounts for new installs
|
161 |
- See where ROP is headed, check out the roadmap [here](https://trello.com/b/svAZqXO1/roadmap-revive-old-posts).
|
162 |
- For plugin documentation [see here](https://docs.revive.social/).
|
163 |
- Read more about social media marketing on [our blog](https://revive.social/blog/).
|
164 |
+
- Read more about WordPress on [our blog](https://www.codeinwp.com/blog/).
|
165 |
+
- Take a look at our other plugins [see here](https://themeisle.com/wordpress-plugins/).
|
166 |
+
|
167 |
|
168 |
|
169 |
= Translations =
|
254 |
|
255 |
|
256 |
== Changelog ==
|
257 |
+
= 8.5.1 - 2019-11-21 =
|
258 |
+
|
259 |
+
* Fix PRO: LinkedIn invalid scope error on old installs
|
260 |
+
|
261 |
+
|
262 |
= 8.5.0 - 2019-11-21 =
|
263 |
|
264 |
* New PRO: Made it easier to connect LinkedIn Accounts for new installs
|
themeisle-hash.json
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"class-rop-autoloader.php":"7bfbb1554230d0ace777adb2e42bebeb","index.php":"39ab8276fb0e4bd3fcab3270822c5977","tweet-old-post.php":"
|
1 |
+
{"class-rop-autoloader.php":"7bfbb1554230d0ace777adb2e42bebeb","index.php":"39ab8276fb0e4bd3fcab3270822c5977","tweet-old-post.php":"fa48c6ece0e9aa44a0ab34db1e2a7443","uninstall.php":"559dd9ebfadc88c664e6b607e2cae8fd"}
|
tweet-old-post.php
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
* Plugin Name: Revive Old Posts
|
17 |
* Plugin URI: https://revive.social/
|
18 |
* Description: WordPress plugin that helps you to keeps your old posts alive by sharing them and driving more traffic to them from twitter/facebook or linkedin. It also helps you to promote your content. You can set time and no of posts to share to drive more traffic.For questions, comments, or feature requests, <a href="http://revive.social/support/?utm_source=plugindesc&utm_medium=announce&utm_campaign=top">contact </a> us!
|
19 |
-
* Version: 8.5.
|
20 |
* Author: revive.social
|
21 |
* Author URI: https://revive.social/
|
22 |
* Requires at least: 3.5
|
@@ -98,7 +98,7 @@ function run_rop() {
|
|
98 |
}
|
99 |
|
100 |
define( 'ROP_PRO_URL', 'http://revive.social/plugins/revive-old-post/' );
|
101 |
-
define( 'ROP_LITE_VERSION', '8.5.
|
102 |
define( 'ROP_LITE_BASE_FILE', __FILE__ );
|
103 |
define( 'ROP_DEBUG', false );
|
104 |
define( 'ROP_LITE_PATH', plugin_dir_path( __FILE__ ) );
|
16 |
* Plugin Name: Revive Old Posts
|
17 |
* Plugin URI: https://revive.social/
|
18 |
* Description: WordPress plugin that helps you to keeps your old posts alive by sharing them and driving more traffic to them from twitter/facebook or linkedin. It also helps you to promote your content. You can set time and no of posts to share to drive more traffic.For questions, comments, or feature requests, <a href="http://revive.social/support/?utm_source=plugindesc&utm_medium=announce&utm_campaign=top">contact </a> us!
|
19 |
+
* Version: 8.5.1
|
20 |
* Author: revive.social
|
21 |
* Author URI: https://revive.social/
|
22 |
* Requires at least: 3.5
|
98 |
}
|
99 |
|
100 |
define( 'ROP_PRO_URL', 'http://revive.social/plugins/revive-old-post/' );
|
101 |
+
define( 'ROP_LITE_VERSION', '8.5.1' );
|
102 |
define( 'ROP_LITE_BASE_FILE', __FILE__ );
|
103 |
define( 'ROP_DEBUG', false );
|
104 |
define( 'ROP_LITE_PATH', plugin_dir_path( __FILE__ ) );
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit58cb613923fdcc2373a6b50b01097033::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitd8104aae9d5c78817e3f570f501a40b2
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
27 |
foreach ($map as $namespace => $path) {
|
@@ -42,14 +42,14 @@ class ComposerAutoloaderInitd8104aae9d5c78817e3f570f501a40b2
|
|
42 |
|
43 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
44 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
45 |
-
|
46 |
}
|
47 |
|
48 |
return $loader;
|
49 |
}
|
50 |
}
|
51 |
|
52 |
-
function
|
53 |
{
|
54 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
55 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit58cb613923fdcc2373a6b50b01097033
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit58cb613923fdcc2373a6b50b01097033', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit58cb613923fdcc2373a6b50b01097033', 'loadClassLoader'));
|
25 |
|
26 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
27 |
foreach ($map as $namespace => $path) {
|
42 |
|
43 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
44 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
45 |
+
composerRequire58cb613923fdcc2373a6b50b01097033($fileIdentifier, $file);
|
46 |
}
|
47 |
|
48 |
return $loader;
|
49 |
}
|
50 |
}
|
51 |
|
52 |
+
function composerRequire58cb613923fdcc2373a6b50b01097033($fileIdentifier, $file)
|
53 |
{
|
54 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
55 |
require $file;
|