function admin_form(&$qa_content)
 {
     //	Process form input
     $ok = null;
     $badges = qa_get_badge_list();
     if (qa_clicked('badge_award_button')) {
         if ((bool) qa_post_text('badge_award_delete')) {
             qa_db_query_sub('DROP TABLE IF EXISTS ^userbadges');
             qa_db_query_sub('CREATE TABLE ^userbadges (' . 'awarded_at DATETIME NOT NULL,' . 'user_id INT(11) NOT NULL,' . 'notify TINYINT DEFAULT 0 NOT NULL,' . 'object_id INT(10),' . 'badge_slug VARCHAR (64) CHARACTER SET ascii DEFAULT \'\',' . 'id INT(11) NOT NULL AUTO_INCREMENT,' . 'PRIMARY KEY (id)' . ') ENGINE=MyISAM DEFAULT CHARSET=utf8');
         }
         $ok = $this->qa_check_all_users_badges();
     } else {
         if (qa_clicked('badge_reset_names')) {
             foreach ($badges as $slug => $info) {
                 qa_opt('badge_' . $slug . '_name', qa_badge_name($slug));
             }
             $ok = qa_lang('badges/badge_names_reset');
         } else {
             if (qa_clicked('badge_reset_values')) {
                 foreach ($badges as $slug => $info) {
                     if (isset($info['var'])) {
                         qa_opt('badge_' . $slug . '_var', $info['var']);
                     }
                 }
                 $ok = qa_lang('badges/badge_values_reset');
             } else {
                 if (qa_clicked('badge_trigger_notify')) {
                     $qa_content['test-notify'] = 1;
                 } else {
                     if (qa_clicked('badge_reset_css')) {
                         qa_opt('badges_css', $this->option_default('badges_css'));
                         $ok = 'CSS Reset';
                     } else {
                         if (qa_clicked('badge_save_settings')) {
                             qa_opt('badge_active', (bool) qa_post_text('badge_active_check'));
                             if (qa_opt('badge_active')) {
                                 qa_db_query_sub('CREATE TABLE IF NOT EXISTS ^userbadges (' . 'awarded_at DATETIME NOT NULL,' . 'user_id INT(11) NOT NULL,' . 'notify TINYINT DEFAULT 0 NOT NULL,' . 'object_id INT(10),' . 'badge_slug VARCHAR (64) CHARACTER SET ascii DEFAULT \'\',' . 'id INT(11) NOT NULL AUTO_INCREMENT,' . 'PRIMARY KEY (id)' . ') ENGINE=MyISAM DEFAULT CHARSET=utf8');
                                 qa_db_query_sub('CREATE TABLE IF NOT EXISTS ^achievements (' . 'user_id INT(11) UNIQUE NOT NULL,' . 'first_visit DATETIME,' . 'oldest_consec_visit DATETIME,' . 'longest_consec_visit INT(10),' . 'last_visit DATETIME,' . 'total_days_visited INT(10),' . 'questions_read INT(10),' . 'posts_edited INT(10)' . ') ENGINE=MyISAM DEFAULT CHARSET=utf8');
                                 // set badge names, vars and states
                                 foreach ($badges as $slug => $info) {
                                     // update var
                                     if (isset($info['var']) && qa_post_text('badge_' . $slug . '_var')) {
                                         qa_opt('badge_' . $slug . '_var', qa_post_text('badge_' . $slug . '_var'));
                                     }
                                     // toggle activation
                                     if ((bool) qa_post_text('badge_' . $slug . '_enabled') === false) {
                                         qa_opt('badge_' . $slug . '_enabled', '0');
                                     } else {
                                         qa_opt('badge_' . $slug . '_enabled', '1');
                                     }
                                     // set custom names
                                     if (qa_post_text('badge_' . $slug . '_edit') != qa_opt('badge_' . $slug . '_name')) {
                                         qa_opt('badge_' . $slug . '_name', qa_post_text('badge_' . $slug . '_edit'));
                                         $qa_lang_default['badges'][$slug] = qa_opt('badge_' . $slug . '_name');
                                     }
                                 }
                                 // options
                                 qa_opt('badge_notify_time', (int) qa_post_text('badge_notify_time'));
                                 qa_opt('badge_show_users_badges', (bool) qa_post_text('badge_show_users_badges'));
                                 qa_opt('badge_show_source_posts', (bool) qa_post_text('badge_show_source_posts'));
                                 qa_opt('badge_show_source_users', (bool) qa_post_text('badge_show_source_users'));
                                 qa_opt('badge_admin_user_widget', (bool) qa_post_text('badge_admin_user_widget'));
                                 qa_opt('badge_admin_user_widget_q_item', (bool) qa_post_text('badge_admin_user_widget_q_item'));
                                 qa_opt('badge_admin_user_field', (bool) qa_post_text('badge_admin_user_field'));
                                 qa_opt('badge_admin_user_field_no_tab', (bool) qa_post_text('badge_admin_user_field_no_tab'));
                                 qa_opt('badge_widget_date_max', (int) qa_post_text('badge_widget_date_max'));
                                 qa_opt('badge_widget_list_max', (int) qa_post_text('badge_widget_list_max'));
                                 qa_opt('badge_email_notify', (bool) qa_post_text('badge_email_notify'));
                                 qa_opt('badge_email_notify_on', (bool) qa_post_text('badge_email_notify_on'));
                                 qa_opt('badge_email_subject', qa_post_text('badge_email_subject'));
                                 qa_opt('badge_email_body', qa_post_text('badge_email_body'));
                                 qa_opt('badges_css', qa_post_text('badges_css'));
                             }
                             $ok = qa_lang('badges/badge_admin_saved');
                         }
                     }
                 }
             }
         }
     }
     //	Create the form for display
     $fields = array();
     $fields[] = array('label' => qa_lang('badges/badge_admin_activate'), 'tags' => 'NAME="badge_active_check"', 'value' => qa_opt('badge_active'), 'type' => 'checkbox');
     if (qa_opt('badge_active')) {
         $fields[] = array('label' => qa_lang('badges/active_badges') . ':', 'type' => 'static');
         $fields[] = array('label' => qa_lang('badges/badge_admin_select_all'), 'tags' => 'onclick="var isx = this.checked; jQuery(\'.badge-listing :checkbox\').prop(\'checked\',isx);"', 'value' => false, 'type' => 'checkbox');
         foreach ($badges as $slug => $info) {
             $badge_name = qa_badge_name($slug);
             if (!qa_opt('badge_' . $slug . '_name')) {
                 qa_opt('badge_' . $slug . '_name', $badge_name);
             }
             $name = qa_opt('badge_' . $slug . '_name');
             $badge_desc = qa_badge_desc_replace($slug, qa_opt('badge_' . $slug . '_var'), true);
             $type = qa_get_badge_type($info['type']);
             $types = $type['slug'];
             $fields[] = array('type' => 'static', 'note' => '<table class="badge-listing"><tr><td><input type="checkbox" name="badge_' . $slug . '_enabled"' . (qa_opt('badge_' . $slug . '_enabled') !== '0' ? ' checked' : '') . '></td><td><input type="text" name="badge_' . $slug . '_edit" id="badge_' . $slug . '_edit" style="display:none" size="16" onblur="badgeEdit(\'' . $slug . '\',true)" value="' . $name . '"><span id="badge_' . $slug . '_badge" class="badge-' . $types . '" onclick="badgeEdit(\'' . $slug . '\')" title="' . qa_lang('badges/badge_admin_click_edit') . '">' . $name . '</span></td><td>' . $badge_desc . '</td></tr></table>');
         }
         $fields[] = array('type' => 'blank');
         $fields[] = array('label' => qa_lang('badges/notify_time') . ':', 'type' => 'number', 'value' => qa_opt('badge_notify_time'), 'tags' => 'NAME="badge_notify_time"', 'note' => '<em>' . qa_lang('badges/notify_time_desc') . '</em>');
         $fields[] = array('type' => 'blank');
         $fields[] = array('label' => qa_lang('badges/badge_admin_user_field'), 'tags' => 'NAME="badge_admin_user_field"', 'value' => (bool) qa_opt('badge_admin_user_field'), 'type' => 'checkbox');
         $fields[] = array('label' => qa_lang('badges/badge_admin_user_field_no_tab'), 'tags' => 'NAME="badge_admin_user_field_no_tab"', 'value' => (bool) qa_opt('badge_admin_user_field_no_tab'), 'type' => 'checkbox');
         $fields[] = array('type' => 'blank');
         $fields[] = array('label' => qa_lang('badges/badge_show_source_posts'), 'tags' => 'NAME="badge_show_source_posts"', 'value' => (bool) qa_opt('badge_show_source_posts'), 'type' => 'checkbox');
         $fields[] = array('label' => qa_lang('badges/badge_show_source_users'), 'tags' => 'NAME="badge_show_source_users"', 'value' => (bool) qa_opt('badge_show_source_users'), 'type' => 'checkbox');
         $fields[] = array('label' => qa_lang('badges/badge_admin_user_widget'), 'tags' => 'NAME="badge_admin_user_widget"', 'value' => (bool) qa_opt('badge_admin_user_widget'), 'type' => 'checkbox');
         $fields[] = array('label' => qa_lang('badges/badge_admin_user_widget_q_item'), 'tags' => 'NAME="badge_admin_user_widget_q_item"', 'value' => (bool) qa_opt('badge_admin_user_widget_q_item'), 'type' => 'checkbox');
         $fields[] = array('label' => qa_lang('badges/badge_show_users_badges'), 'tags' => 'NAME="badge_show_users_badges"', 'value' => (bool) qa_opt('badge_show_users_badges'), 'type' => 'checkbox');
         if (qa_clicked('badge_trigger_notify')) {
             $fields['test-notify'] = 1;
         }
         $fields[] = array('label' => 'Badge css stylesheet', 'tags' => 'NAME="badges_css"', 'value' => qa_opt('badges_css'), 'rows' => 20, 'type' => 'textarea');
         $fields[] = array('type' => 'blank');
         $fields[] = array('label' => qa_lang('badges/widget_list_max') . ':', 'type' => 'number', 'value' => qa_opt('badge_widget_list_max'), 'tags' => 'NAME="badge_widget_list_max"');
         $fields[] = array('label' => qa_lang('badges/widget_date_max') . ':', 'type' => 'number', 'value' => qa_opt('badge_widget_date_max'), 'tags' => 'NAME="badge_widget_date_max"');
         $fields[] = array('type' => 'blank');
         $fields[] = array('label' => qa_lang('badges/badge_email_notify'), 'tags' => 'NAME="badge_email_notify" onclick="if(this.checked) jQuery(\'#badge_email_container\').fadeIn(); else jQuery(\'#badge_email_container\').fadeOut();"', 'value' => (bool) qa_opt('badge_email_notify'), 'type' => 'checkbox', 'note' => '<table id="badge_email_container" style="display:' . (qa_opt('badge_email_notify') ? 'block' : 'none') . '"><tr><td>');
         $fields[] = array('label' => qa_lang('badges/badge_email_notify_on'), 'tags' => 'NAME="badge_email_notify_on" id="badge_email_notify_on"', 'value' => (bool) qa_opt('badge_email_notify_on'), 'type' => 'checkbox');
         $fields[] = array('label' => qa_lang('badges/badge_email_subject'), 'tags' => 'NAME="badge_email_subject" id="badge_email_subject"', 'value' => qa_opt('badge_email_subject'), 'type' => 'text');
         $fields[] = array('label' => qa_lang('badges/badge_email_body'), 'tags' => 'name="badge_email_body" id="badge_email_body"', 'value' => qa_opt('badge_email_body'), 'type' => 'textarea', 'rows' => 20, 'note' => 'Available replacement text:<br/><br/><i>^site_title<br/>^handle<br/>^email<br/>^open<br/>^close<br/>^badge_name<br/>^post_title<br/>^post_url<br/>^profile_url<br/>^site_url<br/>^if_post_text="text"</i></td></tr></table>');
         $fields[] = array('type' => 'blank');
     }
     return array('ok' => $ok && !isset($error) ? $ok : null, 'fields' => $fields, 'buttons' => array(array('label' => qa_lang('badges/badge_trigger_notify'), 'tags' => 'name="badge_trigger_notify"' . (qa_opt('badge_active') ? '' : ' disabled="true"'), 'note' => '<br/><em>' . qa_lang('badges/badge_trigger_notify_desc') . '</em><br/>'), array('label' => qa_lang('badges/badge_reset_names'), 'tags' => 'NAME="badge_reset_names"', 'note' => '<br/><em>' . qa_lang('badges/badge_reset_names_desc') . '</em><br/>'), array('label' => qa_lang('badges/badge_reset_css'), 'tags' => 'NAME="badge_reset_css"'), array('label' => qa_lang('badges/badge_reset_values'), 'tags' => 'NAME="badge_reset_values"', 'note' => '<br/><em>' . qa_lang('badges/badge_reset_values_desc') . '</em><br/>'), array('label' => qa_lang('badges/badge_award_button'), 'tags' => 'NAME="badge_award_button"', 'note' => '<br/><em>' . qa_lang('badges/badge_award_button_desc') . '</em><br/><input type="checkbox" name="badge_award_delete"><b>' . qa_lang('badges/badge_award_delete_desc') . '</b><br/>'), array('label' => qa_lang('badges/save_settings'), 'tags' => 'NAME="badge_save_settings"', 'note' => '<br/><em>' . qa_lang('badges/save_settings_desc') . '</em><br/>')));
 }
Example #2
0
function cs_user_badge($handle)
{
    if (qa_opt('badge_active')) {
        $userids = qa_handles_to_userids(array($handle));
        $userid = $userids[$handle];
        // displays small badge widget, suitable for meta
        $result = qa_db_read_all_values(qa_db_query_sub('SELECT badge_slug FROM ^userbadges WHERE user_id=#', $userid));
        if (count($result) == 0) {
            return;
        }
        $badges = qa_get_badge_list();
        foreach ($result as $slug) {
            $bcount[$badges[$slug]['type']] = isset($bcount[$badges[$slug]['type']]) ? $bcount[$badges[$slug]['type']] + 1 : 1;
        }
        $output = '<ul class="user-badge clearfix">';
        for ($x = 2; $x >= 0; $x--) {
            if (!isset($bcount[$x])) {
                continue;
            }
            $count = $bcount[$x];
            if ($count == 0) {
                continue;
            }
            $type = qa_get_badge_type($x);
            $types = $type['slug'];
            $typed = $type['name'];
            $output .= '<li class="badge-medal ' . $types . '"><i class="icon-badge" title="' . $count . ' ' . $typed . '"></i><span class="badge-pointer badge-' . $types . '-count" title="' . $count . ' ' . $typed . '"> ' . $count . '</span></li>';
        }
        $output = substr($output, 0, -1);
        // lazy remove space
        $output .= '</ul>';
        return $output;
    }
}
 function process_request($request)
 {
     $qa_content = qa_content_prepare();
     $qa_content['title'] = qa_lang('badges/badge_list_title');
     $badges = qa_get_badge_list();
     $totalawarded = 0;
     $qa_content['custom'] = '<em>' . qa_lang('badges/badge_list_pre') . '</em><br />';
     $qa_content['custom2'] = '<table cellspacing="20">';
     $c = 2;
     $result = qa_db_read_all_assoc(qa_db_query_sub('SELECT user_id,badge_slug  FROM ^userbadges'));
     $count = array();
     foreach ($result as $r) {
         if (qa_opt('badge_' . $r['badge_slug'] . '_enabled') == '0') {
             continue;
         }
         if (isset($count[$r['badge_slug']][$r['user_id']])) {
             $count[$r['badge_slug']][$r['user_id']]++;
         } else {
             $count[$r['badge_slug']][$r['user_id']] = 1;
         }
         $totalawarded++;
         if (isset($count[$r['badge_slug']]['count'])) {
             $count[$r['badge_slug']]['count']++;
         } else {
             $count[$r['badge_slug']]['count'] = 1;
         }
     }
     foreach ($badges as $slug => $info) {
         if (qa_opt('badge_' . $slug . '_enabled') == '0') {
             continue;
         }
         $badge_name = qa_badge_name($slug);
         if (!qa_opt('badge_' . $slug . '_name')) {
             qa_opt('badge_' . $slug . '_name', $badge_name);
         }
         $name = qa_opt('badge_' . $slug . '_name');
         $var = qa_opt('badge_' . $slug . '_var');
         $desc = qa_badge_desc_replace($slug, $var, false);
         $type = qa_get_badge_type($info['type']);
         $types = $type['slug'];
         $typen = $type['name'];
         $qa_content['custom' . ++$c] = '<tr><td class="badge-entry"><div class="badge-entry-badge"><span class="badge-' . $types . '" title="' . $typen . '">' . $name . '</span>&nbsp;<span class="badge-entry-desc">' . $desc . '</span>' . (isset($count[$slug]) ? '&nbsp;<span title="' . $count[$slug]['count'] . ' ' . qa_lang('badges/awarded') . '" class="badge-count-link" onclick="jQuery(\'#badge-users-' . $slug . '\').slideToggle()">x' . $count[$slug]['count'] . '</span>' : '') . '</div>';
         // source users
         if (qa_opt('badge_show_source_users') && isset($count[$slug])) {
             $users = array();
             require_once QA_INCLUDE_DIR . 'qa-app-users.php';
             $qa_content['custom' . $c] .= '<div style="display:none" id="badge-users-' . $slug . '" class="badge-users">';
             foreach ($count[$slug] as $uid => $ucount) {
                 if ($uid == 'count') {
                     continue;
                 }
                 if (QA_FINAL_EXTERNAL_USERS) {
                     $handles = qa_get_public_from_userids(array($uid));
                     $handle = @$handles[$uid];
                 } else {
                     $useraccount = qa_db_select_with_pending(qa_db_user_account_selectspec($uid, true));
                     $handle = @$useraccount['handle'];
                 }
                 if (!$handle) {
                     continue;
                 }
                 $users[] = '<a href="' . qa_path_html('user/' . $handle) . '">' . $handle . ($ucount > 1 ? ' x' . $ucount : '') . '</a>';
             }
             $qa_content['custom' . $c] .= implode('<br/>', $users) . '</div>';
         }
         $qa_content['custom' . $c] .= '</td></tr>';
     }
     $qa_content['custom' . ++$c] = '<tr><td class="badge-entry"><span class="total-badges">' . count($badges) . ' ' . qa_lang('badges/badges_total') . '</span>' . ($totalawarded > 0 ? ', <span class="total-badge-count">' . $totalawarded . ' ' . qa_lang('badges/awarded_total') . '</span>' : '') . '</td></tr></table>';
     if (isset($qa_content['navigation']['main']['custom-2'])) {
         $qa_content['navigation']['main']['custom-2']['selected'] = true;
     }
     return $qa_content;
 }
Example #4
0
function qa_badge_plugin_user_form($userid)
{
    $handles = qa_userids_to_handles(array($userid));
    $handle = $handles[$userid];
    // displays badge list in user profile
    $result = qa_db_read_all_assoc(qa_db_query_sub('SELECT badge_slug as slug, object_id AS oid FROM ^userbadges WHERE user_id=#', $userid));
    $fields = array();
    if (count($result) > 0) {
        // count badges
        $bin = qa_get_badge_list();
        $badges = array();
        foreach ($result as $info) {
            $slug = $info['slug'];
            $type = $bin[$slug]['type'];
            if (isset($badges[$type][$slug])) {
                $badges[$type][$slug]['count']++;
            } else {
                $badges[$type][$slug]['count'] = 1;
            }
            if ($info['oid']) {
                $badges[$type][$slug]['oid'][] = $info['oid'];
            }
        }
        foreach ($badges as $type => $badge) {
            $typea = qa_get_badge_type($type);
            $types = $typea['slug'];
            $typed = $typea['name'];
            $output = '
							<table>
								<tr>
									<td class="qa-form-wide-label">
										<h3 class="badge-title" title="' . qa_lang('badges/' . $types . '_desc') . '">' . $typed . '</h3>
									</td>
								</tr>';
            foreach ($badge as $slug => $info) {
                $badge_name = qa_lang('badges/' . $slug);
                if (!qa_opt('badge_' . $slug . '_name')) {
                    qa_opt('badge_' . $slug . '_name', $badge_name);
                }
                $name = qa_opt('badge_' . $slug . '_name');
                $count = $info['count'];
                if (qa_opt('badge_show_source_posts')) {
                    $oids = @$info['oid'];
                } else {
                    $oids = null;
                }
                $var = qa_opt('badge_' . $slug . '_var');
                $desc = qa_badge_desc_replace($slug, $var, $name);
                // badge row
                $output .= '
								<tr>
									<td class="badge-container">
										<div class="badge-container-badge">
											<span class="badge-' . $types . '" title="' . $desc . ' (' . $typed . ')">' . qa_html($name) . '</span>&nbsp;<span onclick="jQuery(\'.badge-container-sources-' . $slug . '\').slideToggle()" class="badge-count' . (is_array($oids) ? ' badge-count-link" title="' . qa_lang('badges/badge_count_click') : '') . '">x&nbsp;' . $count . '</span>
										</div>';
                // source row(s) if any
                if (is_array($oids)) {
                    $output .= '
										<div class="badge-container-sources-' . $slug . '" style="display:none">';
                    foreach ($oids as $oid) {
                        $post = qa_db_select_with_pending(qa_db_full_post_selectspec(null, $oid));
                        $title = $post['title'];
                        $anchor = '';
                        if ($post['parentid']) {
                            $anchor = urlencode(qa_anchor($post['type'], $oid));
                            $oid = $post['parentid'];
                            $title = qa_db_read_one_value(qa_db_query_sub('SELECT BINARY title as title FROM ^posts WHERE postid=#', $oid), true);
                        }
                        $length = 30;
                        $text = qa_strlen($title) > $length ? qa_substr($title, 0, $length) . '...' : $title;
                        $output .= '
											<div class="badge-source"><a href="' . qa_path_html(qa_q_request($oid, $title), NULL, qa_opt('site_url')) . ($anchor ? '#' . $anchor : '') . '">' . qa_html($text) . '</a></div>';
                    }
                }
                $output .= '
									</td>
								</tr>';
            }
            $output .= '
							</table>';
            $outa[] = $output;
        }
        $fields[] = array('value' => '<table class="badge-user-tables"><tr><td class="badge-user-table">' . implode('</td><td class="badge-user-table">', $outa) . '</td></tr></table>', 'type' => 'static');
    }
    $ok = null;
    $tags = null;
    $buttons = array();
    if ((bool) qa_opt('badge_email_notify') && qa_get_logged_in_handle() == $handle) {
        // add badge notify checkbox
        if (qa_clicked('badge_email_notify_save')) {
            qa_opt('badge_email_notify_id_' . $userid, (bool) qa_post_text('badge_notify_email_me'));
            $ok = qa_lang('badges/badge_notified_email_me');
        }
        $select = (bool) qa_opt('badge_email_notify_id_' . $userid);
        $tags = 'id="badge-form" action="' . qa_self_html() . '#signature_text" method="POST"';
        $fields[] = array('type' => 'blank');
        $fields[] = array('label' => qa_lang('badges/badge_notify_email_me'), 'type' => 'checkbox', 'tags' => 'NAME="badge_notify_email_me"', 'value' => $select);
        $buttons[] = array('label' => qa_lang_html('main/save_button'), 'tags' => 'NAME="badge_email_notify_save"');
    }
    return array('ok' => $ok && !isset($error) ? $ok : null, 'style' => 'tall', 'tags' => $tags, 'title' => qa_lang('badges/badges'), 'fields' => $fields, 'buttons' => $buttons);
}
Example #5
0
function ra_user_badges_list($userid)
{
    if (!qa_opt('badge_active')) {
        return;
    }
    $handles = qa_userids_to_handles(array($userid));
    $handle = $handles[$userid];
    // displays badge list in user profile
    $result = qa_db_read_all_assoc(qa_db_query_sub('SELECT badge_slug as slug, object_id AS oid FROM ^userbadges WHERE user_id=#', $userid));
    if (count($result) > 0) {
        // count badges
        $bin = qa_get_badge_list();
        $badges = array();
        foreach ($result as $info) {
            $slug = $info['slug'];
            $type = $bin[$slug]['type'];
            if (isset($badges[$type][$slug])) {
                $badges[$type][$slug]['count']++;
            } else {
                $badges[$type][$slug]['count'] = 1;
            }
            if ($info['oid']) {
                $badges[$type][$slug]['oid'][] = $info['oid'];
            }
        }
        foreach ($badges as $type => $badge) {
            $typea = qa_get_badge_type($type);
            $types = $typea['slug'];
            $typed = $typea['name'];
            $output = '';
            //$output = '<h3 class="badge-title" title="'.qa_lang('badges/'.$types.'_desc').'">'.$typed.'</h3>';
            foreach ($badge as $slug => $info) {
                $badge_name = qa_badge_name($slug);
                if (!qa_opt('badge_' . $slug . '_name')) {
                    qa_opt('badge_' . $slug . '_name', $badge_name);
                }
                $name = qa_opt('badge_' . $slug . '_name');
                $count = $info['count'];
                if (qa_opt('badge_show_source_posts')) {
                    $oids = @$info['oid'];
                } else {
                    $oids = null;
                }
                $var = qa_opt('badge_' . $slug . '_var');
                $desc = qa_badge_desc_replace($slug, $var, false);
                // badge row
                $output .= '<div class="badge-container-badge">
									<span class="user-badge ' . $types . ' icon-badge" title="' . $desc . ' (' . $typed . ')">' . qa_html($name) . '</span>&nbsp;<span class="badge-count">x&nbsp;' . $count . '</span>' . (is_array($oids) ? '<i class="icon-chevron-down"></i>' : '');
                // source row(s) if any
                if (is_array($oids)) {
                    $output .= '
								<div class="badge-sources ' . $slug . '"><ul>';
                    foreach ($oids as $oid) {
                        $post = qa_db_select_with_pending(qa_db_full_post_selectspec(null, $oid));
                        $title = $post['title'];
                        $anchor = '';
                        if ($post['parentid']) {
                            $anchor = urlencode(qa_anchor($post['type'], $oid));
                            $oid = $post['parentid'];
                            $title = qa_db_read_one_value(qa_db_query_sub('SELECT BINARY title as title FROM ^posts WHERE postid=#', $oid), true);
                        }
                        //$length = 30;
                        $text = $title;
                        $output .= '<li><a href="' . qa_path_html(qa_q_request($oid, $title), NULL, qa_opt('site_url')) . ($anchor ? '#' . $anchor : '') . '">' . qa_html($text) . '</a></li>';
                    }
                    $output .= '</ul></div>';
                }
                $output .= '</div>';
            }
            $outa[] = $output;
        }
        $fields = '<div class="badge-user-block widget"><h3 class="widget-title">' . _ra_lang('Badges') . '</h3><div class="widget-inner">' . implode('', $outa) . '</div></div>';
    }
    return $fields;
}