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.
 
 
 
 
 
 

145 lines
5.6 KiB

<?php
/**
* @package tikiwiki
*/
// (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$
require_once('tiki-setup.php');
$access->check_permission('tiki_p_admin');
if (! empty($_REQUEST['submit'])) {
$smarty->assign('searched', true);
$trklib = TikiLib::lib('trk');
$trackers = $trklib->list_trackers();
$trackers = array_combine(
array_map(
function ($tracker) {
return $tracker['trackerId'];
},
$trackers['data']
),
array_map(
function ($tracker) {
return $tracker['name'];
},
$trackers['data']
)
);
$fields = [];
foreach ($trackers as $trackerId => $trackerName) {
$result = $trklib->list_tracker_fields($trackerId);
$fields = array_merge($fields, $result['data']);
}
$permanentNames = array_map(function ($field) {
return $field['permName'];
}, $fields);
$suffixes = "/_(text|json|[a-z]{2}|exact|base|raw|[a-z]{2}_raw|creation_date|modification_date|freshness_days|names|paths|calitemid|recurrenceId|multi|plain|count|sum|unstemmed|n?desc|n?asc|base_n?desc|base_n?asc)$/";
$results = [];
if (! empty($_REQUEST['search']) && in_array('wiki_pages', $_REQUEST['search'])) {
$smarty->assign('wiki_pages_checked', true);
$wikilib = TikiLib::lib('wiki');
$result = $wikilib->get_pages_contains('tracker_field_');
foreach ($result['data'] as $page) {
preg_match_all("/tracker_field_([a-z0-9_\-]+)/i", $page['data'], $matches);
foreach ($matches[1] as $possiblePermName) {
$possiblePermNameBase = preg_replace($suffixes, "", $possiblePermName);
if (! in_array($possiblePermName, $permanentNames) && ! in_array($possiblePermNameBase, $permanentNames)) {
$results[] = [
'page' => $page['pageName'],
'permanentName' => $possiblePermName
];
}
}
}
}
if (! empty($_REQUEST['search']) && in_array('tracker_fields', $_REQUEST['search'])) {
$smarty->assign('tracker_fields_checked', true);
foreach ($fields as $field) {
preg_match_all("/tracker_field_([a-z0-9_\-]+)/i", $field['options'], $matches);
foreach ($matches[1] as $possiblePermName) {
$possiblePermNameBase = preg_replace($suffixes, "", $possiblePermName);
if (! in_array($possiblePermName, $permanentNames) && ! in_array($possiblePermNameBase, $permanentNames)) {
$results[] = [
'trackerId' => $field['trackerId'],
'trackerName' => $trackers[$field['trackerId']],
'fieldId' => $field['fieldId'],
'fieldName' => $field['name'],
'permanentName' => $possiblePermName
];
}
}
if ($field['type'] == 'math') {
$runner = Tracker_Field_Math::getRunner();
$runner->setFormula($field['options_map']['calculation']);
foreach ($runner->inspect() as $possiblePermName) {
if (! is_string($possiblePermName)) {
continue;
}
if (! in_array($possiblePermName, $permanentNames)) {
$results[] = [
'trackerId' => $field['trackerId'],
'trackerName' => $trackers[$field['trackerId']],
'fieldId' => $field['fieldId'],
'fieldName' => $field['name'],
'permanentName' => $possiblePermName
];
}
}
}
}
}
if (! empty($_REQUEST['search']) && in_array('tabular_tracker_fields', $_REQUEST['search'])) {
$smarty->assign('tabular_tracker_fields_checked', true);
$lib = TikiLib::lib('tabular');
$tabularList = $lib->getList();
foreach ($tabularList as $tabular) {
$tabularId = $tabular['tabularId'];
$tabularName = $tabular['tabularName'];
$info = $lib->getInfo($tabularId);
$trackerId = $info['trackerId'];
foreach ($info['format_descriptor'] as $item) {
if (in_array($item['field'], ['itemId', 'status'])) {
continue;
}
$trkFieldsMatch = array_filter($fields, function ($field) use ($item, $trackerId) {
return $field['trackerId'] == $trackerId && $field['permName'] == $item['field'];
});
if (empty($trkFieldsMatch)) {
$results[] = [
'tabularId' => $tabularId,
'tabularName' => $tabularName,
'trackerId' => $trackerId,
'trackerName' => $trackers[$trackerId],
'permanentName' => $item['field'],
];
}
}
}
}
$smarty->assign('results', $results);
} else {
$smarty->assign('wiki_pages_checked', true);
$smarty->assign('tracker_fields_checked', true);
$smarty->assign('tabular_tracker_fields_checked', true);
}
// Display the template
$smarty->assign('mid', 'tiki-admin_orphaned.tpl');
$smarty->display("tiki.tpl");