Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 34 additions & 52 deletions includes/class-create-block-theme-api.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class CBT_Theme_API {
*/
public function __construct() {
add_action( 'rest_api_init', array( $this, 'register_rest_routes' ) );
add_filter( 'rest_prepare_theme', array( $this, 'add_additional_data_to_theme_response' ), 10, 2 );
}

/**
Expand Down Expand Up @@ -111,28 +112,6 @@ public function register_rest_routes() {
},
)
);
register_rest_route(
'create-block-theme/v1',
'/get-readme-data',
array(
'methods' => 'GET',
'callback' => array( $this, 'rest_get_readme_data' ),
'permission_callback' => function () {
return current_user_can( 'edit_theme_options' );
},
)
);
register_rest_route(
'create-block-theme/v1',
'/get-theme-data',
array(
'methods' => 'GET',
'callback' => array( $this, 'rest_get_theme_data' ),
'permission_callback' => function () {
return current_user_can( 'edit_theme_options' );
},
),
);
register_rest_route(
'create-block-theme/v1',
'/font-families',
Expand All @@ -157,44 +136,47 @@ public function register_rest_routes() {
);
}

function rest_get_theme_data() {
try {
$theme_data = CBT_Theme_JSON_Resolver::get_theme_file_contents();
return new WP_REST_Response(
array(
'status' => 'SUCCESS',
'message' => __( 'Theme data retrieved.', 'create-block-theme' ),
'data' => $theme_data,
),
);
} catch ( Exception $error ) {
return new WP_REST_Response(
array(
'status' => 'FAILURE',
'message' => $error->getMessage(),
)
);
/**
* Add README data and theme.json data to the current theme REST API response.
*
* @param WP_REST_Response $response The response object.
* @param WP_Theme $theme The theme object.
* @return WP_REST_Response Modified response object.
*/
function add_additional_data_to_theme_response( $response, $theme ) {
if ( ! $theme || ! $response ) {
return $response;
}
}

function rest_get_readme_data() {
$current_theme = wp_get_theme();
if ( $theme->get_stylesheet() !== $current_theme->get_stylesheet() ) {
return $response;
}

$data = $response->get_data();

// Add README data and theme.json data.
try {
$readme_data = CBT_Theme_Readme::get_sections();
return new WP_REST_Response(
array(
'status' => 'SUCCESS',
'message' => __( 'Readme file data retrieved.', 'create-block-theme' ),
'data' => $readme_data,
)
);
$data['readme'] = CBT_Theme_Readme::get_sections();
$data['theme_json'] = CBT_Theme_JSON_Resolver::get_theme_file_contents();
} catch ( Exception $error ) {
return new WP_REST_Response(
return new WP_Error(
'theme_data_retrieval_failed',
sprintf(
/* translators: %1$s: error message */
__( 'Failed to retrieve theme data: %1$s', 'create-block-theme' ),
$error->getMessage()
),
array(
'status' => 'FAILURE',
'message' => $error->getMessage(),
'status' => 500,
'code' => $error->getCode(),
)
);
}

$response->set_data( $data );

return $response;
}

function rest_clone_theme( $request ) {
Expand Down
28 changes: 13 additions & 15 deletions src/editor-sidebar/json-editor-modal.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,32 +12,30 @@ import { useState, useEffect } from '@wordpress/element';
import { Modal } from '@wordpress/components';
import { useSelect } from '@wordpress/data';

/**
* Internal dependencies
*/
import { fetchThemeJson } from '../resolvers';

const ThemeJsonEditorModal = ( { onRequestClose } ) => {
const [ themeData, setThemeData ] = useState( '' );
const themeName = useSelect( ( select ) =>
select( 'core' ).getCurrentTheme()
)?.name?.raw;
const fetchThemeData = async () => {
setThemeData( await fetchThemeJson() );
};
const handleSave = () => {};
const themeJsonData = useSelect(
( select ) => select( 'core' ).getCurrentTheme(),
[]
);

useEffect( () => {
fetchThemeData();
} );
if ( themeJsonData ) {
setThemeData(
JSON.stringify( themeJsonData?.theme_json, null, 2 )
);
}
}, [ themeJsonData ] );

const handleSave = () => {};

return (
<Modal
size="large"
title={ sprintf(
// translators: %s: theme name.
__( 'theme.json for %s', 'create-block-theme' ),
themeName
themeJsonData.name.raw
) }
onRequestClose={ onRequestClose }
className="create-block-theme__theme-json-modal"
Expand Down
48 changes: 16 additions & 32 deletions src/editor-sidebar/metadata-editor-modal.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { MediaUpload, MediaUploadCheck } from '@wordpress/block-editor';
/**
* Internal dependencies
*/
import { postUpdateThemeMetadata, fetchReadmeData } from '../resolvers';
import { postUpdateThemeMetadata } from '../resolvers';
import { getFontsCreditsText } from '../utils/fonts';
import { generateWpVersions } from '../utils/generate-versions';

Expand Down Expand Up @@ -70,37 +70,21 @@ export const ThemeMetadataEditorModal = ( { onRequestClose } ) => {
return;
}

const fetchData = async () => {
try {
const readmeData = await fetchReadmeData();
setTheme( {
name: themeData.name.raw,
description: themeData.description.raw,
uri: themeData.theme_uri.raw,
version: themeData.version,
requires_wp: themeData.requires_wp,
author: themeData.author.raw,
author_uri: themeData.author_uri.raw,
tags_custom: themeData.tags.rendered,
screenshot: themeData.screenshot,
recommended_plugins: readmeData.recommended_plugins,
font_credits: readmeData.fonts,
image_credits: readmeData.images,
} );
} catch ( error ) {
createErrorNotice(
error.message ||
__(
'Failed to fetch theme data.',
'create-block-theme'
),
{ type: 'snackbar' }
);
}
};

fetchData();
}, [ themeData, createErrorNotice ] );
setTheme( {
name: themeData.name.raw,
description: themeData.description.raw,
uri: themeData.theme_uri.raw,
version: themeData.version,
requires_wp: themeData.requires_wp,
author: themeData.author.raw,
author_uri: themeData.author_uri.raw,
tags_custom: themeData.tags.rendered,
screenshot: themeData.screenshot,
recommended_plugins: themeData.readme.recommended_plugins || '',
font_credits: themeData.readme.fonts || '',
image_credits: themeData.readme.images || '',
} );
}, [ themeData ] );

const handleUpdateClick = () => {
postUpdateThemeMetadata( theme )
Expand Down
38 changes: 0 additions & 38 deletions src/resolvers.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,6 @@
*/
import apiFetch from '@wordpress/api-fetch';

export async function fetchThemeJson() {
return apiFetch( {
path: '/create-block-theme/v1/get-theme-data',
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
} ).then( ( response ) => {
if ( ! response?.data || 'SUCCESS' !== response?.status ) {
throw new Error(
`Failed to fetch theme data: ${
response?.message || response?.status
}`
);
}
return JSON.stringify( response?.data, null, 2 );
} );
}

export async function createBlankTheme( theme ) {
return apiFetch( {
path: '/create-block-theme/v1/create-blank',
Expand Down Expand Up @@ -82,25 +63,6 @@ export async function createChildTheme( theme ) {
} );
}

export async function fetchReadmeData() {
return apiFetch( {
path: '/create-block-theme/v1/get-readme-data',
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
} ).then( ( response ) => {
if ( ! response?.data || 'SUCCESS' !== response?.status ) {
throw new Error(
`Failed to fetch readme data: ${
response?.message || response?.status
}`
);
}
return response?.data;
} );
}

export async function postCreateThemeVariation( preferences ) {
return apiFetch( {
path: '/create-block-theme/v1/create-variation',
Expand Down
Loading