Вывод опросов, в которых пользователь еще не проголосовал — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «'''Актуально для версии 2.9.5''' Если необходимо вывести опросы, в которых пользователь еще не…»)
 
 
Строка 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).