/**
  * Returns a list of project attachments
  *
  * @param int $start Start of the list, default 0
  * @param int $limit Number of users to list, default 10
  * @param string $sort The field to sort by, default "name"
  * @param string $dir The direction to sort (ASC or DESC), default ASC
  * @param string $filter The project id
  */
 public function getProjectAttachments($start = 0, $limit = 10, $sort = "name", $dir = "asc", $filter = "")
 {
     $qb = PartKeepr::getEM()->createQueryBuilder();
     $qb->select("st")->from("PartKeepr\\Project\\ProjectAttachment", "st")->leftJoin('st.project', "fp");
     if ($filter != "") {
         $project = Project::loadById($filter);
         $qb = $qb->where("st.project = :project");
         $qb->setParameter("project", $project);
     }
     if ($limit > -1) {
         $qb->setMaxResults($limit);
         $qb->setFirstResult($start);
     }
     $qb->orderBy("st." . $sort, $dir);
     $query = $qb->getQuery();
     $result = $query->getResult();
     $totalQueryBuilder = PartKeepr::getEM()->createQueryBuilder();
     $totalQueryBuilder->select("COUNT(st.id)")->from("PartKeepr\\Project\\ProjectAttachment", "st");
     if ($filter != "") {
         $totalQueryBuilder = $totalQueryBuilder->where("st.project = :project");
         $totalQueryBuilder->setParameter("project", $project);
     }
     $totalQuery = $totalQueryBuilder->getQuery();
     $aData = array();
     foreach ($result as $item) {
         $aData[] = $item->serialize();
     }
     return array("data" => $aData, "totalCount" => $totalQuery->getSingleScalarResult());
 }
 /**
  * (non-PHPdoc)
  * @see PartKeepr\Service.RestfulService::create()
  */
 public function create()
 {
     $this->requireParameter("tmp_id");
     $this->requireParameter("project_id");
     $tmpImage = TempUploadedFile::loadById($this->getParameter("tmp_id"));
     $file = new ProjectAttachment();
     $project = Project::loadById($this->getParameter("project_id"));
     $file->setProject($project);
     $file->replace($tmpImage->getFilename());
     $file->setOriginalFilename($tmpImage->getOriginalFilename());
     $file->setDescription($this->getParameter("description"));
     PartKeepr::getEM()->persist($file);
     PartKeepr::getEM()->flush();
     return $file->serialize();
 }