Filter refactoring

This commit is contained in:
Frederic Guillot
2016-04-09 22:42:17 -04:00
parent 42813d702d
commit 11858be4e8
101 changed files with 3235 additions and 2841 deletions

View File

@@ -0,0 +1,112 @@
<?php
namespace Kanboard\Helper;
use Kanboard\Core\Base;
use Kanboard\Core\Filter\QueryBuilder;
use Kanboard\Filter\TaskDueDateRangeFilter;
use Kanboard\Formatter\SubtaskTimeTrackingCalendarFormatter;
use Kanboard\Formatter\TaskCalendarFormatter;
/**
* Calendar Helper
*
* @package helper
* @author Frederic Guillot
*/
class CalendarHelper extends Base
{
/**
* Get formatted calendar task due events
*
* @access public
* @param QueryBuilder $queryBuilder
* @param string $start
* @param string $end
* @return array
*/
public function getTaskDateDueEvents(QueryBuilder $queryBuilder, $start, $end)
{
$formatter = new TaskCalendarFormatter($this->container);
$formatter->setFullDay();
$formatter->setColumns('date_due');
return $queryBuilder
->withFilter(new TaskDueDateRangeFilter(array($start, $end)))
->format($formatter);
}
/**
* Get formatted calendar task events
*
* @access public
* @param QueryBuilder $queryBuilder
* @param string $start
* @param string $end
* @return array
*/
public function getTaskEvents(QueryBuilder $queryBuilder, $start, $end)
{
$startColumn = $this->config->get('calendar_project_tasks', 'date_started');
$queryBuilder->getQuery()->addCondition($this->getCalendarCondition(
$this->dateParser->getTimestampFromIsoFormat($start),
$this->dateParser->getTimestampFromIsoFormat($end),
$startColumn,
'date_due'
));
$formatter = new TaskCalendarFormatter($this->container);
$formatter->setColumns($startColumn, 'date_due');
return $queryBuilder->format($formatter);
}
/**
* Get formatted calendar subtask time tracking events
*
* @access public
* @param integer $user_id
* @param string $start
* @param string $end
* @return array
*/
public function getSubtaskTimeTrackingEvents($user_id, $start, $end)
{
$formatter = new SubtaskTimeTrackingCalendarFormatter($this->container);
return $formatter
->withQuery($this->subtaskTimeTracking->getUserQuery($user_id)
->addCondition($this->getCalendarCondition(
$this->dateParser->getTimestampFromIsoFormat($start),
$this->dateParser->getTimestampFromIsoFormat($end),
'start',
'end'
))
)
->format();
}
/**
* Build SQL condition for a given time range
*
* @access public
* @param string $start_time Start timestamp
* @param string $end_time End timestamp
* @param string $start_column Start column name
* @param string $end_column End column name
* @return string
*/
public function getCalendarCondition($start_time, $end_time, $start_column, $end_column)
{
$start_column = $this->db->escapeIdentifier($start_column);
$end_column = $this->db->escapeIdentifier($end_column);
$conditions = array(
"($start_column >= '$start_time' AND $start_column <= '$end_time')",
"($start_column <= '$start_time' AND $end_column >= '$start_time')",
"($start_column <= '$start_time' AND ($end_column = '0' OR $end_column IS NULL))",
);
return $start_column.' IS NOT NULL AND '.$start_column.' > 0 AND ('.implode(' OR ', $conditions).')';
}
}

38
app/Helper/ICalHelper.php Normal file
View File

@@ -0,0 +1,38 @@
<?php
namespace Kanboard\Helper;
use Kanboard\Core\Base;
use Kanboard\Core\Filter\QueryBuilder;
use Kanboard\Filter\TaskDueDateRangeFilter;
use Kanboard\Formatter\TaskICalFormatter;
use Eluceo\iCal\Component\Calendar as iCalendar;
/**
* ICal Helper
*
* @package helper
* @author Frederic Guillot
*/
class ICalHelper extends Base
{
/**
* Get formatted calendar task due events
*
* @access public
* @param QueryBuilder $queryBuilder
* @param iCalendar $calendar
* @param string $start
* @param string $end
*/
public function addTaskDateDueEvents(QueryBuilder $queryBuilder, iCalendar $calendar, $start, $end)
{
$queryBuilder->withFilter(new TaskDueDateRangeFilter(array($start, $end)));
$formatter = new TaskICalFormatter($this->container);
$formatter->setColumns('date_due');
$formatter->setCalendar($calendar);
$formatter->withQuery($queryBuilder->getQuery());
$formatter->addFullDayEvents();
}
}