aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/river.php
blob: 545309abfa28d536335c08b9f627c0040f2835be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
	/**
	 * Elgg river.
	 * Functions for listening for and generating the river out of the system log.
	 * 
	 * @package Elgg
	 * @subpackage Core
	 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
	 * @author Marcus Povey
	 * @copyright Curverider Ltd 2008
	 * @link http://elgg.org/
	 */

	/**
	 * Extract a list of river events from the current system log.
	 * This function retrieves the objects from the system log and will attempt to render 
	 * the view "river/CLASSNAME/EVENT" where CLASSNAME is the class of the object the system event is referring to,
	 * and EVENT is the event (create, update, delete etc).
	 * 
	 * This view will be passed the log entry (as 'log_entry') and the object (as 'object') which will be accessable 
	 * through the $vars[] array.
	 * 
	 * It returns an array of the result of each of these views.
	 * 
	 * \TODO: Limit to just one user or just one user's friends
	 * 
	 * @param int $limit
	 * @param int $offset
	 * @return array
	 */
	function get_river_entries($limit = 10, $offset = 0)
	{
		// set start limit and offset
		$cnt = $limit;
		$off = $offset;
		
		$exit = false;
		
		// River objects
		$river = array();
		
		do
		{
			$log_events = get_system_log("","", $cnt, $off);
			
			if (!$log_events)
				$exit = true;
			else
			{
				
				foreach ($log_events as $log)
				{
					// See if we have access to the object we're talking about
					$event = $log->event;
					$class = $log->object_class;
					$tmp = new $class();
					$object = $tmp->getObjectFromID($log->object_id);
					
					// Exists and we have access to it
					if (is_a($object, $class))
					{
						// See if anything can handle it
						$tam = "";
						
						// test if view exist and if so
						$tam = elgg_view("river/$class/$event", array(
							'performed_by' => get_entity($log->performed_by_guid),
							'log_entry' => $log,
							'object' => $object
						));
						
						if ($tam)
						{
							$river[] = $tam;
							$cnt--;
						}
					}
					
					// Increase offset
					$off++;
				}
			}
						
		} while (
			($cnt > 0) &&
			(!$exit)
		);
		
		return $river;
	}

?>