// just update current value of an option $oListCtrl = CTaskListCtrl::getInstance($arAction['userId']); $oListCtrl->useState($oListState); // just saving reference to $oListState inside $oListCtrl if ($arAction['groupId'] > 0) { $bGroupMode = true; $oListCtrl->setFilterByGroupId((int) $arAction['groupId']); } else { $bGroupMode = false; $oListCtrl->setFilterByGroupId(null); } $oFilter = CTaskFilterCtrl::GetInstance($arAction['userId'], $bGroupMode); $oListCtrl->useAdvancedFilterObject($oFilter); // just saving reference to $oFilter inside $oListCtrl $arFilter = array_merge($oListCtrl->getFilter(), $oListCtrl->getCommonFilter()); $arSqlSearch = CTasks::GetFilter($arFilter, '', array('USER_ID' => $loggedInUserId)); $arSqlSearch[] = " T.ZOMBIE = 'N' "; if ($arAction['operation'] === 'tasks.list::getOriginators()') { $sql = "SELECT T.CREATED_BY AS USER_ID, COUNT(T.ID) AS TASKS_CNT \n\t\t\t\t\t\tFROM b_tasks T \n\t\t\t\t\t\tLEFT JOIN b_tasks_viewed TV ON TV.TASK_ID = T.ID AND TV.USER_ID = " . $loggedInUserId . "\n\t\t\t\t\t\tWHERE " . implode('AND', $arSqlSearch) . " GROUP BY T.CREATED_BY"; } else { if ($arAction['operation'] === 'tasks.list::getResponsibles()') { $sql = "SELECT T.RESPONSIBLE_ID AS USER_ID, COUNT(T.ID) AS TASKS_CNT \n\t\t\t\t\t\tFROM b_tasks T \n\t\t\t\t\t\tLEFT JOIN b_tasks_viewed TV ON TV.TASK_ID = T.ID AND TV.USER_ID = " . $loggedInUserId . "\n\t\t\t\t\t\tWHERE " . implode('AND', $arSqlSearch) . " GROUP BY T.RESPONSIBLE_ID"; } else { throw new Exception('unknown operation: ' . $arAction['operation']); } } global $DB; $arUsers = array(); $rc = $DB->query($sql); while ($ar = $rc->fetch()) { $arUsers[$ar['USER_ID']] = array('USER_ID' => (int) $ar['USER_ID'], 'TASKS_CNT' => (int) $ar['TASKS_CNT']);
private static function GetFieldGrouppedByFilter($column, $arFilter, $loggedInUserId) { CTaskAssert::assert($loggedInUserId && is_array($arFilter)); $arSqlSearch = CTasks::GetFilter($arFilter, '', array('USER_ID' => $loggedInUserId)); $arSqlSearch[] = " T.ZOMBIE = 'N' "; $keysFiltered = CTasks::GetFilteredKeys($arFilter); $bNeedJoinFavoritesTable = in_array('FAVORITE', $keysFiltered, true); $sql = "SELECT T." . $column . " AS USER_ID, COUNT(T.ID) AS TASKS_CNT \n\t\t\tFROM b_tasks T \n\t\t\tLEFT JOIN b_tasks_viewed TV ON TV.TASK_ID = T.ID AND TV.USER_ID = " . $loggedInUserId . "\n\n\t\t\t" . ($bNeedJoinFavoritesTable ? "\n\t\t\t\tLEFT JOIN " . FavoriteTable::getTableName() . " FVT ON FVT.TASK_ID = T.ID and FVT.USER_ID = '" . $loggedInUserId . "'\n\t\t\t\t" : "") . "\n\n\t\t\tWHERE " . implode('AND', $arSqlSearch) . " GROUP BY T." . $column; return $GLOBALS['DB']->query($sql); }
function GetChildrenCount($arFilter, $arParentIDs) { global $DB, $USER; $obUserFieldsSql = new CUserTypeSQL(); $obUserFieldsSql->SetEntity("TASKS_TASK", "T.ID"); $obUserFieldsSql->SetFilter($arFilter); if (!is_array($arFilter)) { $arFilter = array(); } if (!$arParentIDs) { return false; } $arFilter["PARENT_ID"] = $arParentIDs; $userID = is_object($USER) ? intval($USER->GetID()) : 0; unset($arFilter["ONLY_ROOT_TASKS"]); $arSqlSearch = CTasks::GetFilter($arFilter); $arSqlSearch[] = " T.ZOMBIE = 'N' "; $r = $obUserFieldsSql->GetFilter(); if (strlen($r) > 0) { $arSqlSearch[] = "(" . $r . ")"; } $strSql = "\n\t\t\tSELECT\n\t\t\t\tT.PARENT_ID AS PARENT_ID,\n\t\t\t\tCOUNT(T.ID) AS CNT\n\t\t\tFROM\n\t\t\t\tb_tasks T\n\t\t\tINNER JOIN b_user CU ON CU.ID = T.CREATED_BY\n\t\t\tINNER JOIN b_user RU ON RU.ID = T.RESPONSIBLE_ID\n\t\t\tLEFT JOIN\n\t\t\t\tb_tasks_viewed TV ON TV.TASK_ID = T.ID AND TV.USER_ID = " . $userID . "\n\t\t\t" . $obUserFieldsSql->GetJoin("T.ID") . "\n\t\t\t" . (sizeof($arSqlSearch) ? "WHERE " . implode(" AND ", $arSqlSearch) : "") . "\n\t\t\tGROUP BY\n\t\t\t\tT.PARENT_ID\n\t\t"; $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); return $res; }
function GetCompanyStats($arFilter = array()) { global $DB; $arSqlSearch = CTasks::GetFilter($arFilter); if (!array_key_exists('PERIOD', $arFilter)) { $arFilter['PERIOD'] = null; } $strSql = "\n\t\t\tSELECT\n\t\t\t\tCOUNT(DISTINCT T.RESPONSIBLE_ID) AS RESPONSIBLES,\n\t\t\t\tSUM(" . CTaskReport::GetPeriodCondition($arFilter["PERIOD"], "CLOSED_DATE", "T.CLOSED_DATE IS NOT NULL AND T.ADD_IN_REPORT = 'Y' AND (T.MARK = 'P' OR T.MARK = 'N')") . ") AS MARKED_IN_REPORT,\n\t\t\t\tSUM(" . CTaskReport::GetPeriodCondition($arFilter["PERIOD"], "CLOSED_DATE", "T.CLOSED_DATE IS NOT NULL AND T.ADD_IN_REPORT = 'Y' AND T.MARK = 'P'") . ") AS POSITIVE\n\t\t\tFROM\n\t\t\t\tb_tasks T\n\t\t\tINNER JOIN\n\t\t\t\tb_user U ON U.ID = T.RESPONSIBLE_ID\n\t\t\tWHERE\n\t\t\t\tT.ADD_IN_REPORT = 'Y'\n\t\t\tAND\n\t\t\t\tU.ACTIVE = 'Y'\n\t\t\t"; if (count($arSqlSearch) !== 0) { $strSql .= ' AND ' . implode(' AND ', $arSqlSearch); } $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); return $res; }