Commit ddc94313 authored by Olivia Madrid's avatar Olivia Madrid
Browse files

(wip): scheduled posts - session with Mark

parent e7fc0033
Loading
Loading
Loading
Loading
+69 −0
Original line number Original line Diff line number Diff line
<?php

namespace Minds\Controllers\api\v2\newsfeed;

use Minds\Api\Factory;
use Minds\Core;
use Minds\Entities;
use Minds\Entities\Activity;
use Minds\Interfaces;
use Minds\Core\Di\Di;
use Minds\Core\Feeds\Scheduler\ScheduledPost;

class scheduler implements Interfaces\Api
{
    public function get($pages)
    {
        $manager = Di::_()->get('Feeds\Scheduler\Manager');
        return Factory::response([
            "say" => $manager->sayHello()
        ]);
    }

    public function post($pages)
    { 
        $manager = Di::_()->get('Feeds\Scheduler\Manager');
        $scheduledPost = new ScheduledPost;

        if (!isset($_POST['scheduled_time'])) {
            return Factory::response([
                'status' => 'error',
                'message' => 'Please choose a time',
            ]);
        }

        if ($_POST['scheduled_time'] < round(microtime(true) * 1000)) {
            return Factory::response([
                'status' => 'error',
                'message' => 'Please choose a time in the future',
            ]);
        }

        $scheduledPost->setScheduledTime($_POST['scheduled_time'])
            ->setEntityGuid($_POST['entity_guid'])
            ->setOwnerGuid(Core\Session::getLoggedinUser()->getGuid());
        
        $success = $manager->add($scheduledPost);

        if (!$success) {
            return Factory::response([
                'status' => 'error',
                'message' => 'Entity does not exist',
            ]);
        }

        return Factory::response([
            "scheduled_post" => $scheduledPost->export(),
        ]);
    }

    public function put($pages)
    {
        return Factory::response([]);
    }

    public function delete($pages)
    {
        return Factory::response([]);
    }
}
+4 −0
Original line number Original line Diff line number Diff line
@@ -17,5 +17,9 @@ class FeedsProvider extends Provider {
        $this->di->bind('Feeds\Top\Manager', function($di) {
        $this->di->bind('Feeds\Top\Manager', function($di) {
            return new Top\Manager();
            return new Top\Manager();
        });
        });

        $this->di->bind('Feeds\Scheduler\Manager', function($di) {
            return new Scheduler\Manager();
        });
    }
    }
}
}
+39 −0
Original line number Original line Diff line number Diff line
<?php

namespace Minds\Core\Feeds\Scheduler;

use Minds\Core;
use Minds\Core\Di\Di;
use Minds\Entities\Entity;
use Minds\Core\EntitiesBuilder;

class Manager
{
    /** @var Repository $repository */
    private $repository;
    
    /** @var EntitiesBuilder $entitiesBuilder */
    private $entitiesBuilder;

    public function __construct(
        $repository = null,
        $entitiesBuilder = null
    ) {
        $this->repository = $repository ?: new Repository;
        $this->entitiesBuilder = $entitiesBuilder ?: new EntitiesBuilder;
    }

    public function add($scheduledPost)
    {
        $entity = $this->entitiesBuilder->single($scheduledPost->getEntityGuid());
        $scheduledPost->setEntity($entity);

        if (!$entity) {
            return false;
        }

        return $this->repository->add($scheduledPost);
    }

   
}
+21 −0
Original line number Original line Diff line number Diff line
<?php

namespace Minds\Core\Feeds\Scheduler;

use Minds\Core\Di\Di;

class Repository
{
    /** @var \PDO */
    protected $db;

    public function __construct($db = null)
    {
        $this->db = $db ?: Di::_()->get('Database\PDO');
    }

    public function add($scheduledPost)
    {
        return true;
    }
}
+35 −0
Original line number Original line Diff line number Diff line
<?php
/**
 * Minds Scheduled Post
 */
namespace Minds\Core\Feeds\Scheduler;

use Minds\Traits\MagicAttributes;

class ScheduledPost
{
    use MagicAttributes;

    /** @var Entity $entity */
    private $entity;

    /** @var long $entityGuid */
    private $entityGuid;

    /** @var long $ownerGuid */
    private $ownerGuid;

    /** @var long $scheduledTime */
    private $scheduledTime;

    public function export($fields = [])
    {
        return [
            "entity" => $this->export ? $this->entity->export() : null,
            "entity_guid" => $this->entityGuid,
            "owner_guid" => $this->ownerGuid,
            "scheduled_time" => $this->scheduledTime,
        ];
    }

}
Loading