mirror of
https://github.com/silverstripe/silverstripe-contentreview
synced 2024-10-22 17:05:47 +02:00
API Update API to reflect changes to CLI interaction (#255)
This commit is contained in:
parent
ef588a5ee0
commit
47245c3c19
@ -39,10 +39,7 @@ composer require silverstripe/contentreview
|
|||||||
composer require silverstripe/contentreview
|
composer require silverstripe/contentreview
|
||||||
```
|
```
|
||||||
|
|
||||||
You'll also need to run `dev/build`.
|
You'll also need to build the database either via the web server by opening the URL `http://<your-host>/dev/build?flush` or via a CLI: `sake db:build --flush`
|
||||||
|
|
||||||
Run dev/build either via the web server by opening the URL `http://<your-host>/dev/build?flush` or
|
|
||||||
by running the dev/build via a CLI: `sake dev/build flush=1`
|
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ The module is set up in the `Settings` section of the CMS, see the [User guide](
|
|||||||
In order for the contentreview module to send emails, you need to *either*:
|
In order for the contentreview module to send emails, you need to *either*:
|
||||||
|
|
||||||
* Setup the `ContentReviewEmails` script to run daily via a system cron job.
|
* Setup the `ContentReviewEmails` script to run daily via a system cron job.
|
||||||
* Install the [queuedjobs](https://github.com/symbiote/silverstripe-queuedjobs) module and follow the configuration steps to create a cron job for that module. Once installed, you can just run `dev/build` to have a job created, which will run at 9am every day by default.
|
* Install the [queuedjobs](https://github.com/symbiote/silverstripe-queuedjobs) module and follow the configuration steps to create a cron job for that module. Once installed, you can just run `sake db:build` to have a job created, which will run at 9am every day by default.
|
||||||
|
|
||||||
## Using
|
## Using
|
||||||
|
|
||||||
|
@ -5,9 +5,11 @@ namespace SilverStripe\ContentReview\Jobs;
|
|||||||
use SilverStripe\ContentReview\Tasks\ContentReviewEmails;
|
use SilverStripe\ContentReview\Tasks\ContentReviewEmails;
|
||||||
use SilverStripe\Control\HTTPRequest;
|
use SilverStripe\Control\HTTPRequest;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
|
use SilverStripe\PolyExecution\PolyOutput;
|
||||||
use Symbiote\QueuedJobs\Services\AbstractQueuedJob;
|
use Symbiote\QueuedJobs\Services\AbstractQueuedJob;
|
||||||
use Symbiote\QueuedJobs\Services\QueuedJob;
|
use Symbiote\QueuedJobs\Services\QueuedJob;
|
||||||
use Symbiote\QueuedJobs\Services\QueuedJobService;
|
use Symbiote\QueuedJobs\Services\QueuedJobService;
|
||||||
|
use Symfony\Component\Console\Input\ArrayInput;
|
||||||
|
|
||||||
if (!class_exists(AbstractQueuedJob::class)) {
|
if (!class_exists(AbstractQueuedJob::class)) {
|
||||||
return;
|
return;
|
||||||
@ -94,7 +96,10 @@ class ContentReviewNotificationJob extends AbstractQueuedJob implements QueuedJo
|
|||||||
$this->queueNextRun();
|
$this->queueNextRun();
|
||||||
|
|
||||||
$task = ContentReviewEmails::create();
|
$task = ContentReviewEmails::create();
|
||||||
$task->run(new HTTPRequest("GET", "/dev/tasks/ContentReviewEmails"));
|
$output = PolyOutput::create(PolyOutput::FORMAT_ANSI);
|
||||||
|
$input = new ArrayInput([]);
|
||||||
|
$input->setInteractive(false);
|
||||||
|
$task->run($input, $output);
|
||||||
|
|
||||||
$this->currentStep = 1;
|
$this->currentStep = 1;
|
||||||
$this->isComplete = true;
|
$this->isComplete = true;
|
||||||
|
@ -3,11 +3,10 @@
|
|||||||
namespace SilverStripe\ContentReview\Tasks;
|
namespace SilverStripe\ContentReview\Tasks;
|
||||||
|
|
||||||
use Page;
|
use Page;
|
||||||
use RuntimeException;
|
|
||||||
use SilverStripe\ContentReview\Compatibility\ContentReviewCompatability;
|
use SilverStripe\ContentReview\Compatibility\ContentReviewCompatability;
|
||||||
use SilverStripe\Control\Email\Email;
|
use SilverStripe\Control\Email\Email;
|
||||||
use SilverStripe\Control\HTTPRequest;
|
|
||||||
use SilverStripe\Dev\BuildTask;
|
use SilverStripe\Dev\BuildTask;
|
||||||
|
use SilverStripe\PolyExecution\PolyOutput;
|
||||||
use SilverStripe\Model\List\ArrayList;
|
use SilverStripe\Model\List\ArrayList;
|
||||||
use SilverStripe\Dev\Deprecation;
|
use SilverStripe\Dev\Deprecation;
|
||||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||||
@ -17,6 +16,8 @@ use SilverStripe\Security\Member;
|
|||||||
use SilverStripe\SiteConfig\SiteConfig;
|
use SilverStripe\SiteConfig\SiteConfig;
|
||||||
use SilverStripe\Model\ArrayData;
|
use SilverStripe\Model\ArrayData;
|
||||||
use SilverStripe\View\SSViewer;
|
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.
|
* Daily task to send emails to the owners of content items when the review date rolls around.
|
||||||
@ -25,20 +26,22 @@ class ContentReviewEmails extends BuildTask
|
|||||||
{
|
{
|
||||||
private array $invalid_emails = [];
|
private array $invalid_emails = [];
|
||||||
|
|
||||||
/**
|
protected static string $commandName = 'content-review-emails';
|
||||||
* @param HTTPRequest $request
|
|
||||||
* @throws RuntimeException
|
protected static string $description = 'Daily task to send emails to the owners of content items when the review'
|
||||||
*/
|
. ' date rolls around';
|
||||||
public function run($request)
|
|
||||||
|
protected function execute(InputInterface $input, PolyOutput $output): int
|
||||||
{
|
{
|
||||||
$senderEmail = SiteConfig::current_site_config()->ReviewFrom;
|
$senderEmail = SiteConfig::current_site_config()->ReviewFrom;
|
||||||
if (!Deprecation::withSuppressedNotice(fn() => $this->isValidEmail($senderEmail))) {
|
if (!Deprecation::withSuppressedNotice(fn() => $this->isValidEmail($senderEmail))) {
|
||||||
throw new RuntimeException(
|
$output->writeln(
|
||||||
sprintf(
|
sprintf(
|
||||||
'Provided sender email address is invalid: "%s".',
|
'<error>Provided sender email address is invalid: "%s".</>',
|
||||||
$senderEmail
|
$senderEmail
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
return Command::FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
$compatibility = ContentReviewCompatability::start();
|
$compatibility = ContentReviewCompatability::start();
|
||||||
@ -59,13 +62,16 @@ class ContentReviewEmails extends BuildTask
|
|||||||
|
|
||||||
if (is_array($this->invalid_emails) && count($this->invalid_emails) > 0) {
|
if (is_array($this->invalid_emails) && count($this->invalid_emails) > 0) {
|
||||||
$plural = count($this->invalid_emails) > 1 ? 's are' : ' is';
|
$plural = count($this->invalid_emails) > 1 ? 's are' : ' is';
|
||||||
throw new RuntimeException(
|
$output->writeln(
|
||||||
sprintf(
|
sprintf(
|
||||||
'Provided email' . $plural . ' invalid: "%s".',
|
'<error>Provided email' . $plural . ' invalid: "%s".</>',
|
||||||
implode(', ', $this->invalid_emails)
|
implode(', ', $this->invalid_emails)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
return Command::FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Command::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\ContentReview\Tasks;
|
|
||||||
|
|
||||||
use SilverStripe\Control\HTTPRequest;
|
|
||||||
use SilverStripe\Dev\BuildTask;
|
|
||||||
use SilverStripe\Dev\Deprecation;
|
|
||||||
use SilverStripe\ORM\DB;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Task which migrates the ContentReview Module's SiteTree->OwnerID column to a new column name.
|
|
||||||
* @deprecated 5.4.0 Will be removed without equivalent functionality to replace it
|
|
||||||
*/
|
|
||||||
class ContentReviewOwnerMigrationTask extends BuildTask
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
Deprecation::withSuppressedNotice(function () {
|
|
||||||
Deprecation::notice(
|
|
||||||
'5.4.0',
|
|
||||||
'Will be removed without equivalent functionality to replace it',
|
|
||||||
Deprecation::SCOPE_CLASS
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTTPRequest $request
|
|
||||||
*/
|
|
||||||
public function run($request)
|
|
||||||
{
|
|
||||||
$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>";
|
|
||||||
} 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>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -19,6 +19,9 @@ use SilverStripe\Security\Group;
|
|||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\SiteConfig\SiteConfig;
|
use SilverStripe\SiteConfig\SiteConfig;
|
||||||
use SilverStripe\ContentReview\Models\ContentReviewLog;
|
use SilverStripe\ContentReview\Models\ContentReviewLog;
|
||||||
|
use SilverStripe\PolyExecution\PolyOutput;
|
||||||
|
use Symfony\Component\Console\Input\ArrayInput;
|
||||||
|
use Symfony\Component\Console\Output\BufferedOutput;
|
||||||
|
|
||||||
class ContentReviewNotificationTest extends SapphireTest
|
class ContentReviewNotificationTest extends SapphireTest
|
||||||
{
|
{
|
||||||
@ -59,7 +62,11 @@ class ContentReviewNotificationTest extends SapphireTest
|
|||||||
$childParentPage->write();
|
$childParentPage->write();
|
||||||
|
|
||||||
$task = new ContentReviewEmails();
|
$task = new ContentReviewEmails();
|
||||||
$task->run(new HTTPRequest('GET', '/dev/tasks/ContentReviewEmails'));
|
$buffer = new BufferedOutput();
|
||||||
|
$output = new PolyOutput(PolyOutput::FORMAT_ANSI, wrappedOutput: $buffer);
|
||||||
|
$input = new ArrayInput([]);
|
||||||
|
$input->setInteractive(false);
|
||||||
|
$task->run($input, $output);
|
||||||
|
|
||||||
// Set template variables (as per variable case)
|
// Set template variables (as per variable case)
|
||||||
$ToEmail = 'author@example.com';
|
$ToEmail = 'author@example.com';
|
||||||
@ -125,7 +132,11 @@ class ContentReviewNotificationTest extends SapphireTest
|
|||||||
$this->assertCount(1, $childParentPage->ReviewLogs());
|
$this->assertCount(1, $childParentPage->ReviewLogs());
|
||||||
|
|
||||||
$task = new ContentReviewEmails();
|
$task = new ContentReviewEmails();
|
||||||
$task->run(new HTTPRequest('GET', '/dev/tasks/ContentReviewEmails'));
|
$buffer = new BufferedOutput();
|
||||||
|
$output = new PolyOutput(PolyOutput::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
|
// Expecting to not send the email as content review for page is done
|
||||||
$email = $this->findEmail($member->Email);
|
$email = $this->findEmail($member->Email);
|
||||||
|
Loading…
Reference in New Issue
Block a user