| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * ownCloud - Office App | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @author Victor Dubiniuk | 
					
						
							|  |  |  |  * @copyright 2013 Victor Dubiniuk victor.dubiniuk@gmail.com | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This file is licensed under the Affero General Public License version 3 or | 
					
						
							|  |  |  |  * later. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace OCA\Office; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Member { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-17 18:32:24 +03:00
										 |  |  | 	const ACTIVITY_THRESHOLD = 60; // 10 Minutes
 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	const MEMBER_STATUS_ACTIVE = 1; | 
					
						
							|  |  |  | 	const MEMBER_STATUS_INACTIVE = 2; | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	public static function add($esId, $displayname, $color){ | 
					
						
							| 
									
										
										
										
											2013-08-10 01:00:25 +03:00
										 |  |  | 		$query = \OCP\DB::prepare('INSERT INTO `*PREFIX*office_member`  (`es_id`, `uid`, `color`, `last_activity`) VALUES (?, ?, ?, ?) '); | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 		$query->execute(array( | 
					
						
							|  |  |  | 			$esId, | 
					
						
							| 
									
										
										
										
											2013-08-09 19:49:30 +03:00
										 |  |  | 			\OCP\User::getUser(), | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 			$color, | 
					
						
							|  |  |  | 			time() | 
					
						
							|  |  |  | 		)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return \OCP\DB::insertid(`*PREFIX*office_member`); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function getMember($id){ | 
					
						
							| 
									
										
										
										
											2013-08-09 20:30:14 +03:00
										 |  |  | 		$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*office_member` WHERE `member_id`= ?'); | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 		$result = $query->execute(array($id)); | 
					
						
							|  |  |  | 		return $result->fetchRow(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function getMembersAsArray($ids){ | 
					
						
							|  |  |  | 		$memberCount = count($ids); | 
					
						
							| 
									
										
										
										
											2013-08-12 19:07:44 +03:00
										 |  |  | 		if (!$memberCount || !is_array($ids)){ | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 			return array(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$placeholders = array_fill(0, $memberCount, '?'); | 
					
						
							|  |  |  | 		$stmt = implode(', ', $placeholders); | 
					
						
							| 
									
										
										
										
											2013-08-09 20:30:14 +03:00
										 |  |  | 		$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*office_member` WHERE `member_id`IN (' . $stmt . ')'); | 
					
						
							| 
									
										
										
										
											2013-08-12 19:07:44 +03:00
										 |  |  | 		$result = $query->execute($ids); | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 		return $result->fetchAll(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-08-12 15:49:15 +03:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	public static function updateMemberActivity($memberId){ | 
					
						
							|  |  |  | 		$query = \OCP\DB::prepare('UPDATE `*PREFIX*office_member`  SET `last_activity`=? WHERE `member_id`=?'); | 
					
						
							|  |  |  | 		$query->execute(array( | 
					
						
							|  |  |  | 			time(), | 
					
						
							|  |  |  | 			$memberId | 
					
						
							|  |  |  | 		)); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	public static function getMembersByEsId($esId, $lastActivity = null){ | 
					
						
							|  |  |  | 		if (is_null($lastActivity)){ | 
					
						
							| 
									
										
										
										
											2013-08-17 18:32:24 +03:00
										 |  |  | 			$activeSince = self::getInactivityPeriod(); | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 		} else { | 
					
						
							|  |  |  | 			$activeSince = $lastActivity; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-17 18:32:24 +03:00
										 |  |  | 		$query = \OCP\DB::prepare('SELECT * FROM `*PREFIX*office_member` WHERE `es_id`= ? and `last_activity` > ?'); | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 		$result = $query->execute(array($esId, $activeSince)); | 
					
						
							|  |  |  | 		return $result->fetchAll(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-08-17 18:32:24 +03:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * Mark memebers as inactive | 
					
						
							|  |  |  | 	 * @param string $esId - session Id | 
					
						
							|  |  |  | 	 * @return array - list of memberId that were marked as inactive | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	public static function cleanSession($esId){ | 
					
						
							|  |  |  | 		$time = self::getInactivityPeriod(); | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-17 18:32:24 +03:00
										 |  |  | 		$query = \OCP\DB::prepare('SELECT `member_id` FROM `*PREFIX*office_member` WHERE `es_id`= ? AND `last_activity`<? AND `status`=?'); | 
					
						
							|  |  |  | 		$result = $query->execute(array( | 
					
						
							|  |  |  | 				$esId, | 
					
						
							|  |  |  | 				$time, | 
					
						
							|  |  |  | 				self::MEMBER_STATUS_ACTIVE | 
					
						
							|  |  |  | 		)); | 
					
						
							|  |  |  | 		$deactivated = $result->fetchAll(); | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		self::deactivate($esId, $time); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return $deactivated; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-08-09 18:55:55 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-17 18:32:24 +03:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Update members to inactive state | 
					
						
							|  |  |  | 	 * @param string $esId | 
					
						
							|  |  |  | 	 * @param timestamp $time | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	protected static function deactivate($esId, $time){ | 
					
						
							|  |  |  | 		$query = \OCP\DB::prepare('UPDATE `*PREFIX*office_member`  SET `status`=? WHERE `es_id`=? AND `last_activity`<?'); | 
					
						
							|  |  |  | 		$query->execute(array( | 
					
						
							|  |  |  | 			self::MEMBER_STATUS_INACTIVE, | 
					
						
							|  |  |  | 			$esId, | 
					
						
							|  |  |  | 			$time | 
					
						
							|  |  |  | 		)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	protected static function getInactivityPeriod(){ | 
					
						
							|  |  |  | 		return time() - self::ACTIVITY_THRESHOLD; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |