namespace Extendify\Library\Controllers;
defined('ABSPATH') || die('No direct access.');
use Extendify\Shared\Services\Sanitizer;
* The controller for persisting site data
* @return \WP_REST_Response
public static function get()
$data = \get_option('extendify_library_site_data', []);
return new \WP_REST_Response($data);
* @param \WP_REST_Request $request - The request.
* @return \WP_REST_Response
public static function store($request)
$data = json_decode($request->get_param('state'), true);
\update_option('extendify_library_site_data', Sanitizer::sanitizeArray($data));
return new \WP_REST_Response($data);
* @param \WP_REST_Request $request - The request.
* @return \WP_REST_Response
public static function single($request)
$key = $request->get_param('key');
$value = $request->get_param('value');
// Remove the 'extendify_' prefix if it exists.
if (strpos($key, 'extendify_') === 0) {
\update_option('extendify_' . $key, Sanitizer::sanitizeUnknown($value));
return new \WP_REST_Response($value);
* Update the user's global styles with the extendify utilities
* @return \WP_REST_Response
public static function addUtilsToGlobalStyles()
$globalStyles = get_posts([
'post_type' => 'wp_global_styles',
'post_status' => 'publish',
$extendifyCss = static::getDeactivationCss();
foreach ($globalStyles as $post) {
if (!isset($post->post_content)) {
$content = json_decode($post->post_content, true);
if (!isset($content['styles']['css'])) {
if (!isset($content['styles'])) {
$content['styles']['css'] = '';
$content['isGlobalStylesUserThemeJSON'] = true;
// If they already have extendify styles, leave it alone.
if (str_contains($content['styles']['css'], 'ext-')) {
$content['styles']['css'] .= ("\n\n" . $extendifyCss);
wp_update_post(wp_slash([
'post_content' => wp_json_encode($content),
return new \WP_REST_Response(['success' => true], 200);
* Custom CSS to be added on deactivation
public static function getDeactivationCss()
$theme = get_option('template');
if ($theme === 'twentytwenty') {
$css = '/* Twenty Twenty adds a lot of margin automatically to blocks.
We only want our own margin added to our patterns. */
.ext .wp-block-group__inner-container figure.wp-block-gallery.alignfull {
margin-top: unset !important;
margin-bottom: unset !important;
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
$content = file_get_contents(EXTENDIFY_PATH . 'public/build/utility-minimum.css');
return $css .= "\n\n" . $content;