function introspect_config_item($name, &$propbag)
 {
     switch ($name) {
         case 'locking':
             $propbag->add('type', 'boolean');
             $propbag->add('name', PLUGIN_EVENT_ENTRYCHECK_LOCKING);
             $propbag->add('description', '');
             $propbag->add('default', false);
             break;
         case 'emptyCategories':
             $propbag->add('type', 'boolean');
             $propbag->add('name', PLUGIN_EVENT_ENTRYCHECK_EMPTYCATEGORIES);
             $propbag->add('description', PLUGIN_EVENT_ENTRYCHECK_EMPTYCATEGORIES_DESC);
             $propbag->add('default', false);
             break;
         case 'emptyTitle':
             $propbag->add('type', 'boolean');
             $propbag->add('name', PLUGIN_EVENT_ENTRYCHECK_EMPTYTITLE);
             $propbag->add('description', PLUGIN_EVENT_ENTRYCHECK_EMPTYTITLE_DESC);
             $propbag->add('default', false);
             break;
         case 'emptyBody':
             $propbag->add('type', 'boolean');
             $propbag->add('name', PLUGIN_EVENT_ENTRYCHECK_EMPTYBODY);
             $propbag->add('description', PLUGIN_EVENT_ENTRYCHECK_EMPTYBODY_DESC);
             $propbag->add('default', false);
             break;
         case 'emptyExtended':
             $propbag->add('type', 'boolean');
             $propbag->add('name', PLUGIN_EVENT_ENTRYCHECK_EMPTYEXTENDED);
             $propbag->add('description', PLUGIN_EVENT_ENTRYCHECK_EMPTYEXTENDED_DESC);
             $propbag->add('default', false);
             break;
         case 'defaultCat':
             $cats = serendipity_fetchCategories($serendipity['authorid']);
             if (!is_array($cats)) {
                 return false;
             }
             $catlist = serendipity_generateCategoryList($cats, array(0), 4);
             $tmp_select_cats = explode('@@@', $catlist);
             if (!is_array($tmp_select_cats)) {
                 return false;
             }
             $select_cats = array();
             $select_cats['none'] = NONE;
             foreach ($tmp_select_cats as $cidx => $tmp_select_cat) {
                 $select_cat = explode('|||', $tmp_select_cat);
                 if (!empty($select_cat[0]) && !empty($select_cat[1])) {
                     $select_cats[$select_cat[0]] = $select_cat[1];
                 }
             }
             $propbag->add('type', 'select');
             $propbag->add('select_values', $select_cats);
             $propbag->add('name', PLUGIN_EVENT_ENTRYCHECK_DEFAULTCAT);
             $propbag->add('description', PLUGIN_EVENT_ENTRYCHECK_DEFAULTCAT_DESC);
             $propbag->add('default', 'none');
             break;
     }
     return true;
 }
 function introspect_config_item($name, &$propbag)
 {
     global $serendipity;
     switch ($name) {
         case 'title':
             $propbag->add('type', 'string');
             $propbag->add('name', TITLE);
             $propbag->add('description', TITLE_FOR_NUGGET);
             $propbag->add('default', PLUGIN_RECENTENTRIES_TITLE);
             break;
         case 'number':
             $propbag->add('type', 'string');
             $propbag->add('name', PLUGIN_RECENTENTRIES_NUMBER);
             $propbag->add('description', PLUGIN_RECENTENTRIES_NUMBER_BLAHBLAH);
             $propbag->add('default', 10);
             break;
         case 'number_from':
             $propbag->add('type', 'radio');
             $propbag->add('name', PLUGIN_RECENTENTRIES_NUMBER_FROM);
             $propbag->add('description', PLUGIN_RECENTENTRIES_NUMBER_FROM_DESC);
             $propbag->add('radio', array('value' => array('all', 'skip'), 'desc' => array(PLUGIN_RECENTENTRIES_NUMBER_FROM_RADIO_ALL, PLUGIN_RECENTENTRIES_NUMBER_FROM_RADIO_RECENT)));
             $propbag->add('default', 'all');
             break;
         case 'randomize':
             $propbag->add('type', 'radio');
             $propbag->add('name', PLUGIN_RECENTENTRIES_RANDOMIZE);
             $propbag->add('description', PLUGIN_RECENTENTRIES_RANDOMIZE_DESC);
             $propbag->add('radio', array('value' => array('yes', 'no'), 'desc' => array(YES, NO)));
             $propbag->add('default', 'no');
             break;
         case 'dateformat':
             $propbag->add('type', 'string');
             $propbag->add('name', GENERAL_PLUGIN_DATEFORMAT);
             $propbag->add('description', sprintf(GENERAL_PLUGIN_DATEFORMAT_BLAHBLAH, '%A, %B %e %Y') . '. ' . PLUGIN_RECENTENTRIES_DATEFORMAT_WIN);
             $propbag->add('default', '%A, %B %e %Y');
             break;
         case 'category':
             $cats = serendipity_fetchCategories($serendipity['authorid']);
             if (!is_array($cats)) {
                 break;
             }
             $catlist = serendipity_generateCategoryList($cats, array(0), 4, 0, 0, '', ' . ');
             $tmp_select_cats = explode('@@@', $catlist);
             if (!is_array($tmp_select_cats)) {
                 break;
             }
             $select_cats = array();
             $select_cats['none'] = ALL_CATEGORIES;
             $select_cats['_cur'] = PARENT_CATEGORY;
             foreach ($tmp_select_cats as $cidx => $tmp_select_cat) {
                 $select_cat = explode('|||', $tmp_select_cat);
                 if (!empty($select_cat[0]) && !empty($select_cat[1])) {
                     $select_cats[$select_cat[0]] = $select_cat[1];
                 }
             }
             $propbag->add('type', 'multiselect');
             $propbag->add('select_values', $select_cats);
             $propbag->add('select_size', 5);
             $propbag->add('name', CATEGORY);
             $propbag->add('description', CATEGORIES_TO_FETCH);
             $propbag->add('default', 'none');
             break;
         case 'show_where':
             $select = array('extended' => PLUGIN_ITEM_DISPLAY_EXTENDED, 'overview' => PLUGIN_ITEM_DISPLAY_OVERVIEW, 'both' => PLUGIN_ITEM_DISPLAY_BOTH);
             $propbag->add('type', 'select');
             $propbag->add('select_values', $select);
             $propbag->add('name', PLUGIN_ITEM_DISPLAY);
             $propbag->add('description', '');
             $propbag->add('default', 'both');
             break;
         default:
             return false;
     }
     return true;
 }
/**
* Return HTML containing a list of categories
*
* Prints a list of categories for use in forms, the sidebar, or whereever...
*
* @access public
* @param array  An array of categories, typically gathered by serendipity_fetchCategories()
* @param array  An array which holds IDs which are meant to be selected within a HTML SELECT form field [used for recursion]
* @param int    The type of category list (0: HTML span list, 1/2: <option>s, 3: HTML Div list, 4: CSV data) to return
* @param int    The parent ID of a category [for recursion]
* @param int    The current nesting level [for recursion]
* @param string Tells the function, whether or not to display the XML button for each category.
*               If empty, no links to the xml feeds will be displayed; If you want to, you can
*               pass an image here (this setting is only used, when type==3).
* @param string The character to use for blank indenting
* @see serendipity_fetchCategories()
*/
function serendipity_generateCategoryList($cats, $select = array(0), $type = 0, $id = 0, $level = 0, $xmlImg = '', $blank_char = '�')
{
    global $serendipity;
    if (!is_array($cats) || !count($cats)) {
        return;
    }
    $ret = '';
    foreach ($cats as $cat) {
        if ($cat['parentid'] == $id) {
            switch ($type) {
                case 0:
                    $ret .= str_repeat('&nbsp;', $level * 2) . '&bull;&nbsp;<span id="catItem_' . $cat['categoryid'] . '"' . ($cat['categoryid'] && in_array($cat['categoryid'], $select) ? ' selected="selected"' : '') . '><a href="?serendipity[adminModule]=category&amp;serendipity[cat][catid]=' . $cat['categoryid'] . '">' . (!empty($cat['category_icon']) ? '<img style="vertical-align: middle;" src="' . $cat['category_icon'] . '" border="0" alt="' . $cat['category_name'] . '"/> ' : '') . htmlspecialchars($cat['category_name']) . (!empty($cat['category_description']) ? ' - ' . htmlspecialchars($cat['category_description']) : '') . '</a></span><br/>' . "\n";
                    break;
                case 1:
                case 2:
                    $ret .= '<option value="' . $cat['categoryid'] . '"' . ($cat['categoryid'] && in_array($cat['categoryid'], $select) ? ' selected="selected"' : '') . '>';
                    $ret .= str_repeat('&nbsp;', $level * 2) . htmlspecialchars($cat['category_name']) . ($type == 1 && !empty($cat['category_description']) ? ' - ' . htmlspecialchars($cat['category_description']) : '');
                    $ret .= '</option>';
                    break;
                case 3:
                    $category_id = serendipity_makeFilename($cat['category_name']);
                    if (!empty($xmlImg)) {
                        $ret .= sprintf('<div style="padding-bottom: 2px;">' . '<a href="%s" title="%s"><img alt="xml" src="%s" style="vertical-align: bottom; display: inline; border: 0px" /></a>&#160;%s' . '<a href="%s" title="%s">%s</a>' . '</div>', $serendipity['serendipityHTTPPath'] . 'rss.php?category=' . $cat['categoryid'] . '_' . $category_id, htmlspecialchars($cat['category_description']), $xmlImg, str_repeat('&#160;', $level * 3), serendipity_categoryURL($cat, 'serendipityHTTPPath'), htmlspecialchars($cat['category_description']), htmlspecialchars($cat['category_name']));
                    } else {
                        $ret .= sprintf('%s<a href="%s" title="%s">%s</a><br />', str_repeat('&#160;', $level * 3), serendipity_categoryURL($cat, 'serendipityHTTPPath'), htmlspecialchars($cat['category_description']), htmlspecialchars($cat['category_name']));
                    }
                    break;
                case 4:
                    $ret .= $cat['categoryid'] . '|||' . str_repeat($blank_char, $level * 2) . $cat['category_name'] . '@@@';
                    break;
            }
            $ret .= serendipity_generateCategoryList($cats, $select, $type, $cat['categoryid'], $level + 1, $xmlImg, $blank_char);
        }
    }
    return $ret;
}
 function introspect_config_item($name, &$propbag)
 {
     global $serendipity;
     switch ($name) {
         case 'title':
             $propbag->add('type', 'string');
             $propbag->add('name', TITLE);
             $propbag->add('description', TITLE_FOR_NUGGET);
             $propbag->add('default', PLUGIN_POPULARENTRIES_TITLE);
             break;
         case 'number':
             $propbag->add('type', 'string');
             $propbag->add('name', PLUGIN_POPULARENTRIES_NUMBER);
             $propbag->add('description', PLUGIN_POPULARENTRIES_NUMBER_BLAHBLAH);
             $propbag->add('default', 10);
             break;
         case 'number_from':
             $propbag->add('type', 'radio');
             $propbag->add('name', PLUGIN_POPULARENTRIES_NUMBER_FROM);
             $propbag->add('description', PLUGIN_POPULARENTRIES_NUMBER_FROM_DESC);
             $propbag->add('radio', array('value' => array('all', 'skip'), 'desc' => array(PLUGIN_POPULARENTRIES_NUMBER_FROM_RADIO_ALL, PLUGIN_POPULARENTRIES_NUMBER_FROM_RADIO_POPULAR)));
             $propbag->add('default', 'all');
             break;
         case 'sortby':
             $propbag->add('type', 'radio');
             $propbag->add('name', PLUGIN_POPULARENTRIES_SORTBY);
             $propbag->add('description', '');
             $propbag->add('radio_per_row', '1');
             $propbag->add('radio', array('value' => array('comments', 'commentors', 'visits', 'lowvisits', 'exits', 'karma'), 'desc' => array(PLUGIN_POPULARENTRIES_SORTBY_COMMENTS, PLUGIN_POPULARENTRIES_SORTBY_COMMENTORS, PLUGIN_POPULARENTRIES_SORTBY_VISITS, PLUGIN_POPULARENTRIES_SORTBY_LOWVISITS, PLUGIN_POPULARENTRIES_SORTBY_EXITS, PLUGIN_POPULARENTRIES_SORTBY_KARMAVOTES)));
             $propbag->add('default', 'comments');
             break;
         case 'commentors_hide':
             $propbag->add('type', 'string');
             $propbag->add('name', PLUGIN_POPULARENTRIES_SORTBY_COMMENTORS_FILTER);
             $propbag->add('description', PLUGIN_POPULARENTRIES_SORTBY_COMMENTORS_FILTER_DESC);
             $propbag->add('default', $serendipity['realname']);
             break;
         case 'category':
             $cats = serendipity_fetchCategories($serendipity['authorid']);
             if (!is_array($cats)) {
                 return false;
             }
             $catlist = serendipity_generateCategoryList($cats, array(0), 4);
             $tmp_select_cats = explode('@@@', $catlist);
             if (!is_array($tmp_select_cats)) {
                 return false;
             }
             $select_cats = array();
             $select_cats['none'] = ALL_CATEGORIES;
             $select_cats['_cur'] = PARENT_CATEGORY;
             foreach ($tmp_select_cats as $cidx => $tmp_select_cat) {
                 $select_cat = explode('|||', $tmp_select_cat);
                 if (!empty($select_cat[0]) && !empty($select_cat[1])) {
                     $select_cats[$select_cat[0]] = $select_cat[1];
                 }
             }
             $propbag->add('type', 'select');
             $propbag->add('select_values', $select_cats);
             $propbag->add('name', CATEGORY);
             $propbag->add('description', CATEGORIES_TO_FETCH);
             $propbag->add('default', 'none');
             break;
         default:
             return false;
     }
     return true;
 }
 function introspect_config_item($name, &$propbag)
 {
     global $serendipity;
     switch ($name) {
         case 'doc_rpclink':
             $propbag->add('type', 'content');
             $propbag->add('default', sprintf(PLUGIN_EVENT_XMLRPC_DOC_RPCLINK, $serendipity['baseURL'] . 'serendipity_xmlrpc.php'));
             break;
         case 'debuglog':
             $debuglevels = array('none' => PLUGIN_EVENT_XMLRPC_DEBUGLOG_NONE, 'normal' => PLUGIN_EVENT_XMLRPC_DEBUGLOG_NORMAL);
             $propbag->add('type', 'select');
             $propbag->add('select_values', $debuglevels);
             $propbag->add('name', PLUGIN_EVENT_XMLRPC_DEBUGLOG);
             $propbag->add('description', PLUGIN_EVENT_XMLRPC_DEBUGLOG_DESC);
             $propbag->add('default', 'none');
             break;
         case 'gmt':
             $propbag->add('type', 'boolean');
             $propbag->add('name', PLUGIN_EVENT_XMLRPC_GMT);
             $propbag->add('description', '');
             $propbag->add('default', false);
             break;
         case 'uploaddir':
             $propbag->add('type', 'select');
             $propbag->add('select_values', $this->scanUploadDir());
             $propbag->add('name', PLUGIN_EVENT_XMLRPC_UPLOADDIR);
             $propbag->add('description', PLUGIN_EVENT_XMLRPC_UPLOADDIR_DESC);
             $propbag->add('default', '');
             break;
         case 'htmlconvert':
             $propbag->add('type', 'boolean');
             $propbag->add('name', PLUGIN_EVENT_XMLRPC_HTMLCONVERT);
             $propbag->add('description', PLUGIN_EVENT_XMLRPC_HTMLCONVERT_DESC);
             $propbag->add('default', true);
             break;
         case 'asureauthor':
             $authoroptions = array('default' => PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_DEFAULT, 'serendipityUser' => PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_LOGIN, 'serendipityRealname' => PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_REALNAME);
             $propbag->add('type', 'select');
             $propbag->add('select_values', $authoroptions);
             $propbag->add('name', PLUGIN_EVENT_XMLRPC_ASUREAUTHOR);
             $propbag->add('description', PLUGIN_EVENT_XMLRPC_ASUREAUTHOR_DESC);
             $propbag->add('default', 'default');
             break;
         case 'wpfakeversion':
             $propbag->add('type', 'string');
             $propbag->add('name', PLUGIN_EVENT_XMLRPC_WPFAKEVERSION);
             $propbag->add('description', PLUGIN_EVENT_XMLRPC_WPFAKEVERSION_DESC);
             $propbag->add('default', '');
             break;
         case 'category':
             $cats = serendipity_fetchCategories($serendipity['authorid']);
             if (!is_array($cats)) {
                 return false;
             }
             $catlist = serendipity_generateCategoryList($cats, array(0), 4);
             $tmp_select_cats = explode('@@@', $catlist);
             if (!is_array($tmp_select_cats)) {
                 return false;
             }
             $select_cats = array();
             $select_cats[''] = '';
             foreach ($tmp_select_cats as $cidx => $tmp_select_cat) {
                 $select_cat = explode('|||', $tmp_select_cat);
                 if (!empty($select_cat[0]) && !empty($select_cat[1])) {
                     $select_cats[$select_cat[0]] = $select_cat[1];
                 }
             }
             $propbag->add('type', 'select');
             $propbag->add('select_values', $select_cats);
             $propbag->add('name', PLUGIN_EVENT_XMLRPC_DEFAULTCAT);
             $propbag->add('description', PLUGIN_EVENT_XMLRPC_DEFAULTCAT_DESC);
             $propbag->add('default', '');
             break;
         case 'spamevent_description':
             $propbag->add('type', 'content');
             $propbag->add('default', PLUGIN_EVENT_XMLRPC_EVENT_SPAM_HEADER);
             break;
         case 'event_spam':
         case 'event_approved':
         case 'event_pending':
             $events = array('none' => PLUGIN_EVENT_XMLRPC_EVENTVALUE_NONE, 'spam' => PLUGIN_EVENT_XMLRPC_EVENTVALUE_SPAM, 'ham' => PLUGIN_EVENT_XMLRPC_EVENTVALUE_HAM);
             $propbag->add('type', 'select');
             $propbag->add('select_values', $events);
             if ($name == 'event_spam') {
                 $propbag->add('name', PLUGIN_EVENT_XMLRPC_EVENT_SPAM);
                 $propbag->add('description', PLUGIN_EVENT_XMLRPC_EVENT_SPAM_DESC);
                 $propbag->add('default', 'spam');
             } elseif ($name == 'event_approved') {
                 $propbag->add('name', PLUGIN_EVENT_XMLRPC_EVENT_APPROVED);
                 $propbag->add('description', PLUGIN_EVENT_XMLRPC_EVENT_APPROVED_DESC);
                 $propbag->add('default', 'ham');
             } elseif ($name == 'event_pending') {
                 $propbag->add('name', PLUGIN_EVENT_XMLRPC_EVENT_PENDING);
                 $propbag->add('description', PLUGIN_EVENT_XMLRPC_EVENT_PENDING_DESC);
                 $propbag->add('default', 'none');
             }
             break;
         default:
             return false;
     }
     return true;
 }