| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * ownCloud - Documents 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\Documents; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-14 18:38:28 +03:00
										 |  |  | /** | 
					
						
							| 
									
										
										
										
											2014-05-13 23:17:25 +03:00
										 |  |  |  * @method boolean getIsGuest() | 
					
						
							|  |  |  |  * @method string getEsId() | 
					
						
							|  |  |  |  * @method string getToken() | 
					
						
							| 
									
										
										
										
											2014-05-14 19:24:58 +03:00
										 |  |  |  * @method int getStatus() | 
					
						
							| 
									
										
										
										
											2014-05-13 23:17:25 +03:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | class Db_Member extends Db{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const DB_TABLE = '`*PREFIX*documents_member`'; | 
					
						
							| 
									
										
										
										
											2014-04-09 17:48:48 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-05 18:47:06 +03:00
										 |  |  | 	const ACTIVITY_THRESHOLD = 90; // 1.5 Minutes
 | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	const MEMBER_STATUS_ACTIVE = 1; | 
					
						
							|  |  |  | 	const MEMBER_STATUS_INACTIVE = 2; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	protected $tableName  = '`*PREFIX*documents_member`'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-11 00:59:51 +03:00
										 |  |  | 	protected $insertStatement  = 'INSERT INTO `*PREFIX*documents_member` (`es_id`, `uid`, `color`, `last_activity`, `is_guest`, `token`) | 
					
						
							|  |  |  | 			VALUES (?, ?, ?, ?, ?, ?)'; | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	protected $loadStatement = 'SELECT * FROM `*PREFIX*documents_member` WHERE `member_id`= ?'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-09 17:48:48 +03:00
										 |  |  | 	public static function getGuestPostfix(){ | 
					
						
							|  |  |  | 		return '(' . Config::getL10n()->t('guest') . ')'; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 	public function updateActivity($memberId){ | 
					
						
							|  |  |  | 		return $this->execute( | 
					
						
							|  |  |  | 				'UPDATE ' . $this->tableName . ' SET `last_activity`=?, `status`=? WHERE `member_id`=?', | 
					
						
							|  |  |  | 				array( | 
					
						
							|  |  |  | 					time(), | 
					
						
							|  |  |  | 					self::MEMBER_STATUS_ACTIVE, | 
					
						
							|  |  |  | 					$memberId | 
					
						
							|  |  |  | 				) | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2013-10-31 20:24:55 +03:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	public function getActiveCollection($esId){ | 
					
						
							|  |  |  | 		$result = $this->execute(' | 
					
						
							|  |  |  | 			SELECT `es_id`, `member_id` | 
					
						
							|  |  |  | 			FROM ' . self::DB_TABLE . ' | 
					
						
							|  |  |  | 			WHERE `es_id`= ? | 
					
						
							|  |  |  | 				AND `status`=? | 
					
						
							|  |  |  | 			', | 
					
						
							|  |  |  | 			array( | 
					
						
							|  |  |  | 				$esId, | 
					
						
							|  |  |  | 				self::MEMBER_STATUS_ACTIVE | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 		$members = $result->fetchAll(); | 
					
						
							|  |  |  | 		if (!is_array($members)){ | 
					
						
							|  |  |  | 			$members = array(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return $members; | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Mark members as inactive | 
					
						
							|  |  |  | 	 * @param string $esId - session Id | 
					
						
							|  |  |  | 	 * @return array - list of memberId that were marked as inactive | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	public function updateByTimeout($esId){ | 
					
						
							|  |  |  | 		$time = $this->getInactivityPeriod(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$result = $this->execute(' | 
					
						
							|  |  |  | 			SELECT `member_id` | 
					
						
							|  |  |  | 			FROM ' . self::DB_TABLE . ' | 
					
						
							|  |  |  | 			WHERE `es_id`= ? | 
					
						
							|  |  |  | 				AND `last_activity`<? | 
					
						
							|  |  |  | 				AND `status`=? | 
					
						
							|  |  |  | 			', | 
					
						
							|  |  |  | 			array( | 
					
						
							|  |  |  | 				$esId, | 
					
						
							|  |  |  | 				$time, | 
					
						
							|  |  |  | 				self::MEMBER_STATUS_ACTIVE | 
					
						
							|  |  |  | 			) | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$deactivated = $result->fetchAll(); | 
					
						
							|  |  |  | 		if (is_array($deactivated) && count($deactivated)){ | 
					
						
							|  |  |  | 			$deactivated = array_map( | 
					
						
							|  |  |  | 				function($x){ | 
					
						
							|  |  |  | 					return ($x['member_id']); | 
					
						
							|  |  |  | 				}, $deactivated | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			$this->deactivate($deactivated); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			$deactivated = array(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return $deactivated; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * Update members to inactive state | 
					
						
							|  |  |  | 	 * @param array $memberIds | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2013-10-28 20:01:30 +03:00
										 |  |  | 	public function deactivate($memberIds){ | 
					
						
							| 
									
										
										
										
											2013-09-27 18:43:10 +03:00
										 |  |  | 		$stmt = $this->buildInQuery('member_id', $memberIds); | 
					
						
							|  |  |  | 		array_unshift($memberIds, self::MEMBER_STATUS_INACTIVE); | 
					
						
							|  |  |  | 		$this->execute(' | 
					
						
							|  |  |  | 			UPDATE ' . $this->tableName . ' | 
					
						
							|  |  |  | 			SET `status`=? | 
					
						
							|  |  |  | 			WHERE ' . $stmt, | 
					
						
							|  |  |  | 			$memberIds | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	protected function getInactivityPeriod(){ | 
					
						
							|  |  |  | 		return time() - self::ACTIVITY_THRESHOLD; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |