コード例 #1
0
 /**
  * Summary.
  *
  * Description.
  *
  * @since x.x.x
  * @access (for functions: only use if private)
  *
  * @see Function/method/class relied on
  * @link URL
  * @global type $varname Description.
  * @global type $varname Description.
  *
  * @param type $var Description.
  * @param type $var Optional. Description.
  * @return type Description.
  */
 public function field_save()
 {
     /**
      * check nonce
      */
     if (false || !isset($_REQUEST['_wpnonce']) || !isset($_REQUEST['id']) || !isset($_REQUEST['group_id']) || !isset($_REQUEST['meta_type']) || !isset($_REQUEST['conditions']) || !isset($_REQUEST['group_conditions']) || !wp_verify_nonce($_REQUEST['_wpnonce'], $this->get_nonce('wpcf-conditional-apply', $_REQUEST['group_id']))) {
         $this->verification_failed_and_die();
     }
     $id = $_REQUEST['id'];
     $group_conditions = $_REQUEST['group_conditions'] == 1 ? true : false;
     $conditions_set = false;
     $conditions = array();
     parse_str($_REQUEST['conditions'], $conditions);
     // group conditions
     if ($group_conditions) {
         $id = $_REQUEST['group_id'];
         if (isset($conditions['wpcf']['group']['conditional_display']['conditions'])) {
             $conditions_set = $conditions['wpcf']['group']['conditional_display']['conditions'];
         }
         // single field conditions
     } elseif (isset($conditions['wpcf']['fields'][$id]['conditional_display']['conditions'])) {
         $conditions_set = $conditions['wpcf']['fields'][$id]['conditional_display']['conditions'];
     }
     // update condtions
     if ($conditions_set) {
         // filter unfilled fields
         $conditions_to_save = array();
         foreach ($conditions_set as $key => $one) {
             if (empty($one['field'])) {
                 continue;
             }
             $conditions_to_save[$key] = $one;
         }
         $this->update_conditions($id, $_REQUEST['meta_type'], array('relation' => isset($conditions['relation']) ? $conditions['relation'] : 'AND', 'conditions' => $conditions_to_save, 'custom' => isset($conditions['custom']) ? $conditions['custom'] : '', 'custom_use' => isset($conditions['custom_use']) ? intval($conditions['custom_use']) : 0), $group_conditions);
     } else {
         $this->remove_conditions($id, $group_conditions);
         die('');
     }
     $field = $group_conditions ? array('data' => array('conditional_display' => get_post_meta($id, '_wpcf_conditional_display', true))) : wpcf_admin_fields_get_field(sanitize_text_field($_REQUEST['id']), false, true);
     require_once WPCF_ABSPATH . '/includes/conditional-display.php';
     echo wpcf_conditional_get_curent($field);
     die;
 }
コード例 #2
0
/**
 * Conditional display form.
 *
 * @param array $form form data
 * @param array $data
 * @param bool|mixed $group
 *
 * @return array
 */
function wpcf_cd_admin_form_filter($form, $data, $group = false)
{
    $meta_type = isset($data['meta_type']) ? $data['meta_type'] : 'postmeta';
    if ($group) {
        $name = 'wpcf[group][conditional_display]';
    } else {
        $name = 'wpcf[fields][' . $data['id'] . '][conditional_display]';
    }
    // Count
    if (!empty($data['data']['conditional_display']['conditions'])) {
        $conditions = $data['data']['conditional_display']['conditions'];
        $count = count($conditions);
        $_count_txt = $count;
    } else {
        $_count_txt = '';
        $count = 1;
    }
    /**
     * state of conditional display custom use
     */
    $use_custom_logic = false;
    if (true && array_key_exists('data', $data) && is_array($data['data']) && array_key_exists('conditional_display', $data['data']) && is_array($data['data']['conditional_display']) && array_key_exists('custom_use', $data['data']['conditional_display']) && !empty($data['data']['conditional_display']['custom_use'])) {
        $use_custom_logic = true;
    }
    if ($group) {
        $form['group-open'] = array('#type' => 'markup', '#markup' => '<div class="wpcf-filter-container js-wpcf-filter-container">');
    }
    /**
     * custom use
     */
    $form['cd-custom_use'] = array('#type' => 'hidden', '#name' => 'custom_use', '#default_value' => isset($data['data']['conditional_display']['custom_use']), '#attributes' => array('class' => 'conditional-display-custom-use', 'wpcf-field' => '#form', 'wpcf-field-name' => 'custom_use'), '#value' => $use_custom_logic);
    if ($group) {
        $form['cd-open'] = array('#type' => 'markup', '#markup' => sprintf('<h3>%s</h3>', __('Data-dependent display filters', 'wpcf')));
        $form['cd-open-description'] = array('#type' => 'markup', '#markup' => sprintf('<p class="description">%s</p>', __('Specify additional filters that control this Field Group\'s display, based on values of Post Fields.', 'wpcf')));
    } else {
        // We will display a message that this functionality is not supported.
        switch ($meta_type) {
            case 'usermeta':
                $message = __('Conditional display is not supported for User fields.', 'wpcf');
                break;
            case 'termmeta':
                $message = __('Conditional display is not supported for Term fields.', 'wpcf');
                break;
            default:
                $message = '';
                break;
        }
        $form['cd-open'] = array('#type' => 'markup', '#title' => __('Conditional display', 'wpcf'), '#markup' => $message, '#inline' => true, '#pattern' => '<tr class="wpcf-border-top"><td><LABEL></td><td><ERROR><BEFORE><ELEMENT><AFTER>');
    }
    $current = wpcf_conditional_get_curent($data);
    if (empty($current) && !isset($data['id'])) {
        $form['alert'] = array('#type' => 'notice', '#markup' => __('Please save first, before you can edit the conditional display.', 'wpcf'));
    } else {
        $add_edit_condition_button = false;
        $action = $nonce = '';
        $classes = array('js-wpcf-condition-button-edit');
        switch ($meta_type) {
            case 'postmeta':
                $action = 'wpcf_edit_field_condition_get';
                $nonce = wp_create_nonce('wpcf-conditional-get-' . $data['id']);
                $add_edit_condition_button = true;
                break;
            case 'custom_fields_group':
                $action = 'wpcf_edit_custom_field_group_get';
                $nonce = wp_create_nonce('wpcf-conditional-get-' . $data['group_id']);
                $add_edit_condition_button = true;
                $classes[] = 'alignright';
                break;
        }
        if ($add_edit_condition_button) {
            $form['cd-button'] = array('#name' => 'cd-button', '#type' => 'button', '#before' => sprintf('<span class="js-wpcf-condition-preview">%s</span><span class="js-wpcf-condition-data"></span>', $current), '#value' => empty($current) ? __('Set condition(s)', 'wpcf') : __('Edit condition(s)', 'wpcf'), '#attributes' => array('class' => implode(' ', $classes), 'data-wpcf-meta-type' => $meta_type, 'data-wpcf-action' => $action, 'data-wpcf-id' => $data['id'], 'data-wpcf-group-id' => isset($data['group_id']) ? $data['group_id'] : 0, 'data-wpcf-group' => $group, 'data-wpcf-nonce' => $nonce, 'data-wpcf-buttons-apply-nonce' => wp_create_nonce('wpcf-conditional-apply-' . $data['group_id']), 'data-wpcf-buttons-apply' => esc_attr__('Apply', 'wpcf'), 'data-wpcf-buttons-cancel' => esc_attr__('Cancel', 'wpcf'), 'data-wpcf-dialog-title' => esc_attr__('Data-dependent display filters', 'wpcf'), 'data-wpcf-message-loading' => esc_attr__('Please Wait, Loading…', 'wpcf'), 'data-wpcf-label-set-conditions' => __('Set condition(s)', 'wpcf'), 'data-wpcf-label-edit-condition' => __('Edit condition(s)', 'wpcf')));
        }
    }
    if ($group) {
        $form['cd-close'] = array('#type' => 'markup', '#markup' => '</div>');
    } else {
        $form['cd-close'] = array('#type' => 'markup', '#markup' => '', '#inline' => true, '#pattern' => '</td></tr>');
    }
    return $form;
}