fep_messagemeta = FEP_META_TABLE; $wpdb->fep_messages = FEP_MESSAGE_TABLE; } function fep_create_database(){ global $wpdb; if ( is_multisite() ) { $installed_ver = get_site_option( 'fep_db_version' ); } else { $installed_ver = get_option( 'fep_db_version' ); } if ( version_compare( $installed_ver, '1011', '<' ) && $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', FEP_MESSAGE_TABLE ) ) && $wpdb->get_var( $wpdb->prepare( 'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = %s', DB_NAME, FEP_MESSAGE_TABLE, 'id' ) ) ) { if ( ! $wpdb->get_var( 'SELECT COUNT(*) FROM ' . FEP_MESSAGE_TABLE . ' WHERE id IS NOT NULL LIMIT 1' ) ) { $wpdb->query( 'DROP TABLE IF EXISTS ' . FEP_MESSAGE_TABLE ); $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . 'fep_meta' ); } else { $wpdb->query( sprintf( 'ALTER TABLE %1$s RENAME %1$s_old', FEP_MESSAGE_TABLE ) ); } } if ( version_compare( $installed_ver, FEP_DB_VERSION, '!=' ) ) { $charset_collate = $wpdb->get_charset_collate(); $sql_message = "CREATE TABLE $wpdb->fep_messages ( mgs_id bigint(20) unsigned NOT NULL auto_increment, mgs_parent bigint(20) unsigned NOT NULL default '0', mgs_author bigint(20) unsigned NOT NULL default '0', mgs_created datetime NOT NULL default '0000-00-00 00:00:00', mgs_title text NOT NULL, mgs_content mediumtext NOT NULL, mgs_type varchar(20) NOT NULL DEFAULT 'message', mgs_status varchar(20) NOT NULL DEFAULT 'pending', mgs_last_reply_by bigint(20) unsigned NOT NULL default '0', mgs_last_reply_time datetime NOT NULL default '0000-00-00 00:00:00', mgs_last_reply_excerpt varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (mgs_id), KEY mgs_parent_last_time (mgs_parent,mgs_last_reply_time), KEY mgs_type_created (mgs_type,mgs_created) ) $charset_collate;"; $sql_perticipiants = "CREATE TABLE " . FEP_PARTICIPANT_TABLE . " ( per_id bigint(20) unsigned NOT NULL auto_increment, mgs_id bigint(20) unsigned NOT NULL default '0', mgs_participant bigint(20) unsigned NOT NULL default '0', mgs_read bigint(20) unsigned NOT NULL default '0', mgs_parent_read bigint(20) unsigned NOT NULL default '0', mgs_deleted bigint(20) unsigned NOT NULL default '0', mgs_archived bigint(20) unsigned NOT NULL default '0', PRIMARY KEY (per_id), UNIQUE KEY mgs_id_participant (mgs_id,mgs_participant) ) $charset_collate;"; $sql_meta = "CREATE TABLE $wpdb->fep_messagemeta ( meta_id bigint(20) unsigned NOT NULL auto_increment, fep_message_id bigint(20) unsigned NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY fep_message_id (fep_message_id), KEY meta_key (meta_key(191)) ) $charset_collate;"; $sql_attachments = "CREATE TABLE " . FEP_ATTACHMENT_TABLE . " ( att_id bigint(20) unsigned NOT NULL auto_increment, mgs_id bigint(20) unsigned NOT NULL default '0', att_mime varchar(100) NOT NULL default '', att_file varchar(255) NOT NULL default '', att_status varchar(20) NOT NULL default '', PRIMARY KEY (att_id), KEY mgs_id (mgs_id) ) $charset_collate;"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql_message ); dbDelta( $sql_perticipiants ); dbDelta( $sql_meta ); dbDelta( $sql_attachments ); if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', FEP_MESSAGE_TABLE ) ) ){ if ( is_multisite() ) { update_site_option( 'fep_db_version', FEP_DB_VERSION ); } else { update_option( 'fep_db_version', FEP_DB_VERSION, true ); } } } } function fep_include_require_files() { require_once( FEP_PLUGIN_DIR . 'includes/class-fep-cache.php' ); require_once( FEP_PLUGIN_DIR . 'includes/class-fep-message.php' ); require_once( FEP_PLUGIN_DIR . 'includes/fep-message-meta.php' ); require_once( FEP_PLUGIN_DIR . 'includes/class-fep-participants.php' ); require_once( FEP_PLUGIN_DIR . 'includes/class-fep-attachments.php' ); require_once( FEP_PLUGIN_DIR . 'includes/class-fep-message-query.php' ); $fep_files = array( 'announcement' => FEP_PLUGIN_DIR . 'includes/class-fep-announcements.php', 'attachment' => FEP_PLUGIN_DIR . 'includes/class-fep-attachment.php', 'directory' => FEP_PLUGIN_DIR . 'includes/class-fep-directory.php', 'email' => FEP_PLUGIN_DIR . 'includes/class-fep-emails.php', 'form' => FEP_PLUGIN_DIR . 'includes/class-fep-form.php', 'menu' => FEP_PLUGIN_DIR . 'includes/class-fep-menu.php', 'messages' => FEP_PLUGIN_DIR . 'includes/class-fep-messages.php', 'shortcodes' => FEP_PLUGIN_DIR . 'includes/class-fep-shortcodes.php', 'user-settings' => FEP_PLUGIN_DIR . 'includes/class-fep-user-settings.php', 'main' => FEP_PLUGIN_DIR . 'includes/fep-class.php', 'widgets' => FEP_PLUGIN_DIR . 'includes/fep-widgets.php', 'rest' => FEP_PLUGIN_DIR . 'includes/class-fep-rest-api.php', ); if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { $fep_files['ajax'] = FEP_PLUGIN_DIR . 'includes/class-fep-ajax.php'; } if ( is_admin() ) { $fep_files['table'] = FEP_PLUGIN_DIR . 'admin/class-fep-wp-list-table.php'; $fep_files['attachment-table'] = FEP_PLUGIN_DIR . 'admin/class-fep-attachments-list-table.php'; $fep_files['admin-pages'] = FEP_PLUGIN_DIR . 'admin/class-fep-admin-pages.php'; $fep_files['settings'] = FEP_PLUGIN_DIR . 'admin/class-fep-admin-settings.php'; $fep_files['update'] = FEP_PLUGIN_DIR . 'admin/class-fep-update.php'; $fep_files['pro-info'] = FEP_PLUGIN_DIR . 'admin/class-fep-pro-info.php'; } $fep_files = apply_filters( 'fep_include_files', $fep_files ); foreach ( $fep_files as $fep_file ) { require_once( $fep_file ); } } function fep_get_option( $option, $default = '', $section = 'FEP_admin_options' ) { $options = get_option( $section ); if ( ! is_array( $options ) ) { $options = array(); } $is_default = false; if ( isset( $options[ $option ] ) ) { $value = $options[ $option ]; } else { $value = $default; $is_default = true; } return apply_filters( 'fep_get_option', $value, $option, $default, $is_default ); } function fep_update_option( $option, $value = '', $section = 'FEP_admin_options' ) { if ( empty( $option ) ) { return false; } if ( ! is_array( $option ) ) { $option = array( $option => $value ); } $options = get_option( $section ); if ( ! is_array( $options ) ) { $options = array(); } return update_option( $section, wp_parse_args( $option, $options ) ); } function fep_get_user_option( $option, $default = '', $userid = '', $section = 'FEP_user_options' ) { if( ! $userid ){ $userid = get_current_user_id(); } $options = get_user_meta( $userid, $section, true ); $is_default = false; if ( isset( $options[ $option ] ) ) { $value = $options[ $option ]; } else { $value = $default; $is_default = true; } return apply_filters( 'fep_get_user_option', $value, $option, $default, $userid, $is_default ); } function fep_update_user_option( $option, $value = '', $userid = '', $section = 'FEP_user_options' ) { if ( empty( $option ) ) { return false; } if ( ! is_array( $option ) ) { $option = array( $option => $value ); } if ( ! $userid ) { $userid = get_current_user_id(); } $options = get_user_meta( $userid, $section, true ); if ( ! is_array( $options ) ) { $options = array(); } return update_user_meta( $userid, $section, wp_parse_args( $option, $options ) ); } function fep_translation() { // SETUP TEXT DOMAIN FOR TRANSLATIONS load_plugin_textdomain( 'front-end-pm', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); } function fep_enqueue_scripts() { wp_register_style( 'fep-common-style', FEP_PLUGIN_URL . 'assets/css/common-style.css', array(), FEP_PLUGIN_VERSION ); wp_register_style( 'fep-style', FEP_PLUGIN_URL . 'assets/css/style.css', array(), FEP_PLUGIN_VERSION ); if ( 'always' == fep_get_option( 'load_css','only_in_message_page' ) ) { wp_enqueue_style( 'fep-style' ); } elseif ( 'only_in_message_page' == fep_get_option( 'load_css','only_in_message_page' ) && fep_page_id() && ( is_page( fep_page_id() ) || is_single( fep_page_id() ) ) ) { wp_enqueue_style( 'fep-style' ); } wp_enqueue_style( 'fep-common-style' ); $important = ''; if ( apply_filters( 'fep_add_important_to_inline_css', false ) ) { $important = ' !important'; } $custom_css = '#fep-wrapper{'; $custom_css .= 'background-color:' . fep_get_option( 'bg_color' ) . $important . ';'; $custom_css .= 'color:' . fep_get_option( 'text_color', '#000000' ) . $important . ';'; $custom_css .= '}'; $custom_css .= ' #fep-wrapper a:not(.fep-button,.fep-button-active) {color:' . fep_get_option( 'link_color', '#000080' ) . $important . ';}'; $custom_css .= ' .fep-button{'; $custom_css .= 'background-color:' . fep_get_option( 'btn_bg_color', '#F0FCFF' ) . $important . ';'; $custom_css .= 'color:' . fep_get_option( 'btn_text_color', '#000000' ) . $important . ';'; $custom_css .= '}'; $custom_css .= ' .fep-button:hover,.fep-button-active{'; $custom_css .= 'background-color:' . fep_get_option( 'active_btn_bg_color', '#D3EEF5' ) . $important . ';'; $custom_css .= 'color:' . fep_get_option( 'active_btn_text_color', '#000000' ) . $important . ';'; $custom_css .= '}'; $custom_css .= ' .fep-odd-even > div:nth-child(odd) {background-color:' . fep_get_option( 'odd_color', '#F2F7FC' ) . $important . ';}'; $custom_css .= ' .fep-odd-even > div:nth-child(even) {background-color:' . fep_get_option( 'even_color', '#FAFAFA' ) . $important . ';}'; $custom_css .= ' .fep-message .fep-message-title-heading, .fep-per-message .fep-message-title{background-color:' . fep_get_option( 'mgs_heading_color', '#F2F7FC' ) . $important . ';}'; $custom_css .= ' #fep-content-single-heads .fep-message-head:hover,#fep-content-single-heads .fep-message-head-active{'; $custom_css .= 'background-color:' . fep_get_option( 'active_btn_bg_color', '#D3EEF5' ) . $important . ';'; $custom_css .= 'color:' . fep_get_option( 'active_btn_text_color', '#000000' ) . $important . ';'; $custom_css .= '}'; $custom_css .= trim( stripslashes( fep_get_option( 'custom_css' ) ) ); if ( $custom_css ) { wp_add_inline_style( 'fep-common-style', $custom_css ); } wp_register_script( 'fep-script', FEP_PLUGIN_URL . 'assets/js/script.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); wp_localize_script( 'fep-script', 'fep_script', array( 'root' => esc_url_raw( rest_url( 'front-end-pm/v1' ) ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'no_match' => __( 'No matches found', 'front-end-pm' ), ) ); wp_register_script( 'fep-notification-script', FEP_PLUGIN_URL . 'assets/js/notification.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); $call_on_ready = ( isset( $_GET['fepaction'] ) && ( ( 'viewmessage' == $_GET['fepaction'] && fep_get_new_message_number() ) || ( 'view_announcement' == $_GET['fepaction'] && fep_get_new_announcement_number() ) ) ) ? true : false; wp_localize_script( 'fep-notification-script', 'fep_notification_script', apply_filters( 'fep_filter_notification_script_localize', array( 'root' => esc_url_raw( rest_url( 'front-end-pm/v1' ) ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'interval' => apply_filters( 'fep_filter_ajax_notification_interval', 2 * MINUTE_IN_SECONDS * 1000 ), 'skip' => apply_filters( 'fep_filter_skip_notification_call', 2 ), // How many times notification ajax call will be skipped if browser tab not opened 'show_in_title' => fep_get_option( 'show_unread_count_in_title', '1' ), 'show_in_desktop' => fep_get_option( 'show_unread_count_in_desktop', '1' ), 'call_on_ready' => apply_filters( 'fep_filter_notification_call_on_ready', $call_on_ready ), 'play_sound' => fep_get_option( 'play_sound', '1' ), 'sound_url' => FEP_PLUGIN_URL . 'assets/audio/plucky.mp3', 'icon_url' => FEP_PLUGIN_URL . 'assets/images/desktop-notification-32.png', 'mgs_notification_title'=> __( 'New Message. ', 'front-end-pm' ), 'mgs_notification_body' => __( 'You have received a new message. ', 'front-end-pm' ), 'mgs_notification_url' => fep_query_url( 'messagebox' ), 'ann_notification_title'=> __( 'New Announcement. ', 'front-end-pm' ), 'ann_notification_body' => __( 'You have received a new announcement. ', 'front-end-pm' ), 'ann_notification_url' => fep_query_url( 'announcements' ), ) ) ); wp_register_script( 'fep-replies-show-hide', FEP_PLUGIN_URL . 'assets/js/replies-show-hide.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); wp_register_script( 'fep-attachment-script', FEP_PLUGIN_URL . 'assets/js/attachment.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); wp_localize_script( 'fep-attachment-script', 'fep_attachment_script', array( 'remove' => esc_js( __( 'Remove', 'front-end-pm' ) ), 'maximum' => esc_js( fep_get_option( 'attachment_no', 4 ) ), 'max_text' => esc_js( sprintf( __( 'Maximum %s allowed', 'front-end-pm' ), sprintf( _n( '%s file', '%s files', fep_get_option( 'attachment_no', 4 ), 'front-end-pm' ), number_format_i18n( fep_get_option( 'attachment_no', 4 ) ) ) ) ) ) ); wp_register_script( 'fep-form-submit', FEP_PLUGIN_URL . 'assets/js/form-submit.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); wp_localize_script( 'fep-form-submit', 'fep_form_submit', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'token' => wp_create_nonce( 'fep-form' ), 'refresh_text' => __( 'Refresh this page and try again. ', 'front-end-pm' ), 'processing_text' => __( 'Processing... ', 'front-end-pm' ), ) ); wp_register_script( 'fep-block-unblock-script', FEP_PLUGIN_URL . 'assets/js/block-unblock.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); wp_localize_script( 'fep-block-unblock-script', 'fep_block_unblock_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'token' => wp_create_nonce( 'fep-block-unblock-script' ), 'confirm' => __( 'Do you really want to block %s? If you click "OK" then this user will not be able to send you any more messages.' ), ) ); wp_register_script( 'fep-view-message', FEP_PLUGIN_URL . 'assets/js/view-message.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); wp_localize_script( 'fep-view-message', 'fep_view_message', array( 'root' => esc_url_raw( rest_url( 'front-end-pm/v1' ) ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'feppage' => ! empty( $_GET['feppage'] ) ? absint( $_GET['feppage'] ) : 1, 'toggle' => apply_filters( 'fep_filter_message_toggle_feature', true ), ) ); wp_register_script( 'fep-cb-check-uncheck-all', FEP_PLUGIN_URL . 'assets/js/check-uncheck-all.js', array( 'jquery' ), FEP_PLUGIN_VERSION, true ); } function fep_common_scripts() { wp_register_style( 'fep-tokeninput-style', FEP_PLUGIN_URL . 'assets/css/token-input-facebook.css' ); wp_register_script( 'fep-tokeninput-script', FEP_PLUGIN_URL . 'assets/js/jquery.tokeninput.js', array( 'jquery' ), '6.1', true ); wp_register_script( 'fep-tokeninput', FEP_PLUGIN_URL . 'assets/js/fep-tokeninput.js', array( 'fep-tokeninput-script' ), FEP_PLUGIN_VERSION, true ); } function fep_tokeninput_localize( $args ) { static $count = 1; $args = wp_parse_args( $args, array( 'ajaxurl' => esc_url_raw( rest_url( 'front-end-pm/v1/users/' . $args['for'] . '/' ) ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'method' => 'GET', 'theme' => 'facebook', 'hintText' => __( 'Type user name', 'front-end-pm'), 'noResultsText' => __( 'No matches found', 'front-end-pm' ), 'searchingText' => __( 'Searching...', 'front-end-pm' ), 'width' => '250px', 'tokenLimit' => null, // Following have to be overwritten. 'selector' => '', // Field id 'for' => '', 'prePopulate' => [], ) ); $args = apply_filters( 'fep_filter_tokeninput_localize', $args ); wp_localize_script( 'fep-tokeninput', "fep_tokeninput_{$count}", $args ); $count++; } function fep_page_id() { return (int) apply_filters( 'fep_page_id_filter', fep_get_option( 'page_id', 0 ) ); } function fep_action_url( $action = '', $arg = array() ) { return fep_query_url( $action, $arg ); } function fep_query_url( $action, $arg = array() ) { $args = array( 'fepaction' => $action ); $args = array_merge( $args, $arg ); $url = esc_url( fep_query_url_without_esc( $action, $arg ) ); return apply_filters( 'fep_query_url_filter', $url, $args ); } function fep_query_url_raw( $action, $arg = array() ) { return esc_url_raw( fep_query_url_without_esc( $action, $arg ) ); } function fep_query_url_without_esc( $action, $arg = array() ) { $args = array( 'fepaction' => $action ); $args = array_merge( $args, $arg ); if ( fep_page_id() ) { $url = add_query_arg( $args, get_permalink( fep_page_id() ) ); } else { $url = add_query_arg( $args ); } return apply_filters( 'fep_query_url_without_esc_filter', $url, $args ); } if ( ! function_exists( 'fep_create_nonce' ) ) : /** * Creates a token usable in a form * return nonce with time * @return string */ function fep_create_nonce( $action = -1 ) { $time = time(); $nonce = wp_create_nonce( $time . $action ); return $nonce . '-' . $time; } endif; if ( ! function_exists( 'fep_verify_nonce' ) ) : /** * Check if a token is valid. Mark it as used * @param string $_nonce The token * @return bool */ function fep_verify_nonce( $_nonce, $action = -1) { $parts = explode( '-', $_nonce ); // Extract timestamp and nonce part of $_nonce // bad formatted onetime-nonce if ( empty( $parts[0] ) || empty( $parts[1] ) ) { return false; } $nonce = $parts[0]; // Original nonce generated by WordPress. $generated = $parts[1]; // Time when generated $expire = (int) $generated + HOUR_IN_SECONDS; //We want these nonces to have a short lifespan $time = time(); //Verify the nonce part and check that it has not expired if ( ! wp_verify_nonce( $nonce, $generated.$action ) || $time > $expire ) { return false; } //Get used nonces $used_nonces = get_option( '_fep_used_nonces' ); if ( ! is_array( $used_nonces ) ) { $used_nonces = array(); } //Nonce already used. if ( isset( $used_nonces[ $nonce] ) ) { return false; } foreach ( $used_nonces as $nonces => $timestamp ) { if ( $timestamp < $time ) { //This nonce has expired, so we don't need to keep it any longer unset( $used_nonces[ $nonces ] ); } } $used_nonces[ $nonce ] = $expire; // Add nonce to used nonces update_option( '_fep_used_nonces', $used_nonces, 'no' ); return true; } endif; function fep_error( $wp_error) { if ( ! is_wp_error( $wp_error) ) { return ''; } if ( 0 == count( $wp_error->get_error_messages() ) ) { return ''; } $errors = $wp_error->get_error_messages(); if ( is_admin() ) { $html = '
'; } else { $html = '
'; } foreach ( $errors as $error) { $html .= '' . __( 'Error', 'front-end-pm' ) . ': ' . esc_html( $error ) . '
'; } $html .= '
'; return $html; } function fep_get_new_message_number() { return fep_get_user_message_count( 'unread' ); } function fep_get_new_message_button( $args = array() ) { if ( ! fep_current_user_can( 'access_message' ) ) { return ''; } $args = wp_parse_args( $args, array( 'show_bracket' => '1', 'hide_if_zero' => '1', 'ajax' => '1', 'class' => 'fep-font-red', ) ); $args['class'] = fep_sanitize_html_class( $args['class'] ); $new = number_format_i18n( fep_get_new_message_number() ); if ( empty( $args['ajax'] ) ) { if ( ! $new && $args['hide_if_zero'] ) { return ''; } $ret = ''; if ( $args['show_bracket'] ) { $ret .= '( '; } $ret .= '' . $new . ''; if ( $args['show_bracket'] ) { $ret .= ' )'; } return $ret; } wp_enqueue_script( 'fep-notification-script' ); $args['class'] = $args['class'] . ' fep_unread_message_count'; if ( $args['hide_if_zero'] ) { $args['class'] = $args['class'] . ' fep_unread_message_count_hide_if_zero'; } $ret = ''; if ( $args['show_bracket'] && $args['hide_if_zero'] && ! $new ) { $ret .= '('; } elseif ( $args['show_bracket'] && $args['hide_if_zero'] ) { $ret .= '('; } elseif ( $args['show_bracket'] ) { $ret .= '( '; } if ( ! $new && $args['hide_if_zero'] ) { $args['class'] = $args['class'] . ' fep-hide'; } $ret .= '' . $new . ''; if ( $args['show_bracket'] && $args['hide_if_zero'] && ! $new ) { $ret .= ')'; } elseif ( $args['show_bracket'] && $args['hide_if_zero'] ) { $ret .= ')'; } elseif ( $args['show_bracket'] ) { $ret .= ' )'; } return $ret; } function fep_get_new_announcement_number() { return fep_get_user_announcement_count( 'unread' ); } function fep_get_new_announcement_button( $args = array() ) { if ( ! fep_current_user_can( 'access_message' ) ) { return ''; } $args = wp_parse_args( $args, array( 'show_bracket' => '1', 'hide_if_zero' => '1', 'ajax' => '1', 'class' => 'fep-font-red', ) ); $args['class'] = fep_sanitize_html_class( $args['class'] ); $new = number_format_i18n( fep_get_new_announcement_number() ); if ( empty( $args['ajax'] ) ) { if ( ! $new && $args['hide_if_zero'] ) { return ''; } $ret = ''; if ( $args['show_bracket'] ) { $ret .= '( '; } $ret .= '' . $new . ''; if ( $args['show_bracket'] ) { $ret .= ' )'; } return $ret; } wp_enqueue_script( 'fep-notification-script' ); $args['class'] = $args['class'] . ' fep_unread_announcement_count'; if ( $args['hide_if_zero'] ) { $args['class'] = $args['class'] . ' fep_unread_announcement_count_hide_if_zero'; } $ret = ''; if ( $args['show_bracket'] && $args['hide_if_zero'] && ! $new ) { $ret .= '('; } elseif ( $args['show_bracket'] && $args['hide_if_zero'] ) { $ret .= '('; } elseif ( $args['show_bracket'] ) { $ret .= '( '; } if ( ! $new && $args['hide_if_zero'] ) { $args['class'] = $args['class'] . ' fep-hide'; } $ret .= '' . $new . ''; if ( $args['show_bracket'] && $args['hide_if_zero'] && ! $new ) { $ret .= ')'; } elseif ( $args['show_bracket'] && $args['hide_if_zero'] ) { $ret .= ')'; } elseif ( $args['show_bracket'] ) { $ret .= ' )'; } return $ret; } function fep_is_user_blocked( $login = '' ) { global $user_login; if ( ! $login && $user_login ) { $login = $user_login; } if ( $login ) { $wpusers = explode( ',', fep_get_option( 'have_permission' ) ); $wpusers = array_map( 'trim', $wpusers ); if ( in_array( $login, $wpusers) ) { return true; } } //User not logged in return false; } function fep_is_user_whitelisted( $login = '' ) { global $user_login; if ( ! $login && $user_login ) { $login = $user_login; } if ( $login ) { $wpusers = explode( ',', fep_get_option( 'whitelist_username' ) ); $wpusers = array_map( 'trim', $wpusers ); if ( in_array( $login, $wpusers) ) { return true; } } //User not logged in return false; } function fep_get_userdata( $data, $need = 'ID', $type = 'slug' ) { if ( ! $data ) { return ''; } $type = strtolower( $type ); if ( 'user_nicename' == $type ) { $type = 'slug'; } if ( ! in_array( $type, array ( 'id', 'slug', 'email', 'login' ) ) ) { return ''; } $user = get_user_by( $type , $data ); if ( $user ) { return $user->$need; } else { return ''; } } function fep_user_name( $id ) { $which = apply_filters( 'fep_filter_show_which_name', 'display_name' ); switch ( $which ) { case 'first_last_name': $name = fep_get_userdata( $id, 'first_name', 'id' ) . ' ' . fep_get_userdata( $id, 'last_name', 'id' ); break; case 'last_first_name': $name = fep_get_userdata( $id, 'last_name', 'id' ) . ' ' . fep_get_userdata( $id, 'first_name', 'id' ); break; case 'first_name': case 'last_name': case 'user_login': case 'user_nicename': $name = fep_get_userdata( $id, $which, 'id' ); break; case 'display_name': default: $name = fep_get_userdata( $id, 'display_name', 'id' ); break; } return apply_filters( 'fep_filter_user_name', trim( $name ), $id ); } function fep_get_user_message_count( $value = 'all', $force = false, $user_id = false ) { return Fep_Messages::init()->user_message_count( $value, $force, $user_id ); } function fep_get_user_announcement_count( $value = 'all', $force = false, $user_id = false ) { return FEP_Announcements::init()->get_user_announcement_count( $value, $force, $user_id ); } function fep_get_message( $id ) { return FEP_Message::get_instance( $id ); } function fep_get_replies( $id ) { $args = array( 'mgs_type' => 'message', 'mgs_status' => 'publish', 'mgs_parent' => $id, 'per_page' => 0, 'order' => 'ASC', ); $args = apply_filters( 'fep_filter_get_replies', $args ); return new FEP_Message_Query( $args ); } function fep_get_attachments( $mgs_id = 0, $fields = '' ) { if ( '' !== $fields ) { _deprecated_argument( __FUNCTION__, '10.1.1' ); } if ( ! $mgs_id ) { $mgs_id = fep_get_the_id(); } if ( ! $mgs_id ) { return array(); } return FEP_Attachments::init()->get( $mgs_id ); } function fep_get_messages( $args = [] ){ $args = wp_parse_args( $args, array( 'count_total' => false, )); $query = new FEP_Message_Query( $args ); return $query->get_results(); } function fep_get_parent_id( $id ) { if ( ! $id ) { return 0; } $parent = $id; do { $message = FEP_Message::get_instance( $parent ); if( $message ){ $parent = $message->mgs_parent; $id = $message->mgs_id; } else { $parent = 0; } } while( $parent ); // climb up the hierarchy until we reach parent = 0 return $id; } function fep_update_reply_info( $mgs_id ) { $updated = false; if ( ! $mgs_id || ! is_numeric( $mgs_id ) ) { return $updated; } $args = array( 'mgs_type' => 'message', 'mgs_status' => 'publish', 'per_page' => 1, 'mgs_id' => $mgs_id, 'include_child' => true, 'orderby' => 'mgs_created', 'order' => 'DESC', ); $messages = fep_get_messages( $args ); if ( $messages && ! empty( $messages[0] ) && $message = FEP_Message::get_instance( $mgs_id ) ) { $updated = $message->update( array( 'mgs_last_reply_by' => $messages[0]->mgs_author, 'mgs_last_reply_excerpt' => fep_get_the_excerpt_from_content( 100, $messages[0]->mgs_content ), 'mgs_last_reply_time' => $messages[0]->mgs_created, ) ); } return $updated; } function fep_format_date( $date ) { if ( '0000-00-00 00:00:00' === $date ) { $h_time = __( 'Unpublished', 'front-end-pm' ); } else { $time = strtotime( $date ); //$time = get_post_time( 'G', true, $post, false ); if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) { if ( $t_diff < 0 ) { $h_time = sprintf( __( '%s from now', 'front-end-pm' ), human_time_diff( $time ) ); } else { $h_time = sprintf( __( '%s ago', 'front-end-pm' ), human_time_diff( $time ) ); } } else { $h_time = mysql2date( get_option( 'date_format' ). ' ' .get_option( 'time_format' ), get_date_from_gmt( $date ) ); } } return apply_filters( 'fep_formate_date', $h_time, $date ); } function fep_sort_by_priority( $a, $b ) { if ( ! isset( $a['priority'] ) || ! isset( $b['priority'] ) || $a['priority'] === $b['priority'] ) { return 0; } return ( $a['priority'] < $b['priority'] ) ? -1 : 1; } function fep_pagination( $total = null, $per_page = null, $list_class = 'fep-pagination' ) { $total = apply_filters( 'fep_pagination_total', $total); if ( null === $per_page ) { $per_page = fep_get_option( 'messages_page', 15 ); } $per_page = apply_filters( 'fep_pagination_per_page', $per_page ); $last = ceil( absint( $total) / absint( $per_page ) ); if ( $last <= 1 ) { return ''; } // $numPgs = $total_message / fep_get_option( 'messages_page', 50 ); $page = ( ! empty( $_GET['feppage'] ) ) ? absint( $_GET['feppage'] ) : 1; $links = ( isset( $_GET['links'] ) ) ? absint( $_GET['links'] ) : 2; $start = ( ( $page - $links ) > 0 ) ? $page - $links : 1; $end = ( ( $page + $links ) < $last ) ? $page + $links : $last; $html = '
'; return $html; } function fep_pagination_prev_next( $has_more_row ) { $feppage = ! empty( $_GET['feppage'] ) ? absint( $_GET['feppage'] ) : 1; if ( $feppage > 1 || $has_more_row ) : ?>
roles; switch ( $cap ) { case has_filter( "fep_current_user_can_{$cap}" ): $can = apply_filters( "fep_current_user_can_{$cap}", $can, $cap, $id ); break; case 'access_message': if ( fep_is_user_whitelisted() || array_intersect( fep_get_option( 'userrole_access', array() ), $roles ) || ( ! $roles && $no_role_access ) ) { $can = true; } break; case 'send_new_message': if ( fep_is_user_whitelisted() || array_intersect( fep_get_option( 'userrole_new_message', array() ), $roles ) || ( ! $roles && $no_role_access ) ) { $can = true; } break; case 'send_new_message_to': if ( is_numeric( $id ) ) { // $id == user ID if ( $id && $id != get_current_user_id() && fep_current_user_can( 'access_message' ) && fep_current_user_can( 'send_new_message' ) && ( fep_is_user_whitelisted() || ( fep_get_user_option( 'allow_messages', 1, $id ) && ! fep_is_user_blocked_for_user( $id ) ) ) ) { $can = true; } // $id == user_nicename // Backward compability ( do not use ) } elseif ( $id && $id != fep_get_userdata( get_current_user_id(), 'user_nicename', 'id' ) && fep_current_user_can( 'access_message' ) && fep_current_user_can( 'send_new_message' ) && ( fep_is_user_whitelisted() || ( fep_get_user_option( 'allow_messages', 1, fep_get_userdata( $id ) ) && ! fep_is_user_blocked_for_user( fep_get_userdata( $id ) ) ) ) ) { $can = true; } break; case 'send_reply': if ( ! $id || fep_get_message_status( $id ) !== 'publish' ) { } elseif ( fep_is_user_whitelisted() || fep_is_user_admin() ) { $can = true; } elseif ( in_array( get_current_user_id(), fep_get_participants( $id, true ) ) && ( array_intersect( fep_get_option( 'userrole_reply', array() ), $roles ) || ( ! $roles && $no_role_access ) ) ) { $can = true; } if ( $can ) { $participants = FEP_Participants::init()->get( $id ); foreach ( $participants as $participant ) { if ( $participant->mgs_deleted && ! fep_get_option( 'reply_deleted_mgs' ) ) { $can = false; break; } if ( ! fep_is_user_whitelisted() && fep_is_user_blocked_for_user( $participant->mgs_participant ) ) { $can = false; break; } } } break; case 'view_message': case 'view_announcement': if ( $id && ( ( in_array( get_current_user_id(), fep_get_participants( $id, true ) ) && fep_get_message_status( $id ) == 'publish' ) || fep_is_user_admin() || fep_is_user_whitelisted() ) ) { $can = true; } break; case 'delete_message': // only for himself case 'delete_announcement': // only for himself if ( $id && in_array( get_current_user_id(), fep_get_participants( $id, true ) ) && fep_get_message_status( $id ) == 'publish' ) { $can = true; } break; case 'access_directory': if ( fep_is_user_admin() || fep_is_user_whitelisted() || fep_get_option( 'show_directory', 1 ) ) { $can = true; } break; case 'add_announcement': if ( fep_is_user_admin() ) { $can = true; } break; default : break; } return apply_filters( 'fep_current_user_can', $can, $cap, $id ); } function fep_is_read( $parent = false, $mgs_id = false, $user_id = false ) { if ( ! $user_id ) { $user_id = get_current_user_id(); } if ( ! $mgs_id ) { $mgs_id = fep_get_the_id(); } if ( ! $mgs_id || ! $user_id ) { return false; } $participant = FEP_Participants::init()->get( $mgs_id, $user_id ); $return = 0; if( $participant ){ if( $parent ){ $return = $participant->mgs_parent_read; } else { $return = $participant->mgs_read; } } return (int) $return; } function fep_make_read( $parent = false, $mgs_id = false, $user_id = false ) { if ( ! $user_id ) { $user_id = get_current_user_id(); } if ( ! $mgs_id ) { $mgs_id = fep_get_the_id(); } if ( ! $mgs_id || ! $user_id ) { return false; } $return = false; if( $parent ){ $return = FEP_Participants::init()->mark( $mgs_id, $user_id, ['parent_read' => true ] ); } else { $return = FEP_Participants::init()->mark( $mgs_id, $user_id, ['read' => true ] ); } return $return; } function fep_get_the_excerpt_from_content( $count = 100, $excerpt = '' ) { $excerpt = strip_shortcodes( $excerpt ); $excerpt = wp_strip_all_tags( $excerpt ); $excerpt = substr( $excerpt, 0, $count ); $excerpt = substr( $excerpt, 0, strripos( $excerpt, ' ' ) ); $excerpt = $excerpt. ' ... '; return apply_filters( 'fep_get_the_excerpt_from_content', $excerpt, $count ); } function fep_get_current_user_max_message_number() { $roles = wp_get_current_user()->roles; $count_array = array(); if ( $roles && is_array( $roles ) ) { foreach ( $roles as $role ) { $count = fep_get_option( "message_box_{$role}", 50 ); if ( ! $count ) { return 0; } $count_array[] = $count; } } if ( $count_array ) { return max( $count_array); } else { return 0; // FIX ME. 0 = unlimited !!!! } } function fep_add_email_filters( $for = 'message' ) { do_action( 'fep_action_after_add_email_filters', $for ); } function fep_remove_email_filters( $for = 'message' ) { do_action( 'fep_action_after_remove_email_filters', $for ); } function fep_delete_message( $mgs_id, $user_id = 0 ) { if ( ! $user_id ) { $user_id = get_current_user_id(); } if ( ! $mgs_id || ! $user_id ) { return false; } $return = FEP_Participants::init()->mark( $mgs_id, $user_id, ['delete' => true ] ); $should_delete_from_db = true; foreach ( FEP_Participants::init()->get( $mgs_id ) as $participant ) { if ( ! $participant->mgs_deleted ) { $should_delete_from_db = false; break; } } if ( apply_filters( 'fep_filter_delete_from_db', $should_delete_from_db, $mgs_id ) ) { $args = [ 'mgs_id' => $mgs_id, 'per_page' => 0, //unlimited 'mgs_status' => 'any', ]; if( 'threaded' == fep_get_message_view() && apply_filters( 'fep_erase_replies_if_threaded', true ) ){ $args['include_child'] = true; } $messages = fep_get_messages( $args ); foreach( $messages as $message ){ $message->delete(); } } return $return; } function fep_send_message( $message = null, $override = array() ) { if ( null === $message ) { $message = $_POST; } if ( ! empty( $message['fep_parent_id'] ) ) { $message['mgs_parent'] = absint( $message['fep_parent_id'] ); $message['mgs_status'] = fep_get_option( 'reply_post_status', 'publish' ); $message['message_title'] = __( 'RE:', 'front-end-pm' ). ' ' . wp_slash( fep_get_message_field( 'mgs_title', $message['mgs_parent'] ) ); $message['message_to_id'] = fep_get_participants( $message['mgs_parent'], ! fep_get_option( 'reply_deleted_mgs' ) ); } else { $message['mgs_status'] = fep_get_option( 'parent_post_status','publish' ); $message['mgs_parent'] = 0; } $message = apply_filters( 'fep_filter_message_before_send', $message ); if ( empty( $message['message_title'] ) || empty( $message['message_content'] ) ) { return false; } // Create post array $post = array( 'mgs_title' => $message['message_title'], 'mgs_content' => $message['message_content'], 'mgs_status' => $message['mgs_status'], 'mgs_parent' => $message['mgs_parent'], 'mgs_type' => 'message', 'mgs_author' => get_current_user_id(), 'mgs_created' => current_time( 'mysql', true ), ); if ( $override && is_array( $override ) ) { $post = wp_parse_args( $override, $post ); } if( ! $post['mgs_parent'] && 'threaded' === fep_get_message_view() ){ $post['mgs_last_reply_by'] = $post['mgs_author']; $post['mgs_last_reply_excerpt'] = fep_get_the_excerpt_from_content( 100, $post['mgs_content'] ); $post['mgs_last_reply_time'] = $post['mgs_created']; } $post = apply_filters( 'fep_filter_message_after_override', $post, $message ); $post = wp_unslash( $post ); $new_message = new FEP_Message; $message_id = $new_message->insert( $post ); // Insert the message into the database if ( ! $message_id ) { return false; } /* $inserted_message = FEP_Message::get_instance( $message_id ); if( ! $inserted_message ){ return false; } */ if( ! empty( $message['message_to_id'] ) ){ $message['message_to_id'] = (array) $message['message_to_id']; $message['message_to_id'][] = $new_message->mgs_author; $new_message->insert_participants( $message['message_to_id'] ); } if ( is_multisite() ) { fep_add_meta( $message_id, '_fep_blog_id', get_current_blog_id() ); } do_action( 'fep_action_message_after_send', $message_id, $message, $new_message ); do_action( 'fep_action_message_after_sent', $message_id, $message, $new_message ); fep_status_change( 'new', $new_message ); return $message_id; } function fep_status_change( $old_status, $message ){ if( ! $old_status || ! is_object( $message ) ){ return false; } $new_status = $message->mgs_status; if( $old_status == $new_status ){ return false; } do_action( "fep_transition_post_status", $new_status, $old_status, $message ); do_action( "fep_status_{$old_status}_to_{$new_status}", $message ); do_action( "fep_status_to_{$new_status}", $message, $old_status ); do_action( "fep_transition_{$message->mgs_type}_status", $new_status, $old_status, $message ); do_action( "fep_{$message->mgs_type}_status_{$old_status}_to_{$new_status}", $message ); do_action( "fep_{$message->mgs_type}_status_to_{$new_status}", $message, $old_status ); } function fep_delete_counts_cache( $new_status, $old_status, $message ) { wp_cache_delete( $message->mgs_type, 'fep_counts' ); } function fep_send_message_transition_post_status( $new_status, $old_status, $message ) { if ( 'message' != $message->mgs_type ) { return; } if ( 'new' === $old_status ) { if ( 'threaded' === fep_get_message_view() && $message->mgs_parent ) { $unmark = [ 'parent_read' => true, ]; if ( fep_get_option( 'reply_deleted_mgs' ) ) { $unmark['delete'] = true; } FEP_Participants::init()->unmark( $message->mgs_parent, false, $unmark ); FEP_Participants::init()->mark( $message->mgs_parent, $message->mgs_author, [ 'parent_read' => true ] ); } FEP_Participants::init()->mark( $message->mgs_id, $message->mgs_author, [ 'parent_read' => true ] ); } if ( 'publish' == $new_status || 'publish' == $old_status ) { if( 'threaded' === fep_get_message_view() && $message->mgs_parent ) { fep_update_reply_info( $message->mgs_parent ); } $participants = fep_get_participants( $message->mgs_id, true ); foreach ( $participants as $participant ) { delete_user_meta( $participant, '_fep_user_message_count' ); if ( $participant != $message->mgs_author && 'publish' == $new_status ) { delete_user_meta( $participant, '_fep_notification_dismiss' ); } } } } function fep_add_announcement( $announcement = null, $override = array() ) { if ( null === $announcement ) { $announcement = $_POST; } $announcement = apply_filters( 'fep_filter_announcement_before_added', $announcement ); if ( empty( $announcement['message_title'] ) || empty( $announcement['message_content'] ) ) { return false; } // Create post array $post = array( 'mgs_title' => $announcement['message_title'], 'mgs_content' => $announcement['message_content'], 'mgs_status' => 'publish', 'mgs_type' => 'announcement', 'mgs_author' => get_current_user_id(), 'mgs_created' => current_time( 'mysql', true ), ); if ( $override && is_array( $override ) ) { $post = wp_parse_args( $override, $post ); } $post = apply_filters( 'fep_filter_announcement_after_override', $post, $announcement ); $post = wp_unslash( $post ); $new_message = new FEP_Message; $announcement_id = $new_message->insert( $post ); // Insert the message into the database if ( ! $announcement_id ) { return false; } /* $inserted_announcement = FEP_Message::get_instance( $announcement_id ); if( ! $inserted_announcement ){ return false; } */ if ( ! empty( $announcement['announcement_roles'] ) && is_array( $announcement['announcement_roles'] ) ) { $user_ids = get_users( [ 'fields' => 'ids', 'role__in' => $announcement['announcement_roles'] ] ); $user_ids[] = $new_message->mgs_author; $user_ids = apply_filters( 'fep_filter_announcement_participant_ids', $user_ids, $announcement_id, $announcement, $new_message ); $new_message->insert_participants( $user_ids ); foreach( $announcement['announcement_roles'] as $role ){ fep_add_meta( $announcement_id, '_fep_participant_roles', $role ); } } if ( is_multisite() ) { fep_add_meta( $announcement_id, '_fep_blog_id', get_current_blog_id() ); } FEP_Participants::init()->mark( $new_message->mgs_id, $new_message->mgs_author, ['read' => true, 'parent_read' => true ] ); do_action( 'fep_action_announcement_after_added', $announcement_id, $announcement, $new_message ); fep_status_change( 'new', $new_message ); return $announcement_id; } function fep_backticker_encode( $text ) { $text = $text[1]; $text = str_replace( '&lt;', '<', $text ); $text = str_replace( '&gt;', '>', $text ); $text = htmlspecialchars( $text, ENT_QUOTES ); $text = preg_replace( '|\n+|', '\n', $text ); $text = nl2br( $text ); $text = str_replace( '\t', '    ', $text ); $text = preg_replace( '/^ /', ' ', $text ); $text = preg_replace( '/(?<= | |\n) /', ' ', $text ); return "$text"; } function fep_backticker_display_code( $text ) { //$text = preg_replace_callback( "|`(.*?)`|", "fep_backticker_encode", $text ); $text = preg_replace_callback( '!`(?:\r\n|\n|\r|)(.*?)(?:\r\n|\n|\r|)`!ims', 'fep_backticker_encode', $text ); $text = str_replace( '', '`', $text ); return $text; } function fep_backticker_code_input_filter( $message ) { $message['message_content'] = fep_backticker_display_code( $message['message_content'] ); return $message; } function fep_footer_credit() { $style = ''; if ( ! fep_get_option( 'show_branding', 1 ) ) { $style = ' style="display:none;"'; } echo 'Front End PM
'; } function fep_notification_div() { if ( ! fep_current_user_can( 'access_message' ) ) { return; } if ( ! fep_get_option( 'show_notification', 1 ) ) { return; } wp_enqueue_script( 'fep-notification-script' ); $unread_count = fep_get_new_message_number(); $sm = sprintf( _n( '%s message', '%s messages', $unread_count, 'front-end-pm' ), number_format_i18n( $unread_count ) ); $unread_ann_count = fep_get_new_announcement_number(); $sa = sprintf( _n( '%s announcement', '%s announcements', $unread_ann_count, 'front-end-pm' ), number_format_i18n( $unread_ann_count ) ); $class = 'fep-notification-bar'; if ( ! $unread_count && ! $unread_ann_count ) { $class .= ' fep-hide'; } elseif ( get_user_meta( get_current_user_id(), '_fep_notification_dismiss', true ) ) { $class .= ' fep-hide'; } $show = '

'; $show .= __( 'You have', 'front-end-pm' ); $class = 'fep_unread_message_count_hide_if_zero'; if ( ! $unread_count ) { $class .= ' fep-hide'; } $show .= ' ' . $sm . ''; $class = 'fep_hide_if_anyone_zero'; if ( ! $unread_count || ! $unread_ann_count ) { $class .= ' fep-hide'; } $show .= ' ' . __( 'and', 'front-end-pm' ) . ''; $class = 'fep_unread_announcement_count_hide_if_zero'; if ( ! $unread_ann_count ) { $class .= ' fep-hide'; } $show .= ' ' . $sa . ''; $show .= ' '; $show .= __( 'unread', 'front-end-pm' ); $show .= '

'; $show .= ''; $show .= '
'; echo apply_filters( 'fep_header_notification', $show ); } function fep_auth_redirect() { if ( ! fep_page_id() || ( ! is_page( fep_page_id() ) && ! is_single( fep_page_id() ) ) ) { return; } do_action( 'fep_template_redirect' ); if ( apply_filters( 'fep_using_auth_redirect', false ) ) { auth_redirect(); } } function fep_auth_redirect_scheme( $scheme ) { if ( ! apply_filters( 'fep_using_auth_redirect', false ) ) { return $scheme; } if ( is_admin() || ! fep_page_id() || ( ! is_page( fep_page_id() ) && ! is_single( fep_page_id() ) ) ) { return $scheme; } return 'logged_in'; } function fep_array_trim( $array ) { if ( ! is_array( $array ) ) { return trim( $array ); } return array_map( 'fep_array_trim', $array ); } function fep_is_pro() { return file_exists( FEP_PLUGIN_DIR . 'pro/pro-features.php' ); } function fep_errors() { static $errors; // Will hold global variable safely return isset( $errors ) ? $errors : ( $errors = new WP_Error() ); } function fep_success() { static $success; // Will hold global variable safely return isset( $success ) ? $success : ( $success = new WP_Error() ); } function fep_info_output() { do_action( 'fep_action_info_output' ); $html = ''; if ( fep_success()->get_error_messages() ) { $html .= '
'; foreach ( fep_success()->get_error_messages() as $s ) { $html .= esc_html( $s ). '
'; } $html .= '
'; } if ( fep_errors()->get_error_messages() ) { $html .= '
'; foreach ( fep_errors()->get_error_messages() as $e ) { $html .= '' . __( 'Error', 'front-end-pm' ) . ': ' . esc_html( $e ) . '
'; } $html .= '
'; } return $html; } function fep_locate_template( $template_names, $load = false, $require_once = true ) { $locations = array(); $locations[10] = trailingslashit( STYLESHEETPATH ) . 'front-end-pm/'; $locations[20] = trailingslashit( TEMPLATEPATH ) . 'front-end-pm/'; $locations[30] = FEP_PLUGIN_DIR . 'pro/templates/'; $locations[40] = FEP_PLUGIN_DIR . 'templates/'; $locations = apply_filters( 'fep_template_locations', $locations ); // sort the $locations based on priority ksort( $locations, SORT_NUMERIC ); $template = ''; if ( ! is_array( $template_names ) ) { $template_names = explode( ',', $template_names ); } foreach ( $template_names as $template_name ) { $template_name = trim( $template_name ); if ( empty( $template_name ) ) { continue; } if ( strpos( $template_name, '../' ) !== false || strpos( $template_name, '..\\' ) !== false ) { continue; } foreach ( $locations as $location ) { if ( file_exists( $location . $template_name ) ) { $template = $location . $template_name; break 2; } } } if ( ( true == $load ) && ! empty( $template ) ) { load_template( $template, $require_once ); } return apply_filters( 'fep_locate_template', $template, $template_names, $load, $require_once ); } function fep_form_posted() { $action = ! empty( $_POST['fep_action'] ) ? $_POST['fep_action'] : ''; if ( ! $action ) { return; } if ( ! fep_current_user_can( 'access_message' ) ) { return; } $menu = Fep_Menu::init()->get_menu(); switch ( $action ) { case has_action( "fep_posted_action_{$action}" ): do_action( "fep_posted_action_{$action}" ); break; case ( 'newmessage' == $action && ! empty( $menu['newmessage'] ) ): case 'shortcode-newmessage': if ( ! fep_current_user_can( 'send_new_message' ) ) { fep_errors()->add( 'permission', __( 'You do not have permission to send new message!', 'front-end-pm' ) ); break; } Fep_Form::init()->validate_form_field( $action ); if ( count( fep_errors()->get_error_messages() ) == 0 ) { if ( $message_id = fep_send_message() ) { if ( 'publish' == fep_get_message_status( $message_id ) ) { fep_success()->add( 'publish', __( 'Message successfully sent.', 'front-end-pm' ) ); } else { fep_success()->add( 'pending', __( 'Message successfully sent and waiting for admin moderation.', 'front-end-pm' ) ); } } else { fep_errors()->add( 'undefined', __( 'Something wrong. Please try again.', 'front-end-pm' ) ); } } break; case 'reply': $parent_id = isset( $_POST['fep_parent_id'] ) ? absint( $_POST['fep_parent_id'] ) : 0; if ( ! fep_current_user_can( 'send_reply', $parent_id ) ) { fep_errors()->add( 'permission', __( 'You do not have permission to send reply to this message!', 'front-end-pm' ) ); break; } Fep_Form::init()->validate_form_field( 'reply' ); if ( 0 == count( fep_errors()->get_error_messages() ) ) { if ( $message_id = fep_send_message() ) { if ( 'publish' == fep_get_message_status( $message_id ) ) { fep_success()->add( 'publish', __( 'Message successfully sent.', 'front-end-pm' ) ); } else { fep_success()->add( 'pending', __( 'Message successfully sent and waiting for admin moderation.', 'front-end-pm' ) ); } } else { fep_errors()->add( 'undefined', __( 'Something wrong. Please try again.', 'front-end-pm' ) ); } } break; case 'bulk_action': case 'announcement_bulk_action': case 'directory_bulk_action': $posted_bulk_action = ! empty( $_POST['fep-bulk-action'] ) ? $_POST['fep-bulk-action'] : ''; if ( ! $posted_bulk_action ) { break; } $token = ! empty( $_POST['token'] ) ? $_POST['token'] : ''; if ( ! fep_verify_nonce( $token, $action ) ) { fep_errors()->add( 'token', __( 'Invalid Token. Please try again!', 'front-end-pm' ) ); break; } do_action( "fep_posted_bulk_{$action}", $posted_bulk_action ); break; default: do_action( 'fep_posted_action' ); break; } do_action( 'fep_posted_action_after', $action ); if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { $response = array(); if ( count( fep_errors()->get_error_messages() ) > 0 ) { $response['fep_return'] = 'error'; } elseif ( count( fep_success()->get_error_messages() ) > 0 ) { $response['fep_return'] = 'success'; } else { $response['fep_return'] = ''; } $response['info'] = fep_info_output(); if( ! empty( $_POST['fep_redirect'] ) ) { $response['fep_redirect'] = wp_validate_redirect( wp_sanitize_redirect( $_POST['fep_redirect'] ) ); } wp_send_json( $response ); } elseif ( ! empty( $_POST['fep_redirect'] ) ) { wp_safe_redirect( $_POST['fep_redirect'] ); exit; } } function fep_get_participants( $message_id, $exclude_deleted = false ) { if ( empty( $message_id ) || ! is_numeric( $message_id ) ) { return array(); } $participants = FEP_Participants::init()->get( $message_id, false, $exclude_deleted ); $return = []; foreach( $participants as $participant ){ $return[] = $participant->mgs_participant; } return $return; } function fep_get_participant_roles( $announcement_id ) { $roles = fep_get_meta( $announcement_id, '_fep_participant_roles' ); if( ! is_array( $roles ) ){ $roles = []; } return $roles; } function fep_get_message_view() { $message_view = fep_get_option( 'message_view', 'threaded' ); $message_view = apply_filters( 'fep_get_message_view', $message_view ); if ( ! $message_view || ! in_array( $message_view, array( 'threaded', 'individual' ) ) ) { $message_view = 'threaded'; } return $message_view; } function fep_get_blocked_users_for_user( $userid = '' ) { $return = array(); if ( $blocked_users = fep_get_user_option( 'blocked_users', '', $userid ) ) { $blocked_users = explode( ',', $blocked_users ); $return = array_filter( array_map( 'absint', $blocked_users ) ); } return apply_filters( 'fep_get_blocked_users_for_user', $return, $userid ); } function fep_is_user_blocked_for_user( $userid, $check_id = '' ) { $blocked_users = fep_get_blocked_users_for_user( $userid ); if ( ! $check_id ) { $check_id = get_current_user_id(); } if ( in_array( $check_id, $blocked_users ) ) { return true; } return false; } function fep_block_users_for_user( $user_ids, $userid = '' ) { if ( is_numeric( $user_ids ) ) { $user_ids = array( $user_ids ); } if ( ! $user_ids || ! is_array( $user_ids ) ) { return 0; } $blocked_users = fep_get_blocked_users_for_user( $userid ); $need_block = array_diff( $user_ids, $blocked_users ); if ( $need_block ) { $blocked_users = array_unique( array_merge( $blocked_users, $need_block ) ); fep_update_user_option( 'blocked_users', implode( ',', $blocked_users ) ); } return count( $need_block ); } function fep_unblock_users_for_user( $user_ids, $userid = '' ) { if ( is_numeric( $user_ids ) ) { $user_ids = array( $user_ids ); } if ( ! $user_ids || ! is_array( $user_ids ) ) { return 0; } $blocked_users = fep_get_blocked_users_for_user( $userid = '' ); $need_unblock = array_intersect( $blocked_users, $user_ids ); if ( $need_unblock ) { $blocked_users = array_unique( array_diff( $blocked_users, $need_unblock ) ); fep_update_user_option( 'blocked_users', implode( ',', $blocked_users ) ); } return count( $need_unblock ); } function fep_sanitize_html_class( $class ) { if ( $class ) { if ( ! is_array( $class ) ) { $class = explode( ' ', $class ); } $class = array_map( 'sanitize_html_class', $class ); $class = implode( ' ', array_unique( array_filter( $class ) ) ); } if ( ! is_string( $class ) ) { $class = ''; } return apply_filters( 'fep_sanitize_html_class', $class ); } function fep_show_unread_count_in_title( $title ) { if ( fep_get_option( 'show_unread_count_in_title', 1 ) && fep_current_user_can( 'access_message' ) ) { wp_enqueue_script( 'fep-notification-script' ); if ( $count = fep_get_new_message_number() ) { $count = number_format_i18n( $count ); $title['title'] = "($count) " . $title['title']; } } return $title; } function fep_pre_get_document_title( $title ) { if ( ! empty( $title ) && fep_get_option( 'show_unread_count_in_title', 1 ) && fep_current_user_can( 'access_message' ) ) { wp_enqueue_script( 'fep-notification-script' ); if ( $count = fep_get_new_message_number() ) { $count = number_format_i18n( $count ); $title = "($count) " . $title; } } return $title; } function fep_is_func_disabled( $function ) { $disabled = explode( ',', ini_get( 'disable_functions' ) ); return in_array( $function, $disabled ); } //new function fep_set_current_message( $message ){ global $fep_message; if( $message instanceof FEP_Message ){ $fep_message = $message; } else { $fep_message = null; } return $fep_message; } function fep_get_current_message(){ global $fep_message; if( isset( $fep_message ) && ( $fep_message instanceof FEP_Message ) ){ return $fep_message; } else { return null; } } function fep_get_message_field( $field, $mgs_id = 0 ){ if( $mgs_id && is_numeric( $mgs_id ) ){ $message = fep_get_message( $mgs_id ); } else { $message = fep_get_current_message(); } $value = false; if( $message && isset( $message->$field ) ){ $value = $message->$field; } return apply_filters( 'fep_get_message_field', $value, $field, $mgs_id, $message ); } function fep_get_the_id( $mgs_id = 0 ){ $id = fep_get_message_field( 'mgs_id', $mgs_id ); return apply_filters( 'fep_get_the_id', (int) $id, $mgs_id ); } function fep_get_the_title( $mgs_id = 0 ){ $title = fep_get_message_field( 'mgs_title', $mgs_id ); return apply_filters( 'fep_get_the_title', $title, $mgs_id ); } function fep_get_the_content( $mgs_id = 0 ){ $content = fep_get_message_field( 'mgs_content', $mgs_id ); return apply_filters( 'fep_get_the_content', $content, $mgs_id ); } function fep_get_the_excerpt( $mgs_id = 0 ){ if( 'threaded' === fep_get_message_view() && 'message' === fep_get_message_field( 'mgs_type', $mgs_id ) ){ $excerpt = fep_get_message_field( 'mgs_last_reply_excerpt', $mgs_id ); } else { $excerpt = fep_get_the_excerpt_from_content( 100, fep_get_message_field( 'mgs_content', $mgs_id ) ); } return apply_filters( 'fep_get_the_excerpt', $excerpt, $mgs_id ); } function fep_get_message_status( $mgs_id = 0 ){ $status = fep_get_message_field( 'mgs_status', $mgs_id ); return apply_filters( 'fep_get_message_status', $status, $mgs_id ); } function fep_get_the_date( $which = 'created', $mgs_id = 0 ){ if( 'created' == $which ){ $field = 'mgs_created'; } else { $field = 'mgs_last_reply_time'; } $date = fep_get_message_field( $field, $mgs_id ); if( ! $date ){ $date = '0000-00-00 00:00:00'; } return apply_filters( 'fep_get_the_date', $date, $which, $mgs_id ); } function fep_participants_view( $mgs_id = 0 ) { $wp_roles = wp_roles(); if( 'announcement' == fep_get_message_field( 'mgs_type', $mgs_id ) ){ $roles = fep_get_participant_roles( fep_get_the_id( $mgs_id ) ); foreach( $roles as $role ){ if( $wp_roles->is_role( $role ) ) echo translate_user_role( $wp_roles->roles[ $role ]['name'] ) .'
'; } } elseif( 'message' == fep_get_message_field( 'mgs_type', $mgs_id ) ){ if( $group = apply_filters( 'fep_is_group_message', false, $mgs_id ) ){ echo esc_html( $group ); } elseif( $recipients = fep_get_participants( fep_get_the_id( $mgs_id ) ) ){ foreach ( $recipients as $recipient ) { if( fep_get_message_field( 'mgs_author', $mgs_id ) != $recipient ) echo fep_user_name( $recipient ) . '
'; } } } } function fep_get_statuses( $for = 'message' ){ $statuses = [ 'pending' => __('Pending', 'front-end-pm' ), 'publish' => __('Publish', 'front-end-pm' ), ]; return apply_filters( 'fep_get_statuses', $statuses, $for ); } function fep_recursive_remove_directory( $directory ) { foreach ( glob( "{$directory}/*" ) as $file ) { if ( is_dir( $file ) ) { fep_recursive_remove_directory( $file ); } else { unlink( $file ); } } rmdir( $directory ); } function fep_fs_uninstall_cleanup() { global $wpdb; $fep_options = get_option( 'FEP_admin_options' ); if ( is_array( $fep_options ) && ! empty( $fep_options['delete_data_on_uninstall'] ) ) { /** Delete all the Plugin Options */ delete_option( 'FEP_admin_options' ); delete_option( 'fep_updated_versions' ); delete_site_option( 'fep_db_version' ); delete_metadata( 'user', 0, 'FEP_user_options', '', true ); delete_metadata( 'user', 0, '_fep_user_message_count', '', true ); delete_metadata( 'user', 0, '_fep_user_announcement_count', '', true ); delete_metadata( 'user', 0, '_fep_notification_dismiss', '', true ); // Remove all database tables of Front End PM (if any). $fep_tables = [ 'message' => defined( 'FEP_MESSAGE_TABLE' ) ? FEP_MESSAGE_TABLE : $wpdb->base_prefix . 'fep_messages', 'meta' => defined( 'FEP_META_TABLE' ) ? FEP_META_TABLE : $wpdb->base_prefix . 'fep_messagemeta', 'participants' => defined( 'FEP_PARTICIPANT_TABLE' ) ? FEP_PARTICIPANT_TABLE : $wpdb->base_prefix . 'fep_participants', 'attachments' => defined( 'FEP_ATTACHMENT_TABLE' ) ? FEP_ATTACHMENT_TABLE : $wpdb->base_prefix . 'fep_attachments', ]; foreach ( $fep_tables as $fep_table ) { $wpdb->query( "DROP TABLE IF EXISTS $fep_table" ); } // Need to improve delete attachments files for multisite. if( ! is_multisite() ){ $wp_upload_dir = wp_upload_dir(); if ( $wp_upload_dir && false === $wp_upload_dir['error'] ) { fep_recursive_remove_directory( $wp_upload_dir['basedir'] . '/front-end-pm' ); } } // Remove any transients we've left behind $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '\_transient\_fep\_%'" ); $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '\_transient\_timeout\_fep\_%'" ); } } function fep_fs_support_forum_url( $wp_org_support_forum_url ) { return 'https://www.shamimsplugins.com/support/forum/front-end-pm-pro/'; } function fep_create_htaccess_index( $path ) { if ( wp_is_writable( $path ) ) { wp_mkdir_p( $path ); if( ! file_exists( $path . '/.htaccess' ) ){ // Create the file if it doesn't exist file_put_contents( $path . '/.htaccess', "Options -Indexes\ndeny from all\n" ); } if( ! file_exists( $path . '/index.php' ) ){ // Create the file if it doesn't exist file_put_contents( $path . '/index.php', "