File "class-evf-changelog.php"
Full Path: /home/rattkxnv/byattorney.com/wp-content/plugins/everest-forms/includes/RestApi/controllers/version1/class-evf-changelog.php
File size: 3.52 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Changelog Controller.
*
* @since 2.0.8.1
*
* @package EverestForms/Classes
*/
defined( 'ABSPATH' ) || exit;
/**
* EVF_Changelog Class.
*/
class EVF_Changelog {
/**
* The namespace of this controller's route.
*
* @var string The namespace of this controller's route.
*/
protected $namespace = 'everest-forms/v1';
/**
* The base of this controller's route.
*
* @var string The base of this controller's route.
*/
protected $rest_base = 'changelog';
/**
* Register routes.
*
* @since 2.0.8.1
*
* @return void
*/
public function register_routes() {
register_rest_route(
$this->namespace,
'/' . $this->rest_base,
array(
array(
'methods' => 'GET',
'callback' => array( $this, 'get_item' ),
'permission_callback' => array( $this, 'check_admin_permissions' ),
),
)
);
}
/**
* Get item.
*
* @param \WP_Rest_Request $request Full detail about the request.
* @return \WP_Error|\WP_REST_Response
*/
public function get_item( $request ) {
$changelog = $this->read_changelog();
$changelog = $this->parse_changelog( $changelog );
return new \WP_REST_Response(
array(
'success' => true,
'changelog' => $changelog,
),
200
);
}
/**
* Read changelog.
*
* @return \WP_Error|string
*/
protected function read_changelog() {
$raw_changelog = evf_file_get_contents( 'readme.txt' );
if ( ! $raw_changelog ) {
return new \WP_Error( 'changelog_read_error', esc_html__( 'Failed to read changelog.', 'everest-forms' ) );
}
return $raw_changelog;
}
/**
* Parse Changelog contents.
*
* @param string $raw_changelog Raw changelog that needs to be parsed properly.
*/
protected function parse_changelog( $raw_changelog ) {
if ( is_wp_error( $raw_changelog ) ) {
return $raw_changelog;
}
$entries = preg_split( '/(?=\=\s\d+\.\d+\.\d+|\Z)/', $raw_changelog, -1, PREG_SPLIT_NO_EMPTY );
array_shift( $entries );
$parsed_changelog = array();
foreach ( $entries as $entry ) {
$date = null;
$version = null;
if ( preg_match( '/^\=\s*(\d+(?:\.\d+)*?)\s+\-\s+(\d{2}|\bxx\b)-(\d{2}|\bxx\b)-(\d{4}|\bxxxx\b)/', $entry, $matches ) ) {
$version = $matches[1] ?? null; // phpcs:ignore
// $date = $matches[2] ?? null; // phpcs:ignore
$day = $matches[2] === 'xx' ? 'xx' : $matches[2];
$month = $matches[3] === 'xx' ? 'xx' : $matches[3];
$year = $matches[4] === 'xxxx' ? 'xxxx' : $matches[4];
$date = "$day-$month-$year";
}
$changes_arr = array();
if ( preg_match_all( '/^\* (\w+(\s*-\s*.+)?)$/m', $entry, $matches ) ) {
$changes = $matches[1] ?? null; // phpcs:ignore
if ( is_array( $changes ) ) {
foreach ( $changes as $change ) {
$parts = explode( ' - ', $change );
$tag = trim( $parts[0] ?? '' ); // phpcs:ignore
$data = isset( $parts[1] ) ? trim( $parts[1] ) : '';
if ( isset( $changes_arr[ $tag ] ) ) {
$changes_arr[ $tag ][] = $data;
} else {
$changes_arr[ $tag ] = array( $data );
}
}
}
}
if ( $version && $date && $changes_arr ) {
$parsed_changelog[] = array(
'version' => $version,
'date' => $date,
'changes' => $changes_arr,
);
}
}
return $parsed_changelog;
}
/**
* Check if a given request has access to update a setting
*
* @param WP_REST_Request $request Full data about the request.
* @return WP_Error|bool
*/
public static function check_admin_permissions( $request ) {
return current_user_can( 'manage_options' );
}
}