Вывод опросов, в которых пользователь еще не проголосовал
Актуально для версии 2.9.5
Если необходимо вывести опросы, в которых пользователь еще не голосовал, то системными средствами не обойтись, необходимо реализовать кастомный макрос, который будет выводить необходимые опросы. Данный макрос нужно прописать в файле classes/modules/custom.php после строки //TODO: Write your own macroses here
public function getNotRatedVotes($user_id) {
if (!$user_id) {
$user_id = permissionsCollection::getInstance()->getUserId();
}
else {
$user_id = intval($user_id);
}
$temp = umiObjectsCollection::getInstance()->getObject($user_id);
if (!$temp instanceof umiObject) {
echo "Ошибка. Пользователя с таким id не существует.<br />\n";
}
$objects = $temp->getValue('rated_pages');
foreach($objects as $object){
$user_votes_id[] = $object->getId();
}
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('vote', 'poll');
$query = $pages->result();
foreach($query as $page){
$all_votes_id[] = $page->id;
}
$result = array_diff($all_votes_id, $user_votes_id);
$hierarchy = umiHierarchy::getInstance();
list($itemsTemplate, $itemTemplate) = def_module::loadTemplates("vote/{$template}", "items", "item");
$item = array();
$items = array();
foreach($result as $id){
$vote = $hierarchy->getElement($id);
$item['attribute:id'] = $id;
$item['attribute:link'] = $vote->link;
$item['attribute:name'] = $vote->getName();
$items[] = def_module::parseTemplate($itemTemplate, $item);
}
$items = array('subnodes:items' => $items);
$items['user_id'] = $user_id;
return def_module::parseTemplate($itemsTemplate, $items);
}
Данному макросу можно передать в качестве первого параметра id пользователя, для которого надо вывести опросы, в которых он не голосовал. Если этот id не передавать, то макрос будет выводить опросы для того пользователя, под которым макрос был запущен (т.е. если его запустит супервайзер - макрос будет проверять супервайзера, если его запустит пользователь с id = 99, то макрос будет проверять пользователя с id = 99).