Вывод опросов, в которых пользователь еще не проголосовал — различия между версиями
Alexei (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.5''' Если необходимо вывести опросы, в которых пользователь еще не…») |
Alexei (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
'''Актуально для версии 2.9.5''' | '''Актуально для версии 2.9.5''' | ||
− | Если необходимо вывести опросы, в которых пользователь еще не голосовал, то системными средствами не обойтись, необходимо | + | Если необходимо вывести опросы, в которых пользователь еще не голосовал, то системными средствами не обойтись, необходимо реализовать кастомный макрос, который будет выводить необходимые опросы. Данный макрос нужно прописать в файле classes/modules/custom.php после строки //TODO: Write your own macroses here |
+ | |||
+ | <source lang="php"> | ||
+ | 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); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Данному макросу можно передать в качестве первого параметра id пользователя, для которого надо вывести опросы, в которых он не голосовал. Если этот id не передавать, то макрос будет выводить опросы для того пользователя, под которым макрос был запущен (т.е. если его запустит супервайзер - макрос будет проверять супервайзера, если его запустит пользователь с id = 99, то макрос будет проверять пользователя с id = 99). | ||
Текущая версия на 10:12, 27 января 2014
Актуально для версии 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).