38217-vm/wp-content/plugins/mainwp/modules/cost-tracker/rest-api/version1/class-cost-tracker-rest-api-handle-v1.php
2026-02-05 17:08:59 +03:00

201 lines
5.7 KiB
PHP

<?php
/**
* MainWP Module Cost Tracker Rest Api class.
*
* @package MainWP\Dashboard
* @version 4.6
*/
namespace MainWP\Dashboard\Module\CostTracker;
use MainWP\Dashboard\MainWP_DB;
use MainWP\Dashboard\MainWP_DB_Client;
/**
* Class Cost_Tracker_Rest_Api_Handle_V1
*/
class Cost_Tracker_Rest_Api_Handle_V1 {
/**
* Protected static variable to hold the single instance of the class.
*
* @var mixed Default null
*/
private static $instance = null;
/**
* Method instance()
*
* Create public static instance.
*
* @static
* @return static::$instance
*/
public static function instance() {
if ( null === static::$instance ) {
static::$instance = new self();
}
return static::$instance;
}
/**
* Method valid_api_request_data_by()
*
* @param string $by By.
* @param string $value Value.
*
* @return mixed Result.
*/
public function valid_api_request_data_by( $by, $value ) {
$error = '';
if ( 'client_id' === $by ) {
$client_id = intval( $value );
$client = false;
if ( ! empty( $client_id ) ) {
$client = MainWP_DB_Client::instance()->get_wp_client_by( 'client_id', $client_id );
}
if ( empty( $client ) ) {
$error = esc_html__( 'Invalid Client ID or Client not found. Please try again.', 'mainwp' );
}
} elseif ( 'site_id' === $by ) {
$site_id = intval( $value );
$site = false;
if ( ! empty( $site_id ) ) {
$site = MainWP_DB::instance()->get_website_by_id( $site_id );
}
if ( empty( $site ) ) {
$error = esc_html__( 'Invalid Site ID or Site not found. Please try again.', 'mainwp' );
}
}
$result = array();
if ( ! empty( $error ) ) {
$result['ERROR'] = $error;
}
return $result;
}
/**
* Method prepare_api_costs_data()
*
* Handle get all costs.
*
* @param array $costs costs.
*/
public function prepare_api_costs_data( $costs ) {
if ( ! is_array( $costs ) ) {
$costs = array();
}
$fields = array(
'id',
'name',
'url',
'type',
'product_type',
'slug',
'license_type',
'cost_status',
'payment_method',
'price',
'renewal_type',
'last_renewal',
'next_renewal',
'last_alert', // to support assistant extension.
'sites',
'groups',
'clients',
'note',
);
$data = array();
if ( ! empty( $costs ) ) {
foreach ( $costs as $cost ) {
$item = array();
foreach ( $fields as $field ) {
$item[ $field ] = $this->get_cost_field_value( $cost, $field );
}
$data[ $cost->id ] = $item;
}
}
return $data;
}
/**
* Method get_cost_field_value().
*
* @param object $cost Object containing the cost data.
* @param string $field Data cost field.
*
* @return string value.
*/
public function get_cost_field_value( $cost, $field ) { //phpcs:ignore -- NOSONAR - complex method.
$value = '';
switch ( $field ) {
case 'id':
$value = intval( $cost->id );
break;
case 'name':
$value = esc_html( $cost->name );
break;
case 'url':
$value = esc_html( $cost->url );
break;
case 'type':
$value = esc_html( $cost->type );
break;
case 'product_type':
$value = esc_html( $cost->product_type );
break;
case 'slug':
$value = esc_html( $cost->slug );
break;
case 'license_type':
$value = esc_html( $cost->license_type );
break;
case 'cost_status':
$value = esc_html( $cost->cost_status );
break;
case 'payment_method':
$value = esc_html( $cost->payment_method );
break;
case 'price':
$value = esc_html( $cost->price );
break;
case 'renewal_type':
$value = esc_html( $cost->renewal_type );
break;
case 'last_renewal':
$value = ! empty( $cost->last_renewal ) ? esc_html( gmdate( 'Y-m-d H:i:s', (int) $cost->last_renewal ) ) : 0;
break;
case 'next_renewal':
$value = ! empty( $cost->next_renewal ) ? esc_html( gmdate( 'Y-m-d H:i:s', (int) $cost->next_renewal ) ) : 0;
break;
case 'last_alert':
$value = ! empty( $cost->last_alert ) ? esc_html( gmdate( 'Y-m-d H:i:s', (int) $cost->last_alert ) ) : 0;
break;
case 'sites':
$value = esc_html( $cost->sites );
break;
case 'groups':
$value = esc_html( $cost->groups );
break;
case 'clients':
$value = esc_html( $cost->clients );
break;
case 'note':
$value = apply_filters( 'mainwp_escape_content', $cost->note );
break;
default:
$value = 'N/A';
break;
}
return $value;
}
}
// End of class.