} if (count($arUserIDs) > 0) { $arUserIDs = array_unique($arUserIDs); $dbUsers = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => implode('|', $arUserIDs), 'ACTIVE' => 'Y')); while ($arUser = $dbUsers->Fetch()) { $name = CUser::FormatName(CSite::GetNameFormat(false), $arUser); foreach ($res['REPORTS'] as &$rep) { foreach ($rep as &$arReport) { if ($arReport['USER_ID'] == $arUser['ID']) { $arReport['USER_NAME'] = $name; } } } } } $dbRes = CTimeManReportDaily::GetList(array('ID' => 'DESC'), array('ENTRY_ID' => $arInfo['INFO']['ID'])); if ($arRes = $dbRes->Fetch()) { // $arRes['ACTIVE'], $arRes['MARK']; $res['REPORT'] = nl2br(htmlspecialcharsEx($arRes['REPORT'])); if ($res['INFO']['TASKS_ENABLED']) { $res['INFO']['TASKS'] = unserialize($arRes['TASKS']); } else { unset($res['INFO']['TASKS']); } if ($res['INFO']['CALENDAR_ENABLED']) { $res['INFO']['EVENTS'] = unserialize($arRes['EVENTS']); } else { unset($res['INFO']['EVENTS']); } } $res['NEIGHBOURS'] = CTimeManEntry::GetNeighbours($arInfo['INFO']['ID'], $arInfo['INFO']['USER_ID'], !!$_REQUEST['slider_type']);
public function GetReportData($force = false) { $arResult = array("REPORT_INFO" => array(), "REPORT_DATA" => array()); $date = $arResult["REPORT_INFO"] = $this->GetReportInfo(); if ($date["IS_REPORT_DAY"] == "N") { return $arResult; } elseif ($date["IS_REPORT_DAY"] == "Y") { if ($date["IS_DELAY"] == "Y" && MakeTimeStamp($date["DELAY_TIME"], TM_FULL_FORMAT) < time()) { $date["IS_DELAY"] = "N"; } if (($date["IS_DELAY"] == "Y" || $date["SHOW_REPORT_FORM"] == "N") && !$force) { return $arResult; } } $datefomat = CSite::GetDateFormat("SHORT", SITE_ID); $USER_ID = $this->USER_ID; $arManagers = CTimeMan::GetUserManagers($USER_ID); $arManagers[] = $USER_ID; $user_url = COption::GetOptionString('intranet', 'path_user', '/company/personal/user/#USER_ID#/', SITE_ID); $dbManagers = CUser::GetList($by = 'ID', $order = 'ASC', array('ID' => implode('|', $arManagers))); $arCurrentUserManagers = array(); $arCurrentUser = array(); while ($manager = $dbManagers->GetNext()) { $manager['PHOTO'] = $manager['PERSONAL_PHOTO'] > 0 ? CIntranetUtils::InitImage($manager['PERSONAL_PHOTO'], 32, 0, BX_RESIZE_IMAGE_EXACT) : array(); $userData = array('ID' => $manager['ID'], 'LOGIN' => $manager['LOGIN'], 'NAME' => CUser::FormatName(CSite::GetNameFormat(false), $manager, true, false), 'URL' => str_replace(array('#ID#', '#USER_ID#'), $manager['ID'], $user_url), 'WORK_POSITION' => $manager['WORK_POSITION'], 'PHOTO' => $manager['PHOTO']['CACHE']['src']); if ($userData["ID"] == $this->USER_ID) { $arCurrentUser = $userData; } else { $arCurrentUserManagers[] = $userData; } } if (count($arCurrentUserManagers) == 0) { $arCurrentUserManagers[] = $arCurrentUser; } $arInfo = CTimeMan::GetRuntimeInfo(true); $dbReports = CTimeManReport::GetList(array('ID' => 'ASC'), array('ENTRY_ID' => $arInfo["ID"], 'REPORT_TYPE' => 'REPORT')); if ($Report = $dbReports->Fetch()) { $RTReport = $Report["REPORT"]; } $dbReport = CTimeManReportFull::GetList(array("DATE_FROM" => "DESC"), array("USER_ID" => $USER_ID, "ACTIVE" => "N"), array(), array("nTopCount" => 1)); if ($arReport = $dbReport->Fetch()) { $arInfo["REPORT_DATE_FROM"] = MakeTimeStamp($arReport["DATE_FROM"], $datefomat); $arInfo["REPORT_DATE_TO"] = MakeTimeStamp($arReport["DATE_TO"], $datefomat); //$arInfo["TASKS"] = unserialize($arReport["TASKS"]); $arInfo["REPORT"] = $arReport["REPORT"]; $arInfo["PLANS"] = $arReport["PLANS"]; if ($arReport["FILES"]) { $arInfo["FILES"] = unserialize($arReport["FILES"]); } $arInfo["REPORT_ID"] = $arReport["ID"]; if ($arInfo["REPORT_DATE_FROM"] != $arInfo["REPORT_DATE_TO"]) { $arInfo['DATE_TEXT'] = FormatDate('j F', $arInfo["REPORT_DATE_FROM"]) . " - " . FormatDate('j F', $arInfo["REPORT_DATE_TO"]); } else { $arInfo['DATE_TEXT'] = FormatDate('j F', $arInfo["REPORT_DATE_TO"]); } } else { if (isset($_SESSION['report_files']) && is_array($_SESSION['report_files'])) { $arInfo["FILES"] = $_SESSION['report_files']; } $arInfo["REPORT_DATE_FROM"] = MakeTimeStamp($date["DATE_FROM"], TM_SHORT_FORMAT); $arInfo["REPORT_DATE_TO"] = MakeTimeStamp($date["DATE_TO"], TM_SHORT_FORMAT); } $date_to = $date["DATE_TO"] ? $date["DATE_TO"] : $arReport["DATE_TO"]; $date_to = MakeTimeStamp($date_to, CSite::GetDateFormat("SHORT", SITE_ID)); $today = CTimeMan::RemoveHoursTS(time()); if ($date_to < $today) { $arInfo["TASKS"] = array(); $arInfo["EVENTS"] = array(); } $arLastTasks = array(); $arFilter = array(">=REPORT_DATE" => $date["DATE_FROM"] ? $date["DATE_FROM"] : $arReport["DATE_FROM"], "<=REPORT_DATE" => $date["DATE_TO"] ? $date["DATE_TO"] : $arReport["DATE_TO"], "USER_ID" => $USER_ID); $arTaskIDs = array(); $arEventIDs = array(); if (is_array($arInfo['PLANNER'])) { $arInfo = array_merge($arInfo, $arInfo['PLANNER']['DATA']); unset($arInfo['PLANNER']); } if (is_array($arInfo["TASKS"])) { foreach ($arInfo["TASKS"] as $task) { $arTaskIDs[] = $task["ID"]; } } if (is_array($arInfo["EVENTS"])) { foreach ($arInfo["EVENTS"] as $event) { $arEventIDs[] = $event["ID"]; } } $res = CTimeManReportDaily::GetList(array(), $arFilter); while ($day = $res->Fetch()) { $arDayTasks = unserialize($day["TASKS"]); $arDayEvents = unserialize($day["EVENTS"]); if (is_array($arDayTasks)) { foreach ($arDayTasks as $task) { if (!in_array($task["ID"], $arTaskIDs)) { $arInfo["TASKS"][] = $task; $arTaskIDs[] = $task["ID"]; } else { foreach ($arInfo["TASKS"] as $key => $cur_task) { if ($cur_task["ID"] == $task["ID"]) { $arInfo["TASKS"][$key]["TIME"] += $task["TIME"]; } } } } } if (is_array($arDayEvents)) { foreach ($arDayEvents as $event) { if (!in_array($event["ID"], $arEventIDs)) { $arInfo["EVENTS"][] = $event; $arEventIDs[] = $event["ID"]; } } } if (strlen($day["REPORT"]) > 0 && !$arInfo["REPORT_ID"]) { $day["REPORT"] = nl2br($day["REPORT"]); $arInfo["REPORT"] .= "<b>" . $day["REPORT_DATE"] . "</b><br>" . $day["REPORT"] . "<br>"; } } if ($RTReport && !$arInfo["REPORT_ID"]) { $arInfo["REPORT"] .= "<b>" . ConvertTimeStamp(time(), "SHORT") . "</b><br>" . nl2br($RTReport); } if (is_array($arInfo['EVENTS'])) { foreach ($arInfo['EVENTS'] as $key => $arEvent) { if ($arEvent['STATUS'] && $arEvent['STATUS'] != 'Y') { unset($arInfo['EVENTS'][$key]); } } $arInfo['EVENTS'] = array_values($arInfo['EVENTS']); } if (!$arInfo["REPORT_ID"]) { if ($arInfo["REPORT_DATE_FROM"] != $arInfo["REPORT_DATE_TO"]) { $arInfo['DATE_TEXT'] = FormatDate('j F', $arInfo["REPORT_DATE_FROM"]) . " - " . FormatDate('j F', $arInfo["REPORT_DATE_TO"]); } else { $arInfo['DATE_TEXT'] = FormatDate('j F', $arInfo["REPORT_DATE_TO"]); } } $arResult["REPORT_DATA"] = array('FROM' => $arCurrentUser, 'TO' => array_values($arCurrentUserManagers), 'INFO' => $arInfo, 'REPORT' => $arInfo["REPORT"], 'PLANS' => $arInfo["PLANS"], 'REPORT_ID' => $arInfo["REPORT_ID"] ? $arInfo["REPORT_ID"] : ""); return $arResult; }
public static function Approve($ID, $check_rights = true) { if ($check_rights) { $hasAccess = false; $arAccessUsers = CTimeMan::GetAccess(); if (count($arAccessUsers['WRITE']) > 0) { $bCanEditAll = in_array('*', $arAccessUsers['WRITE']); $dbRes = CTimeManEntry::GetList(array(), array('ID' => $ID), false, false, array('*')); $arRes = $dbRes->Fetch(); if ($arRes) { $hasAccess = $bCanEditAll || in_array($arRes['USER_ID'], $arAccessUsers['WRITE']); } } if (!$hasAccess) { $GLOBALS['APPLICATION']->ThrowException('Access denied'); return false; } } if (CTimeManEntry::Update($ID, array('ACTIVE' => 'Y'))) { CTimeManReport::Approve($ID); CTimeManReportDaily::SetActive($ID); CTimeManNotify::SendMessage($ID, 'U'); return true; } return false; }
public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array()) { global $DB, $USER_FIELD_MANAGER; $TABLE = 'b_timeman_report_daily R'; $obUserFieldsSql = new CUserTypeSQL(); $obUserFieldsSql->SetEntity("USER", "R.USER_ID"); $obUserFieldsSql->SetSelect($arSelectFields); $obUserFieldsSql->SetFilter($arFilter); $obUserFieldsSql->SetOrder($arOrder); $join_user = "******"; $arFields = array("ID" => array("FIELD" => "R.ID", "TYPE" => "int"), "TIMESTAMP_X" => array("FIELD" => "R.TIMESTAMP_X", "TYPE" => "datetime"), "ACTIVE" => array("FIELD" => "R.ACTIVE", "TYPE" => "string"), "USER_ID" => array("FIELD" => "R.USER_ID", "TYPE" => "int"), "ENTRY_ID" => array("FIELD" => "R.ENTRY_ID", "TYPE" => "int"), "REPORT_DATE" => array("FIELD" => "R.REPORT_DATE", "TYPE" => "date"), "TASKS" => array("FIELD" => "R.TASKS", "TYPE" => "string"), "EVENTS" => array("FIELD" => "R.EVENTS", "TYPE" => "string"), "REPORT" => array("FIELD" => "R.REPORT", "TYPE" => "string"), "MARK" => array("FIELD" => "R.MARK", "TYPE" => "int"), "USER_LOGIN" => array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => $join_user), "USER_NAME" => array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => $join_user), "USER_LAST_NAME" => array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => $join_user), "USER_SECOND_NAME" => array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => $join_user), "USER_EMAIL" => array("FIELD" => "U.EMAIL", "TYPE" => "string", "FROM" => $join_user), "USER_ACTIVE" => array("FIELD" => "U.ACTIVE", "TYPE" => "char", "FROM" => $join_user)); if (in_array("*", $arSelectFields)) { $arSelectFields = array_keys($arFields); } elseif (count($arSelectFields) <= 0) { foreach ($arFields as $key => $fld) { if (!$fld['FROM']) { $arSelectFields[] = $key; } } } $arSqls = CTimeManReportDaily::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql); $r = $obUserFieldsSql->GetFilter(); if (strlen($r) > 0) { $strSqlUFFilter = " (" . $r . ") "; } if ($obUserFieldsSql->GetDistinct()) { $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", " DISTINCT ", $arSqls["SELECT"]); } else { $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]); } $strSql = "\nSELECT\n\t" . $arSqls["SELECT"] . " " . "\n\t" . $obUserFieldsSql->GetSelect() . " " . "\nFROM\n\t" . $TABLE . "\n\t" . $arSqls["FROM"] . " " . "\n\t" . $obUserFieldsSql->GetJoin("E.USER_ID") . " " . "\n"; if (strlen($arSqls["WHERE"]) > 0) { $strSql .= "WHERE " . $arSqls["WHERE"] . " "; } if (strlen($strSqlUFFilter) > 0) { $strSql .= strlen($arSqls["WHERE"]) > 0 ? ' AND ' : ' WHERE '; $strSql .= $strSqlUFFilter; } if (strlen($arSqls["GROUPBY"]) > 0) { $strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " "; } if (is_array($arGroupBy) && count($arGroupBy) == 0) { $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $arRes = $dbRes->Fetch(); if ($arRes) { return $arRes["CNT"]; } else { return false; } } if (strlen($arSqls["ORDERBY"]) > 0) { $strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " "; } if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) <= 0) { $strSql_tmp = "\nSELECT COUNT('x') as CNT\nFROM\n\t" . $TABLE . "\n\t" . $arSqls["FROM"] . "\n\t" . $obUserFieldsSql->GetJoin("E.USER_ID") . "\n"; if (strlen($arSqls["WHERE"]) > 0) { $strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " "; } if (strlen($strSqlUFFilter) > 0) { $strSql_tmp .= strlen($arSqls["WHERE"]) > 0 ? ' AND ' : ' WHERE '; $strSql_tmp .= $strSqlUFFilter; } if (strlen($arSqls["GROUPBY"]) > 0) { $strSql_tmp .= "GROUP BY " . $arSqls["GROUPBY"] . " "; } $dbRes = $DB->Query($strSql_tmp, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $cnt = 0; if (strlen($arSqls["GROUPBY"]) <= 0) { $arRes = $dbRes->Fetch(); if ($arRes) { $cnt = $arRes["CNT"]; } } else { $cnt = $dbRes->SelectedRowsCount(); } $dbRes = new CDBResult(); $dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("USER")); $dbRes->NavQuery($strSql, $cnt, $arNavStartParams); } else { if (is_array($arNavStartParams) && IntVal($arNavStartParams["nTopCount"]) > 0) { $strSql .= "LIMIT " . $arNavStartParams["nTopCount"]; } $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("USER")); } return $dbRes; }
public function ReopenDay($bSkipCheck = false, $site_id = SITE_ID) { $this->SITE_ID = $site_id; if (($last_entry = $this->_GetLastData(true)) && $this->OpenAction($bSkipCheck) === 'REOPEN') { $arFields = array('DATE_FINISH' => false, 'TIME_FINISH' => false, 'DURATION' => 0, 'PAUSED' => 'N', 'ACTIVE' => $this->_ReopenGetActivity($last_entry['ID']) ? 'Y' : 'N'); $ts_finish = MakeTimeStamp($last_entry['DATE_FINISH']) - CTimeZone::GetOffset(); $leak = time() - $ts_finish; if ($leak > BX_TIMEMAN_ALLOWED_TIME_DELTA) { $arFields['TIME_LEAKS_ADD'] = $leak; } if (CTimeManEntry::Update($last_entry['ID'], $arFields)) { CTimeManReport::Reopen($last_entry['ID']); CTimeManReportDaily::Reopen($last_entry['ID']); if ($leak > BX_TIMEMAN_ALLOWED_TIME_DELTA) { $_SESSION['BX_TIMEMAN_LAST_PAUSE_' . $this->USER_ID] = array('DATE_START' => $ts_finish, 'DATE_FINISH' => $ts_finish + $leak); CTimeManReport::Add(array('ENTRY_ID' => $last_entry['ID'], 'USER_ID' => $last_entry['USER_ID'], 'ACTIVE' => 'Y', 'REPORT_TYPE' => 'REOPEN', 'REPORT' => 'REOPEN;' . date('c') . ';Entry was reopened.')); } return $this->_GetLastData(true); } } return false; }