*/ class admin_plugin_newsfeed_push extends AdminPlugin { private helper_plugin_newsfeed $helper; public function __construct() { $this->helper = $this->loadHelper('newsfeed'); } public function getMenuSort(): int { return 291; } public function forAdminOnly(): bool { return false; } public function getMenuText($lang): string { return $this->getLang('push_menu'); } public function handle() { global $INPUT; if (!checkSecurityToken()) { return; } $stream = $this->helper->serviceStream->findByName($INPUT->param('news')['stream']); $newsId = $INPUT->param('news')['id']; if ($stream && $newsId) { $targetStreamId = $stream->streamId; $streamIds = [$targetStreamId]; if ($INPUT->str('all_dependence')) { $this->helper->fullParentDependence($targetStreamId, $streamIds); } foreach ($streamIds as $streamId) { $this->helper->servicePriority->store($newsId, $streamId); } header('Location: ' . $_SERVER['REQUEST_URI']); exit(); } } public function html(): void { global $INPUT; $streamName = $INPUT->param('news')['stream']; $stream = $this->helper->serviceStream->findByName($streamName); echo '

' . $this->getLang('push_menu') . '

'; echo '
' . $this->getLang('push_in_stream') . ': ' . $stream->name . '
'; $streams = $this->helper->serviceStream->getAll(); echo $this->getChangeStreamForm($streams)->toHTML(); if ($stream->name) { echo '

' . $this->getLang('push_menu') . ': ' . $stream->name . '

'; $newsInStream = $this->newsToId($stream->getNews()); $allNews = $this->helper->serviceNews->getAll(); foreach ($this->newsToId($allNews) as $id) { if (array_search($id, $newsInStream) === false) { $news = $this->helper->serviceNews->getById($id); echo $news->render('even', ' ', ' ', false); echo $this->newsAddForm($stream->name, $id); echo '
'; tpl_flush(); } } } } /** * @param $news ModelNews[] * @return integer[] */ private function newsToId(array $news): array { return array_map(function (ModelNews $value) { return $value->newsId; }, $news); } /** * @param $streamValues ModelStream[] * @return Form * */ private function getChangeStreamForm(array $streamValues = []): Form { $form = new Form(); $form->addDropdown('news[stream]', array_map(function (ModelStream $value) { return $value->name; }, $streamValues), $this->getLang('stream')); $form->addButton('submit', $this->getLang('push_choose_stream')); return $form; } private function newsAddForm(string $stream, int $newsId): string { $newsForm = new Form(); $newsForm->setHiddenField('do', 'admin'); $newsForm->setHiddenField('page', 'newsfeed_push'); $newsForm->setHiddenField('news[do]', 'push'); $newsForm->setHiddenField('news[id]', $newsId); $newsForm->setHiddenField('news[stream]', $stream); $newsForm->addCheckbox('all_dependence', $this->getLang('alw_dep')); $newsForm->addButton('submit', $this->getLang('btn_push_news') . $stream); return $newsForm->toHTML(); } }