<?php
namespace AppBundle\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Controller\AcroNetAuthenticatedControllerInterface;
use AppBundle\Service\TimeLogger;
/**
* Controller for the overall timer functionality.
*/
class TimerController extends AbstractController implements AcroNetAuthenticatedControllerInterface
{
/**
* @Route("/", name="timer")
*
* @param Request $request
*
* @return Response
*/
public function formAction(Request $request)
{
return $this->render('timer/timer.html.twig');
}
/**
* @Route("/request/lookup/account", name="timer_account_lookup")
*
* @param Request $request
*
* @return JsonResponse
*/
public function timerLookupAccountAction(Request $request)
{
$searchTerm = $request->request->get('q');
$data = array();
$where = 'a.status = :status';
$repo = $this->getDoctrine()->getRepository('AcroMediaAcroNetBundle:Account', 'ami');
$queryBuilder = $repo->createQueryBuilder('a')
->setParameter(':status', 1);
if ($searchTerm) {
$where .= ' AND LOWER(a.name) LIKE :term';
$queryBuilder->setParameter('term', '%'.strtolower($searchTerm).'%');
}
$query = $queryBuilder->where($where)
->orderBy('a.name', 'ASC')
->getQuery();
$accounts = $query->getResult();
foreach ($accounts as $account) {
$data[] = array(
'value' => $account->getName(),
'id' => $account->getAccountID(),
);
}
$response = new JsonResponse($data);
return $response;
}
/**
* @Route("/request/lookup/project/{accountID}", name="timer_project_lookup")
*
* @param int $accountID
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return JsonResponse
*/
public function timerLookupProjectAction($accountID, Request $request, TimeLogger $timeLogger)
{
$response = new JsonResponse($timeLogger->getProjects($accountID, $request->request->get('q')));
return $response;
}
/**
* @Route("/request/lookup/task/{accountID}/{projectID}", name="timer_task_lookup")
*
* @param int $accountID
* @param int $projectID
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return JsonResponse
*/
public function timerLookupTaskAction($accountID, $projectID, Request $request, TimeLogger $timeLogger)
{
$response = new JsonResponse($timeLogger->getTasks($accountID, $projectID, $request->request->get('q')));
return $response;
}
/**
* @Route("/request/start-entry", name="timer_start_entry")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function timerStartEntry(Request $request, TimeLogger $timeLogger)
{
$entryData = $request->request->get('entry');
$data = $timeLogger->createEntry($entryData);
return $timeLogger->generateResponse($data);
}
/**
* @Route("/request/stop-entry", name="timer_stop_entry")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function timerStopEntry(Request $request, TimeLogger $timeLogger)
{
$data = $timeLogger->stopEntry($request->request->get('entryID'));
$data = array('entryToLog' => $data);
return $timeLogger->generateResponse($data);
}
/**
* @Route("/request/recently-logged", name="timer_recently_logged")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function recentlyLogged(Request $request, TimeLogger $timeLogger)
{
$day = $request->request->get('day');
$recentlyLogged = $timeLogger->getRecentlyLogged($day);
return $timeLogger->generateResponse($recentlyLogged);
}
/**
* @Route("/request/day-queue", name="timer_day_queue")
*
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function dayQueue(TimeLogger $timeLogger)
{
$dayQueue = $timeLogger->getDayQueue();
return $timeLogger->generateResponse($dayQueue);
}
/**
* @Route("/request/day-queue/add", name="timer_day_queue_add")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return null|Response
*/
public function dayQueueAdd(Request $request, TimeLogger $timeLogger)
{
if ($taskID = $request->request->get('taskID')) {
$newEntryData = $timeLogger->addDayQueueItem($taskID);
return $timeLogger->generateResponse($newEntryData);
}
return null;
}
/**
* @Route("/request/day-queue/remove", name="timer_day_queue_remove")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function dayQueueRemove(Request $request, TimeLogger $timeLogger)
{
$removeInfo = $timeLogger->removeDayQueueItem($request->request->get('itemID'));
return $timeLogger->generateResponse($removeInfo);
}
/**
* @Route("/request/day-queue/reorder", name="timer_day_queue_reorder")
*
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function dayQueueReorder(TimeLogger $timeLogger)
{
$timeLogger->reorderDayQueueItems($_POST);
$dayQueue = $timeLogger->getDayQueue();
return $timeLogger->generateResponse($dayQueue);
}
/**
* @Route("/request/current-entry", name="timer_current_entry")
*
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function currentEntry(TimeLogger $timeLogger)
{
$entry = $timeLogger->getCurrentEntry();
$data = $timeLogger->buildJsonEntry($entry);
return $timeLogger->generateResponse($data);
}
/**
* @Route("/request/update-entry"), name="timer_update_entry")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function updateEntry(Request $request, TimeLogger $timeLogger)
{
$entryData = $request->request->get('entry');
return $timeLogger->generateResponse($timeLogger->updateEntry($entryData));
}
/**
* @Route("/request/log-time", name="timer_log_time")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function logTime(Request $request, TimeLogger $timeLogger)
{
$logData = $request->request->get('entryToLog');
$timeLogger->logTime($logData);
return $timeLogger->generateResponse($timeLogger->getRecentlyLogged());
}
/**
* @Route("/request/remove-taskless-time", name="remove_taskless_time")
*
* @param Request $request
* @param TimeLogger $timeLogger
*
* @return Response
*/
public function removeTasklessTime(Request $request, TimeLogger $timeLogger)
{
$result = false;
if ($entryIds = $request->request->get('entryIds')) {
$result = $timeLogger->removeTasklessTime($entryIds);
}
return $timeLogger->generateResponse(array('result' => (bool) $result));
}
}