* @return void */ public function setup_media_bbcode() { $this->language->add_lang('common', 'phpbb/mediaembed'); $this->template->assign_var('S_BBCODE_MEDIA', $this->config->offsetGet('media_embed_bbcode')); } /** * Set media embed forum and user PM permission * * @param \phpbb\event\data $event The event object * @return void */ public function set_permissions($event) { $event->update_subarray('permissions', 'f_mediaembed', ['lang' => 'ACL_F_MEDIAEMBED', 'cat' => 'content']); $event->update_subarray('permissions', 'u_pm_mediaembed', ['lang' => 'ACL_U_PM_MEDIAEMBED', 'cat' => 'pm']); } /** * Add Media Embed help to the BBCode Guide * * @param \phpbb\event\data $event The event object * @return void */ public function media_embed_help($event) { if ($event['block_name'] === 'HELP_BBCODE_BLOCK_OTHERS') { $this->language->add_lang('help', 'phpbb/mediaembed'); $this->template->assign_block_vars('faq_block', [ 'BLOCK_TITLE' => $this->language->lang('HELP_EMBEDDING_MEDIA'), 'SWITCH_COLUMN' => false, ]); $uid = $bitfield = $flags = ''; $demo_text = $this->language->lang('HELP_EMBEDDING_MEDIA_DEMO'); generate_text_for_storage($demo_text, $uid, $bitfield, $flags, true, true); $demo_display = generate_text_for_display($demo_text, $uid, $bitfield, $flags); $list_sites = implode(', ', $this->get_siteIds()); $this->template->assign_block_vars('faq_block.faq_row', [ 'FAQ_QUESTION' => $this->language->lang('HELP_EMBEDDING_MEDIA_QUESTION'), 'FAQ_ANSWER' => $this->language->lang('HELP_EMBEDDING_MEDIA_ANSWER', $demo_text, $demo_display, $list_sites), ]); } } /** * Disable Media Embed plugin and tag if necessary * * @param \phpbb\event\data $event The event object * @return void */ public function disable_media_embed($event) { /** @var \phpbb\textformatter\s9e\parser $service */ $service = $event['parser']; $parser = $service->get_parser(); if ($this->disable_plugin) { $parser->disablePlugin('MediaEmbed'); } if ($this->disable_tag) { $parser->disableTag('MEDIA'); } } /** * Set up a cache directory to improve scraping performance * * @param \phpbb\event\data $event The event object * @return void */ public function setup_cache_dir($event) { if ($this->cache_dir && $this->config->offsetGet('media_embed_enable_cache')) { /** @var \phpbb\textformatter\s9e\parser $service */ $service = $event['parser']; $parser = $service->get_parser(); $parser->registeredVars['cacheDir'] = $this->cache_dir; } } /** * Check if forum permission allows Media Embed * * @param \phpbb\event\data $event The event object * @return void */ public function check_forum_permission($event) { if (!$this->auth->acl_get('f_mediaembed', $event['forum_id']) || !$this->auth->acl_get('f_bbcode', $event['forum_id'])) { $this->disable_plugin = true; $this->disable_tag = true; } } /** * Check if user permission allows Media Embed in private messages * * @return void */ public function check_pm_permission() { if (!$this->auth->acl_get('u_pm_mediaembed')) { $this->disable_plugin = true; $this->disable_tag = true; } } /** * Check if signature posting is allowed. * Posting signatures is 'sig', reparsing signatures is 'user_signature'. * * @param \phpbb\event\data $event The event object * @return void */ public function check_signature($event) { if (($event['mode'] === 'sig' || $event['mode'] === 'text_reparser.user_signature') && !$this->config->offsetGet('media_embed_allow_sig')) { $this->disable_plugin = true; $this->disable_tag = true; } } /** * Check if magic urls is allowed. * * @param \phpbb\event\data $event The event object * @return void */ public function check_magic_urls($event) { if (!$event['allow_magic_url'] || !$this->config->offsetGet('media_embed_parse_urls')) { $this->disable_plugin = true; } } /** * Check if bbcodes are allowed. * * @param \phpbb\event\data $event The event object * @return void */ public function check_bbcode_enabled($event) { if (!$event['allow_bbcode']) { // Want to leave plugin enabled, but it seems plugin won't work // when tag is disabled, so we have to disable both it seems. $this->disable_plugin = true; $this->disable_tag = true; } } public function setup_media_configs() { $this->template->assign_vars([ 'S_MEDIA_EMBED_FULL_WIDTH' => $this->config->offsetGet('media_embed_full_width'), 'S_MEDIA_EMBED_MAX_WIDTHS' => json_decode($this->config_text->get('media_embed_max_width'), true), ]); } /** * Get allowed sites for media embedding * * @return array An array of sites */ protected function get_siteIds() { $siteIds = $this->config_text->get('media_embed_sites'); return $siteIds ? json_decode($siteIds, true) : []; } }