wenpai.org/wp-content/plugins/plat-api/API/Plugins/UpdateCheck.php
2024-11-14 02:29:46 +08:00

87 lines
2.2 KiB
PHP

<?php
namespace Platform\API\API\Plugins;
use Platform\API\API\Base;
use Platform\API\Service\Plugin;
use Platform\API\Service\Translation;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Server;
class UpdateCheck extends Base {
public function __construct() {
register_rest_route( 'plugins/update-check', '1.1', array(
'methods' => WP_REST_Server::CREATABLE,
'callback' => array( $this, 'update_check' ),
) );
}
public function update_check( WP_REST_Request $request ): WP_REST_Response {
$params = $this->prepare_params( $request->get_params() );
$plugins = json_decode( $params['plugins'] ?? '[]', true );
if ( JSON_ERROR_NONE !== json_last_error() ) {
$args = array(
'message' => 'plugins 字段格式错误,无法解析为 Json',
);
$this->error( $args );
}
$plugins = $plugins['plugins'] ?? array();
$translations = json_decode( $params['translations'] ?? '[]', true );
if ( JSON_ERROR_NONE !== json_last_error() ) {
$args = array(
'message' => 'translations 字段格式错误,无法解析为 Json',
);
$this->error( $args );
}
$plugins_service = new Plugin();
$updated_plugins = $plugins_service->update_check( $plugins );
$translation_projects = $this->prepare_translation_projects( $plugins );
$translations_service = new Translation();
$updated_translations = $translations_service->update_check(
$translation_projects,
$translations,
'plugins',
'plugin'
);
$args = array(
'plugins' => $updated_plugins['update'],
'no_update' => $updated_plugins['no_update'],
'translations' => $updated_translations,
);
return new WP_REST_Response( $args );
}
private function prepare_params( mixed $params ): array {
$allowed = array(
'plugins',
'translations'
);
return array_filter( $params, function ( string $param ) use ( $allowed ) {
return in_array( $param, $allowed );
}, ARRAY_FILTER_USE_KEY );
}
private function prepare_translation_projects( array $plugins ): array {
$data = array();
foreach ( $plugins as $plugin ) {
if ( ! isset( $plugin['TextDomain'] ) || empty( $plugin['TextDomain'] ) ) {
continue;
}
$data[ $plugin['TextDomain'] ] = $plugin['Version'] ?? '';
}
return $data;
}
}