Exemple #1
0
        private static void ProcessGlobalSubscription(int hookId, DateTypes dateType, ObjectTypes objectType, int?objectId, Guid?objectUid)
        {
            // Формируем список пользователей, связанных с объектом
            List <int> users = new List <int>();

            if (objectType == ObjectTypes.Project)
            {
                using (IDataReader reader = DBProject.GetProjectSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.Task)
            {
                using (IDataReader reader = DBTask.GetTaskSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        if ((bool)reader["IsRealTaskResource"] || (bool)reader["IsRealTaskManager"] || (bool)reader["IsCreator"])
                        {
                            users.Add((int)reader["UserId"]);
                        }
                    }
                }
            }
            else if (objectType == ObjectTypes.ToDo)
            {
                using (IDataReader reader = DBToDo.GetToDoSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.CalendarEntry)
            {
                using (IDataReader reader = DBEvent.GetListUsersForEvent(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.Document)
            {
                using (IDataReader reader = DBDocument.GetDocumentSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.Assignment)
            {
                AssignmentEntity entity = (AssignmentEntity)BusinessManager.Load(AssignmentEntity.ClassName, (PrimaryKeyId)objectUid.Value);
                if (entity != null && entity.OwnerDocumentId.HasValue)
                {
                    using (IDataReader reader = DBDocument.GetDocumentSecurity(entity.OwnerDocumentId.Value))
                    {
                        while (reader.Read())
                        {
                            users.Add((int)reader["UserId"]);
                        }
                    }
                }
            }

            // Проверим отсутствие индивидуальной подписки
            for (int i = 0; i < users.Count; i++)
            {
                int userId = users[i];

                // O.R. [2010-04-01]: Don't process inactive users
                if (User.GetUserActivity(userId) != User.UserActivity.Active)
                {
                    users.RemoveAt(i);
                    i--;
                }
                else if (objectId.HasValue)
                {
                    if (GetSubscriptionType(dateType, userId, objectId.Value) != SubscriptionTypes.Global)
                    {
                        users.RemoveAt(i);
                        i--;
                    }
                }
            }

            // Send Reminder
            if (users.Count > 0)
            {
                SendReminder(dateType, objectType, objectId, objectUid, users);
            }
        }