/** * User Meta Shortcode handler * Retrieve the value of a property or meta key from the users and usermeta tables. * usage: [user_meta user_id=1 key="first_name" size="50" wpautop="on" pre="Pre Label " post="Post Label "] * @param array $atts * @param string $content * @return stirng */ function user_meta_shortcode_handler($atts, $content = null) { if (!isset($atts['user_id'])) { $user = wp_get_current_user(); $atts['user_id'] = $user->ID; } if (!isset($atts['size'])) { $atts['size'] = '50'; } $user = new WP_User($atts['user_id']); if (!$user->exists()) { return; } if ($atts['key'] == 'avatar') { return $atts['pre'] . get_avatar($user->ID, $atts['size']) . $atts['post']; } if ($user->has_prop($atts['key'])) { if ($atts['wpautop'] == 'on') { $value = wpautop($user->get($atts['key'])); } else { $value = $user->get($atts['key']); } } if (!empty($value)) { return $atts['pre'] . $value . $atts['post']; } return; }
/** * Return form HTML replacing variables in a template string. * * @return string */ private function printForm() { $title = apply_filters('the_title', $this->post->post_title); $nonce = self::NONCE . get_current_blog_id(); $data = ['action' => esc_attr(Launcher::SLUG . '_send_mail'), 'postId' => $this->post->ID, 'postTitle' => esc_attr($title), 'recipient' => esc_attr($this->author->get('user_email')), 'messageLabel' => esc_html__('Message:', 'reject-notify'), 'button' => get_submit_button(esc_html__('Send', 'reject-notify')), 'nonce' => wp_nonce_field($nonce, self::NONCE, true, false), 'title' => sprintf(esc_html__('Send reject mail to %s', 'reject-notify'), esc_html($this->author->get('display_name'))), 'message' => vsprintf(esc_html__('Sorry %s, your post %s was rejected.', 'reject-notify'), [esc_html($this->author->get('display_name')), '"' . esc_html($title) . '"'])]; $template = file_get_contents(dirname($this->path) . '/templates/form.php'); foreach ($data as $key => $value) { $template = str_replace("{{{{$key}}}}", $value, $template); } return $template; }
/** * @param \WP_User $user * @return UserEntity|null */ protected function _convertToEntity(\WP_User $user) { $id = (int) $user->ID; if ($entity = $this->_getEntity($id)) { return $entity; } $caps = $user->get_role_caps(); $isAdmin = (bool) Vars::get($caps['administrator'], false); $data = new Data(['id' => $id, 'login' => $user->get('user_login'), 'name' => $user->get('display_name'), 'email' => $user->get('user_email'), 'is_admin' => $isAdmin]); $this->_users[$id] = new UserEntity($data); return $this->_users[$id]; }
/** * Exactly like Gravity Forms' User Meta functionality, but instead shows information on the user who created the entry * instead of the currently logged-in user. * * @see http://docs.gravityview.co/article/281-the-createdby-merge-tag Read how to use the `{created_by}` merge tag * * @since 1.16 * * @param array $matches Array of Merge Tag matches found in text by preg_match_all * @param string $text Text to replace * @param array $form Gravity Forms form array * @param array $entry Entry array * @param bool $url_encode Whether to URL-encode output * @param bool $esc_html Whether to apply `esc_html()` to output * * @return string Text, with user variables replaced, if they existed */ public function replace_merge_tag($matches = array(), $text = '', $form = array(), $entry = array(), $url_encode = false, $esc_html = false) { // If there are no matches OR the Entry `created_by` isn't set or is 0 (no user) if (empty($entry['created_by'])) { return $text; } // Get the creator of the entry $entry_creator = new WP_User($entry['created_by']); foreach ($matches as $match) { $full_tag = $match[0]; $property = $match[1]; switch ($property) { /** @since 1.13.2 */ case 'roles': $value = implode(', ', $entry_creator->roles); break; default: $value = $entry_creator->get($property); } $value = $url_encode ? urlencode($value) : $value; $value = $esc_html ? esc_html($value) : $value; $text = str_replace($full_tag, $value, $text); } unset($entry_creator); return $text; }
public static function is_users_email($email, $user_id = false) { if (!$user_id) { $user_id = get_current_user_id(); } $user = new WP_User($user_id); return $user->get('user_email') == $email; }
public function add_note($entry_id, $note, $user_id = false) { if ($user_id) { $user = new WP_User($user_id); $user_name = $user->get('display_name'); } else { $user_id = 0; $user_name = 'System'; } GFFormsModel::add_note($entry_id, $user_id, $user_name, $note); }
/** * Convert a WP_User instance to an associative array with the keys defined * in the AmeUserPropertyMap interface in actor-manager.ts. * * @param WP_User $user * @return array */ public function user_to_property_map($user) { return array('user_login' => $user->get('user_login'), 'id' => $user->ID, 'roles' => !empty($user->roles) ? (array) $user->roles : array(), 'capabilities' => $this->castValuesToBool($user->caps), 'display_name' => $user->display_name, 'is_super_admin' => is_multisite() && is_super_admin($user->ID)); }
/** * Track changes to ACF values within rendered post meta forms * * @param string $type Type of object, post or user * @param string $action Added, updated, deleted * @param integer $meta_id * @param integer $object_id * @param string $key * @param mixed|null $value * * @return bool */ public function check_meta_values($type, $action, $meta_id, $object_id, $key, $value = null) { unset($action); unset($meta_id); if (empty($this->cached_field_values_updates)) { return false; } $object_key = $object_id; if ('user' === $type) { $object_key = 'user_' . $object_id; } elseif ('taxonomy' === $type) { if (0 === strpos($key, '_')) { // Ignore the 'revision' stuff! return false; } if (1 !== preg_match('#([a-z0-9_-]+)_([\\d]+)_([a-z0-9_-]+)#', $key, $matches)) { return false; } list(, $taxonomy, $term_id, $key) = $matches; // Skips 0 index $object_key = $taxonomy . '_' . $term_id; } if (isset($this->cached_field_values_updates[$object_key][$key])) { if ('post' === $type) { $posts_connector = new Connector_Posts(); $post = get_post($object_id); $title = $post->post_title; $type_name = strtolower($posts_connector->get_post_type_name($post->post_type)); } elseif ('user' === $type) { $user = new \WP_User($object_id); $title = $user->get('display_name'); $type_name = esc_html__('user', 'stream'); } elseif ('taxonomy' === $type && isset($term_id) && isset($taxonomy)) { $term = get_term($term_id, $taxonomy); $title = $term->name; $tax_obj = get_taxonomy($taxonomy); $type_name = strtolower(get_taxonomy_labels($tax_obj)->singular_name); } else { return false; } $cache = $this->cached_field_values_updates[$object_key][$key]; $this->log(esc_html_x('"%1$s" of "%2$s" %3$s updated', 'acf', 'stream'), array('field_label' => $cache['field']['label'], 'title' => $title, 'singular_name' => $type_name, 'meta_value' => $value, 'meta_key' => $key, 'meta_type' => $type), $object_id, 'values', 'updated'); } return true; }
/** * @param WP_User $oUser * @param string $sIpAddress * @param string $sSessionId * @return boolean */ public function sendEmailTwoFactorVerify(WP_User $oUser, $sIpAddress, $sSessionId) { $sEmail = $oUser->get('user_email'); $sAuthLink = $this->generateTwoFactorVerifyLink($oUser->get('user_login'), $sSessionId); $aMessage = array(_wpsf__('You, or someone pretending to be you, just attempted to login into your WordPress site.'), _wpsf__('The IP Address / Cookie from which they tried to login is not currently verified.'), _wpsf__('Click the following link to validate and complete the login process.') . ' ' . _wpsf__('You will be logged in automatically upon successful authentication.'), sprintf(_wpsf__('Username: %s'), $oUser->get('user_login')), sprintf(_wpsf__('IP Address: %s'), $sIpAddress), sprintf(_wpsf__('Authentication Link: %s'), $sAuthLink)); $sEmailSubject = sprintf(_wpsf__('Two-Factor Login Verification for %s'), $this->loadWpFunctionsProcessor()->getHomeUrl()); $bResult = $this->getEmailProcessor()->sendEmailTo($sEmail, $sEmailSubject, $aMessage); if ($bResult) { $sAuditMessage = sprintf(_wpsf__('User "%s" was sent an email to verify their Identity using Two-Factor Login Auth for IP address "%s".'), $oUser->get('user_login'), $sIpAddress); $this->addToAuditEntry($sAuditMessage, 2, 'login_protect_two_factor_email_send'); } else { $sAuditMessage = sprintf(_wpsf__('Tried to send email to User "%s" to verify their identity using Two-Factor Login Auth for IP address "%s", but email sending failed.'), $oUser->get('user_login'), $sIpAddress); $this->addToAuditEntry($sAuditMessage, 3, 'login_protect_two_factor_email_send_fail'); } return $bResult; }
/** * Fires after the 'About Yourself' settings table on the 'Your Profile' editing screen. * * The action only fires if the current user is editing their own profile. * * @since WP 2.0.0 * * @param WP_User $profileuser The current WP_User object. */ public function show_user_profile($profileuser) { echo '<br clear="all" /><a name="wpdk"></a>'; $message = __('This view <strong>is enhanced</strong> by wpXtreme and WPDK framework. Please, have a look below for additional information.', WPDK_TEXTDOMAIN); $alert = new WPDKUIAlert('wpdk-alert-show_user_profile', $message, WPDKUIAlertType::INFORMATION); $alert->dismissPermanent = true; $alert->display(); // Only the administrator can edit this extra information $disabled = !current_user_can('manage_options'); // Sanitize values $last_time_success_login = $profileuser->get(WPDKUserMeta::LAST_TIME_SUCCESS_LOGIN); $last_time_wrong_login = $profileuser->get(WPDKUserMeta::LAST_TIME_WRONG_LOGIN); $last_time_logout = $profileuser->get(WPDKUserMeta::LAST_TIME_LOGOUT); $status_description = $profileuser->get(WPDKUserMeta::STATUS_DESCRIPTION); // Display WPDK user extends information $fields = array(__('Login information', WPDK_TEXTDOMAIN) => array(array(array('type' => WPDKUIControlType::DATETIME, 'name' => WPDKUserMeta::LAST_TIME_SUCCESS_LOGIN, 'label' => __('Last success login', WPDK_TEXTDOMAIN), 'value' => empty($last_time_success_login) ? '' : WPDKDateTime::format($last_time_success_login, WPDKDateTime::DATETIME_SECONDS_LESS_FORMAT_PHP), 'disabled' => $disabled), array('type' => WPDKUIControlType::NUMBER, 'name' => WPDKUserMeta::COUNT_SUCCESS_LOGIN, 'label' => __('# success login', WPDK_TEXTDOMAIN), 'value' => $profileuser->get(WPDKUserMeta::COUNT_SUCCESS_LOGIN), 'disabled' => true)), array(array('type' => WPDKUIControlType::DATETIME, 'name' => WPDKUserMeta::LAST_TIME_WRONG_LOGIN, 'label' => __('Last wrong login', WPDK_TEXTDOMAIN), 'value' => empty($last_time_wrong_login) ? '' : WPDKDateTime::format($last_time_wrong_login, WPDKDateTime::DATETIME_SECONDS_LESS_FORMAT_PHP), 'disabled' => $disabled), array('type' => WPDKUIControlType::NUMBER, 'name' => WPDKUserMeta::COUNT_WRONG_LOGIN, 'label' => __('# wrong login', WPDK_TEXTDOMAIN), 'value' => $profileuser->get(WPDKUserMeta::COUNT_WRONG_LOGIN), 'disabled' => $disabled))), __('Logout information', WPDK_TEXTDOMAIN) => array(array(array('type' => WPDKUIControlType::DATETIME, 'name' => WPDKUserMeta::LAST_TIME_LOGOUT, 'label' => __('Last logout', WPDK_TEXTDOMAIN), 'value' => empty($last_time_logout) ? '' : WPDKDateTime::format($last_time_logout, WPDKDateTime::DATETIME_SECONDS_LESS_FORMAT_PHP), 'disabled' => $disabled))), __('Status', WPDK_TEXTDOMAIN) => array(array(array('type' => WPDKUIControlType::SELECT, 'name' => WPDKUserMeta::STATUS, 'label' => __('Status', WPDK_TEXTDOMAIN), 'value' => $profileuser->get(WPDKUserMeta::STATUS), 'options' => WPDKUserStatus::statuses(), 'disabled' => $disabled)), array(array('type' => WPDKUIControlType::TEXTAREA, 'name' => WPDKUserMeta::STATUS_DESCRIPTION, 'rows' => 3, 'cols' => 40, 'label' => __('Description', WPDK_TEXTDOMAIN), 'placeholder' => __('eg: this user is disabled because...', WPDK_TEXTDOMAIN), 'value' => $status_description, 'disabled' => $disabled)))); /** * Filter the layout control array with the extra WPDK fields. * * You can use this filter or `wpdk_users_show_user_profile` action to modify the default layout control array. * * @param array $fields Layout array fields. * @param WP_User $profileuser The current WP_User object. */ $fields = apply_filters('wpdk_users_fields_profile', $fields, $profileuser); $layout = new WPDKUIControlsLayout($fields); /** * Fires after display the layout controls. * * You can use this action or `wpdk_users_fields_profile` filter to modify the default layout control array. * * @deprecated since 1.7.2 - Use `wpdk_user_profile_tabs` filter instead * * @param WP_User $profileuser The current WP_User object. */ do_action('wpdk_users_show_user_profile', $profileuser); // Defaults $tabs = array(); if (current_user_can('edit_users')) { // WPDK tabs $tabs = array(new WPDKjQueryTab('wpdk-user-profile', __('WPDK'), '<div id="wpdk-user-profile">' . $layout->html() . '</div>')); } /** * Filter the tabs list used to extends user profile edit. * * @since 1.7.2 * * @param array $tabs The array tabs list. * @param WP_User $profileuser The current WP_User object. */ $tabs = apply_filters('wpdk_user_profile_tabs', $tabs, $profileuser); $jquery_tabs = new WPDKjQueryTabsView('wpdk-users', $tabs, true); $jquery_tabs->display(); }
/** * Returns the name of the donor. * * @return string * @access private * @since 1.0.0 */ private function get_donor_name() { $user = new WP_User($this->get_donation_data_value('user_id', 0)); $user_data = $this->get_donation_data_value('user'); $first_name = isset($user_data['first_name']) ? $user_data['first_name'] : $user->get('first_name'); $last_name = isset($user_data['last_name']) ? $user_data['last_name'] : $user->get('last_name'); return trim(sprintf('%s %s', $first_name, $last_name)); }
/** * @param WP_User $oUser * @return bool */ protected function sendLoginEmailNotification($oUser) { if (!$oUser instanceof WP_User) { return false; } $fIsAdministrator = isset($oUser->caps['administrator']) && $oUser->caps['administrator']; if (!$fIsAdministrator) { return false; } $oDp = $this->loadDataProcessor(); $oEmailer = $this->getFeatureOptions()->getEmailProcessor(); $sHomeUrl = $this->loadWpFunctionsProcessor()->getHomeUrl(); $aMessage = array(sprintf(_wpsf__('As requested, %s is notifying you of an administrator login to a WordPress site that you manage.'), $this->getController()->getHumanName()), _wpsf__('Details for this user are below:'), '- ' . sprintf(_wpsf__('Site URL: %s'), $sHomeUrl), '- ' . sprintf(_wpsf__('Username: %s'), $oUser->get('user_login')), '- ' . sprintf(_wpsf__('IP Address: %s'), $oDp->getVisitorIpAddress(true)), _wpsf__('Thanks.')); $bResult = $oEmailer->sendEmailTo($this->getOption('enable_admin_login_email_notification'), sprintf(_wpsf__('Notice - %s'), sprintf(_wpsf__('An Administrator Just Logged Into %s'), $sHomeUrl)), $aMessage); return $bResult; }
/** * @param WP_User $oUser * @return WP_User|WP_Error */ public function checkYubikeyOtpAuth_Filter($oUser) { $oError = new WP_Error(); $sUsername = $oUser->get('user_login'); // Before anything else we check that a Yubikey pair has been provided for this username (and that there are pairs in the first place!) $aYubikeyUsernamePairs = $this->getOption('yubikey_unique_keys'); if (!$this->getIsYubikeyConfigReady()) { // configuration is clearly not completed yet. return $oUser; } $sOneTimePassword = empty($_POST['yubiotp']) ? '' : trim($_POST['yubiotp']); $sAppId = $this->getOption('yubikey_app_id'); $sApiKey = $this->getOption('yubikey_api_key'); // check that if we have a list of permitted keys, that the one used is on that list connected with the username. $sYubikey12 = substr($sOneTimePassword, 0, 12); $fUsernameFound = false; // if username is never found, it means there's no yubikey specified which means we can bypass this authentication method. $fFoundMatch = false; foreach ($aYubikeyUsernamePairs as $aUsernameYubikeyPair) { if (isset($aUsernameYubikeyPair[$sUsername])) { $fUsernameFound = true; if ($aUsernameYubikeyPair[$sUsername] == $sYubikey12) { $fFoundMatch = true; break; } } } // If no yubikey-username pair found for given username, we by-pass Yubikey auth. if (!$fUsernameFound) { $sAuditMessage = sprintf(_wpsf__('User "%s" logged in without a Yubikey One Time Password because no username-yubikey pair was found for this user.'), $sUsername); $this->addToAuditEntry($sAuditMessage, 2, 'login_protect_yubikey_bypass'); return $oUser; } // Username was found in the list of key pairs, but the yubikey provided didn't match that username. if (!$fFoundMatch) { $oError->add('yubikey_not_allowed', sprintf(_wpsf__('ERROR: %s'), _wpsf__('The Yubikey provided is not on the list of permitted keys for this user.'))); $sAuditMessage = sprintf(_wpsf__('User "%s" attempted to login but Yubikey ID "%s" used was not in list of authorised keys.'), $sUsername, $sYubikey12); $this->addToAuditEntry($sAuditMessage, 2, 'login_protect_yubikey_fail_permitted_id'); return $oError; } $oFs = $this->loadFileSystemProcessor(); $sNonce = md5(uniqid(rand())); $sUrl = sprintf(self::YubikeyVerifyApiUrl, $sAppId, $sOneTimePassword, $sNonce); $sRawYubiRequest = $oFs->getUrlContent($sUrl); // Validate response. // 1. Check OTP and Nonce if (!preg_match('/otp=' . $sOneTimePassword . '/', $sRawYubiRequest, $aMatches) || !preg_match('/nonce=' . $sNonce . '/', $sRawYubiRequest, $aMatches)) { $oError->add('yubikey_validate_fail', sprintf(_wpsf__('ERROR: %s'), _wpsf__('The Yubikey authentication was not validated successfully.'))); $sAuditMessage = sprintf(_wpsf__('User "%s" attempted to login but Yubikey One Time Password failed to validate due to invalid Yubi API.'), $sUsername); $this->addToAuditEntry($sAuditMessage, 2, 'login_protect_yubikey_fail_invalid_api'); return $oError; } // Optionally we can check the hash, but since we're using HTTPS, this isn't necessary and adds more PHP requirements // 2. Check status directly within response preg_match('/status=([a-zA-Z0-9_]+)/', $sRawYubiRequest, $aMatches); $sStatus = $aMatches[1]; if ($sStatus != 'OK' && $sStatus != 'REPLAYED_OTP') { $oError->add('yubikey_validate_fail', sprintf(_wpsf__('ERROR: %s'), _wpsf__('The Yubikey authentication was not validated successfully.'))); $sAuditMessage = sprintf(_wpsf__('User "%s" attempted to login but Yubikey One Time Password failed to validate due to invalid Yubi API response status: "%s".'), $sUsername, $sStatus); $this->addToAuditEntry($sAuditMessage, 2, 'login_protect_yubikey_fail_invalid_api_response'); return $oError; } $sAuditMessage = sprintf(_wpsf__('User "%s" successfully logged in using a validated Yubikey One Time Password.'), $sUsername); $this->addToAuditEntry($sAuditMessage, 2, 'login_protect_yubikey_login_success'); return $oUser; }
/** * Target for the gform_pre_replace_merge_tags filter. Replaces the workflow_timeline and created_by merge tags. * * * @param string $text * @param array $form * @param array $entry * @param bool $url_encode * @param bool $esc_html * @param bool $nl2br * @param string $format * * @return string */ function replace_variables($text, $form, $entry, $url_encode, $esc_html, $nl2br, $format) { preg_match_all('/{workflow_timeline(:(.*?))?}/', $text, $timeline_matches, PREG_SET_ORDER); if (is_array($timeline_matches) && isset($timeline_matches[0])) { $full_tag = $timeline_matches[0][0]; require_once gravity_flow()->get_base_path() . '/includes/pages/class-entry-detail.php'; $notes = Gravity_Flow_Entry_Detail::get_timeline_notes($entry); $html = ''; foreach ($notes as $note) { $html .= '<br />'; $html .= GFCommon::format_date($note->date_created, false, 'd M Y g:i a', false); $html .= ': '; if (empty($note->user_id)) { if ($note->user_name !== 'gravityflow') { $step = Gravity_Flow_Steps::get($note->user_name); if ($step) { $html .= $step->get_label(); } } else { $html .= esc_html(gravity_flow()->translate_navigation_label('Workflow')); } } else { $html .= esc_html($note->user_name); } $html .= '<br />'; $html .= nl2br(esc_html($note->value)); $html .= '<br />'; } $text = str_replace($full_tag, $html, $text); } preg_match_all('/{created_by(:(.*?))?}/', $text, $created_by_matches, PREG_SET_ORDER); if (is_array($created_by_matches)) { if (!empty($entry['created_by'])) { $entry_creator = new WP_User($entry['created_by']); foreach ($created_by_matches as $created_by_match) { if (!isset($created_by_match[2])) { continue; } $full_tag = $created_by_match[0]; $property = $created_by_match[2]; if ($property == 'roles') { $value = implode(', ', $entry_creator->roles); } else { $value = $entry_creator->get($property); } $value = esc_html($value); $text = str_replace($full_tag, $value, $text); } } } return $text; }
/** * Retrieve user option that can be either per Site or per Network. * * If the user ID is not given, then the current user will be used instead. If * the user ID is given, then the user data will be retrieved. The filter for * the result, will also pass the original option name and finally the user data * object as the third parameter. * * The option will first check for the per site name and then the per Network name. * * @since 2.0.0 * @uses $wpdb WordPress database object for queries. * @uses apply_filters() Calls 'get_user_option_$option' hook with result, * option parameter, and user data object. * * @param string $option User option name. * @param int $user Optional. User ID. * @param bool $deprecated Use get_option() to check for an option in the options table. * @return mixed */ function get_user_option($option, $user = 0, $deprecated = '') { global $wpdb; if (!empty($deprecated)) { _deprecated_argument(__FUNCTION__, '3.0'); } if (empty($user)) { $user = wp_get_current_user(); } else { $user = new WP_User($user); } if (!isset($user->ID)) { return false; } if ($user->has_prop($wpdb->prefix . $option)) { // Blog specific $result = $user->get($wpdb->prefix . $option); } elseif ($user->has_prop($option)) { // User specific and cross-blog $result = $user->get($option); } else { $result = false; } return apply_filters("get_user_option_{$option}", $result, $option, $user); }
function test_update_user() { $user_id = self::factory()->user->create(array('role' => 'author', 'user_login' => 'test_wp_update_user', 'user_pass' => 'password', 'user_email' => '*****@*****.**')); $user = new WP_User($user_id); update_user_meta($user_id, 'description', 'about me'); $this->assertEquals('about me', $user->get('description')); $user_data = array('ID' => $user_id, 'display_name' => 'test user'); wp_update_user($user_data); $user = new WP_User($user_id); $this->assertEquals('test user', $user->get('display_name')); // Make sure there is no collateral damage to fields not in $user_data $this->assertEquals('about me', $user->get('description')); // Pass as stdClass $user_data = array('ID' => $user_id, 'display_name' => 'a test user'); wp_update_user((object) $user_data); $user = new WP_User($user_id); $this->assertEquals('a test user', $user->get('display_name')); // Pass as WP_User $user = new WP_User($user_id); $user->display_name = 'some test user'; wp_update_user($user); $user = new WP_User($user_id); $this->assertEquals('some test user', $user->get('display_name')); // Test update of fields in _get_additional_user_keys() $user_data = array('ID' => $user_id, 'use_ssl' => 1, 'show_admin_bar_front' => 1, 'rich_editing' => 1, 'first_name' => 'first', 'last_name' => 'last', 'nickname' => 'nick', 'comment_shortcuts' => 'true', 'admin_color' => 'classic', 'description' => 'describe'); wp_update_user($user_data); $user = new WP_User($user_id); foreach ($user_data as $key => $value) { $this->assertEquals($value, $user->get($key), $key); } }
/** * Exactly like Gravity Forms' User Meta functionality, but instead shows information on the user who created the entry * instead of the currently logged-in user. * * @see http://docs.gravityview.co/article/281-the-createdby-merge-tag * * @since 1.8.4 * * @param string $text Text to replace * @param array $form Gravity Forms form array * @param array $entry Entry array * @param bool $url_encode Whether to URL-encode output * @param bool $esc_html Whether to apply `esc_html()` to output */ private function replace_user_variables_created_by($text, $form = array(), $entry = array(), $url_encode = false, $esc_html = false) { // Is there is {created_by:[xyz]} merge tag? preg_match_all("/\\{created_by:(.*?)\\}/", $text, $matches, PREG_SET_ORDER); // If there are no matches OR the Entry `created_by` isn't set or is 0 (no user) if (empty($matches) || empty($entry['created_by'])) { return $text; } // Get the creator of the entry $entry_creator = new WP_User($entry['created_by']); foreach ($matches as $match) { $full_tag = $match[0]; $property = $match[1]; $value = $entry_creator->get($property); $value = $url_encode ? urlencode($value) : $value; $esc_html = $esc_html ? esc_html($value) : $value; $text = str_replace($full_tag, $value, $text); } return $text; }