/** * @return array */ public function getApiKeyParams() { $qb = $this->em->createQueryBuilder(); $qb->select('u')->from('OjsUserBundle:User', 'u')->where('u.roles LIKE :roles')->setParameter('roles', '%ROLE_SUPER_ADMIN%')->getQuery()->getResult(); $getAdminUsers = $qb->getQuery()->getResult(); if (count($getAdminUsers) < 1) { throw new NotFoundHttpException('Create an admin user'); } /** @var User $getAdminUser */ $getAdminUser = $getAdminUsers[0]; if (empty($getAdminUser->getApiKey())) { $getAdminUser->setApiKey(StringHelper::generateKey()); $this->em->persist($getAdminUser); $this->em->flush(); } return ['apikey' => $getAdminUser->getApiKey()]; }
/** * Action for the list sets verb * @param Request $request * @return Response */ public function listSetsAction(Request $request) { /** @var EntityManager $em */ $em = $this->getDoctrine()->getManager(); $slug = $request->get('slug', false); $this->throw404IfNotFound($slug); $builder = $em->createQueryBuilder(); $builder->select('section')->from('OjsJournalBundle:Section', 'section'); $builder->join('section.journal', 'journal', 'WITH'); $builder->where($builder->expr()->eq('journal.slug', ':slug'))->setParameter('slug', $slug); $fileCache = $this->get('file_cache'); $resumptionToken = $request->get('resumptionToken'); if ($resumptionToken) { $token = $fileCache->fetch($resumptionToken); $currentPage = (int) $token['page']; } else { $currentPage = 1; } $generatedToken = md5(StringHelper::generateKey()); $paginator = $this->get('knp_paginator'); /** @var AbstractPagination $records */ $records = $paginator->paginate($builder->getQuery(), $currentPage, 100); $data = ['records' => $records, 'currentPage' => $currentPage, 'resumptionToken' => $generatedToken, 'isLast' => $records->getTotalItemCount() >= $currentPage * 100]; return $this->response('OjsOAIBundle:Journal:sets.xml.twig', $data); }
/** * @param Request $request * @return Response */ public function listSetsAction(Request $request) { $fileCache = $this->get('file_cache'); $data = []; /** @var \Doctrine\ORM\EntityManager $em */ $em = $this->getDoctrine()->getManager(); $from = $request->get('from', false); $until = $request->get('until', false); $qb = $em->createQueryBuilder(); $qb->select("j")->from("OjsJournalBundle:Journal", 'j'); $qb->andWhere('j.status = ' . JournalStatuses::STATUS_PUBLISHED); if ($from) { $_from = new \DateTime(); $_from->setTimestamp(strtotime($from)); $qb->where($qb->expr()->gte('j.created', ':from'))->setParameter('from', $_from); } if ($until) { $_until = new \DateTime(); $_until->setTimestamp(strtotime($until)); $condition = $qb->expr()->lte('j.created', ':until'); if ($from) { $qb->andWhere($condition); } else { $qb->where($condition); } $qb->setParameter('until', $_until); } $paginator = $this->get('knp_paginator'); $resumptionToken = $request->get('resumptionToken'); if ($resumptionToken) { $currentPage = (int) $fileCache->fetch($resumptionToken); } else { $currentPage = 1; } $sets = $paginator->paginate($qb->getQuery(), $currentPage, 100); $data['records'] = $sets; $key = md5(StringHelper::generateKey()); $fileCache->save($key, $currentPage + 1, 60 * 60 * 24); $data['resumptionToken'] = $key; $data['isLast'] = $sets->getTotalItemCount() >= $currentPage * 100 ? true : false; $data['currentPage'] = $currentPage; $data['metadataPrefix'] = $request->get('metadataPrefix', 'oai_dc'); return $this->response('OjsOAIBundle:Default:sets.xml.twig', $data); }
/** * Generates an API Key */ public function generateApiKey() { $this->apiKey = StringHelper::generateKey(); }