186 lines
6.0 KiB
PHP
186 lines
6.0 KiB
PHP
<?php declare(strict_types = 1);
|
|
|
|
namespace MailPoet\Automation\Integrations\WordPress\Fields;
|
|
|
|
use MailPoet\Automation\Engine\Data\Field;
|
|
use MailPoet\Automation\Engine\WordPress;
|
|
use MailPoet\Automation\Integrations\WordPress\Payloads\CommentPayload;
|
|
|
|
class CommentFieldsFactory {
|
|
|
|
/** @var WordPress */
|
|
private $wp;
|
|
|
|
public function __construct(
|
|
WordPress $wp
|
|
) {
|
|
$this->wp = $wp;
|
|
}
|
|
|
|
/**
|
|
* @return Field[]
|
|
*/
|
|
public function getFields(): array {
|
|
return [
|
|
new Field(
|
|
'wordpress:comment:id',
|
|
Field::TYPE_INTEGER,
|
|
__('Comment ID', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
return $payload->getCommentId();
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:author-name',
|
|
Field::TYPE_STRING,
|
|
__('Comment author name', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_author : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:author-email',
|
|
Field::TYPE_STRING,
|
|
__('Comment author email', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_author_email : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:author-url',
|
|
Field::TYPE_STRING,
|
|
__('Comment author URL', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_author_url : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:author-ip',
|
|
Field::TYPE_STRING,
|
|
__('Comment author IP', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_author_IP : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:date',
|
|
Field::TYPE_DATETIME,
|
|
__('Comment date', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_date_gmt : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:content',
|
|
Field::TYPE_STRING,
|
|
__('Comment content', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_content : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:karma',
|
|
Field::TYPE_INTEGER,
|
|
__('Comment karma', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? (int)$comment->comment_karma : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:status',
|
|
Field::TYPE_ENUM,
|
|
__('Comment status', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$status = $this->wp->wpGetCommentStatus($payload->getCommentId());
|
|
if (!is_string($status)) {
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* wp_get_comment_status returns 'unapproved' and 'approved' where get_comment_statuses returns 'hold' and 'approve'
|
|
* We need to normalize the status for matches.
|
|
*/
|
|
if ($status === 'approved') {
|
|
$status = 'approve';
|
|
}
|
|
if ($status === 'unapproved') {
|
|
$status = 'hold';
|
|
}
|
|
return $status;
|
|
},
|
|
[
|
|
'options' => $this->getCommentStatuses(),
|
|
]
|
|
),
|
|
new Field(
|
|
'wordpress:comment:comment-agent',
|
|
Field::TYPE_STRING,
|
|
__('Comment user agent', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_agent : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:comment-type',
|
|
Field::TYPE_STRING,
|
|
__('Comment type', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? $comment->comment_type : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:comment-parent',
|
|
Field::TYPE_INTEGER,
|
|
__('Comment parent ID', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? (int)$comment->comment_parent : null;
|
|
}
|
|
),
|
|
new Field(
|
|
'wordpress:comment:has-children',
|
|
Field::TYPE_BOOLEAN,
|
|
__('Comment has replies', 'mailpoet'),
|
|
function (CommentPayload $payload) {
|
|
$comment = $payload->getComment();
|
|
//phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
|
return $comment ? count($comment->get_children()) > 0 : false;
|
|
}
|
|
),
|
|
];
|
|
}
|
|
|
|
private function getCommentStatuses(): array {
|
|
$statuses = $this->wp->getCommentStatuses();
|
|
return array_values(array_map(
|
|
function($name, $id): array {
|
|
return [
|
|
'id' => $id,
|
|
'name' => $name,
|
|
];
|
|
},
|
|
$statuses,
|
|
array_keys($statuses)
|
|
));
|
|
}
|
|
}
|