Ну вот, решение имеет место быть. Сейчас в упрощенном виде - как сделать чтобы в MySubmissions все выше группы Author имели доступ ко всем материалам, а не только к тем, что сами опубликовали.
Для начала приведу список интересующих нас стандартных групп и их идентификаторов в Joomla:
Author (3)
Editor (4)
Publisher (5)
Manager (6)
Administrator (7)
Super Users (
Доработка коснется контроллера:
components/com_zoo/controllers/submission.php
По просьбам трудящихся буду детально комментировать код:
Ищем в строке 123 строки (это функция mysubmissions()):
$this->items = $this->app->table->item->getByUser($this->application->id, $this->user->id, $type, $search, $order, $limitstart, $limit);
$this->pagination = $this->app->pagination->create($this->app->table->item->getItemCountByUser($this->application->id, $this->user->id, $type, $search), $page, $limit, 'page', 'app');
Именно 2 этих строки отвечают за получение списка материалов в MySubmissions.
Первая строка при помощи функции getByUser возвращает список материалов текущего пользователя. Во второй строке формируется разбивка на страницы, согласно общему количеству материалов пользователя, которое вычисляется функцией getItemCountByUser.
Мы же 2 приведенных строки заменим следующим кодом
// Получаем массив с ID групп, в которые входит текущий пользователь
$groups = $this->user->groups;
// Проверяем, входит ли текущий пользователь в группу выше автора
if (array_search(4, $groups) OR array_search(5, $groups) OR array_search(6, $groups) OR array_search(7, $groups) OR array_search(8, $groups)) {
// Если входит - выводим полный список всех материалов приложения
$this->items = $this->app->table->item->findAll($this->application->id, $published = false, $user = null, $options);
}
else
{
// Если пользователь не входит в административные группы выше "Автора" - выводим список материалов пользователя
$this->items = $this->app->table->item->getByUser($this->application->id, $this->user->id, $type, $search, $order, $limitstart, $limit);
}
// Проверяем, входит ли текущий пользователь в группу выше автора
if (array_search(4, $groups) OR array_search(5, $groups) OR array_search(6, $groups) OR array_search(7, $groups) OR array_search(8, $groups)) {
// Если входит - передаем в функцию постраничной разбивки количество материалов приложения (соответственно полученному списку)
$this->pagination = $this->app->pagination->create($this->app->table->item->getApplicationItemCount($this->application->id), $page, $limit, 'page', 'app');
}
else
{
// Если пользователь не входит в административные группы выше "Автора" - передаем в функцию постраничной разбивки количество материалов пользователя
$this->pagination = $this->app->pagination->create($this->app->table->item->getItemCountByUser($this->application->id, $this->user->id, $type, $search), $page, $limit, 'page', 'app');
}