- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/provider/taskprovider.php
- Класс: BitrixTasksProviderTaskProvider
- Вызов: TaskProvider::makeArSqlOrder
private function makeArSqlOrder(): self
{
foreach ($this->arOrder as $by => $order)
{
$needle = null;
$by = strtolower($by);
$order = strtolower($order);
if ($by === 'deadline')
{
if ( ! in_array($order, array('asc', 'desc', 'asc,nulls', 'desc,nulls'), true) )
$order = 'asc,nulls';
}
else
{
if ($order !== 'asc')
$order = 'desc';
}
switch ($by)
{
case 'id':
$this->arSqlOrder[] = " ID ".$order." ";
break;
case 'title':
$this->arSqlOrder[] = " TITLE ".$order." ";
$needle = 'TITLE';
break;
case 'time_spent_in_logs':
$this->arSqlOrder[] = " TIME_SPENT_IN_LOGS ".$order." ";
$needle = 'TIME_SPENT_IN_LOGS';
break;
case 'date_start':
$this->arSqlOrder[] = " T.DATE_START ".$order." ";
$needle = 'DATE_START';
break;
case 'created_date':
$this->arSqlOrder[] = " T.CREATED_DATE ".$order." ";
$needle = 'CREATED_DATE';
break;
case 'changed_date':
$this->arSqlOrder[] = " T.CHANGED_DATE ".$order." ";
$needle = 'CHANGED_DATE';
break;
case 'closed_date':
$this->arSqlOrder[] = " T.CLOSED_DATE ".$order." ";
$needle = 'CLOSED_DATE';
break;
case 'activity_date':
$this->arSqlOrder[] = " T.ACTIVITY_DATE ".$order." ";
$needle = 'ACTIVITY_DATE';
break;
case 'start_date_plan':
$this->arSqlOrder[] = " T.START_DATE_PLAN ".$order." ";
$needle = 'START_DATE_PLAN';
break;
case 'end_date_plan':
$this->arSqlOrder[] = " T.END_DATE_PLAN ".$order." ";
$needle = 'END_DATE_PLAN';
break;
case 'deadline':
$orderClause = $this->getOrderSql(
'T.DEADLINE',
$order,
$default_order = 'asc,nulls',
$nullable = true
);
$needle = 'DEADLINE_ORIG';
if ( !is_array($orderClause) )
$this->arSqlOrder[] = $orderClause;
else // we have to add select field in order to correctly sort
{
// COLUMN ALIAS COLUMN EXPRESSION
$this->arFields[$orderClause[1]] = $orderClause[0];
if ( ! in_array($orderClause[1], $this->arSelect) )
$this->arSelect[] = $orderClause[1];
$this->arSqlOrder[] = $orderClause[2]; // order expression
}
break;
case 'status':
// $arSqlOrder[] = " STATUS ".$order." ";
// $needle = 'STATUS';
break;
case 'real_status':
$this->arSqlOrder[] = " REAL_STATUS ".$order." ";
$needle = 'REAL_STATUS';
break;
case 'status_complete':
$this->arSqlOrder[] = " STATUS_COMPLETE ".$order." ";
$needle = 'STATUS_COMPLETE';
break;
case 'priority':
$this->arSqlOrder[] = " PRIORITY ".$order." ";
$needle = 'PRIORITY';
break;
case 'mark':
$this->arSqlOrder[] = " MARK ".$order." ";
$needle = 'MARK';
break;
case 'originator_name':
case 'created_by':
case 'created_by_last_name':
$this->arSqlOrder[] = " CREATED_BY_LAST_NAME ".$order." ";
$needle = 'CREATED_BY_LAST_NAME';
break;
case 'responsible_name':
case 'responsible_id':
case 'responsible_last_name':
$this->arSqlOrder[] = " RESPONSIBLE_LAST_NAME ".$order." ";
$needle = 'RESPONSIBLE_LAST_NAME';
break;
case 'group_id':
$this->arSqlOrder[] = " GROUP_ID ".$order." ";
$needle = 'GROUP_ID';
break;
case 'time_estimate':
$this->arSqlOrder[] = " TIME_ESTIMATE ".$order." ";
$needle = 'TIME_ESTIMATE';
break;
case 'allow_change_deadline':
$this->arSqlOrder[] = " ALLOW_CHANGE_DEADLINE ".$order." ";
$needle = 'ALLOW_CHANGE_DEADLINE';
break;
case 'allow_time_tracking':
$this->arSqlOrder[] = " ALLOW_TIME_TRACKING ".$order." ";
$needle = 'ALLOW_TIME_TRACKING';
break;
case 'match_work_time':
$this->arSqlOrder[] = " MATCH_WORK_TIME ".$order." ";
$needle = 'MATCH_WORK_TIME';
break;
case 'favorite':
$this->arSqlOrder[] = " FAVORITE ".$order." ";
$needle = 'FAVORITE';
break;
case 'sorting':
$asc = stripos($order, "desc") === false;
$this->arSqlOrder = array_merge($this->arSqlOrder, $this->getSortingOrderBy($asc));
$needle = "SORTING";
break;
case 'message_id':
$this->arSqlOrder[] = " MESSAGE_ID " . $order . " ";
$needle = 'MESSAGE_ID';
break;
case 'is_pinned':
$this->arSqlOrder[] = " IS_PINNED " . $order . " ";
$needle = 'IS_PINNED';
break;
case 'is_pinned_in_group':
$this->arSqlOrder[] = " IS_PINNED_IN_GROUP " . $order . " ";
$needle = 'IS_PINNED_IN_GROUP';
break;
case 'scrum_items_sort':
$this->arSqlOrder[] = " BTSI.SORT " . $order . " ";
break;
default:
if (substr($by, 0, 3) === 'uf_')
{
if ($s = $this->obUserFieldsSql->GetOrder($by))
$this->arSqlOrder[$by] = " ".$s." ".$order." ";
}
else
CTaskAssert::logWarning('[0x9a92cf7d] invalid sort by field requested: ' . $by);
break;
}
if (
($needle !== null)
&& ( ! in_array($needle, $this->arSelect) )
)
{
$this->arSelect[] = $needle;
}
}
return $this;
}