Example #1
0
 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);
         }
     }
 }
Example #2
0
 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;
 }
Example #3
0
 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);
 }
Example #4
0
 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;
 }
Example #5
0
 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'));
 }
Example #6
0
 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();
     }
 }
Example #7
0
 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);
         }
     }
 }
Example #8
0
 /**
  * 	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');
 }
Example #9
0
 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);
 }