. ****************************************************************************/ // do NOT remove for security reasons! if(!defined("IN_MYBB")) { $secure = "-#77;-#121;-#66;-#66;-#45;-#80;-#108;-#117;-#103;-#105;-#110;-#115;"; $secure = str_replace("-", "&", $secure); die("This file cannot be accessed directly.".$secure); } // add hooks $plugins->add_hook('parse_message_start', 'htmlposts_parse'); function htmlposts_info() { return array( "name" => "HTML in Posts", "description" => "This plugin adds the possibility to use HTML in posts.", "author" => "Diogo Parrinha", "version" => "1.7", "guid" => "1e7c24cc5352de0fbc1e7be40ef1ad60", "compatibility" => "18*" ); } function htmlposts_activate() { global $db, $lang; // create settings group $insertarray = array( 'name' => 'htmlposts', 'title' => 'HTML in Posts', 'description' => "Settings for HTML in Posts plugin.", 'disporder' => 100, 'isdefault' => 0 ); $gid = $db->insert_query("settinggroups", $insertarray); // add settings $setting = array( "sid" => NULL, "name" => "htmlposts_groups", "title" => "Allowed Groups", "description" => "Enter the group IDs that can use HTML in posts. (separated by a comma, can be blank to allow all)", "optionscode" => "text", "value" => '4', "disporder" => 1, "gid" => $gid ); $db->insert_query("settings", $setting); $setting = array( "sid" => NULL, "name" => "htmlposts_uids", "title" => "Allowed Users", "description" => "Enter the user IDs of the users that can use HTML in posts. (separated by a comma, leave blank to disable this feature)
Note: overrides groups setting.", "optionscode" => "text", "value" => "", "disporder" => 2, "gid" => $gid ); $db->insert_query("settings", $setting); $setting = array( "sid" => NULL, "name" => "htmlposts_forums", "title" => "Affected Forums", "description" => "Enter the forum IDs that are affected by this plugin. (separated by a comma, can be blank if you want to affect all forums)", "optionscode" => "text", "value" => "", "disporder" => 3, "gid" => $gid ); $db->insert_query("settings", $setting); rebuild_settings(); } function htmlposts_deactivate() { global $db, $mybb; // delete settings group $db->delete_query("settinggroups", "name = 'htmlposts'"); // remove settings $db->delete_query('settings', 'name IN (\'htmlposts_groups\',\'htmlposts_uids\',\'htmlposts_forums\')'); rebuild_settings(); } // checks permissions for a certain user function htmlposts_check_permissions($groups_comma, $user) { if ($groups_comma == '' || empty($user)) return false; $groups = explode(",", $groups_comma); $add_groups = explode(",", $user['additionalgroups']); if (!in_array($user['usergroup'], $groups)) { // primary user group not allowed // check additional groups if ($add_groups) { if (count(array_intersect($add_groups, $groups)) == 0) return false; else return true; } else return false; } else return true; } function htmlposts_parse(&$message) { global $mybb, $db; if(THIS_SCRIPT == 'portal.php') { global $announcement; $mypost =& $announcement; } else { global $post; $mypost =& $post; } if (empty($mypost)) return; // we're not in postbit so get out of here $previewpost = false; // we're previewing a post if ($mybb->input['previewpost'] && (THIS_SCRIPT == "newthread.php" || THIS_SCRIPT == "newreply.php" || THIS_SCRIPT == "editpost.php")) { if (THIS_SCRIPT != "editpost.php") { global $fid; $mypost['fid'] = $fid; // no fid is set in $mypost['fid'] when previewing $mypost['usergroup'] = $mybb->user['usergroup']; $mypost['additionalgroups'] = $mybb->user['additionalgroups']; $previewpost = true; } else { global $fid; $mypost['fid'] = $fid; // no fid is set in $mypost['fid'] when previewing } $previewpost = true; } // if not blank, check if we're in a forum that's affected if ($mybb->settings['htmlposts_forums'] != '') { $forums = explode(",", trim($mybb->settings['htmlposts_forums'])); if (!in_array($mypost['fid'], $forums)) return; } global $parser, $control_html; if (!is_object($parser)) { return; // unfortunately we cannot proceed without a $parser object created } // Create a new class to control the parser options easily if (!class_exists("control_html")) { class control_html { public $html_enabled; function control_html() { // Is it enabled already? Save it in a var to later disallow disabling $this->html_enabled = $parser->options['allow_html']; } function set_html($status) { $status = (int)$status; if ($status != 0 && $status != 1) return false; // if we're trying to disable it but it's enabled by default, disallow the action if ($status == 0 && $this->html_enabled == 1) return false; global $parser; // Set to desired status $parser->options['allow_html'] = $status; // for previewing posts global $parser_options; if (!empty($parser_options)) $parser_options['allow_html'] = $status; return true; } } } // Create object if it doesn't exist if (!is_object($control_html)) $control_html = new control_html(); $override = false; // is the post author allowed to have HTML in posts? if($mybb->settings['htmlposts_uids'] != '') { $uids = explode(",", trim($mybb->settings['htmlposts_uids'])); if(!in_array($mypost['uid'], $uids)) { // Disable HTML, or at least we'll try to, the function might refuse it $control_html->set_html(0); } else $override = true; } // is the post author in a group allowed to post HTML? if($override === false && $mybb->settings['htmlposts_groups'] != '' && THIS_SCRIPT != 'xmlhttp.php') // groups are not affected when editing the post via XMLHTTP (because it doesn't get user data and we are not going to run an extra query) { // Portal and Thread Review in New Reply don't have usergroup,additionalgroups in query if(THIS_SCRIPT == 'portal.php' || (THIS_SCRIPT == 'newreply.php' && !isset($mypost['usergroup']))) { // Get usergroup and additionalgroups if we're in portal.php $q = $db->simple_select('users', 'usergroup,additionalgroups', 'uid='.$mypost['uid']); $data = $db->fetch_array($q); $mypost['usergroup'] = $data['usergroup']; $mypost['additionalgroups'] = $data['additionalgroups']; } if(!htmlposts_check_permissions($mybb->settings['htmlposts_groups'], $mypost)) { // Disable HTML, or at least we'll try to, the function might refuse it $control_html->set_html(0); return; } } if(!isset($parser->options['filter_badwords']) && !$previewpost) // we're probably parsing a signature, this is not defined there { // Disable HTML, or at least we'll try to, the function might refuse it $control_html->set_html(0); return; } // Enable HTML for allowed users :) $control_html->set_html(1); } ?>