You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

210 lines
8.6 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
function prefs_category_list()
{
return [
'category_jail' => [
'name' => tra('Category jail'),
'description' => tra('Limits the visibility of objects to those in these category IDs. Used mainly for creating workspaces from perspectives.'),
'separator' => ',',
'type' => 'text',
'filter' => 'int',
'default' => [''], //empty string needed to keep preference from setting unexpectedly
'detail' => tra('This should only be set for perspectives, and not globally.'),
'profile_reference' => 'category',
],
'category_jail_root' => [
'name' => tra('Category jail root'),
'description' => tra('Always display categories outside of the jail root, which would be for normal categorization.'),
'separator' => ',',
'type' => 'text',
'filter' => 'int',
'default' => [0], //empty string needed to keep preference from setting unexpectedly
'profile_reference' => 'category',
],
'category_defaults' => [
'name' => tra('Category defaults'),
'description' => tra('Require certain categories to be present. If none of the categories in a given set is provided, assign a category by default.') . ' ' . tra('Use *7 to specify all the categories in the subtree of 7 + category 7.') . ' ' . tra('Can do only this for objectname matching the regex (Example: /^RND_/ = name beginning by RND_)(Optional)') . ' ' . tra('Can do for wiki only (optional).') . ' ' . tra('Rename will only reassign the categories for wiki pages.'),
'type' => 'textarea',
'filter' => 'striptags',
'hint' => tra('One per line, for example: 1,4,6,*7/4:/^RND_/:wiki page'),
'size' => 5,
'serialize' => 'prefs_category_serialize_defaults',
'unserialize' => 'prefs_category_unserialize_defaults',
'profile_reference' => 'category',
'default' => false,
'tags' => [
'experimental', // Assignment fails quietly, cryptic description. Chealer 2017-03-23
'advanced'
]
],
'category_i18n_sync' => [
'name' => tra('Synchronize multilingual categories'),
'description' => tra('Make sure that the categories of the translations are synchronized when modified on any version.'),
'type' => 'list',
'dependencies' => [ 'feature_multilingual' ],
'options' => [
'n' => tra('None'),
'whitelist' => tra('Only those specified'),
'blacklist' => tra('All but those specified'),
],
'default' => 'n',
],
'category_i18n_synced' => [
'name' => tra('Synchronized categories'),
'description' => tra('List of categories affected by the multilingual synchronization. Depending on the parent feature, this list will be used as a white list (the only categories allowed) or as a black list (all categories allowed except those specified).'),
'type' => 'text',
'dependencies' => ['category_i18n_sync'],
'filter' => 'digits',
'separator' => ',',
'default' => [''], //empty string needed to keep preference from setting unexpectedly
],
'category_sort_ascii' => [
'name' => tra('Sort categories case insensitively'),
'description' => tra('Ignore case and accents when listing categories. Disable to use the "locale" sort settings.'),
'type' => 'flag',
'default' => 'n',
],
'category_autogeocode_within' => [
'name' => tra('Automatically geocode items with this category'),
'description' => tra('Automatically geocode items based on category name when categorized in the sub-categories of this category ID'),
'type' => 'text',
'filter' => 'digits',
'size' => 3,
'default' => '',
],
'category_autogeocode_replace' => [
'name' => tra('Replace any existing geocode'),
'description' => tra('When automatically geocoding items based on category name, replace existing geocode, if any'),
'type' => 'flag',
'default' => 'n',
],
'category_autogeocode_fudge' => [
'name' => tra('Use approximate geocode location'),
'description' => tra('When automatically geocoding items based on category name, use randomly approximated location instead of precise location'),
'type' => 'flag',
'default' => 'n',
],
'category_morelikethis_algorithm' => [
'name' => tra('"More Like This" algorithm for categories'),
'type' => 'list',
'options' => [
'' => '',
'basic' => tra('Basic'),
'weighted' => tra('Weighted'),
],
'default' => '',
],
'category_morelikethis_mincommon' => [
'name' => tra('Minimum number of categories in common'),
'type' => 'list',
'units' => tra('categories'),
'options' => [
'1' => '1',
'2' => '2',
'3' => '3',
'4' => '4',
'5' => '5',
'6' => '6',
'7' => '7',
'8' => '8',
'9' => '9',
'10' => '10',
],
'default' => 2,
],
'category_morelikethis_mincommon_orless' => [
'name' => tra('List objects with most categories in common'),
'description' => tra('No minimum is applied.'),
'type' => 'flag',
'default' => 'y',
],
'category_morelikethis_mincommon_max' => [
'name' => tra('Maximum number of "more like this" objects'),
'description' => tra('The default maximum records setting for the site is used of this is set to 0.'),
'type' => 'text',
'size' => 3,
'filter' => 'int',
'units' => tra('objects'),
'default' => 0,
],
'category_custom_facets' => [
'name' => tr('Generate custom facets from categories'),
'description' => tr('Comma-separated list of category IDs.'),
'type' => 'text',
'size' => 15,
'filter' => 'int',
'separator' => ',',
'default' => '',
'profile_reference' => 'category',
],
'category_browse_count_objects' => [
'name' => tra('Show category object count'),
'description' => tra('Show object count when browsing categories, complying with search and type filters'),
'warning' => tra('Can slow the loading of the categories page on large sites.'),
'type' => 'flag',
'default' => 'y',
],
];
}
function prefs_category_serialize_defaults($data)
{
if (! is_array($data)) {
$data = unserialize($data);
}
$out = '';
if (is_array($data)) {
foreach ($data as $row) {
$out .= implode(',', $row['categories']) . '/' . $row['default'];
if (! empty($row['filter'])) {
$out .= ':' . $row['filter'];
}
if (! empty($row['type'])) {
if (empty($row['filter'])) {
$out .= ':';
}
$out .= ':' . $row['type'];
}
$out .= "\n";
}
}
return trim($out);
}
function prefs_category_unserialize_defaults($string)
{
$data = [];
foreach (explode("\n", $string) as $row) {
if (preg_match('/^\s*(\*?\d+\s*(,\s*\*?\d+\s*)*)\/\s*(\d+)\s*(:(.*)(:(wiki page))?)?$/U', $row, $parts)) {
$categories = explode(',', $parts[1]);
$categories = array_map('trim', $categories);
$categories = array_filter($categories);
$default = $parts[3];
$filter = empty($parts[5]) ? '' : $parts[5];
$type = empty($parts[7]) ? '' : 'wiki page';
$data[] = [
'categories' => $categories,
'default' => $default,
'filter' => $filter,
'type' => $type,
];
}
}
if (count($data)) {
return $data;
} else {
return false;
}
}