/** * Filters groups on post edit page. * * @param type $groups * @param type $post * @return type */ function wpcf_cd_post_groups_filter($groups, $post, $context) { if ($context != 'group') { return $groups; } foreach ($groups as $key => &$group) { $conditions = null; if (array_key_exists('conditional_display', $group) && array_key_exists('conditions', $group['conditional_display'])) { $conditions = $group['conditional_display']; } else { $conditions = get_post_meta($group['id'], '_wpcf_conditional_display', true); } if (!empty($conditions['conditions'])) { $meta_box_id = "wpcf-group-{$group['slug']}"; $prefix = 'wpcf-'; $suffix = ''; $cond = array(); if (isset($post->ID)) { $cond_values = get_post_custom($post->ID); } else { $cond_values = array(); } $_cond_values = array(); foreach ($cond_values as $k => $v) { $v = maybe_unserialize($v[0]); $_cond_values[$k . $suffix] = is_array($v) ? strval(array_shift($v)) : $v; } unset($cond_values); $cond = array(); if (!empty($conditions['custom_use'])) { if (!empty($conditions['custom'])) { $custom = WPToolset_Types::getCustomConditional($conditions['custom']); $passed = WPToolset_Forms_Conditional::evaluateCustom($custom['custom'], $_cond_values); $cond = array('custom' => $custom['custom'], 'custom_use' => true); } } else { $cond = array('relation' => $conditions['relation'], 'conditions' => array(), 'values' => $_cond_values); foreach ($conditions['conditions'] as $d) { $c_field = types_get_field($d['field']); if (!empty($c_field)) { $_c = array('id' => wpcf_types_get_meta_prefix($c_field) . $d['field'] . $suffix, 'type' => $c_field['type'], 'operator' => $d['operation'], 'args' => array($d['value'])); $cond['conditions'][] = $_c; } } $passed = wptoolset_form_conditional_check(array('conditional' => $cond)); } $data = array('id' => $meta_box_id, 'conditional' => $cond); wptoolset_form_add_conditional('post', $data); if (!$passed) { $group['_conditional_display'] = 'failed'; } else { $group['_conditional_display'] = 'passed'; } } } return $groups; }
/** * All AJAX calls go here. * * @todo auth */ function wpcf_ajax_embedded() { if (isset($_REQUEST['_typesnonce'])) { if (!wp_verify_nonce($_REQUEST['_typesnonce'], '_typesnonce')) { die('Verification failed (1)'); } } else { if (!isset($_REQUEST['_wpnonce']) || !wp_verify_nonce($_REQUEST['_wpnonce'], $_REQUEST['wpcf_action'])) { die('Verification failed (2)'); } } global $wpcf; switch ($_REQUEST['wpcf_action']) { case 'insert_skype_button': if (!current_user_can('edit_posts')) { die('Authentication failed'); } require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields/skype.php'; wpcf_fields_skype_meta_box_ajax(); break; case 'editor_callback': if (!current_user_can('edit_posts')) { die('Authentication failed'); } // Determine Field type and context $views_meta = false; $field_id = sanitize_text_field($_GET['field_id']); // todo this could be written in like four lines if (isset($_GET['field_type']) && $_GET['field_type'] == 'usermeta') { // Group filter wp_enqueue_script('suggest'); $field = types_get_field($field_id, 'usermeta'); $meta_type = 'usermeta'; } elseif (isset($_GET['field_type']) && $_GET['field_type'] == 'views-usermeta') { $field = types_get_field($field_id, 'usermeta'); $meta_type = 'usermeta'; $views_meta = true; } elseif (isset($_GET['field_type']) && $_GET['field_type'] == 'termmeta') { // Group filter wp_enqueue_script('suggest'); $field = types_get_field($field_id, 'termmeta'); $meta_type = 'termmeta'; } elseif (isset($_GET['field_type']) && $_GET['field_type'] == 'views-termmeta') { $field = types_get_field($field_id, 'termmeta'); $meta_type = 'termmeta'; $views_meta = true; } else { $field = types_get_field($field_id); $meta_type = 'postmeta'; } $parent_post_id = isset($_GET['post_id']) ? intval($_GET['post_id']) : null; $shortcode = isset($_GET['shortcode']) ? urldecode($_GET['shortcode']) : null; $callback = isset($_GET['callback']) ? sanitize_text_field($_GET['callback']) : false; if (!empty($field)) { // Editor WPCF_Loader::loadClass('editor'); $editor = new WPCF_Editor(); $editor->frame($field, $meta_type, $parent_post_id, $shortcode, $callback, $views_meta); } break; case 'dismiss_message': if (!is_user_logged_in()) { die('Authentication failed'); } if (isset($_GET['id'])) { $messages = get_option('wpcf_dismissed_messages', array()); $messages[] = sanitize_text_field($_GET['id']); update_option('wpcf_dismissed_messages', $messages); } break; case 'pr_add_child_post': global $current_user; $output = '<tr>' . __('Passed wrong parameters', 'wpcf') . '</tr>'; $id = 0; $target_post_type = isset($_GET['post_type_child']) ? sanitize_text_field($_GET['post_type_child']) : ''; $has_permissions = current_user_can('publish_posts'); $has_permissions = apply_filters('toolset_access_api_get_post_type_permissions', $has_permissions, $target_post_type, 'publish'); if (!$has_permissions) { $output = '<tr><td>' . __('You do not have rights to create new items', 'wpcf') . '</td></tr>'; } else { if (isset($_GET['post_id']) && isset($_GET['post_type_child']) && isset($_GET['post_type_parent'])) { $relationships = get_option('wpcf_post_relationship', array()); $parent_post_id = intval($_GET['post_id']); $parent_post = get_post($parent_post_id); if (!empty($parent_post->ID)) { $post_type = sanitize_text_field($_GET['post_type_child']); $parent_post_type = sanitize_text_field($_GET['post_type_parent']); // @todo isset & error handling $data = $relationships[$parent_post_type][$post_type]; /* * Since Types 1.1.5 * * We save new post * CHECKPOINT */ $id = $wpcf->relationship->add_new_child($parent_post->ID, $post_type); if (is_wp_error($id)) { $output = '<tr>' . $id->get_error_message() . '</tr>'; } else { /* * Here we set Relationship * CHECKPOINT */ $parent = get_post($parent_post_id); $child = get_post($id); if (!empty($parent->ID) && !empty($child->ID)) { // Set post $wpcf->post = $child; // Set relationship :) $wpcf->relationship->_set($parent, $child, $data); // Render new row $output = $wpcf->relationship->child_row($parent_post->ID, $id, $data); } else { $output = '<tr>' . __('Error creating post relationship', 'wpcf') . '</tr>'; } } } else { $output = '<tr>' . __('Error getting parent post', 'wpcf') . '</tr>'; } } } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output . wpcf_form_render_js_validation('#post', false), 'child_id' => $id)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')), 'child_id' => $id)); } break; case 'pr_save_all': ob_start(); // Try to catch any errors $output = ''; if (current_user_can('edit_posts') && isset($_POST['post_id'])) { $parent_id = intval($_POST['post_id']); $post_type = sanitize_text_field($_POST['post_type']); if (isset($_POST['wpcf_post_relationship'][$parent_id])) { $children = wpcf_sanitize_post_realtionship_input((array) $_POST['wpcf_post_relationship'][$parent_id]); $wpcf->relationship->save_children($parent_id, $children); $output = $wpcf->relationship->child_meta_form($parent_id, strval($post_type)); } } if (!defined('WPTOOLSET_FORMS_VERSION')) { // TODO Move to conditional $output .= '<script type="text/javascript">wpcfConditionalInit();</script>'; } wpcf_show_admin_messages('echo'); $errors = ob_get_clean(); if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output, 'errors' => $errors)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')), 'errors' => $errors)); } break; case 'pr_save_child_post': ob_start(); // Try to catch any errors $output = ''; if (current_user_can('edit_posts') && isset($_GET['post_id']) && isset($_GET['parent_id']) && isset($_GET['post_type_parent']) && isset($_GET['post_type_child']) && isset($_POST['wpcf_post_relationship'])) { $parent_id = intval($_GET['parent_id']); $child_id = intval($_GET['post_id']); $parent_post_type = sanitize_text_field($_GET['post_type_parent']); $child_post_type = sanitize_text_field($_GET['post_type_child']); if (isset($_POST['wpcf_post_relationship'][$parent_id][$child_id])) { $fields = wpcf_sanitize_post_relationship_input_fields((array) $_POST['wpcf_post_relationship'][$parent_id][$child_id]); $wpcf->relationship->save_child($parent_id, $child_id, $fields); $output = $wpcf->relationship->child_row($parent_id, $child_id, $wpcf->relationship->settings($parent_post_type, $child_post_type)); if (!defined('WPTOOLSET_FORMS_VERSION')) { // TODO Move to conditional $output .= '<script type="text/javascript">wpcfConditionalInit(\'#types-child-row-' . $child_id . '\');</script>'; } } } wpcf_show_admin_messages('echo'); $errors = ob_get_clean(); if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output, 'errors' => $errors)); } else { echo json_encode(array('output' => $output, 'errors' => $errors, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; case 'pr_delete_child_post': require_once WPCF_EMBEDDED_ABSPATH . '/includes/post-relationship.php'; $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_GET['post_id'])) { $output = wpcf_pr_admin_delete_child_item(intval($_GET['post_id'])); } echo json_encode(array('output' => $output)); break; case 'pr_pagination': require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php'; require_once WPCF_EMBEDDED_ABSPATH . '/includes/post-relationship.php'; $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_GET['post_id']) && isset($_GET['post_type'])) { global $wpcf; $parent = get_post(intval($_GET['post_id'])); $child_post_type = sanitize_text_field($_GET['post_type']); if (!empty($parent->ID)) { // Set post in loop $wpcf->post = $parent; // Save items_per_page $wpcf->relationship->save_items_per_page($parent->post_type, $child_post_type, intval($_GET[$wpcf->relationship->items_per_page_option_name])); $output = $wpcf->relationship->child_meta_form($parent->ID, $child_post_type); } } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; case 'pr_sort': $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_GET['field']) && isset($_GET['sort']) && isset($_GET['post_id']) && isset($_GET['post_type'])) { $output = $wpcf->relationship->child_meta_form(intval($_GET['post_id']), sanitize_text_field($_GET['post_type'])); } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; // Not used anywhere /*case 'pr_sort_parent': $output = 'Passed wrong parameters'; if ( isset( $_GET['field'] ) && isset( $_GET['sort'] ) && isset( $_GET['post_id'] ) && isset( $_GET['post_type'] ) ) { $output = $wpcf->relationship->child_meta_form( intval( $_GET['post_id'] ), strval( $_GET['post_type'] ) ); } if ( !defined( 'WPTOOLSET_FORMS_VERSION' ) ) { echo json_encode( array( 'output' => $output, ) ); } else { echo json_encode( array( 'output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data( 'post' )), ) ); } break;*/ /* Usermeta */ // Not used anywhere /*case 'pr_sort_parent': $output = 'Passed wrong parameters'; if ( isset( $_GET['field'] ) && isset( $_GET['sort'] ) && isset( $_GET['post_id'] ) && isset( $_GET['post_type'] ) ) { $output = $wpcf->relationship->child_meta_form( intval( $_GET['post_id'] ), strval( $_GET['post_type'] ) ); } if ( !defined( 'WPTOOLSET_FORMS_VERSION' ) ) { echo json_encode( array( 'output' => $output, ) ); } else { echo json_encode( array( 'output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data( 'post' )), ) ); } break;*/ /* Usermeta */ case 'um_repetitive_add': if (isset($_GET['user_id'])) { $user_id = (int) $_GET['user_id']; } else { $user_id = wpcf_usermeta_get_user(); } if (isset($_GET['field_id']) && current_user_can('edit_user', $user_id)) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta-post.php'; $field = wpcf_admin_fields_get_field(sanitize_text_field($_GET['field_id']), false, false, false, 'wpcf-usermeta'); global $wpcf; $wpcf->usermeta_repeater->set($user_id, $field); /* * * Force empty values! */ $wpcf->usermeta_repeater->cf['value'] = null; $wpcf->usermeta_repeater->meta = null; $form = $wpcf->usermeta_repeater->get_field_form(null, true); echo json_encode(array('output' => wpcf_form_simple($form) . wpcf_form_render_js_validation('#your-profile', false))); } else { echo json_encode(array('output' => 'params missing')); } break; case 'um_repetitive_delete': if (isset($_POST['user_id']) && isset($_POST['field_id']) && current_user_can('edit_user', intval($_POST['user_id']))) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; $user_id = intval($_POST['user_id']); $field = wpcf_admin_fields_get_field(sanitize_text_field($_POST['field_id']), false, false, false, 'wpcf-usermeta'); $meta_id = intval($_POST['meta_id']); if (!empty($field) && !empty($user_id) && !empty($meta_id)) { /* * * * Changed. * Since Types 1.2 */ global $wpcf; $wpcf->usermeta_repeater->set($user_id, $field); $wpcf->usermeta_repeater->delete($meta_id); echo json_encode(array('output' => 'deleted')); } else { echo json_encode(array('output' => 'field or post not found')); } } else { echo json_encode(array('output' => 'params missing')); } break; /* End Usermeta */ /* End Usermeta */ case 'repetitive_add': if (current_user_can('edit_posts') && isset($_GET['field_id'])) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php'; $field = wpcf_admin_fields_get_field(sanitize_text_field($_GET['field_id'])); $parent_post_id = intval($_GET['post_id']); /* * When post is new - post_id is 0 * We can safely set post_id to 1 cause * values compared are filtered anyway. */ if ($parent_post_id == 0) { $parent_post_id = 1; } $parent_post = get_post($parent_post_id); global $wpcf; $wpcf->repeater->set($parent_post, $field); /* * * Force empty values! */ $wpcf->repeater->cf['value'] = null; $wpcf->repeater->meta = null; $form = $wpcf->repeater->get_field_form(null, true); echo json_encode(array('output' => wpcf_form_simple($form) . wpcf_form_render_js_validation('#post', false))); } else { echo json_encode(array('output' => 'params missing')); } break; case 'repetitive_delete': if (current_user_can('edit_posts') && isset($_POST['post_id']) && isset($_POST['field_id'])) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; $post_id = intval($_POST['post_id']); $parent_post = get_post($post_id); $field = wpcf_admin_fields_get_field(sanitize_text_field($_POST['field_id'])); $meta_id = intval($_POST['meta_id']); if (!empty($field) && !empty($parent_post->ID) && !empty($meta_id)) { /* * * * Changed. * Since Types 1.2 */ global $wpcf; $wpcf->repeater->set($parent_post, $field); $wpcf->repeater->delete($meta_id); echo json_encode(array('output' => 'deleted')); } else { echo json_encode(array('output' => 'field or post not found')); } } else { echo json_encode(array('output' => 'params missing')); } break; case 'wpcf_entry_search': if (current_user_can('edit_posts') && isset($_REQUEST['post_type'])) { $posts_per_page = apply_filters('wpcf_pr_belongs_post_numberposts', 10); $args = array('posts_per_page' => apply_filters('wpcf_pr_belongs_post_posts_per_page', $posts_per_page), 'post_status' => apply_filters('wpcf_pr_belongs_post_status', array('publish', 'private')), 'post_type' => sanitize_text_field($_REQUEST['post_type']), 'suppress_filters' => 1); if (isset($_REQUEST['s'])) { $args['s'] = $_REQUEST['s']; } if (isset($_REQUEST['page']) && preg_match('/^\\d+$/', $_REQUEST['page'])) { $args['paged'] = intval($_REQUEST['page']); } $the_query = new WP_Query($args); $posts = array('items' => array(), 'total_count' => $the_query->found_posts, 'incomplete_results' => $the_query->found_posts > $posts_per_page, 'posts_per_page' => $posts_per_page); if ($the_query->have_posts()) { while ($the_query->have_posts()) { $the_query->the_post(); $post_title = get_the_title(); if (empty($post_title)) { $post_title = sprintf(__('[empty title] ID: %d', 'wpcf'), get_the_ID()); } $posts['items'][] = array('ID' => get_the_ID(), 'post_title' => $post_title); } } /* Restore original Post Data */ wp_reset_postdata(); echo json_encode($posts); } else { echo json_encode(array('output' => 'params missing')); } break; case 'wpcf_entry_entry': if (current_user_can('edit_posts') && isset($_REQUEST['p'])) { $wpcf_post = get_post((int) $_REQUEST['p'], ARRAY_A); if (isset($wpcf_post['ID'])) { $post_title = $wpcf_post['post_title']; if (empty($post_title)) { $post_title = sprintf(__('[empty title] ID: %d', 'wpcf'), $wpcf_post['ID']); } echo json_encode(array('ID' => $wpcf_post['ID'], 'post_title' => $wpcf_post['post_title'])); } else { echo json_encode(array('output' => 'params missing')); } } else { echo json_encode(array('output' => 'params missing')); } break; default: break; } if (function_exists('wpcf_ajax')) { wpcf_ajax(); } die; }
/** * Set current post and field. * * @param type $post * @param type $cf */ function set($term_id, $cf) { global $wpcf; /* * * Check if $cf is string */ if (is_string($cf)) { WPCF_Loader::loadInclude('fields'); $cf = types_get_field($this->__get_slug_no_prefix($cf), 'termmeta'); if (empty($cf)) { $this->_reset(); return false; } } $this->term_id = $term_id; $this->ID = $cf['id']; $this->cf = $cf; $this->slug = wpcf_types_get_meta_prefix($this->cf) . $this->cf['slug']; $this->meta = $this->_get_meta(); $this->config = $this->_get_config(); $this->unique_id = wpcf_unique_id(serialize((array) $this)); $this->cf['value'] = $this->meta; // Debug $wpcf->debug->fieds[$this->unique_id] = $this->cf; $wpcf->debug->meta[$this->slug][] = $this->meta; // Load files if (isset($this->cf['type'])) { $file = WPCF_EMBEDDED_INC_ABSPATH . '/fields/' . $this->cf['type'] . '.php'; if (file_exists($file)) { include_once $file; } if (defined('WPCF_INC_ABSPATH')) { $file = WPCF_INC_ABSPATH . '/fields/' . $this->cf['type'] . '.php'; if (file_exists($file)) { include_once $file; } } } }
/** * Calls view function for specific usermeta field type. * * @global object $wpdb * * @param type $field * @param type $atts (additional attributes: user_id, user_name, user_is_author, user_current) * @return type */ function types_render_usermeta($field_id, $params, $content = null, $code = '') { global $wpcf, $post, $wpdb, $WP_Views; // HTML var holds actual output $html = ''; $current_user = wp_get_current_user(); $current_user_id = $current_user->ID; // Set post ID // user_id, user_name, user_is_author, user_current if (is_object($post)) { $post_id = $post->ID; } else { $post_id = 0; } if (isset($params['post_id']) && !empty($params['post_id'])) { $post_id = $params['post_id']; } //Get User id from views loop if (isset($WP_Views->users_data['term']->ID) && !empty($WP_Views->users_data['term']->ID)) { $params['user_id'] = $WP_Views->users_data['term']->ID; } //print_r($params);exit; //Get user By ID if (isset($params['user_id'])) { $user_id = $params['user_id']; } else { if (isset($params['user_name'])) { //Get user by login $user_id = $wpdb->get_var($wpdb->prepare("SELECT * FROM " . $wpdb->users . " WHERE user_login = %s", $params['user_name'])); } else { if (isset($params['user_is_author'])) { //Get Post author $user_id = $post->post_author; } else { if (isset($params['user_current'])) { //Get current logged user $user_id = $current_user_id; } else { //If empty get post author, if no post, return empty if (!empty($post_id)) { $user_id = $post->post_author; } else { return; } } } } } if (empty($user_id)) { return; } // Get field $field = types_get_field($field_id, 'usermeta'); // If field not found return empty string if (empty($field)) { // Log if (!function_exists('wplogger')) { require_once WPCF_EMBEDDED_TOOLSET_ABSPATH . '/toolset-common/wplogger.php'; } global $wplogger; $wplogger->log('types_render_field call for missing field \'' . $field_id . '\'', WPLOG_DEBUG); return ''; } // See if repetitive if (wpcf_admin_is_repetitive($field)) { $wpcf->usermeta_repeater->set($user_id, $field); $_meta = $wpcf->usermeta_repeater->_get_meta(); $meta = ''; if (isset($_meta['custom_order'])) { $meta = $_meta['custom_order']; } if (count($meta) == 1) { $meta_id = key($meta); $_temp = array_shift($meta); if (strval($_temp) == '') { return ''; } else { $params['field_value'] = $_temp; return types_render_field_single($field, $params, $content, $code, $meta_id); } } else { if (!empty($meta)) { $output = ''; if (isset($params['index'])) { $index = $params['index']; } else { $index = ''; } // Allow wpv-for-each shortcode to set the index $index = apply_filters('wpv-for-each-index', $index); if ($index === '') { $output = array(); foreach ($meta as $temp_key => $temp_value) { $params['field_value'] = $temp_value; $temp_output = types_render_field_single($field, $params, $content, $code, $temp_key); if (!empty($temp_output)) { $output[] = $temp_output; } } if (!empty($output) && isset($params['separator'])) { $output = implode(html_entity_decode($params['separator']), $output); } else { if (!empty($output)) { $output = implode('', $output); } else { return ''; } } } else { // Make sure indexed right $_index = 0; foreach ($meta as $temp_key => $temp_value) { if ($_index == $index) { $params['field_value'] = $temp_value; $output = types_render_field_single($field, $params, $content, $code, $temp_key); } $_index++; } } $html = $output; } else { return ''; } } } else { $params['field_value'] = get_user_meta($user_id, wpcf_types_get_meta_prefix($field) . $field['slug'], true); if ($params['field_value'] == '' && $field['type'] != 'checkbox') { return ''; } $html = types_render_field_single($field, $params, $content, $code); } // API filter $wpcf->usermeta_field->set($user_id, $field); return $wpcf->usermeta_field->html($html, $params); }
/** * Used for processing conditional statements. * * Wrapper for wpcf_cd_post_edit_field_filter() * core function. * * @param type $element * @param type $field * @param type $post * @param string $context * @return type */ function wpcf_conditional_evaluate($post = null, $field) { // Set post if (is_null($post)) { global $post; } else { $post = get_post($post); } if (empty($post->ID)) { return NULL; } // Get field if (!is_array($field)) { $field = types_get_field($field); if (empty($field)) { return NULL; } } global $wpcf; $e = clone $wpcf->conditional; $e->set($post, $field); return $e->evaluate(); }
/** * All AJAX calls go here. * * @todo auth */ function wpcf_ajax_embedded() { if (isset($_REQUEST['_typesnonce'])) { if (!wp_verify_nonce($_REQUEST['_typesnonce'], '_typesnonce')) { die('Verification failed'); } } else { if (!isset($_REQUEST['_wpnonce']) || !wp_verify_nonce($_REQUEST['_wpnonce'], $_REQUEST['wpcf_action'])) { die('Verification failed'); } } global $wpcf; switch ($_REQUEST['wpcf_action']) { case 'insert_skype_button': if (!current_user_can('edit_posts')) { die('Authentication failed'); } require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields/skype.php'; wpcf_fields_skype_meta_box_ajax(); break; case 'editor_callback': if (!current_user_can('edit_posts')) { die('Authentication failed'); } // Determine Field type and context $views_usermeta = false; $field_id = sanitize_text_field($_GET['field_id']); // todo this could be written in like four lines if (isset($_GET['field_type']) && $_GET['field_type'] == 'usermeta') { // Group filter wp_enqueue_script('suggest'); $field = types_get_field($field_id, 'usermeta'); $meta_type = 'usermeta'; } elseif (isset($_GET['field_type']) && $_GET['field_type'] == 'views-usermeta') { $field = types_get_field($field_id, 'usermeta'); $meta_type = 'usermeta'; $views_usermeta = true; } else { $field = types_get_field($field_id); $meta_type = 'postmeta'; } $parent_post_id = isset($_GET['post_id']) ? intval($_GET['post_id']) : null; $shortcode = isset($_GET['shortcode']) ? urldecode($_GET['shortcode']) : null; $callback = isset($_GET['callback']) ? sanitize_text_field($_GET['callback']) : false; if (!empty($field)) { // Editor WPCF_Loader::loadClass('editor'); $editor = new WPCF_Editor(); $editor->frame($field, $meta_type, $parent_post_id, $shortcode, $callback, $views_usermeta); } break; case 'dismiss_message': if (!is_user_logged_in()) { die('Authentication failed'); } if (isset($_GET['id'])) { $messages = get_option('wpcf_dismissed_messages', array()); $messages[] = sanitize_text_field($_GET['id']); update_option('wpcf_dismissed_messages', $messages); } break; case 'pr_add_child_post': $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_GET['post_id']) && isset($_GET['post_type_child']) && isset($_GET['post_type_parent'])) { $relationships = get_option('wpcf_post_relationship', array()); $parent_post_id = intval($_GET['post_id']); $parent_post = get_post($parent_post_id); if (!empty($parent_post->ID)) { $post_type = sanitize_text_field($_GET['post_type_child']); $parent_post_type = sanitize_text_field($_GET['post_type_parent']); // @todo isset & error handling $data = $relationships[$parent_post_type][$post_type]; /* * Since Types 1.1.5 * * We save new post * CHECKPOINT */ $id = $wpcf->relationship->add_new_child($parent_post->ID, $post_type); if (is_wp_error($id)) { $output = $id->get_error_message(); } else { /* * Here we set Relationship * CHECKPOINT */ $parent = get_post($parent_post_id); $child = get_post($id); if (!empty($parent->ID) && !empty($child->ID)) { // Set post $wpcf->post = $child; // Set relationship :) $wpcf->relationship->_set($parent, $child, $data); // Render new row $output = $wpcf->relationship->child_row($parent_post->ID, $id, $data); } else { $output = __('Error creating post relationship', 'wpcf'); } } } else { $output = __('Error getting parent post', 'wpcf'); } } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output . wpcf_form_render_js_validation('#post', false), 'child_id' => $id)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')), 'child_id' => $id)); } break; case 'pr_save_all': $output = ''; if (current_user_can('edit_posts') && isset($_POST['post_id'])) { $parent_id = intval($_POST['post_id']); $post_type = sanitize_text_field($_POST['post_type']); if (isset($_POST['wpcf_post_relationship'][$parent_id])) { $children = wpcf_sanitize_post_realtionship_input((array) $_POST['wpcf_post_relationship'][$parent_id]); $wpcf->relationship->save_children($parent_id, $children); $output = $wpcf->relationship->child_meta_form($parent_id, strval($post_type)); } } if (!defined('WPTOOLSET_FORMS_VERSION')) { // TODO Move to conditional $output .= '<script type="text/javascript">wpcfConditionalInit();</script>'; } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; case 'pr_save_child_post': ob_start(); // Try to catch any errors $output = ''; if (current_user_can('edit_posts') && isset($_GET['post_id']) && isset($_GET['parent_id']) && isset($_GET['post_type_parent']) && isset($_GET['post_type_child']) && isset($_POST['wpcf_post_relationship'])) { $parent_id = intval($_GET['parent_id']); $child_id = intval($_GET['post_id']); $parent_post_type = sanitize_text_field($_GET['post_type_parent']); $child_post_type = sanitize_text_field($_GET['post_type_child']); if (isset($_POST['wpcf_post_relationship'][$parent_id][$child_id])) { $fields = wpcf_sanitize_post_relationship_input_fields((array) $_POST['wpcf_post_relationship'][$parent_id][$child_id]); $wpcf->relationship->save_child($parent_id, $child_id, $fields); $output = $wpcf->relationship->child_row($parent_id, $child_id, $wpcf->relationship->settings($parent_post_type, $child_post_type)); if (!defined('WPTOOLSET_FORMS_VERSION')) { // TODO Move to conditional $output .= '<script type="text/javascript">wpcfConditionalInit(\'#types-child-row-' . $child_id . '\');</script>'; } } } $errors = ob_get_clean(); if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output, 'errors' => $errors)); } else { echo json_encode(array('output' => $output, 'errors' => $errors, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; case 'pr_delete_child_post': require_once WPCF_EMBEDDED_ABSPATH . '/includes/post-relationship.php'; $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_GET['post_id'])) { $output = wpcf_pr_admin_delete_child_item(intval($_GET['post_id'])); } echo json_encode(array('output' => $output)); break; case 'pr-update-belongs': require_once WPCF_EMBEDDED_ABSPATH . '/includes/post-relationship.php'; $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_POST['post_id']) && isset($_POST['wpcf_pr_belongs'][$_POST['post_id']])) { $parent_post_id = intval($_POST['post_id']); $belongs_assignments = array(); foreach ($_POST['wpcf_pr_belongs'][$parent_post_id] as $post_type_raw => $post_id_raw) { $belongs_assignments[sanitize_text_field($post_type_raw)] = intval($post_id_raw); } $updated = wpcf_pr_admin_update_belongs($parent_post_id, $belongs_assignments); $output = is_wp_error($updated) ? $updated->get_error_message() : $updated; } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; case 'pr_pagination': require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php'; require_once WPCF_EMBEDDED_ABSPATH . '/includes/post-relationship.php'; $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_GET['post_id']) && isset($_GET['post_type'])) { global $wpcf; $parent = get_post(intval($_GET['post_id'])); $child_post_type = sanitize_text_field($_GET['post_type']); if (!empty($parent->ID)) { // Set post in loop $wpcf->post = $parent; // Save items_per_page $wpcf->relationship->save_items_per_page($parent->post_type, $child_post_type, intval($_GET[$wpcf->relationship->items_per_page_option_name])); $output = $wpcf->relationship->child_meta_form($parent->ID, $child_post_type); } } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; case 'pr_sort': $output = 'Passed wrong parameters'; if (current_user_can('edit_posts') && isset($_GET['field']) && isset($_GET['sort']) && isset($_GET['post_id']) && isset($_GET['post_type'])) { $output = $wpcf->relationship->child_meta_form(intval($_GET['post_id']), sanitize_text_field($_GET['post_type'])); } if (!defined('WPTOOLSET_FORMS_VERSION')) { echo json_encode(array('output' => $output)); } else { echo json_encode(array('output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data('post')))); } break; // Not used anywhere /*case 'pr_sort_parent': $output = 'Passed wrong parameters'; if ( isset( $_GET['field'] ) && isset( $_GET['sort'] ) && isset( $_GET['post_id'] ) && isset( $_GET['post_type'] ) ) { $output = $wpcf->relationship->child_meta_form( intval( $_GET['post_id'] ), strval( $_GET['post_type'] ) ); } if ( !defined( 'WPTOOLSET_FORMS_VERSION' ) ) { echo json_encode( array( 'output' => $output, ) ); } else { echo json_encode( array( 'output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data( 'post' )), ) ); } break;*/ /* Usermeta */ // Not used anywhere /*case 'pr_sort_parent': $output = 'Passed wrong parameters'; if ( isset( $_GET['field'] ) && isset( $_GET['sort'] ) && isset( $_GET['post_id'] ) && isset( $_GET['post_type'] ) ) { $output = $wpcf->relationship->child_meta_form( intval( $_GET['post_id'] ), strval( $_GET['post_type'] ) ); } if ( !defined( 'WPTOOLSET_FORMS_VERSION' ) ) { echo json_encode( array( 'output' => $output, ) ); } else { echo json_encode( array( 'output' => $output, 'conditionals' => array('#post' => wptoolset_form_get_conditional_data( 'post' )), ) ); } break;*/ /* Usermeta */ case 'um_repetitive_add': if (isset($_GET['user_id'])) { $user_id = $_GET['user_id']; } else { $user_id = wpcf_usermeta_get_user(); } if (isset($_GET['field_id']) && current_user_can('edit_user', $user_id)) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta-post.php'; $field = wpcf_admin_fields_get_field(sanitize_text_field($_GET['field_id']), false, false, false, 'wpcf-usermeta'); global $wpcf; $wpcf->usermeta_repeater->set($user_id, $field); /* * * Force empty values! */ $wpcf->usermeta_repeater->cf['value'] = null; $wpcf->usermeta_repeater->meta = null; $form = $wpcf->usermeta_repeater->get_field_form(null, true); echo json_encode(array('output' => wpcf_form_simple($form) . wpcf_form_render_js_validation('#your-profile', false))); } else { echo json_encode(array('output' => 'params missing')); } break; case 'um_repetitive_delete': if (isset($_POST['user_id']) && isset($_POST['field_id']) && current_user_can('edit_user', intval($_POST['user_id']))) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; $user_id = intval($_POST['user_id']); $field = wpcf_admin_fields_get_field(sanitize_text_field($_POST['field_id']), false, false, false, 'wpcf-usermeta'); $meta_id = intval($_POST['meta_id']); if (!empty($field) && !empty($user_id) && !empty($meta_id)) { /* * * * Changed. * Since Types 1.2 */ global $wpcf; $wpcf->usermeta_repeater->set($user_id, $field); $wpcf->usermeta_repeater->delete($meta_id); echo json_encode(array('output' => 'deleted')); } else { echo json_encode(array('output' => 'field or post not found')); } } else { echo json_encode(array('output' => 'params missing')); } break; /* End Usermeta */ /* End Usermeta */ case 'repetitive_add': if (current_user_can('edit_posts') && isset($_GET['field_id'])) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php'; $field = wpcf_admin_fields_get_field(sanitize_text_field($_GET['field_id'])); $parent_post_id = intval($_GET['post_id']); /* * When post is new - post_id is 0 * We can safely set post_id to 1 cause * values compared are filtered anyway. */ if ($parent_post_id == 0) { $parent_post_id = 1; } $parent_post = get_post($parent_post_id); global $wpcf; $wpcf->repeater->set($parent_post, $field); /* * * Force empty values! */ $wpcf->repeater->cf['value'] = null; $wpcf->repeater->meta = null; $form = $wpcf->repeater->get_field_form(null, true); echo json_encode(array('output' => wpcf_form_simple($form) . wpcf_form_render_js_validation('#post', false))); } else { echo json_encode(array('output' => 'params missing')); } break; case 'repetitive_delete': if (current_user_can('edit_posts') && isset($_POST['post_id']) && isset($_POST['field_id'])) { require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; $post_id = intval($_POST['post_id']); $parent_post = get_post($post_id); $field = wpcf_admin_fields_get_field(sanitize_text_field($_POST['field_id'])); $meta_id = intval($_POST['meta_id']); if (!empty($field) && !empty($parent_post->ID) && !empty($meta_id)) { /* * * * Changed. * Since Types 1.2 */ global $wpcf; $wpcf->repeater->set($parent_post, $field); $wpcf->repeater->delete($meta_id); echo json_encode(array('output' => 'deleted')); } else { echo json_encode(array('output' => 'field or post not found')); } } else { echo json_encode(array('output' => 'params missing')); } break; case 'cd_verify': if (!current_user_can('edit_posts') || empty($_POST['wpcf']) && empty($_POST['wpcf_post_relationship'])) { die; } WPCF_Loader::loadClass('helper.ajax'); $js_execute = WPCF_Helper_Ajax::conditionalVerify($_POST); // Render JSON if (!empty($js_execute)) { echo json_encode(array('output' => '', 'execute' => $js_execute, 'wpcf_nonce_ajax_callback' => wp_create_nonce('execute'))); } die; break; case 'cd_group_verify': require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/conditional-display.php'; $group = wpcf_admin_fields_get_group(sanitize_text_field($_POST['group_id'])); if (!current_user_can('edit_posts') || empty($group)) { echo json_encode(array('output' => '')); die; } $execute = ''; $group['conditional_display'] = get_post_meta($group['id'], '_wpcf_conditional_display', true); // Filter meta values (switch them with $_POST values) add_filter('get_post_metadata', 'wpcf_cd_meta_ajax_validation_filter', 10, 4); $parent_post = false; if (isset($_SERVER['HTTP_REFERER'])) { $split = explode('?', $_SERVER['HTTP_REFERER']); if (isset($split[1])) { parse_str($split[1], $vars); if (isset($vars['post'])) { $parent_post = get_post($vars['post']); } } } // Dummy post if (!$parent_post) { $parent_post = new stdClass(); $parent_post->ID = 1; } if (!empty($group['conditional_display']['conditions'])) { $result = wpcf_cd_post_groups_filter(array(0 => $group), $parent_post, 'group'); if (!empty($result)) { $result = array_shift($result); $passed = $result['_conditional_display'] == 'passed' ? true : false; } else { $passed = false; } if (!$passed) { $execute = 'jQuery("#wpcf-group-' . $group['slug'] . '").slideUp().find(".wpcf-cd-group")' . '.addClass(\'wpcf-cd-group-failed\')' . '.removeClass(\'wpcf-cd-group-passed\').hide();'; } else { $execute = 'jQuery("#wpcf-group-' . $group['slug'] . '").show().find(".wpcf-cd-group")' . '.addClass(\'wpcf-cd-group-passed\')' . '.removeClass(\'wpcf-cd-group-failed\').slideDown();'; } } // Remove filter meta values (switch them with $_POST values) remove_filter('get_post_metadata', 'wpcf_cd_meta_ajax_validation_filter', 10, 4); echo json_encode(array('output' => '', 'execute' => $execute, 'wpcf_nonce_ajax_callback' => wp_create_nonce('execute'))); break; default: break; } if (function_exists('wpcf_ajax')) { wpcf_ajax(); } die; }
/** * Calls view function for specific field type. * * @param type $field * @param type $atts * @return type */ function types_render_field($field_id = null, $params = array(), $content = null, $code = '') { if (empty($field_id)) { return ''; } global $wpcf; // HTML var holds actual output $html = ''; // Set post ID to global $post_id = get_the_ID(); // Check if other post required if (isset($params['post_id'])) { // If numeric value if (is_numeric($params['post_id'])) { $post_id = intval($params['post_id']); // WP parent } else { if ($params['post_id'] == '$parent') { $current_post = get_post($post_id); if (empty($current_post->post_parent)) { return ''; } $post_id = $current_post->post_parent; // Types parent } else { if (strpos($params['post_id'], '$') === 0) { $post_id = intval(WPCF_Relationship::get_parent($post_id, trim($params['post_id'], '$'))); } } } } if (empty($post_id)) { return ''; } // Set post $post = get_post($post_id); if (empty($post)) { return ''; } // Get field $field = types_get_field($field_id); // If field not found return empty string if (empty($field)) { // Log if (!function_exists('wplogger')) { require_once WPCF_EMBEDDED_ABSPATH . '/common/wplogger.php'; } global $wplogger; $wplogger->log('types_render_field call for missing field \'' . $field_id . '\'', WPLOG_DEBUG); return ''; } // Set field $wpcf->field->set($post, $field); // See if repetitive if (types_is_repetitive($field)) { $wpcf->repeater->set($post_id, $field); $_meta = $wpcf->repeater->_get_meta(); $meta = $_meta['custom_order']; // Sometimes if meta is empty - array(0 => '') is returned if (count($meta) == 1 && reset($meta) == '') { return ''; } if (!empty($meta)) { $output = ''; if (isset($params['index'])) { $index = $params['index']; } else { $index = ''; } // Allow wpv-for-each shortcode to set the index $index = apply_filters('wpv-for-each-index', $index); if ($index === '') { $output = array(); foreach ($meta as $temp_key => $temp_value) { $params['field_value'] = $temp_value; $temp_output = types_render_field_single($field, $params, $content, $code, $temp_key); if (!empty($temp_output)) { $output[] = $temp_output; } } if (!empty($output) && isset($params['separator']) && $params['separator'] !== '') { $output = implode(html_entity_decode($params['separator']), $output); } else { if (!empty($output)) { $output = implode(' ', $output); } else { return ''; } } } else { // Make sure indexed right $_index = 0; foreach ($meta as $temp_key => $temp_value) { if ($_index == $index) { $params['field_value'] = $temp_value; return types_render_field_single($field, $params, $content, $code, $temp_key); } $_index++; } // If missed index return ''; } $html = $output; } else { return ''; } } else { // Non-repetitive field $params['field_value'] = wpcf_get_post_meta($post_id, wpcf_types_get_meta_prefix($field) . $field['slug'], true); if ($params['field_value'] == '' && $field['type'] != 'checkbox') { return ''; } $html = types_render_field_single($field, $params, $content, $code, $wpcf->field->meta_object->meta_id); } return $wpcf->field->html($html, $params); }