public static function fetchByRoot(Connection $conn, $id, MembershipEntityInterface $root) { if ($root instanceof Area) { $data = $conn->fetchAssoc('SELECT * FROM `' . EdkTables::MESSAGE_TBL . '` WHERE `id` = :id AND `areaId` = :rootId', [':id' => $id, ':rootId' => $root->getId()]); } elseif ($root instanceof Group) { $data = $conn->fetchAssoc('SELECT m.* FROM `' . EdkTables::MESSAGE_TBL . '` m ' . 'INNER JOIN `' . CoreTables::AREA_TBL . '` a ON a.`id` = m.`areaId` ' . 'WHERE m.`id` = :id AND a.`groupId` = :rootId', [':id' => $id, ':rootId' => $root->getId()]); } elseif ($root instanceof Project) { $data = $conn->fetchAssoc('SELECT m.* FROM `' . EdkTables::MESSAGE_TBL . '` m ' . 'INNER JOIN `' . CoreTables::AREA_TBL . '` a ON a.`id` = m.`areaId` ' . 'WHERE m.`id` = :id AND a.`projectId` = :rootId', [':id' => $id, ':rootId' => $root->getId()]); } if (false === $data) { return false; } $item = self::fromArray($data); if ($root instanceof Area) { $item->area = $root; } elseif ($root instanceof Group) { $item->area = Area::fetchByGroup($conn, $data['areaId'], $root); } elseif ($root instanceof Project) { $item->area = Area::fetchByProject($conn, $data['areaId'], $root); } if (!empty($data['responderId'])) { $item->responder = User::fetchByCriteria($conn, QueryClause::clause('u.id = :id', ':id', $data['responderId'])); } return $item; }
public function getItem($id, Group $group) { $this->transaction->requestTransaction(); try { $item = Area::fetchByGroup($this->conn, $id, $group); if (false === $item) { $this->transaction->requestRollback(); throw new ItemNotFoundException('The specified item has not been found.', $id); } return $item; } catch (Exception $exception) { $this->transaction->requestRollback(); throw $exception; } }
public static function fetchByRoot(Connection $conn, $id, MembershipEntityInterface $root) { if ($root instanceof Area) { $data = $conn->fetchAssoc('SELECT * FROM `' . EdkTables::ROUTE_TBL . '` WHERE `areaId` = :areaId AND `id` = :id', [':id' => $id, ':areaId' => $root->getId()]); } elseif ($root instanceof Group) { $data = $conn->fetchAssoc('SELECT r.* ' . 'FROM `' . EdkTables::ROUTE_TBL . '` r ' . 'INNER JOIN `' . CoreTables::AREA_TBL . '` a ON a.`id` = r.`areaId` ' . 'WHERE a.`groupId` = :groupId AND r.`id` = :id', [':id' => $id, ':groupId' => $root->getId()]); } elseif ($root instanceof Project) { $data = $conn->fetchAssoc('SELECT r.* ' . 'FROM `' . EdkTables::ROUTE_TBL . '` r ' . 'INNER JOIN `' . CoreTables::AREA_TBL . '` a ON a.`id` = r.`areaId` ' . 'WHERE a.`projectId` = :projectId AND r.`id` = :id', [':id' => $id, ':projectId' => $root->getId()]); } if (false === $data) { return false; } $item = self::fromArray($data); if ($root instanceof Area) { $item->area = $root; } elseif ($root instanceof Group) { $item->area = Area::fetchByGroup($conn, $data['areaId'], $root); } elseif ($root instanceof Project) { $item->area = Area::fetchByProject($conn, $data['areaId'], $root); } $notes = $conn->fetchAll('SELECT * FROM `' . EdkTables::ROUTE_NOTE_TBL . '` WHERE `routeId` = :routeId', [':routeId' => $item->getId()]); foreach ($notes as $note) { $item->notes[$note['noteType']] = $note['content']; } return $item; }