/** * @param integer $fileId * @throws TasksException * @throws CTaskAssertException * * This function is deprecated, it wont work with a new disk-based file attachment mechanism * * @deprecated */ public function removeAttachedFile($fileId) { CTaskAssert::assertLaxIntegers($fileId); CTaskAssert::assert($fileId > 0); if (!$this->isActionAllowed(self::ACTION_EDIT)) { CTaskAssert::log('access denied while trying to remove file: fileId=' . $fileId . ', taskId=' . $this->taskId . ', userId=' . $this->executiveUserId, CTaskAssert::ELL_WARNING); throw new TasksException('', TasksException::TE_ACTION_NOT_ALLOWED); } if (!CTaskFiles::Delete($this->taskId, $fileId)) { throw new TasksException('File #' . $fileId . ' not attached to task #' . $this->taskId, TasksException::TE_FILE_NOT_ATTACHED_TO_TASK); } }
/** * Fetch predefined presets and presets from DB. * * @return array of fetched filter presets. Includes predefined presets. * * @var CDatabase $DB */ protected function fetchFilterPresets() { global $DB; $arActiveStatuses = array(CTasks::METASTATE_VIRGIN_NEW, CTasks::METASTATE_EXPIRED, CTasks::STATE_NEW, CTasks::STATE_PENDING, CTasks::STATE_IN_PROGRESS); if (!$this->bGroupMode) { // Init list with predefined presets $arPresets = array(self::ROOT_PRESET => array('Name' => '/', 'Parent' => null, 'Condition' => null), self::STD_PRESET_ACTIVE_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ACTIVE_MY_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND', 'MEMBER' => $this->userId, '::SUBFILTER-1' => array('::LOGIC' => 'OR', 'STATUS' => $arActiveStatuses, '::SUBFILTER-1' => array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, 'STATUS' => array(CTasks::STATE_DECLINED, CTasks::STATE_SUPPOSEDLY_COMPLETED))))), 'SQL: select count' => "SELECT COUNT(TT.ID) AS CNT\n\t\t\t\t\t\tFROM (\n\t\t\t\t\t\t\tSELECT T.ID\n\t\t\t\t\t\t\tFROM b_tasks T\n\t\t\t\t\t\t\tINNER JOIN b_tasks_member TM on TM.TASK_ID = T.ID\n\t\t\t\t\t\t\tWHERE T.CREATED_BY = {$this->userId}\n\t\t\t\t\t\t\t\tAND T.RESPONSIBLE_ID != {$this->userId}\n\t\t\t\t\t\t\t\tAND TM.USER_ID = {$this->userId}\n\t\t\t\t\t\t\t\tAND T.STATUS != 4\n\t\t\t\t\t\t\t\tAND T.STATUS != 5\n\t\t\t\t\t\t\t\tAND T.ZOMBIE = 'N'\n\n\t\t\t\t\t\t\tUNION \n\n\t\t\t\t\t\t\tSELECT T.ID\n\t\t\t\t\t\t\tFROM b_tasks T\n\t\t\t\t\t\t\tINNER JOIN b_tasks_member TM on TM.TASK_ID = T.ID\n\t\t\t\t\t\t\tWHERE T.RESPONSIBLE_ID = {$this->userId}\n\t\t\t\t\t\t\t\tAND TM.USER_ID = {$this->userId}\n\t\t\t\t\t\t\t\tAND T.STATUS != 4\n\t\t\t\t\t\t\t\tAND T.STATUS != 5\n\t\t\t\t\t\t\t\tAND T.ZOMBIE = 'N'\n\n\t\t\t\t\t\t\tUNION \n\n\t\t\t\t\t\t\tSELECT T.ID\n\t\t\t\t\t\t\tFROM b_tasks T\n\t\t\t\t\t\t\tWHERE T.CREATED_BY = {$this->userId}\n\t\t\t\t\t\t\t\tAND (T.STATUS = 4 OR T.STATUS = 5)\n\t\t\t\t\t\t\t\tAND T.ZOMBIE = 'N'\n\t\t\t\t\t\t) AS TT\n\t\t\t\t\t"), self::STD_PRESET_ACTIVE_I_AM_DOER => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ACTIVE_I_AM_DOER'), 'Parent' => self::STD_PRESET_ACTIVE_MY_TASKS, 'Condition' => serialize(array('::LOGIC' => 'AND', 'DOER' => $this->userId, '::SUBFILTER-1' => array('::LOGIC' => 'OR', 'STATUS' => $arActiveStatuses, '::SUBFILTER-1' => array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, 'STATUS' => CTasks::STATE_DECLINED))))), self::STD_PRESET_ACTIVE_I_AM_RESPONSIBLE => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ACTIVE_I_AM_RESPONSIBLE'), 'Parent' => self::STD_PRESET_ACTIVE_I_AM_DOER, 'Condition' => serialize(array('::LOGIC' => 'AND', 'RESPONSIBLE_ID' => $this->userId, '::SUBFILTER-1' => array('::LOGIC' => 'OR', 'STATUS' => $arActiveStatuses, '::SUBFILTER-1' => array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, 'STATUS' => CTasks::STATE_DECLINED))))), self::STD_PRESET_ACTIVE_I_AM_ACCOMPLICE => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ACTIVE_I_AM_ACCOMPLICE'), 'Parent' => self::STD_PRESET_ACTIVE_I_AM_DOER, 'Condition' => serialize(array('::LOGIC' => 'AND', 'ACCOMPLICE' => $this->userId, '::SUBFILTER-1' => array('::LOGIC' => 'OR', 'STATUS' => $arActiveStatuses, '::SUBFILTER-1' => array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, 'STATUS' => CTasks::STATE_DECLINED))))), self::STD_PRESET_ACTIVE_I_AM_ORIGINATOR => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ACTIVE_I_AM_ORIGINATOR'), 'Parent' => self::STD_PRESET_ACTIVE_MY_TASKS, 'Condition' => serialize(array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, '::SUBFILTER-1' => array('::LOGIC' => 'OR', 'STATUS' => $arActiveStatuses, '::SUBFILTER-1' => array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, 'STATUS' => array(CTasks::STATE_DECLINED, CTasks::STATE_SUPPOSEDLY_COMPLETED)))))), self::STD_PRESET_ACTIVE_I_AM_AUDITOR => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ACTIVE_I_AM_AUDITOR'), 'Parent' => self::STD_PRESET_ACTIVE_MY_TASKS, 'Condition' => serialize(array('::LOGIC' => 'AND', 'AUDITOR' => $this->userId, '::SUBFILTER-1' => array('::LOGIC' => 'OR', 'STATUS' => $arActiveStatuses, '::SUBFILTER-1' => array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, 'STATUS' => CTasks::STATE_DECLINED))))), self::STD_PRESET_DEFERRED_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_DEFERRED_MY_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND', 'MEMBER' => $this->userId, 'STATUS' => CTasks::STATE_DEFERRED))), self::STD_PRESET_COMPLETED_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_COMPLETED_MY_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND', 'MEMBER' => $this->userId, 'STATUS' => array(CTasks::STATE_SUPPOSEDLY_COMPLETED, CTasks::STATE_COMPLETED)))), self::STD_PRESET_ALL_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ALL_MY_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND', 'MEMBER' => $this->userId)))); } else { // Init list with predefined presets $arPresets = array(self::ROOT_PRESET => array('Name' => '/', 'Parent' => null, 'Condition' => null), self::STD_PRESET_ACTIVE_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ACTIVE_GROUP_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND', '::SUBFILTER-1' => array('::LOGIC' => 'OR', 'STATUS' => $arActiveStatuses, '::SUBFILTER-1' => array('::LOGIC' => 'AND', 'CREATED_BY' => $this->userId, 'STATUS' => CTasks::STATE_DECLINED))))), self::STD_PRESET_DEFERRED_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_DEFERRED_MY_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND', 'STATUS' => CTasks::STATE_DEFERRED))), self::STD_PRESET_COMPLETED_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_COMPLETED_MY_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND', 'STATUS' => array(CTasks::STATE_SUPPOSEDLY_COMPLETED, CTasks::STATE_COMPLETED)))), self::STD_PRESET_ALL_MY_TASKS => array('Name' => GetMessage('TASKS_FILTER_PRESET_STD_PRESET_ALL_MY_TASKS'), 'Parent' => self::ROOT_PRESET, 'Condition' => serialize(array('::LOGIC' => 'AND')))); } $arPresetsFromDb = array(); $bNeedFetchFromDatabase = true; $cacheDir = $obCache = null; if (defined('BX_COMP_MANAGED_CACHE')) { $obCache = new CPHPCache(); $lifeTime = CTasksTools::CACHE_TTL_UNLIM; $cacheDir = '/tasks/filter_presets/' . $this->loggedInUserId % 300; $cacheId = 'tasks_filters_presets_' . $this->loggedInUserId; if ($obCache->InitCache($lifeTime, $cacheId, $cacheDir)) { $arPresetsFromDb = $obCache->GetVars(); $bNeedFetchFromDatabase = false; } } if ($bNeedFetchFromDatabase) { $dbRes = $DB->query("SELECT ID, NAME, PARENT, SERIALIZED_FILTER\n\t\t\t\tFROM b_tasks_filters\n\t\t\t\tWHERE USER_ID = " . (int) $this->loggedInUserId . "\n\t\t\t\tORDER BY NAME, ID"); if ($dbRes) { while ($arData = $dbRes->fetch()) { $arPresetsFromDb[(int) $arData['ID']] = array('Name' => $arData['NAME'], 'Parent' => (int) $arData['PARENT'], 'Condition' => $arData['SERIALIZED_FILTER']); } } else { CTaskAssert::log('DB error', CTaskAssert::ELL_ERROR, true); } if (defined('BX_COMP_MANAGED_CACHE') && $obCache->StartDataCache()) { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($cacheDir); $CACHE_MANAGER->RegisterTag('tasks_filters_presets_' . $this->loggedInUserId); $CACHE_MANAGER->EndTagCache(); $obCache->EndDataCache($arPresetsFromDb); } } // Merge with predefined presets list foreach ($arPresetsFromDb as $presetId => $presetData) { $arPresets[$presetId] = $presetData; } return $arPresets; }
} if ($arData['TO_VALUE']) { // Don't format time, if it's 00:00 if (date('H:i', $arData['TO_VALUE']) == '00:00') { $strDateTo = FormatDate(CDatabase::DateFormatToPHP(FORMAT_DATE), $arData['TO_VALUE']); } else { $strDateTo = FormatDate(CDatabase::DateFormatToPHP(FORMAT_DATETIME), $arData['TO_VALUE']); } } $arResult = array('td1' => '<span class="task-log-date">' . FormatDateFromDB($arData['CREATED_DATE']) . '</span>', 'td2' => '<a class="task-log-author" target="_top" href="' . CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_USER_PROFILE'], array('user_id' => $authorUserId)) . '">' . htmlspecialcharsbx(tasksFormatNameShort($arCurUserData["NAME"], $arCurUserData["LAST_NAME"], $arCurUserData["LOGIN"], $arCurUserData["SECOND_NAME"], $arParams["NAME_TEMPLATE"])) . '</a>', 'td3' => '<span class="task-log-where">' . GetMessage("TASKS_LOG_DEADLINE") . '</span>', 'td4' => '<span class="task-log-what">' . $strDateFrom . '<span class="task-log-arrow">→</span>' . $strDateTo . '</span>'); header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); echo CUtil::PhpToJsObject($arResult); } } elseif ($action === 'remove_file') { try { CTaskAssert::log('remove_file: fileId=' . $_POST['fileId'] . ', taskId=' . $_POST['taskId'] . ', userId=' . $loggedInUserId, CTaskAssert::ELL_INFO); CTaskAssert::assert(isset($_POST['fileId'], $_POST['taskId'])); $oTaskItem = new CTaskItem($_POST['taskId'], $loggedInUserId); $oTaskItem->removeAttachedFile($_POST['fileId']); echo 'Success'; } catch (Exception $e) { echo 'Error occured'; CTaskAssert::logWarning('Unable to remove_file: fileId=' . $_POST['fileId'] . ', taskId=' . $_POST['taskId'] . ', userId=' . $loggedInUserId); } } elseif ($action === 'render_task_detail_part') { if (isset($_POST['BLOCK'])) { switch ($_POST['BLOCK']) { case 'buttons': case 'right_sidebar': if ($_POST['IS_IFRAME'] === 'true' || $_POST['IS_IFRAME'] === true || $_POST['IS_IFRAME'] === 'Y') { $isIframe = true;
usort($arUsers, create_function('$a,$b', 'return strnatcasecmp($a["LAST_NAME"], $b["LAST_NAME"]);')); } else { usort($arUsers, create_function('$a,$b', 'return strnatcasecmp($a["NAME_FORMATTED"], $b["NAME_FORMATTED"]);')); } $arCurOperationResult = array('returnValue' => $arUsers); break; default: throw new Exception('Unknown operation requested. File: ' . __FILE__ . '; action: ' . $arAction['operation']); break; } $arCurOperationResult['requestedOperationName'] = $arAction['operation']; $arOperationsResults[$operationIndex] = $arCurOperationResult; $operationIndex++; if ($breakExecution) { break; } } if (!$breakExecution) { $status = 'success'; } else { $status = 'error occured'; } } catch (Exception $e) { CTaskAssert::log('Exception. Current file: ' . __FILE__ . '; exception file: ' . $e->GetFile() . '; line: ' . $e->GetLine() . '; message: ' . $e->GetMessage(), CTaskAssert::ELL_ERROR); $status = 'error occured'; } $APPLICATION->RestartBuffer(); header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); echo CUtil::PhpToJsObject(array('status' => $status, 'repliesCount' => count($arOperationsResults), 'data' => $arOperationsResults, 'batchId' => $batchId)); CMain::FinalActions(); // to make events work on bitrix24
private static function getOrderSql($by, $order, $default_order, $nullable = true) { global $DBType; static $dbtype = null; if ($dbtype === null) { $dbtype = strtolower($DBType); } switch ($dbtype) { case 'mysql': return self::getOrderSql_mysql($by, $order, $default_order, $nullable = true); break; case 'mssql': return self::getOrderSql_mssql($by, $order, $default_order, $nullable = true); break; case 'oracle': return self::getOrderSql_oracle($by, $order, $default_order, $nullable = true); break; default: CTaskAssert::log('unknown DB type: ' . $dbtype, CTaskAssert::ELL_ERROR); return ' '; break; } }
public static function getRandFunction() { global $DBType; $dbtype = strtolower($DBType); switch ($dbtype) { case 'mysql': return ' RAND(' . rand(0, 1000000) . ') '; break; case 'mssql': return ' newid() '; break; case 'oracle': return ' DBMS_RANDOM.RANDOM() '; break; default: CTaskAssert::log('unknown DB type: ' . $dbtype, CTaskAssert::ELL_ERROR); return ' ID '; break; } }