get_json_params(); $section = ! empty( $body['section'] ) ? sanitize_text_field( $body['section'] ) : null; $wizard = ! empty( $body['wizard'] ) ? $body['wizard'] : null; $options = aioseo()->options->noConflict(); $dynamicOptions = aioseo()->dynamicOptions->noConflict(); aioseo()->internalOptions->internal->wizard = wp_json_encode( $wizard ); // Process the importers. if ( 'importers' === $section && ! empty( $wizard['importers'] ) ) { $importers = $wizard['importers']; try { foreach ( $importers as $plugin ) { aioseo()->importExport->startImport( $plugin, [ 'settings', 'postMeta', 'termMeta' ] ); } } catch ( \Exception $e ) { // Import failed. Let's create a notification but move on. $notification = Models\Notification::getNotificationByName( 'import-failed' ); if ( ! $notification->exists() ) { Models\Notification::addNotification( [ 'slug' => uniqid(), 'notification_name' => 'install-mi', 'title' => __( 'SEO Plugin Import Failed', 'all-in-one-seo-pack' ), 'content' => __( 'Unfortunately, there was an error importing your SEO plugin settings. This could be due to an incompatibility in the version installed. Make sure you are on the latest version of the plugin and try again.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded 'type' => 'error', 'level' => [ 'all' ], 'button1_label' => __( 'Try Again', 'all-in-one-seo-pack' ), 'button1_action' => 'http://route#aioseo-tools&aioseo-scroll=aioseo-import-others&aioseo-highlight=aioseo-import-others:import-export', 'start' => gmdate( 'Y-m-d H:i:s' ) ] ); } } } // Save the category section. if ( ( 'category' === $section || 'searchAppearance' === $section ) && // We allow the user to update the site title/description in search appearance. ! empty( $wizard['category'] ) ) { $category = $wizard['category']; if ( ! empty( $category['category'] ) ) { aioseo()->internalOptions->internal->category = $category['category']; } if ( ! empty( $category['categoryOther'] ) ) { aioseo()->internalOptions->internal->categoryOther = $category['categoryOther']; } // If the home page is a static page, let's find and set that, // otherwise set our home page settings. $staticHomePage = 'page' === get_option( 'show_on_front' ) ? get_post( get_option( 'page_on_front' ) ) : null; if ( ! empty( $staticHomePage ) ) { $update = false; $page = Models\Post::getPost( $staticHomePage->ID ); if ( ! empty( $category['siteTitle'] ) ) { $update = true; $page->title = $category['siteTitle']; } if ( ! empty( $category['metaDescription'] ) ) { $update = true; $page->description = $category['metaDescription']; } if ( $update ) { $page->save(); } } if ( empty( $staticHomePage ) ) { if ( ! empty( $category['siteTitle'] ) ) { $options->searchAppearance->global->siteTitle = $category['siteTitle']; } if ( ! empty( $category['metaDescription'] ) ) { $options->searchAppearance->global->metaDescription = $category['metaDescription']; } } } // Save the additional information section. if ( 'additionalInformation' === $section && ! empty( $wizard['additionalInformation'] ) ) { $additionalInformation = $wizard['additionalInformation']; if ( ! empty( $additionalInformation['siteRepresents'] ) ) { $options->searchAppearance->global->schema->siteRepresents = $additionalInformation['siteRepresents']; } if ( ! empty( $additionalInformation['person'] ) ) { $options->searchAppearance->global->schema->person = $additionalInformation['person']; } if ( ! empty( $additionalInformation['organizationName'] ) ) { $options->searchAppearance->global->schema->organizationName = $additionalInformation['organizationName']; } if ( ! empty( $additionalInformation['phone'] ) ) { $options->searchAppearance->global->schema->phone = $additionalInformation['phone']; } if ( ! empty( $additionalInformation['organizationLogo'] ) ) { $options->searchAppearance->global->schema->organizationLogo = $additionalInformation['organizationLogo']; } if ( ! empty( $additionalInformation['personName'] ) ) { $options->searchAppearance->global->schema->personName = $additionalInformation['personName']; } if ( ! empty( $additionalInformation['personLogo'] ) ) { $options->searchAppearance->global->schema->personLogo = $additionalInformation['personLogo']; } if ( ! empty( $additionalInformation['contactType'] ) ) { $options->searchAppearance->global->schema->contactType = $additionalInformation['contactType']; } if ( ! empty( $additionalInformation['contactTypeManual'] ) ) { $options->searchAppearance->global->schema->contactTypeManual = $additionalInformation['contactTypeManual']; } if ( ! empty( $additionalInformation['socialShareImage'] ) ) { $options->social->facebook->general->defaultImagePosts = $additionalInformation['socialShareImage']; $options->social->twitter->general->defaultImagePosts = $additionalInformation['socialShareImage']; } if ( ! empty( $additionalInformation['social'] ) && ! empty( $additionalInformation['social']['profiles'] ) ) { $profiles = $additionalInformation['social']['profiles']; if ( ! empty( $profiles['sameUsername'] ) ) { $sameUsername = $profiles['sameUsername']; if ( isset( $sameUsername['enable'] ) ) { $options->social->profiles->sameUsername->enable = $sameUsername['enable']; } if ( ! empty( $sameUsername['username'] ) ) { $options->social->profiles->sameUsername->username = $sameUsername['username']; } if ( ! empty( $sameUsername['included'] ) ) { $options->social->profiles->sameUsername->included = $sameUsername['included']; } } if ( ! empty( $profiles['urls'] ) ) { $urls = $profiles['urls']; if ( ! empty( $urls['facebookPageUrl'] ) ) { $options->social->profiles->urls->facebookPageUrl = $urls['facebookPageUrl']; } if ( ! empty( $urls['twitterUrl'] ) ) { $options->social->profiles->urls->twitterUrl = $urls['twitterUrl']; } if ( ! empty( $urls['instagramUrl'] ) ) { $options->social->profiles->urls->instagramUrl = $urls['instagramUrl']; } if ( ! empty( $urls['pinterestUrl'] ) ) { $options->social->profiles->urls->pinterestUrl = $urls['pinterestUrl']; } if ( ! empty( $urls['youtubeUrl'] ) ) { $options->social->profiles->urls->youtubeUrl = $urls['youtubeUrl']; } if ( ! empty( $urls['linkedinUrl'] ) ) { $options->social->profiles->urls->linkedinUrl = $urls['linkedinUrl']; } if ( ! empty( $urls['tumblrUrl'] ) ) { $options->social->profiles->urls->tumblrUrl = $urls['tumblrUrl']; } if ( ! empty( $urls['yelpPageUrl'] ) ) { $options->social->profiles->urls->yelpPageUrl = $urls['yelpPageUrl']; } if ( ! empty( $urls['soundCloudUrl'] ) ) { $options->social->profiles->urls->soundCloudUrl = $urls['soundCloudUrl']; } if ( ! empty( $urls['wikipediaUrl'] ) ) { $options->social->profiles->urls->wikipediaUrl = $urls['wikipediaUrl']; } if ( ! empty( $urls['myspaceUrl'] ) ) { $options->social->profiles->urls->myspaceUrl = $urls['myspaceUrl']; } if ( ! empty( $urls['googlePlacesUrl'] ) ) { $options->social->profiles->urls->googlePlacesUrl = $urls['googlePlacesUrl']; } } } return new \WP_REST_Response( [ 'success' => true ], 200 ); } // Save the features section. if ( 'features' === $section && ! empty( $wizard['features'] ) ) { $features = $wizard['features']; // Install MI. if ( in_array( 'analytics', $features, true ) ) { $cantInstall = false; $pluginData = aioseo()->helpers->getPluginData(); if ( ! $pluginData['miPro']['activated'] && ! $pluginData['miLite']['activated'] ) { if ( $pluginData['miPro']['installed'] ) { aioseo()->addons->installAddon( 'miPro' ); // Stop the redirect from happening. delete_transient( '_monsterinsights_activation_redirect' ); } else { if ( $pluginData['miPro']['installed'] || aioseo()->addons->canInstall() ) { aioseo()->addons->installAddon( 'miLite' ); // Stop the redirect from happening. delete_transient( '_monsterinsights_activation_redirect' ); } else { $cantInstall = true; } } } if ( $cantInstall ) { $notification = Models\Notification::getNotificationByName( 'install-mi' ); if ( ! $notification->exists() ) { Models\Notification::addNotification( [ 'slug' => uniqid(), 'notification_name' => 'install-mi', 'title' => __( 'Install MonsterInsights', 'all-in-one-seo-pack' ), 'content' => sprintf( // Translators: 1 - The plugin short name ("AIOSEO"). __( 'You selected to install the free MonsterInsights Analytics plugin during the setup of %1$s, but there was an issue during installation. Click below to manually install.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded AIOSEO_PLUGIN_SHORT_NAME ), 'type' => 'info', 'level' => [ 'all' ], 'button1_label' => __( 'Install MonsterInsights', 'all-in-one-seo-pack' ), 'button1_action' => $pluginData['miLite']['wpLink'], 'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ), 'button2_action' => 'http://action#notification/install-mi-reminder', 'start' => gmdate( 'Y-m-d H:i:s' ) ] ); } } } } // Save the search appearance section. if ( 'searchAppearance' === $section && ! empty( $wizard['searchAppearance'] ) ) { $searchAppearance = $wizard['searchAppearance']; if ( isset( $searchAppearance['underConstruction'] ) ) { update_option( 'blog_public', ! $searchAppearance['underConstruction'] ); } if ( ! empty( $searchAppearance['postTypes'] ) && ! empty( $searchAppearance['postTypes']['postTypes'] ) ) { // Robots. if ( ! empty( $searchAppearance['postTypes']['postTypes']['all'] ) ) { foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) { if ( $dynamicOptions->searchAppearance->postTypes->has( $postType ) ) { $dynamicOptions->searchAppearance->postTypes->$postType->show = true; $dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = true; $dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = false; } } } else { foreach ( aioseo()->helpers->getPublicPostTypes( true ) as $postType ) { if ( $dynamicOptions->searchAppearance->postTypes->has( $postType ) ) { if ( in_array( $postType, (array) $searchAppearance['postTypes']['postTypes']['included'], true ) ) { $dynamicOptions->searchAppearance->postTypes->$postType->show = true; $dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = true; $dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = false; } else { $dynamicOptions->searchAppearance->postTypes->$postType->show = false; $dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->default = false; $dynamicOptions->searchAppearance->postTypes->$postType->advanced->robotsMeta->noindex = true; } } } } // Sitemaps. if ( isset( $searchAppearance['postTypes']['postTypes']['all'] ) ) { $options->sitemap->general->postTypes->all = $searchAppearance['postTypes']['postTypes']['all']; } if ( isset( $searchAppearance['postTypes']['postTypes']['included'] ) ) { $options->sitemap->general->postTypes->included = $searchAppearance['postTypes']['postTypes']['included']; } } if ( isset( $searchAppearance['multipleAuthors'] ) ) { $options->searchAppearance->archives->author->show = $searchAppearance['multipleAuthors']; $options->searchAppearance->archives->author->advanced->robotsMeta->default = $searchAppearance['multipleAuthors']; $options->searchAppearance->archives->author->advanced->robotsMeta->noindex = ! $searchAppearance['multipleAuthors']; } if ( isset( $searchAppearance['redirectAttachmentPages'] ) && $dynamicOptions->searchAppearance->postTypes->has( 'attachment' ) ) { $dynamicOptions->searchAppearance->postTypes->attachment->redirectAttachmentUrls = $searchAppearance['redirectAttachmentPages'] ? 'attachment' : 'disabled'; } } // Save the smart recommendations section. if ( 'smartRecommendations' === $section && ! empty( $wizard['smartRecommendations'] ) ) { $smartRecommendations = $wizard['smartRecommendations']; if ( ! empty( $smartRecommendations['accountInfo'] ) && ! aioseo()->internalOptions->internal->siteAnalysis->connectToken ) { $url = defined( 'AIOSEO_CONNECT_DIRECT_URL' ) ? AIOSEO_CONNECT_DIRECT_URL : 'https://aioseo.com/wp-json/aioseo-lite-connect/v1/connect/'; $response = wp_remote_post( $url, [ 'headers' => [ 'Content-Type' => 'application/json' ], 'body' => wp_json_encode( [ 'accountInfo' => $smartRecommendations['accountInfo'], 'homeurl' => home_url() ] ) ] ); $token = json_decode( wp_remote_retrieve_body( $response ) ); if ( ! empty( $token->token ) ) { aioseo()->internalOptions->internal->siteAnalysis->connectToken = $token->token; } } } return new \WP_REST_Response( [ 'success' => true, 'options' => aioseo()->options->all() ], 200 ); } }