...
 
Commits (2)
......@@ -5,6 +5,7 @@ namespace Minds\Controllers\Cli;
use Minds\Core;
use Minds\Core\Di\Di;
use Minds\Cli;
use Minds\Core\Reports\Strikes\Strike;
use Minds\Core\Reports\Summons\Summons;
use Minds\Interfaces;
use Minds\Entities;
......@@ -137,4 +138,42 @@ class Moderation extends Cli\Controller implements Interfaces\CliControllerInter
var_dump($cohort);
}
public function dev_only_add_strike()
{
error_reporting(E_ALL);
ini_set('display_errors', 1);
/** @var Core\Reports\Repository $reportsRepository */
$reportsRepository = Di::_()->get('Reports\Repository');
/** @var Core\Reports\Strikes\Manager $strikesManager */
$strikesManager = Di::_()->get('Moderation\Strikes\Manager');
$reportUrn = $this->getOpt('report');
if (!$reportUrn) {
$this->out([
'Usage: cli.php moderation dev_only_add_strike --report=<report_urn>',
]);
exit(1);
}
$report = $reportsRepository->get($reportUrn);
if (!$report) {
$this->out('Error: Invalid report');
exit(1);
}
$strike = new Strike;
$strike->setReport($report)
->setReportUrn($report->getUrn())
->setUserGuid($report->getEntityOwnerGuid())
->setReasonCode($report->getReasonCode())
->setSubReasonCode($report->getSubReasonCode())
->setTimestamp($report->getTimestamp()); // Strike is recored for date of first report
var_dump($strikesManager->add($strike));
}
}
......@@ -4,6 +4,7 @@
*/
namespace Minds\Controllers\api\v2\moderation;
use Minds\Api\Exportable;
use Minds\Api\Factory;
use Minds\Core;
use Minds\Entities;
......@@ -20,6 +21,7 @@ class strikes implements Interfaces\Api
return Factory::response([ ]);
}
/** @var Core\Reports\Strikes\Manager $strikesManager */
$strikesManager = Di::_()->get('Moderation\Strikes\Manager');
$strikes = $strikesManager->getList([
'hydrate' => true,
......@@ -27,7 +29,7 @@ class strikes implements Interfaces\Api
]);
return Factory::response([
'strikes' => Factory::exportable($strikes),
'strikes' => Exportable::_($strikes),
]);
}
......
......@@ -4,6 +4,10 @@
*/
namespace Minds\Core\Reports\Strikes;
use Minds\Common\Repository\Response;
use Minds\Common\Urn;
use Minds\Core\Reports\Manager as ReportsManager;
class Manager
{
......@@ -14,15 +18,23 @@ class Manager
/** @var Repository $repository */
private $repository;
public function __construct($repository = null)
/** @var ReportsManager */
private $reportsManager;
public function __construct(
$repository = null,
$reportsManager = null
)
{
$this->repository = $repository ?: new Repository;
$this->reportsManager = $reportsManager ?: new ReportsManager();
}
/**
* Return a list of strikes
* @param array $opts
* @return Response
* @throws \Exception
*/
public function getList(array $opts = [])
{
......@@ -32,6 +44,7 @@ class Manager
'sub_reason_code' => null,
'from' => strtotime('-90 days'),
'to' => time(),
'hydrate' => false,
], $opts);
if (!$opts['user']) {
......@@ -40,7 +53,20 @@ class Manager
$opts['user_guid'] = $opts['user']->getGuid();
return $this->repository->getList($opts);
$response = $this->repository->getList($opts);
if ($opts['hydrate']) {
$response = $response->map(function (Strike $strike) {
try {
$report = $this->reportsManager->getReport($strike->getReportUrn());
$strike->setReport($report);
} catch (\Exception $e) { }
return $strike;
});
}
return $response;
}
/**
......
......@@ -32,6 +32,7 @@ class Repository
* List of strikes
* @param array $opts
* @return Response
* @throws \Exception
*/
public function getList($opts = [])
{
......
......@@ -57,13 +57,19 @@ class Strike
*/
public function export()
{
return [
$output = [
'report_urn' => $this->reportUrn,
'user_guid' => (string) $this->userGuid,
'reason_code' => $this->reasonCode,
'sub_reason_code' => $this->subReasonCode,
'@timestamp' => $this->timestamp,
];
if ($this->report) {
$output['report'] = $this->report->export();
}
return $output;
}
}
\ No newline at end of file
}
......@@ -2,6 +2,7 @@
namespace Spec\Minds\Core\Reports\Strikes;
use Minds\Core\Reports\Manager as ReportsManager;
use Minds\Core\Reports\Strikes\Manager;
use Minds\Core\Reports\Strikes\Repository;
use Minds\Core\Reports\Strikes\Strike;
......@@ -12,11 +13,13 @@ use Prophecy\Argument;
class ManagerSpec extends ObjectBehavior
{
private $repository;
private $reportsManager;
function let(Repository $repository)
function let(Repository $repository, ReportsManager $reportsManager)
{
$this->beConstructedWith($repository);
$this->beConstructedWith($repository, $reportsManager);
$this->repository = $repository;
$this->reportsManager = $reportsManager;
}
function it_is_initializable()
......