PodsField_Pick::admin_ajax_relationship PHP Method

admin_ajax_relationship() public method

Handle autocomplete AJAX
Since: 2.3
    public function admin_ajax_relationship()
    {
        pods_session_start();
        // Sanitize input
        $params = pods_unslash((array) $_POST);
        foreach ($params as $key => $value) {
            if ('action' == $key) {
                continue;
            }
            unset($params[$key]);
            $params[str_replace('_podsfix_', '', $key)] = $value;
        }
        $params = (object) $params;
        $uid = @session_id();
        if (is_user_logged_in()) {
            $uid = 'user_' . get_current_user_id();
        }
        $nonce_check = 'pods_relationship_' . (int) $params->pod . '_' . $uid . '_' . $params->uri . '_' . (int) $params->field;
        if (!isset($params->_wpnonce) || false === wp_verify_nonce($params->_wpnonce, $nonce_check)) {
            pods_error(__('Unauthorized request', 'pods'), PodsInit::$admin);
        }
        $api = pods_api();
        $pod = $api->load_pod(array('id' => (int) $params->pod));
        $field = $api->load_field(array('id' => (int) $params->field, 'table_info' => true));
        $id = (int) $params->id;
        $limit = 15;
        if (isset($params->limit)) {
            $limit = (int) $params->limit;
        }
        $page = 1;
        if (isset($params->page)) {
            $page = (int) $params->page;
        }
        if (!isset($params->query) || strlen(trim($params->query)) < 1) {
            pods_error(__('Invalid field request', 'pods'), PodsInit::$admin);
        } elseif (empty($pod) || empty($field) || $pod['id'] != $field['pod_id'] || !isset($pod['fields'][$field['name']])) {
            pods_error(__('Invalid field request', 'pods'), PodsInit::$admin);
        } elseif ('pick' != $field['type'] || empty($field['table_info'])) {
            pods_error(__('Invalid field', 'pods'), PodsInit::$admin);
        } elseif ('single' == pods_var(self::$type . '_format_type', $field) && 'autocomplete' == pods_var(self::$type . '_format_single', $field)) {
            pods_error(__('Invalid field', 'pods'), PodsInit::$admin);
        } elseif ('multi' == pods_var(self::$type . '_format_type', $field) && 'autocomplete' == pods_var(self::$type . '_format_multi', $field)) {
            pods_error(__('Invalid field', 'pods'), PodsInit::$admin);
        }
        $object_params = array('name' => $field['name'], 'value' => null, 'options' => array_merge($field, $field['options']), 'pod' => $pod, 'id' => $id, 'context' => 'admin_ajax_relationship', 'data_params' => $params, 'page' => $page, 'limit' => $limit);
        $pick_data = apply_filters('pods_field_pick_data_ajax', null, $field['name'], null, $field, $pod, $id);
        if (null !== $pick_data) {
            $items = $pick_data;
        } else {
            $items = $this->get_object_data($object_params);
        }
        if (!empty($items) && isset($items[0]) && !is_array($items[0])) {
            $new_items = array();
            foreach ($items as $id => $text) {
                $new_items[] = array('id' => $id, 'text' => $text, 'image' => '');
            }
            $items = $new_items;
        }
        $items = apply_filters('pods_field_pick_data_ajax_items', $items, $field['name'], null, $field, $pod, $id);
        $items = array('results' => $items);
        wp_send_json($items);
        die;
        // KBAI!
    }