Loading Core/Pro/Manager.php +5 −0 Original line number Original line Diff line number Diff line Loading @@ -133,6 +133,11 @@ class Manager return null; return null; } } return $this->hydrate($settings); } public function hydrate($settings) { return $this->hydrateSettingsDelegate return $this->hydrateSettingsDelegate ->onGet($this->user, $settings); ->onGet($this->user, $settings); } } Loading Core/Pro/ProProvider.php +4 −0 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,10 @@ class ProProvider extends Provider return new Domain(); return new Domain(); }, ['useFactory' => true]); }, ['useFactory' => true]); $this->di->bind('Pro\SEO', function ($di) { return new SEO(); }, ['useFactory' => true]); $this->di->bind('Pro\Channel\Manager', function ($di) { $this->di->bind('Pro\Channel\Manager', function ($di) { return new Channel\Manager(); return new Channel\Manager(); }, ['useFactory' => true]); }, ['useFactory' => true]); Loading Core/Pro/SEO.php +24 −6 Original line number Original line Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Minds\Core\Pro; namespace Minds\Core\Pro; use Exception; use Minds\Core\Config; use Minds\Core\Config; use Minds\Core\Di\Di; use Minds\Core\Di\Di; use Minds\Core\EntitiesBuilder; use Minds\Core\EntitiesBuilder; Loading @@ -21,31 +22,48 @@ class SEO /** @var Config */ /** @var Config */ protected $config; protected $config; /** @var User */ protected $user; public function __construct(EntitiesBuilder $entitiesBuilder = null, Config $config = null) public function __construct(EntitiesBuilder $entitiesBuilder = null, Config $config = null) { { $this->entitiesBuilder = $entitiesBuilder ?: Di::_()->get('EntitiesBuilder'); $this->entitiesBuilder = $entitiesBuilder ?: Di::_()->get('EntitiesBuilder'); $this->config = $config ?: Di::_()->get('Config'); $this->config = $config ?: Di::_()->get('Config'); } } /** * @param User $user * @return SEO */ public function setUser(User $user) { $this->user = $user; return $this; } /** * @param Settings $proSettings * @throws Exception */ public function setup(Settings $proSettings) public function setup(Settings $proSettings) { { Manager::reset(); Manager::reset(); $channel = new User($proSettings->getUserGuid()); $title = $proSettings->getTitle() ?: $this->user->name; $title = $proSettings->getOneLineHeadline() ?? $channel->name; $tagList = array_map(function ($tag) { return $tag['tag']; }, $proSettings->getTagList()); Manager::setDefaults([ Manager::setDefaults([ 'title' => $title, 'title' => $title, 'description' => $proSettings->getOneLineHeadline(), 'description' => $proSettings->getOneLineHeadline(), 'keywords' => $channel->getTags(), 'keywords' => implode(',', $tagList), 'og:title' => $title, 'og:title' => $title, 'og:url' => $proSettings->getDomain(), 'og:url' => $proSettings->getDomain(), 'og:description' => $proSettings->getOneLineHeadline(), 'og:description' => $proSettings->getOneLineHeadline(), 'og:type' => 'website', 'og:type' => 'website', 'og:image' => $proSettings->getLogoImage() ?? $this->config->cdn_assets_url . 'assets/logos/placeholder.jpg', 'og:image' => $this->user->getIconURL('large'), 'og:image:width' => 471, 'og:image:height' => 199, ]); ]); Manager::add('/feed', [$this, 'activityHandler']); Manager::add('/feed', [$this, 'activityHandler']); Loading Core/Router/Middleware/ProMiddleware.php +46 −11 Original line number Original line Diff line number Diff line Loading @@ -6,26 +6,46 @@ namespace Minds\Core\Router\Middleware; namespace Minds\Core\Router\Middleware; use Minds\Core\EntitiesBuilder; use Minds\Core\Pro\Manager; use Minds\Core\Di\Di; use Minds\Core\Di\Di; use Minds\Core\Pro\Domain; use Minds\Core\Pro\Domain; use Minds\Core\Pro\SEO; use Zend\Diactoros\Response\JsonResponse; use Zend\Diactoros\Response\JsonResponse; use Zend\Diactoros\ServerRequest; use Zend\Diactoros\ServerRequest; use Minds\Core\Pro\SEO; class ProMiddleware implements RouterMiddleware class ProMiddleware implements RouterMiddleware { { /** @var Domain */ /** @var Domain */ protected $proDomain; protected $domain; /** @var Manager */ protected $manager; /** @var SEO */ protected $seo; /** @var EntitiesBuilder */ protected $entitiesBuilder; /** /** * ProMiddleware constructor. * ProMiddleware constructor. * @param Domain $proDomain * @param Domain $domain * @param Manager $manager * @param SEO $seo * @param EntitiesBuilder $entitiesBuilder */ */ public function __construct( public function __construct( $proDomain = null $domain = null, $manager = null, $seo = null, $entitiesBuilder = null ) ) { { $this->proDomain = $proDomain ?: Di::_()->get('Pro\Domain'); $this->domain = $domain ?: Di::_()->get('Pro\Domain'); $this->manager = $manager ?: Di::_()->get('Pro\Manager'); $this->seo = $seo ?: Di::_()->get('Pro\SEO'); $this->entitiesBuilder = $entitiesBuilder ?: Di::_()->get('EntitiesBuilder'); } } /** /** Loading @@ -35,22 +55,21 @@ class ProMiddleware implements RouterMiddleware */ */ public function onRequest(ServerRequest $request, JsonResponse &$response) public function onRequest(ServerRequest $request, JsonResponse &$response) { { $origin = $request->getServerParams()['HTTP_ORIGIN']; $serverParams = $request->getServerParams() ?? []; $host = parse_url($origin, PHP_URL_HOST); $host = parse_url($serverParams['HTTP_ORIGIN'] ?? '', PHP_URL_HOST) ?: $serverParams['HTTP_HOST']; if (!$host) { if (!$host) { return; return; } } $settings = $this->proDomain->lookup($host); $settings = $this->domain->lookup($host); if (!$settings) { if (!$settings) { return; return; } } (new SEO())->setup($settings); header(sprintf("Access-Control-Allow-Origin: %s", $host)); header(sprintf("Access-Control-Allow-Origin: %s", $origin)); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); header('Access-Control-Max-Age: 86400'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS'); Loading @@ -59,5 +78,21 @@ class ProMiddleware implements RouterMiddleware if ($request->getMethod() === 'OPTIONS') { if ($request->getMethod() === 'OPTIONS') { return false; return false; } } // Get Pro channel $user = $this->entitiesBuilder->single($settings->getUserGuid()); // Hydrate with asset URLs $settings = $this->manager ->setUser($user) ->hydrate($settings); // Setup SEO $this->seo ->setUser($user) ->setup($settings); } } } } Loading
Core/Pro/Manager.php +5 −0 Original line number Original line Diff line number Diff line Loading @@ -133,6 +133,11 @@ class Manager return null; return null; } } return $this->hydrate($settings); } public function hydrate($settings) { return $this->hydrateSettingsDelegate return $this->hydrateSettingsDelegate ->onGet($this->user, $settings); ->onGet($this->user, $settings); } } Loading
Core/Pro/ProProvider.php +4 −0 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,10 @@ class ProProvider extends Provider return new Domain(); return new Domain(); }, ['useFactory' => true]); }, ['useFactory' => true]); $this->di->bind('Pro\SEO', function ($di) { return new SEO(); }, ['useFactory' => true]); $this->di->bind('Pro\Channel\Manager', function ($di) { $this->di->bind('Pro\Channel\Manager', function ($di) { return new Channel\Manager(); return new Channel\Manager(); }, ['useFactory' => true]); }, ['useFactory' => true]); Loading
Core/Pro/SEO.php +24 −6 Original line number Original line Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Minds\Core\Pro; namespace Minds\Core\Pro; use Exception; use Minds\Core\Config; use Minds\Core\Config; use Minds\Core\Di\Di; use Minds\Core\Di\Di; use Minds\Core\EntitiesBuilder; use Minds\Core\EntitiesBuilder; Loading @@ -21,31 +22,48 @@ class SEO /** @var Config */ /** @var Config */ protected $config; protected $config; /** @var User */ protected $user; public function __construct(EntitiesBuilder $entitiesBuilder = null, Config $config = null) public function __construct(EntitiesBuilder $entitiesBuilder = null, Config $config = null) { { $this->entitiesBuilder = $entitiesBuilder ?: Di::_()->get('EntitiesBuilder'); $this->entitiesBuilder = $entitiesBuilder ?: Di::_()->get('EntitiesBuilder'); $this->config = $config ?: Di::_()->get('Config'); $this->config = $config ?: Di::_()->get('Config'); } } /** * @param User $user * @return SEO */ public function setUser(User $user) { $this->user = $user; return $this; } /** * @param Settings $proSettings * @throws Exception */ public function setup(Settings $proSettings) public function setup(Settings $proSettings) { { Manager::reset(); Manager::reset(); $channel = new User($proSettings->getUserGuid()); $title = $proSettings->getTitle() ?: $this->user->name; $title = $proSettings->getOneLineHeadline() ?? $channel->name; $tagList = array_map(function ($tag) { return $tag['tag']; }, $proSettings->getTagList()); Manager::setDefaults([ Manager::setDefaults([ 'title' => $title, 'title' => $title, 'description' => $proSettings->getOneLineHeadline(), 'description' => $proSettings->getOneLineHeadline(), 'keywords' => $channel->getTags(), 'keywords' => implode(',', $tagList), 'og:title' => $title, 'og:title' => $title, 'og:url' => $proSettings->getDomain(), 'og:url' => $proSettings->getDomain(), 'og:description' => $proSettings->getOneLineHeadline(), 'og:description' => $proSettings->getOneLineHeadline(), 'og:type' => 'website', 'og:type' => 'website', 'og:image' => $proSettings->getLogoImage() ?? $this->config->cdn_assets_url . 'assets/logos/placeholder.jpg', 'og:image' => $this->user->getIconURL('large'), 'og:image:width' => 471, 'og:image:height' => 199, ]); ]); Manager::add('/feed', [$this, 'activityHandler']); Manager::add('/feed', [$this, 'activityHandler']); Loading
Core/Router/Middleware/ProMiddleware.php +46 −11 Original line number Original line Diff line number Diff line Loading @@ -6,26 +6,46 @@ namespace Minds\Core\Router\Middleware; namespace Minds\Core\Router\Middleware; use Minds\Core\EntitiesBuilder; use Minds\Core\Pro\Manager; use Minds\Core\Di\Di; use Minds\Core\Di\Di; use Minds\Core\Pro\Domain; use Minds\Core\Pro\Domain; use Minds\Core\Pro\SEO; use Zend\Diactoros\Response\JsonResponse; use Zend\Diactoros\Response\JsonResponse; use Zend\Diactoros\ServerRequest; use Zend\Diactoros\ServerRequest; use Minds\Core\Pro\SEO; class ProMiddleware implements RouterMiddleware class ProMiddleware implements RouterMiddleware { { /** @var Domain */ /** @var Domain */ protected $proDomain; protected $domain; /** @var Manager */ protected $manager; /** @var SEO */ protected $seo; /** @var EntitiesBuilder */ protected $entitiesBuilder; /** /** * ProMiddleware constructor. * ProMiddleware constructor. * @param Domain $proDomain * @param Domain $domain * @param Manager $manager * @param SEO $seo * @param EntitiesBuilder $entitiesBuilder */ */ public function __construct( public function __construct( $proDomain = null $domain = null, $manager = null, $seo = null, $entitiesBuilder = null ) ) { { $this->proDomain = $proDomain ?: Di::_()->get('Pro\Domain'); $this->domain = $domain ?: Di::_()->get('Pro\Domain'); $this->manager = $manager ?: Di::_()->get('Pro\Manager'); $this->seo = $seo ?: Di::_()->get('Pro\SEO'); $this->entitiesBuilder = $entitiesBuilder ?: Di::_()->get('EntitiesBuilder'); } } /** /** Loading @@ -35,22 +55,21 @@ class ProMiddleware implements RouterMiddleware */ */ public function onRequest(ServerRequest $request, JsonResponse &$response) public function onRequest(ServerRequest $request, JsonResponse &$response) { { $origin = $request->getServerParams()['HTTP_ORIGIN']; $serverParams = $request->getServerParams() ?? []; $host = parse_url($origin, PHP_URL_HOST); $host = parse_url($serverParams['HTTP_ORIGIN'] ?? '', PHP_URL_HOST) ?: $serverParams['HTTP_HOST']; if (!$host) { if (!$host) { return; return; } } $settings = $this->proDomain->lookup($host); $settings = $this->domain->lookup($host); if (!$settings) { if (!$settings) { return; return; } } (new SEO())->setup($settings); header(sprintf("Access-Control-Allow-Origin: %s", $host)); header(sprintf("Access-Control-Allow-Origin: %s", $origin)); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); header('Access-Control-Max-Age: 86400'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS'); Loading @@ -59,5 +78,21 @@ class ProMiddleware implements RouterMiddleware if ($request->getMethod() === 'OPTIONS') { if ($request->getMethod() === 'OPTIONS') { return false; return false; } } // Get Pro channel $user = $this->entitiesBuilder->single($settings->getUserGuid()); // Hydrate with asset URLs $settings = $this->manager ->setUser($user) ->hydrate($settings); // Setup SEO $this->seo ->setUser($user) ->setup($settings); } } } }