/
UserCollection.class.php
124 lines (109 loc) · 2.85 KB
/
UserCollection.class.php
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
/*---------------------------------------------------------------------------
UserCollection 2011 Olivine Labs
-----------------------------------------------------------------------------
Namespace : Database\Collections\MongoDB
Class : UserCollection
- Class containing methods to access users in MongoDB
---------------------------------------------------------------------------*/
namespace Database\Collections\MongoDB;
class UserCollection extends Collection implements \Database\Collections\UserInterface
{
const FIELD_NAME = 'UserName';
const FIELD_PASSWORD = 'Password';
const FIELD_EMAIL = 'Email';
const FIELD_DOMAIN = 'Domain';
const FIELD_PROFILE = 'Profile';
const FIELD_SCORE = 'Score';
const FIELD_TOKEN = 'Token';
const FIELD_USERID = 'UserId';
protected function fill(\Models\Model $model, $array)
{
parent::fill($model, $array);
$user = $model;
$user->Profile = ($user->Profile)?(object)$user->Profile:new \Models\Profile();
}
public function LoadByName(\Models\User $user)
{
$data = $this->Collection->findOne(array(
self::FIELD_NAME => $user->UserName
));
if($data)
{
self::fill($user, $data);
return true;
}
else
{
return false;
}
}
public function LoadByEmail(\Models\User $user)
{
$data = $this->Collection->findOne(array(
self::FIELD_EMAIL => $user->Email
));
if($data)
{
self::fill($user, $data);
return true;
}
else
{
return false;
}
}
public function LoadByToken(\Models\User $user)
{
$data = $this->Collection->findOne(array(
self::FIELD_TOKEN => $user->Token,
self::FIELD_USERID => $user->UserId
));
if($data)
{
self::fill($user, $data);
return true;
}
else
{
return false;
}
}
public function ChangeScore(\Models\User $user)
{
try
{
$searchArray = array(self::FIELD_ID => new \MongoId($user->Id));
$incArray = array('$inc'=>array(self::FIELD_SCORE=>$user->Score));
$this->Collection->update($searchArray, $incArray);
}
catch(\Exception $e)
{
return false;
}
return true;
}
public function ListBy(\Models\Search $search)
{
$fields = array();
$data = null;
$data = $this->Collection->find(array(), $fields);
if($search->SortField !== null)
$data = $data->sort(array($search->SortField => $search->SortDirection));
if($search->Limit != 0)
$data = $data->limit($search->Limit)->skip($search->Skip);
$result = array('Count'=>0, 'Items'=>array());
if($data)
{
$result['Count'] = $data->count();
foreach($data as $item)
{
$anItem = new \Models\Item();
self::fill($anItem, $item);
$result['Users'][] = $anItem;
}
}
return $result;
}
}
?>