facebook = $facebook; $this->pageId = $pageId; } public function canPublish(Message $message): bool { $canPublish = !empty(array_intersect($message->getNetworksToPublishOn(), [Enum::ANY, Enum::FACEBOOK])); return $canPublish; } public function publish(Message $message): bool { if (!$this->canPublish($message)) { throw new MessageNotIntendedForPublisher(Enum::FACEBOOK); } try { $publishPostEndpoint = '/'.$this->pageId.'/feed'; $response = $this->facebook->post( $publishPostEndpoint, $this->prepareParams($message) ); $post = $response->getGraphNode(); return isset($post['id']) ? !empty($post['id']) : false; } catch (\Exception $e) { throw new FailureWhenPublishingMessage($e); } } private function prepareParams(Message $message): array { $params = []; $params['message'] = $message->getMessage(); if (filter_var($message->getLink(), FILTER_VALIDATE_URL) !== false) { $params['link'] = $message->getLink(); } if (filter_var($message->getPictureLink(), FILTER_VALIDATE_URL) !== false) { $params['picture'] = $message->getPictureLink(); } if (!empty($message->getCaption())) { $params['caption'] = $message->getCaption(); } if (!empty($message->getDescription())) { $params['description'] = $message->getDescription(); } return $params; } }