GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — master (#175)
by Chris
04:24
created

linkedin-functions.php ➔ ppp_li_save_post_meta_boxes()   F

Complexity

Conditions 10
Paths 257

Size

Total Lines 26
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 81.6196

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 10
eloc 18
c 1
b 0
f 0
nc 257
nop 2
dl 0
loc 26
rs 3.1304
ccs 2
cts 19
cp 0.1053
crap 81.6196

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
// Exit if accessed directly
4
if ( ! defined( 'ABSPATH' ) ) {
5
	exit;
6
}
7
8
/**
9
 * Return if linkedin account is found
10
 * @return bool If the Linkedin object exists
11
 */
12
function ppp_linkedin_enabled() {
13
	global $ppp_social_settings;
14
15
	if ( isset( $ppp_social_settings['linkedin'] ) && !empty( $ppp_social_settings['linkedin'] ) ) {
16
		return true;
17
	}
18
19
	return false;
20
}
21
22
/**
23
 * Registers LinkedIn as a service
24
 * @param  array $services The registered servcies
25
 * @return array           With LinkedIn added
26
 */
27
function ppp_li_register_service( $services = array() ) {
28
	$services[] = 'li';
29
30
	return $services;
31
}
32
add_filter( 'ppp_register_social_service', 'ppp_li_register_service', 10, 1 );
33
34
/**
35
 * The LinkedIn icon
36
 * @param  string $string Default list view string for icon
37
 * @return string         The LinkedIn Icon HTML
38
 */
39
function ppp_li_account_list_icon( $string = '' ) {
40
	$string .= '<span class="dashicons icon-ppp-li"></span>';
41
42
	return $string;
43
}
44
add_filter( 'ppp_account_list_icon-li', 'ppp_li_account_list_icon', 10, 1 );
45
46
/**
47
 * The LinkedIn Avatar for the account list
48
 * @param  string $string Default icon string
49
 * @return string         The HTML for the LinkedIn Avatar
50
 */
51
function ppp_li_account_list_avatar( $string = '' ) {
52
	return $string;
53
}
54
add_filter( 'ppp_account_list_avatar-li', 'ppp_li_account_list_avatar', 10, 1 );
55
56
/**
57
 * The name for the linked LinkedIn account
58
 * @param  string $string The default list name
59
 * @return string         The name for the attached LinkedIn account
60
 */
61
function ppp_li_account_list_name( $string = '' ) {
62
63
	if ( ppp_linkedin_enabled() ) {
64
		global $ppp_social_settings;
65
		$string .= $ppp_social_settings['linkedin']->firstName . ' ' . $ppp_social_settings['linkedin']->lastName;
66
		$string .= '<br />' . $ppp_social_settings['linkedin']->headline;
67
	}
68
69
	return $string;
70
}
71
add_filter( 'ppp_account_list_name-li', 'ppp_li_account_list_name', 10, 1 );
72
73
/**
74
 * The actions column of the accounts list for LinkedIn
75
 * @param  string $string The default actions string
76
 * @return string         HTML for the LinkedIn Actions
77
 */
78
function ppp_li_account_list_actions( $string = '' ) {
79
80
	if ( ! ppp_linkedin_enabled() ) {
81
		global $ppp_linkedin_oauth, $ppp_social_settings;
82
		$li_authurl = $ppp_linkedin_oauth->ppp_get_linkedin_auth_url( admin_url( 'admin.php?page=ppp-social-settings' ) );
83
84
		$string .= '<a class="button-primary" href="' . $li_authurl . '">' . __( 'Connect to Linkedin', 'ppp-txt' ) . '</a>';
85
	} else {
86
		$string  .= '<a class="button-primary" href="' . admin_url( 'admin.php?page=ppp-social-settings&ppp_social_disconnect=true&ppp_network=linkedin' ) . '" >' . __( 'Disconnect from Linkedin', 'ppp-txt' ) . '</a>&nbsp;';
87
	}
88
89
	return $string;
90
}
91
add_filter( 'ppp_account_list_actions-li', 'ppp_li_account_list_actions', 10, 1 );
92
93
/**
94
 * The Extras column for the account list for LinkedIn
95
 * @param  string $string Default extras column string
96
 * @return string         The HTML for the LinkedIn Extras column
97
 */
98
function ppp_li_account_list_extras( $string ) {
99
	if ( ppp_linkedin_enabled() ) {
100
		global $ppp_social_settings, $ppp_options;
101
		if ( ! empty( $ppp_options['enable_debug'] ) ) {
102
			$days_left  = absint( round( ( $ppp_social_settings['linkedin']->expires_on - current_time( 'timestamp' ) ) / DAY_IN_SECONDS ) );
103
			$refresh_in = absint( round( ( get_option( '_ppp_linkedin_refresh' ) - current_time( 'timestamp' ) ) / DAY_IN_SECONDS ) );
104
105
			$string .= '<br />' . sprintf( __( 'Token expires in %s days' , 'ppp-txt' ), $days_left );
106
			$string .= '<br />' . sprintf( __( 'Refresh notice in %s days', 'ppp-txt' ), $refresh_in );
107
		}
108
	}
109
110
	return $string;
111
112
}
113
add_filter( 'ppp_account_list_extras-li', 'ppp_li_account_list_extras', 10, 1 );
114
115
/**
116
 * Capture the oauth return from linkedin
117
 * @return void
118
 */
119
function ppp_capture_linkedin_oauth() {
120
	$should_capture = false;
121
122
	if ( isset( $_GET['state'] ) && strpos( $_GET['state'], 'ppp-local-keys-li' ) !== false ) {
123
		// Local config
124
		$should_capture = true;
125
	}
126
127
	if ( isset( $_REQUEST['li_access_token'] ) ) {
128
		// Returning from remote config
129
		$should_capture = true;
130
	}
131
132
	if ( $should_capture && ( isset( $_REQUEST['page'] ) && $_REQUEST['page'] == 'ppp-social-settings' ) ) {
133
		global $ppp_linkedin_oauth;
134
		$ppp_linkedin_oauth->ppp_initialize_linkedin();
135
		wp_redirect( admin_url( 'admin.php?page=ppp-social-settings' ) );
136
		die();
137
	}
138
}
139
add_action( 'admin_init', 'ppp_capture_linkedin_oauth', 10 );
140
141
/**
142
 * Capture the disconnect request from Linkedin
143
 * @return void
144
 */
145
function ppp_disconnect_linkedin() {
146
	global $ppp_social_settings;
147
	$ppp_social_settings = get_option( 'ppp_social_settings' );
148
	if ( isset( $ppp_social_settings['linkedin'] ) ) {
149
		unset( $ppp_social_settings['linkedin'] );
150
		update_option( 'ppp_social_settings', $ppp_social_settings );
151
		delete_option( '_ppp_linkedin_refresh' );
152
	}
153
}
154
add_action( 'ppp_disconnect-linkedin', 'ppp_disconnect_linkedin', 10 );
155
156
/**
157
 * Add query vars for Linkedin
158
 * @param  array $vars Currenty Query Vars
159
 * @return array       Query vars array with linkedin added
160
 */
161
function ppp_li_query_vars( $vars ) {
162 1
	$vars[] = 'li_access_token';
163 1
	$vars[] = 'expires_in';
164
165 1
	return $vars;
166
}
167
add_filter( 'query_vars', 'ppp_li_query_vars' );
168
169
/**
170
 * Refreshes the Linkedin Access Token
171
 * @return void
172
 */
173
function ppp_li_execute_refresh() {
174
175
	if ( ! ppp_linkedin_enabled() ) {
176
		return;
177
	}
178
179
	$refresh_date = (int) get_option( '_ppp_linkedin_refresh', true );
180
181
	if ( current_time( 'timestamp' ) > $refresh_date ) {
182
		add_action( 'admin_notices', 'ppp_linkedin_refresh_notice' );
183
	}
184
}
185
add_action( 'admin_init', 'ppp_li_execute_refresh' );
186
187
/**
188
 * Displays notice when the Linkedin Token is nearing expiration
189
 * @return void
190
 */
191
function ppp_linkedin_refresh_notice() {
192
193
	if ( ! ppp_linkedin_enabled() ) {
194
		return;
195
	}
196
197
	$has_dismissed = get_transient( 'ppp-dismiss-refresh-li' . get_current_user_id() );
198
	if ( false !== $has_dismissed ) {
199
		return;
200
	}
201
202
	global $ppp_linkedin_oauth, $ppp_social_settings;
203
204
	// Look for the tokens coming back
205
	$ppp_linkedin_oauth->ppp_initialize_linkedin();
206
207
	$token = $ppp_social_settings['linkedin']->access_token;
208
	$url = $ppp_linkedin_oauth->ppp_get_linkedin_auth_url( admin_url( 'admin.php?page=ppp-social-settings' ) );
209
	$url = str_replace( '?ppp-social-auth', '?ppp-social-auth&ppp-refresh=true&access_token=' . $token, $url );
210
211
	$days_left = (int) round( ( $ppp_social_settings['linkedin']->expires_on - current_time( 'timestamp' ) ) / DAY_IN_SECONDS );
212
	?>
213
	<div class="notice notice-warning is-dismissible" data-service="li">
214
		<?php if ( $days_left > 0 ): ?>
215
			<p><strong>Post Promoter Pro: </strong><?php printf( __( 'Your LinkedIn authentication expires in within %d days. Please <a href="%s">refresh access</a>.', 'ppp-txt' ), $days_left, $url ); ?></p>
216
		<?php elseif ( $days_left < 1 ): ?>
217
			<p><strong>Post Promoter Pro: </strong><?php printf( __( 'Your LinkedIn authentication has expired. Please <a href="%s">refresh access</a>.', 'ppp-txt' ), $url ); ?></p>
218
		<?php endif; ?>
219
	</div>
220
	<?php
221
}
222
223
/**
224
 * Allow dismissing of the admin notices on a user level
225
 *
226
 * @since  2.3
227
 * @return void
228
 */
229
function ppp_li_dismiss_notice() {
230
231
	$nag = sanitize_key( $_POST[ 'nag' ] );
232
233
	if ( $nag === $_POST[ 'nag' ] ) {
234
		set_transient( $nag . get_current_user_id(), true, DAY_IN_SECONDS );
235
	}
236
237
238
}
239
add_action( 'wp_ajax_ppp_dismiss_notice-li', 'ppp_li_dismiss_notice' );
240
241
/**
242
 * Define the linkedin tokens as constants
243
 * @param  array $social_tokens The Keys
244
 * @return void
245
 */
246
function ppp_set_li_token_constants( $social_tokens ) {
247
	if ( !empty( $social_tokens ) && property_exists( $social_tokens, 'linkedin' ) ) {
248
		define( 'LINKEDIN_KEY', $social_tokens->linkedin->api_key );
249
		define( 'LINKEDIN_SECRET', $social_tokens->linkedin->secret_key );
250
	}
251
}
252
add_action( 'ppp_set_social_token_constants', 'ppp_set_li_token_constants', 10, 1 );
253
254
/**
255
 * Share a post to Linkedin
256
 * @param  string $title       The Title of the Linkedin Post
257
 * @param  string $description The Description of the post
258
 * @param  string $link        The URL to the post
259
 * @param  mixed  $media       False for no media, url to the image if exists
260
 * @return array               The results array from the API
261
 */
262
function ppp_li_share( $title, $description, $link, $media ) {
263
	global $ppp_linkedin_oauth;
264
	$args = array (
265
		'title' => ppp_entities_and_slashes( $title ),
266
		'description' => ppp_entities_and_slashes( $description ),
267
		'submitted-url' => $link,
268
		'submitted-image-url' => $media
269
		);
270
271
	return $ppp_linkedin_oauth->ppp_linkedin_share( $args );
272
}
273
274
/**
275
 * Add the LinkedIn tab to the social media area
276
 * @param  array $tabs The existing tabs
277
 * @return array       The tabs with LinkedIn Added
278
 */
279
function ppp_li_add_admin_tab( $tabs ) {
280
	$tabs['li'] = array( 'name' => __( 'LinkedIn', 'ppp-txt' ), 'class' => 'icon-ppp-li' );
281
282
	return $tabs;
283
}
284
add_filter( 'ppp_admin_tabs', 'ppp_li_add_admin_tab', 10, 1 );
285
286
/**
287
 * Add the content box for LinkedIn in the social media settings
288
 * @param  array $content The existing content blocks
289
 * @return array          With LinkedIn
290
 */
291
function ppp_li_register_admin_social_content( $content ) {
292
	$content[] = 'li';
293
294
	return $content;
295
}
296
add_filter( 'ppp_admin_social_content', 'ppp_li_register_admin_social_content', 10, 1 );
297
298
/**
299
 * Add LinkedIn to the Meta Box Tabs
300
 * @param  array $tabs Existing Metabox Tabs
301
 * @return array       Metabox tabs with LinkedIn
302
 */
303
function ppp_li_add_meta_tab( $tabs ) {
304
	global $ppp_social_settings;
305
	if ( ! ppp_linkedin_enabled() ) {
306
		return $tabs;
307
	}
308
309
	$tabs['li'] = array( 'name' => __( 'LinkedIn', 'ppp-txt' ), 'class' => 'icon-ppp-li' );
310
311
	return $tabs;
312
}
313
add_filter( 'ppp_metabox_tabs', 'ppp_li_add_meta_tab', 10, 1 );
314
315
/**
316
 * Add LinkedIn to the Metabox Content
317
 * @param  array $content The existing metabox content
318
 * @return array          With LinkedIn
319
 */
320
function ppp_li_register_metabox_content( $content ) {
321
	global $ppp_social_settings;
322
	if ( ! ppp_linkedin_enabled() ) {
323
		return $content;
324
	}
325
326
	$content[] = 'li';
327
328
	return $content;
329
}
330
add_filter( 'ppp_metabox_content', 'ppp_li_register_metabox_content', 10, 1 );
331
332
/**
333
 * Returns the stored LinkedIn data for a post
334
 *
335
 * @since  2.3
336
 * @param  array $post_meta Array of meta data (empty)
337
 * @param  int   $post_id   The Post ID to get the meta for
338
 * @return array            The stored LinkedIn shares for a post
339
 */
340
function ppp_li_get_post_meta( $post_meta, $post_id ) {
0 ignored issues
show
Unused Code introduced by
The parameter $post_meta is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
341
	return get_post_meta( $post_id, '_ppp_li_shares', true );
342
}
343
add_filter( 'ppp_get_scheduled_items_li', 'ppp_li_get_post_meta', 10, 2 );
344
345
/**
346
 * Registers the thumbnail size for LinkedIn
347
 * @return void
348
 */
349
function ppp_li_register_thumbnail_size() {
350
	add_image_size( 'ppp-li-share-image', 800, 800, true );
351
}
352
add_action( 'ppp_add_image_sizes', 'ppp_li_register_thumbnail_size' );
353
354
/**
355
 * Render the Metabox content for LinkedIn
356
 * @param  object $post The post object
357
 */
358
function ppp_li_add_metabox_content( $post ) {
359
	global $ppp_options, $ppp_share_settings;
360
	$default_text = !empty( $ppp_options['default_text'] ) ? $ppp_options['default_text'] : __( 'Social Text', 'ppp-txt' );
0 ignored issues
show
Unused Code introduced by
$default_text is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
361
362
	$ppp_li_share_on_publish               = get_post_meta( $post->ID, '_ppp_li_share_on_publish', true );
363
	$ppp_share_on_publish_title            = get_post_meta( $post->ID, '_ppp_li_share_on_publish_title', true );
364
	$ppp_share_on_publish_desc             = get_post_meta( $post->ID, '_ppp_li_share_on_publish_desc', true );
365
	$ppp_li_share_on_publish_attachment_id = get_post_meta( $post->ID, '_ppp_li_share_on_publish_attachment_id', true );
366
	$ppp_li_share_on_publish_image_url     = get_post_meta( $post->ID, '_ppp_li_share_on_publish_image_url', true );
367
368
	$show_share_on_publish = false;
369
370
	$share_by_default      = empty( $ppp_share_settings['linkedin']['share_on_publish'] ) ? false : true;
371
372
	if ( $ppp_li_share_on_publish == '1' || ( $ppp_li_share_on_publish == '' && $share_by_default ) ) {
373
		$show_share_on_publish = true;
374
	}
375
	?>
376
	<p>
377
		<div class="ppp-post-override-wrap">
378
			<p><h3><?php _e( 'Share on LinkedIn', 'ppp-txt' ); ?></h3></p>
379
			<p>
380
				<?php $disabled = ( $post->post_status === 'publish' && time() > strtotime( $post->post_date ) ) ? true : false; ?>
381
				<label for="ppp_li_share_on_publish"><?php _e( 'Share this post on LinkedIn&hellip;', 'ppp-txt' ); ?></label>
382
				<select name="_ppp_li_share_on_publish" id="ppp_li_share_on_publish" class="ppp-toggle-share-on-publish">
383
					<option value="-1" <?php selected( true, $show_share_on_publish, true ); ?><?php if ( $disabled ): ?>disabled<?php endif; ?>><?php _e( 'Do not share this post', 'ppp-txt' ); ?></option>
384
					<option value="1" <?php selected( true, $show_share_on_publish, true ); ?><?php if ( $disabled ): ?>disabled<?php endif; ?>><?php _e( 'When this post is published', 'ppp-txt' ); ?></option>
385
					<option value="0" <?php selected( false, $show_share_on_publish, true ); ?>><?php _e( 'After this post is published', 'ppp-txt' ); ?></option>
386
				</select>
387
			</p>
388
			<div id="ppp-li-fields" class="ppp-fields">
389
				<div id="ppp-li-fields" class="ppp-meta-table-wrap">
390
					<table class="widefat ppp-repeatable-table" width="100%" cellpadding="0" cellspacing="0">
391
						<thead>
392
							<tr>
393
								<th style="width: 100px"><?php _e( 'Date', 'ppp-txt' ); ?></th>
394
								<th style="width: 75px;"><?php _e( 'Time', 'ppp-txt' ); ?></th>
395
								<th><?php _e( 'Link Info', 'ppp-txt' ); ?></th>
396
								<th style"width: 200px;"><?php _e( 'Image', 'ppp-txt' ); ?></th>
397
								<th style="width: 10px;"></th>
398
							</tr>
399
						</thead>
400
						<tbody id="li-share-on-publish" class="ppp-share-on-publish" <?php if ( false === $show_share_on_publish ) : echo 'style="display: none;"'; endif; ?>>
401
							<?php
402
								$args = array(
403
									'text'          => $ppp_share_on_publish_title,
404
									'desc'          => $ppp_share_on_publish_desc,
405
									'attachment_id' => $ppp_li_share_on_publish_attachment_id,
406
									'image'         => $ppp_li_share_on_publish_image_url,
407
								);
408
409
								ppp_render_li_share_on_publish_row( $args );
410
							?>
411
						</tbody>
412
						<tbody id="li-schedule-share" class="ppp-schedule-share" <?php if ( true === $show_share_on_publish ) : echo 'style="display: none;"'; endif; ?>>
413
							<?php $shares = get_post_meta( $post->ID, '_ppp_li_shares', true ); ?>
414
							<?php if ( ! empty( $shares ) ) : ?>
415
416
								<?php foreach ( $shares as $key => $value ) :
417
									$date          = isset( $value['date'] )          ? $value['date']          : '';
418
									$time          = isset( $value['time'] )          ? $value['time']          : '';
419
									$text          = isset( $value['text'] )          ? $value['text']          : '';
420
									$desc          = isset( $value['desc'] )          ? $value['desc']          : '';
421
									$image         = isset( $value['image'] )         ? $value['image']         : '';
422
									$attachment_id = isset( $value['attachment_id'] ) ? $value['attachment_id'] : '';
423
424
									$args = apply_filters( 'ppp_fb_row_args', compact( 'date','time','text', 'desc', 'image','attachment_id' ), $value );
425
									?>
426
427
									<?php ppp_render_li_share_row( $key, $args ); ?>
428
429
430
								<?php endforeach; ?>
431
432
							<?php else: ?>
433
434
								<?php ppp_render_li_share_row( 1, array( 'date' => '', 'time' => '', 'text' => '', 'desc' => '', 'image' => '', 'attachment_id' => '' ) ); ?>
435
436
							<?php endif; ?>
437
						</tbody>
438
					</table>
439
				</div>
440
			</div><!--end #edd_variable_price_fields-->
441
442
			<p><?php _e( 'Do not include links in your text, this will be added automatically.', 'ppp-txt' ); ?></p>
443
		</div>
444
		<?php _e( 'Note: If no image is chosen, and the post has a featured image, the Featured image will be attached to this share', 'ppp-txt' ); ?>
445
	</p>
446
	<?php
447
}
448
add_action( 'ppp_generate_metabox_content-li', 'ppp_li_add_metabox_content', 10, 1 );
449
450
/**
451
 * Render the LinkedIn share on publish row
452
 *
453
 * @since  2.3
454
 * @param  array  $args Contains share on publish data, if there is any
455
 * @return void
456
 */
457
function ppp_render_li_share_on_publish_row( $args = array() ) {
458
	global $post;
459
	$readonly = $post->post_status !== 'publish' ? '' : 'readonly="readonly" ';
460
	$disabled = ( $post->post_status === 'publish' && time() > strtotime( $post->post_date ) ) ? true : false;
461
	?>
462
	<tr class="ppp-li-wrapper ppp-repeatable-row on-publish-row">
463
		<td colspan="2" class="ppp-on-plublish-date-column">
464
			<?php _e( 'Share On Publish', 'ppp-txt' ); ?>
465
		</td>
466
467
		<td>
468
			<input <?php echo $readonly; ?>class="ppp-tweet-text-repeatable" type="text" name="_ppp_li_share_on_publish_title" value="<?php echo esc_attr( $args['text'] ); ?>" placeholder="<?php _e( 'Link Title', 'ppp-txt' ); ?>" />
469
		</td>
470
471
		<td class="ppp-repeatable-upload-wrapper" style="width: 200px" colspan="2">
472
			<div class="ppp-repeatable-upload-field-container">
473
				<input type="hidden" name="_ppp_li_share_on_publish_attachment_id" class="ppp-repeatable-attachment-id-field" value="<?php echo esc_attr( absint( $args['attachment_id'] ) ); ?>"/>
474
				<input <?php echo $readonly; ?>type="text" class="ppp-repeatable-upload-field ppp-upload-field" name="_ppp_li_share_on_publish_image_url" placeholder="<?php _e( 'Upload or Enter URL', 'ppp-txt' ); ?>" value="<?php echo esc_attr( $args['image'] ); ?>" />
475
476
				<span class="ppp-upload-file">
477
					<a href="#" title="<?php _e( 'Insert File', 'ppp-txt' ) ?>" data-uploader-title="<?php _e( 'Insert File', 'ppp-txt' ); ?>" data-uploader-button-text="<?php _e( 'Insert', 'ppp-txt' ); ?>" class="ppp-upload-file-button" onclick="return false;">
478
						<span class="dashicons dashicons-upload"></span>
479
					</a>
480
				</span>
481
482
			</div>
483
		</td>
484
	</tr>
485
	<tr>
486
		<td colspan="2"></td>
487
		<td colspan="3">
488
			<textarea <?php if ( $disabled ): ?>readonly<?php endif; ?> name="_ppp_li_share_on_publish_desc" placeholder="<?php _e( 'Link Description', 'ppp-txt' ); ?>"><?php echo esc_attr( $args['desc'] ); ?></textarea>
489
		</td>
490
	</tr>
491
<?php
492
}
493
494
/**
495
 * Render the scheduled share row for LinkedIn
496
 *
497
 * @since  2.3
498
 * @param  int $key        The key in the array
499
 * @param  array  $args    Arguements for the current post's share data
500
 * @param  int    $post_id The post ID being edited
0 ignored issues
show
Bug introduced by
There is no parameter named $post_id. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
501
 * @return void
502
 */
503
function ppp_render_li_share_row( $key, $args = array() ) {
504
	global $post;
505
506
	$share_time     = strtotime( $args['date'] . ' ' . $args['time'] );
507
	$readonly       = current_time( 'timestamp' ) > $share_time ? 'readonly="readonly" ' : '';
508
	$no_date        = ! empty( $readonly ) ? ' hasDatepicker' : '';
509
	$hide           = ! empty( $readonly ) ? 'display: none;' : '';
510
	?>
511
	<tr class="ppp-li-wrapper ppp-repeatable-row ppp-repeatable-linkedin scheduled-row" data-key="<?php echo esc_attr( $key ); ?>">
512
		<td>
513
			<input <?php echo $readonly; ?>type="text" class="share-date-selector<?php echo $no_date; ?>" name="_ppp_li_shares[<?php echo $key; ?>][date]" placeholder="mm/dd/yyyy" value="<?php echo $args['date']; ?>" />
514
		</td>
515
516
		<td>
517
			<input <?php echo $readonly; ?>type="text" class="share-time-selector" name="_ppp_li_shares[<?php echo $key; ?>][time]" value="<?php echo $args['time']; ?>" />
518
		</td>
519
520
		<td>
521
			<input <?php echo $readonly; ?>class="ppp-tweet-text-repeatable" type="text" name="_ppp_li_shares[<?php echo $key; ?>][text]" value="<?php echo esc_attr( $args['text'] ); ?>" placeholder="<?php _e( 'Link Title', 'ppp-txt' ); ?>"/>
522
		</td>
523
524
		<td class="ppp-repeatable-upload-wrapper" style="width: 200px">
525
			<div class="ppp-repeatable-upload-field-container">
526
				<input type="hidden" name="_ppp_li_shares[<?php echo $key; ?>][attachment_id]" class="ppp-repeatable-attachment-id-field" value="<?php echo esc_attr( absint( $args['attachment_id'] ) ); ?>"/>
527
				<input <?php echo $readonly; ?>type="text" class="ppp-repeatable-upload-field ppp-upload-field" name="_ppp_li_shares[<?php echo $key; ?>][image]" placeholder="<?php _e( 'Upload or Enter URL', 'ppp-txt' ); ?>" value="<?php echo esc_attr( $args['image'] ); ?>" />
528
529
				<span class="ppp-upload-file" style="<?php echo $hide; ?>">
530
					<a href="#" title="<?php _e( 'Insert File', 'ppp-txt' ) ?>" data-uploader-title="<?php _e( 'Insert File', 'ppp-txt' ); ?>" data-uploader-button-text="<?php _e( 'Insert', 'ppp-txt' ); ?>" class="ppp-upload-file-button" onclick="return false;">
531
						<span class="dashicons dashicons-upload"></span>
532
					</a>
533
				</span>
534
535
			</div>
536
		</td>
537
538
		<td>
539
			<a href="#" class="ppp-repeatable-row ppp-remove-repeatable" data-type="linkedin" style="background: url(<?php echo admin_url('/images/xit.gif'); ?>) no-repeat;<?php echo $hide; ?>">&times;</a>
540
		</td>
541
542
	</tr>
543
	<tr>
544
		<td colspan="2"></td>
545
		<td colspan="3">
546
			<textarea <?php echo $readonly; ?> class="ppp-repeatable-textarea" name="_ppp_li_shares[<?php echo $key; ?>][desc]" placeholder="<?php _e( 'Link Description', 'ppp-txt' ); ?>"><?php echo esc_attr( $args['desc'] ); ?></textarea>
547
		</td>
548
	</tr>
549
<?php
550
}
551
552
/**
553
 * Save the items in our meta boxes
554
 * @param  int $post_id The Post ID being saved
555
 * @param  object $post    The Post Object being saved
556
 * @return int          The Post ID
557
 */
558
function ppp_li_save_post_meta_boxes( $post_id, $post ) {
559
560 35
	if ( ! ppp_should_save( $post_id, $post ) ) {
561 35
		return;
562
	}
563
564
	$ppp_li_share_on_publish            = ( isset( $_REQUEST['_ppp_li_share_on_publish'] ) )               ? $_REQUEST['_ppp_li_share_on_publish']               : '-1';
565
	$ppp_share_on_publish_title         = ( isset( $_REQUEST['_ppp_li_share_on_publish_title'] ) )         ? $_REQUEST['_ppp_li_share_on_publish_title']         : '';
566
	$ppp_share_on_publish_desc          = ( isset( $_REQUEST['_ppp_li_share_on_publish_desc'] ) )          ? $_REQUEST['_ppp_li_share_on_publish_desc']          : '';
567
	$ppp_share_on_publish_image_url     = ( isset( $_REQUEST['_ppp_li_share_on_publish_image_url'] ) )     ? $_REQUEST['_ppp_li_share_on_publish_image_url']     : '';
568
	$ppp_share_on_publish_attachment_id = ( isset( $_REQUEST['_ppp_li_share_on_publish_attachment_id'] ) ) ? $_REQUEST['_ppp_li_share_on_publish_attachment_id'] : '';
569
570
	update_post_meta( $post_id, '_ppp_li_share_on_publish',               $ppp_li_share_on_publish );
571
	update_post_meta( $post_id, '_ppp_li_share_on_publish_title',         $ppp_share_on_publish_title );
572
	update_post_meta( $post_id, '_ppp_li_share_on_publish_desc',          $ppp_share_on_publish_desc );
573
	update_post_meta( $post_id, '_ppp_li_share_on_publish_image_url',     $ppp_share_on_publish_image_url );
574
	update_post_meta( $post_id, '_ppp_li_share_on_publish_attachment_id', $ppp_share_on_publish_attachment_id );
575
576
	$li_data = ( isset( $_REQUEST['_ppp_li_shares'] ) && empty( $ppp_li_share_on_publish ) ) ? $_REQUEST['_ppp_li_shares'] : array();
577
	foreach ( $li_data as $index => $share ) {
578
		$li_data[ $index ]['text'] = sanitize_text_field( $share['text'] );
579
		$li_data[ $index ]['desc'] = sanitize_text_field( $share['desc'] );
580
	}
581
582
	update_post_meta( $post_id, '_ppp_li_shares', $li_data );
583
}
584
add_action( 'save_post', 'ppp_li_save_post_meta_boxes', 10, 2 ); // save the custom fields
585
586
/**
587
 * Share a linkedin post on Publish
588
 * @param  string $old_status The old post status
589
 * @param  string $new_status The new post status
590
 * @param  object $post       The Post object
591
 * @return void
592
 */
593
function ppp_li_share_on_publish( $new_status, $old_status, $post ) {
0 ignored issues
show
Unused Code introduced by
The parameter $new_status is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $old_status is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
594
	global $ppp_options;
595
	$from_meta = get_post_meta( $post->ID, '_ppp_li_share_on_publish', true );
596
	$from_post = isset( $_POST['_ppp_li_share_on_publish'] ) ? $_POST['_ppp_li_share_on_publish']: '0';
597
598
	if ( '1' != $from_meta && '1' != $from_post ) {
599
		return;
600
	}
601
602
	$from_meta = $from_meta == '1' ? true : false;
603
	$from_post = $from_post == '1' ? true : false;
604
605
	$title         = '';
0 ignored issues
show
Unused Code introduced by
$title is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
606
	$desc          = '';
0 ignored issues
show
Unused Code introduced by
$desc is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
607
	$attachment_id = 0;
0 ignored issues
show
Unused Code introduced by
$attachment_id is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
608
	$image_url     = '';
0 ignored issues
show
Unused Code introduced by
$image_url is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
609
610
	// Determine if we're seeing the share on publish in meta or $_POST
611
	if ( $from_meta && ! $from_post ) {
612
		$title         = get_post_meta( $post->ID, '_ppp_li_share_on_publish_title'        , true );
613
		$desc          = get_post_meta( $post->ID, '_ppp_li_share_on_publish_desc'         , true );
614
		$attachment_id = get_post_meta( $post->ID, '_ppp_li_share_on_publish_attachment_id', true );
615
		$image_url     = get_post_meta( $post->ID, '_ppp_li_share_on_publish_image_url'    , true );
616
	} else {
617
		$title         = isset( $_POST['_ppp_li_share_on_publish_title'] )         ? $_POST['_ppp_li_share_on_publish_title']         : '';
618
		$desc          = isset( $_POST['_ppp_li_share_on_publish_desc'] )          ? $_POST['_ppp_li_share_on_publish_desc']          : false;
619
		$attachment_id = isset( $_POST['_ppp_li_share_on_publish_attachment_id'] ) ? $_POST['_ppp_li_share_on_publish_attachment_id'] : 0;
620
		$image_url     = isset( $_POST['_ppp_li_share_on_publish_image_url'] )     ? $_POST['_ppp_li_share_on_publish_image_url']     : '';
621
	}
622
623
	$thumbnail = '';
0 ignored issues
show
Unused Code introduced by
$thumbnail is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
624
	if ( empty( $attachment_id ) && ! empty( $image_url ) ) {
625
		$thumbnail = $image_url;
626
	} else {
627
		$thumbnail = ppp_post_has_media( $post->ID, 'li', true, $attachment_id );
628
	}
629
630
	$name = 'sharedate_0_' . $post->ID . '_li';
631
632
	$default_title = isset( $ppp_options['default_text'] ) ? $ppp_options['default_text'] : '';
633
	// If an override was found, use it, otherwise try the default text content
634
	if ( empty( $title ) && empty( $default_title ) ) {
635
		$title = get_the_title( $post->ID );
636
	}
637
638
	$link      = ppp_generate_link( $post->ID, $name, true );
639
	$status    = ppp_li_share( $title, $desc, $link, $thumbnail );
640
	$log_title = ppp_li_build_share_message( $post->ID, $name );
641
642
	$log_data = array(
643
		'post_title'    => $log_title,
644
		'post_content'  => '',
645
		'post_parent'   => $post->ID,
646
		'log_type'      => 'ppp_share',
647
	);
648
649
	$log_meta = array(
650
		'network'   => 'li',
651
	);
652
653
	$log_entry = WP_Logging::insert_log( $log_data, $log_meta );
654
655
	update_post_meta( $log_entry, '_ppp_share_status', $status );
656
}
657
add_action( 'ppp_share_on_publish', 'ppp_li_share_on_publish', 10, 3 );
658
659
/**
660
 * Send out a scheduled share to LinkedIn
661
 *
662
 * @since  2.3
663
 * @param  integer $post_id The Post ID to share fore
664
 * @param  integer $index   The index in the shares
665
 * @param  string  $name    The name of the Cron
666
 * @return void
667
 */
668
function ppp_li_scheduled_share(  $post_id = 0, $index = 1, $name = ''  ) {
669
	global $ppp_options;
670
671
	$link = ppp_generate_link( $post_id, $name );
672
673
	$post_meta     = get_post_meta( $post_id, '_ppp_li_shares', true );
674
	$this_share    = $post_meta[ $index ];
675
	$attachment_id = isset( $this_share['attachment_id'] ) ? $this_share['attachment_id'] : false;
676
677
	$share_message = ppp_li_build_share_message( $post_id, $name );
678
679
	if ( empty( $attachment_id ) && ! empty( $this_share['image'] ) ) {
680
		$media = $this_share['image'];
681
	} else {
682
		$use_media = ppp_li_use_media( $post_id, $index );
683
		$media     = ppp_post_has_media( $post_id, 'li', $use_media, $attachment_id );
684
	}
685
686
	$desc      = ppp_li_get_share_description( $post_id, $index );
687
	$status    = ppp_li_share( $share_message, $desc, $link, $media );
688
	$log_title = ppp_li_build_share_message( $post_id, $name );
689
690
	$log_data = array(
691
		'post_title'    => $log_title,
692
		'post_content'  => '',
693
		'post_parent'   => $post_id,
694
		'log_type'      => 'ppp_share'
695
	);
696
697
	$log_meta = array(
698
		'network'   => 'li',
699
	);
700
701
	$log_entry = WP_Logging::insert_log( $log_data, $log_meta );
702
703
	update_post_meta( $log_entry, '_ppp_share_status', $status );
704
705
}
706
add_action( 'ppp_share_scheduled_li', 'ppp_li_scheduled_share', 10, 3 );
707
708
/**
709
 * Return if media is supported for this scheduled post
710
 * @param  int $post_id The Post ID
711
 * @param  int $index   The index of this tweet in the _ppp_tweets data
712
 * @return bool         Whether or not this tweet should contain a media post
713
 */
714
function ppp_li_use_media( $post_id, $index ) {
715
	if ( empty( $post_id ) || empty( $index ) ) {
716
		return false;
717
	}
718
719
	return true; // Always include an image for facebook, even if it's a fallback to the featured image
720
}
721
722
/**
723
 * Build the text for the LinkedIn share
724
 *
725
 * @since  2.3
726
 * @param  int     $post_id   The Post ID
727
 * @param  string  $name      The cron name
728
 * @param  boolean $scheduled If the item is being fired by a schedule (default, true), or retrieved for display (false)
729
 * @return string             The message to share
730
 */
731
function ppp_li_build_share_message( $post_id, $name, $scheduled = true ) {
0 ignored issues
show
Unused Code introduced by
The parameter $scheduled is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
732
	$share_content = ppp_li_generate_share_content( $post_id, $name );
733
734
	return apply_filters( 'ppp_li_build_share_message', $share_content );
735
}
736
737
/**
738
 * The worker function for ppp_li_build_share_message
739
 *
740
 * @since  2.3
741
 * @param  int     $post_id      Post ID
742
 * @param  string  $name         The cron name
743
 * @param  boolean $scheduled    If the item is being fired by a schedule (default, true), or retrieved for display (false)
0 ignored issues
show
Documentation introduced by
There is no parameter named $scheduled. Did you maybe mean $is_scheduled?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
744
 * @return string                The formatted link to the post
745
 */
746
function ppp_li_generate_share_content( $post_id, $name, $is_scheduled = true ) {
747
	global $ppp_options;
748
	$default_text = isset( $ppp_options['default_text'] ) ? $ppp_options['default_text'] : '';
749
	$li_shares    = get_post_meta( $post_id, '_ppp_li_shares', true );
750
751
	if ( $is_scheduled && ! empty( $li_shares ) ) {
752
		$name_array    = explode( '_', $name );
753
		$index         = $name_array[1];
754
		$share_content = $li_shares[ $index ]['text'];
755
	}
756
757
	// If an override was found, use it, otherwise try the default text content
758
	$share_content = ( isset( $share_content ) && !empty( $share_content ) ) ? $share_content : $default_text;
759
760
	// If the content is still empty, just use the post title
761
	$share_content = ( isset( $share_content ) && !empty( $share_content ) ) ? $share_content : get_the_title( $post_id );
762
763
	return apply_filters( 'ppp_share_content_li', $share_content, array( 'post_id' => $post_id ) );
764
}
765
766
/**
767
 * Builds out the link description for sharing to LinkedIn
768
 *
769
 * @since  2.3
770
 * @param  int $post_id The Post Id
771
 * @param  int $index   The share index
772
 * @return string       Link description for the share index of the given post ID
773
 */
774
function ppp_li_get_share_description( $post_id, $index ) {
775
	$description = '';
776
	$li_shares   = get_post_meta( $post_id, '_ppp_li_shares', true );
777
778
	if ( ! empty( $li_shares[ $index ] ) ) {
779
		$description = ! empty( $li_shares[ $index ]['desc'] ) ? $li_shares[ $index ]['desc'] : '';
780
	}
781
782
	return $description;
783
}
784
785
/**
786
 * Generate the timestamps and names for the scheduled LinkedIn shares
787
 *
788
 * @since  2.3
789
 * @param  array $times   The times to save
790
 * @param  int   $post_id The Post ID of the item being saved
791
 * @return array          Array of timestamps and cron names
792
 */
793
function ppp_li_generate_timestamps( $times, $post_id ) {
794 1
	$li_shares = get_post_meta( $post_id, '_ppp_li_shares', true );
795
796 1
	if ( empty( $li_shares ) ) {
797 1
		$li_shares = array();
798 1
	}
799
800 1
	foreach ( $li_shares as $key => $data ) {
801
		if ( ! array_filter( $data ) ) {
802
			continue;
803
		}
804
805
		$timestamp = ppp_generate_timestamp( $data['date'], $data['time'] );
806
807
		if ( $timestamp > current_time( 'timestamp', 1 ) ) { // Make sure the timestamp we're getting is in the future
808
			$time_key           = strtotime( date_i18n( 'd-m-Y H:i:s', $timestamp , true ) ) . '_li';
809
			$times[ $time_key ] = 'sharedate_' . $key . '_' . $post_id . '_li';
810
		}
811
812 1
	}
813
814 1
	return $times;
815
}
816
add_filter( 'ppp_get_timestamps', 'ppp_li_generate_timestamps', 10, 2 );
817
818
/**
819
 * Builds a list of events for the Schedule calendar
820
 *
821
 * @since  2.3
822
 * @param  array $events  The currently found events
823
 * @param  int   $post_id Post ID to find items for
824
 * @return array          Array of events with any LinkedIn items
825
 */
826
function ppp_li_calendar_on_publish_event( $events, $post_id ) {
827
	$share_on_publish = get_post_meta( $post_id, '_ppp_li_share_on_publish', true );
828
829
	if ( ! empty( $share_on_publish ) ) {
830
		$share_text = get_post_meta( $post_id, '_ppp_li_share_on_publish_title', true );
831
		$events[] = array(
832
			'id'        => $post_id . '-share-on-publish',
833
			'title'     => ( ! empty( $share_text ) ) ? $share_text : ppp_li_generate_share_content( $post_id, null, false ),
834
			'start'     => date_i18n( 'Y-m-d/TH:i:s', strtotime( get_the_date( null, $post_id ) . ' ' . get_the_time( null, $post_id ) ) + 1 ),
835
			'end'       => date_i18n( 'Y-m-d/TH:i:s', strtotime( get_the_date( null, $post_id ) . ' ' . get_the_time( null, $post_id ) ) + 1 ),
836
			'className' => 'ppp-calendar-item-li cal-post-' . $post_id,
837
			'belongsTo' => $post_id,
838
		);
839
	}
840
841
	return $events;
842
}
843
add_filter( 'ppp_calendar_on_publish_event', 'ppp_li_calendar_on_publish_event', 10, 2 );
844
845
function ppp_li_get_post_shares( $items, $post_id ) {
846
	$shares = get_post_meta( $post_id, '_ppp_li_shares', true );
847
	if ( empty( $shares ) ) { return $items; }
848
849
	foreach ( $shares as $key => $share ) {
850
		$items[] = array( 'id' => $key, 'service' => 'li' );
851
	}
852
	return $items;
853
}
854
add_filter( 'ppp_get_post_scheduled_shares', 'ppp_li_get_post_shares', 10, 2 );
855