Untitled
unknown
plain_text
a year ago
6.4 kB
10
Indexable
Please check and fix the below warning in drupal 9.
Warning: Undefined array key "theme_id" in Drupal\hearsay_preview\Plugin\rest\resource\PostPreview->post() (line 138 of /code/web/modules/custom/hearsay_preview/src/Plugin/rest/resource/PostPreview.php)
<?php
namespace Drupal\hearsay_preview\Plugin\rest\resource;
use Drupal\rest\Plugin\ResourceBase;
use Psr\Log\LoggerInterface;
use Drupal\hearsay_automation_process\HSUtilityService;
use Drupal\hearsay_client_customization\Controller\HearsayClientCustomization;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\rest\ModifiedResourceResponse;
/**
* Annotation for post method.
*
* @RestResource(
* id = "hs_preview_data_post",
* label = @Translation("HS Site changes preview"),
* serialization_class = "",
* uri_paths = {
* "create" = "/api/preview"
* }
* )
*/
class PostPreview extends ResourceBase
{
/**
* Responds to POST requests.
*
* @return \Drupal\rest\ModifiedResourceResponse
* The response will be token verification status.
*/
/**
* A Service Instance.
*
* @var \Drupal\hearsay_automation_process\HSUtilityService
*/
protected $HSUtilityService;
/**
* A Client Customization Instance.
*
* @var Drupal\hearsay_client_customization\Controller\HearsayClientCustomization
*/
protected $HSClientCustomization;
/**
* Constructs a Drupal\rest\Plugin\ResourceBase object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param array $serializer_formats
* The available serialization formats.
* @param \Psr\Log\LoggerInterface $logger
* A logger instance.
* @param \Drupal\hearsay_automation_process\HSUtilityService $utilityObject
* A HS utility service instance.
*/
public function __construct(
array $configuration,
$plugin_id,
$plugin_definition,
array $serializer_formats,
LoggerInterface $logger,
HSUtilityService $utilityObject
) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger, $utilityObject);
$this->HSUtilityService = $utilityObject;
$this->HSClientCustomization = new HearsayClientCustomization();
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition)
{
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->getParameter('serializer.formats'),
$container->get('logger.factory')->get('custom_rest'),
$container->get('hearsay_automation_process_service.utility')
);
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames()
{
return ['hearsay_preview.slug'];
}
/**
* Responds to POST requests.
*
* @return \Drupal\
* Saves the preview configuration
* Returns a list of bundles for specified entity.
*
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
* Throws exception expected.
*/
public function post($data)
{
$previewToken = PREVIEW_TOKEN;
if (!isset($data)) {
$responseStatus['status'] = false;
} else {
$headers = getallheaders();
$xPreviewToken = $headers['X-Preview-Token'];
$baseSlug = $data['slug'];
$slug = $this->HSUtilityService->getBaseSlugByUrl($baseSlug);
// Verify token.
if ($xPreviewToken != $previewToken) {
\Drupal::logger('sites_preview')->notice('Received bad token for new preview request for "' . $slug);
$responseStatus['status'] = 401;
$responseStatus['error_message'] = 'Received bad token for new preview request for "' . $slug;
return new ModifiedResourceResponse(401);
}
// Log start of job.
\Drupal::logger('sites_preview')->notice('Receiving new preview request for: " ' . $slug . '". <br> Returned new path successfully');
// Set created and expiration values.
$data['config_created'] = time();
$data['config_expiration'] = time() + 600;
try {
$config = \Drupal::configFactory()->getEditable('sites_preview.api');
$language = $this->HSClientCustomization->getLanguageByThemeID($data['theme_id']);
$langCode = $this->HSClientCustomization->getLanguageAbbreviation($language);
// Final slug to save config data with language suffix.
$finalSlug = $slug . '_' . $langCode;
$config->set($finalSlug, $data)->save();
$previewPath = $this->HSClientCustomization->getPostPreviewPath($slug, $langCode);
$responseStatus['preview_path'] = $previewPath;
} catch (\Exception $e) {
\Drupal::logger('Sites Preview post error')->error($e->getMessage() . ' <br> — Slug ' . $slug);
}
}
return new ModifiedResourceResponse($responseStatus);
}
/**
* Open access (using auth token check).
*
* @return void
* Return Null.
*/
public function permissions()
{
return [];
}
}
/**
* Get Language by Theme ID.
*
* @param int $themeId
* Theme Id.
*
* @return string
* Return theme language.
*/
public function getLanguageByThemeID($themeId)
{
$config = \Drupal::config(HS_PLATFORM_SETTINGS);
$languages = HS_LANGUAGES;
$themeLanguage = '';
foreach ($languages as $key => $language) {
$getThemeIds = $config->get('theme_id_' . strtolower($key));
$arrThemeIds = explode(",", $getThemeIds);
if (in_array($themeId, $arrThemeIds)) {
$themeLanguage = $language;
return $themeLanguage;
}
}
return $themeLanguage;
}Editor is loading...
Leave a Comment