Вывод опросов, в которых пользователь еще не проголосовал

Материал из Umicms
Версия от 10:12, 27 января 2014; Alexei (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Актуально для версии 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).