Files
roi-theme/wp-content/plugins/advanced-ads/includes/rest/class-placements.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

185 lines
4.7 KiB
PHP
Executable File

<?php
/**
* Rest Forms.
*
* @package AdvancedAds
* @author Advanced Ads <info@wpadvancedads.com>
* @since 1.50.0
*/
namespace AdvancedAds\Rest;
use WP_REST_Request;
use AdvancedAds\Constants;
use AdvancedAds\Utilities\Conditional;
use AdvancedAds\Framework\Utilities\Arr;
use AdvancedAds\Framework\Interfaces\Routes_Interface;
defined( 'ABSPATH' ) || exit;
/**
* Placement screen modal forms handling
*/
class Placements implements Routes_Interface {
/**
* Registers routes with WordPress.
*
* @return void
*/
public function register_routes(): void {
register_rest_route(
Constants::REST_BASE,
'/placement',
[
[
'methods' => \WP_REST_Server::ALLMETHODS,
'callback' => [ $this, 'call_endpoint' ],
'permission_callback' => function () {
return Conditional::user_can( 'advanced_ads_manage_placements' );
},
],
]
);
}
/**
* Call the appropriate endpoint handler
*
* @param WP_REST_Request $request the request object.
*
* @return array
*/
public function call_endpoint( $request ) {
switch ( $request->get_method() ) {
case 'POST':
return $this->create( $request );
case 'PUT':
return $this->update( $request );
case 'GET':
return $this->read( $request );
default:
}
return [ 'error' => __( 'No endpoint found', 'advanced-ads' ) ];
}
/**
* Get placement data
*
* @param WP_REST_Request $request the request object.
*
* @return array
*/
public function read( $request ) {
$params = $request->get_params();
$placement = wp_advads_get_placement( (int) $params['id'] );
if ( ! $placement ) {
return [ 'error' => __( 'No placement found', 'advanced-ads' ) ];
}
/**
* Allow add-ons to send other placement props.
*/
$placement_data = apply_filters( 'advanced-ads-placement-read', $placement->get_data() );
return $placement_data;
}
/**
* Create placement
*
* @param WP_REST_Request $request the request object.
*
* @return mixed
*/
public function create( $request ) {
$body = json_decode( $request->get_body(), JSON_UNESCAPED_UNICODE );
parse_str( $body['fields'], $payload );
if ( ! wp_verify_nonce( sanitize_key( $payload['nonce'] ), 'advads-create-placement' ) ) {
return [ 'error' => __( 'Not authorized create', 'advanced-ads' ) ];
}
$placement_data = wp_unslash( $payload['advads'] );
if ( ! isset( $placement_data['placement'] ) ) {
return [ 'error' => __( 'No placement data provided', 'advanced-ads' ) ];
}
$placement_data = wp_unslash( $placement_data['placement'] );
$placement = wp_advads_create_new_placement( $placement_data['type'] ?? 'default' );
$placement->set_props( $placement_data );
$placement->save();
return apply_filters(
'advanced-ads-placements-updated',
[
'action' => 'create',
'placement_data' => $placement->get_data(),
'reload' => true,
'redirectUrl' => admin_url( 'edit.php?post_type=' . Constants::POST_TYPE_PLACEMENT ),
],
$placement
);
}
/**
* Update placement
*
* @param WP_REST_Request $request the request object.
*
* @return mixed
*/
public function update( $request ) {
$body = json_decode( $request->get_body(), JSON_UNESCAPED_UNICODE );
parse_str( $body['fields'], $payload );
if ( ! wp_verify_nonce( sanitize_key( $payload['nonce'] ), 'advads-update-placement' ) ) {
return [ 'error' => __( 'Not authorized update', 'advanced-ads' ) ];
}
$placement = wp_advads_get_placement( (int) $payload['post_ID'] );
if ( ! $placement ) {
return [ 'error' => __( 'Placement not found', 'advanced-ads' ) ];
}
$placement->set_title( sanitize_text_field( $payload['post_title'] ) );
$placement->set_status( sanitize_text_field( $payload['post_status'] ) );
if ( isset( $payload['advads']['placements'] ) ) {
$placement_data = wp_unslash( $payload['advads']['placements'] );
$placement->set_item( $placement_data['item'] );
$placement->set_props( $placement_data['options'] );
if ( ! Arr::get( $payload, 'advads.placements.options.repeat' ) && $placement->get_prop( 'repeat' ) ) {
$placement->set_prop( 'repeat', null );
}
if ( ! Arr::get( $payload, 'advads.placements.options.start_from_bottom' ) && $placement->get_prop( 'start_from_bottom' ) ) {
$placement->set_prop( 'start_from_bottom', null );
}
}
// Allow add-ons to trigger a page refresh or show errors if needed.
$results = apply_filters(
'advanced-ads-placements-updated',
[
'action' => 'update',
'payload' => $payload,
'title' => $placement->get_title(),
'item' => $placement->get_item(),
'placement_data' => $placement->get_data(),
'reload' => false,
],
$placement
);
$placement->save();
return $results;
}
}