Commit eae53494 authored by Mark Harding's avatar Mark Harding
Browse files

Merge branch 'fix/632-blog-activity2' into 'master'

[Sprint/InterestingIguana] (fix) Blog: Check if an activity exists before creating to prevent double posts

Closes #632

See merge request !272
parents b52b3b03 673cd6f9
Loading
Loading
Loading
Loading
+2 −3
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@ use Minds\Common\Access;
use Minds\Core;
use Minds\Core;
use Minds\Helpers;
use Minds\Helpers;
use Minds\Interfaces;
use Minds\Interfaces;
use Minds\Core\Blogs\Delegates\CreateActivity;


class blog implements Interfaces\Api
class blog implements Interfaces\Api
{
{
@@ -333,11 +334,9 @@ class blog implements Interfaces\Api
        }
        }


        if ($saved) {
        if ($saved) {
            $createActivity = new Core\Blogs\Delegates\CreateActivity();

            if ($blog->isPublished() && $blog->getAccessId() == Access::PUBLIC) {
            if ($blog->isPublished() && $blog->getAccessId() == Access::PUBLIC) {
                if (!$editing || ($editing && !$alreadyPublished) || ($editing && $oldAccessId == Access::UNLISTED)) {
                if (!$editing || ($editing && !$alreadyPublished) || ($editing && $oldAccessId == Access::UNLISTED)) {
                    $createActivity->save($blog);
                    (new CreateActivity())->save($blog);
                }
                }
            }
            }


+15 −2
Original line number Original line Diff line number Diff line
@@ -9,6 +9,7 @@
namespace Minds\Core\Blogs\Delegates;
namespace Minds\Core\Blogs\Delegates;


use Minds\Core\Blogs\Blog;
use Minds\Core\Blogs\Blog;
use Minds\Core\Data\Call;
use Minds\Core\Entities\Actions\Save;
use Minds\Core\Entities\Actions\Save;
use Minds\Entities\Activity;
use Minds\Entities\Activity;


@@ -17,22 +18,32 @@ class CreateActivity
    /** @var Save */
    /** @var Save */
    protected $saveAction;
    protected $saveAction;


    /** @var Call */
    protected $db;

    /**
    /**
     * CreateActivity constructor.
     * CreateActivity constructor.
     * @param null $saveAction
     * @param null $saveAction
     */
     */
    public function __construct($saveAction = null)
    public function __construct($saveAction = null, Call $db=null)
    {
    {
        $this->saveAction = $saveAction ?: new Save();
        $this->saveAction = $saveAction ?: new Save();
        $this->db = $db ?? new Call('entities_by_time');
    }
    }


    /**
    /**
     * Creates a new activity for a blog
     * Creates a new activity for a blog
     * @param Blog $blog
     * @param Blog $blog
     * @throws \Minds\Exceptions\StopEventException
     * @throws \Minds\Exceptions\StopEventException
     * @return bool
     */
     */
    public function save(Blog $blog)
    public function save(Blog $blog) : bool
    {
    {
        $activities = $this->db->getRow("activity:entitylink:{$blog->getGuid()}");
        if (!empty($activities)) {
            return false;
        }

        $owner = $blog->getOwnerEntity();
        $owner = $blog->getOwnerEntity();


        $activity = (new Activity())
        $activity = (new Activity())
@@ -53,5 +64,7 @@ class CreateActivity
        $this->saveAction
        $this->saveAction
            ->setEntity($activity)
            ->setEntity($activity)
            ->save();
            ->save();

        return true;
    }
    }
}
}
+34 −5
Original line number Original line Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Spec\Minds\Core\Blogs\Delegates;
namespace Spec\Minds\Core\Blogs\Delegates;


use Minds\Core\Blogs\Blog;
use Minds\Core\Blogs\Blog;
use Minds\Core\Data\Call;
use Minds\Core\Entities\Actions\Save;
use Minds\Core\Entities\Actions\Save;
use Minds\Entities\Activity;
use Minds\Entities\Activity;
use Minds\Entities\User;
use Minds\Entities\User;
@@ -14,12 +15,16 @@ class CreateActivitySpec extends ObjectBehavior
    /** @var Save */
    /** @var Save */
    protected $saveAction;
    protected $saveAction;


    /** @var Call */
    protected $db;

    function let(
    function let(
        Save $saveAction
        Save $saveAction,
        Call $db
    ) {
    ) {
        $this->beConstructedWith($saveAction);
        $this->beConstructedWith($saveAction, $db);

        $this->saveAction = $saveAction;
        $this->saveAction = $saveAction;
        $this->db = $db;
    }
    }


    function it_is_initializable()
    function it_is_initializable()
@@ -27,7 +32,7 @@ class CreateActivitySpec extends ObjectBehavior
        $this->shouldHaveType('Minds\Core\Blogs\Delegates\CreateActivity');
        $this->shouldHaveType('Minds\Core\Blogs\Delegates\CreateActivity');
    }
    }


    function it_should_save(
    function it_should_save_when_no_activity(
        Blog $blog,
        Blog $blog,
        User $user
        User $user
    )
    )
@@ -64,6 +69,10 @@ class CreateActivitySpec extends ObjectBehavior
            ->shouldBeCalled()
            ->shouldBeCalled()
            ->willReturn(false);
            ->willReturn(false);


        $blog->getGuid()
            ->shouldBeCalled()
            ->willReturn(9999);

        $user->export()
        $user->export()
            ->shouldBeCalled()
            ->shouldBeCalled()
            ->willReturn([]);
            ->willReturn([]);
@@ -72,6 +81,10 @@ class CreateActivitySpec extends ObjectBehavior
            ->shouldBeCalled()
            ->shouldBeCalled()
            ->willReturn(1000);
            ->willReturn(1000);


        $this->db->getRow("activity:entitylink:9999")
            ->shouldBeCalled()
            ->willReturn([]);

        $this->saveAction->setEntity(Argument::type(Activity::class))
        $this->saveAction->setEntity(Argument::type(Activity::class))
            ->shouldBeCalled()
            ->shouldBeCalled()
            ->willReturn($this->saveAction);
            ->willReturn($this->saveAction);
@@ -82,7 +95,23 @@ class CreateActivitySpec extends ObjectBehavior


        $this
        $this
            ->save($blog)
            ->save($blog)
            ->shouldNotThrow();
            ->shouldReturn(true);
    }


    function it_should_not_save_when_previous_activity(
        Blog $blog
    )
    {
        $blog->getGuid()
            ->shouldBeCalled()
            ->willReturn(9999);

        $this->db->getRow("activity:entitylink:9999")
            ->shouldBeCalled()
            ->willReturn(['activity1']);

        $this
            ->save($blog)
            ->shouldReturn(false);
    }
    }
}
}
+4 −3
Original line number Original line Diff line number Diff line
@@ -2,6 +2,7 @@
    "name": "minds/minds",
    "name": "minds/minds",
    "description": "The core minds social engine",
    "description": "The core minds social engine",
    "require": {
    "require": {
        "php": "~7.1",
        "aws/aws-sdk-php": "^3.38",
        "aws/aws-sdk-php": "^3.38",
        "braintree/braintree_php": "3.5.0",
        "braintree/braintree_php": "3.5.0",
        "datastax/php-driver": "1.2.2",
        "datastax/php-driver": "1.2.2",