public static function GetFilter($arFilter) { global $DB; if (!is_array($arFilter)) { $arFilter = array(); } $arSqlSearch = array(); foreach ($arFilter as $key => $val) { $res = CTasks::MkOperationFilter($key); $key = $res["FIELD"]; $cOperationType = $res["OPERATION"]; $key = strtoupper($key); switch ($key) { case "CREATED_DATE": $arSqlSearch[] = CTasks::FilterCreate("TL." . $key, $DB->CharToDateFunction($val), "date", $bFullJoin, $cOperationType); break; case "USER_ID": case "TASK_ID": $arSqlSearch[] = CTasks::FilterCreate("TL." . $key, $val, "number", $bFullJoin, $cOperationType); break; case "FIELD": $arSqlSearch[] = CTasks::FilterCreate("TL." . $key, $val, "string_equal", $bFullJoin, $cOperationType); break; } } return $arSqlSearch; }
function GetFilter($arFilter) { if (!is_array($arFilter)) { $arFilter = array(); } $arSqlSearch = array(); foreach ($arFilter as $key => $val) { $res = CTasks::MkOperationFilter($key); $key = $res["FIELD"]; $cOperationType = $res["OPERATION"]; $key = strtoupper($key); switch ($key) { case "TASK_ID": case "DEPENDS_ON_ID": $arSqlSearch[] = CTasks::FilterCreate("TD." . $key, $val, "number", $bFullJoin, $cOperationType); break; } } return $arSqlSearch; }
public static function GetFilter($arFilter) { if (!is_array($arFilter)) { $arFilter = array(); } $arSqlSearch = array(); foreach ($arFilter as $key => $val) { $res = CTasks::MkOperationFilter($key); $key = $res["FIELD"]; $cOperationType = $res["OPERATION"]; $key = strtoupper($key); switch ($key) { case "TASK_ID": case "FILE_ID": $arSqlSearch[] = CTasks::FilterCreate("TF." . $key, $val, "number", $bFullJoin, $cOperationType); break; } } // Remove empty strings $arSqlSearchReturn = array(); foreach ($arSqlSearch as &$str) { if ($str !== '') { $arSqlSearchReturn[] = $str; } } unset($str); return $arSqlSearchReturn; }
function Delete($arFilter) { global $DB; $arSqlSearch = array(); foreach ($arFilter as $key => $val) { $res = CTasks::MkOperationFilter($key); $key = $res["FIELD"]; $cOperationType = $res["OPERATION"]; $key = strtoupper($key); switch ($key) { case "TASK_ID": case "USER_ID": $arSqlSearch[] = CTasks::FilterCreate($key, $val, "number", $bFullJoin, $cOperationType); break; case "REMIND_DATE": $arSqlSearch[] = CTasks::FilterCreate($key, $DB->CharToDateFunction($val), "date", $bFullJoin, $cOperationType); break; case 'TYPE': $arSqlSearch[] = CTasks::FilterCreate($key, $val, 'string_equal', $bFullJoin, $cOperationType); break; case 'TRANSPORT': $arSqlSearch[] = CTasks::FilterCreate($key, $val, 'string_equal', $bFullJoin, $cOperationType); break; } } $strSqlSearch = ""; $arSqlSearchCnt = count($arSqlSearch); for ($i = 0; $i < $arSqlSearchCnt; $i++) { if (strlen($arSqlSearch[$i]) > 0) { $strSqlSearch .= " AND " . $arSqlSearch[$i] . " "; } } if (sizeof($arSqlSearch)) { $strSql = "\n\t\t\t\tDELETE FROM\n\t\t\t\t\tb_tasks_reminder\n\t\t\t\tWHERE " . implode(" AND ", $arSqlSearch) . "\n\t\t\t"; return $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } return false; }
function GetFilter($arFilter, $arParams) { if (!is_array($arFilter)) { $arFilter = array(); } $arSqlSearch = array(); foreach ($arFilter as $key => $val) { $res = CTasks::MkOperationFilter($key); $key = $res["FIELD"]; $cOperationType = $res["OPERATION"]; $key = strtoupper($key); switch ($key) { case "CREATED_BY": case "TASK_ID": case "TPARAM_TYPE": case "ID": $arSqlSearch[] = CTasks::FilterCreate("TT." . $key, $val, "number", $bFullJoin, $cOperationType); break; case "RESPONSIBLE": $arSqlSearch[] = CTasks::FilterCreate("TT.RESPONSIBLE_ID", $val, "number", $bFullJoin, $cOperationType); break; case "TITLE": $arSqlSearch[] = CTasks::FilterCreate("TT." . $key, $val, "string", $bFullJoin, $cOperationType); break; case "PRIORITY": $arSqlSearch[] = CTasks::FilterCreate("TT." . $key, $val, "string_equal", $bFullJoin, $cOperationType); break; /* case "TEMPLATE_CHILDREN_COUNT": $arSqlSearch[] = CTasks::FilterCreate($key, $val, "number", $bFullJoin, $cOperationType); break; */ /* case "TEMPLATE_CHILDREN_COUNT": $arSqlSearch[] = CTasks::FilterCreate($key, $val, "number", $bFullJoin, $cOperationType); break; */ case "BASE_TEMPLATE_ID": $parentColumnName = Template\DependencyTable::getPARENTIDColumnName(); $columnName = Template\DependencyTable::getIDColumnName(); $cOperationType = 'I'; // force to "identical" for this field, in any case $val = (string) $val; if ($val === '' || $val === '0') { $val = false; } //$includeSubtree = $arParams['INCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['INCLUDE_TEMPLATE_SUBTREE'] === 'Y'; $excludeSubtree = $arParams['EXCLUDE_TEMPLATE_SUBTREE'] === true || $arParams['EXCLUDE_TEMPLATE_SUBTREE'] === 'Y'; if ($excludeSubtree) { $arSqlSearch[] = "TT.ID NOT IN (SELECT " . $columnName . " FROM " . Template\DependencyTable::getTableName() . " WHERE " . $parentColumnName . " = '" . intval($val) . "')"; } else { $arSqlSearch[] = '(' . ($val ? "TD." . $parentColumnName . " = '" . intval($val) . "'" : "TD." . $parentColumnName . " = '0' OR TD." . $parentColumnName . " IS NULL") . ')'; //$arSqlSearch[] = CTasks::FilterCreate("TD.".Template\DependencyTable::getPARENTIDColumnName(), $val, "number", $bFullJoin, $cOperationType); } break; } } return $arSqlSearch; }
private static function getSqlForTimestamps($key, $val, $userID, $sAliasPrefix, $bGetZombie) { static $ts = null; // some fixed timestamp of "now" (for consistency) if ($ts === null) { $ts = CTasksPerHitOption::getHitTimestamp(); } $bTzWasDisabled = !CTimeZone::enabled(); if ($bTzWasDisabled) { CTimeZone::enable(); } // Adjust UNIX TS to "Bitrix timestamp" $tzOffset = CTimeZone::getOffset(); $val += $tzOffset; $ts += $tzOffset; if ($bTzWasDisabled) { CTimeZone::disable(); } $arSqlSearch = array(); $arFilter = array('::LOGIC' => 'AND'); $key = ltrim($key); $res = CTasks::MkOperationFilter($key); $fieldName = substr($res["FIELD"], 5, -3); // Cutoff prefix "META:" and suffix "_TS" $cOperationType = $res["OPERATION"]; $operationSymbol = substr($key, 0, -1 * strlen($res["FIELD"])); if (substr($cOperationType, 0, 1) !== '#') { switch ($operationSymbol) { case '<': $operationCode = CTaskFilterCtrl::OP_STRICTLY_LESS; break; case '>': $operationCode = CTaskFilterCtrl::OP_STRICTLY_GREATER; break; case '<=': $operationCode = CTaskFilterCtrl::OP_LESS_OR_EQUAL; break; case '>=': $operationCode = CTaskFilterCtrl::OP_GREATER_OR_EQUAL; break; case '!=': $operationCode = CTaskFilterCtrl::OP_NOT_EQUAL; break; case '': case '=': $operationCode = CTaskFilterCtrl::OP_EQUAL; break; default: CTaskAssert::log('Unknown operation code: ' . $operationSymbol . '; $key = ' . $key . '; it will be silently ignored, incorrect results expected', CTaskAssert::ELL_ERROR); return $arSqlSearch; break; } } else { $operationCode = (int) substr($cOperationType, 1); } $date1 = $date2 = $cOperationType1 = $cOperationType2 = null; // Convert cOperationType to format accepted by self::FilterCreate switch ($operationCode) { case CTaskFilterCtrl::OP_EQUAL: case CTaskFilterCtrl::OP_DATE_TODAY: case CTaskFilterCtrl::OP_DATE_YESTERDAY: case CTaskFilterCtrl::OP_DATE_TOMORROW: case CTaskFilterCtrl::OP_DATE_CUR_WEEK: case CTaskFilterCtrl::OP_DATE_PREV_WEEK: case CTaskFilterCtrl::OP_DATE_NEXT_WEEK: case CTaskFilterCtrl::OP_DATE_CUR_MONTH: case CTaskFilterCtrl::OP_DATE_PREV_MONTH: case CTaskFilterCtrl::OP_DATE_NEXT_MONTH: case CTaskFilterCtrl::OP_DATE_NEXT_DAYS: case CTaskFilterCtrl::OP_DATE_LAST_DAYS: $cOperationType1 = '>='; $cOperationType2 = '<='; break; case CTaskFilterCtrl::OP_LESS_OR_EQUAL: $cOperationType1 = '<='; break; case CTaskFilterCtrl::OP_GREATER_OR_EQUAL: $cOperationType1 = '>='; break; case CTaskFilterCtrl::OP_NOT_EQUAL: $cOperationType1 = '<'; $cOperationType2 = '>'; break; case CTaskFilterCtrl::OP_STRICTLY_LESS: $cOperationType1 = '<'; break; case CTaskFilterCtrl::OP_STRICTLY_GREATER: $cOperationType1 = '>'; break; default: CTaskAssert::log('Unknown operation code: ' . $operationCode . '; $key = ' . $key . '; it will be silently ignored, incorrect results expected', CTaskAssert::ELL_ERROR); return $arSqlSearch; break; } // Convert/generate dates $ts1 = $ts2 = null; switch ($operationCode) { case CTaskFilterCtrl::OP_DATE_TODAY: $ts1 = $ts2 = $ts; break; case CTaskFilterCtrl::OP_DATE_YESTERDAY: $ts1 = $ts2 = $ts - 86400; break; case CTaskFilterCtrl::OP_DATE_TOMORROW: $ts1 = $ts2 = $ts + 86400; break; case CTaskFilterCtrl::OP_DATE_CUR_WEEK: $weekDay = date('N'); // numeric representation of the day of the week (1 to 7) $ts1 = $ts - ($weekDay - 1) * 86400; $ts2 = $ts + (7 - $weekDay) * 86400; break; case CTaskFilterCtrl::OP_DATE_PREV_WEEK: $weekDay = date('N'); // numeric representation of the day of the week (1 to 7) $ts1 = $ts - ($weekDay - 1 + 7) * 86400; $ts2 = $ts - $weekDay * 86400; break; case CTaskFilterCtrl::OP_DATE_NEXT_WEEK: $weekDay = date('N'); // numeric representation of the day of the week (1 to 7) $ts1 = $ts + (7 - $weekDay + 1) * 86400; $ts2 = $ts + (7 - $weekDay + 7) * 86400; break; case CTaskFilterCtrl::OP_DATE_CUR_MONTH: $ts1 = mktime(0, 0, 0, date('n', $ts), 1, date('Y', $ts)); $ts2 = mktime(23, 59, 59, date('n', $ts) + 1, 0, date('Y', $ts)); break; case CTaskFilterCtrl::OP_DATE_PREV_MONTH: $ts1 = mktime(0, 0, 0, date('n', $ts) - 1, 1, date('Y', $ts)); $ts2 = mktime(23, 59, 59, date('n', $ts), 0, date('Y', $ts)); break; case CTaskFilterCtrl::OP_DATE_NEXT_MONTH: $ts1 = mktime(0, 0, 0, date('n', $ts) + 1, 1, date('Y', $ts)); $ts2 = mktime(23, 59, 59, date('n', $ts) + 2, 0, date('Y', $ts)); break; case CTaskFilterCtrl::OP_DATE_LAST_DAYS: $ts1 = $ts - (int) $val * 86400; $ts2 = $ts; break; case CTaskFilterCtrl::OP_DATE_NEXT_DAYS: $ts1 = $ts; $ts2 = $ts + (int) $val * 86400; break; case CTaskFilterCtrl::OP_GREATER_OR_EQUAL: case CTaskFilterCtrl::OP_LESS_OR_EQUAL: case CTaskFilterCtrl::OP_STRICTLY_LESS: case CTaskFilterCtrl::OP_STRICTLY_GREATER: $ts1 = $val; break; case CTaskFilterCtrl::OP_EQUAL: $ts1 = mktime(0, 0, 0, date('n', $val), date('j', $val), date('Y', $val)); $ts2 = mktime(23, 59, 59, date('n', $val), date('j', $val), date('Y', $val)); break; case CTaskFilterCtrl::OP_NOT_EQUAL: $ts1 = mktime(0, 0, 0, date('n', $val), date('j', $val), date('Y', $val)); $ts2 = mktime(23, 59, 59, date('n', $val), date('j', $val), date('Y', $val)); break; default: CTaskAssert::log('Unknown operation code: ' . $operationCode . '; $key = ' . $key . '; it will be silently ignored, incorrect results expected', CTaskAssert::ELL_ERROR); return $arSqlSearch; break; } if ($ts1) { $date1 = ConvertTimeStamp(mktime(0, 0, 0, date('n', $ts1), date('j', $ts1), date('Y', $ts1)), 'FULL'); } if ($ts2) { $date2 = ConvertTimeStamp(mktime(23, 59, 59, date('n', $ts2), date('j', $ts2), date('Y', $ts2)), 'FULL'); } if ($cOperationType1 !== null && $date1 !== null) { $arrayKey = $cOperationType1 . $fieldName; while (isset($arFilter[$arrayKey])) { $arrayKey = ' ' . $arrayKey; } $arFilter[$arrayKey] = $date1; } if ($cOperationType2 !== null && $date2 !== null) { $arrayKey = $cOperationType2 . $fieldName; while (isset($arFilter[$arrayKey])) { $arrayKey = ' ' . $arrayKey; } $arFilter[$arrayKey] = $date2; } $arSqlSearch[] = self::GetSqlByFilter($arFilter, $userID, $sAliasPrefix, $bGetZombie); return $arSqlSearch; }
private static function GetFilteredKeys($arFilter) { $result = array(); if (is_array($arFilter)) { foreach ($arFilter as $key => $v) { // Skip meta-key if ($key === '::LOGIC') { continue; } // Skip markers if ($key === '::MARKERS') { continue; } // Subfilter? if (substr($key, 0, 12) === '::SUBFILTER-') { $result = array_merge($result, self::GetFilteredKeys($v)); continue; } $res = CTasks::MkOperationFilter($key); if ((string) $res['FIELD'] != '') { $result[] = $res['FIELD']; } } } return array_unique($result); }