ManagerRepository::Load()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 16
rs 9.9666
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
namespace PhpDraft\Domain\Repositories;
3
4
use Silex\Application;
5
use PhpDraft\Domain\Entities\Manager;
6
7
class ManagerRepository {
8
  private $app;
9
10
  public function __construct(Application $app) {
11
    $this->app = $app;
12
  }
13
14
  public function Load($id) {
15
    $manager = new Manager();
16
17
    $load_stmt = $this->app['db']->prepare("SELECT * FROM managers WHERE manager_id = ? LIMIT 1");
18
    $load_stmt->setFetchMode(\PDO::FETCH_INTO, $manager);
19
    $load_stmt->bindParam(1, $id);
20
21
    if (!$load_stmt->execute()) {
22
          throw new \Exception(sprintf('Manager "%s" does not exist.', $manager));
23
    }
24
25
    if (!$load_stmt->fetch()) {
26
          throw new \Exception(sprintf('Manager "%s" does not exist.', $id));
27
    }
28
29
    return $manager;
30
  }
31
32
  public function GetPublicManagers($draft_id) {
33
    $managers = array();
34
35
    $managers_stmt = $this->app['db']->prepare("SELECT * FROM managers WHERE draft_id = ? ORDER BY draft_order");
36
    $managers_stmt->setFetchMode(\PDO::FETCH_CLASS, '\PhpDraft\Domain\Entities\Manager');
37
38
    $managers_stmt->bindParam(1, $draft_id);
39
40
    if (!$managers_stmt->execute()) {
41
      throw new \Exception("Unable to load managers for draft #$draft_id");
42
    }
43
44
    while ($manager = $managers_stmt->fetch()) {
45
      $managers[] = $manager;
46
    }
47
48
    return $managers;
49
  }
50
51
  public function GetManagersByDraftOrder($draft_id, $descending = false) {
52
    $managers = array();
53
54
    if ($descending) {
55
      $managers_stmt = $this->app['db']->prepare("SELECT * FROM managers WHERE draft_id = ? ORDER BY draft_order DESC");
56
    } else {
57
      $managers_stmt = $this->app['db']->prepare("SELECT * FROM managers WHERE draft_id = ? ORDER BY draft_order");  
58
    }
59
60
    $managers_stmt->bindParam(1, $draft_id);
61
62
    $managers_stmt->setFetchMode(\PDO::FETCH_CLASS, '\PhpDraft\Domain\Entities\Manager');
63
64
    if (!$managers_stmt->execute()) {
65
      throw new \Exception("Unable to load managers for draft #$draft_id");
66
    }
67
68
    while ($manager = $managers_stmt->fetch()) {
69
      $managers[] = $manager;
70
    }
71
72
    return $managers;
73
  }
74
75
  //Ensure a draft has the minimum number of managers - 2
76
  public function DraftHasManagers($draft_id) {
77
    $manager_stmt = $this->app['db']->prepare("SELECT manager_name FROM managers WHERE draft_id = ?");
78
    $manager_stmt->bindParam(1, $draft_id);
79
80
    if (!$manager_stmt->execute()) {
81
      throw new \Exception("Draft id '%s' is invalid", $draft_id);
82
    }
83
84
    return $manager_stmt->rowCount() > 1;
85
  }
86
87
  public function GetNumberOfCurrentManagers($draft_id) {
88
    $manager_stmt = $this->app['db']->prepare("SELECT COUNT(manager_id) FROM managers WHERE draft_id = ?");
89
    $manager_stmt->bindParam(1, $draft_id);
90
91
    if (!$manager_stmt->execute()) {
92
      throw new \Exception("Unable to get number of managers for draft #$draft_id");
93
    }
94
95
    return (int)$manager_stmt->fetchColumn(0);
96
  }
97
98
  public function NameIsUnique($name, $draft_id, $id = null) {
99
    if (!empty($id)) {
100
      $name_stmt = $this->app['db']->prepare("SELECT manager_name FROM managers WHERE manager_name LIKE ? AND draft_id = ? AND manager_id <> ?");
101
      $name_stmt->bindParam(1, $name);
102
      $name_stmt->bindParam(2, $draft_id);
103
      $name_stmt->bindParam(3, $id);
104
    } else {
105
      $name_stmt = $this->app['db']->prepare("SELECT manager_name FROM managers WHERE manager_name LIKE ? AND draft_id = ?");
106
      $name_stmt->bindParam(1, $name);
107
      $name_stmt->bindParam(2, $draft_id);
108
    }
109
110
    if (!$name_stmt->execute()) {
111
      throw new \Exception("Manager name '$name' is invalid");
112
    }
113
114
    return $name_stmt->rowCount() == 0;
115
  }
116
117
  public function ManagerExists($id, $draft_id) {
118
    $exists_stmt = $this->app['db']->prepare("SELECT COUNT(manager_id) FROM managers WHERE manager_id = ? AND draft_id = ?");
119
    $exists_stmt->bindParam(1, $id);
120
    $exists_stmt->bindParam(2, $draft_id);
121
122
    if (!$exists_stmt->execute()) {
123
      throw new \Exception("Manager ID $id is invalid");
124
    }
125
126
    return $exists_stmt->fetchColumn(0) == 1;
127
  }
128
129
  public function Create(Manager $manager) {
130
    $save_stmt = $this->app['db']->prepare("INSERT INTO managers (manager_id, draft_id, manager_name, draft_order) VALUES (NULL, ?, ?, ?)");
131
    $save_stmt->bindParam(1, $manager->draft_id);
132
    $save_stmt->bindParam(2, $manager->manager_name);
133
    $save_stmt->bindParam(3, $new_draft_order);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $new_draft_order seems to be never defined.
Loading history...
134
135
    $new_draft_order = $this->_GetLowestDraftorder($manager->draft_id) + 1;
0 ignored issues
show
Unused Code introduced by
The assignment to $new_draft_order is dead and can be removed.
Loading history...
136
137
    if (!$save_stmt->execute()) {
138
      throw new \Exception("Unable to create new manager: " . $this->app['db']->errorInfo());
139
    }
140
141
    $manager->manager_id = (int)$this->app['db']->lastInsertId();
142
143
    return $manager;
144
  }
145
146
  public function CreateMany($draft_id, $managersArray) {
147
    $save_stmt = $this->app['db']->prepare("INSERT INTO managers (manager_id, draft_id, manager_name, draft_order) 
148
      VALUES 
149
      (NULL, :draft_id, :manager_name, :draft_order)");
150
    $newDraftOrder = $this->_GetLowestDraftorder($draft_id) + 1;
151
    $newManagers = array();
152
153
    foreach ($managersArray as $newManager) {
154
      $save_stmt->bindValue(':draft_id', $newManager->draft_id);
155
      $save_stmt->bindValue(':manager_name', $newManager->manager_name);
156
      $save_stmt->bindValue(':draft_order', $newDraftOrder++);
157
158
      if (!$save_stmt->execute()) {
159
        throw new \Exception("Unable to save managers for $draft_id");
160
      }
161
162
      $newManager->manager_id = (int)$this->app['db']->lastInsertId();
163
      $newManagers[] = $newManager;
164
    }
165
166
    return $newManagers;
167
  }
168
169
  public function Update(Manager $manager) {
170
    $update_stmt = $this->app['db']->prepare("UPDATE managers SET manager_name = ? WHERE manager_id = ?");
171
    $update_stmt->bindParam(1, $manager->manager_name);
172
    $update_stmt->bindParam(2, $manager->manager_id);
173
174
    if (!$update_stmt->execute()) {
175
      throw new \Exception("Unable to update manager #$manager->manager_id");
176
    }
177
178
    return $manager;
179
  }
180
181
  public function ReorderManagers($managersIdArray) {
182
    $reorder_stmt = $this->app['db']->prepare("UPDATE managers SET draft_order = :draft_order WHERE manager_id = :manager_id");
183
184
    $newDraftOrder = 1;
185
186
    foreach ($managersIdArray as $manager_id) {
187
      $reorder_stmt->bindValue(':draft_order', $newDraftOrder++);
188
      $reorder_stmt->bindValue(':manager_id', $manager_id);
189
190
      if (!$reorder_stmt->execute()) {
191
        throw new \Exception("Unable to update manager order for manager #$manager_id");
192
      }
193
    }
194
195
    return;
196
  }
197
198
  public function DeleteManager($manager_id) {
199
    $delete_stmt = $this->app['db']->prepare("DELETE FROM managers WHERE manager_id = ?");
200
    $delete_stmt->bindParam(1, $manager_id);
201
202
    if (!$delete_stmt->execute()) {
203
      throw new \Exception("Unable to delete manager $manager_id.");
204
    }
205
206
    return;
207
  }
208
209
  public function DeleteAllManagers($draft_id) {
210
    $delete_stmt = $this->app['db']->prepare("DELETE FROM managers WHERE draft_id = ?");
211
    $delete_stmt->bindParam(1, $draft_id);
212
213
    if (!$delete_stmt->execute()) {
214
      throw new \Exception("Unable to delete managers for draft $draft_id.");
215
    }
216
217
    return;
218
  }
219
220
  /**
221
   * In order to get the lowest current draft number for this draft.
222
   * @return int Lowest draft order for the given draft
223
   */
224
  private function _GetLowestDraftorder($draft_id) {
225
    $stmt = $this->app['db']->prepare("SELECT draft_order FROM managers WHERE draft_id = ? ORDER BY draft_order DESC LIMIT 1");
226
    $stmt->bindParam(1, $draft_id);
227
228
    if (!$stmt->execute()) {
229
      throw new \Exception("Unable to get lowest manager draft order.");
230
    }
231
232
    //If there are no managers, the lowest order is 0 since we'll be adding 1 to it.
233
    if ($stmt->rowCount() == 0) {
234
      return 0;
235
    }
236
237
    if (!$row = $stmt->fetch()) {
238
      throw new \Exception("Unable to get lowest manager draft order.");
239
    }
240
241
    return (int)$row['draft_order'];
242
  }
243
}