Столкнулся с этой же проблемой. Готового решения не нашел, поделюсь тем что сделал для себя (ковырялся в исходниках docman-v1.5.9.ru)
Начитка перечня документов для отображения происходит в ф-ции
getDocsByUserAccess файл
\administrator\components\com_docman\classes\DOCMAN_utils.class.php строка
889Самое интересное для нас - построение запроса к базе - начиная со строки 925:
$query = "SELECT d.*, c.title AS cat_title FROM #__docman AS d"
. "\n LEFT JOIN #__categories AS c ON d.catid = c.id ";
if (!$user->userid)
{
if(!$_DOCMAN->getCfg('registered')) {
return array();
}
$query .= "WHERE d.published=1 AND d.approved=1";
/* * original DOCman code *
$query .= "WHERE d.dmowner=" . _DM_PERMIT_EVERYONE
. "\n AND d.published=1 AND d.approved=1";*/
$query .= $catid ? "\n AND d.catid IN ($catid) " : "";
}
Это уже измененный код, который приводит к тому что незарегистрированным пользователям видны ВСЕ документы (скачивать их они не смогут, только посмотреть детали - это обеспечивается стандартным кодом DOCman'a)
Вот собственно и все что нужно сделать что бы гости (в том числе поисковики) видели перечень всех документов/файлов с описанием, но не смогли их скачать.
Для решения задачи
чтобы просматривать файлы и их описание могли все зрегистрированные пользователи, а скачивать - только "избранные"...
(у меня стояла такая же цель)
В том же файле ниже комментируем часть построения запроса для зарегистрированных пользователей.
else
{
if ($user->isSpecial) {
$query .= $catid ? "\n WHERE d.catid IN ($catid) " : "";
} elseif ($user->canApprove()) {
$query .= $catid ? "\n WHERE d.catid IN ($catid) " : "";
} elseif ($user->canPublish()) {
$query .= "WHERE d.approved=1";
$query .= $catid ? "\n AND d.catid IN ($catid) " : "";
} elseif ($user->userid) {
$query .= "WHERE d.published=1 AND d.approved=1";
/* * this part of code was commented & semicolon (;) was added in previous line *
. "\n AND (d.dmowner=" . $user->userid
. "\n OR d.dmmantainedby=" . $user->userid
. "\n OR d.dmowner=" . _DM_PERMIT_EVERYONE
. "\n OR d.dmowner=" . _DM_PERMIT_REGISTERED;
if ($user->groupsIn != '0,0') {
$query .= "\n OR d.dmowner IN (" . $user->groupsIn . ")";
$query .= "\n OR d.dmmantainedby IN (" . $user->groupsIn . ")";
}
if ($_DOCMAN->getCfg('author_can')!= _DM_AUTHOR_NONE) {
$query .= "\n OR d.dmsubmitedby = " . $user->userid;
}
$query .= ")";
*/
$query .= $catid ? "\n AND d.catid IN ($catid) " : "";
}
}
Вот и все. Надеюсь, кому-то пригодится.