tra('Category'),
'documentation' => 'PluginCategory',
'description' => tra('List categories and objects assigned to them'),
'prefs' => [ 'feature_categories', 'wikiplugin_category' ],
'iconname' => 'structure',
'introduced' => 1,
'params' => [
'id' => [
'required' => false,
'name' => tra('Category IDs'),
'description' => tr('List of category IDs separated by "+", for example, %0. Default will use category
of the current page.', '1+2+3'),
'since' => '1',
'filter' => 'digits',
'separator' => '+',
'default' => '',
'profile_reference' => 'category',
],
'types' => [
'required' => false,
'name' => tra('Types'),
'description' => tra('List of object types to include in the list, separated by "+", for example, ')
. 'article+blog+blog post+fgal',
'since' => '1',
'accepted' => 'article, blog, blog post, fgal, forum, newsletter, event, poll, quiz, survey, tracker, wiki, img',
'filter' => 'text',
'default' => '*',
],
'sort' => [
'required' => false,
'name' => tra('Sort order'),
'description' => tra('Sort ascending or descending based on various attributes (sorted ascending by
name by default)'),
'since' => '1',
'filter' => 'text',
'default' => '',
'options' => [
['text' => tra(''), 'value' => ''],
['text' => tra('Created Ascending'), 'value' => 'created_asc'],
['text' => tra('Created Descending'), 'value' => 'created_desc'],
['text' => tra('Hits Ascending'), 'value' => 'hits_asc'],
['text' => tra('Hits Descending'), 'value' => 'hits_desc'],
['text' => tra('Item ID Ascending'), 'value' => 'itemId_asc'],
['text' => tra('Item ID Descending'), 'value' => 'itemId_desc'],
['text' => tra('Name Ascending'), 'value' => 'name_asc'],
['text' => tra('Name Descending'), 'value' => 'name_desc'],
['text' => tra('Type Ascending'), 'value' => 'type_asc'],
['text' => tra('Type Descending'), 'value' => 'type_desc'],
['text' => tra('Random'), 'value' => 'random'],
],
],
'split' => [
'required' => false,
'name' => tra('Split'),
'description' => tra('Whether multiple categories will be listed on different lines (default is to split them)'),
'since' => '1',
'filter' => 'alpha',
'default' => '',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'and' => [
'required' => false,
'name' => tra('And'),
'description' => tr('If set to %0 (Yes), only objects in all of the categories will be shown (default
is to show objects in any of the categories)', 'y'),
'since' => '1',
'filter' => 'alpha',
'default' => '',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'sub' => [
'required' => false,
'name' => tra('Sub-categories'),
'description' => tra('Also list objects in sub-categories of the categories given (default is to list
sub-category objects)'),
'since' => '4.1',
'default' => 'n',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'showdescription' => [
'required' => false,
'name' => tra('Description'),
'description' => tra('Show descriptions (not shown by default)'),
'since' => '4.1',
'default' => 'n',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'showname' => [
'required' => false,
'name' => tra('Name'),
'description' => tra('Show object names (shown by default)'),
'since' => '4.1',
'default' => 'y',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'showtype' => [
'required' => false,
'name' => tra('Type'),
'description' => tra('Show type (shown by default)'),
'since' => '4.1',
'default' => 'y',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'one' => [
'required' => false,
'name' => tra('One Per Line'),
'description' => tra('Show one object per line (multiple per line shown by default)'),
'default' => 'n',
'since' => '5.0',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'showlinks' => [
'required' => false,
'name' => tra('Child Links'),
'description' => tra('Show children category links (shown by default)'),
'since' => '5.0',
'default' => 'y',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'categoryshowlink' => [
'required' => false,
'name' => tra('Top Link'),
'description' => tra('Show top category link (shown by default)'),
'since' => '5.0',
'default' => 'y',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'maxRecords' => [
'required' => false,
'name' => tra('Maximum Records'),
'description' => tr('Maximum number of objects to list (default is %0)', '50'),
'since' => '6.1',
'default' => '50',
'filter' => 'digits',
],
'showTitle' => [
'required' => false,
'name' => tra('Title'),
'description' => tra('Show title text above category object lists (shown by default)'),
'since' => '6.1',
'default' => 'y',
'filter' => 'alpha',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'lang' => [
'required' => false,
'name' => tra('Language'),
'description' => tra('List only objects in this language.') . ' ' . tr(
'Only apply if %0.',
'type="wiki"'
),
'since' => '8.0',
'filter' => 'lang',
'default' => '',
],
],
];
}
function wikiplugin_category($data, $params)
{
global $prefs;
if ($prefs['feature_categories'] != 'y') {
return "" . tra("Categories are disabled") . "";
}
$categlib = TikiLib::lib('categ');
$default = ['maxRecords' => 50];
$params = array_merge($default, $params);
extract($params, EXTR_SKIP);
// TODO: use categ name instead of id (alternative)
if (isset($split) and substr(strtolower($split), 0, 1) == 'n') {
$split = false;
} else {
$split = true;
}
if (isset($sub) and substr(strtolower($sub), 0, 1) == 'n') {
$sub = false;
} else {
$sub = true;
}
if (! empty($lang)) {
$filter['language'] = $lang;
} elseif (isset($params['lang'])) {
$filter['language'] = $prefs['language'];
} else {
$filter = null;
}
if (isset($and) and substr(strtolower($and), 0, 1) == 'y') {
$and = true;
} else {
$and = false;
}
if (isset($sort)) {
$list = explode(',', $sort);
foreach ($list as $l) {
if (! in_array($l, ['name_asc', 'name_desc', 'hits_asc', 'hits_desc', 'type_asc', 'type_desc', 'created_asc', 'created_desc', 'itemId_asc', 'itemId_desc', 'random'])) {
return tra('Incorrect parameter:') . ' sort';
}
}
} else {
$sort = '';
}
$types = (isset($types)) ? strtolower($types) : "*";
$id = (! empty($id)) ? $id : 'current'; // use current category if none is given
if ($id == 'current') {
if (isset($_REQUEST['page'])) {
$objId = urldecode($_REQUEST['page']);
$id = $categlib->get_object_categories('wiki page', $objId);
} else {
$id = [];
}
}
// We pass maxRecords because get_categoryobjects ignores it when $and is set so we need to do an additional check in the template
$displayParameters = array_intersect_key($params, array_flip(['showTitle', 'categoryshowlink', 'showtype', 'one', 'showlinks', 'showname', 'showdescription', 'maxRecords']));
return "~np~" . $categlib->get_categoryobjects($id, $types, $sort, $split, $sub, $and, $maxRecords, $filter, $displayParameters) . "~/np~";
}