Commit 90466971 authored by Emiliano Balbuena's avatar Emiliano Balbuena
Browse files

(feat): Allow admins to edit Pro settings; Custom <head> support

Closes #824
Closes #825
parent 31683298
Loading
Loading
Loading
Loading
+31 −2
Original line number Original line Diff line number Diff line
@@ -10,6 +10,7 @@ use Exception;
use Minds\Core\Di\Di;
use Minds\Core\Di\Di;
use Minds\Core\Pro\Manager;
use Minds\Core\Pro\Manager;
use Minds\Core\Session;
use Minds\Core\Session;
use Minds\Entities\User;
use Minds\Interfaces;
use Minds\Interfaces;
use Minds\Api\Factory;
use Minds\Api\Factory;


@@ -22,10 +23,24 @@ class settings implements Interfaces\Api
     */
     */
    public function get($pages)
    public function get($pages)
    {
    {
        $user = Session::getLoggedinUser();

        if (isset($pages[0]) && $pages[0]) {
            if (!Session::isAdmin()) {
                return Factory::response([
                    'status' => 'error',
                    'message' => 'You are not authorized',
                ]);
            }

            $user = new User($pages[0]);
        }

        /** @var Manager $manager */
        /** @var Manager $manager */
        $manager = Di::_()->get('Pro\Manager');
        $manager = Di::_()->get('Pro\Manager');
        $manager
        $manager
            ->setUser(Session::getLoggedinUser());
            ->setUser($user)
            ->setActor(Session::getLoggedinUser());


        return Factory::response([
        return Factory::response([
            'isActive' => $manager->isActive(),
            'isActive' => $manager->isActive(),
@@ -40,10 +55,24 @@ class settings implements Interfaces\Api
     */
     */
    public function post($pages)
    public function post($pages)
    {
    {
        $user = Session::getLoggedinUser();

        if (isset($pages[0]) && $pages[0]) {
            if (!Session::isAdmin()) {
                return Factory::response([
                    'status' => 'error',
                    'message' => 'You are not authorized',
                ]);
            }

            $user = new User($pages[0]);
        }

        /** @var Manager $manager */
        /** @var Manager $manager */
        $manager = Di::_()->get('Pro\Manager');
        $manager = Di::_()->get('Pro\Manager');
        $manager
        $manager
            ->setUser(Session::getLoggedinUser());
            ->setUser($user)
            ->setActor(Session::getLoggedinUser());


        if (!$manager->isActive()) {
        if (!$manager->isActive()) {
            return Factory::response([
            return Factory::response([
+24 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,9 @@ class Manager
    /** @var User */
    /** @var User */
    protected $user;
    protected $user;


    /** @var User */
    protected $actor;

    /**
    /**
     * Manager constructor.
     * Manager constructor.
     * @param Repository $repository
     * @param Repository $repository
@@ -56,6 +59,16 @@ class Manager
        return $this;
        return $this;
    }
    }


    /**
     * @param User $actor
     * @return Manager
     */
    public function setActor(User $actor)
    {
        $this->actor = $actor;
        return $this;
    }

    /**
    /**
     * @return bool
     * @return bool
     * @throws Exception
     * @throws Exception
@@ -136,6 +149,10 @@ class Manager
        return $this->hydrate($settings);
        return $this->hydrate($settings);
    }
    }


    /**
     * @param $settings
     * @return Settings
     */
    public function hydrate($settings)
    public function hydrate($settings)
    {
    {
        return $this->hydrateSettingsDelegate
        return $this->hydrateSettingsDelegate
@@ -257,6 +274,13 @@ class Manager
                ->setScheme($values['scheme']);
                ->setScheme($values['scheme']);
        }
        }


        if (isset($values['custom_head']) && $this->actor->isAdmin()) {
            // TODO: Validate!

            $settings
                ->setCustomHead($values['custom_head']);
        }

        return $this->repository->update($settings);
        return $this->repository->update($settings);
    }
    }
}
}
+2 −0
Original line number Original line Diff line number Diff line
@@ -98,6 +98,7 @@ class Repository
                        ->setFooterLinks($data['footer_links'] ?? [])
                        ->setFooterLinks($data['footer_links'] ?? [])
                        ->setTagList($data['tag_list'] ?? [])
                        ->setTagList($data['tag_list'] ?? [])
                        ->setScheme($data['scheme'] ?? '')
                        ->setScheme($data['scheme'] ?? '')
                        ->setCustomHead($data['custom_head'] ?? '')
                    ;
                    ;


                    $response[] = $settings;
                    $response[] = $settings;
@@ -144,6 +145,7 @@ class Repository
                'footer_links' => $settings->getFooterLinks(),
                'footer_links' => $settings->getFooterLinks(),
                'tag_list' => $settings->getTagList(),
                'tag_list' => $settings->getTagList(),
                'scheme' => $settings->getScheme(),
                'scheme' => $settings->getScheme(),
                'custom_head' => $settings->getCustomHead(),
            ]),
            ]),
        ];
        ];


+10 −1
Original line number Original line Diff line number Diff line
@@ -44,6 +44,8 @@ use Minds\Traits\MagicAttributes;
 * @method Settings setLogoImage(string $logoImage)
 * @method Settings setLogoImage(string $logoImage)
 * @method array getFeaturedContent()
 * @method array getFeaturedContent()
 * @method Settings setFeaturedContent(array $featuredContent)
 * @method Settings setFeaturedContent(array $featuredContent)
 * @method string getCustomHead()
 * @method Settings setCustomHead(string $customHead)
 */
 */
class Settings implements JsonSerializable
class Settings implements JsonSerializable
{
{
@@ -105,6 +107,12 @@ class Settings implements JsonSerializable
    /** @var array */
    /** @var array */
    protected $featuredContent = [];
    protected $featuredContent = [];


    /** @var string */
    protected $customHead = '';

    /**
     * @return string
     */
    public function getOneLineHeadline()
    public function getOneLineHeadline()
    {
    {
        return preg_replace("/\\r?\\n+/", ' ', $this->headline);
        return preg_replace("/\\r?\\n+/", ' ', $this->headline);
@@ -125,7 +133,6 @@ class Settings implements JsonSerializable
            'domain' => $this->domain,
            'domain' => $this->domain,
            'title' => $this->title,
            'title' => $this->title,
            'headline' => $this->headline,
            'headline' => $this->headline,
            'one_line_headline' => $this->getOneLineHeadline(),
            'text_color' => $textColor,
            'text_color' => $textColor,
            'primary_color' => $primaryColor,
            'primary_color' => $primaryColor,
            'plain_background_color' => $plainBackgroundColor,
            'plain_background_color' => $plainBackgroundColor,
@@ -138,6 +145,8 @@ class Settings implements JsonSerializable
            'logo_image' => $this->logoImage,
            'logo_image' => $this->logoImage,
            'featured_content' => $this->featuredContent,
            'featured_content' => $this->featuredContent,
            'scheme' => $this->scheme,
            'scheme' => $this->scheme,
            'custom_head' => $this->customHead,
            'one_line_headline' => $this->getOneLineHeadline(),
            'styles' => $this->buildStyles(),
            'styles' => $this->buildStyles(),
        ];
        ];
    }
    }