PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.0.11
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.0.11
1.2.72 1.2.71 1.2.70 1.2.69 1.2.68 1.2.67 1.2.66 1.2.65 1.2.64 1.2.63 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 All 172 releases
userswp / includes / class-profile.php

class-profile.php in UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP 1.0.11, at includes/class-profile.php

1,839 lines 72.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Profile Template related functions
4 *
5 * This class defines all code necessary for Profile template.
6 *
7 * @since 1.0.0
8 * @author GeoDirectory Team <info@wpgeodirectory.com>
9 */
10 class UsersWP_Profile {
11
12 /**
13 * Prints the profile page header section.
14 *
15 * @since 1.0.0
16 * @package userswp
17 * @param object $user The User ID.
18 */
19 public function get_profile_header($user) {
20 $banner = uwp_get_usermeta($user->ID, 'uwp_account_banner_thumb', '');
21 $avatar = uwp_get_usermeta($user->ID, 'uwp_account_avatar_thumb', '');
22 $uploads = wp_upload_dir();
23 $upload_url = $uploads['baseurl'];
24 if (is_user_logged_in() && get_current_user_id() == $user->ID && is_uwp_profile_page()) {
25 $trigger_class = "uwp-profile-modal-form-trigger";
26 } else {
27 $trigger_class = "";
28 }
29
30 if (empty($banner)) {
31 $banner = USERSWP_PLUGIN_URL."/public/assets/images/banner.png";
32 } else {
33 $banner = $upload_url.$banner;
34 }
35 if (empty($avatar)) {
36 $avatar = get_avatar($user->user_email, 150);
37 } else {
38 // check the image is not a full url before adding the local upload url
39 if (strpos($avatar, 'http:') === false && strpos($avatar, 'https:') === false) {
40 $avatar = $upload_url.$avatar;
41 }
42 $avatar = '<img src="'.$avatar.'" class="avatar avatar-150 photo" width="150" height="150">';
43 }
44 ?>
45 <div class="uwp-profile-header clearfix">
46 <div class="uwp-profile-header-img clearfix">
47 <?php
48 if (!is_uwp_profile_page()) {
49 echo '<a href="'.apply_filters('uwp_profile_link', get_author_posts_url($user->ID), $user->ID).'" title="'.$user->display_name.'">';
50 }
51 ?>
52 <img src="<?php echo $banner; ?>" alt="" class="uwp-profile-header-img-src" data-recalc-dims="0" />
53 <?php
54 if (!is_uwp_profile_page()) {
55 echo '</a>';
56 }
57 ?>
58 <?php if (is_user_logged_in() && (get_current_user_id() == $user->ID) && is_uwp_profile_page()) { ?>
59 <div class="uwp-banner-change-icon">
60 <i class="fa fa-camera" aria-hidden="true"></i>
61 <div data-type="banner" class="uwp-profile-banner-change <?php echo $trigger_class; ?>">
62 <span class="uwp-profile-banner-change-inner">
63 <?php echo __( 'Update Cover Photo', 'userswp' ); ?>
64 </span>
65 </div>
66 </div>
67 <?php } ?>
68 </div>
69 <div class="uwp-profile-avatar clearfix">
70 <?php
71 if (!is_uwp_profile_page()) {
72 echo '<a href="'.apply_filters('uwp_profile_link', get_author_posts_url($user->ID), $user->ID).'" title="'.$user->display_name.'">';
73 }
74 ?>
75 <div class="uwp-profile-avatar-inner">
76 <?php echo $avatar; ?>
77 <?php if (is_user_logged_in() && (get_current_user_id() == $user->ID) && is_uwp_profile_page()) { ?>
78 <div class="uwp-profile-avatar-change">
79 <div class="uwp-profile-avatar-change-inner">
80 <i class="fa fa-camera" aria-hidden="true"></i>
81 <a id="uwp-profile-picture-change" data-type="avatar" class="<?php echo $trigger_class; ?>" href="#"><?php echo __( 'Update', 'userswp' ); ?></a>
82 </div>
83 </div>
84 <?php } ?>
85 </div>
86 <?php
87 if (!is_uwp_profile_page()) {
88 echo '</a>';
89 }
90 ?>
91 </div>
92 </div>
93 <?php
94 }
95
96 /**
97 * Prints the profile page title section.
98 *
99 * @since 1.0.0
100 * @package userswp
101 * @param object $user The User ID.
102 */
103 public function get_profile_title($user) {
104 ?>
105 <div class="uwp-profile-name">
106 <h2 class="uwp-user-title" data-user="<?php echo $user->ID; ?>">
107 <?php echo apply_filters('uwp_profile_display_name', $user->display_name); ?>
108 <?php do_action('uwp_profile_after_title', $user->ID ); ?>
109 </h2>
110 </div>
111 <?php
112 }
113
114 /**
115 * Prints the profile page bio section.
116 *
117 * @since 1.0.0
118 * @package userswp
119 * @param object $user The User ID.
120 */
121 public function get_profile_bio($user) {
122 $bio = uwp_get_usermeta( $user->ID, 'uwp_account_bio', "" );
123 $bio = stripslashes($bio);
124 $is_profile_page = is_uwp_profile_page();
125 if ($bio) {
126 ?>
127 <div class="uwp-profile-bio <?php if ($is_profile_page) { echo "uwp_more"; } ?>">
128 <?php
129 if ($is_profile_page) {
130 echo $bio;
131 } else {
132 echo wp_trim_words( $bio, 20, '...' );
133 }
134 ?>
135 </div>
136 <?php
137 }
138 }
139
140 /**
141 * Prints the profile page social links section.
142 *
143 * @since 1.0.0
144 * @package userswp
145 * @param object $user The User ID.
146 */
147 public function get_profile_social($user) {
148
149 global $wpdb;
150 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
151 $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE ( form_type = 'register' OR form_type = 'account' ) AND field_type = 'url' AND css_class LIKE '%uwp_social%' ORDER BY sort_order ASC");
152
153 if (is_uwp_profile_page()) {
154 $show_type = '[profile_side]';
155 } elseif (is_uwp_users_page()) {
156 $show_type = '[users]';
157 } else {
158 $show_type = false;
159 }
160
161 if (!$show_type) {
162 return;
163 }
164 ?>
165 <div class="uwp-profile-social">
166 <ul class="uwp-profile-social-ul">
167 <?php
168 foreach($fields as $field) {
169 $show_in = explode(',',$field->show_in);
170
171 if (!in_array($show_type, $show_in)) {
172 continue;
173 }
174 $key = $field->htmlvar_name;
175 // see UsersWP_Forms -> uwp_save_user_extra_fields reason for replacing key
176 $key = str_replace('uwp_register_', 'uwp_account_', $key);
177 $value = uwp_get_usermeta($user->ID, $key, false);
178
179 if ($value) {
180 echo '<li><a target="_blank" rel="nofollow" href="'.$value.'"><i class="'.$field->field_icon.'"></i></a></li>';
181 }
182 }
183 ?>
184 </ul>
185 </div>
186 <?php
187 }
188
189 /**
190 * More info tab title.
191 *
192 * @since 1.0.0
193 * @package userswp
194 * @param object $user The User ID.
195 * @return string Tab title.
196 */
197 public function get_profile_count_icon($user) {
198 return '<i class="fa fa-user"></i>';
199 }
200
201 /**
202 * Returns the custom fields content of profile page more info tab.
203 *
204 * @since 1.0.0
205 * @package userswp
206 * @param object $user The User ID.
207 * @return string More info tab content.
208 */
209 public function get_profile_extra($user) {
210 return $this->uwp_get_extra_fields($user, '[more_info]');
211 }
212
213 /**
214 * Returns the custom fields content of profile page sidebar.
215 *
216 * @since 1.0.0
217 * @package userswp
218 * @param object $user The User ID.
219 * @return string Sidebar custom fields content.
220 */
221 public function get_profile_side_extra($user) {
222 echo $this->uwp_get_extra_fields($user, '[profile_side]');
223 }
224
225 /**
226 * Returns the custom fields content of users page.
227 *
228 * @since 1.0.0
229 * @package userswp
230 * @param object $user The User ID.
231 * @return string Users page custom fields content.
232 */
233 public function get_users_extra($user) {
234 echo $this->uwp_get_extra_fields($user, '[users]');
235 }
236
237 /**
238 * Returns the custom fields content based on type.
239 *
240 * @since 1.0.0
241 * @package userswp
242 * @param object $user The User ID.
243 * @param string $show_type Filter type.
244 * @return string Custom fields content.
245 */
246 public function uwp_get_extra_fields($user, $show_type) {
247
248 ob_start();
249 global $wpdb;
250 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
251 $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE form_type = 'account' AND css_class NOT LIKE '%uwp_social%' ORDER BY sort_order ASC");
252 $wrap_html = false;
253 if ($fields) {
254 foreach ($fields as $field) {
255 $show_in = explode(',',$field->show_in);
256 if (!in_array($show_type, $show_in)) {
257 continue;
258 }
259 if ($field->is_public == '0') {
260 continue;
261 }
262
263 if ($field->is_public == '2') {
264 $field_name = $field->htmlvar_name.'_privacy';
265 $val = uwp_get_usermeta($user->ID, $field_name, false);
266 if ($val === 'no') {
267 continue;
268 }
269 }
270
271 $value = $this->uwp_get_field_value($field, $user);
272
273 // Icon
274 if ($field->field_icon) {
275 $icon = '<i class="uwp_field_icon '.$field->field_icon.'"></i>';
276 } else {
277 $icon = '';
278 }
279
280 if ($field->field_type == 'fieldset') {
281 ?>
282 <div class="uwp-profile-extra-wrap" style="margin: 0; padding: 0">
283 <div class="uwp-profile-extra-key uwp-profile-extra-full" style="margin: 0; padding: 0"><h3 style="margin: 10px 0;"><?php echo $icon.$field->site_title; ?></h3></div>
284 </div>
285 <?php
286 } else {
287 if ($value) {
288 $wrap_html = true;
289 ?>
290 <div class="uwp-profile-extra-wrap">
291 <div class="uwp-profile-extra-key"><?php echo $icon.$field->site_title; ?><span class="uwp-profile-extra-sep">:</span></div>
292 <div class="uwp-profile-extra-value">
293 <?php
294 if ($field->htmlvar_name == 'uwp_account_bio') {
295 $is_profile_page = is_uwp_profile_page();
296 $value = stripslashes($value);
297 if ($value) {
298 ?>
299 <div class="uwp-profile-bio <?php if ($is_profile_page) { echo "uwp_more"; } ?>">
300 <?php
301 if ($is_profile_page) {
302 echo $value;
303 } else {
304 echo wp_trim_words( $value, 20, '...' );
305 }
306 ?>
307 </div>
308 <?php
309 }
310 } else {
311 echo $value;
312 }
313 ?>
314 </div>
315 </div>
316 <?php
317 }
318 }
319 }
320 }
321 $output = ob_get_contents();
322 $wrapped_output = '';
323 if ($wrap_html) {
324 $wrapped_output .= '<div class="uwp-profile-extra"><div class="uwp-profile-extra-div form-table">';
325 $wrapped_output .= $output;
326 $wrapped_output .= '</div></div>';
327 }
328 ob_end_clean();
329 return trim($wrapped_output);
330 }
331
332 /**
333 * Returns enabled profile tabs
334 *
335 * @since 1.0.0
336 * @package userswp
337 * @param object $user The User ID.
338 * @return array Profile tabs
339 */
340 public function get_profile_tabs($user) {
341
342 $tabs = array();
343
344 // allowed tabs
345 $allowed_tabs = uwp_get_option('enable_profile_tabs', array());
346
347 if (!is_array($allowed_tabs)) {
348 $allowed_tabs = array();
349 }
350
351 $extra = $this->get_profile_extra($user);
352 if (in_array('more_info', $allowed_tabs) && $extra) {
353 $tabs['more_info'] = array(
354 'title' => __( 'More Info', 'userswp' ),
355 'count' => $this->get_profile_count_icon($user)
356 );
357 }
358
359 if (in_array('posts', $allowed_tabs)) {
360 $tabs['posts'] = array(
361 'title' => __( 'Posts', 'userswp' ),
362 'count' => uwp_post_count($user->ID, 'post')
363 );
364 }
365
366 if (in_array('comments', $allowed_tabs)) {
367 $tabs['comments'] = array(
368 'title' => __( 'Comments', 'userswp' ),
369 'count' => uwp_comment_count($user->ID)
370 );
371 }
372
373 $all_tabs = apply_filters( 'uwp_profile_tabs', $tabs, $user, $allowed_tabs );
374
375 // order tabs as per option values
376 if(!empty($allowed_tabs)){
377 $allowed_tabs = array_reverse($allowed_tabs);
378 foreach($allowed_tabs as $key => $val){
379 if(isset($all_tabs[$val])){
380 $all_tabs = array($val => $all_tabs[$val]) + $all_tabs;
381 }
382
383 }
384 }
385
386 return $all_tabs;
387 }
388
389 /**
390 * Prints the profile tab content template
391 *
392 * @since 1.0.0
393 * @package userswp
394 * @param object $user The User ID.
395 * @return void
396 */
397 public function get_profile_tabs_content($user) {
398
399 $tab = get_query_var('uwp_tab');
400
401 $account_page = uwp_get_option('account_page', false);
402
403 $all_tabs = $this->get_profile_tabs($user);
404
405 $tab_keys = array_keys($all_tabs);
406
407 if (!empty($tab_keys)) {
408 $default_key = $tab_keys[0];
409 } else {
410 $default_key = false;
411 }
412
413 $active_tab = !empty( $tab ) && array_key_exists( $tab, $all_tabs ) ? $tab : $default_key;
414 if (!$active_tab) {
415 return;
416 }
417 ?>
418 <div class="uwp-profile-content">
419 <div class="uwp-profile-nav">
420 <ul class="item-list-tabs-ul">
421 <?php
422 foreach( $this->get_profile_tabs($user) as $tab_id => $tab ) {
423
424 $tab_url = uwp_build_profile_tab_url($user->ID, $tab_id, false);
425
426 $active = $active_tab == $tab_id ? ' active' : '';
427 ?>
428 <li id="uwp-profile-<?php echo $tab_id; ?>" class="<?php echo $active; ?>">
429 <a href="<?php echo esc_url( $tab_url ); ?>">
430 <span class="uwp-profile-tab-label uwp-profile-<?php echo $tab_id; ?>-label "><?php echo esc_html( $tab['title'] ); ?></span>
431 <span class="uwp-profile-tab-count uwp-profile-<?php echo $tab_id; ?>-count"><?php echo $tab['count']; ?></span>
432 </a>
433 </li>
434 <?php
435 }
436 ?>
437 </ul>
438 <?php
439 $can_user_edit_account = apply_filters('uwp_user_can_edit_own_profile', true, $user->ID);
440 ?>
441 <?php if ($account_page && is_user_logged_in() && (get_current_user_id() == $user->ID) && $can_user_edit_account) { ?>
442 <div class="uwp-edit-account">
443 <a href="<?php echo get_permalink( $account_page ); ?>" title="<?php echo __( 'Edit Account', 'userswp' ); ?>"><i class="fa fa-gear"></i></a>
444 </div>
445 <?php } ?>
446 </div>
447
448 <div class="uwp-profile-entries">
449 <?php
450 do_action('uwp_profile_tab_content', $user, $active_tab);
451 do_action('uwp_profile_'.$active_tab.'_tab_content', $user);
452 ?>
453 </div>
454 </div>
455 <?php }
456
457 /**
458 * Prints the tab content pagination section.
459 *
460 * @since 1.0.0
461 * @package userswp
462 * @param int $total Total items.
463 * @return void
464 */
465 public function get_profile_pagination($total) {
466 ?>
467 <div class="uwp-pagination">
468 <?php
469 $big = 999999999; // need an unlikely integer
470 $translated = __( 'Page', 'userswp' ); // Supply translatable string
471
472 echo paginate_links( array(
473 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
474 'format' => '?paged=%#%',
475 'current' => max( 1, get_query_var('paged') ),
476 'total' => $total,
477 'before_page_number' => '<span class="screen-reader-text">'.$translated.' </span>',
478 'type' => 'list'
479 ) );
480 ?>
481 </div>
482 <?php
483 }
484
485 /**
486 * Prints the profile page more info tab content.
487 *
488 * @since 1.0.0
489 * @package userswp
490 * @param object $user The User ID.
491 * @return void
492 */
493 public function get_profile_more_info($user) {
494 $allowed_tabs = uwp_get_option('enable_profile_tabs', array());
495
496 if (!is_array($allowed_tabs)) {
497 $allowed_tabs = array();
498 }
499 if (!in_array('more_info', $allowed_tabs)) {
500 return;
501 }
502
503 $extra = $this->get_profile_extra($user);
504 echo $extra;
505 }
506
507 /**
508 * Prints the profile page "posts" tab content.
509 *
510 * @since 1.0.0
511 * @package userswp
512 * @param object $user The User ID.
513 * @return void
514 */
515 public function get_profile_posts($user) {
516
517 $allowed_tabs = uwp_get_option('enable_profile_tabs', array());
518
519 if (!is_array($allowed_tabs)) {
520 $allowed_tabs = array();
521 }
522 if (!in_array('posts', $allowed_tabs)) {
523 return;
524 }
525
526 uwp_generic_tab_content($user, 'post', __('Posts', 'userswp'));
527 }
528
529 /**
530 * Prints the profile page "comments" tab content.
531 *
532 * @since 1.0.0
533 * @package userswp
534 * @param object $user The User ID.
535 * @return void
536 */
537 public function get_profile_comments($user) {
538 $allowed_tabs = uwp_get_option('enable_profile_tabs', array());
539
540 if (!is_array($allowed_tabs)) {
541 $allowed_tabs = array();
542 }
543 if (!in_array('comments', $allowed_tabs)) {
544 return;
545 }
546 ?>
547 <h3><?php echo __('Comments', 'userswp') ?></h3>
548
549 <div class="uwp-profile-item-block">
550 <?php
551 $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
552 $number = uwp_get_option('profile_no_of_items', 10);
553 $offset = ( $paged - 1 ) * $number;
554
555 $total_comments = uwp_comment_count($user->ID);
556 $maximum_pages = ceil($total_comments / $number);
557
558 $args = array(
559 'number' => $number,
560 'offset' => $offset,
561 'author_email' => $user->user_email,
562 'paged' => $paged,
563 );
564 // The Query
565 $the_query = new WP_Comment_Query();
566 $comments = $the_query->query( $args );
567
568 // The Loop
569 if ($comments) {
570 echo '<ul class="uwp-profile-item-ul">';
571 foreach ( $comments as $comment ) {
572 ?>
573 <li class="uwp-profile-item-li uwp-profile-item-clearfix">
574 <a class="uwp-profile-item-img" href="<?php echo get_comment_link($comment->comment_ID); ?>">
575 <?php
576 $avatar_class = "uwp-profile-item-alignleft uwp-profile-item-thumb";
577 $avatar = get_avatar($user->user_email, 80, null, null, array('class' => array($avatar_class) ));
578 echo $avatar;
579 ?>
580 </a>
581
582 <h3 class="uwp-profile-item-title">
583 <a href="<?php echo get_comment_link($comment->comment_ID); ?>"><?php echo get_the_title($comment->comment_post_ID); ?></a>
584 </h3>
585 <time class="uwp-profile-item-time published" datetime="<?php echo get_the_time('c'); ?>">
586 <?php echo date_i18n( get_option( 'date_format' ), strtotime( get_comment_date("", $comment->comment_ID) ) ); ?>
587 </time>
588 <div class="uwp-profile-item-summary">
589 <?php
590 $excerpt = strip_shortcodes(wp_trim_words( $comment->comment_content, 15, '...' ));
591 echo $excerpt;
592 if ($excerpt) {
593 ?>
594 <a href="<?php echo get_comment_link($comment->comment_ID); ?>" class="more-link"><?php echo __('Read More »', 'userswp'); ?></a>
595 <?php
596 }
597 ?>
598 </div>
599 </li>
600 <?php
601 }
602 echo '</ul>';
603 } else {
604 // no comments found
605 echo "<p>".__('No Comments Found', 'userswp')."</p>";
606 }
607
608 do_action('uwp_profile_pagination', $maximum_pages);
609 ?>
610 </div>
611 <?php
612 }
613
614 /**
615 * Rewrites profile page links
616 *
617 * @since 1.0.0
618 * @package userswp
619 * @return void
620 */
621 public function rewrite_profile_link() {
622
623 $page_id = uwp_get_option('profile_page', false);
624 if ($page_id && !isset($_REQUEST['page_id'])) {
625 $link = get_page_link($page_id);
626 $uwp_profile_link = rtrim(substr(str_replace(home_url(), '', $link), 1), '/') . '/';
627 //$uwp_profile_page_id = url_to_postid($link);
628 $uwp_profile_page_id = $page_id;
629
630
631
632 // {home_url}/profile/1
633 $uwp_profile_link_empty_slash = '^' . $uwp_profile_link . '([^/]+)?$';
634 add_rewrite_rule($uwp_profile_link_empty_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]', 'top');
635
636 // {home_url}/profile/1/
637 $uwp_profile_link_with_slash = '^' . $uwp_profile_link . '([^/]+)/?$';
638 add_rewrite_rule($uwp_profile_link_with_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]', 'top');
639
640 // {home_url}/profile/1/page/1
641 $uwp_profile_link_empty_slash_paged = '^' . $uwp_profile_link . '([^/]+)/page/([0-9]+)?$';
642 add_rewrite_rule($uwp_profile_link_empty_slash_paged, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&paged=$matches[2]', 'top');
643
644 // {home_url}/profile/1/page/1/
645 $uwp_profile_link_with_slash_paged = '^' . $uwp_profile_link . '([^/]+)/page/([0-9]+)/?$';
646 add_rewrite_rule($uwp_profile_link_with_slash_paged, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&paged=$matches[2]', 'top');
647
648 // {home_url}/profile/1/tab-slug
649 $uwp_profile_tab_empty_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)?$';
650 add_rewrite_rule($uwp_profile_tab_empty_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]', 'top');
651
652 // {home_url}/profile/1/tab-slug/
653 $uwp_profile_tab_with_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/?$';
654 add_rewrite_rule($uwp_profile_tab_with_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]', 'top');
655
656 // {home_url}/profile/1/tab-slug/page/1
657 $uwp_profile_tab_empty_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/page/([0-9]+)?$';
658 add_rewrite_rule($uwp_profile_tab_empty_slash_paged, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]&paged=$matches[3]', 'top');
659
660 // {home_url}/profile/1/tab-slug/page/1/
661 $uwp_profile_tab_with_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/page/([0-9]+)/?$';
662 add_rewrite_rule($uwp_profile_tab_with_slash_paged, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]&paged=$matches[3]', 'top');
663
664 // {home_url}/profile/1/tab-slug/subtab-slug
665 $uwp_profile_tab_empty_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)?$';
666 add_rewrite_rule($uwp_profile_tab_empty_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]&uwp_subtab=$matches[3]', 'top');
667
668 // {home_url}/profile/1/tab-slug/subtab-slug/
669 $uwp_profile_tab_with_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)/?$';
670 add_rewrite_rule($uwp_profile_tab_with_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]&uwp_subtab=$matches[3]', 'top');
671
672 // {home_url}/profile/1/tab-slug/subtab-slug/page/1
673 $uwp_profile_tab_empty_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)/page/([0-9]+)?$';
674 add_rewrite_rule($uwp_profile_tab_empty_slash_paged, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]&uwp_subtab=$matches[3]&paged=$matches[4]', 'top');
675
676 // {home_url}/profile/1/tab-slug/subtab-slug/page/1/
677 $uwp_profile_tab_with_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)/page/([0-9]+)/?$';
678 add_rewrite_rule($uwp_profile_tab_with_slash_paged, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]&uwp_tab=$matches[2]&uwp_subtab=$matches[3]&paged=$matches[4]', 'top');
679
680 if (get_option('uwp_flush_rewrite')) {
681 //Ensure the $wp_rewrite global is loaded
682 global $wp_rewrite;
683 //Call flush_rules() as a method of the $wp_rewrite object
684 $wp_rewrite->flush_rules( false );
685 delete_option('uwp_flush_rewrite');
686 }
687 }
688 }
689
690 /**
691 * Adds profile page query variables.
692 *
693 * @since 1.0.0
694 * @package userswp
695 * @param array $query_vars Query variables.
696 * @return array Modified Query variables array.
697 */
698 public function profile_query_vars($query_vars) {
699 $query_vars[] = 'uwp_profile';
700 $query_vars[] = 'uwp_tab';
701 $query_vars[] = 'uwp_subtab';
702 return $query_vars;
703 }
704
705 /**
706 * Returns user profile link based on user id.
707 *
708 * @since 1.0.0
709 * @package userswp
710 * @param string $link Unmodified link.
711 * @param int $user_id User id.
712 * @return string Modified link.
713 */
714 public function get_profile_link($link, $user_id) {
715
716 $page_id = uwp_get_option('profile_page', false);
717
718 if ($page_id) {
719 $link = get_permalink($page_id);
720 } else {
721 $link = '';
722 }
723
724 if ($link != '') {
725
726 if (isset($_REQUEST['page_id'])) {
727 $permalink_structure = 'DEFAULT';
728 } else {
729 $permalink_structure = 'CUSTOM';
730 // Add forward slash if not available
731 $link = rtrim($link, '/') . '/';
732 }
733
734
735 $url_type = apply_filters('uwp_profile_url_type', 'slug');
736
737 if ($url_type && 'id' == $url_type) {
738 if ('DEFAULT' == $permalink_structure) {
739 return add_query_arg(array('viewuser' => $user_id), $link);
740 } else {
741 return $link . $user_id;
742 }
743 } else {
744 $user = get_userdata($user_id);
745 if ( !empty($user->user_nicename) ) {
746 $username = $user->user_nicename;
747 } else {
748 $username = $user->user_login;
749 }
750
751 if ('DEFAULT' == $permalink_structure) {
752 return add_query_arg(array('username' => $username), $link);
753 } else {
754 return $link . $username;
755 }
756
757 }
758 } else {
759 return '';
760 }
761 }
762
763 /**
764 * Modifies profile page title to include username.
765 *
766 * @since 1.0.0
767 * @package userswp
768 * @param string $title Original title
769 * @param int|null $id Page id.
770 * @return string Modified page title.
771 */
772 public function modify_profile_page_title( $title, $id = null ) {
773
774 global $wp_query;
775 $page_id = uwp_get_option('profile_page', false);
776
777 if ($page_id == $id && isset($wp_query->query_vars['uwp_profile']) && in_the_loop()) {
778
779 $url_type = apply_filters('uwp_profile_url_type', 'slug');
780
781 $author_slug = $wp_query->query_vars['uwp_profile'];
782
783 if ($url_type == 'id') {
784 $user = get_user_by('id', $author_slug);
785 } else {
786 $user = get_user_by('slug', $author_slug);
787 }
788 $title = $user->display_name;
789 }
790
791 return $title;
792 }
793
794 /**
795 * Returns json content for image crop.
796 *
797 * @since 1.0.0
798 * @package userswp
799 * @param string $image_url Image url
800 * @param string $type popup type. Avatar or Banner
801 * @return string Json
802 */
803 public function uwp_image_crop_popup($image_url, $type) {
804
805 $uploads = wp_upload_dir();
806 $upload_url = $uploads['baseurl'];
807 $upload_path = $uploads['basedir'];
808 $image_path = str_replace($upload_url, $upload_path, $image_url);
809
810 $image = apply_filters( 'uwp_'.$type.'_cropper_image', getimagesize( $image_path ) );
811 if ( empty( $image ) ) {
812 return "";
813 }
814
815 // Get avatar full width and height.
816 if ($type == 'avatar') {
817 $full_width = apply_filters('uwp_avatar_image_width', 150);
818 $full_height = apply_filters('uwp_avatar_image_height', 150);
819 } else {
820 $full_width = apply_filters('uwp_banner_image_width', uwp_get_option('profile_banner_width', 1000));
821 $full_height = apply_filters('uwp_banner_image_height', 300);
822 }
823
824
825 $values = array(
826 'error' => '',
827 'image_url' => $image_url,
828 'uwp_popup_type' => $type,
829 'uwp_full_width' => $full_width,
830 'uwp_full_height' => $full_height,
831 'uwp_true_width' => $image[0],
832 'uwp_true_height' => $image[1],
833 'uwp_popup_content' => $this->uwp_image_crop_modal_html($type, $image_url, $full_width, $full_height),
834 );
835
836 $json = json_encode($values);
837
838
839 return $json;
840 }
841
842 /**
843 * Initializes image crop js.
844 *
845 * @since 1.0.0
846 * @package userswp
847 * @param object $user The User ID.
848 */
849 public function uwp_image_crop_init($user) {
850 if (is_user_logged_in()) {
851 add_action( 'wp_footer', array($this,'uwp_modal_loading_html'));
852 add_action( 'wp_footer', array($this,'uwp_modal_close_js'));
853 //echo $this->uwp_modal_loading_html();
854 //$this->uwp_modal_close_js();
855 }
856 }
857
858 /**
859 * Returns modal content loading html.
860 *
861 * @since 1.0.0
862 * @package userswp
863 * @return string Modal loding html.
864 */
865 public function uwp_modal_loading_html() {
866 ob_start();
867 ?>
868 <div id="uwp-popup-modal-wrap" style="display: none;">
869 <div class="uwp-bs-modal uwp_fade uwp_show">
870 <div class="uwp-bs-modal-dialog">
871 <div class="uwp-bs-modal-content">
872 <div class="uwp-bs-modal-header">
873 <h4 class="uwp-bs-modal-title">
874 <?php echo __( "Loading Form ...", "userswp" ); ?>
875 </h4>
876 </div>
877 <div class="uwp-bs-modal-body">
878 <div class="uwp-bs-modal-loading-icon-wrap">
879 <div class="uwp-bs-modal-loading-icon"></div>
880 </div>
881 </div>
882 </div>
883 </div>
884 </div>
885 </div>
886 <?php
887 $output = ob_get_contents();
888 ob_end_clean();
889 echo trim(preg_replace("/\s+|\n+|\r/", ' ', $output));
890 }
891
892 /**
893 * Adds modal close js.
894 *
895 * @since 1.0.0
896 * @package userswp
897 * @return void
898 */
899 public function uwp_modal_close_js() {
900 ?>
901 <script type="text/javascript">
902 (function( $, window, undefined ) {
903 $(document).ready(function () {
904 $('.uwp-modal-close').click(function(e) {
905 e.preventDefault();
906 var uwp_popup_type = $( this ).data( 'type' );
907 // $('#uwp-'+uwp_popup_type+'-modal').hide();
908 var mod_shadow = jQuery('#uwp-modal-backdrop');
909 var container = jQuery('#uwp-popup-modal-wrap');
910 container.hide();
911 container.replaceWith('<?php echo $this->uwp_modal_loading_html(); ?>');
912 mod_shadow.remove();
913 });
914 });
915 }( jQuery, window ));
916 </script>
917 <?php
918 }
919
920 /**
921 * Returns avatar and banner crop modal html.
922 *
923 * @since 1.0.0
924 * @package userswp
925 * @param string $type Avatar or Banner
926 * @param string $image_url Image url to crop
927 * @param int $full_width Full image width
928 * @param int $full_height Full image height
929 * @return string Html.
930 */
931 public function uwp_image_crop_modal_html($type, $image_url, $full_width, $full_height) {
932 ob_start();
933 ?>
934 <div class="uwp-bs-modal uwp_fade uwp_show" id="uwp-<?php echo $type; ?>-modal">
935 <div class="uwp-bs-modal-dialog">
936 <div class="uwp-bs-modal-content">
937 <div class="uwp-bs-modal-header">
938 <h4 class="uwp-bs-modal-title">
939 <?php
940 if ($type == 'avatar') {
941 echo __( 'Change your profile photo', 'userswp' );
942 } else {
943 echo __( 'Change your cover photo', 'userswp' );
944 }
945 ?>
946 </h4>
947 <button type="button" class="close uwp-modal-close" data-type="<?php echo $type; ?>" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
948 </div>
949 <div class="uwp-bs-modal-body">
950 <div id="uwp-bs-modal-notice"></div>
951 <div align="center">
952 <img src="<?php echo $image_url; ?>" id="uwp-<?php echo $type; ?>-to-crop" />
953 </div>
954 </div>
955 <div class="uwp-bs-modal-footer">
956 <div class="uwp-<?php echo $type; ?>-crop-p-wrap">
957 <div id="<?php echo $type; ?>-crop-actions">
958 <form class="uwp-crop-form" method="post">
959 <input type="hidden" name="x" value="" id="<?php echo $type; ?>-x" />
960 <input type="hidden" name="y" value="" id="<?php echo $type; ?>-y" />
961 <input type="hidden" name="w" value="" id="<?php echo $type; ?>-w" />
962 <input type="hidden" name="h" value="" id="<?php echo $type; ?>-h" />
963 <input type="hidden" id="uwp-<?php echo $type; ?>-crop-image" name="uwp_crop" value="<?php echo $image_url; ?>" />
964 <input type="hidden" name="uwp_crop_nonce" value="<?php echo wp_create_nonce( 'uwp-crop-nonce' ); ?>" />
965 <input type="submit" name="uwp_<?php echo $type; ?>_crop" value="<?php echo __('Apply', 'userswp'); ?>" class="button button-primary" id="save_uwp_<?php echo $type; ?>" />
966 </form>
967 </div>
968 </div>
969 <button type="button" data-type="<?php echo $type; ?>" class="button uwp_modal_btn uwp-modal-close" data-dismiss="modal"><?php echo __( 'Cancel', 'userswp' ); ?></button>
970 </div>
971 </div>
972 </div>
973 </div>
974 <script type="text/javascript">
975 (function( $, window, undefined ) {
976 $(document).ready(function () {
977 $('.uwp-modal-close').click(function(e) {
978 e.preventDefault();
979 var uwp_popup_type = $( this ).data( 'type' );
980 // $('#uwp-'+uwp_popup_type+'-modal').hide();
981 var mod_shadow = jQuery('#uwp-modal-backdrop');
982 var container = jQuery('#uwp-popup-modal-wrap');
983 container.hide();
984 container.replaceWith('<?php echo $this->uwp_modal_loading_html(); ?>');
985 mod_shadow.remove();
986 });
987 });
988 }( jQuery, window ));
989 </script>
990 <?php
991 $output = ob_get_contents();
992 ob_end_clean();
993 return trim($output);
994 }
995
996 /**
997 * Returns avatar and banner crop submit form.
998 *
999 * @since 1.0.0
1000 * @package userswp
1001 * @param string $type Avatar or Banner
1002 * @return string Html.
1003 */
1004 public function uwp_crop_submit_form($type = 'avatar') {
1005 $files = new UsersWP_Files();
1006 ob_start();
1007 ?>
1008 <div class="uwp-bs-modal uwp_fade uwp_show" id="uwp-popup-modal-wrap">
1009 <div class="uwp-bs-modal-dialog">
1010 <div class="uwp-bs-modal-content">
1011 <div class="uwp-bs-modal-header">
1012 <h4 class="uwp-bs-modal-title">
1013 <?php
1014 if ($type == 'avatar') {
1015 echo __( 'Change your profile photo', 'userswp' );
1016 } else {
1017 echo __( 'Change your cover photo', 'userswp' );
1018 }
1019 ?>
1020 </h4>
1021 <button type="button" class="close uwp-modal-close" data-type="<?php echo $type; ?>" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
1022 </div>
1023 <div class="uwp-bs-modal-body">
1024 <div id="uwp-bs-modal-notice"></div>
1025 <form id="uwp-upload-<?php echo $type; ?>-form" method="post" enctype="multipart/form-data">
1026 <input type="hidden" name="uwp_upload_nonce" value="<?php echo wp_create_nonce( 'uwp-upload-nonce' ); ?>" />
1027 <input type="hidden" name="uwp_<?php echo $type; ?>_submit" value="" />
1028 <button type="button" class="uwp_upload_button" onclick="document.getElementById('uwp_upload_<?php echo $type; ?>').click();"><?php echo __( 'Upload', 'userswp' ); ?> <?php echo $type; ?></button>
1029 <p style="text-align: center"><?php echo __('Note: Max upload image size: ', 'userswp').$files->uwp_formatSizeUnits($files->uwp_get_max_upload_size($type)); ?></p>
1030 <div class="uwp_upload_field" style="display: none">
1031 <input name="uwp_<?php echo $type; ?>_file" id="uwp_upload_<?php echo $type; ?>" required="required" type="file" value="">
1032 </div>
1033 </form>
1034 <div id="progressBar" class="tiny-green" style="display: none;"><div></div></div>
1035 </div>
1036 <div class="uwp-bs-modal-footer">
1037 <div class="uwp-<?php echo $type; ?>-crop-p-wrap">
1038 <div id="<?php echo $type; ?>-crop-actions">
1039 <form class="uwp-crop-form" method="post">
1040 <input type="submit" name="uwp_<?php echo $type; ?>_crop" disabled="disabled" value="<?php echo __('Apply', 'userswp'); ?>" class="button button-primary" id="save_uwp_<?php echo $type; ?>" />
1041 </form>
1042 </div>
1043 </div>
1044 <button type="button" data-type="<?php echo $type; ?>" class="button uwp_modal_btn uwp-modal-close" data-dismiss="modal"><?php echo __( 'Cancel', 'userswp' ); ?></button>
1045 </div>
1046 </div>
1047 </div>
1048 </div>
1049 <script type="text/javascript">
1050 (function( $, window, undefined ) {
1051
1052 var uwp_popup_type = '<?php echo $type; ?>';
1053
1054 $(document).ready(function () {
1055 $("#progressbar").progressbar();
1056 $('.uwp-modal-close').click(function(e) {
1057 e.preventDefault();
1058 var uwp_popup_type = $( this ).data( 'type' );
1059 // $('#uwp-'+uwp_popup_type+'-modal').hide();
1060 var mod_shadow = jQuery('#uwp-modal-backdrop');
1061 var container = jQuery('#uwp-popup-modal-wrap');
1062 container.hide();
1063 container.replaceWith('<?php echo $this->uwp_modal_loading_html(); ?>');
1064 mod_shadow.remove();
1065 });
1066
1067 $('#uwp_upload_<?php echo $type; ?>').on('change', function(e) {
1068 e.preventDefault();
1069
1070 var container = jQuery('#uwp-popup-modal-wrap');
1071 var err_container = jQuery('#uwp-bs-modal-notice');
1072
1073 var fd = new FormData();
1074 var files_data = $(this); // The <input type="file" /> field
1075 var file = files_data[0].files[0];
1076
1077 fd.append('uwp_<?php echo $type; ?>_file', file);
1078 // our AJAX identifier
1079 fd.append('action', 'uwp_avatar_banner_upload');
1080 fd.append('uwp_popup_type', '<?php echo $type; ?>');
1081
1082 $("#progressBar").show();
1083
1084 $.ajax({
1085 // Your server script to process the upload
1086 url: '<?php echo admin_url( 'admin-ajax.php' ); ?>',
1087 type: 'POST',
1088
1089 // Form data
1090 data: fd,
1091
1092 // Tell jQuery not to process data or worry about content-type
1093 // You *must* include these options!
1094 cache: false,
1095 contentType: false,
1096 processData: false,
1097
1098 // Custom XMLHttpRequest
1099 xhr: function() {
1100 myXhr = $.ajaxSettings.xhr();
1101 if(myXhr.upload){
1102 myXhr.upload.addEventListener('progress',showProgress, false);
1103 } else {
1104 console.log("Upload progress is not supported.");
1105 }
1106 return myXhr;
1107 },
1108
1109 success:function(response) {
1110 $("#progressBar").hide();
1111 resp = JSON.parse(response);
1112 if (resp['error'] != "") {
1113 err_container.html(resp['error']);
1114 } else {
1115 resp = JSON.parse(response);
1116 uwp_full_width = resp['uwp_full_width'];
1117 uwp_full_height = resp['uwp_full_height'];
1118 uwp_true_width = resp['uwp_true_width'];
1119 uwp_true_height = resp['uwp_true_height'];
1120
1121 jQuery('#uwp-popup-modal-wrap').html(resp['uwp_popup_content']).find('#uwp-'+uwp_popup_type+'-to-crop').Jcrop({
1122 // onChange: showPreview,
1123 onSelect: updateCoords,
1124 allowResize: true,
1125 allowSelect: false,
1126 boxWidth: 650, //Maximum width you want for your bigger images
1127 boxHeight: 400, //Maximum Height for your bigger images
1128 setSelect: [ 0, 0, uwp_full_width, uwp_full_height ],
1129 aspectRatio: uwp_full_width/uwp_full_height,
1130 trueSize: [uwp_true_width,uwp_true_height],
1131 minSize: [uwp_full_width,uwp_full_height]
1132 });
1133 }
1134 }
1135 });
1136 });
1137
1138 function showProgress(evt) {
1139 if (evt.lengthComputable) {
1140 var percentComplete = (evt.loaded / evt.total) * 100;
1141 // $('#progressbar').progressbar("option", "value", percentComplete );
1142 progress(percentComplete, $('#progressBar'));
1143 }
1144 }
1145
1146 function progress(percent, $element) {
1147 var progressBarWidth = percent * $element.width() / 100;
1148 $element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% ");
1149 }
1150
1151 function updateCoords(c) {
1152 jQuery('#'+uwp_popup_type+'-x').val(c.x);
1153 jQuery('#'+uwp_popup_type+'-y').val(c.y);
1154 jQuery('#'+uwp_popup_type+'-w').val(c.w);
1155 jQuery('#'+uwp_popup_type+'-h').val(c.h);
1156 }
1157
1158 });
1159 }( jQuery, window ));
1160 </script>
1161
1162 <?php
1163 $output = ob_get_contents();
1164 ob_end_clean();
1165 return trim($output);
1166 }
1167
1168
1169 /**
1170 * Array search by value
1171 *
1172 * @since 1.0.0
1173 * @package userswp
1174 * @param array $array Original array.
1175 * @param mixed $key Array key
1176 * @param mixed $value Array value.
1177 * @return array Result array.
1178 */
1179 public function uwp_array_search($array, $key, $value)
1180 {
1181 $results = array();
1182
1183 if (is_array($array)) {
1184 if (isset($array[$key]) && $array[$key] == $value) {
1185 $results[] = $array;
1186 }
1187
1188 foreach ($array as $subarray) {
1189 $results = array_merge($results, $this->uwp_array_search($subarray, $key, $value));
1190 }
1191 }
1192
1193 return $results;
1194 }
1195
1196 /**
1197 * Modifies get_avatar function to use userswp avatar.
1198 *
1199 * @since 1.0.0
1200 * @package userswp
1201 * @param string $avatar img tag value for the user's avatar.
1202 * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
1203 * user email, WP_User object, WP_Post object, or WP_Comment object.
1204 * @param int $size Square avatar width and height in pixels to retrieve.
1205 * @param string $default URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
1206 * 'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
1207 * Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
1208 * @param string $alt Alternative text to use in the avatar image tag. Default empty.
1209 * @return string Modified img tag value
1210 */
1211 public function uwp_modify_get_avatar( $avatar, $id_or_email, $size, $default, $alt ) {
1212 $user = false;
1213
1214 if ( is_numeric( $id_or_email ) ) {
1215
1216 $id = (int) $id_or_email;
1217 $user = get_user_by( 'id' , $id );
1218
1219 } elseif ( is_object( $id_or_email ) ) {
1220
1221 if ( ! empty( $id_or_email->user_id ) ) {
1222 $id = (int) $id_or_email->user_id;
1223 $user = get_user_by( 'id' , $id );
1224 }
1225
1226 } else {
1227 $user = get_user_by( 'email', $id_or_email );
1228 }
1229
1230 if ( $user && is_object( $user ) ) {
1231 $avatar_thumb = uwp_get_usermeta($user->data->ID, 'uwp_account_avatar_thumb', '');
1232 if ( !empty($avatar_thumb) ) {
1233 $uploads = wp_upload_dir();
1234 $upload_url = $uploads['baseurl'];
1235 if (substr( $avatar_thumb, 0, 4 ) !== "http") {
1236 $avatar_thumb = $upload_url.$avatar_thumb;
1237 }
1238 $avatar = "<img alt='{$alt}' src='{$avatar_thumb}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
1239 }
1240
1241 }
1242
1243 return $avatar;
1244 }
1245
1246 /**
1247 * Modified the comment author url to profile page link for loggedin users.
1248 *
1249 * @since 1.0.0
1250 * @package userswp
1251 * @param string $link Original author link.
1252 * @return string Modified author link.
1253 */
1254 public function uwp_get_comment_author_link($link) {
1255 global $comment;
1256 if ( !empty( $comment->user_id ) && !empty( get_userdata( $comment->user_id )->ID ) ) {
1257 $user = get_userdata( $comment->user_id );
1258 $link = sprintf(
1259 '<a href="%s" rel="external nofollow" class="url">%s</a>',
1260 uwp_build_profile_tab_url( $comment->user_id ),
1261 strip_tags( $user->display_name )
1262 );
1263 }
1264 return $link;
1265 }
1266
1267 /**
1268 * Redirects /author page to /profile page.
1269 *
1270 * @since 1.0.0
1271 * @package userswp
1272 * @return void
1273 */
1274 public function uwp_redirect_author_page() {
1275 if ( is_author() ) {
1276 $id = get_query_var( 'author' );
1277 $link = uwp_build_profile_tab_url( $id );
1278 wp_redirect($link);
1279 exit;
1280 }
1281 }
1282
1283 /**
1284 * Modifies "edit my profile" link in admin bar
1285 *
1286 * @since 1.0.0
1287 * @package userswp
1288 * @param string $url The complete URL including scheme and path.
1289 * @param int $user_id The user ID.
1290 * @param string $scheme Scheme to give the URL context. Accepts 'http', 'https', 'login',
1291 * 'login_post', 'admin', 'relative' or null.
1292 * @return false|string Filtered url.
1293 */
1294 public function uwp_modify_admin_bar_edit_profile_url( $url, $user_id, $scheme )
1295 {
1296 // Makes the link to http://example.com/account
1297 if (!is_admin()) {
1298 $account_page = uwp_get_option('account_page', false);
1299 if ($account_page) {
1300 $account_page_link = get_permalink($account_page);
1301 $url = $account_page_link;
1302 }
1303 }
1304 return $url;
1305 }
1306
1307 /**
1308 * Restrict the files display only to current users in media popup.
1309 *
1310 * @since 1.0.0
1311 * @package userswp
1312 * @param object $wp_query Unmodified wp_query.
1313 * @return object Modified wp_query.
1314 */
1315 public function uwp_restrict_attachment_display($wp_query) {
1316 if (!is_admin()) {
1317 if ( ! current_user_can( 'manage_options' ) ) {
1318 //$wp_query['author'] = get_current_user_id();
1319 $wp_query->set( 'author', get_current_user_id() );
1320 }
1321 }
1322 return $wp_query;
1323 }
1324
1325 /**
1326 * Allow users to upload files who has upload capability.
1327 *
1328 * @since 1.0.0
1329 * @package userswp
1330 * @param array $llcaps An array of all the user's capabilities.
1331 * @param array $caps Actual capabilities for meta capability.
1332 * @param array $args Optional parameters passed to has_cap(), typically object ID.
1333 * @param object $user The user object.
1334 * @return array User capabilities.
1335 */
1336 public function allow_all_users_profile_uploads($llcaps, $caps, $args, $user) {
1337
1338 $files = new UsersWP_Files();
1339
1340 if(isset($caps[0]) && $caps[0] =='upload_files' && $files->uwp_doing_upload() ){
1341 $llcaps['upload_files'] = true;
1342 }
1343
1344 return $llcaps;
1345 }
1346
1347 /**
1348 * Validates file uploads and returns errors if found.
1349 *
1350 * @since 1.0.0
1351 * @package userswp
1352 * @param string|bool $value Original value.
1353 * @param object $field Field info.
1354 * @param string $file_key Field key.
1355 * @param array $file_to_upload File data to upload.
1356 * @return string|WP_Error Returns original value if no erros. Else returns errors.
1357 */
1358 public function uwp_handle_file_upload_error_checks($value, $field, $file_key, $file_to_upload) {
1359
1360 if (in_array($field->htmlvar_name, array('uwp_avatar_file', 'uwp_banner_file'))) {
1361
1362 if ($field->htmlvar_name == 'uwp_avatar_file') {
1363 $min_width = apply_filters('uwp_avatar_image_width', 150);
1364 $min_height = apply_filters('uwp_avatar_image_height', 150);
1365 } else {
1366 $min_width = apply_filters('uwp_banner_image_width', uwp_get_option('profile_banner_width', 1000));
1367 $min_height = apply_filters('uwp_banner_image_height', 300);
1368 }
1369
1370 $imagedetails = getimagesize( $file_to_upload['tmp_name'] );
1371 $width = $imagedetails[0];
1372 $height = $imagedetails[1];
1373
1374 if ( $width < $min_width) {
1375 return new WP_Error( 'image-too-small', sprintf( __( 'The uploaded file is too small. Minimum image width should be %s px', 'userswp' ), $min_width));
1376 }
1377 if ( $height < $min_height) {
1378 return new WP_Error( 'image-too-small', sprintf( __( 'The uploaded file is too small. Minimum image height should be %s px', 'userswp' ), $min_height) );
1379 }
1380 }
1381
1382 return $value;
1383
1384 }
1385
1386 /**
1387 * Sets uwp_profile_upload to true on profile page.
1388 *
1389 * @since 1.0.0
1390 * @package userswp
1391 * @param array $params Plupload params
1392 * @return array Plupload params
1393 */
1394 public function add_uwp_plupload_param($params) {
1395
1396 if(!is_admin() && get_the_ID()==uwp_get_option('profile_page', false)){
1397 $params['uwp_profile_upload'] = true;
1398 }
1399
1400 return $params;
1401 }
1402
1403 /**
1404 * Handles avatar and banner file upload.
1405 *
1406 * @since 1.0.0
1407 * @package userswp
1408 * @return void
1409 */
1410 public function uwp_ajax_avatar_banner_upload() {
1411 // Image upload handler
1412 // todo: security checks
1413 $type = strip_tags(esc_sql($_POST['uwp_popup_type']));
1414
1415 if (!in_array($type, array('banner', 'avatar'))) {
1416 $result['error'] = uwp_wrap_notice(__("Invalid modal type", "userswp"), 'error');
1417 $return = json_encode($result);
1418 echo $return;
1419 die();
1420 }
1421
1422 global $wpdb;
1423 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
1424 $fields = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE form_type = %s AND field_type = 'file' AND is_active = '1' ORDER BY sort_order ASC", array($type)));
1425
1426 $field = false;
1427 if ($fields) {
1428 $field = $fields[0];
1429 }
1430
1431 $result = array();
1432
1433 if (!$field) {
1434 $result['error'] = uwp_wrap_notice(__("No fields available", "userswp"), 'error');
1435 $return = json_encode($result);
1436 echo $return;
1437 die();
1438 }
1439
1440 $files = new UsersWP_Files();
1441 $errors = $files->handle_file_upload($field, $_FILES);
1442
1443 if (is_wp_error($errors)) {
1444 $result['error'] = uwp_wrap_notice($errors->get_error_message(), 'error');
1445 $return = json_encode($result);
1446 echo $return;
1447 } else {
1448 $return = $this->uwp_ajax_image_crop_popup($errors['url'], $type);
1449 echo $return;
1450 }
1451
1452 die();
1453 }
1454
1455 /**
1456 * Returns the avatar and banner crop popup html and js.
1457 *
1458 * @since 1.0.0
1459 * @package userswp
1460 * @param string $image_url Image url to crop.
1461 * @param string $type Crop type. Avatar or Banner
1462 * @return string|null Html and js content.
1463 */
1464 public function uwp_ajax_image_crop_popup($image_url, $type){
1465 wp_enqueue_style( 'jcrop' );
1466 wp_enqueue_script( 'jcrop', array( 'jquery' ) );
1467
1468 $output = null;
1469 if ($image_url && $type ) {
1470 $output = $this->uwp_image_crop_popup($image_url, $type);
1471 }
1472 return $output;
1473 }
1474
1475 /**
1476 * Handles crop popup form ajax request.
1477 *
1478 * @since 1.0.0
1479 * @package userswp
1480 * @return void
1481 */
1482 public function uwp_ajax_image_crop_popup_form(){
1483 $type = strip_tags(esc_sql($_POST['type']));
1484
1485 $output = null;
1486
1487
1488 if ($type && in_array($type, array('banner', 'avatar'))) {
1489 $output = $this->uwp_crop_submit_form($type);
1490 }
1491 echo $output;
1492 exit();
1493 }
1494
1495 /**
1496 * Defines javascript ajaxurl variable.
1497 *
1498 * @since 1.0.0
1499 * @package userswp
1500 * @return void
1501 */
1502 public function uwp_define_ajaxurl() {
1503
1504 echo '<script type="text/javascript">
1505 var ajaxurl = "' . admin_url('admin-ajax.php') . '";
1506 </script>';
1507 }
1508
1509 /**
1510 * Adds UsersWP serach form in Users page.
1511 *
1512 * @since 1.0.0
1513 * @package userswp
1514 * @return void
1515 */
1516 public function uwp_users_search() {
1517 ?>
1518 <div class="uwp-users-list-sort-search">
1519 <div class="uwp-user-search" id="uwp_user_search">
1520 <?php
1521 $keyword = "";
1522 if (isset($_GET['uwps']) && $_GET['uwps'] != '') {
1523 $keyword = stripslashes(strip_tags($_GET['uwps']));
1524 }
1525 ?>
1526 <form method="get" class="searchform search-form" action="<?php echo get_uwp_users_permalink(); ?>">
1527 <?php do_action('uwp_users_page_search_form_inner', $keyword); ?>
1528 </form>
1529 </div>
1530 <div class="uwp-user-sort">
1531 <?php
1532 $default_layout = uwp_get_option('users_default_layout', 'list');
1533 ?>
1534 <form method="get" action="">
1535 <select name="uwp_layout" id="uwp_layout">
1536 <option <?php selected( $default_layout, "list" ); ?> value="list"><?php echo __("List View", "userswp"); ?></option>
1537 <option <?php selected( $default_layout, "2col" ); ?> value="2col"><?php echo __("Grid 2 Col", "userswp"); ?></option>
1538 <option <?php selected( $default_layout, "3col" ); ?> value="3col"><?php echo __("Grid 3 Col", "userswp"); ?></option>
1539 <option <?php selected( $default_layout, "4col" ); ?> value="4col"><?php echo __("Grid 4 Col", "userswp"); ?></option>
1540 <option <?php selected( $default_layout, "5col" ); ?> value="5col"><?php echo __("Grid 5 Col", "userswp"); ?></option>
1541 </select>
1542 <?php
1543 $sort_by = "";
1544 if (isset($_GET['uwp_sort_by']) && $_GET['uwp_sort_by'] != '') {
1545 $sort_by = strip_tags(esc_sql($_GET['uwp_sort_by']));
1546 }
1547 ?>
1548 <select name="uwp_sort_by" id="uwp_sort_by" onchange="this.form.submit()">
1549 <option value=""><?php echo __("Sort By:", "userswp"); ?></option>
1550 <option <?php selected( $sort_by, "newer" ); ?> value="newer"><?php echo __("Newer", "userswp"); ?></option>
1551 <option <?php selected( $sort_by, "older" ); ?> value="older"><?php echo __("Older", "userswp"); ?></option>
1552 <option <?php selected( $sort_by, "alpha_asc" ); ?> value="alpha_asc"><?php echo __("A-Z", "userswp"); ?></option>
1553 <option <?php selected( $sort_by, "alpha_desc" ); ?> value="alpha_desc"><?php echo __("Z-A", "userswp"); ?></option>
1554 </select>
1555 </form>
1556 </div>
1557 </div>
1558 <?php
1559 }
1560
1561 /**
1562 * Prints the users page main content.
1563 *
1564 * @since 1.0.0
1565 * @package userswp
1566 *
1567 * @return void
1568 */
1569 public function uwp_users_list() {
1570 get_uwp_users_list();
1571 }
1572
1573 /**
1574 * Displays custom fields as tabs
1575 *
1576 * @since 1.0.0
1577 * @package userswp
1578 * @param $tabs
1579 * @param $user
1580 * @return mixed
1581 */
1582 public function uwp_extra_fields_as_tabs($tabs, $user)
1583 {
1584 global $wpdb;
1585 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
1586 $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE form_type = 'account' AND is_public != '0' AND show_in LIKE '%[own_tab]%' ORDER BY sort_order ASC");
1587 $usermeta = uwp_get_usermeta_row($user->ID);
1588 $privacy = $usermeta->user_privacy ? explode(',', $usermeta->user_privacy) : array();
1589
1590 foreach ($fields as $field) {
1591 if ($field->field_icon != '') {
1592 $icon = '<i class="'.$field->field_icon.'"></i>';
1593 } else {
1594 $field_icon = uwp_field_type_to_fa_icon($field->field_type);
1595 if ($field_icon) {
1596 $icon = '<i class="'.$field_icon.'"></i>';
1597 } else {
1598 $icon = '<i class="fa fa-user"></i>';
1599 }
1600 }
1601 $key = str_replace('uwp_account_', '', $field->htmlvar_name);
1602 if ($field->is_public == '1') {
1603 $tabs[$key] = array(
1604 'title' => __($field->site_title, 'userswp'),
1605 'count' => $icon
1606 );
1607 } else {
1608 if (!in_array($field->htmlvar_name.'_privacy', $privacy)) {
1609 $tabs[$key] = array(
1610 'title' => __($field->site_title, 'userswp'),
1611 'count' => $icon
1612 );
1613 }
1614 }
1615 }
1616 return $tabs;
1617 }
1618
1619 /**
1620 * Prints custom field values as tab content.
1621 *
1622 * @since 1.0.0
1623 * @package userswp
1624 * @param object $user The User ID.
1625 * @param string $active_tab Active tab.
1626 */
1627 public function uwp_extra_fields_as_tab_values($user, $active_tab)
1628 {
1629 global $wpdb;
1630 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
1631 $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE form_type = 'account' AND is_public != '0' ORDER BY sort_order ASC");
1632 $usermeta = uwp_get_usermeta_row($user->ID);
1633 $privacy = $usermeta->user_privacy ? explode(',', $usermeta->user_privacy) : array();
1634
1635 $fieldsets = array();
1636 $fieldset = false;
1637 foreach ($fields as $field) {
1638 $key = str_replace('uwp_account_', '', $field->htmlvar_name);
1639 if ($field->field_type == 'fieldset') {
1640 $fieldset = $key;
1641 }
1642 $show_in = explode(',',$field->show_in);
1643 if (in_array("[fieldset]", $show_in)) {
1644 $fieldsets[$fieldset][] = $field;
1645 }
1646 if ($key == $active_tab && $field->field_type != 'fieldset') {
1647 $value = $this->uwp_get_field_value($field, $user);
1648 echo '<div class="uwp_profile_tab_field_content">';
1649 echo $value;
1650 echo '</div>';
1651 }
1652 }
1653
1654 if (isset($fieldsets[$active_tab])) {
1655 $fieldset_fields = $fieldsets[$active_tab];
1656 ?>
1657 <div class="uwp-profile-extra">
1658 <div class="uwp-profile-extra-div form-table">
1659 <?php
1660 foreach ($fieldset_fields as $field) {
1661 $display = false;
1662 if ($field->is_public == '1') {
1663 $display = true;
1664 } else {
1665 if (!in_array($field->htmlvar_name.'_privacy', $privacy)) {
1666 $display = true;
1667 }
1668 }
1669 if (!$display) {
1670 continue;
1671 }
1672 $value = $this->uwp_get_field_value($field, $user);
1673 // Icon
1674 if ($field->field_icon) {
1675 $icon = '<i class="uwp_field_icon '.$field->field_icon.'"></i>';
1676 } else {
1677 $icon = '';
1678 }
1679 ?>
1680 <div class="uwp-profile-extra-wrap">
1681 <div class="uwp-profile-extra-key"><?php echo $icon.$field->site_title; ?><span class="uwp-profile-extra-sep">:</span></div>
1682 <div class="uwp-profile-extra-value">
1683 <?php
1684 echo $value;
1685 ?>
1686 </div>
1687 </div>
1688 <?php
1689 }
1690 ?>
1691 </div>
1692 </div>
1693 <?php
1694 }
1695 }
1696
1697 /**
1698 * Gets custom field value based on key.
1699 *
1700 * @since 1.0.0
1701 * @package userswp
1702 * @param object $field Field info object.
1703 * @param object $user The User ID.
1704 * @return string Custom field value.
1705 */
1706 public function uwp_get_field_value($field, $user) {
1707
1708 $user_data = get_userdata($user->ID);
1709 $file_obj = new UsersWP_Files();
1710
1711 if ($field->htmlvar_name == 'uwp_account_email') {
1712 $value = $user_data->user_email;
1713 } elseif ($field->htmlvar_name == 'uwp_account_password') {
1714 $value = '';
1715 $field->is_required = 0;
1716 } elseif ($field->htmlvar_name == 'uwp_account_confirm_password') {
1717 $value = '';
1718 $field->is_required = 0;
1719 } else {
1720 $value = uwp_get_usermeta($user->ID, $field->htmlvar_name, "");
1721 }
1722
1723 // Select and Multiselect needs Value to be converted
1724 if ($field->field_type == 'select' || $field->field_type == 'multiselect') {
1725 $option_values_arr = uwp_string_values_to_options($field->option_values, true);
1726
1727 // Select
1728 if ($field->field_type == 'select') {
1729
1730 if($field->field_type_key != 'country'){
1731 if (!empty($value)) {
1732 $data = $this->uwp_array_search($option_values_arr, 'value', $value);
1733 $value = $data[0]['label'];
1734 } else {
1735 $value = '';
1736 }
1737 }
1738 }
1739
1740 //Multiselect
1741 if ($field->field_type == 'multiselect' && !empty($value)) {
1742 if (!empty($value) && is_array($value)) {
1743 $array_value = array();
1744 foreach ($value as $v) {
1745 if(!empty($v)){
1746 $data = $this->uwp_array_search($option_values_arr, 'value', $v);
1747 $array_value[] = $data[0]['label'];
1748 }
1749
1750 }
1751 if(!empty($array_value)){
1752 $value = implode(', ', $array_value);
1753 }else{
1754 $value = '';
1755 }
1756
1757 } else {
1758 $value = '';
1759 }
1760 }
1761 }
1762
1763 // Date
1764 if ($field->field_type == 'datepicker') {
1765 $extra_fields = unserialize($field->extra_fields);
1766
1767 if ($extra_fields['date_format'] == '')
1768 $extra_fields['date_format'] = 'yy-mm-dd';
1769
1770 $date_format = $extra_fields['date_format'];
1771
1772 if (!empty($value)) {
1773 $value = date('Y-m-d', $value);
1774 }
1775
1776 $value = uwp_date($value, $date_format, 'Y-m-d');
1777 }
1778
1779
1780 // Time
1781 if ($field->field_type == 'time') {
1782 $value = date(get_option('time_format'), strtotime($value));
1783 }
1784
1785 // URL
1786 if ($field->field_type == 'url' && !empty($value)) {
1787 $link_text = $value;
1788 // if deafult_value is not url then it will be used as link text.
1789 if ($field->default_value && !empty($field->default_value) ) {
1790 if (substr( $field->default_value, 0, 4 ) === "http") {
1791 $link_text = $value;
1792 } else {
1793 $link_text = $field->default_value;
1794 }
1795 }
1796 if (substr( $link_text, 0, 4 ) === "http") {
1797 $link_text = esc_url($link_text);
1798 }
1799
1800 $value = '<a href="'.$value.'">'.$link_text.'</a>';
1801 }
1802
1803 // Checkbox
1804 if ($field->field_type == 'checkbox') {
1805 if ($value == '1') {
1806 $value = 'Yes';
1807 } else {
1808 $value = 'No';
1809 }
1810 }
1811
1812 // File
1813 if ($field->field_type == 'file') {
1814 $value = $file_obj->uwp_file_upload_preview($field, $value, false);
1815 }
1816
1817 // Sanitize
1818 switch ($field->field_type) {
1819 case 'url':
1820 // already escaped
1821 break;
1822 case 'file':
1823 // already escaped
1824 break;
1825 case 'textarea':
1826 $value = esc_textarea( $value );
1827 break;
1828 default:
1829 $value = esc_html( $value );
1830 }
1831
1832 if($field->field_type_key == 'country'){
1833 $value = uwp_output_country_html($value);
1834 }
1835
1836 return $value;
1837 }
1838
1839 }