File "rest-api.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/contact-form-7/includes/rest-api.php
File
size: 11.7 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
add_action('rest_api_init', function () {
$controller = new WPCF7_REST_Controller();
$controller->register_routes();
}, 10, 0);
class WPCF7_REST_Controller
{
const route_namespace = 'contact-form-7/v1';
public function register_routes()
{
register_rest_route(self::route_namespace, '/contact-forms', array(array('methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'get_contact_forms'), 'permission_callback' => function () {
if (current_user_can('wpcf7_read_contact_forms')) {
return true;
} else {
return new WP_Error('wpcf7_forbidden', __("You are not allowed to access contact forms.", 'contact-form-7'), array('status' => 403));
}
}), array('methods' => WP_REST_Server::CREATABLE, 'callback' => array($this, 'create_contact_form'), 'permission_callback' => function () {
if (current_user_can('wpcf7_edit_contact_forms')) {
return true;
} else {
return new WP_Error('wpcf7_forbidden', __("You are not allowed to create a contact form.", 'contact-form-7'), array('status' => 403));
}
})));
register_rest_route(self::route_namespace, '/contact-forms/(?P<id>\\d+)', array('args' => $this->get_argument_schema(), array('methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'get_contact_form'), 'permission_callback' => function (WP_REST_Request $request) {
$id = (int) $request->get_param('id');
if (current_user_can('wpcf7_edit_contact_form', $id)) {
return true;
} else {
return new WP_Error('wpcf7_forbidden', __("You are not allowed to access the requested contact form.", 'contact-form-7'), array('status' => 403));
}
}), array('methods' => WP_REST_Server::EDITABLE, 'callback' => array($this, 'update_contact_form'), 'permission_callback' => function (WP_REST_Request $request) {
$id = (int) $request->get_param('id');
if (current_user_can('wpcf7_edit_contact_form', $id)) {
return true;
} else {
return new WP_Error('wpcf7_forbidden', __("You are not allowed to access the requested contact form.", 'contact-form-7'), array('status' => 403));
}
}), array('methods' => WP_REST_Server::DELETABLE, 'callback' => array($this, 'delete_contact_form'), 'permission_callback' => function (WP_REST_Request $request) {
$id = (int) $request->get_param('id');
if (current_user_can('wpcf7_delete_contact_form', $id)) {
return true;
} else {
return new WP_Error('wpcf7_forbidden', __("You are not allowed to access the requested contact form.", 'contact-form-7'), array('status' => 403));
}
})));
register_rest_route(self::route_namespace, '/contact-forms/(?P<id>\\d+)/feedback', array('args' => $this->get_argument_schema(), array('methods' => WP_REST_Server::CREATABLE, 'callback' => array($this, 'create_feedback'), 'permission_callback' => '__return_true')));
register_rest_route(self::route_namespace, '/contact-forms/(?P<id>\\d+)/refill', array('args' => $this->get_argument_schema(), array('methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'get_refill'), 'permission_callback' => '__return_true')));
}
public function get_contact_forms(WP_REST_Request $request)
{
$args = array();
$per_page = $request->get_param('per_page');
if (null !== $per_page) {
$args['posts_per_page'] = (int) $per_page;
}
$offset = $request->get_param('offset');
if (null !== $offset) {
$args['offset'] = (int) $offset;
}
$order = $request->get_param('order');
if (null !== $order) {
$args['order'] = (string) $order;
}
$orderby = $request->get_param('orderby');
if (null !== $orderby) {
$args['orderby'] = (string) $orderby;
}
$search = $request->get_param('search');
if (null !== $search) {
$args['s'] = (string) $search;
}
$items = WPCF7_ContactForm::find($args);
$response = array();
foreach ($items as $item) {
$response[] = array('id' => $item->id(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale());
}
return rest_ensure_response($response);
}
public function create_contact_form(WP_REST_Request $request)
{
$id = (int) $request->get_param('id');
if ($id) {
return new WP_Error('wpcf7_post_exists', __("Cannot create existing contact form.", 'contact-form-7'), array('status' => 400));
}
$args = $request->get_params();
$args['id'] = -1;
$context = $request->get_param('context');
$item = wpcf7_save_contact_form($args, $context);
if (!$item) {
return new WP_Error('wpcf7_cannot_save', __("There was an error saving the contact form.", 'contact-form-7'), array('status' => 500));
}
$response = array('id' => $item->id(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale(), 'properties' => $this->get_properties($item), 'config_errors' => array());
if (wpcf7_validate_configuration()) {
$config_validator = new WPCF7_ConfigValidator($item);
$config_validator->validate();
$response['config_errors'] = $config_validator->collect_error_messages();
if ('save' == $context) {
$config_validator->save();
}
}
return rest_ensure_response($response);
}
public function get_contact_form(WP_REST_Request $request)
{
$id = (int) $request->get_param('id');
$item = wpcf7_contact_form($id);
if (!$item) {
return new WP_Error('wpcf7_not_found', __("The requested contact form was not found.", 'contact-form-7'), array('status' => 404));
}
$response = array('id' => $item->id(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale(), 'properties' => $this->get_properties($item));
return rest_ensure_response($response);
}
public function update_contact_form(WP_REST_Request $request)
{
$id = (int) $request->get_param('id');
$item = wpcf7_contact_form($id);
if (!$item) {
return new WP_Error('wpcf7_not_found', __("The requested contact form was not found.", 'contact-form-7'), array('status' => 404));
}
$args = $request->get_params();
$context = $request->get_param('context');
$item = wpcf7_save_contact_form($args, $context);
if (!$item) {
return new WP_Error('wpcf7_cannot_save', __("There was an error saving the contact form.", 'contact-form-7'), array('status' => 500));
}
$response = array('id' => $item->id(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale(), 'properties' => $this->get_properties($item), 'config_errors' => array());
if (wpcf7_validate_configuration()) {
$config_validator = new WPCF7_ConfigValidator($item);
$config_validator->validate();
$response['config_errors'] = $config_validator->collect_error_messages();
if ('save' == $context) {
$config_validator->save();
}
}
return rest_ensure_response($response);
}
public function delete_contact_form(WP_REST_Request $request)
{
$id = (int) $request->get_param('id');
$item = wpcf7_contact_form($id);
if (!$item) {
return new WP_Error('wpcf7_not_found', __("The requested contact form was not found.", 'contact-form-7'), array('status' => 404));
}
$result = $item->delete();
if (!$result) {
return new WP_Error('wpcf7_cannot_delete', __("There was an error deleting the contact form.", 'contact-form-7'), array('status' => 500));
}
$response = array('deleted' => true);
return rest_ensure_response($response);
}
public function create_feedback(WP_REST_Request $request)
{
$url_params = $request->get_url_params();
$item = null;
if (!empty($url_params['id'])) {
$item = wpcf7_contact_form($url_params['id']);
}
if (!$item) {
return new WP_Error('wpcf7_not_found', __("The requested contact form was not found.", 'contact-form-7'), array('status' => 404));
}
$unit_tag = wpcf7_sanitize_unit_tag($request->get_param('_wpcf7_unit_tag'));
$result = $item->submit();
$response = array_merge($result, array('into' => sprintf('#%s', $unit_tag), 'invalid_fields' => array()));
if (!empty($result['invalid_fields'])) {
$invalid_fields = array();
foreach ((array) $result['invalid_fields'] as $name => $field) {
$name = sanitize_html_class($name);
$invalid_fields[] = array('into' => sprintf('span.wpcf7-form-control-wrap.%s', $name), 'message' => $field['reason'], 'idref' => $field['idref'], 'error_id' => sprintf('%1$s-ve-%2$s', $unit_tag, $name));
}
$response['invalid_fields'] = $invalid_fields;
}
$response = wpcf7_apply_filters_deprecated('wpcf7_ajax_json_echo', array($response, $result), '5.2', 'wpcf7_feedback_response');
$response = apply_filters('wpcf7_feedback_response', $response, $result);
return rest_ensure_response($response);
}
public function get_refill(WP_REST_Request $request)
{
$id = (int) $request->get_param('id');
$item = wpcf7_contact_form($id);
if (!$item) {
return new WP_Error('wpcf7_not_found', __("The requested contact form was not found.", 'contact-form-7'), array('status' => 404));
}
$response = wpcf7_apply_filters_deprecated('wpcf7_ajax_onload', array(array()), '5.2', 'wpcf7_refill_response');
$response = apply_filters('wpcf7_refill_response', array());
return rest_ensure_response($response);
}
private function get_properties(WPCF7_ContactForm $contact_form)
{
$properties = $contact_form->get_properties();
$properties['form'] = array('content' => (string) $properties['form'], 'fields' => array_map(function (WPCF7_FormTag $form_tag) {
return array('type' => $form_tag->type, 'basetype' => $form_tag->basetype, 'name' => $form_tag->name, 'options' => $form_tag->options, 'raw_values' => $form_tag->raw_values, 'labels' => $form_tag->labels, 'values' => $form_tag->values, 'pipes' => $form_tag->pipes instanceof WPCF7_Pipes ? $form_tag->pipes->to_array() : $form_tag->pipes, 'content' => $form_tag->content);
}, $contact_form->scan_form_tags()));
$properties['additional_settings'] = array('content' => (string) $properties['additional_settings'], 'settings' => array_filter(array_map(function ($setting) {
$pattern = '/^([a-zA-Z0-9_]+)[\\t ]*:(.*)$/';
if (preg_match($pattern, $setting, $matches)) {
$name = trim($matches[1]);
$value = trim($matches[2]);
if (in_array($value, array('on', 'true'), true)) {
$value = true;
} elseif (in_array($value, array('off', 'false'), true)) {
$value = false;
}
return array($name, $value);
}
return false;
}, explode("\n", $properties['additional_settings']))));
return $properties;
}
private function get_argument_schema()
{
return array('id' => array('description' => __("Unique identifier for the contact form.", 'contact-form-7'), 'type' => 'integer', 'required' => true));
}
}