예제 #1
0
                echo $arResult["TASK"]["GROUP_ID"];
                ?>
, this)"></span><?php 
            } else {
                echo GetMessage("TASKS_GROUP_ADD");
                ?>
</a><?php 
            }
            ?>
</span></div>
						<input id="task-detail-selected-group-id" type="hidden" value="<?php 
            echo (int) $arResult["TASK"]["GROUP_ID"];
            ?>
">
					<?php 
        } elseif ($arResult["TASK"]["GROUP_ID"] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $arResult["TASK"]["GROUP_ID"])) {
            ?>
						<div class="task-detail-group"><span class="task-detail-group-label"><?php 
            echo GetMessage("TASKS_TASK_GROUP");
            ?>
:</span><span class="task-detail-group-name"><a href="<?php 
            echo CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP"], array("group_id" => $arResult["TASK"]["GROUP_ID"]));
            ?>
" class="task-detail-group-link" target="_top"><?php 
            echo $arResult["GROUPS"][$arResult["TASK"]["GROUP_ID"]]['NAME'];
            ?>
</a></span></div>
					<?php 
        }
        ?>
예제 #2
0
            }
        }
    }
    if (!empty($arTasksIds)) {
        $arTasksIds = array_unique(array_filter($arTasksIds));
        if (!empty($arTasksIds)) {
            $rsTasks = CTasks::GetList(array('ID' => 'ASC'), array('ID' => $arTasksIds), array('ID', 'TITLE'));
            while ($arTask = $rsTasks->getNext()) {
                $arTask['URL'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TASKS_TASK'], array('task_id' => $arTask['ID'], 'action' => 'view'));
                $arResult['TASKS_DATA'][$arTask['ID']] = $arTask;
            }
        }
    }
}
// check out which sections we need to show
$arResult['DISPLAY_BLOCKS'] = array('CONNECTED_ENTITIES' => false, 'PROPERTIES' => false);
if (!empty($arResult["TASK"]["TAGS"]) || $arResult["TASK"]["GROUP_ID"] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $arResult["TASK"]["GROUP_ID"]) || intval($arResult["TASK"]["BASE_TEMPLATE_ID"]) || intval($arResult["TASK"]["PARENT_ID"])) {
    $arResult['DISPLAY_BLOCKS']['CONNECTED_ENTITIES'] = true;
}
if (is_array($arResult["USER_FIELDS"]) && !empty($arResult["USER_FIELDS"])) {
    foreach ($arResult["USER_FIELDS"] as $fld) {
        if (!empty($fld['VALUE'])) {
            if ($arUserField['FIELD_NAME'] == 'UF_TASK_WEBDAV_FILES') {
                $arResult['DISPLAY_BLOCKS']['CONNECTED_ENTITIES'] = true;
            } else {
                $arResult['DISPLAY_BLOCKS']['PROPERTIES'] = true;
            }
            // other user fields at "PROPERTIES"
        }
    }
}
예제 #3
0
 private static function checkUserCanViewGroup($userId, $groupId)
 {
     if (!CModule::IncludeModule('socialnetwork')) {
         return false;
     }
     if (!isset(self::$cache['GROUP_ACCESS'][$groupId][$userId]) || !self::$cacheData) {
         self::$cache['GROUP_ACCESS'][$groupId][$userId] = CSocNetGroup::CanUserViewGroup($userId, $groupId);
     }
     return self::$cache['GROUP_ACCESS'][$groupId][$userId];
 }
예제 #4
0
     }
     break;
 case 'AUDITORS':
 case 'ACCOMPLICES':
     if ($record['FROM_VALUE']) {
         $arUsersIds = array_merge($arUsersIds, explode(',', $record['FROM_VALUE']));
     }
     if ($record['TO_VALUE']) {
         $arUsersIds = array_merge($arUsersIds, explode(',', $record['TO_VALUE']));
     }
     break;
 case 'GROUP_ID':
     if ($record['FROM_VALUE'] && !isset($arGroupsIds[(int) $record['FROM_VALUE']]) && CSocNetGroup::CanUserViewGroup($loggedInUserId, $record['FROM_VALUE'])) {
         $arGroupsIds[$record['FROM_VALUE']] = (int) $record['FROM_VALUE'];
     }
     if ($record['TO_VALUE'] && !isset($arGroupsIds[(int) $record['TO_VALUE']]) && CSocNetGroup::CanUserViewGroup($loggedInUserId, $record['TO_VALUE'])) {
         $arGroupsIds[$record['FROM_VALUE']] = (int) $record['TO_VALUE'];
     }
     break;
 case 'PARENT_ID':
     if ($record['FROM_VALUE']) {
         $arTasksIds[] = (int) $record['FROM_VALUE'];
     }
     if ($record['TO_VALUE']) {
         $arTasksIds[] = (int) $record['TO_VALUE'];
     }
     break;
 case 'DEPENDS_ON':
     if ($record['FROM_VALUE']) {
         $arTasksIds = array_merge($arTasksIds, explode(',', $record['FROM_VALUE']));
     }
예제 #5
0
            case "TIME_ESTIMATE":
                if ($arResult["TASKS"][$i][$field]) {
                    $arResult["TASKS"][$i][$field] = sprintf('%02d:%02d:%02d', floor($arResult["TASKS"][$i][$field] / 3600), floor($arResult["TASKS"][$i][$field] / 60) % 60, $arResult["TASKS"][$i][$field] % 60);
                } else {
                    $arResult["TASKS"][$i][$field] = "";
                }
                break;
            case "TIME_SPENT_IN_LOGS":
                if ($arResult["TASKS"][$i][$field]) {
                    $arResult["TASKS"][$i][$field] = sprintf('%02d:%02d:%02d', floor($arResult["TASKS"][$i][$field] / 3600), floor($arResult["TASKS"][$i][$field] / 60) % 60, $arResult["TASKS"][$i][$field] % 60);
                } else {
                    $arResult["TASKS"][$i][$field] = "";
                }
                break;
            case "GROUP_ID":
                if ($arResult["TASKS"][$i][$field] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $arResult["TASKS"][$i][$field])) {
                    $arGroup = CSocNetGroup::GetByID($arResult["TASKS"][$i][$field]);
                    if ($arGroup) {
                        $arResult["TASKS"][$i][$field] = $arGroup["NAME"];
                    }
                }
                if (!$arResult["TASKS"][$i][$field]) {
                    $arResult["TASKS"][$i][$field] = "";
                }
            default:
                break;
        }
        echo '<td>' . $arResult["TASKS"][$i][$field] . '</td>';
    }
    ?>
			</tr>
예제 #6
0
 public static function SendUpdateMessage($arFields, $arTask, $bSpawnedByAgent = false)
 {
     global $USER;
     $isBbCodeDescription = true;
     if (isset($arFields['DESCRIPTION_IN_BBCODE'])) {
         if ($arFields['DESCRIPTION_IN_BBCODE'] === 'N') {
             $isBbCodeDescription = false;
         }
     } elseif (isset($arTask['DESCRIPTION_IN_BBCODE'])) {
         if ($arTask['DESCRIPTION_IN_BBCODE'] === 'N') {
             $isBbCodeDescription = false;
         }
     }
     $taskReassignedTo = null;
     if (isset($arFields['RESPONSIBLE_ID']) && $arFields['RESPONSIBLE_ID'] > 0 && $arFields['RESPONSIBLE_ID'] != $arTask['RESPONSIBLE_ID']) {
         $taskReassignedTo = $arFields['RESPONSIBLE_ID'];
     }
     foreach (array('CREATED_BY', 'RESPONSIBLE_ID', 'ACCOMPLICES', 'AUDITORS', 'TITLE') as $field) {
         if (!isset($arFields[$field]) && isset($arTask[$field])) {
             $arFields[$field] = $arTask[$field];
         }
     }
     $arChanges = CTaskLog::GetChanges($arTask, $arFields);
     $arMerged = array('ADDITIONAL_RECIPIENTS' => array());
     if (isset($arTask['CREATED_BY'])) {
         $arMerged['ADDITIONAL_RECIPIENTS'][] = $arTask['CREATED_BY'];
     }
     if (isset($arTask['RESPONSIBLE_ID'])) {
         $arMerged['ADDITIONAL_RECIPIENTS'][] = $arTask['RESPONSIBLE_ID'];
     }
     if (isset($arTask['ACCOMPLICES']) && is_array($arTask['ACCOMPLICES'])) {
         foreach ($arTask['ACCOMPLICES'] as $userId) {
             $arMerged['ADDITIONAL_RECIPIENTS'][] = $userId;
         }
     }
     if (isset($arTask['AUDITORS']) && is_array($arTask['AUDITORS'])) {
         foreach ($arTask['AUDITORS'] as $userId) {
             $arMerged['ADDITIONAL_RECIPIENTS'][] = $userId;
         }
     }
     if (isset($arFields['ADDITIONAL_RECIPIENTS'])) {
         $arFields['ADDITIONAL_RECIPIENTS'] = array_merge($arFields['ADDITIONAL_RECIPIENTS'], $arMerged['ADDITIONAL_RECIPIENTS']);
     } else {
         $arFields['ADDITIONAL_RECIPIENTS'] = $arMerged['ADDITIONAL_RECIPIENTS'];
     }
     $arUsers = CTaskNotifications::__GetUsers($arFields);
     $arRecipientsIDs = array_unique(CTaskNotifications::GetRecipientsIDs($arFields));
     if (!empty($arRecipientsIDs) && (is_object($USER) && $USER->GetID() || $arFields["CREATED_BY"])) {
         $curUserTzOffset = (int) CTasksTools::getTimeZoneOffset();
         $arInvariantChangesStrs = array();
         $arVolatileDescriptions = array();
         $arRecipientsIDsByTimezone = array();
         $i = 0;
         foreach ($arChanges as $key => $value) {
             ++$i;
             $actionMessage = GetMessage("TASKS_MESSAGE_" . $key);
             if (strlen($actionMessage)) {
                 $tmpStr = $actionMessage . ": [COLOR=#000]";
                 switch ($key) {
                     case 'TIME_ESTIMATE':
                         $tmpStr .= self::formatTimeHHMM($value["FROM_VALUE"], true) . " -> " . self::formatTimeHHMM($value["TO_VALUE"], true);
                         break;
                     case "TITLE":
                         $tmpStr .= $value["FROM_VALUE"] . " -> " . $value["TO_VALUE"];
                         break;
                     case "RESPONSIBLE_ID":
                         $tmpStr .= CTaskNotifications::__Users2String($value["FROM_VALUE"], $arUsers, $arFields["NAME_TEMPLATE"]) . ' -> ' . CTaskNotifications::__Users2String($value["TO_VALUE"], $arUsers, $arFields["NAME_TEMPLATE"]);
                         break;
                     case "ACCOMPLICES":
                     case "AUDITORS":
                         $tmpStr .= CTaskNotifications::__Users2String(explode(",", $value["FROM_VALUE"]), $arUsers, $arFields["NAME_TEMPLATE"]) . ' -> ' . CTaskNotifications::__Users2String(explode(",", $value["TO_VALUE"]), $arUsers, $arFields["NAME_TEMPLATE"]);
                         break;
                     case "DEADLINE":
                     case "START_DATE_PLAN":
                     case "END_DATE_PLAN":
                         // CTasks::Log() returns bitrix timestamps for dates, so adjust them to correct unix timestamps.
                         $utsFromValue = $value['FROM_VALUE'] - $curUserTzOffset;
                         $utsToValue = $value['TO_VALUE'] - $curUserTzOffset;
                         // It will be replaced below to formatted string with correct dates for different timezones
                         $placeholder = '###PLACEHOLDER###' . $i . '###';
                         $tmpStr .= $placeholder;
                         // Collect recipients' timezones
                         foreach ($arRecipientsIDs as $userId) {
                             $tzOffset = (int) CTasksTools::getTimeZoneOffset($userId);
                             if (!isset($arVolatileDescriptions[$tzOffset])) {
                                 $arVolatileDescriptions[$tzOffset] = array();
                             }
                             if (!isset($arVolatileDescriptions[$tzOffset][$placeholder])) {
                                 // Make bitrix timestamps for given user
                                 $bitrixTsFromValue = $utsFromValue + $tzOffset;
                                 $bitrixTsToValue = $utsToValue + $tzOffset;
                                 $description = '';
                                 if ($utsFromValue > 360000) {
                                     $fromValueAsString = FormatDate('^' . CDatabase::DateFormatToPHP(FORMAT_DATETIME), $bitrixTsFromValue);
                                     $description .= $fromValueAsString;
                                 }
                                 $description .= ' --> ';
                                 if ($utsToValue > 360000) {
                                     $toValueAsString = FormatDate('^' . CDatabase::DateFormatToPHP(FORMAT_DATETIME), $bitrixTsToValue);
                                     $description .= $toValueAsString;
                                 }
                                 $arVolatileDescriptions[$tzOffset][$placeholder] = $description;
                             }
                             $arRecipientsIDsByTimezone[$tzOffset][] = $userId;
                         }
                         break;
                     case "DESCRIPTION":
                         $tmpStr .= HTMLToTxt($arFields["DESCRIPTION"]);
                         break;
                     case "TAGS":
                         $tmpStr .= ($value["FROM_VALUE"] ? str_replace(",", ", ", $value["FROM_VALUE"]) . " -> " : "") . ($value["TO_VALUE"] ? str_replace(",", ", ", $value["TO_VALUE"]) : GetMessage("TASKS_MESSAGE_NO_VALUE"));
                         break;
                     case "PRIORITY":
                         $tmpStr .= GetMessage("TASKS_PRIORITY_" . $value["FROM_VALUE"]) . " -> " . GetMessage("TASKS_PRIORITY_" . $value["TO_VALUE"]);
                         break;
                     case "GROUP_ID":
                         if ($value["FROM_VALUE"] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $value["FROM_VALUE"])) {
                             $arGroupFrom = CSocNetGroup::GetByID($value["FROM_VALUE"]);
                             if ($arGroupFrom) {
                                 $tmpStr .= $arGroupFrom["NAME"] . " -> ";
                             }
                         }
                         if ($value["TO_VALUE"] && CSocNetGroup::CanUserViewGroup($USER->GetID(), $value["TO_VALUE"])) {
                             $arGroupTo = CSocNetGroup::GetByID($value["TO_VALUE"]);
                             if ($arGroupTo) {
                                 $tmpStr .= $arGroupTo["NAME"];
                             }
                         } else {
                             $tmpStr .= GetMessage("TASKS_MESSAGE_NO_VALUE");
                         }
                         break;
                     case "PARENT_ID":
                         if ($value["FROM_VALUE"]) {
                             $rsTaskFrom = CTasks::GetList(array(), array("ID" => $value["FROM_VALUE"]), array('ID', 'TITLE'));
                             if ($arTaskFrom = $rsTaskFrom->GetNext()) {
                                 $tmpStr .= $arTaskFrom["TITLE"] . " -> ";
                             }
                         }
                         if ($value["TO_VALUE"]) {
                             $rsTaskTo = CTasks::GetList(array(), array("ID" => $value["TO_VALUE"]), array('ID', 'TITLE'));
                             if ($arTaskTo = $rsTaskTo->GetNext()) {
                                 $tmpStr .= $arTaskTo["TITLE"];
                             }
                         } else {
                             $tmpStr .= GetMessage("TASKS_MESSAGE_NO_VALUE");
                         }
                         break;
                     case "DEPENDS_ON":
                         $arTasksFromStr = array();
                         if ($value["FROM_VALUE"]) {
                             $rsTasksFrom = CTasks::GetList(array(), array("ID" => explode(",", $value["FROM_VALUE"])), array('ID', 'TITLE'));
                             while ($arTaskFrom = $rsTasksFrom->GetNext()) {
                                 $arTasksFromStr[] = $arTaskFrom["TITLE"];
                             }
                         }
                         $arTasksToStr = array();
                         if ($value["TO_VALUE"]) {
                             $rsTasksTo = CTasks::GetList(array(), array("ID" => explode(",", $value["TO_VALUE"])), array('ID', 'TITLE'));
                             while ($arTaskTo = $rsTasksTo->GetNext()) {
                                 $arTasksToStr[] = $arTaskTo["TITLE"];
                             }
                         }
                         $tmpStr .= ($arTasksFromStr ? implode(", ", $arTasksFromStr) . " -> " : "") . ($arTasksToStr ? implode(", ", $arTasksToStr) : GetMessage("TASKS_MESSAGE_NO_VALUE"));
                         break;
                     case "MARK":
                         $tmpStr .= (!$value["FROM_VALUE"] ? GetMessage("TASKS_MARK_NONE") : GetMessage("TASKS_MARK_" . $value["FROM_VALUE"])) . " -> " . (!$value["TO_VALUE"] ? GetMessage("TASKS_MARK_NONE") : GetMessage("TASKS_MARK_" . $value["TO_VALUE"]));
                         break;
                     case "ADD_IN_REPORT":
                         $tmpStr .= ($value["FROM_VALUE"] == "Y" ? GetMessage("TASKS_MESSAGE_IN_REPORT_YES") : GetMessage("TASKS_MESSAGE_IN_REPORT_NO")) . " -> " . ($value["TO_VALUE"] == "Y" ? GetMessage("TASKS_MESSAGE_IN_REPORT_YES") : GetMessage("TASKS_MESSAGE_IN_REPORT_NO"));
                         break;
                     case "DELETED_FILES":
                         $tmpStr .= $value["FROM_VALUE"];
                         $tmpStr .= $value["TO_VALUE"];
                         break;
                     case "NEW_FILES":
                         $tmpStr .= $value["TO_VALUE"];
                         break;
                 }
                 $tmpStr .= "[/COLOR]";
                 $arInvariantChangesStrs[] = $tmpStr;
             }
         }
         $occurAsUserId = CTasksTools::getOccurAsUserId();
         if (!$occurAsUserId) {
             $occurAsUserId = is_object($USER) && $USER->GetID() ? $USER->GetID() : $arFields["CREATED_BY"];
         }
         $invariantDescription = null;
         if (!empty($arInvariantChangesStrs)) {
             $invariantDescription = implode("\r\n", $arInvariantChangesStrs);
         }
         if ($invariantDescription !== null && !empty($arRecipientsIDs)) {
             // If there is no volatile part of descriptions, send to all recipients at once
             if (empty($arVolatileDescriptions)) {
                 $arVolatileDescriptions['some_timezone'] = array();
                 $arRecipientsIDsByTimezone['some_timezone'] = $arRecipientsIDs;
             }
             foreach ($arVolatileDescriptions as $tzOffset => $arVolatileDescriptionsData) {
                 $strDescription = $invariantDescription;
                 foreach ($arVolatileDescriptionsData as $placeholder => $strReplaceTo) {
                     $strDescription = str_replace($placeholder, $strReplaceTo, $strDescription);
                 }
                 $message = str_replace(array("#TASK_TITLE#", "#TASK_EXTRA#"), array(self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID'], true), $strDescription), GetMessage("TASKS_TASK_CHANGED_MESSAGE"));
                 if ($isBbCodeDescription) {
                     $parser = new CTextParser();
                     $htmlDescription = str_replace("\t", ' &nbsp; &nbsp;', $parser->convertText($strDescription));
                 } else {
                     $htmlDescription = $strDescription;
                 }
                 $message_email = str_replace(array("#TASK_TITLE#", "#TASK_EXTRA#"), array(self::formatTaskName($arTask['ID'], $arTask['TITLE'], $arTask['GROUP_ID']), $htmlDescription . "\r\n" . GetMessage('TASKS_MESSAGE_LINK') . ': #PATH_TO_TASK#'), GetMessage("TASKS_TASK_CHANGED_MESSAGE"));
                 CTaskNotifications::SendMessage($occurAsUserId, $arRecipientsIDsByTimezone[$tzOffset], $message, $arTask["ID"], $message_email, array('ACTION' => 'TASK_UPDATE', 'arFields' => $arFields, 'arChanges' => $arChanges), $taskReassignedTo);
             }
         }
     }
     // sonet log
     self::SendMessageToSocNet($arFields, $bSpawnedByAgent, $arChanges, $arTask);
 }
예제 #7
0
 /**
  * @param integer $userId
  * @param integer $groupId
  * @return bool true if user can access group, false otherwise
  */
 public static function HasUserReadAccessToGroup($userId, $groupId)
 {
     // Roles allowed for extranet user to grant access to read task in group
     static $arAllowedRoles = array(SONET_ROLES_MODERATOR, SONET_ROLES_USER, SONET_ROLES_OWNER);
     if (!CModule::IncludeModule('socialnetwork')) {
         return false;
     }
     if (!($userId > 0 && $groupId > 0)) {
         return false;
     }
     if (self::IsIntranetUser($userId)) {
         /** @noinspection PhpDynamicAsStaticMethodCallInspection */
         return CSocNetGroup::CanUserViewGroup($userId, $groupId);
     }
     /** @noinspection PhpDynamicAsStaticMethodCallInspection */
     $userRole = CSocNetUserToGroup::GetUserRole($userId, $groupId);
     if (in_array($userRole, $arAllowedRoles)) {
         return true;
     }
     return false;
 }