Skip to content

Commit

Permalink
Basic Generate Blocks block type support
Browse files Browse the repository at this point in the history
  • Loading branch information
brandonkelly committed Feb 28, 2025
1 parent a30e0e4 commit 9d6752e
Show file tree
Hide file tree
Showing 7 changed files with 221 additions and 13 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,11 @@ ddev craft wp-import --help
- `core-embed/youtube`
- `cp/codepen-gutenberg-embed-block`
- `dsb/details-summary-block`
- `generateblocks/element`
- `generateblocks/headline`
- `generateblocks/image`
- `generateblocks/media`
- `generateblocks/text`
- `jetpack/slideshow`
- `jetpack/tiled-gallery`
- `videopress/video`
Expand Down
31 changes: 31 additions & 0 deletions src/blocktransformers/GBElement.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php
/**
* @link https://craftcms.com/
* @copyright Copyright (c) Pixel & Tonic, Inc.
* @license MIT
*/

namespace craft\wpimport\blocktransformers;

use craft\elements\Entry;
use craft\wpimport\BaseBlockTransformer;

/**
* @author Pixel & Tonic, Inc. <[email protected]>
*/
class GBElement extends BaseBlockTransformer
{
public static function blockName(): string
{
return 'generateblocks/element';
}

public function render(array $data, Entry $entry): string
{
if (empty($data['innerBlocks'])) {
return '';
}

return $this->command->renderBlocks($data['innerBlocks'], $entry);
}
}
39 changes: 39 additions & 0 deletions src/blocktransformers/GBHeadline.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php
/**
* @link https://craftcms.com/
* @copyright Copyright (c) Pixel & Tonic, Inc.
* @license MIT
*/

namespace craft\wpimport\blocktransformers;

use craft\elements\Entry;
use craft\helpers\Html as HtmlHelper;
use craft\wpimport\BaseBlockTransformer;
use Symfony\Component\DomCrawler\Crawler;

/**
* @author Pixel & Tonic, Inc. <[email protected]>
*/
class GBHeadline extends BaseBlockTransformer
{
public static function blockName(): string
{
return 'generateblocks/headline';
}

public function render(array $data, Entry $entry): string
{
$node = (new Crawler($data['innerHTML']))->filter('h1,h2,h3,h4,h5,h6,p,div');
if (!$node->count()) {
return '';
}

$tag = $node->nodeName();
if ($tag === 'div') {
$tag = 'p';
}

return HtmlHelper::tag($tag, $node->text());
}
}
53 changes: 53 additions & 0 deletions src/blocktransformers/GBImage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php
/**
* @link https://craftcms.com/
* @copyright Copyright (c) Pixel & Tonic, Inc.
* @license MIT
*/

namespace craft\wpimport\blocktransformers;

use craft\elements\Entry;
use craft\wpimport\BaseBlockTransformer;
use craft\wpimport\importers\Media;
use Symfony\Component\DomCrawler\Crawler;
use Throwable;

/**
* @author Pixel & Tonic, Inc. <[email protected]>
*/
class GBImage extends BaseBlockTransformer
{
public static function blockName(): string
{
return 'generateblocks/image';
}

public function render(array $data, Entry $entry): string
{
$id = $data['attrs']['mediaId'] ?? null;
if (!$id) {
return '';
}

$img = (new Crawler($data['innerHTML']))->filter('img');
$src = $img->attr('src');

try {
if ($src) {
$assetId = $this->command->import(Media::SLUG, [
'id' => $id,
'source_url' => $src,
'title' => $img->attr('title'),
'alt_text' => $img->attr('alt'),
]);
} else {
$assetId = $this->command->import(Media::SLUG, $id);
}
} catch (Throwable) {
return '';
}

return $this->command->createNestedMediaEntry($entry, $assetId);
}
}
49 changes: 49 additions & 0 deletions src/blocktransformers/GBMedia.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php
/**
* @link https://craftcms.com/
* @copyright Copyright (c) Pixel & Tonic, Inc.
* @license MIT
*/

namespace craft\wpimport\blocktransformers;

use craft\elements\Entry;
use craft\wpimport\BaseBlockTransformer;
use craft\wpimport\importers\Media;
use Throwable;

/**
* @author Pixel & Tonic, Inc. <[email protected]>
*/
class GBMedia extends BaseBlockTransformer
{
public static function blockName(): string
{
return 'generateblocks/media';
}

public function render(array $data, Entry $entry): string
{
$id = $data['attrs']['mediaId'] ?? null;
if (!$id) {
return '';
}

try {
if (!empty($data['attrs']['htmlAttributes']['src'])) {
$assetId = $this->command->import(Media::SLUG, [
'id' => $id,
'source_url' => $data['attrs']['htmlAttributes']['src'],
'title' => ['raw' => $data['attrs']['htmlAttributes']['title'] ?? null],
'alt_text' => $data['attrs']['htmlAttributes']['alt'] ?? null,
]);
} else {
$assetId = $this->command->import(Media::SLUG, $id);
}
} catch (Throwable) {
return '';
}

return $this->command->createNestedMediaEntry($entry, $assetId);
}
}
27 changes: 27 additions & 0 deletions src/blocktransformers/GBText.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php
/**
* @link https://craftcms.com/
* @copyright Copyright (c) Pixel & Tonic, Inc.
* @license MIT
*/

namespace craft\wpimport\blocktransformers;

use craft\elements\Entry;
use craft\wpimport\BaseBlockTransformer;

/**
* @author Pixel & Tonic, Inc. <[email protected]>
*/
class GBText extends BaseBlockTransformer
{
public static function blockName(): string
{
return 'generateblocks/text';
}

public function render(array $data, Entry $entry): string
{
return $data['innerHTML'] ?? '';
}
}
30 changes: 17 additions & 13 deletions src/importers/Media.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ public function populate(ElementInterface $element, array $data): void

/** @var Asset $element */
$element->volumeId = Uploads::get()->id;
$element->title = StringHelper::safeTruncate($data['title']['raw'], 255);
$element->setFieldValue(WpTitle::get()->handle, $data['title']['raw']);
$title = $data['title']['raw'] ?? $filename;
$element->title = StringHelper::safeTruncate($title, 255);
$element->setFieldValue(WpTitle::get()->handle, $title);

/** @var Local $fs */
$fs = UploadsFs::get();
Expand All @@ -88,23 +89,26 @@ public function populate(ElementInterface $element, array $data): void
$element->avoidFilenameConflicts = true;
}

$element->setWidth($data['media_details']['width'] ?? null);
$element->setHeight($data['media_details']['height'] ?? null);
$element->size = $data['media_details']['filesize'] ?? null;
$element->dateCreated = DateTimeHelper::toDateTime($data['date_gmt']);
$element->dateUpdated = DateTimeHelper::toDateTime($data['modified_gmt']);
if ($data['author'] && Craft::$app->edition->value >= CmsEdition::Pro->value) {
if (!empty($data['date_gmt'])) {
$element->dateCreated = DateTimeHelper::toDateTime($data['date_gmt']);
}
if (!empty($data['modified_gmt'])) {
$element->dateUpdated = DateTimeHelper::toDateTime($data['modified_gmt']);
}
if (!empty($data['author']) && Craft::$app->edition->value >= CmsEdition::Pro->value) {
try {
$element->uploaderId = $this->command->import(User::SLUG, $data['author'], [
'roles' => User::ALL_ROLES,
]);
} catch (Throwable) {
}
}
$element->alt = $data['alt_text'];
$element->setFieldValues([
Caption::get()->handle => $data['caption']['raw'],
Description::get()->handle => $data['description']['raw'],
]);
if (!empty($data['alt_text'])) {
$element->alt = $data['alt_text'];
}
$element->setFieldValues(array_filter([
Caption::get()->handle => $data['caption']['raw'] ?? null,
Description::get()->handle => $data['description']['raw'] ?? null,
]));
}
}

0 comments on commit 9d6752e

Please sign in to comment.