private function FixDateByHoliday($DATE_FROM = false, $DATE_TO = false)
 {
     $arResult = array("NEED_TO_RECALC" => false, "DO_NOT_SHOW_THE_FORM" => false);
     //$DATE_TO_INC = ConvertTimeStampForReport(strtotime('+1 day', MakeTimeStamp($DATE_TO,$this->TimeShort)),"SHORT");
     // $DATE_TO_INC = ConvertTimeStampForReport(strtotime('+1 day', MakeTimeStamp($DATE_TO,TM_SHORT_FORMAT)),"SHORT");
     // $DATE_FROM = ConvertTimeStampForReport(MakeTimeStamp($DATE_FROM, TM_SHORT_FORMAT),"SHORT");
     $DATE_TO_INC = ConvertTimeStamp(strtotime('+1 day', MakeTimeStamp($DATE_TO, TM_SHORT_FORMAT)), "SHORT");
     $DATE_FROM = ConvertTimeStamp(MakeTimeStamp($DATE_FROM, TM_SHORT_FORMAT), "SHORT");
     // if($DATE_TO_INC == $DATE_FROM)
     // {
     // 	$DATE_TO_INC = ConvertTimeStamp(strtotime('+2 day', $ts_from),"SHORT");
     // }
     //was the work day is open between $DATE_FROM and $DATE_TO?
     $dbRes = CTimeManEntry::GetList(array('ID' => 'ASC'), array('USER_ID' => $this->USER_ID, '>=DATE_START' => $DATE_FROM, '<DATE_START' => $DATE_TO_INC), false, false, array("ID"));
     if (!$dbRes->Fetch()) {
         //the work day was NOT open between $DATE_FROM and $DATE_TO...hmm, holidays?
         //let's try to find first open work day after holidays
         $dbRes = CTimeManEntry::GetList(array('ID' => 'ASC'), array('USER_ID' => $this->USER_ID, '>DATE_START' => $DATE_FROM), false, false, array("ID", "DATE_START"));
         if ($res = $dbRes->Fetch()) {
             //we've found first open work day after holidays, now we should rewrite last report date
             $FWorkDayDateTS = MakeTimeStamp($res['DATE_START'], $this->TimeFull);
             $LastDate = ConvertTimeStampForReport(strtotime('-1 day', $FWorkDayDateTS), "SHORT");
             //if we set the same value we will fall into the endless recursion
             if ($LastDate != ConvertTimeStampForReport($this->GetLastDate(), "SHORT")) {
                 $this->SetLastDate($this->USER_ID, $LastDate);
                 $arResult["NEED_TO_RECALC"] = true;
             }
         } else {
             //we not found the first open workday after holidays, it's mean that the holidays are not over yet and we can't show the report form
             $arResult["DO_NOT_SHOW_THE_FORM"] = true;
         }
     }
     return $arResult;
 }
Example #2
0
                     $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']);
                     ob_start();
                     $APPLICATION->IncludeComponent('bitrix:timeman.topic.reviews', '', array('ENTRY_ID' => $arInfo['INFO']['ID']), null, array('HIDE_ICONS' => 'Y'));
                     $res['COMMENTS'] = trim(ob_get_contents());
                     ob_end_clean();
                 }
             }
         }
         /**************************************************************************/
         break;
 }
 if (!$res) {
     if ($ex = $APPLICATION->GetException()) {
         $error = "{error: '" . CUtil::JSEscape($ex->GetString()) . "', error_id:'" . CUtil::JSEscape($ex->GetId()) . "'}";
     }
 }
Example #3
0
 public static function AddCommentToIM($arFields)
 {
     if (CModule::IncludeModule("im") && intval($arFields["USER_ID"]) > 0 && intval($arFields["ENTRY_ID"]) > 0) {
         $date_text = "";
         $dbEntry = CTimeManEntry::GetList(array(), array("ID" => $arFields["ENTRY_ID"]));
         if ($arEntry = $dbEntry->Fetch()) {
             $date_text = FormatDate("j F", MakeTimeStamp($arEntry["DATE_START"], CSite::GetDateFormat("FULL", SITE_ID)));
             $arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "FROM_USER_ID" => $arFields["USER_ID"], "NOTIFY_TYPE" => IM_NOTIFY_FROM, "NOTIFY_MODULE" => "timeman", "NOTIFY_EVENT" => "entry_comment", "NOTIFY_TAG" => "TIMEMAN|ENTRY|" . $arFields["ENTRY_ID"]);
             $arUserIDToSend = array($arEntry["USER_ID"]);
             $gender_suffix = "";
             $dbUser = CUser::GetByID($arFields["USER_ID"]);
             if ($arUser = $dbUser->Fetch()) {
                 switch ($arUser["PERSONAL_GENDER"]) {
                     case "M":
                         $gender_suffix = "_M";
                         break;
                     case "F":
                         $gender_suffix = "_F";
                         break;
                     default:
                         $gender_suffix = "";
                 }
             }
             $arManagers = CTimeMan::GetUserManagers($arEntry["USER_ID"]);
             if (is_array($arManagers)) {
                 $arUserIDToSend = array_merge($arUserIDToSend, $arManagers);
             }
             $reports_page = COption::GetOptionString("timeman", "TIMEMAN_REPORT_PATH", "/company/timeman.php");
             $arUnFollowers = array();
             $rsUnFollower = CSocNetLogFollow::GetList(array("USER_ID" => $arUserIDToSend, "CODE" => "L" . $arFields["LOG_ID"], "TYPE" => "N"), array("USER_ID"));
             while ($arUnFollower = $rsUnFollower->Fetch()) {
                 $arUnFollowers[] = $arUnFollower["USER_ID"];
             }
             $arUserIDToSend = array_diff($arUserIDToSend, $arUnFollowers);
             foreach ($arUserIDToSend as $user_id) {
                 if ($arFields["USER_ID"] == $user_id) {
                     continue;
                 }
                 $arMessageFields["TO_USER_ID"] = $user_id;
                 $arTmp = CSocNetLogTools::ProcessPath(array("REPORTS_PAGE" => $reports_page), $user_id);
                 $sender_type = $arEntry["USER_ID"] == $user_id ? "1" : ($arEntry["USER_ID"] == $arFields["USER_ID"] ? "2" : "3");
                 $arMessageFields["NOTIFY_MESSAGE"] = GetMessage("TIMEMAN_ENTRY_IM_COMMENT_" . $sender_type . $gender_suffix, array("#period#" => "<a href=\"" . $arTmp["URLS"]["REPORTS_PAGE"] . "\" class=\"bx-notifier-item-action\">" . htmlspecialcharsbx($date_text) . "</a>"));
                 $arMessageFields["NOTIFY_MESSAGE_OUT"] = GetMessage("TIMEMAN_ENTRY_IM_COMMENT_" . $sender_type . $gender_suffix, array("#period#" => htmlspecialcharsbx($date_text))) . " (" . $arTmp["SERVER_NAME"] . $arTmp["URLS"]["REPORTS_PAGE"] . ")#BR##BR#" . $arFields["MESSAGE"];
                 CIMNotify::Add($arMessageFields);
             }
         }
     }
 }
 private function _getUsersData(&$arUserIDs)
 {
     $arResult = array();
     $arFilter = $this->__getFilter();
     if (!$this->bShowAll) {
         $arActiveUsers = array();
         $dbRes = CTimeManEntry::GetList(array('USER_ID' => 'ASC'), $arFilter, array('USER_ID'), false, array('USER_ID'));
         while ($arRes = $dbRes->GetNext()) {
             $arActiveUsers[] = $arRes['USER_ID'];
         }
         if (!$this->bCanReadAll) {
             $this->arAccessUsers['READ'] = array_intersect($this->arAccessUsers['READ'], $arActiveUsers);
         } else {
             $this->arAccessUsers['READ'] = $arActiveUsers;
         }
         $this->bCanReadAll = false;
         if (count($this->arAccessUsers['READ']) <= 0) {
             return $arResult;
         }
     }
     $arUserIDs = CIntranetUtils::GetEmployeesForSorting($this->page, $this->amount, $this->department, $this->bCanReadAll ? false : $this->arAccessUsers['READ']);
     $arUsers = array();
     foreach ($arUserIDs as $ar) {
         $arUsers = array_merge($arUsers, $ar);
     }
     $arFilter['USER_ID'] = $arUsers;
     if ($this->bShowAll) {
         $dbRes = CUser::GetList($by = 'LAST_NAME', $order = 'asc', array('ID' => implode('|', $arUsers), 'ACTIVE' => 'Y'), array('SELECT' => array('*', 'UF_DEPARTMENT')));
         while ($arRes = $dbRes->GetNext()) {
             $arResult[$arRes['ID']] = $this->__getUserRow($arRes);
         }
     }
     $dbRes = CTimeManEntry::GetList(array('USER_LAST_NAME' => 'ASC', 'DATE_START' => 'ASC'), $arFilter, false, false, array('*', 'UF_DEPARTMENT', 'ACTIVATED'));
     $arEntriesMap = array();
     while ($arRes = $dbRes->GetNext()) {
         if (!$arResult[$arRes['USER_ID']]) {
             $arResult[$arRes['USER_ID']] = $this->__getUserRow($arRes, 'USER_');
         } elseif ($arEntriesMap[$arRes['ID']]) {
             continue;
         }
         $ts_start = MakeTimeStamp($arRes['DATE_START']);
         $arEntry = array('ID' => $arRes['ID'], 'USER_ID' => $arRes['USER_ID'], 'DAY' => date('j', $ts_start), 'ACTIVE' => $arRes['ACTIVE'] == 'Y', 'PAUSED' => $arRes['PAUSED'] == 'Y', 'ACTIVATED' => $arRes['ACTIVATED'] == 'Y', 'DATE_START' => MakeTimeStamp($arRes['DATE_START']) - CTimeZone::GetOffset(), 'DATE_FINISH' => $arRes['DATE_FINISH'] ? MakeTimeStamp($arRes['DATE_FINISH']) - CTimeZone::GetOffset() : '', 'TIME_START' => $arRes['TIME_START'], 'TIME_FINISH' => $arRes['TIME_FINISH'], 'DURATION' => $arRes['DURATION'], 'TIME_LEAKS' => $arRes['TIME_LEAKS'], 'CAN_EDIT' => $this->bCanEditAll || in_array($arRes['USER_ID'], $this->arAccessUsers['WRITE']));
         if ($arRes['DATE_FINISH'] && $arRes['PAUSED'] !== 'Y') {
             if ($arRes['ACTIVE'] == 'Y') {
                 $arResult[$arRes['USER_ID']]['TOTAL'] += $arRes['DURATION'];
                 $arResult[$arRes['USER_ID']]['TOTAL_DAYS']++;
                 $arSettings = $arResult[$arRes['USER_ID']]['SETTINGS'];
                 if (!$arSettings['UF_TM_FREE'] && ($arSettings['UF_TM_MAX_START'] < $arEntry['TIME_START'] || $arSettings['UF_TM_MIN_FINISH'] > $arEntry['TIME_FINISH'] || $arSettings['UF_TM_MIN_DURATION'] > $arEntry['DURATION'])) {
                     $arResult[$arRes['USER_ID']]['TOTAL_VIOLATIONS']++;
                 }
             } else {
                 $arResult[$arRes['USER_ID']]['TOTAL_INACTIVE']++;
             }
         }
         $arEntriesMap[$arRes['ID']] = true;
         $arResult[$arRes['USER_ID']]['ENTRIES'][] = $arEntry;
     }
     return $arResult;
 }
Example #5
0
 public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     global $DB, $USER_FIELD_MANAGER;
     $obUserFieldsSql = new CUserTypeSQL();
     $obUserFieldsSql->SetEntity("USER", "E.USER_ID");
     $obUserFieldsSql->SetSelect($arSelectFields);
     $obUserFieldsSql->SetFilter($arFilter);
     $obUserFieldsSql->SetOrder($arOrder);
     $join_user = "******";
     $arFields = array("ID" => array("FIELD" => "E.ID", "TYPE" => "int"), "TIMESTAMP_X" => array("FIELD" => "E.TIMESTAMP_X", "TYPE" => "datetime"), "USER_ID" => array("FIELD" => "E.USER_ID", "TYPE" => "int"), "MODIFIED_BY" => array("FIELD" => "E.MODIFIED_BY", "TYPE" => "int"), "ACTIVE" => array("FIELD" => "E.ACTIVE", "TYPE" => "char"), "PAUSED" => array("FIELD" => "E.PAUSED", "TYPE" => "char"), "DATE_START" => array("FIELD" => "E.DATE_START", "TYPE" => "datetime"), "DATE_FINISH" => array("FIELD" => "E.DATE_FINISH", "TYPE" => "datetime"), "TIME_START" => array("FIELD" => "E.TIME_START", "TYPE" => "int"), "TIME_FINISH" => array("FIELD" => "E.TIME_FINISH", "TYPE" => "int"), "DURATION" => array("FIELD" => "E.DURATION", "TYPE" => "int"), "TIME_LEAKS" => array("FIELD" => "E.TIME_LEAKS", "TYPE" => "int"), "TASKS" => array("FIELD" => "E.TASKS", "TYPE" => "string"), "IP_OPEN" => array("FIELD" => "E.IP_OPEN", "TYPE" => "string"), "IP_CLOSE" => array("FIELD" => "E.IP_CLOSE", "TYPE" => "string"), "FORUM_TOPIC_ID" => array("FIELD" => "E.FORUM_TOPIC_ID", "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_GENDER" => array("FIELD" => "U.PERSONAL_GENDER", "TYPE" => "string", "FROM" => $join_user), "USER_ACTIVE" => array("FIELD" => "U.ACTIVE", "TYPE" => "char", "FROM" => $join_user), "ACTIVATED" => array("FIELD" => "CASE WHEN E.ACTIVE='Y' AND EXISTS(\n\t\t\t\t\tSELECT\n\t\t\t\t\t\t'x'\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_timeman_reports TR\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tTR.ENTRY_ID = E.ID\n\t\t\t\t\t\tAND TR.ACTIVE = 'N'\n\t\t\t\t) THEN 'Y' ELSE 'N' END", "TYPE" => "string"), "INACTIVE_OR_ACTIVATED" => array("FIELD" => "CASE WHEN E.ACTIVE='N' OR EXISTS(\n\t\t\t\t\tSELECT\n\t\t\t\t\t\t'x'\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_timeman_reports TR\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tTR.ENTRY_ID = E.ID\n\t\t\t\t\t\tAND TR.ACTIVE = 'N'\n\t\t\t\t) THEN 'Y' ELSE 'N' END", "TYPE" => "string"));
     if (count($arSelectFields) <= 0) {
         foreach ($arFields as $k => $v) {
             if (!isset($v['FROM']) && $k != 'ACTIVATED' && $k != 'INACTIVE_OR_ACTIVATED') {
                 $arSelectFields[] = $k;
             }
         }
     } elseif (in_array("*", $arSelectFields)) {
         $arf = $arFields;
         if (!in_array('ACTIVATED', $arSelectFields)) {
             unset($arf['ACTIVATED']);
         }
         if (!in_array('INACTIVE_OR_ACTIVATED', $arSelectFields)) {
             unset($arf['INACTIVE_OR_ACTIVATED']);
         }
         $arSelectFields = array_keys($arf);
     }
     $arSqls = CTimeManEntry::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\tb_timeman_entries E\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__);
         if ($arRes = $dbRes->Fetch()) {
             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\tb_timeman_entries E\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) {
             if ($arRes = $dbRes->Fetch()) {
                 $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"];
         }
         //echo '<pre>',$strSql,'</pre>'; die();
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("USER"));
     }
     return $dbRes;
 }
Example #6
0
    die;
}
$arParams["FORUM_ID"] = intVal(COption::GetOptionInt("timeman", "report_forum_id", ""));
$arParams["REPORT_ID"] = intVal($arParams["REPORT_ID"]);
$arParams["ENTRY_ID"] = intVal($arParams["ENTRY_ID"]);
$arResult["COMMENTS"] = array();
$user_url = COption::GetOptionString('intranet', 'path_user', '/company/personal/user/#USER_ID#/', $_REQUEST['site_id']);
if ($arParams["FORUM_ID"]) {
    $FORUM_TOPIC_ID = 0;
    if ($arParams["REPORT_ID"]) {
        $dbReport = CTimeManReportFull::GetByID($arParams["REPORT_ID"]);
        $arReport = $dbReport->Fetch();
        $FORUM_TOPIC_ID = $arReport["FORUM_TOPIC_ID"];
    } else {
        if ($arParams['ENTRY_ID']) {
            $dbRes = CTimeManEntry::GetByID($arParams['ENTRY_ID']);
            $arEntry = $dbRes->Fetch();
            $FORUM_TOPIC_ID = $arEntry["FORUM_TOPIC_ID"];
        }
    }
    if ($FORUM_TOPIC_ID > 0) {
        CModule::IncludeModule("forum");
        $parser = new forumTextParser(LANGUAGE_ID);
        $allow = forumTextParser::GetFeatures(CForumNew::GetByID($arParams["FORUM_ID"]));
        $db_res = CForumMessage::GetList(array("ID" => "ASC"), array("TOPIC_ID" => $FORUM_TOPIC_ID));
        while ($ar_res = $db_res->Fetch()) {
            $dbAuthor = CUser::GetByID($ar_res["AUTHOR_ID"]);
            $arAuthor = $dbAuthor->Fetch();
            $ar_res["AUTHOR_PHOTO"] = $arAuthor['PERSONAL_PHOTO'] > 0 ? CIntranetUtils::InitImage($arAuthor['PERSONAL_PHOTO'], 32, 0, BX_RESIZE_IMAGE_EXACT) : array();
            $ar_res["AUTHOR_URL"] = str_replace(array('#ID#', '#USER_ID#'), $ar_res["AUTHOR_ID"], $user_url);
            $ar_res["POST_MESSAGE_HTML"] = $parser->convert(COption::GetOptionString("forum", "FILTER", "Y") == "Y" ? $ar_res["POST_MESSAGE_FILTER"] : $ar_res["POST_MESSAGE"], $allow, "html");
Example #7
0
 public static function GetNeighbours($ENTRY_ID, $USER_ID, $bCheckActive = false)
 {
     global $DB;
     $ENTRY_ID = intval($ENTRY_ID);
     $USER_ID = intval($USER_ID);
     $res = array();
     if ($ENTRY_ID > 0 && $USER_ID > 0) {
         $arFilter = array('<ID' => $ENTRY_ID, 'USER_ID' => $USER_ID);
         if ($bCheckActive) {
             $arFilter['INACTIVE_OR_ACTIVATED'] = 'Y';
         }
         $dbRes = CTimeManEntry::GetList(array('ID' => 'DESC'), $arFilter, false, array('nTopCount' => 1), array('ID'));
         if ($arRes = $dbRes->Fetch()) {
             $res['PREV'] = $arRes['ID'];
         }
         $arFilter['>ID'] = $arFilter['<ID'];
         unset($arFilter['<ID']);
         $dbRes = CTimeManEntry::GetList(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => 1), array('ID'));
         if ($arRes = $dbRes->Fetch()) {
             $res['NEXT'] = $arRes['ID'];
         }
     }
     return $res;
 }
 /**
  * @param $userId
  * @return bool
  */
 public function canRead($userId)
 {
     if ($this->canRead !== null) {
         return $this->canRead;
     }
     if (($res = $this->getDataToCheck($this->entityId)) && !empty($res)) {
         list($message, $topic) = $res;
         $entityId = null;
         $entityType = null;
         if (!empty($topic["XML_ID"])) {
             $entityId = substr($topic["XML_ID"], strrpos($topic["XML_ID"], "_") + 1);
             $entityType = substr($topic["XML_ID"], 0, strrpos($topic["XML_ID"], "_"));
         }
         switch ($entityType) {
             case "TASK":
                 if (Loader::includeModule("tasks")) {
                     $connector = new TaskConnector($entityId, $this->attachedObject);
                     $this->canRead = $connector->canRead($userId);
                     return $this->canRead;
                 }
                 break;
             case "EVENT":
                 if (Loader::includeModule("calendar")) {
                     $connector = new CalendarEventConnector($entityId, $this->attachedObject);
                     $this->canRead = $connector->canRead($userId);
                     return $this->canRead;
                 }
                 break;
             case "IBLOCK":
                 if ((int) $topic["USER_ID"] > 0 && Loader::includeModule("socialnetwork")) {
                     $codes = array();
                     if (($res = \CSocNetLog::getList(array(), array("SOURCE_ID" => $entityId, "EVENT_ID" => array("photo_photo", "news", "wiki")), false, false, array("ID"))->fetch()) && $res) {
                         $db_res = \CSocNetLogRights::getList(array(), array("LOG_ID" => $res["ID"]));
                         while ($res = $db_res->fetch()) {
                             $codes[] = $res["GROUP_CODE"];
                         }
                     }
                     $this->canRead = $this->canAccess($userId, $codes);
                     return $this->canRead;
                 }
                 $this->canRead = true;
                 return $this->canRead;
             case "MEETING":
                 $this->canRead = (int) $message["FORUM_ID"] == (int) \COption::getOptionInt('meeting', 'comments_forum_id', 0, SITE_ID);
                 return $this->canRead;
             case "TIMEMAN_ENTRY":
                 if (Loader::includeModule("timeman")) {
                     $dbEntry = \CTimeManEntry::getList(array(), array("ID" => $entityId), false, false, array("ID", "USER_ID"));
                     if ($arEntry = $dbEntry->fetch()) {
                         if ($arEntry["USER_ID"] == $userId) {
                             $this->canRead = true;
                             return $this->canRead;
                         } else {
                             $arManagers = \CTimeMan::getUserManagers($arEntry["USER_ID"]);
                             $this->canRead = in_array($userId, $arManagers);
                             return $this->canRead;
                         }
                     }
                 }
                 $this->canRead = false;
                 return $this->canRead;
             case "TIMEMAN_REPORT":
                 if (Loader::includeModule("timeman")) {
                     $dbReport = \CTimeManReportFull::getList(array(), array("ID" => $entityId), array("ID", "USER_ID"));
                     if ($arReport = $dbReport->fetch()) {
                         if ($arReport["USER_ID"] == $userId) {
                             $this->canRead = true;
                             return $this->canRead;
                         } else {
                             $arManagers = \CTimeMan::getUserManagers($arReport["USER_ID"]);
                             $this->canRead = in_array($userId, $arManagers);
                             return $this->canRead;
                         }
                     }
                 }
                 $this->canRead = false;
                 return $this->canRead;
             case "WF":
                 $this->canRead = false;
                 if (Loader::includeModule("bizproc")) {
                     $currentUserId = (int) $this->getUser()->getId();
                     $participants = \CBPTaskService::getWorkflowParticipants($entityId);
                     if (in_array($currentUserId, $participants)) {
                         $this->canRead = true;
                     } else {
                         $state = \CBPStateService::getWorkflowStateInfo($entityId);
                         if ($state && $currentUserId === (int) $state['STARTED_BY']) {
                             $this->canRead = true;
                         }
                     }
                 }
                 return $this->canRead;
         }
         if ((!empty($topic["SOCNET_GROUP_ID"]) || !empty($topic["OWNER_ID"])) && Loader::includeModule("socialnetwork")) {
             if (!empty($topic["SOCNET_GROUP_ID"])) {
                 $this->canRead = \CSocNetFeatures::isActiveFeature(SONET_ENTITY_GROUP, $topic["SOCNET_GROUP_ID"], "forum") && \CSocNetFeaturesPerms::canPerformOperation($userId, SONET_ENTITY_GROUP, $topic["SOCNET_GROUP_ID"], "forum", "view");
                 return $this->canRead;
             } else {
                 $this->canRead = \CSocNetFeatures::isActiveFeature(SONET_ENTITY_USER, $topic["OWNER_ID"], "forum") && \CSocNetFeaturesPerms::canPerformOperation($userId, SONET_ENTITY_USER, $topic["OWNER_ID"], "forum", "view");
                 return $this->canRead;
             }
         }
         if ($message) {
             $user = $this->getUser();
             if ($user && $userId == $user->getId()) {
                 $userGroups = $user->getUserGroupArray();
             } else {
                 $userGroups = array(2);
             }
             /** @noinspection PhpDynamicAsStaticMethodCallInspection */
             if (\CForumUser::isAdmin($userId, $userGroups)) {
                 $this->canRead = true;
                 return $this->canRead;
             }
             /** @noinspection PhpDynamicAsStaticMethodCallInspection */
             $perms = \CForumNew::getUserPermission($message["FORUM_ID"], $userGroups);
             if ($perms >= "Y") {
                 $this->canRead = true;
                 return $this->canRead;
             }
             if ($perms < "E" || $perms < "Q" && $message["APPROVED"] != "Y") {
                 $this->canRead = false;
                 return $this->canRead;
             }
             /** @noinspection PhpDynamicAsStaticMethodCallInspection */
             $forum = \CForumNew::getByID($message["FORUM_ID"]);
             $this->canRead = $forum["ACTIVE"] == "Y";
             return $this->canRead;
         }
     }
     $this->canRead = false;
     return $this->canRead;
 }
Example #9
0
 protected function _GetLastData($clear = false)
 {
     global $CACHE_MANAGER;
     if ($clear) {
         CTimeManUser::$LAST_ENTRY = CTimeManEntry::GetLast($this->USER_ID);
         $CACHE_MANAGER->Clean($this->_cacheId(), 'b_timeman_entries');
     } else {
         if (!CTimeManUser::$LAST_ENTRY) {
             if ($CACHE_MANAGER->Read(86400, $this->_cacheId(), 'b_timeman_entries')) {
                 $DATA = $CACHE_MANAGER->Get($this->_cacheId());
             } else {
                 $DATA = CTimeManEntry::GetLast($this->USER_ID);
                 $CACHE_MANAGER->Set($this->_cacheId(), $DATA);
             }
             CTimeManUser::$LAST_ENTRY = $DATA;
         }
     }
     if (isset($_SESSION['BX_TIMEMAN_LAST_PAUSE_' . $this->USER_ID])) {
         CTimeManUser::$LAST_ENTRY['LAST_PAUSE'] = $_SESSION['BX_TIMEMAN_LAST_PAUSE_' . $this->USER_ID];
         // CTimeManUser::$LAST_ENTRY['LAST_PAUSE']['DATE_START'] += CTimeZone::GetOffset();
         // CTimeManUser::$LAST_ENTRY['LAST_PAUSE']['DATE_FINISH'] += CTimeZone::GetOffset();
     } else {
         unset(CTimeManUser::$LAST_ENTRY['LAST_PAUSE']);
     }
     return CTimeManUser::$LAST_ENTRY;
 }