Example #1
0
 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;
 }
Example #2
0
 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;
 }
Example #3
0
 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;
 }
Example #4
0
 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;
 }
Example #5
0
 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;
 }
Example #6
0
 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;
 }
Example #7
0
 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);
 }