public function bakeBbmTags() { $bbmTags = BBM_Helper_Bbm::getBbmBbCodes(); $activeAddons = XenForo_Application::isRegistered('addOns') ? XenForo_Application::get('addOns') : array(); $visitor = XenForo_Visitor::getInstance(); if (!is_array($bbmTags)) { return false; } $allBbmTags = array(); foreach ($bbmTags as $bbm) { if (!$bbm['active']) { continue; } if (!empty($activeAddons) && !empty($bbm['bbcode_addon'])) { if (!isset($activeAddons[$bbm['bbcode_addon']])) { //Skip Bb Codes linked to an addon when this addon is disabled continue; } } $tagName = $bbm['tag']; if (!empty($bbm['preParser'])) { $this->addPreParserBbCode($tagName); } } $this->_bbmTags = $allBbmTags; /**** * XenForo Options - only need to call once the options ***/ $options = XenForo_Application::get('options'); if (!empty($options->Bbm_PreCache_XenTags)) { foreach ($options->Bbm_PreCache_XenTags as $tagName) { $this->addPreParserBbCode($tagName); } } }
public static function xenWrapperCallback(array &$configs, XenForo_DataWriter $dw, $fieldName) { if (isset($configs['Bbm_wrapper_callback']) && $configs['Bbm_wrapper_callback'] == 'callback' && !BBM_Helper_Bbm::callbackChecker($configs['class'], $configs['method'])) { $dw->error(new XenForo_Phrase('bbm_xenwrapper_callback_not_valid')); } return true; }
public static function getCompatibility() { $redactorSupport = XenForo_Application::get('options')->get('currentVersionId') >= 1020031; $mceSupport = !$redactorSupport; if (BBM_Helper_Bbm::callbackChecker('Sedo_TinyQuattro_Helper_Quattro', 'isEnabled') && $redactorSupport) { //$redactorSupport added to conditional to match only XenForo > 1.2 $activeAddons = XenForo_Application::get('addOns'); $mceSupport = !empty($activeAddons['sedo_tinymce_quattro']) ? true : false; } return array($mceSupport, $redactorSupport); }
public static function getConfig($controllerName, $controllerAction, $viewName) { /*Init*/ $options = XenForo_Application::get('options'); $visitor = XenForo_Visitor::getInstance(); if (!empty($options->bbm_debug_tinymcehookdisable)) { return self::_fallBack(1); } $language = $visitor->getLanguage(); if (!empty($language['text_direction'])) { self::$textDirection = $language['text_direction']; } self::$controllerName = $controllerName; self::$controllerAction = $controllerAction; self::$viewName = $viewName; //Check if Quattro is enable $quattroEnable = BBM_Helper_Bbm::checkIfAddonActive('sedo_tinymce_quattro', true); //Which editor is being used? $options->quattro_iconsize is only use to check if the addon is installed or enable $editor = empty($visitor->permissions['sedo_quattro']['display']) || !$quattroEnable ? 'xen' : 'mce'; if (XenForo_Application::get('options')->get('currentVersionId') < 1020031) { $editor = 'mce'; } self::$editor = $editor; //Get buttons config $myConfigs = BBM_Helper_Bbm::getBbmButtons(); if (empty($myConfigs)) { return self::_fallBack(2); } //Only use the configuration for the current editor $myConfigs = $myConfigs['bbm_buttons']; //Check which Editor type must be used list($config_ed, $config_type) = self::_bakeEditorConfig($myConfigs, $editor); if (empty($myConfigs[$config_ed][$config_type]['config_buttons_order'])) { return self::_fallBack(3); } $extraParams = self::_bakeExtraParams($myConfigs[$config_ed][$config_type]['config_buttons_full'], $options, $visitor); if ($editor == 'mce' && $editor != $config_ed || $editor == 'xen') { $extraParams['loadQuattro'] = false; } else { $extraParams['loadQuattro'] = true; } return $extraParams; }
public function actionImportOverride() { if (!$this->isConfirmedPost()) { throw new XenForo_Exception(new XenForo_Phrase('bbm_forbidden_action'), true); } $xml = $this->_input->filterSingle('xml', XenForo_Input::STRING); $xmlObj = BBM_Helper_Bbm::scanXmlString($xml); $code = $this->_getImportValues($xmlObj->BbCode); $tag = $code['tag']; $tagId = $this->_getBbmBbCodeModel()->getBbCodeIdFromTag($tag); $dw = XenForo_DataWriter::create('BBM_DataWriter_BbCodes'); if ($this->_getBbmBbCodeModel()->getBbCodeById($tagId)) { $dw->setExistingData($tagId); $this->_getBbmButtonsModel()->addUpdateButtonInAllConfigs($code); } //$dw->setExtraData(BBM_DataWriter_BbCodes::ALLOW_OVERRIDE, true); $dw->bulkSet($code); $dw->save(); $this->_getBbmBbCodeModel()->simplecachedActiveBbCodes(); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildAdminLink('bbm-bbcodes')); }
protected function _manageButtonInAllConfigs($buttonData, $mode) { $datasToKeep = array_flip(BBM_Helper_Bbm::getColumnsToKeepInRegistry()); $buttonData = array_intersect_key($buttonData, $datasToKeep); $button_tag = $buttonData['tag']; $configs = $this->getAllConfigs(); foreach ($configs as $config_id => $config) { //Only continue if the config was set & wasn't empty (for ie: user delete a default button before to have set a config) if (empty($config['config_buttons_full']) || empty($config['config_buttons_order'])) { continue; } $config_type = $config['config_type']; $config_ed = $config['config_ed']; //Prepare two main elements $order = explode(',', $config['config_buttons_order']); $full = unserialize($config['config_buttons_full']); /*** Find the key inside the full configuration of the targeted button Info: the key is the position of the button and not its tag! **/ foreach ($full as $buttonIndex => $selectedbutton) { if (!isset($selectedbutton['tag'])) { continue; } if ($selectedbutton['tag'] == $button_tag) { $buttonPositionInFull = $buttonIndex; break; } } if (!isset($buttonPositionInFull)) { continue; } //Modify the button according to the chosen mode if ($mode == 'update') { if ($buttonData['active']) { $buttonData['class'] = 'activeButton'; } else { $buttonData['class'] = 'unactiveButton'; } //Update button values in the config $full[$buttonPositionInFull] = $buttonData; } elseif ($mode == 'delete') { $buttonPositionInOrder = array_search($button_tag, $order); unset($full[$buttonPositionInFull]); unset($order[$buttonPositionInOrder]); } elseif ($mode == 'toggleStatus') { if ($buttonData['active']) { $full[$buttonPositionInFull]['active'] = 0; $full[$buttonPositionInFull]['class'] = 'unactiveButton'; } else { $full[$buttonPositionInFull]['active'] = 1; $full[$buttonPositionInFull]['class'] = 'activeButton'; } } //Let's prepare the two main elements to be saved in the database $full = serialize($full); $order = implode(',', $order); //Save $dw = XenForo_DataWriter::create('BBM_DataWriter_Buttons'); if ($this->getConfigById($config_id)) { $dw->setExistingData($config_id); } $dw->set('config_type', $config_type); $dw->set('config_buttons_order', $order); $dw->set('config_buttons_full', $full); $dw->save(); //Update the Registry $this->InsertConfigInRegistry(); } }
public function bakeBbmTags() { $bbmTags = BBM_Helper_Bbm::getBbmBbCodes(); $activeAddons = XenForo_Application::isRegistered('addOns') ? XenForo_Application::get('addOns') : array(); $visitor = XenForo_Visitor::getInstance(); if (!is_array($bbmTags)) { return false; } $allBbmTags = array(); foreach ($bbmTags as $bbm) { if (!$bbm['active']) { continue; } if (!empty($activeAddons) && !empty($bbm['bbcode_addon'])) { if (!isset($activeAddons[$bbm['bbcode_addon']])) { //Skip Bb Codes linked to an addon when this addon is disabled continue; } } $tagName = $bbm['tag']; if ($bbm['start_range']) { $allBbmTags[$tagName]['options_number'] = $bbm['options_number']; $allBbmTags[$tagName]['start_range'] = $bbm['start_range']; $allBbmTags[$tagName]['end_range'] = $bbm['end_range']; $allBbmTags[$tagName]['callback'] = array($this, 'replacementMethodRenderer'); if ($bbm['plainCallback']) { $allBbmTags[$tagName]['parseCallback'] = array($this, 'parseValidatePlainIfNoOption'); } } elseif ($bbm['phpcallback_class']) { $this->_preLoadTemplatesFromCallback($bbm['phpcallback_class'], $bbm['phpcallback_method']); if ($this->_bbmCallbackChecker($bbm['phpcallback_class'], $bbm['phpcallback_method'])) { $allBbmTags[$tagName]['phpcallback_class'] = $bbm['phpcallback_class']; $allBbmTags[$tagName]['phpcallback_method'] = $bbm['phpcallback_method']; $allBbmTags[$tagName]['callback'] = array($this, 'PhpMethodRenderer'); $this->_prepareClassToLoad($bbm['phpcallback_class']); if ($bbm['plainCallback']) { $allBbmTags[$tagName]['parseCallback'] = array($this, 'parseValidatePlainIfNoOption'); } } else { $allBbmTags[$tagName]['callback'] = array($this, 'renderInvalidTag'); } } elseif ($bbm['template_active']) { //Preload template automatically $this->_preloadBbmTemplates[] = $bbm['template_name']; $allBbmTags[$tagName]['template_name'] = $bbm['template_name']; $allBbmTags[$tagName]['callback'] = array($this, 'TemplateMethodRenderer'); if ($bbm['template_callback_class']) { if ($this->_bbmCallbackChecker($bbm['template_callback_class'], $bbm['template_callback_method'])) { $allBbmTags[$tagName]['template_callback']['class'] = $bbm['template_callback_class']; $allBbmTags[$tagName]['template_callback']['method'] = $bbm['template_callback_method']; $this->_prepareClassToLoad($bbm['template_callback_class']); $this->_preLoadTemplatesFromCallback($bbm['template_callback_class'], $bbm['template_callback_method']); } else { $allBbmTags[$tagName]['callback'] = array($this, 'renderInvalidTag'); } } if ($bbm['plainCallback']) { $allBbmTags[$tagName]['parseCallback'] = array($this, 'parseValidatePlainIfNoOption'); } } if ($bbm['trimLeadingLinesAfter'] > 0 && $bbm['trimLeadingLinesAfter'] < 3) { $allBbmTags[$tagName]['trimLeadingLinesAfter'] = $bbm['trimLeadingLinesAfter']; } if ($bbm['regex']) { $allBbmTags[$tagName]['optionRegex'] = $bbm['regex']; } if ($bbm['plainChildren']) { $allBbmTags[$tagName]['plainChildren'] = true; } if ($bbm['stopSmilies']) { $allBbmTags[$tagName]['stopSmilies'] = true; } if ($bbm['stopLineBreakConversion']) { $allBbmTags[$tagName]['stopLineBreakConversion'] = true; } if ($bbm['parseOptions']) { $allBbmTags[$tagName]['parseOptions'] = true; } if ($bbm['parser_has_usr']) { $allBbmTags[$tagName]['parser_perms']['parser_has_usr'] = $bbm['parser_has_usr']; } if ($bbm['parser_usr']) { $allBbmTags[$tagName]['parser_perms']['parser_usr'] = $bbm['parser_usr']; } if ($bbm['parser_return']) { $allBbmTags[$tagName]['parser_perms']['parser_return'] = $bbm['parser_return']; } if ($bbm['parser_return_delay']) { $allBbmTags[$tagName]['parser_perms']['parser_return_delay'] = $bbm['parser_return_delay']; } $allBbmTags[$tagName]['view_perms']['can_view_content'] = true; if ($bbm['view_has_usr']) { $visitorUserGroupIds = array_merge(array((string) $visitor['user_group_id']), explode(',', $visitor['secondary_group_ids'])); $visitorsOk = unserialize($bbm['view_usr']); $canViewBbCode = array_intersect($visitorUserGroupIds, $visitorsOk) ? true : false; $allBbmTags[$tagName]['view_perms']['can_view_content'] = $canViewBbCode; $allBbmTags[$tagName]['view_perms']['view_return'] = $bbm['view_return']; /* if($bbm['view_return'] == 'default_template' && array_search('bbm_viewer_content_protected', $this->_preloadBbmTemplates) === false) { $this->_preloadBbmTemplates[] = 'bbm_viewer_content_protected'; } */ if ($bbm['view_return_delay']) { $allBbmTags[$tagName]['view_perms']['view_return_delay'] = $bbm['view_return_delay']; } } if ($bbm['wrapping_tag'] != 'none') { $allBbmTags[$tagName]['wrappingTag']['tag'] = $bbm['wrapping_tag']; if (!empty($bbm['wrapping_option'])) { $allBbmTags[$tagName]['wrappingTag']['option'] = $bbm['wrapping_option']; } } if ($bbm['emptyContent_check']) { $allBbmTags[$tagName]['emptyContent_check'] = true; } if (!empty($bbm['preParser'])) { $this->addPreParserBbCode($tagName); } $allBbmTags[$tagName]['allowSignature'] = $bbm['allow_signature']; $allBbmTags[$tagName]['options_separator'] = $bbm['options_separator']; $allBbmTags[$tagName]['bbcode_id'] = $bbm['bbcode_id']; } $this->_bbmTags = $allBbmTags; /**** * XenForo Options - only need to call once the options ***/ $options = XenForo_Application::get('options'); $this->_xenContentCheck = $options->Bbm_XenContentCheck; $this->_bbmSeparator = $options->Bbm_BbCode_Options_Separator; $disabledXenTags = !empty($options->Bbcm_xenTags_disabled) ? $options->Bbcm_xenTags_disabled : array(); $this->_bbmXenTagsParsingAllowedUsergroups = array('attach' => $options->Bbm_xenTags_disabled_usrgrp_attach, 'email' => $options->Bbm_xenTags_disabled_usrgrp_email, 'img' => $options->Bbm_xenTags_disabled_usrgrp_img, 'url' => $options->Bbm_xenTags_disabled_usrgrp_url, 'media' => $options->Bbm_xenTags_disabled_usrgrp_media); $this->_bbmXenTagsParsingAllowedNodes = array('attach' => $options->Bbm_xenTags_disabled_nodes_attach, 'email' => $options->Bbm_xenTags_disabled_nodes_email, 'img' => $options->Bbm_xenTags_disabled_nodes_img, 'url' => $options->Bbm_xenTags_disabled_nodes_url, 'media' => $options->Bbm_xenTags_disabled_nodes_media); if ($options->Bbm_wrapper_img != 'none' && !in_array('img', $disabledXenTags)) { $this->_xenWrappers['img'] = $options->Bbm_wrapper_img; if (!empty($options->Bbm_wrapper_img_option)) { $this->_xenWrappersOption['img'] = $options->Bbm_wrapper_img_option; } } if ($options->Bbm_wrapper_allcode != 'none') { $phcTags = array('php', 'html', 'code'); foreach ($phcTags as $tag) { if (!in_array($tag, $disabledXenTags)) { $this->_xenWrappers[$tag] = $options->Bbm_wrapper_allcode; if (!empty($options->Bbm_wrapper_allcode_option)) { $this->_xenWrappersOption[$tag] = $options->Bbm_wrapper_allcode_option; } } } } if ($options->Bbm_wrapper_attach != 'none' && !in_array('attach', $disabledXenTags)) { $this->_xenWrappers['attach'] = $options->Bbm_wrapper_attach; if (!empty($options->Bbm_wrapper_attach_option)) { $this->_xenWrappersOption['attach'] = $options->Bbm_wrapper_attach_option; } } if ($options->Bbm_wrapper_media != 'none' && !in_array('media', $disabledXenTags)) { $this->_xenWrappers['media'] = $options->Bbm_wrapper_media; if (!empty($options->Bbm_wrapper_media_option)) { $this->_xenWrappersOption['media'] = $options->Bbm_wrapper_media_option; } } if ($options->Bbm_wrapper_url != 'none' && !in_array('url', $disabledXenTags)) { $this->_xenWrappers['url'] = $options->Bbm_wrapper_url; if (!empty($options->Bbm_wrapper_url_option)) { $this->_xenWrappersOption['url'] = $options->Bbm_wrapper_url_option; } } if (!empty($options->Bbm_wrapper_callback) && $options->Bbm_wrapper_callback != 'none' && $this->_bbmCallbackChecker($xenWrapperCallback['class'], $xenWrapperCallback['method'])) { $xenWrapperCallback = $options->get('Bbm_wrapper_callback', false); $this->_xenWrappersCallback['class'] = $xenWrapperCallback['class']; $this->_xenWrappersCallback['method'] = $xenWrapperCallback['method']; $this->_prepareClassToLoad($xenWrapperCallback['class']); } if (!empty($options->Bbm_PreCache_XenTags)) { foreach ($options->Bbm_PreCache_XenTags as $tagName) { $this->addPreParserBbCode($tagName); } } }
/** * Get bbcodes with a button option */ public function getBbCodesWithButton($allFields = false) { $fields = $allFields ? '*' : implode(", ", BBM_Helper_Bbm::getColumnsToKeepInRegistry()); return $this->fetchAllKeyed("\n\t\t\tSELECT {$fields}\n\t\t\tFROM bbm\n\t\t\tWHERE hasButton = '1'\n\t\t\tORDER BY tag ASC\t\n\t\t", 'tag'); }
protected function _checkAddonStateForButton($button) { if (!isset($button['tag'])) { return null; } $tag = $button['tag']; if (empty($this->allDataButtons)) { $this->allDataButtons = $this->_getBbmBbCodeModel()->getBbCodesWithButton(true); } if (!isset($this->allDataButtons[$tag]) || empty($this->allDataButtons[$tag]['bbcode_addon'])) { return null; } $addonId = $this->allDataButtons[$tag]['bbcode_addon']; return BBM_Helper_Bbm::checkIfAddonActive($addonId); }