Skip to content

Commit

Permalink
API Update API to reflect changes to CLI interaction
Browse files Browse the repository at this point in the history
  • Loading branch information
GuySartorelli committed Sep 6, 2024
1 parent 156b39f commit 4f51a12
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 21 deletions.
7 changes: 6 additions & 1 deletion src/Jobs/ContentReviewNotificationJob.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
use SilverStripe\ContentReview\Tasks\ContentReviewEmails;
use SilverStripe\Control\HTTPRequest;
use SilverStripe\Core\Config\Config;
use SilverStripe\HybridExecution\HybridOutput;
use Symbiote\QueuedJobs\Services\AbstractQueuedJob;
use Symbiote\QueuedJobs\Services\QueuedJob;
use Symbiote\QueuedJobs\Services\QueuedJobService;
use Symfony\Component\Console\Input\ArrayInput;

if (!class_exists(AbstractQueuedJob::class)) {
return;
Expand Down Expand Up @@ -94,7 +96,10 @@ public function process()
$this->queueNextRun();

$task = ContentReviewEmails::create();
$task->run(new HTTPRequest("GET", "/dev/tasks/ContentReviewEmails"));
$output = HybridOutput::create(HybridOutput::FORMAT_ANSI);
$input = new ArrayInput([]);
$input->setInteractive(false);
$task->run($input, $output);

$this->currentStep = 1;
$this->isComplete = true;
Expand Down
23 changes: 12 additions & 11 deletions src/Tasks/ContentReviewEmails.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
namespace SilverStripe\ContentReview\Tasks;

use Page;
use RuntimeException;
use SilverStripe\ContentReview\Compatibility\ContentReviewCompatability;
use SilverStripe\Control\Email\Email;
use SilverStripe\Control\HTTPRequest;
use SilverStripe\Dev\BuildTask;
use SilverStripe\HybridExecution\HybridOutput;
use SilverStripe\ORM\ArrayList;
use SilverStripe\ORM\FieldType\DBDatetime;
use SilverStripe\ORM\FieldType\DBField;
Expand All @@ -16,6 +15,8 @@
use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\View\ArrayData;
use SilverStripe\View\SSViewer;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;

/**
* Daily task to send emails to the owners of content items when the review date rolls around.
Expand All @@ -24,19 +25,16 @@ class ContentReviewEmails extends BuildTask
{
private array $invalid_emails = [];

/**
* @param HTTPRequest $request
* @throws RuntimeException
*/
public function run($request)
protected function execute(InputInterface $input, HybridOutput $output): int
{
if (!$this->isValidEmail($senderEmail = SiteConfig::current_site_config()->ReviewFrom)) {
throw new RuntimeException(
$output->writeln(
sprintf(
'Provided sender email address is invalid: "%s".',
'<error>Provided sender email address is invalid: "%s".</>',
$senderEmail
)
);
return Command::FAILURE;
}

$compatibility = ContentReviewCompatability::start();
Expand All @@ -57,13 +55,16 @@ public function run($request)

if (is_array($this->invalid_emails) && count($this->invalid_emails) > 0) {
$plural = count($this->invalid_emails) > 1 ? 's are' : ' is';
throw new RuntimeException(
$output->writeln(
sprintf(
'Provided email' . $plural . ' invalid: "%s".',
'<error>Provided email' . $plural . ' invalid: "%s".</>',
implode(', ', $this->invalid_emails)
)
);
return Command::FAILURE;
}

return Command::SUCCESS;
}

/**
Expand Down
15 changes: 8 additions & 7 deletions src/Tasks/ContentReviewOwnerMigrationTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,33 @@

namespace SilverStripe\ContentReview\Tasks;

use SilverStripe\Control\HTTPRequest;
use SilverStripe\Dev\BuildTask;
use SilverStripe\HybridExecution\HybridOutput;
use SilverStripe\ORM\DB;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;

/**
* Task which migrates the ContentReview Module's SiteTree->OwnerID column to a new column name.
*/
class ContentReviewOwnerMigrationTask extends BuildTask
{
/**
* @param HTTPRequest $request
*/
public function run($request)
protected function execute(InputInterface $input, HybridOutput $output): int
{
$results = DB::query("SHOW columns from \"SiteTree\" WHERE \"field\" = 'OwnerID'");

if ($results->numRecords() == 0) {
echo "<h1>No need to run task. SiteTree->OwnerID doesn't exist</h1>";
$output->writeln('No need to run task. SiteTree->OwnerID doesn\'t exist');
} else {
DB::query("UPDATE \"SiteTree\" SET \"ContentReviewOwnerID\" = \"OwnerID\"");
DB::query("UPDATE \"SiteTree_Live\" SET \"ContentReviewOwnerID\" = \"OwnerID\"");
DB::query("UPDATE \"SiteTree_versions\" SET \"ContentReviewOwnerID\" = \"OwnerID\"");
DB::query("ALTER TABLE \"SiteTree\" DROP COLUMN \"OwnerID\"");
DB::query("ALTER TABLE \"SiteTree_Live\" DROP COLUMN \"OwnerID\"");
DB::query("ALTER TABLE \"SiteTree_Versions\" DROP COLUMN \"OwnerID\"");
echo "<h1>Migrated 3 tables. Dropped obsolete OwnerID column</h1>";
$output->writeln('Migrated 3 tables. Dropped obsolete OwnerID column');
}

return Command::SUCCESS;
}
}
15 changes: 13 additions & 2 deletions tests/php/ContentReviewNotificationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
use SilverStripe\Security\Member;
use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\ContentReview\Models\ContentReviewLog;
use SilverStripe\HybridExecution\HybridOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;

class ContentReviewNotificationTest extends SapphireTest
{
Expand Down Expand Up @@ -58,7 +61,11 @@ public function testContentReviewEmails()
$childParentPage->write();

$task = new ContentReviewEmails();
$task->run(new HTTPRequest('GET', '/dev/tasks/ContentReviewEmails'));
$buffer = new BufferedOutput();
$output = new HybridOutput(HybridOutput::FORMAT_ANSI, wrappedOutput: $buffer);
$input = new ArrayInput([]);
$input->setInteractive(false);
$task->run($input, $output);

// Set template variables (as per variable case)
$ToEmail = 'author@example.com';
Expand Down Expand Up @@ -124,7 +131,11 @@ public function testContentReviewNeeded()
$this->assertCount(1, $childParentPage->ReviewLogs());

$task = new ContentReviewEmails();
$task->run(new HTTPRequest('GET', '/dev/tasks/ContentReviewEmails'));
$buffer = new BufferedOutput();
$output = new HybridOutput(HybridOutput::FORMAT_ANSI, wrappedOutput: $buffer);
$input = new ArrayInput([]);
$input->setInteractive(false);
$task->run($input, $output);

// Expecting to not send the email as content review for page is done
$email = $this->findEmail($member->Email);
Expand Down

0 comments on commit 4f51a12

Please sign in to comment.