FileMaster
Search
Toggle Dark Mode
Home
/
.
/
kiara
/
wp-content
/
plugins
/
userswp
/
includes
Edit File: class-profile.php
<?php /** * Profile Template related functions * * This class defines all code necessary for Profile template. * * @since 1.0.0 * @author GeoDirectory Team <info@wpgeodirectory.com> */ class UsersWP_Profile { public static function get_author_link( $link, $user_id ) { if ( 1 == uwp_get_option( 'uwp_disable_author_link' ) && ! ( is_uwp_profile_page() || is_uwp_users_page() ) ) { return $link; } return self::get_profile_link( $link, $user_id ); } /** * Returns user profile link based on user id. * * @since 1.0.0 * @package userswp * * @param string $link Unmodified link. * @param int $user_id User id. * * @return string Modified link. */ public static function get_profile_link( $link, $user_id ) { $page_id = uwp_get_page_id( 'profile_page', false ); if ( ! $page_id ) { return $link; } $link = get_permalink( $page_id ); if ( $link != '' ) { if ( isset( $_REQUEST['page_id'] ) ) { $permalink_structure = 'DEFAULT'; } else { $permalink_structure = 'CUSTOM'; // Add forward slash if not available $link = trailingslashit( $link ); } $url_type = apply_filters( 'uwp_profile_url_type', 'slug' ); if ( $url_type && 'id' == $url_type ) { if ( 'DEFAULT' == $permalink_structure ) { return add_query_arg( array( 'viewuser' => $user_id ), $link ); } else { return user_trailingslashit( $link . $user_id ); } } else { $user = get_userdata( $user_id ); if ( $user ) { if ( ! empty( $user->user_nicename ) ) { $username = $user->user_nicename; } else { $username = $user->user_login; } } else { $username = ''; } if ( 'DEFAULT' == $permalink_structure ) { return add_query_arg( array( 'username' => $username ), $link ); } else { return user_trailingslashit( $link . $username ); } } } else { return $link; } } /** * Prints the profile page title section. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * @param string $tag Tag * @param string $title_class Title Class * @param string $link_class Link Class * @param bool $link The User ID. */ public function get_profile_title( $user, $tag = 'h2', $title_class = '', $link_class = '', $link = true ) { if ( ! $user ) { return; } ?> <div class="uwp-profile-name"> <<?php echo esc_attr( $tag ); ?> class="uwp-user-title <?php echo esc_attr( $title_class ); ?>" data-user="<?php echo absint( $user->ID ); ?>"> <?php if ( $link ){ ?><a href="<?php echo esc_url( uwp_build_profile_tab_url( $user->ID ) ); ?>" class="<?php echo esc_attr( $link_class ); ?>"><?php } ?> <?php echo esc_attr( apply_filters( 'uwp_profile_display_name', esc_attr( $user->display_name ), $user ) ); ?> <?php if ( $link ){ ?></a><?php } ?> <?php do_action( 'uwp_profile_after_title', $user->ID ); ?> </<?php echo esc_attr( $tag ); ?>> </div> <?php } /** * Displays edit account button */ public function edit_profile_button( $user_id ) { global $uwp_in_user_loop; $account_page = uwp_get_page_id( 'account_page', false ); if ( $user_id ) { $user = get_userdata( $user_id ); } else { $user = uwp_get_displayed_user(); } $can_user_edit_account = apply_filters( 'uwp_user_can_edit_own_profile', true, $user->ID ); if ( ! $uwp_in_user_loop && $account_page && is_user_logged_in() && ( get_current_user_id() == $user->ID ) && $can_user_edit_account ) { ?> <a href="<?php echo esc_url( get_permalink( $account_page ) ); ?>" class="btn btn-sm btn-outline-dark btn-circle mt-n1" data-toggle="tooltip" title="<?php esc_attr_e( 'Edit Account', 'userswp' ); ?>"><i class="fas fa-pencil-alt fa-fw fa-lg"></i></a> <?php } } /** * Prints the profile page social links section. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * @param string , array $exclude Fields to exclude from displaying. */ public function get_profile_social( $user, $exclude = '' ) { if ( is_uwp_profile_page() ) { $show_type = '[profile_side]'; } elseif ( is_uwp_users_page() ) { $show_type = '[users]'; } else { $show_type = false; } if ( ! $show_type ) { return; } global $wpdb; $table_name = uwp_get_table_prefix() . 'uwp_form_fields'; $form_id = uwp_get_register_form_id( $user->ID ); $fields = $wpdb->get_results( $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE ( form_type = 'register' OR form_type = 'account' ) AND field_type = 'url' AND css_class LIKE '%uwp_social%' AND form_id = %d ORDER BY sort_order ASC", $form_id ) ); $usermeta = isset( $user->ID ) ? uwp_get_usermeta_row( $user->ID ) : array(); $privacy = ! empty( $usermeta ) && ! empty( $usermeta->user_privacy ) ? explode( ',', $usermeta->user_privacy ) : array(); if ( ! empty( $exclude ) && ! is_array( $exclude ) ) { $exclude = explode( ',', $exclude ); $exclude = array_map( 'trim', $exclude ); } ?> <div class="uwp-profile-social"> <ul class="uwp-profile-social-ul"> <?php foreach ( $fields as $field ) { $show_in = explode( ',', $field->show_in ); if ( ! in_array( $show_type, $show_in ) ) { continue; } $display = false; if ( $field->is_public == '0' ) { $display = false; } else if ( $field->is_public == '1' ) { $display = true; } else { if ( ! in_array( $field->htmlvar_name . '_privacy', $privacy ) ) { $display = true; } } if ( ! $display ) { continue; } $key = $field->htmlvar_name; // see UsersWP_Forms -> save_user_extra_fields reason for replacing key $key = str_replace( 'uwp_register_', '', $key ); $exclude_key = str_replace( 'uwp_account_', '', $key ); $value = uwp_get_usermeta( $user->ID, $key, false ); $icon = uwp_get_field_icon( $field->field_icon ); if ( isset( $icon ) && ! empty( $icon ) ) { $title = $icon; } else { $title = $field->site_title; } if ( ! empty( $exclude ) && in_array( $exclude_key, $exclude ) ) { continue; } if ( $value ) { echo '<li><a target="_blank" rel="nofollow" href="' . esc_url( $value ) . '">' . esc_attr( $title ) . '</a></li>'; } } ?> </ul> </div> <?php } /** * Returns the custom fields content of profile page more info tab. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * @param string $show_type Location of field to display. */ public function show_output_location_data( $user, $show_type ) { if ( ! $show_type ) { return; } echo $this->get_extra_fields( $user, '[' . $show_type . ']' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Returns the custom fields content based on type. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * @param string $show_type Filter type. * * @return string Custom fields content. */ public function get_extra_fields( $user, $show_type ) { ob_start(); global $wpdb; $table_name = uwp_get_table_prefix() . 'uwp_form_fields'; $form_id = uwp_get_register_form_id( $user->ID ); $fields = $wpdb->get_results( $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE form_type = 'account' AND css_class NOT LIKE '%uwp_social%' AND form_id = %d ORDER BY sort_order ASC", $form_id )); $wrap_html = false; if ( $fields ) { $usermeta = isset( $user->ID ) ? uwp_get_usermeta_row( $user->ID ) : array(); $privacy = ! empty( $usermeta ) && ! empty( $usermeta->user_privacy ) ? explode( ',', $usermeta->user_privacy ) : array(); foreach ( $fields as $field ) { $show_in = explode( ',', $field->show_in ); if ( ! in_array( $show_type, $show_in ) ) { continue; } $display = false; if ( $field->is_public == '0' ) { $display = false; } else if ( $field->is_public == '1' ) { $display = true; } else { if ( ! in_array( $field->htmlvar_name . '_privacy', $privacy ) ) { $display = true; } } if ( ! $display ) { continue; } $value = $this->get_field_value( $field, $user ); $class = isset( $field->css_class ) ? $field->css_class : ''; // Icon $icon = uwp_get_field_icon( $field->field_icon ); $site_title = isset( $field->site_title ) ? __( wp_unslash($field->site_title), 'userswp' ) : ''; if ( $field->field_type == 'fieldset' ) { $icon = ''; ?> <div class="uwp-profile-extra-wrap m-0 p-0"> <div class="uwp-profile-extra-key uwp-profile-extra-full m-0 p-0"><h3 style="margin: 10px 0;"><?php echo wp_kses($icon, array('i'=>array(), 'span'=> array() ) ) . esc_attr( $site_title ); ?></h3></div> </div> <?php } else { if ( $value ) { $wrap_html = true; ?> <div class="uwp-profile-extra-wrap <?php echo esc_attr( $class ); ?>"> <div class="uwp-profile-extra-key d-inline-block"><?php echo wp_kses($icon, array('i'=>array(), 'span'=> array() ) ) . " " . esc_attr( $site_title ); ?> <span class="uwp-profile-extra-sep">:</span></div> <div class="uwp-profile-extra-value d-inline-block"> <?php if ( $field->htmlvar_name == 'bio' ) { $show_read_more = apply_filters( 'uwp_profile_bio_show_read_more', false ); $value = get_user_meta( $user->ID, 'description', true ); $value = stripslashes( $value ); $limit_words = apply_filters( 'uwp_profile_bio_content_limit', 50 ); if ( $value ) { ?> <div class="uwp-profile-bio <?php if ( $show_read_more ) { echo "uwp_more"; } ?>"> <?php if ( is_uwp_profile_page() ) { echo nl2br( esc_attr( $value ) ); } else { echo esc_attr( wp_trim_words( $value, $limit_words, '...' ) ); } ?> </div> <?php } } else { echo wp_kses_post( $value ); } ?> </div> </div> <?php } } } } $output = ob_get_contents(); $wrapped_output = ''; if ( $wrap_html ) { $wrapped_output .= '<div class="uwp-profile-extra"><div class="uwp-profile-extra-div form-table">'; $wrapped_output .= $output; $wrapped_output .= '</div></div>'; } ob_end_clean(); return trim( $wrapped_output ); } /** * Gets custom field value based on key. * * @since 1.0.0 * @package userswp * * @param object $field Field info object. * @param object $user The User. * * @return string Custom field value. */ public function get_field_value( $field, $user ) { $user_data = get_userdata( $user->ID ); if ( $field->htmlvar_name == 'email' ) { $value = $user_data->user_email; } elseif ( $field->htmlvar_name == 'password' ) { $value = ''; $field->is_required = 0; } elseif ( $field->htmlvar_name == 'confirm_password' ) { $value = ''; $field->is_required = 0; } else { $value = uwp_get_usermeta( $user->ID, $field->htmlvar_name, "" ); } // Select and Multiselect needs Value to be converted if ( $field->field_type == 'select' || $field->field_type == 'multiselect' ) { $option_values_arr = uwp_string_values_to_options( $field->option_values, true ); // Select if ( $field->field_type == 'select' ) { if ( $field->field_type_key != 'country' && $field->field_type_key != 'uwp_country' ) { if ( ! empty( $value ) ) { $data = $this->uwp_array_search( $option_values_arr, 'value', $value ); $value = !empty( $data[0]['label'] ) ? $data[0]['label'] : ''; } else { $value = ''; } } } //Multiselect if ( $field->field_type == 'multiselect' && ! empty( $value ) ) { if ( ! empty( $value ) && is_array( $value ) ) { $array_value = array(); foreach ( $value as $v ) { if ( ! empty( $v ) ) { $data = $this->uwp_array_search( $option_values_arr, 'value', $v ); $array_value[] = $data[0]['label']; } } if ( ! empty( $array_value ) ) { $value = implode( ', ', $array_value ); } else { $value = ''; } } else { $value = ''; } } } // Date if ( $field->field_type == 'datepicker' ) { $date_format = get_option( 'date_format' ); if ( isset( $field->extra_fields ) && ! empty( $field->extra_fields ) ) { $extra_fields = unserialize( $field->extra_fields ); if ( isset( $extra_fields['date_format'] ) && ! empty( $extra_fields['date_format'] ) ) { $date_format = $extra_fields['date_format']; } } if ( ! empty( $value ) ) { $value = date( $date_format, $value ); } else { $value = ''; } } // Time if ( $field->field_type == 'time' ) { if ( ! empty( $value ) ) { $value = date( get_option( 'time_format' ), strtotime( $value ) ); } else { $value = ''; } } // URL if ( $field->field_type == 'url' && ! empty( $value ) ) { $link_text = $value; // if default_value is not url then it will be used as link text. if ( $field->default_value && ! empty( $field->default_value ) ) { if ( substr( $field->default_value, 0, 4 ) === "http" ) { $link_text = $value; } else { $link_text = $field->default_value; } } if ( substr( $link_text, 0, 4 ) === "http" ) { $link_text = esc_url( $link_text ); } $value = '<a href="' . esc_url( $value ) . '" target="_blank" rel="nofollow">' . esc_attr( $link_text ) . '</a>'; } // Checkbox if ( $field->field_type == 'checkbox' ) { if ( $value == '1' ) { $value = __( 'Yes', 'userswp' ); } else { $value = __( 'No', 'userswp' ); } } // File if ( $field->field_type == 'file' ) { $file_obj = new UsersWP_Files(); $value = $file_obj->file_upload_preview( $field, $value, false ); } // Sanitize switch ( $field->field_type ) { case 'url': // already escaped break; case 'file': // already escaped break; case 'textarea': $value = esc_textarea( $value ); $value = nl2br( $value ); break; case 'editor': $value = wp_kses_post( $value ); $value = nl2br( $value ); break; default: $value = esc_html( $value ); } if ( isset( $field->field_type_key ) && $field->field_type_key == 'country' || $field->field_type_key == 'uwp_country' ) { $value = uwp_output_country_html( $value ); } return apply_filters('uwp_get_field_value', $value, $field, $user); } /** * Array search by value * * @since 1.0.0 * @package userswp * * @param array $array Original array. * @param mixed $key Array key * @param mixed $value Array value. * * @return array Result array. */ public function uwp_array_search( $array, $key, $value ) { $results = array(); if ( is_array( $array ) ) { if ( isset( $array[ $key ] ) && $array[ $key ] == $value ) { $results[] = $array; } foreach ( $array as $subarray ) { $results = array_merge( $results, $this->uwp_array_search( $subarray, $key, $value ) ); } } return $results; } /** * Returns the custom fields content of profile page sidebar. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. */ public function get_profile_side_extra( $user ) { echo $this->get_extra_fields( $user, '[profile_side]' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Returns the custom fields content of users page. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. */ public function get_users_extra( $user ) { echo $this->get_extra_fields( $user, '[users]' ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * * Returns profile page tabs * * @return array */ public function get_tabs() { // get the settings global $uwp_profile_tabs_array; // check if we have been here before $tabs = ! empty( $uwp_profile_tabs_array ) ? $uwp_profile_tabs_array : $this->get_tab_settings(); $tabs_array = array(); if ( ! empty( $tabs ) ) { // get the tab contents first so we can decide to output the tab head $tabs_content = array(); foreach ( $tabs as $tab ) { $tabs_content[ $tab->id . "tab" ] = $this->tab_content( $tab ); } // setup the array foreach ( $tabs as $tab ) { if ( isset( $tab->tab_level ) && $tab->tab_level > 0 ) { continue; } $hide_empty = apply_filters('uwp_hide_empty_tabs', true, $tab, $tabs); if ( $hide_empty && empty( $tabs_content[ $tab->id . "tab" ] ) ) { continue; } $tab->tab_content_rendered = $tabs_content[ $tab->id . "tab" ]; $tabs_array[] = (array) $tab; } } /** * Get the tabs output settings. * * @param array $tabs_array The array of tabs. */ return apply_filters( 'uwp_get_profile_tabs', $tabs_array ); } /** * * Returns profile tabs * * @return array $tabs Profile tabs */ public function get_tab_settings() { global $wpdb, $uwp_profile_tabs_array; if ( $uwp_profile_tabs_array ) { $tabs = $uwp_profile_tabs_array; } else { $tabs_table_name = uwp_get_table_prefix() . 'uwp_profile_tabs'; $uwp_profile_tabs_array = array(); $displayed_user = uwp_get_user_by_author_slug(); if ( $displayed_user ) { $tabs_privacy = uwp_get_tabs_privacy_by_user( $displayed_user ); } $form_id = uwp_get_register_form_id( $displayed_user->ID ); $tabs_result = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM " . $tabs_table_name . " WHERE form_type = %s and form_id = %s ORDER BY sort_order ASC", 'profile-tabs', $form_id ) ); foreach ( $tabs_result as $tab ) { if ( isset( $tab->user_decided ) && 1 == $tab->user_decided && ! empty( $tabs_privacy ) ) { $field_name = $tab->tab_key . '_tab_privacy'; $public_fields_keys = is_array( $tabs_privacy ) ? array_keys( $tabs_privacy ) : $tabs_privacy; if ( in_array( $field_name, $public_fields_keys ) ) { if ( 1 == $tabs_privacy[ $field_name ] && is_user_logged_in() ) { // 1 for logged in users $uwp_profile_tabs_array[] = $tab; } elseif ( 2 == $tabs_privacy[ $field_name ] && isset( $displayed_user->ID ) && ( $displayed_user->ID == get_current_user_id() || current_user_can( 'administrator' ) ) ) { // 2 for author and admin only $uwp_profile_tabs_array[] = $tab; } elseif ( 0 == $tabs_privacy[ $field_name ] ) { // for all users $uwp_profile_tabs_array[] = $tab; } else { // Skip tab } } } elseif ( isset( $tab->tab_privacy ) ) { if ( 1 == $tab->tab_privacy && is_user_logged_in() ) { // 1 for logged in users $uwp_profile_tabs_array[] = $tab; } elseif ( 2 == $tab->tab_privacy && isset( $displayed_user->ID ) && ( $displayed_user->ID == get_current_user_id() || current_user_can( 'administrator' ) ) ) { // 2 for author and admin only $uwp_profile_tabs_array[] = $tab; } elseif ( 0 == $tab->tab_privacy ) { // for all users $uwp_profile_tabs_array[] = $tab; } else { // Skip tab } } else { // Skip tab } } $tabs = $uwp_profile_tabs_array; } /** * Get the tabs output settings. * * @param array $tabs The array of stdClass settings for the tabs output. */ return apply_filters( 'uwp_profile_tab_settings', $tabs ); } /** * Returns profile tab content * * @since 2.0.0 * * @param array $tab Tab array * * @return string */ public function tab_content( $tab ) { ob_start(); // main content if ( ! empty( $tab->tab_content ) ) { // override content $content = stripslashes( $tab->tab_content ); echo do_shortcode( $content ); } elseif ( $tab->tab_type == 'standard' ) { $user = uwp_get_displayed_user(); do_action( 'uwp_profile_tab_content', $user, $tab ); do_action( 'uwp_profile_' . $tab->tab_key . '_tab_content', $user, $tab ); } // child elements echo self::tab_content_child( $tab ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped return ob_get_clean(); } /** * Returns profile child tab content * * @since 2.0.0 * * @param array $tab Child tab array * * @return string */ public function tab_content_child( $tab ) { ob_start(); $tabs = self::get_tab_settings(); $parent_id = $tab->id; foreach ( $tabs as $child_tab ) { if ( isset( $child_tab->tab_parent ) && $child_tab->tab_parent == $parent_id ) { if ( ! empty( $child_tab->tab_content ) ) { // override content echo do_shortcode( stripslashes( $child_tab->tab_content ) ); } elseif ( $child_tab->tab_type == 'fieldset' ) { self::output_fieldset( $child_tab ); } elseif ( $child_tab->tab_type == 'standard' ) { $user = uwp_get_displayed_user(); do_action( 'uwp_profile_tab_content', $user, $child_tab ); do_action( 'uwp_profile_' . $child_tab->tab_key . '_tab_content', $user, $child_tab ); if ( $child_tab->tab_key == 'reviews' ) { comments_template(); } } } } return ob_get_clean(); } /** * * Displays fieldset content * * @param array $tab Tab array * * @return string */ public function output_fieldset( $tab ) { ob_start(); echo '<div class="uwp_post_meta uwp-fieldset">'; echo "<h4>"; if ( $tab->tab_icon ) { echo '<i class="fas ' . esc_attr( $tab->tab_icon ) . '" aria-hidden="true"></i>'; } if ( $tab->tab_name ) { esc_attr_e( $tab->tab_name, 'userswp' ); } echo "</h4>"; echo "</div>"; return ob_get_clean(); } /** * Prints the tab content pagination section. * * @since 1.0.0 * @package userswp * * @param int $total Total items. * * @return void */ public function get_profile_pagination( $total ) { ?> <div class="uwp-pagination"> <?php $design_style = uwp_get_option( "design_style", 'bootstrap' ); if ( $design_style == 'bootstrap' ) { self::get_bootstrap_pagination( $total ); } else { $big = 999999999; // need an unlikely integer $translated = __( 'Page', 'userswp' ); // Supply translatable string $args = array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var( 'paged' ) ), 'total' => $total, 'before_page_number' => '<span class="screen-reader-text">' . $translated . ' </span>', 'type' => 'list' ); echo paginate_links( $args ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } ?> </div> <?php } /** * Displays boostrap pagination * * @since 2.0.0 * * @param int $total Total count */ public function get_bootstrap_pagination( $total ) { $navigation = ''; $args = array( 'mid_size' => 2, 'type' => 'array', 'prev_text' => sprintf( '%s <span class="nav-prev-text sr-only">%s</span>', '<i class="fas fa-chevron-left"></i>', __( 'Newer posts', 'ayetheme' ) ), 'next_text' => sprintf( '<span class="nav-next-text sr-only">%s</span> %s', __( 'Older posts', 'ayetheme' ), '<i class="fas fa-chevron-right"></i>' ), ); // Don't print empty markup if there's only one page. if ( $total > 1 ) { $args = wp_parse_args( $args, array( 'mid_size' => 1, 'prev_text' => _x( 'Previous', 'previous set of posts' ), 'next_text' => _x( 'Next', 'next set of posts' ), 'screen_reader_text' => __( 'Posts navigation' ), 'total' => $total, ) ); if ( is_front_page() ) { $args['current'] = ( get_query_var( 'page' ) ) ? absint( get_query_var( 'page' ) ) : 1; } // Set up paginated links. $links = paginate_links( $args ); // make the output bootstrap ready $links_html = "<ul class='pagination m-0 p-0'>"; if ( ! empty( $links ) ) { foreach ( $links as $link ) { $active = strpos( $link, 'current' ) !== false ? 'active' : ''; $links_html .= "<li class='page-item $active'>"; $links_html .= str_replace( "page-numbers", "page-link", $link ); $links_html .= "</li>"; } } $links_html .= "</ul>"; if ( $links ) { $navigation .= '<section class="px-0 py-2 w-100">'; $navigation .= _navigation_markup( $links_html, 'pagination', $args['screen_reader_text'] ); $navigation .= '</section>'; } $navigation = str_replace( "nav-links", "uwp-nav-links", $navigation ); } echo $navigation; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Prints the profile page more info tab content. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * * @return void */ public function get_profile_more_info( $user ) { $extra = $this->get_profile_extra( $user ); echo $extra; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Returns the custom fields content of profile page more info tab. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * * @return string More info tab content. */ public function get_profile_extra( $user ) { return $this->get_extra_fields( $user, '[more_info]' ); } /** * Prints the profile page "posts" tab content. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * * @return void */ public function get_profile_posts( $user ) { uwp_generic_tab_content( $user, 'post', __( 'Posts', 'userswp' ) ); } /** * Prints the profile page "comments" tab content. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. * @param string $post_type Post type. * @param array $args Extra arguments. * * @return void */ public function get_profile_comments( $user, $post_type = 'post', $args = array() ) { $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $number = uwp_get_option( 'profile_no_of_items', 10 ); $offset = ( $paged - 1 ) * $number; $total_comments = $this->get_comment_count_by_user( $user->ID, $post_type ); $maximum_pages = ceil( $total_comments / $number ); $query_args = array( 'number' => $number, 'offset' => $offset, 'user_id' => $user->ID, 'paged' => $paged, 'post_type' => $post_type, ); // The Query $the_query = new WP_Comment_Query(); $comments = $the_query->query( $query_args ); if(!$comments){ return; } $args['template_args']['the_query'] = $comments; $args['template_args']['user'] = $user; $args['template_args']['title'] = ! empty( $args['template_args']['title'] ) ? $args['template_args']['title'] : __( "Comments", 'userswp' ); $args['template_args']['maximum_pages'] = $maximum_pages; $design_style = ! empty( $args['design_style'] ) ? esc_attr( $args['design_style'] ) : uwp_get_option( "design_style", 'bootstrap' ); $template = $design_style ? $design_style . "/loop-comments.php" : "loop-comments.php"; uwp_get_template( $template, $args ); } /** * Displays the profile page "user comments" tab content. * * @since 1.2.2.36 * @package userswp * * @param object $user The User ID. * @param string $post_type Post type. * @param array $args Extra arguments. * * @return void */ public function get_profile_user_comments( $user, $post_type = 'post', $args = array() ) { $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $number = uwp_get_option( 'profile_no_of_items', 10 ); $offset = ( $paged - 1 ) * $number; $args = array( 'post_type' => $post_type, 'post_status' => 'published', 'posts_per_page' => -1, 'author' => $user->ID, 'fields' => 'ids', ); $wp_query = new WP_Query($args); $post_ids = $wp_query->posts; if(isset( $the_query->found_posts ) && $wp_query->found_posts == 0 || empty($post_ids) ){ return; } $query_args = array( 'count' => true, 'post_type' => $post_type, 'post__in' => $post_ids, 'author__not_in' => $user->ID, ); // The Query $the_query = new WP_Comment_Query(); $comments_count = $the_query->query( $query_args ); $total_comments = $comments_count; $maximum_pages = ceil( $total_comments / $number ); $query_args = array( 'number' => $number, 'offset' => $offset, 'paged' => $paged, 'post_type' => $post_type, 'post__in' => $post_ids, 'author__not_in' => $user->ID, ); // The Query $the_query = new WP_Comment_Query(); $comments = $the_query->query( $query_args ); if(!$comments){ return; } $args['template_args']['the_query'] = $comments; $args['template_args']['user'] = $user; $args['template_args']['title'] = ! empty( $args['template_args']['title'] ) ? $args['template_args']['title'] : __( "User Comments", 'userswp' ); $args['template_args']['maximum_pages'] = $maximum_pages; $design_style = ! empty( $args['design_style'] ) ? esc_attr( $args['design_style'] ) : uwp_get_option( "design_style", 'bootstrap' ); $template = $design_style ? $design_style . "/loop-comments.php" : "loop-comments.php"; uwp_get_template( $template, $args ); } /** * Gets the comment count. * * @since 1.0.0 * @package userswp * * @param int $user_id User ID. * * @return int Comment count. */ public function get_comment_count_by_user( $user_id, $post_type = 'post' ) { global $wpdb; $count = $wpdb->get_var( "SELECT COUNT(comment_ID) FROM " . $wpdb->comments . " WHERE comment_post_ID in ( SELECT ID FROM " . $wpdb->posts . " WHERE post_type = '".$post_type."' AND post_status = 'publish') AND user_id = " . $user_id . " AND comment_approved = '1' AND comment_type NOT IN ('pingback', 'trackback' )" ); return $count; } /** * Rewrites profile page links * * @since 1.0.0 * @package userswp * @return void */ public function rewrite_profile_link() { $page_id = uwp_get_page_id( 'profile_page', false ); if ( $page_id && ! isset( $_REQUEST['page_id'] ) && get_post_type( $page_id ) == 'page' ) { $link = get_page_link( $page_id ); $uwp_profile_link = trailingslashit( $this->profile_slug() ); $uwp_profile_page_id = $page_id; // {home_url}/profile/1 $uwp_profile_link_empty_slash = '^' . $uwp_profile_link . '([^/]+)?$'; add_rewrite_rule( $uwp_profile_link_empty_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]', 'top' ); // {home_url}/profile/1/ $uwp_profile_link_with_slash = '^' . $uwp_profile_link . '([^/]+)/?$'; add_rewrite_rule( $uwp_profile_link_with_slash, 'index.php?page_id=' . $uwp_profile_page_id . '&uwp_profile=$matches[1]', 'top' ); // {home_url}/profile/1/page/1 $uwp_profile_link_empty_slash_paged = '^' . $uwp_profile_link . '([^/]+)/page/([0-9]+)?$'; 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' ); // {home_url}/profile/1/page/1/ $uwp_profile_link_with_slash_paged = '^' . $uwp_profile_link . '([^/]+)/page/([0-9]+)/?$'; 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' ); // {home_url}/profile/1/tab-slug $uwp_profile_tab_empty_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)?$'; 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' ); // {home_url}/profile/1/tab-slug/ $uwp_profile_tab_with_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/?$'; 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' ); // {home_url}/profile/1/tab-slug/page/1 $uwp_profile_tab_empty_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/page/([0-9]+)?$'; 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' ); // {home_url}/profile/1/tab-slug/page/1/ $uwp_profile_tab_with_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/page/([0-9]+)/?$'; 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' ); // {home_url}/profile/1/tab-slug/subtab-slug $uwp_profile_tab_empty_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)?$'; 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' ); // {home_url}/profile/1/tab-slug/subtab-slug/ $uwp_profile_tab_with_slash = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)/?$'; 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' ); // {home_url}/profile/1/tab-slug/subtab-slug/page/1 $uwp_profile_tab_empty_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)/page/([0-9]+)?$'; 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' ); // {home_url}/profile/1/tab-slug/subtab-slug/page/1/ $uwp_profile_tab_with_slash_paged = '^' . $uwp_profile_link . '([^/]+)/([^/]+)/([^/]+)/page/([0-9]+)/?$'; 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' ); if ( get_option( 'uwp_flush_rewrite' ) ) { //Ensure the $wp_rewrite global is loaded global $wp_rewrite; //Call flush_rules() as a method of the $wp_rewrite object $wp_rewrite->flush_rules( false ); delete_option( 'uwp_flush_rewrite' ); } if ( function_exists('pll_current_language') ) { $previous_lang = ! empty( $_COOKIE[ PLL_COOKIE ] ) ? $_COOKIE[ PLL_COOKIE ] : ''; $current_lang = pll_current_language(); if ( $current_lang != $previous_lang ) { flush_rewrite_rules( true ); } } } } /** * Get the slug for the profile page. * * @since 1.2.2.18 * * @param string $slug Profile slug. Default profile. * * @return string */ public function profile_slug( $slug = 'profile' ) { if ( $page_id = uwp_get_page_id( 'profile_page', false ) ) { if ( $_slug = get_post_field( 'post_name', absint( $page_id ) ) ) { $slug = $_slug; } } return apply_filters( 'uwp_rewrite_profile_slug', $slug ); } /** * Adds profile page query variables. * * @since 1.0.0 * @package userswp * * @param array $query_vars Query variables. * * @return array Modified Query variables array. */ public function profile_query_vars( $query_vars ) { $query_vars[] = 'uwp_profile'; $query_vars[] = 'uwp_tab'; $query_vars[] = 'uwp_subtab'; return $query_vars; } /** * Modifies profile page title to include username. * * @since 1.0.0 * @package userswp * * @param string $title Original title * @param int|null $id Page id. * * @return string Modified page title. */ public function modify_profile_page_title( $title, $id = null ) { global $wp_query; $page_id = uwp_get_page_id( 'profile_page', false ); if ( $page_id == $id && isset( $wp_query->query_vars['uwp_profile'] ) && in_the_loop() ) { $url_type = apply_filters( 'uwp_profile_url_type', 'slug' ); $author_slug = $wp_query->query_vars['uwp_profile']; if ( $url_type == 'id' ) { $user = get_user_by( 'id', $author_slug ); } else { $user = get_user_by( 'slug', $author_slug ); } $title = esc_attr( $user->display_name ); } return $title; } /** * Initializes image crop js. * * @since 1.0.0 * @package userswp * * @param object $user The User ID. */ public function image_crop_init( $user ) { if ( is_user_logged_in() ) { add_action( 'wp_footer', array( $this, 'modal_loading_html' ) ); add_action( 'wp_footer', array( $this, 'modal_close_js' ) ); if ( is_admin() ) { add_action( 'admin_footer', array( $this, 'modal_loading_html' ) ); add_action( 'admin_footer', array( $this, 'modal_close_js' ) ); } } } /** * Adds modal close js. * * @since 1.0.0 * @package userswp * @return void */ public function modal_close_js() { ?> <script type="text/javascript"> (function ($, window, undefined) { $(document).ready(function () { $('.uwp-modal-close').click(function (e) { e.preventDefault(); var uwp_popup_type = $(this).data('type'); // $('#uwp-'+uwp_popup_type+'-modal').hide(); var mod_shadow = jQuery('#uwp-modal-backdrop'); var container = jQuery('#uwp-popup-modal-wrap'); container.hide(); container.replaceWith('<?php echo $this->modal_loading_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>'); mod_shadow.remove(); }); }); }(jQuery, window)); </script> <?php } /* * Modifies get_avatar_url function to use UWP avatar URL. * * @param string $url Default avatar URL * @param int|string $id_or_email User ID or email * * @return string $url New avatar URL * */ function get_avatar_url( $url, $id_or_email ) { // don't filter on admin side. if ( is_admin() && ! wp_doing_ajax() ) { return $url; } $user = false; if ( 1 == uwp_get_option( 'disable_avatar_override' ) ) { return $url; } if ( is_numeric( $id_or_email ) ) { $id = (int) $id_or_email; $user = get_user_by( 'id', $id ); } elseif ( is_object( $id_or_email ) ) { if ( ! empty( $id_or_email->user_id ) ) { $id = (int) $id_or_email->user_id; $user = get_user_by( 'id', $id ); } } else { $user = get_user_by( 'email', $id_or_email ); } if ( $user && is_object( $user ) ) { $avatar_thumb = uwp_get_usermeta( $user->data->ID, 'avatar_thumb', '' ); if ( ! empty( $avatar_thumb ) ) { add_filter( 'upload_dir', 'uwp_handle_multisite_profile_image', 10, 1 ); $uploads = wp_upload_dir(); remove_filter( 'upload_dir', 'uwp_handle_multisite_profile_image' ); $upload_url = $uploads['baseurl']; if ( substr( $avatar_thumb, 0, 4 ) !== "http" ) { $url = $upload_url . $avatar_thumb; } else { $url = $avatar_thumb; } } else { $default = uwp_get_default_avatar_uri(); if ( uwp_is_localhost() ) { // if localhost then default gravatar won't work. $url = $default; } else { $url = remove_query_arg( 'd', $url ); $url = add_query_arg( array( 'd' => $default ), $url ); } } } return $url; } /** * Modified the comment author url to profile page link for loggedin users. * * @since 1.0.0 * @package userswp * * @param string $link Original author link. * * @return string Modified author link. */ public function get_comment_author_link( $link ) { global $comment; if ( ! empty( $comment->user_id ) && ! empty( get_userdata( $comment->user_id )->ID ) ) { $user = get_userdata( $comment->user_id ); $link = sprintf( '<a href="%s" rel="external nofollow" class="url">%s</a>', uwp_build_profile_tab_url( $comment->user_id ), strip_tags( $user->display_name ) ); } return $link; } /** * Redirects /author page to /profile page. * * @since 1.0.0 * @package userswp * @return void */ public function redirect_author_page() { if ( uwp_is_page_builder() ) { return; } if ( is_author() && 1 != uwp_get_option( 'uwp_disable_author_link' ) && apply_filters( 'uwp_check_redirect_author_page', true ) ) { $id = get_query_var( 'author' ); $link = uwp_build_profile_tab_url( $id ); $link = apply_filters( 'uwp_redirect_author_page', $link, $id ); wp_redirect( $link ); exit; } } /** * Modifies "edit my profile" link in admin bar * * @since 1.0.0 * @package userswp * * @param string $url The complete URL including scheme and path. * @param int $user_id The user ID. * @param string $scheme Scheme to give the URL context. Accepts 'http', 'https', 'login', * 'login_post', 'admin', 'relative' or null. * * @return false|string Filtered url. */ public function modify_admin_bar_edit_profile_url( $url, $user_id, $scheme ) { // Makes the link to http://example.com/account if ( ! is_admin() && ! user_can( $user_id, 'administrator' ) ) { $account_page = uwp_get_page_id( 'account_page', false ); if ( $account_page ) { $account_page_link = get_permalink( $account_page ); $url = $account_page_link; } } return $url; } /** * Restrict the files display only to current users in media popup. * * @since 1.0.0 * @package userswp * * @param object $wp_query Unmodified wp_query. * * @return object Modified wp_query. */ public function restrict_attachment_display( $wp_query ) { if ( ! is_admin() ) { if ( ! current_user_can( 'manage_options' ) ) { $wp_query->set( 'author', get_current_user_id() ); } } return $wp_query; } /** * Allow users to upload files who has upload capability. * * @since 1.0.0 * @package userswp * * @param array $llcaps An array of all the user's capabilities. * @param array $caps Actual capabilities for meta capability. * @param array $args Optional parameters passed to has_cap(), typically object ID. * @param object $user The user object. * * @return array User capabilities. */ public function allow_all_users_profile_uploads( $llcaps, $caps, $args, $user ) { $files = new UsersWP_Files(); if ( isset( $caps[0] ) && $caps[0] == 'upload_files' && $files->doing_upload() ) { $llcaps['upload_files'] = true; } return $llcaps; } /** * Validates file uploads and returns errors if found. * * @since 1.0.0 * @package userswp * * @param string|bool $value Original value. * @param object $field Field info. * @param string $file_key Field key. * @param array $file_to_upload File data to upload. * * @return string|WP_Error Returns original value if no errors. Else returns errors. */ public function handle_file_upload_error_checks( $value, $field, $file_key, $file_to_upload ) { if ( in_array( $field->htmlvar_name, array( 'avatar', 'banner' ) ) ) { if ( $field->htmlvar_name == 'avatar' ) { $avatar_size = uwp_get_upload_image_size(); $min_width = $avatar_size['width']; $min_height = $avatar_size['height']; } else { $banner_size = uwp_get_upload_image_size('banner'); $min_width = $banner_size['width']; $min_height = $banner_size['height']; } $imagedetails = getimagesize( $file_to_upload['tmp_name'] ); $width = $imagedetails[0]; $height = $imagedetails[1]; if ( $width < $min_width ) { return new WP_Error( 'image-too-small', sprintf( __( 'The uploaded file is too small. Minimum image width should be %s px', 'userswp' ), $min_width ) ); } if ( $height < $min_height ) { return new WP_Error( 'image-too-small', sprintf( __( 'The uploaded file is too small. Minimum image height should be %s px', 'userswp' ), $min_height ) ); } } return $value; } /** * Sets uwp_profile_upload to true on profile page. * * @since 1.0.0 * @package userswp * * @param array $params Plupload params * * @return array Plupload params */ public function add_uwp_plupload_param( $params ) { if ( ! is_admin() && get_the_ID() == uwp_get_page_id( 'profile_page', false ) ) { $params['uwp_profile_upload'] = true; } return $params; } /** * Handles avatar and banner file upload. * * @since 1.0.0 * @package userswp * @return void */ public function ajax_avatar_banner_upload() { // Image upload handler // todo: security checks $type = strip_tags( esc_sql( $_POST['uwp_popup_type'] ) ); $result = array(); if ( ! in_array( $type, array( 'banner', 'avatar' ) ) ) { $result['error'] = aui()->alert( array( 'type' => 'danger', 'content' => __( "Invalid request!", "userswp" ) ) ); $return = json_encode( $result ); echo $return; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped die(); } global $wpdb; $table_name = uwp_get_table_prefix() . 'uwp_form_fields'; $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 ) ) ); $field = false; if ( $fields ) { $field = $fields[0]; } $result = array(); if ( ! $field ) { $result['error'] = aui()->alert( array( 'type' => 'danger', 'content' => __( "No fields available", "userswp" ) ) ); $return = json_encode( $result ); echo $return; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped die(); } $files = new UsersWP_Files(); $errors = $files->handle_file_upload( $field, $_FILES ); if ( is_wp_error( $errors ) ) { $result['error'] = aui()->alert( array( 'type' => 'danger', 'content' => $errors->get_error_message() ) ); $return = json_encode( $result ); echo $return; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { $return = $this->ajax_image_crop_popup( $errors['url'], $type ); echo $return; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } die(); } /** * Returns the avatar and banner crop popup html and js. * * @since 1.0.0 * @package userswp * * @param string $image_url Image url to crop. * @param string $type Crop type. Avatar or Banner * * @return string|null Html and js content. */ public function ajax_image_crop_popup( $image_url, $type ) { wp_enqueue_style( 'jcrop' ); wp_enqueue_script( 'jcrop', array( 'jquery' ) ); $output = null; if ( $image_url && $type ) { $output = $this->image_crop_popup( $image_url, $type ); } return $output; } /** * Returns json content for image crop. * * @since 1.0.0 * @package userswp * * @param string $image_url Image url * @param string $type popup type. Avatar or Banner * * @return string Json */ public function image_crop_popup( $image_url, $type ) { add_filter( 'upload_dir', 'uwp_handle_multisite_profile_image', 10, 1 ); $uploads = wp_upload_dir(); remove_filter( 'upload_dir', 'uwp_handle_multisite_profile_image' ); $upload_url = $uploads['baseurl']; $upload_path = $uploads['basedir']; $image_path = str_replace( $upload_url, $upload_path, $image_url ); $image = apply_filters( 'uwp_' . $type . '_cropper_image', getimagesize( $image_path ) ); if ( empty( $image ) ) { return ""; } if ( $type == 'avatar' ) { $avatar_size = uwp_get_upload_image_size(); $full_width = $avatar_size['width']; $full_height = $avatar_size['height']; } else { $banner_size = uwp_get_upload_image_size('banner'); $full_width = $banner_size['width']; $full_height = $banner_size['height']; } $values = array( 'error' => '', 'image_url' => $image_url, 'uwp_popup_type' => $type, 'uwp_full_width' => $full_width, 'uwp_full_height' => $full_height, 'uwp_true_width' => $image[0], 'uwp_true_height' => $image[1], 'uwp_popup_content' => $this->image_crop_modal_html( $type, $image_url, $full_width, $full_height ), ); $json = json_encode( $values ); return $json; } /** * Returns avatar and banner crop modal html. * * @since 1.0.0 * @package userswp * * @param string $type Avatar or Banner * @param string $image_url Image url to crop * @param int $full_width Full image width * @param int $full_height Full image height * * @return string Html. */ public function image_crop_modal_html( $type, $image_url, $full_width, $full_height ) { $args = array( 'type' => $type, 'image_url' => $image_url, 'full_width' => $full_width, 'full_height' => $full_height, ); ob_start(); $design_style = uwp_get_option( "design_style", 'bootstrap' ); $template = $design_style ? $design_style . "/modal-profile-image-crop.php" : "modal-profile-image-crop.php"; uwp_get_template( $template, $args ); ?> <script type="text/javascript"> (function ($, window, undefined) { $(document).ready(function () { $('.uwp-modal-close').click(function (e) { e.preventDefault(); var uwp_popup_type = $(this).data('type'); var mod_shadow = jQuery('#uwp-modal-backdrop'); var container = jQuery('#uwp-popup-modal-wrap'); container.hide(); container.replaceWith('<?php echo $this->modal_loading_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>'); mod_shadow.remove(); }); }); }(jQuery, window)); </script> <?php $output = ob_get_contents(); ob_end_clean(); return trim( $output ); } /** * Returns modal content loading html. * * @since 1.0.0 * @package userswp */ public function modal_loading_html() { ob_start(); ?> <div id="uwp-popup-modal-wrap" style="display: none;"> <div class="uwp-bs-modal uwp_fade uwp_show"> <div class="uwp-bs-modal-dialog"> <div class="uwp-bs-modal-content"> <div class="uwp-bs-modal-header"> <h4 class="uwp-bs-modal-title"> <?php esc_attr_e( "Loading Form ...", "userswp" ); ?> </h4> </div> <div class="uwp-bs-modal-body"> <div class="uwp-bs-modal-loading-icon-wrap"> <div class="uwp-bs-modal-loading-icon"></div> </div> </div> </div> </div> </div> </div> <?php $output = ob_get_contents(); ob_end_clean(); echo trim( preg_replace( "/\s+|\n+|\r/", ' ', $output ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Handles crop popup form ajax request. * * @since 1.0.0 * @package userswp * @return void */ public function ajax_image_crop_popup_form() { $type = isset( $_POST['type'] ) ? strip_tags( esc_sql( $_POST['type'] ) ) : ''; $output = null; if ( $type && in_array( $type, array( 'banner', 'avatar' ) ) ) { $output = $this->crop_submit_form( $type ); } echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped exit(); } /** * Returns avatar and banner crop submit form. * * @since 1.0.0 * @package userswp * * @param string $type Avatar or Banner * * @return string Html. */ public function crop_submit_form( $type = 'avatar' ) { ob_start(); // get file sizes $files = new UsersWP_Files(); $max_file_size = $files->uwp_get_max_upload_size( $type ); $design_style = uwp_get_option( "design_style", 'bootstrap' ); $template = $design_style ? $design_style . "/modal-profile-image.php" : "modal-profile-image.php"; uwp_get_template( $template ); $content_wrap = $design_style == 'bootstrap' ? '.uwp-profile-image-change-modal .modal-content' : '#uwp-popup-modal-wrap'; $bg_color = apply_filters('uwp_crop_image_bg_color', '', $type); ?> <script type="text/javascript"> (function ($, window, undefined) { var uwp_popup_type = '<?php echo esc_attr( $type ); ?>'; $(document).ready(function () { $("#progressbar").progressbar(); $('.uwp-modal-close').click(function (e) { e.preventDefault(); var uwp_popup_type = $(this).data('type'); var mod_shadow = jQuery('#uwp-modal-backdrop'); var container = jQuery('#uwp-popup-modal-wrap'); container.hide(); container.replaceWith('<?php $this->modal_loading_html(); ?>'); mod_shadow.remove(); }); $('#uwp_upload_<?php echo esc_attr( $type ); ?>').on('change', function (e) { e.preventDefault(); var container = jQuery('<?php echo esc_attr( $content_wrap );?>'); var err_container = jQuery('#uwp-bs-modal-notice'); err_container.html('');// clear errors on retry var fd = new FormData(); var files_data = $(this); // The <input type="file" /> field var file = files_data[0].files[0]; var file_size = file.size; // file size check if (file_size && <?php echo absint( $max_file_size );?> && file_size > <?php echo absint( $max_file_size );?>) { err_container.html('<div class="text-center alert alert-danger"><?php esc_attr_e( 'File too big.', 'userswp' );?></div>'); return; } fd.append('<?php echo esc_attr( $type ); ?>', file); // our AJAX identifier fd.append('action', 'uwp_avatar_banner_upload'); fd.append('uwp_popup_type', '<?php echo esc_attr( $type ); ?>'); $("#progressBar").show().removeClass('d-none'); $.ajax({ // Your server script to process the upload url: '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>', type: 'POST', data: fd, cache: false, contentType: false, processData: false, xhr: function () { myXhr = $.ajaxSettings.xhr(); if (myXhr.upload) { myXhr.upload.addEventListener('progress', showProgress, false); } else { console.log("Upload progress is not supported."); } return myXhr; }, success: function (response) { $("#progressBar").hide(); resp = JSON.parse(response); if (resp['error'] != "") { err_container.html(resp['error']); } else { resp = JSON.parse(response); uwp_full_width = resp['uwp_full_width']; uwp_full_height = resp['uwp_full_height']; uwp_true_width = resp['uwp_true_width']; uwp_true_height = resp['uwp_true_height']; container.html(resp['uwp_popup_content']).find('#uwp-' + uwp_popup_type + '-to-crop').Jcrop({ // onChange: showPreview, onSelect: updateCoords, allowResize: true, allowSelect: false, bgColor: '<?php echo esc_html( $bg_color ); ?>', boxWidth: 650, //Maximum width you want for your bigger images boxHeight: 400, //Maximum Height for your bigger images setSelect: [0, 0, uwp_full_width, uwp_full_height], aspectRatio: uwp_full_width / uwp_full_height, trueSize: [uwp_true_width, uwp_true_height], minSize: [uwp_full_width, uwp_full_height] }); } } }); }); function showProgress(evt) { if (evt.lengthComputable) { var percentComplete = (evt.loaded / evt.total) * 100; progress(percentComplete, $('#progressBar')); } } function progress(percent, $element) { percent = Math.round(percent); var progressBarWidth = percent * ( $element.width() / 100 ); $element.find('div').width(progressBarWidth).html(percent + "%"); } function updateCoords(c) { jQuery('#' + uwp_popup_type + '-x').val(c.x); jQuery('#' + uwp_popup_type + '-y').val(c.y); jQuery('#' + uwp_popup_type + '-w').val(c.w); jQuery('#' + uwp_popup_type + '-h').val(c.h); } }); }(jQuery, window)); </script> <?php $output = ob_get_contents(); ob_end_clean(); return trim( $output ); } public function ajax_profile_image_remove() { check_ajax_referer( 'uwp_basic_nonce', 'security' ); $type = ! empty( $_POST['type'] ) ? $_POST['type'] : ''; if ( ! in_array( $type, array( 'banner', 'avatar' ) ) ) { wp_die( -1 ); } $user_id = is_user_logged_in() ? (int) get_current_user_id() : 0; if ( empty( $user_id ) ) { wp_send_json_error( __( 'Invalid access!', 'userswp' ) ); } uwp_update_usermeta( $user_id, $type . '_thumb', '' ); wp_send_json_success(); wp_die(); } /** * Defines javascript ajaxurl variable. * * @since 1.0.0 * @package userswp * @return void */ public function define_ajaxurl() { echo '<script type="text/javascript"> var ajaxurl = "' . esc_url( admin_url( 'admin-ajax.php' ) ) . '"; </script>'; } public function wpdiscuz_profile_url( $profile_url, $user ) { if(!$user){ return $profile_url; } $allowed = apply_filters( 'uwp_wpdiscuz_profile_url_change', true, $profile_url, $user ); if ( $allowed && isset($user->user_login) ) { return $this->get_profile_link( $profile_url, $user->ID ); } return $profile_url; } /** * Display lightbox modal */ public function lightbox_modals() { ?> <div class="modal fade uwp-profile-image-change-modal" tabindex="-1" role="dialog" aria-labelledby="uwp-profile-modal-title" aria-hidden="true"> <div class="modal-dialog modal-xl"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="uwp-profile-modal-title"></h5> </div> <div class="modal-body"> <i class="fas fa-circle-notch fa-spin"></i> </div> </div> </div> </div> <?php } }
Save
Back