HEX
Server: LiteSpeed
System: Linux srv158.niagahoster.com 4.18.0-553.30.1.lve.el8.x86_64 #1 SMP Tue Dec 3 01:21:19 UTC 2024 x86_64
User: u1694298 (3732)
PHP: 7.4.33
Disabled: symlink,shell_exec,exec,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,show_source,pcntl_exec
Upload Files
File: /home/u1694298/www/wp-content/plugins/yop-poll/includes/REST/class-rest-templates.php
<?php
namespace YopPoll\REST;

use YopPoll\Database\Seeder;
use YopPoll\Models\Model_Template;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class REST_Templates extends REST_Base {

	public function register_routes() {
		register_rest_route( $this->namespace, '/templates', array(
			array(
				'methods'             => \WP_REST_Server::READABLE,
				'callback'            => array( $this, 'get_items' ),
				'permission_callback' => array( $this, 'check_admin_permission' ),
			),
			array(
				'methods'             => \WP_REST_Server::CREATABLE,
				'callback'            => array( $this, 'create_item' ),
				'permission_callback' => array( $this, 'check_admin_permission' ),
			),
		) );
	}

	public function get_items( $request ) {
		( new Seeder() )->seed();

		$model = new Model_Template();
		$items = $model->get_active();

		foreach ( $items as &$item ) {
			$item['options'] = is_string( $item['options'] )
				? json_decode( $item['options'], true ) ?? []
				: ( $item['options'] ?? [] );
		}
		unset( $item );

		return $this->success( array(
			'items' => $items,
			'total' => count( $items ),
		) );
	}

	public function create_item( $request ) {
		$body           = $request->get_json_params();
		$name           = sanitize_text_field( $body['name'] ?? '' );
		$base           = sanitize_text_field( $body['base'] ?? '' );
		$rendering_base = sanitize_key( $body['rendering_base'] ?? $base );

		if ( ! $name || ! $base ) {
			return $this->error( __( 'Name and base are required.', 'yop-poll' ), 422 );
		}

		$options = $body['options'] ?? [];
		$now     = current_time( 'mysql' );
		$model   = new Model_Template();

		$id = $model->insert( array(
			'name'           => $name,
			'base'           => $base,
			'rendering_base' => $rendering_base,
			'description'    => '',
			'options'        => wp_json_encode( $options ),
			'status'         => 'active',
			'added_date'     => $now,
		) );

		if ( ! $id ) {
			return $this->error( __( 'Failed to create template.', 'yop-poll' ), 500 );
		}

		$template             = $model->find( $id );
		$template['options']  = json_decode( $template['options'], true ) ?? [];
		return $this->success( $template, 201 );
	}
}