| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 | <?php/* checks for votes on the poll @param ElggEntity $poll @param guid @return true/false */function polls_check_for_previous_vote($poll, $user_guid){	$options = array(		'guid'	=>	$poll->guid,		'type'	=>	"object",		'subtype' => "poll",		'annotation_name' => "vote",		'annotation_owner_guid' => $user_guid,		'limit' => 1	);	$votes = elgg_get_annotations($options);	if ($votes) {		return true;	} else {		return false;	}}function polls_get_choices($poll) {	$options = array(		'relationship' => 'poll_choice',		'relationship_guid' => $poll->guid,		'inverse_relationship' => TRUE,		'order_by_metadata' => array('name'=>'display_order','direction'=>'ASC')	);	return elgg_get_entities_from_relationship($options);}function polls_get_choice_array($poll) {	$choices = polls_get_choices($poll);	$responses = array();	if ($choices) {		foreach($choices as $choice) {			$responses[$choice->text] = $choice->text;		}	}	return $responses;}function polls_add_choices($poll,$choices) {	$i = 0;	if ($choices) {		foreach($choices as $choice) {			$poll_choice = new ElggObject();			$poll_choice->subtype = "poll_choice";			$poll_choice->text = $choice;			$poll_choice->display_order = $i*10;			$poll_choice->access_id = $poll->access_id;			$poll_choice->save();			add_entity_relationship($poll_choice->guid, 'poll_choice', $poll->guid);			$i += 1;		}	}}function polls_delete_choices($poll) {	$choices = polls_get_choices($poll);	if ($choices) {		foreach($choices as $choice) {			$choice->delete();		}	}}function polls_replace_choices($poll,$new_choices) {	polls_delete_choices($poll);	polls_add_choices($poll, $new_choices);}function polls_activated_for_group($group) {	$group_polls = elgg_get_plugin_setting('group_polls', 'polls');	if ($group && ($group_polls != 'no')) {		if ( ($group->polls_enable == 'yes')		|| ((!$group->polls_enable && ((!$group_polls) || ($group_polls == 'yes_default'))))) {			return true;		}	}	return false;}function polls_can_add_to_group($group,$user=null) {	$polls_group_access = elgg_get_plugin_setting('group_access', 'polls');	if (!$polls_group_access || $polls_group_access == 'admins') {		return $group->canEdit();	} else {		if (!$user) {			$user = elgg_get_logged_in_user_guid();		}		return $group->canEdit() || $group->isMember($user);	}}function polls_get_page_edit($page_type,$guid = 0) {	gatekeeper();	// Get the current page's owner	$page_owner = elgg_get_page_owner_entity();	if ($page_owner === false || is_null($page_owner)) {		$page_owner = elgg_get_logged_in_user_entity();		elgg_set_page_owner_guid($page_owner->guid);	}		$form_vars = array('id'=>'polls-edit-form');	// Get the post, if it exists	if ($page_type == 'edit') {		$poll = get_entity($guid);		if (elgg_instanceof($poll,'object','poll')) {			$container_guid = $poll->container_guid;			elgg_set_page_owner_guid($container_guid);			$title = elgg_echo('polls:editpost', array($poll->title));						$body_vars = array(				'fd' => polls_prepare_edit_body_vars($poll),				'entity' => $poll			);				if ($poll->canEdit()) {				$content = elgg_view_form("polls/edit", $form_vars, $body_vars);			} else {				$content = elgg_echo('polls:permission_error');			}						// set breadcrumb			elgg_push_breadcrumb(elgg_echo('item:object:poll'),'polls/all');						$container = get_entity($container_guid);			if (elgg_instanceof($container,'group')) {				elgg_push_breadcrumb($container->name, 'polls/group/' . $container->getGUID());			} else {				elgg_push_breadcrumb($container->name, 'polls/owner/' . $container->username);			}			elgg_push_breadcrumb(elgg_echo("polls:edit"));		} else {			$title = elgg_echo('polls:error_title');			$content = elgg_echo('polls:no_such_poll');		}	} else {		// set breadcrumb		elgg_push_breadcrumb(elgg_echo('item:object:poll'),'polls/all');		if ($guid) {			elgg_set_page_owner_guid($guid);			$container = get_entity($guid);						elgg_push_breadcrumb($container->name, 'polls/group/' . $container->getGUID());		} else {			$user = elgg_get_logged_in_user_entity();			elgg_set_page_owner_guid($user->getGUID());						elgg_push_breadcrumb($user->name, 'polls/owner/' . $user->username);		}		elgg_push_breadcrumb(elgg_echo('polls:add'));				$title = elgg_echo('polls:addpost');		$body_vars = array('fd'=>polls_prepare_edit_body_vars(),'container_guid'=>$guid);		$content = elgg_view_form("polls/edit",$form_vars,$body_vars);	}		$params = array(		'title' => $title,		'content' => $content,		'filter' => '',					);	$body = elgg_view_layout('content', $params);	// Display page	return elgg_view_page($title,$body);}/** * Pull together variables for the edit form * * @param ElggObject       $poll * @return array *  * TODO - put choices in sticky form as well */function polls_prepare_edit_body_vars($poll = NULL) {	// input names => defaults	$values = array(		'question' => NULL,		'tags' => NULL,		'front_page' => NULL,		'access_id' => ACCESS_DEFAULT,		'guid' => NULL,	);	if ($poll) {		foreach (array_keys($values) as $field) {			if (isset($poll->$field)) {				$values[$field] = $poll->$field;			}		}	}	if (elgg_is_sticky_form('polls')) {		$sticky_values = elgg_get_sticky_values('polls');		foreach ($sticky_values as $key => $value) {			$values[$key] = $value;		}	}	elgg_clear_sticky_form('polls');	return $values;}function polls_get_page_list($page_type, $container_guid = NULL) {	global $autofeed;	$autofeed = TRUE;	$user = elgg_get_logged_in_user_entity();	$params = array();	$options = array(		'type'=>'object', 		'subtype'=>'poll', 		'full_view' => FALSE, 		'limit'=>15,	);		// set breadcrumb	elgg_push_breadcrumb(elgg_echo('item:object:poll'), 'polls/all');		if ($page_type == 'group') {		$group = get_entity($container_guid);		if (!elgg_instanceof($group,'group') || !polls_activated_for_group($group)) {			forward();		}		$crumbs_title = $group->name;		$params['title'] = elgg_echo('polls:group_polls:listing:title', array(htmlspecialchars($crumbs_title)));		$params['filter'] = "";				// set breadcrumb		elgg_push_breadcrumb($crumbs_title);				elgg_push_context('groups');				elgg_set_page_owner_guid($container_guid);		group_gatekeeper();				$options['container_guid'] = $container_guid;		$user_guid = elgg_get_logged_in_user_guid();		if (elgg_get_page_owner_entity()->canWriteToContainer($user_guid)){			elgg_register_menu_item('title', array(				'name' => 'add',				'href' => "polls/add/".$container_guid,				'text' => elgg_echo('polls:add'),				'class' => 'elgg-button elgg-button-action',			));		}			} else {		switch ($page_type) {			case 'owner':				$options['owner_guid'] = $container_guid;								$container_entity = get_user($container_guid);				elgg_push_breadcrumb($container_entity->name);								if ($user->guid == $container_guid) {					$params['title'] = elgg_echo('polls:your');					$params['filter_context'] = 'mine';				} else {					$params['title'] = elgg_echo('polls:not_me',array(htmlspecialchars($container_entity->name)));					$params['filter_context'] = "";				}				break;			case 'friends':				$container_entity = get_user($container_guid);				$friends = get_user_friends($container_guid, ELGG_ENTITIES_ANY_VALUE, 0);								$options['container_guids'] = array();				foreach ($friends as $friend) {					$options['container_guids'][] = $friend->getGUID();				}								$params['filter_context'] = 'friends';				$params['title'] = elgg_echo('polls:friends');								elgg_push_breadcrumb($container_entity->name, "polls/owner/{$container_entity->username}");				elgg_push_breadcrumb(elgg_echo('friends'));				break;			case 'all':				$params['filter_context'] = 'all';				$params['title'] = elgg_echo('item:object:poll');				break;		}				$polls_site_access = elgg_get_plugin_setting('site_access', 'polls');				if ((elgg_is_logged_in() && ($polls_site_access != 'admins')) || elgg_is_admin_logged_in()) {					elgg_register_menu_item('title', array(				'name' => 'add',				'href' => "polls/add",				'text' => elgg_echo('polls:add'),				'class' => 'elgg-button elgg-button-action',			));		}	}		if (($page_type == 'friends') && (count($options['container_guids']) == 0)) {		// this person has no friends		$params['content'] = '';	} else {		$params['content'] = elgg_list_entities($options);	}	if (!$params['content']) {		$params['content'] = elgg_echo('polls:none');	}	$body = elgg_view_layout("content", $params);	return elgg_view_page($params['title'],$body);}function polls_get_page_view($guid) {	elgg_load_js('elgg.polls');	$poll = get_entity($guid);	if (elgg_instanceof($poll,'object','poll')) {				// Set the page owner		$page_owner = $poll->getContainerEntity();		elgg_set_page_owner_guid($page_owner->guid);		$title =  $poll->title;		$content = elgg_view_entity($poll, array('full_view' => TRUE));		//check to see if comments are on		if ($poll->comments_on != 'Off') {			$content .= elgg_view_comments($poll);		}				elgg_push_breadcrumb(elgg_echo('item:object:poll'), "polls/all");		if (elgg_instanceof($page_owner,'user')) {			elgg_push_breadcrumb($page_owner->name, "polls/owner/{$page_owner->username}");		} else {			elgg_push_breadcrumb($page_owner->name, "polls/group/{$page_owner->guid}");		}		elgg_push_breadcrumb($poll->title);	} else {					// Display the 'post not found' page instead		$title = elgg_echo("polls:notfound");			$content = elgg_view("polls/notfound");			elgg_push_breadcrumb(elgg_echo('item:object:poll'), "polls/all");		elgg_push_breadcrumb($title);	}		$params = array('title' =>$title,'content' => $content,'filter'=>'');	$body = elgg_view_layout('content', $params);			// Display page	return elgg_view_page($title,$body);}function polls_get_response_count($valueToCount, $fromArray) {	$count = 0;		if(is_array($fromArray))	{		foreach($fromArray as $item)		{			if($item->value == $valueToCount)			{				$count += 1;			}		}		}		return $count;}function polls_manage_front_page($poll,$front_page) {	$poll_front_page = elgg_get_plugin_setting('front_page','polls');	if(elgg_is_admin_logged_in() && ($poll_front_page == 'yes')) {		$options = array(			'type' => 'object',			'subtype' => 'poll',			'metadata_name_value_pairs' => array(array('name'=>'front_page','value'=>1)),			'limit' => 1,		);		$polls = elgg_get_entities_from_metadata($options);		if ($polls) {			$front_page_poll = $polls[0];			if ($front_page_poll->guid == $poll->guid) {				if (!$front_page) {					$front_page_poll->front_page = 0;								}			} else {				$front_page_poll->front_page = 0;				$poll->front_page = 1;			}		} else {			$poll->front_page = 1;		}	}}
 |