Commit 90466971 authored by Emiliano Balbuena's avatar Emiliano Balbuena

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

Closes #824
Closes #825
1 merge request!308WIP: (feat): Minds Pro
Pipeline #81679144 failed with stages
in 4 minutes and 4 seconds
......@@ -10,6 +10,7 @@ use Exception;
use Minds\Core\Di\Di;
use Minds\Core\Pro\Manager;
use Minds\Core\Session;
use Minds\Entities\User;
use Minds\Interfaces;
use Minds\Api\Factory;
......@@ -22,10 +23,24 @@ class settings implements Interfaces\Api
*/
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 */
$manager = Di::_()->get('Pro\Manager');
$manager
->setUser(Session::getLoggedinUser());
->setUser($user)
->setActor(Session::getLoggedinUser());
return Factory::response([
'isActive' => $manager->isActive(),
......@@ -40,10 +55,24 @@ class settings implements Interfaces\Api
*/
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 */
$manager = Di::_()->get('Pro\Manager');
$manager
->setUser(Session::getLoggedinUser());
->setUser($user)
->setActor(Session::getLoggedinUser());
if (!$manager->isActive()) {
return Factory::response([
......
......@@ -27,6 +27,9 @@ class Manager
/** @var User */
protected $user;
/** @var User */
protected $actor;
/**
* Manager constructor.
* @param Repository $repository
......@@ -56,6 +59,16 @@ class Manager
return $this;
}
/**
* @param User $actor
* @return Manager
*/
public function setActor(User $actor)
{
$this->actor = $actor;
return $this;
}
/**
* @return bool
* @throws Exception
......@@ -136,6 +149,10 @@ class Manager
return $this->hydrate($settings);
}
/**
* @param $settings
* @return Settings
*/
public function hydrate($settings)
{
return $this->hydrateSettingsDelegate
......@@ -257,6 +274,13 @@ class Manager
->setScheme($values['scheme']);
}
if (isset($values['custom_head']) && $this->actor->isAdmin()) {
// TODO: Validate!
$settings
->setCustomHead($values['custom_head']);
}
return $this->repository->update($settings);
}
}
......@@ -98,6 +98,7 @@ class Repository
->setFooterLinks($data['footer_links'] ?? [])
->setTagList($data['tag_list'] ?? [])
->setScheme($data['scheme'] ?? '')
->setCustomHead($data['custom_head'] ?? '')
;
$response[] = $settings;
......@@ -144,6 +145,7 @@ class Repository
'footer_links' => $settings->getFooterLinks(),
'tag_list' => $settings->getTagList(),
'scheme' => $settings->getScheme(),
'custom_head' => $settings->getCustomHead(),
]),
];
......
......@@ -44,6 +44,8 @@ use Minds\Traits\MagicAttributes;
* @method Settings setLogoImage(string $logoImage)
* @method array getFeaturedContent()
* @method Settings setFeaturedContent(array $featuredContent)
* @method string getCustomHead()
* @method Settings setCustomHead(string $customHead)
*/
class Settings implements JsonSerializable
{
......@@ -105,6 +107,12 @@ class Settings implements JsonSerializable
/** @var array */
protected $featuredContent = [];
/** @var string */
protected $customHead = '';
/**
* @return string
*/
public function getOneLineHeadline()
{
return preg_replace("/\\r?\\n+/", ' ', $this->headline);
......@@ -125,7 +133,6 @@ class Settings implements JsonSerializable
'domain' => $this->domain,
'title' => $this->title,
'headline' => $this->headline,
'one_line_headline' => $this->getOneLineHeadline(),
'text_color' => $textColor,
'primary_color' => $primaryColor,
'plain_background_color' => $plainBackgroundColor,
......@@ -138,6 +145,8 @@ class Settings implements JsonSerializable
'logo_image' => $this->logoImage,
'featured_content' => $this->featuredContent,
'scheme' => $this->scheme,
'custom_head' => $this->customHead,
'one_line_headline' => $this->getOneLineHeadline(),
'styles' => $this->buildStyles(),
];
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment