Beispiel #1
0
/**
* Prepares the templates for a message editor
*
* @param	string	The text to be initially loaded into the editor
* @param	boolean	Is the initial text HTML (rather than plain text or bbcode)?
* @param	mixed	Forum ID of the forum into which we are posting. Special rules apply for values of 'privatemessage', 'usernote', 'calendar', 'announcement' and 'nonforum'
* @param	boolean	Allow smilies?
* @param	boolean	Parse smilies in the text of the message?
* @param	boolean	Allow attachments?
* @param	string	Editor type - either 'fe' for full editor or 'qr' for quick reply
* @param	string	Force the editor to use the specified value as its editorid, rather than making one up
*
* @return	string	Editor ID
*/
function construct_edit_toolbar($text = '', $ishtml = false, $forumid = 0, $allowsmilie = true, $parsesmilie = true, $can_attach = false, $editor_type = 'fe', $force_editorid = '')
{
    // standard stuff
    global $vbulletin, $vbphrase, $stylevar, $show;
    // templates generated by this function
    global $messagearea, $smiliebox, $disablesmiliesoption, $checked, $vBeditTemplate;
    // misc stuff built by this function
    global $istyles;
    // counter for editorid
    static $editorcount = 0;
    // determine what we can use
    // this was moved up here as I need the switch to determine if bbcode is enabled
    // to determine if a toolbar is usable
    if ($forumid == 'signature') {
        $sig_perms =& $vbulletin->userinfo['permissions']['signaturepermissions'];
        $sig_perms_bits =& $vbulletin->bf_ugp_signaturepermissions;
        $can_toolbar = $sig_perms & $sig_perms_bits['canbbcode'] ? true : false;
        $show['img_bbcode'] = $sig_perms & $sig_perms_bits['allowimg'] ? true : false;
        $show['font_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodefont'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_FONT) ? true : false;
        $show['size_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodesize'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_SIZE) ? true : false;
        $show['color_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodecolor'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_COLOR) ? true : false;
        $show['basic_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodebasic'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_BASIC) ? true : false;
        $show['align_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodealign'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_ALIGN) ? true : false;
        $show['list_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodelist'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_LIST) ? true : false;
        $show['code_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodecode'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_CODE) ? true : false;
        $show['html_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodehtml'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_HTML) ? true : false;
        $show['php_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodephp'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_PHP) ? true : false;
        $show['url_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodelink'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_URL) ? true : false;
        $show['quote_bbcode'] = $sig_perms & $sig_perms_bits['canbbcodequote'] ? true : false;
    } else {
        require_once DIR . '/includes/class_bbcode.php';
        $show['font_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_FONT ? true : false;
        $show['size_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_SIZE ? true : false;
        $show['color_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_COLOR ? true : false;
        $show['basic_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_BASIC ? true : false;
        $show['align_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_ALIGN ? true : false;
        $show['list_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_LIST ? true : false;
        $show['code_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_CODE ? true : false;
        $show['html_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_HTML ? true : false;
        $show['php_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_PHP ? true : false;
        $show['url_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_URL ? true : false;
        $show['quote_bbcode'] = true;
        // can't disable this anywhere but in sigs
    }
    $ajax_extra = '';
    $allow_custom_bbcode = true;
    if (empty($forumid)) {
        $forumid = 'nonforum';
    }
    switch ($forumid) {
        case 'privatemessage':
            $can_toolbar = $vbulletin->options['privallowbbcode'];
            $show['img_bbcode'] = $vbulletin->options['privallowbbimagecode'];
            break;
        case 'usernote':
            $can_toolbar = $vbulletin->options['unallowvbcode'];
            $show['img_bbcode'] = $vbulletin->options['unallowimg'];
            break;
        case 'calendar':
            global $calendarinfo;
            $can_toolbar = $calendarinfo['allowbbcode'];
            $show['img_bbcode'] = $calendarinfo['allowimgcode'];
            $ajax_extra = "calendarid={$calendarinfo['calendarid']}";
            break;
        case 'announcement':
            $can_toolbar = true;
            $show['img_bbcode'] = true;
            break;
        case 'signature':
            // see above -- these are handled earlier
            break;
        case 'visitormessage':
        case 'groupmessage':
        case 'picturecomment':
            switch ($forumid) {
                case 'groupmessage':
                    $allowedoption = $vbulletin->options['sg_allowed_bbcode'];
                    break;
                case 'picturecomment':
                    $allowedoption = $vbulletin->options['pc_allowed_bbcode'];
                    break;
                default:
                    $allowedoption = $vbulletin->options['vm_allowed_bbcode'];
                    break;
            }
            $show['font_bbcode'] = ($show['font_bbcode'] and $allowedoption & ALLOW_BBCODE_FONT) ? true : false;
            $show['size_bbcode'] = ($show['size_bbcode'] and $allowedoption & ALLOW_BBCODE_SIZE) ? true : false;
            $show['color_bbcode'] = ($show['color_bbcode'] and $allowedoption & ALLOW_BBCODE_COLOR) ? true : false;
            $show['basic_bbcode'] = ($show['basic_bbcode'] and $allowedoption & ALLOW_BBCODE_BASIC) ? true : false;
            $show['align_bbcode'] = ($show['align_bbcode'] and $allowedoption & ALLOW_BBCODE_ALIGN) ? true : false;
            $show['list_bbcode'] = ($show['list_bbcode'] and $allowedoption & ALLOW_BBCODE_LIST) ? true : false;
            $show['code_bbcode'] = ($show['code_bbcode'] and $allowedoption & ALLOW_BBCODE_CODE) ? true : false;
            $show['html_bbcode'] = ($show['html_bbcode'] and $allowedoption & ALLOW_BBCODE_HTML) ? true : false;
            $show['php_bbcode'] = ($show['php_bbcode'] and $allowedoption & ALLOW_BBCODE_PHP) ? true : false;
            $show['url_bbcode'] = ($show['url_bbcode'] and $allowedoption & ALLOW_BBCODE_URL) ? true : false;
            $show['quote_bbcode'] = ($show['quote_bbcode'] and $allowedoption & ALLOW_BBCODE_QUOTE) ? true : false;
            $show['img_bbcode'] = $allowedoption & ALLOW_BBCODE_IMG ? true : false;
            $can_toolbar = ($show['font_bbcode'] or $show['size_bbcode'] or $show['color_bbcode'] or $show['basic_bbcode'] or $show['align_bbcode'] or $show['list_bbcode'] or $show['code_bbcode'] or $show['html_bbcode'] or $show['php_bbcode'] or $show['url_bbcode'] or $show['quote_bbcode'] or $show['img_bbcode']);
            $allow_custom_bbcode = $allowedoption & ALLOW_BBCODE_CUSTOM ? true : false;
            break;
        case 'nonforum':
            $can_toolbar = $vbulletin->options['allowbbcode'];
            $show['img_bbcode'] = $vbulletin->options['allowbbimagecode'];
            break;
        default:
            if (intval($forumid)) {
                $forum = fetch_foruminfo($forumid);
                $can_toolbar = $forum['allowbbcode'];
                $show['img_bbcode'] = $forum['allowimages'];
            } else {
                $can_toolbar = false;
                $show['img_bbcode'] = false;
            }
            ($hook = vBulletinHook::fetch_hook('editor_toolbar_switch')) ? eval($hook) : false;
            break;
    }
    // set the editor mode
    if (isset($_REQUEST['wysiwyg'])) {
        // 2 = wysiwyg; 1 = standard
        if ($_REQUEST['wysiwyg']) {
            $vbulletin->userinfo['showvbcode'] = 2;
        } else {
            if ($vbulletin->userinfo['showvbcode'] == 0) {
                $vbulletin->userinfo['showvbcode'] = 0;
            } else {
                $vbulletin->userinfo['showvbcode'] = 1;
            }
        }
    }
    $toolbartype = $can_toolbar ? is_wysiwyg_compatible(-1, $editor_type) : 0;
    $show['wysiwyg_compatible'] = is_wysiwyg_compatible(2, $editor_type) == 2;
    $show['editor_toolbar'] = $toolbartype > 0;
    switch ($editor_type) {
        case 'qr':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $editor_height = 100;
            $editor_template_name = 'showthread_quickreply';
            break;
        case 'qr_small':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $editor_height = 60;
            $editor_template_name = 'showthread_quickreply';
            break;
        case 'qe':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QE';
            } else {
                $editorid = $force_editorid;
            }
            $editor_height = 200;
            $editor_template_name = 'postbit_quickedit';
            break;
        default:
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_' . str_pad(++$editorcount, 3, 0, STR_PAD_LEFT);
            } else {
                $editorid = $force_editorid;
            }
            // set the height of the editor based on the editor_height cookie if it exists
            $editor_height = $vbulletin->input->clean_gpc('c', 'editor_height', TYPE_UINT);
            $editor_height = $editor_height > 100 ? $editor_height : 250;
            $editor_template_name = $toolbartype ? 'editor_toolbar_on' : 'editor_toolbar_off';
            break;
    }
    // init the variables used by the templates built by this function
    $vBeditJs = array('font_options_array' => '', 'size_options_array' => '', 'istyle_array' => '', 'normalmode' => 'false');
    $vBeditTemplate = array('extrabuttons' => '', 'clientscript' => '', 'fontfeedback' => '', 'sizefeedback' => '', 'smiliepopup' => '');
    ($hook = vBulletinHook::fetch_hook('editor_toolbar_start')) ? eval($hook) : false;
    // show a post editing toolbar of some sort
    if ($show['editor_toolbar']) {
        if ($can_attach) {
            $show['attach'] = true;
        }
        $vBeditJs = construct_editor_js_arrays();
        // get extra buttons... experimental at the moment
        $vBeditTemplate['extrabuttons'] = construct_editor_extra_buttons($editorid, $allow_custom_bbcode);
        if ($toolbartype == 2) {
            // got to parse the message to be displayed from bbcode into HTML
            if ($text !== '') {
                require_once DIR . '/includes/functions_wysiwyg.php';
                $newpost['message'] = parse_wysiwyg_html($text, $ishtml, $forumid, iif($allowsmilie and $parsesmilie, 1, 0));
            } else {
                $newpost['message'] = '';
            }
            $newpost['message'] = htmlspecialchars($newpost['message']);
        } else {
            $newpost['message'] = $text;
            // set mode based on cookie set by javascript
            /*$vbulletin->input->clean_gpc('c', COOKIE_PREFIX . 'vbcodemode', TYPE_INT);
            		$modechecked[$vbulletin->GPC[COOKIE_PREFIX . 'vbcodemode']] = 'checked="checked"';*/
        }
    } else {
        // do not show a post editing toolbar
        $newpost['message'] = $text;
    }
    // disable smilies option and clickable smilie
    $show['smiliebox'] = false;
    $smiliebox = '';
    $disablesmiliesoption = '';
    if ($editor_type == 'qr' or $editor_type == 'qr_small') {
        // no smilies
    } else {
        if ($allowsmilie and $show['editor_toolbar']) {
            // deal with disable smilies option
            if (!isset($checked['disablesmilies'])) {
                $vbulletin->input->clean_gpc('r', 'disablesmilies', TYPE_BOOL);
                $checked['disablesmilies'] = iif($vbulletin->GPC['disablesmilies'], 'checked="checked"');
            }
            eval('$disablesmiliesoption = "' . fetch_template('newpost_disablesmiliesoption') . '";');
            if ($toolbartype and ($vbulletin->options['smtotal'] > 0 or $vbulletin->options['wysiwyg_smtotal'] > 0)) {
                // query smilies
                $smilies = $vbulletin->db->query_read_slave("\n\t\t\t\tSELECT smilieid, smilietext, smiliepath, smilie.title,\n\t\t\t\t\timagecategory.title AS category\n\t\t\t\tFROM " . TABLE_PREFIX . "smilie AS smilie\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "imagecategory AS imagecategory USING(imagecategoryid)\n\t\t\t\tORDER BY imagecategory.displayorder, imagecategory.title, smilie.displayorder\n\t\t\t");
                // get total number of smilies
                $totalsmilies = $vbulletin->db->num_rows($smilies);
                if ($totalsmilies > 0) {
                    if ($vbulletin->options['wysiwyg_smtotal'] > 0) {
                        $show['wysiwygsmilies'] = true;
                        // smilie dropdown menu
                        $vBeditJs['smilie_options_array'] = array();
                        $i = 0;
                        while ($smilie = $vbulletin->db->fetch_array($smilies)) {
                            if (empty($prevcategory)) {
                                $prevcategory = $smilie['category'];
                            }
                            if ($i++ < $vbulletin->options['wysiwyg_smtotal']) {
                                $vBeditJs['smilie_options_array']["{$smilie['category']}"][] = "\t\t'{$smilie['smilieid']}' : new Array('" . addslashes_js($smilie['smiliepath']) . "', '" . addslashes_js($smilie['smilietext']) . "', '" . addslashes_js($smilie['title']) . "')";
                            } else {
                                $vBeditJs['smilie_options_array']["{$prevcategory}"][] = "\t\t'more' : '" . addslashes_js($vbphrase['show_all_smilies']) . "'\n";
                                break;
                            }
                            $prevcategory = $smilie['category'];
                        }
                        foreach (array_keys($vBeditJs['smilie_options_array']) as $category) {
                            $vBeditJs['smilie_options_array']["{$category}"] = "\t'" . addslashes_js($category) . "' : {\n" . implode(",\n", $vBeditJs['smilie_options_array']["{$category}"]) . "}";
                        }
                        $vBeditJs['smilie_options_array'] = "\n" . implode(",\n", $vBeditJs['smilie_options_array']);
                    } else {
                        $show['wysiwygsmilies'] = false;
                    }
                    // clickable smilie box
                    if ($vbulletin->options['smtotal']) {
                        $vbulletin->db->data_seek($smilies, 0);
                        $i = 0;
                        $bits = array();
                        while ($smilie = $vbulletin->db->fetch_array($smilies) and $i++ < $vbulletin->options['smtotal']) {
                            $smiliehtml = "<img src=\"{$smilie['smiliepath']}\" id=\"{$editorid}_smilie_{$smilie['smilieid']}\" alt=\"" . htmlspecialchars_uni($smilie['smilietext']) . "\" title=\"" . htmlspecialchars_uni($smilie['title']) . "\" border=\"0\" class=\"inlineimg\" />";
                            eval('$bits[] = "' . fetch_template('editor_smilie') . '";');
                            if (sizeof($bits) == $vbulletin->options['smcolumns']) {
                                $smiliecells = implode('', $bits);
                                eval('$smiliebits .= "' . fetch_template('editor_smiliebox_row') . '";');
                                $bits = array();
                            }
                        }
                        // fill in empty cells if required
                        $remaining = sizeof($bits);
                        if ($remaining > 0) {
                            $remainingcolumns = $vbulletin->options['smcolumns'] - $remaining;
                            eval('$bits[] = "' . fetch_template('editor_smiliebox_straggler') . '";');
                            $smiliecells = implode('', $bits);
                            eval('$smiliebits .= "' . fetch_template('editor_smiliebox_row') . '";');
                        }
                        $show['moresmilieslink'] = iif($totalsmilies > $vbulletin->options['smtotal'], true, false);
                        $show['smiliebox'] = true;
                    }
                    $vbulletin->db->free_result($smilies);
                }
            }
            eval('$smiliebox = "' . fetch_template('editor_smiliebox') . '";');
        }
    }
    ($hook = vBulletinHook::fetch_hook('editor_toolbar_end')) ? eval($hook) : false;
    // check that $editor_css has been built
    if (!isset($GLOBALS['editor_css'])) {
        eval('$GLOBALS[\'editor_css\'] = "' . fetch_template('editor_css') . '";');
        $GLOBALS['headinclude'] .= "<!-- Editor CSS automatically added by " . substr(strrchr(__FILE__, DIRECTORY_SEPARATOR), 1) . " at line " . __LINE__ . " -->\n" . $GLOBALS['editor_css'];
    }
    eval('$vBeditTemplate[\'clientscript\'] = "' . fetch_template('editor_clientscript') . '";');
    $ajax_extra = addslashes_js($ajax_extra);
    $editortype = $toolbartype == 2 ? 1 : 0;
    $show['is_wysiwyg_editor'] = intval($editortype);
    eval('$messagearea = "' . fetch_template($editor_template_name) . '";');
    return $editorid;
}
/**
* Prepares the templates for a message editor
*
* @param	string	The text to be initially loaded into the editor
* @param	boolean	Is the initial text HTML (rather than plain text or bbcode)?
* @param	mixed	Forum ID of the forum into which we are posting. Special rules apply for values of 'privatemessage', 'usernote', 'calendar', 'announcement' and 'nonforum'. Can be an object of vB_Editor_Override as well.
* @param	boolean	Allow smilies?
* @param	boolean	Parse smilies in the text of the message?
* @param	boolean	Allow attachments?
* @param	string	Editor type - either 'fe' for full editor or 'qr' for quick reply
* @param	string	Force the editor to use the specified value as its editorid, rather than making one up
* @param	array		Information for the image popup
* @param	array		Content type handled by this editor, used to set specific CSS
*
* @return	string	Editor ID
*/
function construct_edit_toolbar($text = '', $ishtml = false, $forumid = 0, $allowsmilie = true, $parsesmilie = true, $can_attach = false, $editor_type = 'fe', $force_editorid = '', $attachinfo = array(), $content = 'content')
{
    // standard stuff
    global $vbulletin, $vbphrase, $show;
    // templates generated by this function
    global $messagearea, $smiliebox, $disablesmiliesoption, $checked, $vBeditTemplate;
    // misc stuff built by this function
    global $istyles;
    // counter for editorid
    static $editorcount = 0;
    if (is_object($forumid) and $forumid instanceof vB_Editor_Override) {
        $editor_override = $forumid;
    } else {
        $editor_override = null;
    }
    // determine what we can use
    // this was moved up here as I need the switch to determine if bbcode is enabled
    // to determine if a toolbar is usable
    if ($forumid == 'signature') {
        $sig_perms =& $vbulletin->userinfo['permissions']['signaturepermissions'];
        $sig_perms_bits =& $vbulletin->bf_ugp_signaturepermissions;
        $can_toolbar = $sig_perms & $sig_perms_bits['canbbcode'] ? true : false;
        $show['img_bbcode'] = $sig_perms & $sig_perms_bits['allowimg'] ? true : false;
        $show['font_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodefont'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_FONT) ? true : false;
        $show['size_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodesize'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_SIZE) ? true : false;
        $show['color_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodecolor'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_COLOR) ? true : false;
        $show['basic_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodebasic'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_BASIC) ? true : false;
        $show['align_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodealign'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_ALIGN) ? true : false;
        $show['list_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodelist'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_LIST) ? true : false;
        $show['code_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodecode'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_CODE) ? true : false;
        $show['html_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodehtml'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_HTML) ? true : false;
        $show['php_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodephp'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_PHP) ? true : false;
        $show['url_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodelink'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_URL) ? true : false;
        $show['quote_bbcode'] = $sig_perms & $sig_perms_bits['canbbcodequote'] ? true : false;
    } else {
        require_once DIR . '/includes/class_bbcode.php';
        $show['font_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_FONT ? true : false;
        $show['size_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_SIZE ? true : false;
        $show['color_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_COLOR ? true : false;
        $show['basic_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_BASIC ? true : false;
        $show['align_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_ALIGN ? true : false;
        $show['list_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_LIST ? true : false;
        $show['code_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_CODE ? true : false;
        $show['html_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_HTML ? true : false;
        $show['php_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_PHP ? true : false;
        $show['url_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_URL ? true : false;
        $show['quote_bbcode'] = true;
        // can't disable this anywhere but in sigs
    }
    $ajax_extra = '';
    $allow_custom_bbcode = true;
    if (empty($forumid)) {
        $forumid = 'nonforum';
    }
    switch ($forumid) {
        case 'privatemessage':
            $can_toolbar = $vbulletin->options['privallowbbcode'];
            $show['img_bbcode'] = $vbulletin->options['privallowbbimagecode'];
            break;
        case 'calendar':
            global $calendarinfo;
            $can_toolbar = $calendarinfo['allowbbcode'];
            $show['img_bbcode'] = $calendarinfo['allowimgcode'];
            $ajax_extra = "calendarid={$calendarinfo['calendarid']}";
            break;
        case 'announcement':
            $can_toolbar = true;
            $show['img_bbcode'] = true;
            break;
        case 'signature':
            // see above -- these are handled earlier
            break;
        case 'visitormessage':
        case 'groupmessage':
        case 'picturecomment':
            switch ($forumid) {
                case 'groupmessage':
                    $allowedoption = $vbulletin->options['sg_allowed_bbcode'];
                    break;
                case 'picturecomment':
                    $allowedoption = $vbulletin->options['pc_allowed_bbcode'];
                    break;
                default:
                    $allowedoption = $vbulletin->options['vm_allowed_bbcode'];
                    break;
            }
            $show['font_bbcode'] = ($show['font_bbcode'] and $allowedoption & ALLOW_BBCODE_FONT) ? true : false;
            $show['size_bbcode'] = ($show['size_bbcode'] and $allowedoption & ALLOW_BBCODE_SIZE) ? true : false;
            $show['color_bbcode'] = ($show['color_bbcode'] and $allowedoption & ALLOW_BBCODE_COLOR) ? true : false;
            $show['basic_bbcode'] = ($show['basic_bbcode'] and $allowedoption & ALLOW_BBCODE_BASIC) ? true : false;
            $show['align_bbcode'] = ($show['align_bbcode'] and $allowedoption & ALLOW_BBCODE_ALIGN) ? true : false;
            $show['list_bbcode'] = ($show['list_bbcode'] and $allowedoption & ALLOW_BBCODE_LIST) ? true : false;
            $show['code_bbcode'] = ($show['code_bbcode'] and $allowedoption & ALLOW_BBCODE_CODE) ? true : false;
            $show['html_bbcode'] = ($show['html_bbcode'] and $allowedoption & ALLOW_BBCODE_HTML) ? true : false;
            $show['php_bbcode'] = ($show['php_bbcode'] and $allowedoption & ALLOW_BBCODE_PHP) ? true : false;
            $show['url_bbcode'] = ($show['url_bbcode'] and $allowedoption & ALLOW_BBCODE_URL) ? true : false;
            $show['quote_bbcode'] = ($show['quote_bbcode'] and $allowedoption & ALLOW_BBCODE_QUOTE) ? true : false;
            $show['img_bbcode'] = $allowedoption & ALLOW_BBCODE_IMG ? true : false;
            $can_toolbar = ($show['font_bbcode'] or $show['size_bbcode'] or $show['color_bbcode'] or $show['basic_bbcode'] or $show['align_bbcode'] or $show['list_bbcode'] or $show['code_bbcode'] or $show['html_bbcode'] or $show['php_bbcode'] or $show['url_bbcode'] or $show['quote_bbcode'] or $show['img_bbcode']);
            $allow_custom_bbcode = $allowedoption & ALLOW_BBCODE_CUSTOM ? true : false;
            break;
        case 'nonforum':
            $can_toolbar = $vbulletin->options['allowbbcode'];
            $show['img_bbcode'] = $vbulletin->options['allowbbimagecode'];
            break;
        default:
            if ($editor_override) {
                $editor_settings = $editor_override->get_editor_settings();
                $can_toolbar = $editor_settings['can_toolbar'];
                $allow_custom_bbcode = $editor_settings['allow_custom_bbcode'];
                // note: set $show variables directly as necessary in your get_editor_settings function
            } else {
                if (intval($forumid)) {
                    $forum = fetch_foruminfo($forumid);
                    $can_toolbar = $forum['allowbbcode'];
                    $show['img_bbcode'] = $forum['allowimages'];
                } else {
                    $can_toolbar = false;
                    $show['img_bbcode'] = false;
                }
            }
            // Legacy Hook 'editor_toolbar_switch' Removed //
            break;
    }
    // set the editor mode
    if (isset($_REQUEST['wysiwyg'])) {
        // 2 = wysiwyg; 1 = standard
        if ($_REQUEST['wysiwyg']) {
            $vbulletin->userinfo['showvbcode'] = 2;
        } else {
            if ($vbulletin->userinfo['showvbcode'] == 0) {
                $vbulletin->userinfo['showvbcode'] = 0;
            } else {
                $vbulletin->userinfo['showvbcode'] = 1;
            }
        }
    }
    $toolbartype = $can_toolbar ? is_wysiwyg_compatible(-1, $editor_type) : 0;
    $show['wysiwyg_compatible'] = is_wysiwyg_compatible(2, $editor_type) == 2;
    $show['editor_toolbar'] = $toolbartype > 0;
    $templater = vB_Template::create('editor_toolbar_colors');
    $colors = $templater->render();
    switch ($editor_type) {
        case 'qr':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $editor_height = 100;
            $editor_template_name = 'showthread_quickreply';
            break;
        case 'qr_small':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $editor_height = 60;
            $editor_template_name = 'showthread_quickreply';
            break;
        case 'qr_pm':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $editor_height = 120;
            $editor_template_name = 'pm_quickreply';
            break;
        case 'qe':
        case 'qenr':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QE';
            } else {
                $editorid = $force_editorid;
            }
            $editor_height = 200;
            $editor_template_name = 'postbit_quickedit';
            break;
            /*
            		case 'qenr':
            			if ($force_editorid == '')
            			{
            				$editorid = 'vB_Editor_QE';
            			}
            			else
            			{
            				$editorid = $force_editorid;
            			}
            
            			$editor_height = 200;
            
            			$editor_template_name = 'memberinfo_quickedit';
            			break;
            */
        /*
        		case 'qenr':
        			if ($force_editorid == '')
        			{
        				$editorid = 'vB_Editor_QE';
        			}
        			else
        			{
        				$editorid = $force_editorid;
        			}
        
        			$editor_height = 200;
        
        			$editor_template_name = 'memberinfo_quickedit';
        			break;
        */
        default:
            if ($editor_override) {
                $editorcount++;
                $editor_info = $editor_override->get_editor_type(array('force_editorid' => $force_editorid, 'editor_count' => $editorcount, 'editor_type' => $editor_type, 'toolbar_type' => $toolbartype));
                $editorid = $editor_info['editor_id'];
                $editor_height = $editor_info['editor_height'];
                $editor_template_name = $editor_info['editor_template_name'];
            } else {
                if ($force_editorid == '') {
                    $editorid = 'vB_Editor_' . str_pad(++$editorcount, 3, 0, STR_PAD_LEFT);
                } else {
                    $editorid = $force_editorid;
                }
                // set the height of the editor based on the editor_height cookie if it exists
                $editor_height = $vbulletin->input->clean_gpc('c', 'editor_height', vB_Cleaner::TYPE_UINT);
                $editor_height = $editor_height > 100 ? $editor_height : 250;
                $editor_template_name = $toolbartype ? 'editor_toolbar_on' : 'editor_toolbar_off';
            }
            break;
    }
    // init the variables used by the templates built by this function
    $vBeditJs = array('normalmode' => 'false');
    $vBeditTemplate = array('clientscript' => '', 'fontfeedback' => '', 'sizefeedback' => '', 'smiliepopup' => '');
    $extrabuttons = '';
    // Legacy Hook 'editor_toolbar_start' Removed //
    // show a post editing toolbar of some sort
    if ($show['editor_toolbar']) {
        if ($can_attach) {
            $show['attach'] = true;
        }
        // get extra buttons... experimental at the moment
        $extrabuttons = construct_editor_extra_buttons($editorid, $allow_custom_bbcode);
        if ($toolbartype == 2 or defined('VB_API') and VB_API === true) {
            // got to parse the message to be displayed from bbcode into HTML
            if ($text !== '') {
                if ($editor_override) {
                    $newpost['message'] = $editor_override->parse_for_wysiwyg($text, array('allowsmilies' => $allowsmilie and $parsesmilie, 'ishtml' => $ishtml));
                } else {
                    require_once DIR . '/includes/functions_wysiwyg.php';
                    $newpost['message'] = parse_wysiwyg_html($text, $ishtml, $forumid, iif($allowsmilie and $parsesmilie, 1, 0));
                }
            } else {
                $newpost['message'] = '';
            }
            $newpost['message'] = htmlspecialchars($newpost['message']);
            if (defined('VB_API') and VB_API === true) {
                if ($ishtml) {
                    $newpost['message_bbcode'] = convert_wysiwyg_html_to_bbcode($text);
                } else {
                    $newpost['message_bbcode'] = $text;
                }
            }
        } else {
            $newpost['message'] = $text;
            // set mode based on cookie set by javascript
            /*$vbulletin->input->clean_gpc('c', COOKIE_PREFIX . 'vbcodemode', vB_Cleaner::TYPE_INT);
            		$modechecked[$vbulletin->GPC[COOKIE_PREFIX . 'vbcodemode']] = 'checked="checked"';*/
        }
    } else {
        // do not show a post editing toolbar
        $newpost['message'] = $text;
    }
    // disable smilies option and clickable smilie
    $show['smiliebox'] = false;
    $smiliebox = '';
    $smiliepopup = '';
    $disablesmiliesoption = '';
    if ($editor_type == 'qr' or $editor_type == 'qr_small') {
        // no smilies
    } else {
        if ($allowsmilie and $show['editor_toolbar']) {
            // deal with disable smilies option
            if (!isset($checked['disablesmilies'])) {
                $vbulletin->input->clean_gpc('r', 'disablesmilies', vB_Cleaner::TYPE_BOOL);
                $checked['disablesmilies'] = iif($vbulletin->GPC['disablesmilies'], 'checked="checked"');
            }
            $templater = vB_Template::create('newpost_disablesmiliesoption');
            $templater->register('checked', $checked);
            $disablesmiliesoption = $templater->render();
            if ($toolbartype and $vbulletin->options['wysiwyg_smtotal'] > 0) {
                // query smilies
                $smilies = $vbulletin->db->query_read_slave("\n\t\t\t\tSELECT smilieid, smilietext, smiliepath, smilie.title,\n\t\t\t\t\timagecategory.title AS category\n\t\t\t\tFROM " . TABLE_PREFIX . "smilie AS smilie\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "imagecategory AS imagecategory USING(imagecategoryid)\n\t\t\t\tORDER BY imagecategory.displayorder, imagecategory.title, smilie.displayorder\n\t\t\t");
                // get total number of smilies
                $totalsmilies = $vbulletin->db->num_rows($smilies);
                if ($totalsmilies > 0) {
                    if ($vbulletin->options['wysiwyg_smtotal'] > 0) {
                        $show['wysiwygsmilies'] = true;
                        // smilie dropdown menu
                        $i = 0;
                        while ($smilie = $vbulletin->db->fetch_array($smilies)) {
                            if ($prevcategory != $smilie['category']) {
                                $prevcategory = $smilie['category'];
                                $templater = vB_Template::create('editor_smilie_category');
                                $templater->register('smilie', $smilie);
                                $smiliepopup .= $templater->render();
                            }
                            if ($i++ < $vbulletin->options['wysiwyg_smtotal']) {
                                $templater = vB_Template::create('editor_smilie_row');
                                $templater->register('smilie', $smilie);
                                $smiliepopup .= $templater->render();
                            } else {
                                $show['moresmilies'] = true;
                                break;
                            }
                        }
                    } else {
                        $show['wysiwygsmilies'] = false;
                    }
                    $vbulletin->db->free_result($smilies);
                }
            }
        }
    }
    // Legacy Hook 'editor_toolbar_end' Removed //
    $templater = vB_Template::create('editor_clientscript');
    $templater->register('vBeditJs', $vBeditJs);
    $templater->register('attachinfo', $attachinfo);
    $values = '';
    if (!empty($attachinfo['values'])) {
        foreach ($attachinfo['values'] as $key => $value) {
            $values .= "\n\t\t\t\t\t{$key}: '" . addslashes_js($value) . "',\n\t\t\t\t";
        }
    }
    $templater->register('values', $values);
    $vBeditTemplate['clientscript'] = $templater->render();
    $ajax_extra = addslashes_js($ajax_extra);
    $editortype = $toolbartype == 2 ? 1 : 0;
    $show['is_wysiwyg_editor'] = intval($editortype);
    $templater = vB_Template::create($editor_template_name);
    $templater->register('extrabuttons', $extrabuttons);
    $templater->register('ajax_extra', $ajax_extra);
    $templater->register('editorid', $editorid);
    $templater->register('editortype', $editortype);
    $templater->register('editor_height', $editor_height);
    $templater->register('forumid', $editor_override ? $editor_override->get_parse_type() : $forumid);
    $templater->register('istyles', $istyles);
    $templater->register('newpost', $newpost);
    $templater->register('parsesmilie', $parsesmilie);
    $templater->register('smiliebox', $smiliebox);
    $templater->register('vBeditTemplate', $vBeditTemplate);
    $templater->register('fontnames', $fontnames);
    $templater->register('fontsizes', $fontsizes);
    $templater->register('colors', $colors);
    $templater->register('smiliepopup', $smiliepopup);
    $templater->register('attachinfo', $attachinfo);
    $templater->register('content', $content);
    $messagearea = $templater->render();
    return $editorid;
}
Beispiel #3
0
/**
* Prepares the templates for a message editor
*
* @param	string	The text to be initially loaded into the editor
* @param	boolean	Is the initial text HTML (rather than plain text or bbcode)?
* @param	mixed	Forum ID of the forum into which we are posting. Special rules apply for values of 'privatemessage', 'usernote', 'calendar', 'announcement' and 'nonforum'.
* @param	boolean	Allow smilies?
* @param	boolean	Parse smilies in the text of the message?
* @param	boolean	Allow attachments?
* @param	string	Editor type - either 'fe' for full editor or 'qr' for quick reply
* @param	string	Force the editor to use the specified value as its editorid, rather than making one up
* @param	array	Information for the image popup
* @param	array	Content type handled by this editor, used to set specific CSS
* @param	string	String value of this content type, e.g. vBForum_Post
* @param	int		Contentid of this item, if it exists already
* @param	int		Parent contentid of this item
* @param	bool	Is this a preview text? Don't autoload if it is
* @param	bool	Don't autoload, regardless ..
* @param	string	Autoload title..
* @param	string	HTML id of title field
*
* @return	string	Editor ID
*/
function construct_edit_toolbar($text = '', $ishtml = false, $forumid = 0, $allowsmilie = true, $parsesmilie = true, $can_attach = false, $editor_type = 'fe', $force_editorid = '', $attachinfo = array(), $content = 'content', $contenttypeid = '', $contentid = 0, $parentcontentid = 0, $preview = false, $autoload = true, $autoloadtitleid = '')
{
    // standard stuff
    global $vbulletin, $vbphrase, $show;
    // templates generated by this function
    global $messagearea, $smiliebox, $disablesmiliesoption, $checked, $vBeditTemplate;
    // counter for editorid
    static $editorcount = 0;
    // determine what we can use
    // this was moved up here as I need the switch to determine if bbcode is enabled
    // to determine if a toolbar is usable
    if ($forumid == 'signature') {
        $sig_perms =& $vbulletin->userinfo['permissions']['signaturepermissions'];
        $sig_perms_bits =& $vbulletin->bf_ugp_signaturepermissions;
        $can_toolbar = $sig_perms & $sig_perms_bits['canbbcode'] ? true : false;
        $show['img_bbcode'] = $sig_perms & $sig_perms_bits['allowimg'] ? true : false;
        $show['video_bbcode'] = $sig_perms & $sig_perms_bits['allowvideo'] ? true : false;
        $show['font_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodefont'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_FONT) ? true : false;
        $show['size_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodesize'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_SIZE) ? true : false;
        $show['color_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodecolor'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_COLOR) ? true : false;
        $show['basic_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodebasic'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_BASIC) ? true : false;
        $show['align_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodealign'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_ALIGN) ? true : false;
        $show['list_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodelist'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_LIST) ? true : false;
        $show['code_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodecode'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_CODE) ? true : false;
        $show['html_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodehtml'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_HTML) ? true : false;
        $show['php_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodephp'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_PHP) ? true : false;
        $show['url_bbcode'] = ($sig_perms & $sig_perms_bits['canbbcodelink'] and $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_URL) ? true : false;
        $show['quote_bbcode'] = $sig_perms & $sig_perms_bits['canbbcodequote'] ? true : false;
    } else {
        require_once DIR . '/includes/class_bbcode.php';
        $show['font_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_FONT ? true : false;
        $show['size_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_SIZE ? true : false;
        $show['color_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_COLOR ? true : false;
        $show['basic_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_BASIC ? true : false;
        $show['align_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_ALIGN ? true : false;
        $show['list_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_LIST ? true : false;
        $show['code_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_CODE ? true : false;
        $show['html_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_HTML ? true : false;
        $show['php_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_PHP ? true : false;
        $show['url_bbcode'] = $vbulletin->options['allowedbbcodes'] & ALLOW_BBCODE_URL ? true : false;
        $show['quote_bbcode'] = true;
        // can't disable this anywhere but in sigs
    }
    $ajax_extra = array();
    $show['custom_bbcode'] = $allow_custom_bbcode = true;
    if (empty($forumid)) {
        $forumid = 'nonforum';
    }
    switch ($forumid) {
        case 'privatemessage':
            $can_toolbar = $vbulletin->options['privallowbbcode'];
            $show['img_bbcode'] = $vbulletin->options['privallowbbimagecode'];
            $show['video_bbcode'] = $vbulletin->options['privallowbbvideocode'];
            break;
        case 'usernote':
            $can_toolbar = $vbulletin->options['unallowvbcode'];
            $show['img_bbcode'] = $vbulletin->options['unallowimg'];
            $show['video_bbcode'] = $vbulletin->options['unallowvideo'];
            break;
        case 'calendar':
            global $calendarinfo;
            $can_toolbar = $calendarinfo['allowbbcode'];
            $show['img_bbcode'] = $calendarinfo['allowimgcode'];
            $show['video_bbcode'] = $calendarinfo['allowvideocode'];
            $ajax_extra['calendarid'] = $calendarinfo['calendarid'];
            break;
        case 'announcement':
            $can_toolbar = true;
            $show['img_bbcode'] = true;
            $show['video_bbcode'] = true;
            break;
        case 'signature':
            // see above -- these are handled earlier
            break;
        case 'visitormessage':
        case 'groupmessage':
        case 'picturecomment':
            switch ($forumid) {
                case 'groupmessage':
                    $allowedoption = $vbulletin->options['sg_allowed_bbcode'];
                    break;
                case 'picturecomment':
                    $allowedoption = $vbulletin->options['pc_allowed_bbcode'];
                    break;
                default:
                    $allowedoption = $vbulletin->options['vm_allowed_bbcode'];
                    break;
            }
            $show['font_bbcode'] = ($show['font_bbcode'] and $allowedoption & ALLOW_BBCODE_FONT) ? true : false;
            $show['size_bbcode'] = ($show['size_bbcode'] and $allowedoption & ALLOW_BBCODE_SIZE) ? true : false;
            $show['color_bbcode'] = ($show['color_bbcode'] and $allowedoption & ALLOW_BBCODE_COLOR) ? true : false;
            $show['basic_bbcode'] = ($show['basic_bbcode'] and $allowedoption & ALLOW_BBCODE_BASIC) ? true : false;
            $show['align_bbcode'] = ($show['align_bbcode'] and $allowedoption & ALLOW_BBCODE_ALIGN) ? true : false;
            $show['list_bbcode'] = ($show['list_bbcode'] and $allowedoption & ALLOW_BBCODE_LIST) ? true : false;
            $show['code_bbcode'] = ($show['code_bbcode'] and $allowedoption & ALLOW_BBCODE_CODE) ? true : false;
            $show['html_bbcode'] = ($show['html_bbcode'] and $allowedoption & ALLOW_BBCODE_HTML) ? true : false;
            $show['php_bbcode'] = ($show['php_bbcode'] and $allowedoption & ALLOW_BBCODE_PHP) ? true : false;
            $show['url_bbcode'] = ($show['url_bbcode'] and $allowedoption & ALLOW_BBCODE_URL) ? true : false;
            $show['quote_bbcode'] = ($show['quote_bbcode'] and $allowedoption & ALLOW_BBCODE_QUOTE) ? true : false;
            $show['img_bbcode'] = $allowedoption & ALLOW_BBCODE_IMG ? true : false;
            $show['video_bbcode'] = $allowedoption & ALLOW_BBCODE_VIDEO ? true : false;
            $can_toolbar = ($show['font_bbcode'] or $show['size_bbcode'] or $show['color_bbcode'] or $show['basic_bbcode'] or $show['align_bbcode'] or $show['list_bbcode'] or $show['code_bbcode'] or $show['html_bbcode'] or $show['php_bbcode'] or $show['url_bbcode'] or $show['quote_bbcode'] or $show['img_bbcode'] or $show['video_bbcode']);
            $show['custom_bbcode'] = $allow_custom_bbcode = $allowedoption & ALLOW_BBCODE_CUSTOM ? true : false;
            break;
        case 'nonforum':
            $can_toolbar = $vbulletin->options['allowbbcode'];
            $show['img_bbcode'] = $vbulletin->options['allowbbimagecode'];
            $show['video_bbcode'] = $vbulletin->options['allowbbvideocode'];
            break;
        case 'article_comment':
            // Right here there should be comment specific settings ... but wait, when you edit the comment, you actually
            // go through the post editor so that would be different settings .. confused?
        // Right here there should be comment specific settings ... but wait, when you edit the comment, you actually
        // go through the post editor so that would be different settings .. confused?
        case 'article':
            // Cms always defaults $can_toolbar and $show['img_bbcode'] and $show['video_bbcode'] to true.. uh..
            if ($vbulletin->options['vbcmsforumid'] > 0) {
                $forum = fetch_foruminfo($vbulletin->options['vbcmsforumid']);
                $can_toolbar = $forum['allowbbcode'];
                $show['img_bbcode'] = $forum['allowimages'];
                $show['video_bbcode'] = $forum['allowvideos'];
            } else {
                $can_toolbar = $show['img_bbcode'] = $show['video_bbcode'] = true;
            }
            break;
        default:
            if (intval($forumid)) {
                $forum = fetch_foruminfo($forumid);
                $can_toolbar = $forum['allowbbcode'];
                $show['img_bbcode'] = $forum['allowimages'];
                $show['video_bbcode'] = $forum['allowvideos'];
            } else {
                $can_toolbar = false;
                $show['img_bbcode'] = false;
                $show['video_bbcode'] = false;
            }
            ($hook = vBulletinHook::fetch_hook('editor_toolbar_switch')) ? eval($hook) : false;
            break;
    }
    if (!$can_toolbar) {
        $show['font_bbcode'] = $show['size_bbcode'] = $show['color_bbcode'] = $show['basic_bbcode'] = $show['align_bbcode'] = $show['list_bbcode'] = $show['code_bbcode'] = $show['html_bbcode'] = $show['php_bbcode'] = $show['url_bbcode'] = $show['quote_bbcode'] = $show['img_bbcode'] = $show['video_bbcode'] = false;
    }
    $editor_template_name = 'editor_ckeditor';
    // set the editor mode
    switch ($editor_type) {
        case 'qr':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $default_height = 100;
            $autofocus = false;
            break;
        case 'qr_small':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $default_height = 60;
            $autofocus = false;
            break;
        case 'qr_pm':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QR';
            } else {
                $editorid = $force_editorid;
            }
            $default_height = 120;
            $autofocus = false;
            $editor_type = 'qr';
            break;
        case 'qe':
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_QE';
            } else {
                $editorid = $force_editorid;
            }
            $default_height = 200;
            $editor_template_name = 'postbit_quickedit';
            $autofocus = true;
            break;
        default:
            if ($force_editorid == '') {
                $editorid = 'vB_Editor_' . str_pad(++$editorcount, 3, 0, STR_PAD_LEFT);
            } else {
                $editorid = $force_editorid;
            }
            $default_height = 250;
            if ($editor_type == 'fe_nofocus') {
                $autofocus = false;
                $editor_type = 'fe';
            } else {
                $autofocus = false;
                //$autofocus = true;
            }
            break;
    }
    // set the editor mode
    if (isset($_REQUEST['wysiwyg'])) {
        // 2 = wysiwyg; 1 = standard
        if ($_REQUEST['wysiwyg']) {
            $vbulletin->userinfo['showvbcode'] = 2;
        } else {
            if ($vbulletin->userinfo['showvbcode'] == 0) {
                $vbulletin->userinfo['showvbcode'] = 0;
            } else {
                $vbulletin->userinfo['showvbcode'] = 1;
            }
        }
    }
    $toolbartype = is_wysiwyg_compatible(-1, $editor_type);
    $show['wysiwyg_compatible'] = is_wysiwyg_compatible(2, $editor_type) == 2;
    $show['editor_toolbar'] = $toolbartype > 0;
    // set the height of the editor based on the editor_height cookie if it exists
    $editor_height = $vbulletin->input->clean_gpc('c', 'editor_height', TYPE_NOHTML);
    $editor_heights = explode(':', $editor_height);
    foreach ($editor_heights as $items) {
        $item = explode('#', $items);
        if ($item[0] == $editor_type) {
            $editor_height = $item[1];
        }
    }
    $editor_height = $editor_height > 100 ? $editor_height : $default_height;
    // init the variables used by the templates built by this function
    $vBeditJs = array('normalmode' => 'false');
    $vBeditTemplate = array('clientscript' => '', 'fontfeedback' => '', 'sizefeedback' => '', 'smiliepopup' => '');
    $extrabuttons = '';
    // initialize the ckeditor
    $contentid = intval($contentid);
    $parentcontentid = intval($parentcontentid);
    $autoloadtext = '';
    $autoloadtitle = '';
    if ($autoload and $contenttypeid and $vbulletin->userinfo['userid'] and !$preview) {
        $autoloadinfo = $vbulletin->db->query_first("\n\t\t\tSELECT\n\t\t\t\tpagetext, title\n\t\t\tFROM " . TABLE_PREFIX . "autosave\n\t\t\tWHERE\n\t\t\t\tcontentid = {$contentid}\n\t\t\t\t\tAND\n\t\t\t\tparentcontentid = {$parentcontentid}\n\t\t\t\t\tAND\n\t\t\t\tcontenttypeid = '" . $vbulletin->db->escape_string($contenttypeid) . "'\n\t\t\t\t\tAND\n\t\t\t\tuserid = {$vbulletin->userinfo['userid']}\n\t\t");
        if ($autoloadinfo and $autoloadinfo['pagetext'] != $text) {
            $autoloadtext = $autoloadinfo['pagetext'];
            $autoloadtitle = $autoloadinfo['title'];
        }
    }
    ($hook = vBulletinHook::fetch_hook('editor_toolbar_start')) ? eval($hook) : false;
    // show a post editing toolbar of some sort
    if ($show['editor_toolbar']) {
        if ($can_attach) {
            $show['attach'] = true;
        }
        // get extra buttons... experimental at the moment
        $extrabuttons = construct_editor_extra_buttons($editorid, $allow_custom_bbcode);
        $result = process_toolbar_text($text, $toolbartype, $ishtml, $forumid, $allowsmilie, $parsesmilie);
        $newpost['message'] = $result['message'];
        $newpost['message_bbcode'] = $result['bbcode'];
        $result = process_toolbar_text($autoloadtext, $toolbartype, $ishtml, $forumid, $allowsmilie, $parsesmilie);
        $newpost['message_autoload'] = $result['message'];
        $newpost['message_autoload_bbcode'] = $result['bbcode'];
    } else {
        // do not show a post editing toolbar
        $newpost = array('message' => $text, 'message_autoload' => '');
    }
    $cke = vB_Ckeditor::getInstance($editorid, $editor_type, $contenttypeid, $contentid, $parentcontentid, $vbulletin->userinfo['userid'], $toolbartype);
    foreach (array('editor_jsoptions_font', 'editor_jsoptions_size') as $template) {
        $templater = vB_Template::create($template);
        $string = $templater->render(true);
        $fonts = preg_split('#\\r?\\n#s', $string, -1, PREG_SPLIT_NO_EMPTY);
        foreach ($fonts as $fontkey => $fontsize) {
            $fonts[$fontkey] = trim($fontsize);
        }
        if ($template == 'editor_jsoptions_font') {
            $cke->addFonts($fonts);
        } else {
            $cke->addFontSizes($fonts);
        }
    }
    // set editor height
    $cke->setEditorHeight($editor_height);
    $cke->setEditorType($editor_type);
    $cke->setEditorAutoFocus($autofocus);
    $cke->setEditorParsetype($forumid);
    $cke->setAutoLoad(unhtmlspecialchars($autoloadtext), unhtmlspecialchars($autoloadtitle), $autoloadtitleid);
    $cke->setContentFontType($content);
    if (!$can_toolbar) {
        $cke->setNoBbcode();
    }
    // disable smilies option and clickable smilie
    $show['smiliebox'] = false;
    $smiliebox = '';
    $smiliepopup = '';
    $disablesmiliesoption = '';
    if ($allowsmilie and $show['editor_toolbar']) {
        switch ($editor_type) {
            case 'qr':
            case 'qr_small':
            case 'qr_pm':
            case 'qe':
                $usesmiliebox = false;
                break;
            default:
                $usesmiliebox = true;
        }
        // deal with disable smilies option
        if (!isset($checked['disablesmilies'])) {
            $vbulletin->input->clean_gpc('r', 'disablesmilies', TYPE_BOOL);
            $checked['disablesmilies'] = iif($vbulletin->GPC['disablesmilies'], 'checked="checked"');
        }
        $templater = vB_Template::create('newpost_disablesmiliesoption');
        $templater->register('checked', $checked);
        $disablesmiliesoption = $templater->render();
        if ($toolbartype and ($vbulletin->options['smtotal'] > 0 or $vbulletin->options['wysiwyg_smtotal'] > 0)) {
            // query smilies
            $smilies = $vbulletin->db->query_read_slave("\n\t\t\t\tSELECT smilieid, smilietext, smiliepath, smilie.title,\n\t\t\t\t\timagecategory.title AS category\n\t\t\t\tFROM " . TABLE_PREFIX . "smilie AS smilie\n\t\t\t\tLEFT JOIN " . TABLE_PREFIX . "imagecategory AS imagecategory USING(imagecategoryid)\n\t\t\t\tORDER BY imagecategory.displayorder, imagecategory.title, smilie.displayorder\n\t\t\t");
            // get total number of smilies
            $totalsmilies = $vbulletin->db->num_rows($smilies);
            if ($totalsmilies > 0) {
                if ($vbulletin->options['wysiwyg_smtotal'] > 0) {
                    $show['wysiwygsmilies'] = true;
                    // smilie dropdown menu
                    $i = 0;
                    while ($smilie = $vbulletin->db->fetch_array($smilies)) {
                        $cke->addSmilie($smilie);
                        if ($prevcategory != $smilie['category']) {
                            $prevcategory = $smilie['category'];
                            $templater = vB_Template::create('editor_smilie_category');
                            $templater->register('smilie', $smilie);
                            $smiliepopup .= $templater->render();
                        }
                        if (++$i < $vbulletin->options['wysiwyg_smtotal']) {
                            $templater = vB_Template::create('editor_smilie_row');
                            $templater->register('smilie', $smilie);
                            $smiliepopup .= $templater->render();
                        } else {
                            $show['moresmilies'] = true;
                            break;
                        }
                    }
                } else {
                    $show['wysiwygsmilies'] = false;
                }
                // clickable smilie box
                if ($vbulletin->options['smtotal'] and $usesmiliebox) {
                    $vbulletin->db->data_seek($smilies, 0);
                    $i = 0;
                    $smiliebits = '';
                    while ($smilie = $vbulletin->db->fetch_array($smilies) and $i++ < $vbulletin->options['smtotal']) {
                        $templater = vB_Template::create('editor_smilie');
                        $templater->register('smilie', $smilie);
                        $templater->register('editorid', $editorid);
                        $smiliebits .= $templater->render();
                    }
                    $show['moresmilieslink'] = $totalsmilies > $vbulletin->options['smtotal'];
                    $show['smiliebox'] = true;
                }
                $vbulletin->db->free_result($smilies);
            }
            if ($totalsmilies > $vbulletin->options['wysiwyg_smtotal']) {
                $cke->config['moresmilies'] = 1;
            }
        }
        if ($vbulletin->options['smtotal'] > 0 and $usesmiliebox) {
            $templater = vB_Template::create('editor_smiliebox');
            $templater->register('editorid', $editorid);
            $templater->register('smiliebits', $smiliebits);
            $templater->register('totalsmilies', $totalsmilies);
            $smiliebox = $templater->render();
        } else {
            $smiliebox = '';
        }
    }
    ($hook = vBulletinHook::fetch_hook('editor_toolbar_end')) ? eval($hook) : false;
    // Don't send the editor clientscript on ajax returns of the editor -- it won't do anything..
    if (!$_POST['ajax']) {
        $templater = vB_Template::create('editor_clientscript');
        $templater->register('vBeditJs', $vBeditJs);
        $vBeditTemplate['clientscript'] = $templater->render();
    }
    if ($ajax_extra) {
        $cke->setAjaxExtra($ajax_extra);
    }
    $show['is_wysiwyg_editor'] = intval($toolbartype == 2 ? 1 : 0);
    $cke->setAttachInfo($attachinfo);
    $cke->setShow($show);
    $ckeditor = $cke->getEditor($editorid, unhtmlspecialchars($text));
    $templater = vB_Template::create($editor_template_name);
    $templater->register('editorid', $editorid);
    $templater->register('editortype', $toolbartype == 2 ? 1 : 0);
    $templater->register('smiliebox', $smiliebox);
    $templater->register('ckeditor', $ckeditor);
    $templater->register('newpost', $newpost);
    $messagearea = $vBeditTemplate['clientscript'] . $templater->render();
    return $editorid;
}