コード例 #1
0
ファイル: Company.cs プロジェクト: alex765022/IBN
        public static void UpdateAlertInfo(bool EnableAlerts, string FirstName, string LastName, string Email)
        {
            int UserId = -1;

            using (IDataReader reader = DBUser.GetUserInfoByLogin("alert"))
            {
                reader.Read();
                UserId = (int)reader["UserId"];
            }

            try
            {
                using (DbTransaction tran = DbTransaction.Begin())
                {
                    DBUser.UpdateUserInfo(UserId, "", FirstName, LastName, Email, "", "");
                    PortalConfig.EnableAlerts = EnableAlerts;
                    tran.Commit();
                }
            }
            catch (Exception exception)
            {
                if (exception is SqlException)
                {
                    SqlException sqlException = exception as SqlException;
                    if (sqlException.Number == 2627)
                    {
                        throw new EmailDuplicationException();
                    }
                }
                throw;
            }
            Alerts2.Init();
        }
コード例 #2
0
ファイル: SystemEvents.cs プロジェクト: alex765022/IBN
 private static void DbTransactionCommitted(object sender, DbTransactionEventArgs e)
 {
     if (_hasNewEvent)
     {
         _hasNewEvent = false;
         Alerts2.Send(DbContext.Current.TransactionId);
     }
 }
コード例 #3
0
ファイル: EMailMessage.cs プロジェクト: alex765022/IBN
        /// <summary>
        /// Gets the outgoing email format body preview.
        /// </summary>
        /// <param name="IncidentId">The incident id.</param>
        /// <returns></returns>
        public static string GetOutgoingEmailFormatBodyPreview(int issueId)
        {
            IncidentBox incidentBox = IncidentBox.Load(Incident.GetIncidentBox(issueId));

            string issueTitle  = Incident.GetIncidentTitle(issueId);
            string issueLink   = Alerts2.MakeIssueLink(issueId);
            string issueTicket = TicketUidUtil.Create(incidentBox.IdentifierMask, issueId);

            StringBuilder sb = new StringBuilder(incidentBox.Document.GeneralBlock.OutgoingEmailFormatBody, 4096);

            sb.Replace("[=Title=]", issueTitle);
            sb.Replace("[=Ticket=]", issueTicket);
            //sb.Replace("[=Text=]", node.Text);

            string linkStart = string.Format(CultureInfo.InvariantCulture, "<a href=\"{0}\">", HttpUtility.HtmlAttributeEncode(issueLink));

            sb.Replace("[=Link=]", linkStart);
            sb.Replace("[=/Link=]", "</a>");

            UserLight currentUser = Security.CurrentUser;

            if (currentUser != null)
            {
                sb.Replace("[=FirstName=]", currentUser.FirstName);
                sb.Replace("[=LastName=]", currentUser.LastName);
                sb.Replace("[=Email=]", currentUser.Email);

                using (IDataReader reader = User.GetUserProfile(currentUser.UserID))
                {
                    if (reader.Read())
                    {
                        sb.Replace("[=Phone=]", reader["Phone"].ToString());
                        sb.Replace("[=Fax=]", reader["Fax"].ToString());
                        sb.Replace("[=Mobile=]", reader["Mobile"].ToString());
                        sb.Replace("[=Position=]", reader["Position"].ToString());
                        sb.Replace("[=Department=]", reader["Department"].ToString());
                        sb.Replace("[=Company=]", reader["Company"].ToString());
                        sb.Replace("[=Location=]", reader["Location"].ToString());
                    }
                }
            }

            return(sb.ToString());
        }
コード例 #4
0
ファイル: Reminder.cs プロジェクト: alex765022/IBN
        public static string GetAddress(DeliveryType type, int userdId)
        {
            using (IDataReader reader = DBUser.GetUserInfo(userdId))
            {
                if (reader.Read())
                {
                    switch (type)
                    {
                    case DeliveryType.Email:
                        return(Alerts2.BuldEmailAddress(reader["FirstName"].ToString(), reader["LastName"].ToString(), reader["Email"].ToString()));

                    case DeliveryType.IBN:
                        return(reader["OriginalId"].ToString());
                    }
                }
            }

            return(null);
        }
コード例 #5
0
ファイル: Configuration.cs プロジェクト: alex765022/IBN
        private void Init3()
        {
            // OZ Initialize Company Web Site Semaphore
            CompanyWebSiteSemaphore.Initialize();

            DbHelper2.Init2();

            ValidateSqlServerVesion();
            _sqlServerEdition = (SqlServerEdition)DBCommon.GetSqlServerEdition();

            DatabaseState state = (DatabaseState)DBCommon.GetDatabaseState();

            if (state != DatabaseState.Ready)
            {
                throw new DatabaseStateException(state);
            }

            Alerts2.Init();
            PortalConfig.Current.Init();

            _host = PortalConfig.SystemHost;
            string scheme = PortalConfig.SystemScheme;
            string port   = PortalConfig.SystemPort;

            _companyType = PortalConfig.CompanyType;

            if (PortalConfig.CompanyEndDate.HasValue)
            {
                _endDate = PortalConfig.CompanyEndDate.Value;
            }
            else
            {
                _endDate = DateTime.MaxValue;
            }

            _portalLink = string.Format("{0}://{1}{2}", scheme, _host, !string.IsNullOrEmpty(port) ? (":" + port) : "");
            _serverLink = _portalLink + "/";

            _defaultLocale = DBCommon.GetDefaultLanguageName();


            _initialized = true;
        }
コード例 #6
0
ファイル: Reminder.cs プロジェクト: alex765022/IBN
        public static Alerts2.Message GetMessage(ReminderTemplate template, int?objectId, Guid?objectUid, ObjectTypes objectType, int userId, VariableInfo[] vars)
        {
            StringBuilder sbSubject = new StringBuilder();
            StringBuilder sbBody    = new StringBuilder();

            IFormatProvider prov = new CultureInfo(template.Locale, true);

            sbSubject.Append(template.Subject);
            sbBody.Append(template.Body);

            bool IsExternalUser = User.IsExternal(userId);

            string gateGuid = "";

            if (IsExternalUser && objectId.HasValue)
            {
                if (userId > 0)
                {
                    gateGuid = DBCommon.GetGateGuid((int)objectType, objectId.Value, userId);
                }
                //				else
                //					gateGuid = DBCommon.GetGateGuid(eInfo.ObjectTypeId, eInfo.ObjectId, User);
            }

            // Replace variables with values
            foreach (VariableInfo var in vars)
            {
                string nameBegin = string.Format("[={0}=]", var.name);
                string nameEnd   = string.Format("[=/{0}=]", var.name);

                string linkStartValue = string.Empty;
                string linkEndValue   = string.Empty;

                if (var.IsLink)                 // Modify link
                {
                    if (IsExternalUser && !var.External)
                    {
                        var.value = string.Empty;
                    }

                    if (var.value.Length == 0)
                    {
                        linkStartValue = linkEndValue = string.Empty;
                    }
                    else
                    {
                        if (IsExternalUser)
                        {
                            if (userId > 0)
                            {
                                var.value = Alerts2.MakeExternalLink(var.value, User.GetUserLogin(userId), gateGuid);
                            }
                            //							else
                            //								var.value = Alert2.MakeClientLink(var.value, gateGuid);
                        }

                        // Add NoMenu parameter to the end of link
                        if (!var.DisableNoMenu && !User.GetMenuInAlerts(userId) && var.name != "PortalLink" && var.name != "ServerLink")
                        {
                            if (var.value.IndexOf('?') != -1)
                            {
                                var.value += '&';
                            }
                            else
                            {
                                var.value += '?';
                            }
                            var.value += "nomenu=1";
                        }

                        linkStartValue = string.Format("<a href='{0}'>", var.value);
                        linkEndValue   = "</a>";
                    }
                }

                if (var.type == VariableType.Date.ToString())
                {
                    var.value = Alerts2.DateReformat(var.value, prov);
                }
                else if (var.type == VariableType.DateTime.ToString())
                {
                    var.value = Alerts2.DateTimeReformat(var.value, prov, User.GetUserTimeZoneId(userId));
                }

                sbSubject.Replace(nameBegin, var.value);

                if (var.IsLink)
                {
                    sbBody.Replace(nameBegin, linkStartValue);
                    sbBody.Replace(nameEnd, linkEndValue);
                }
                else
                {
                    var.value = HttpUtility.HtmlEncode(var.value).Replace("\r\n", "<BR>");
                    sbBody.Replace(nameBegin, var.value);
                }
            }

            return(new Alerts2.Message(sbSubject.ToString(), sbBody.ToString()));
        }
コード例 #7
0
        /// <summary>
        /// Sends the auto reply.
        /// </summary>
        /// <param name="IncidentId">The incident id.</param>
        /// <param name="From">From.</param>
        /// <param name="To">To.</param>
        internal static void SendAutoReply(int IncidentId, string From, string To)
        {
            IncidentBox incidentBox = IncidentBox.Load(Incident.GetIncidentBox(IncidentId));

            if (!incidentBox.Document.EMailRouterBlock.SendAutoReply)
            {
                return;
            }

            Alerts2.Message msg = Alerts2.GetMessage(incidentBox.Document.GeneralBlock.AutoReplyEMailSubjectTemplate,
                                                     incidentBox.Document.GeneralBlock.AutoReplyEMailBodyTemplate,
                                                     SystemEventTypes.Issue_Created,
                                                     IncidentId, null,
                                                     -1,
                                                     Security.CurrentUser.UserID);

            string subject = msg.Subject, body = msg.Body;

            MemoryStream emlMessage = new MemoryStream();

            byte[] tmpBuffer = null;

            #region Fill Pop3 Message Stream
            // Create Pop3 Message Headers
            StringBuilder sbHeaders = new StringBuilder();

            sbHeaders.AppendFormat("Date: {0}", GetEMailCreationDate()).Append("\r\n");
            sbHeaders.Append("From: [email protected]").Append("\r\n");
            sbHeaders.Append("To: [email protected]").Append("\r\n");
            sbHeaders.AppendFormat("Subject: {0}", Rfc822HeaderCollection.Encode2AsciiString(subject)).Append("\r\n");
            sbHeaders.Append("MIME-Version: 1.0").Append("\r\n");
            sbHeaders.Append("Content-Type: multipart/mixed; boundary=\"----------7E143249668A83E\"").Append("\r\n");
            sbHeaders.Append("\r\n");

            tmpBuffer = Encoding.ASCII.GetBytes(sbHeaders.ToString());
            emlMessage.Write(tmpBuffer, 0, tmpBuffer.Length);

            // Create Pop3 Message Entry
            StringBuilder sbMessage = new StringBuilder();

            sbMessage.Append("------------7E143249668A83E").Append("\r\n");

            // IF MESSAGE IS PLAIN TEXT
            //sbMessage.Append("Content-Type: text/plain; charset=utf-8").Append("\r\n");

            // IF MESSAGE IS HTML TEXT
            sbMessage.Append("Content-Type: text/html; charset=utf-8").Append("\r\n");

            sbMessage.Append("Content-Transfer-Encoding: base64").Append("\r\n");
            sbMessage.Append("\r\n");

            // OZ Fixed 500 5.3.3 Line too long (in reply to end of DATA command)
            sbMessage.Append(Convert.ToBase64String(Encoding.UTF8.GetBytes(body), Base64FormattingOptions.InsertLineBreaks)).Append("\r\n");

            tmpBuffer = Encoding.ASCII.GetBytes(sbMessage.ToString());
            emlMessage.Write(tmpBuffer, 0, tmpBuffer.Length);

            // Add Final Line
            tmpBuffer = Encoding.ASCII.GetBytes("------------7E143249668A83E--\r\n\r\n");
            emlMessage.Write(tmpBuffer, 0, tmpBuffer.Length);

            #endregion

            Pop3Message InMsg = new Pop3Message(emlMessage);

            OutputMessageCreator outputAutoReply = new OutputMessageCreator(InMsg, IncidentId, From, From);
            outputAutoReply.AddRecipient(To);

            int emailBoxId = EMail.EMailRouterOutputMessage.FindEMailRouterPublicId(IncidentId);

            foreach (OutputMessage outputMsg in outputAutoReply.Create())
            {
                try
                {
                    SmtpClientUtility.SendMessage(OutgoingEmailServiceType.HelpDeskEmailBox, emailBoxId, outputMsg.MailFrom, outputMsg.RcptTo, outputMsg.Subject, outputMsg.Data);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Trace.WriteLine(ex);
                    Log.WriteError(ex.ToString());
                }
            }
        }
コード例 #8
0
ファイル: SystemEvents.cs プロジェクト: alex765022/IBN
        public static void AddSystemEvents(SystemEventTypes eventType, int?objectId, Guid?objectUid, int relObjectId, string emailTo, string emailFrom, ArrayList excludeUsers, Dictionary <string, string> additionalValues)
        {
            // User can be unregistered
            int CurrentUserId = -1;

            if (Security.CurrentUser != null)
            {
                CurrentUserId = Security.CurrentUser.UserID;
            }

            ObjectTypes objectType, relObjectType;
            string      ObjectTitle    = string.Empty;
            string      RelObjectTitle = string.Empty;
            string      XMLData        = Alerts2.GetXmlData(eventType, objectId, objectUid, relObjectId, out objectType, out relObjectType, ref ObjectTitle, ref RelObjectTitle, additionalValues);

            // Здесь будем хранить обработанных пользователей и пользователей, которых не надо обрабатывать
            ArrayList processedUsers = new ArrayList();

            if (CurrentUserId > 0 && !Alerts2.SendToCurrentUser)
            {
                processedUsers.Add(CurrentUserId);
            }

            // Получатели info-сообщений
            ArrayList infoRecipients = new ArrayList();

            using (DbTransaction tran = DbTransaction.Begin())
            {
                int eventId = DBSystemEvents.AddSystemEvents((int)eventType, objectId, objectUid, ObjectTitle, relObjectId,
                                                             RelObjectTitle, CurrentUserId, XMLData, DbContext.Current.TransactionId);

                #region Персональные сообщения
                if (
                    eventType == SystemEventTypes.CalendarEntry_Updated_Manager_ManagerAdded ||
                    eventType == SystemEventTypes.CalendarEntry_Updated_Manager_ManagerDeleted ||
                    eventType == SystemEventTypes.CalendarEntry_Updated_ResourceList_AssignmentAdded ||
                    eventType == SystemEventTypes.CalendarEntry_Updated_ResourceList_AssignmentDeleted ||
                    eventType == SystemEventTypes.CalendarEntry_Updated_ResourceList_RequestAdded ||
                    eventType == SystemEventTypes.Document_Updated_ResourceList_AssignmentAdded ||
                    eventType == SystemEventTypes.Document_Updated_ResourceList_AssignmentDeleted ||
                    eventType == SystemEventTypes.Document_Updated_ResourceList_RequestAdded ||
                    eventType == SystemEventTypes.Issue_Created ||
                    eventType == SystemEventTypes.Issue_Updated_Forum_MessageAdded ||
                    eventType == SystemEventTypes.Issue_Updated_Manager_ManagerAdded ||
                    eventType == SystemEventTypes.Issue_Updated_Manager_ManagerDeleted ||
                    eventType == SystemEventTypes.Issue_Updated_ResourceList_AssignmentAdded ||
                    eventType == SystemEventTypes.Issue_Updated_ResourceList_AssignmentDeleted ||
                    eventType == SystemEventTypes.Issue_Updated_ResourceList_RequestAdded ||
                    eventType == SystemEventTypes.Issue_Updated_Responsible_Requested ||
                    eventType == SystemEventTypes.Issue_Updated_Responsible_Assigned ||
                    eventType == SystemEventTypes.Issue_Updated_Responsible_Resigned ||
                    eventType == SystemEventTypes.Issue_Updated_Controller_Assigned ||
                    eventType == SystemEventTypes.Issue_Updated_Controller_Resigned ||
                    eventType == SystemEventTypes.Project_Updated_ExecutiveManager_ExecutiveManagerAdded ||
                    eventType == SystemEventTypes.Project_Updated_ExecutiveManager_ExecutiveManagerDeleted ||
                    eventType == SystemEventTypes.Project_Updated_Manager_ManagerAdded ||
                    eventType == SystemEventTypes.Project_Updated_Manager_ManagerDeleted ||
                    eventType == SystemEventTypes.Project_Updated_SponsorList_SponsorAdded ||
                    eventType == SystemEventTypes.Project_Updated_SponsorList_SponsorDeleted ||
                    eventType == SystemEventTypes.Project_Updated_StakeholderList_StakeholderAdded ||
                    eventType == SystemEventTypes.Project_Updated_StakeholderList_StakeholderDeleted ||
                    eventType == SystemEventTypes.Project_Updated_TeamMemberList_TeamMemberAdded ||
                    eventType == SystemEventTypes.Project_Updated_TeamMemberList_TeamMemberDeleted ||
                    eventType == SystemEventTypes.Todo_Updated_Manager_ManagerAdded ||
                    eventType == SystemEventTypes.Todo_Updated_Manager_ManagerDeleted ||
                    eventType == SystemEventTypes.Todo_Updated_ResourceList_AssignmentAdded ||
                    eventType == SystemEventTypes.Todo_Updated_ResourceList_AssignmentDeleted ||
                    eventType == SystemEventTypes.Todo_Updated_ResourceList_RequestAdded ||
                    eventType == SystemEventTypes.Task_Updated_ResourceList_AssignmentAdded ||
                    eventType == SystemEventTypes.Task_Updated_ResourceList_AssignmentDeleted ||
                    eventType == SystemEventTypes.Task_Updated_ResourceList_RequestAdded ||
                    eventType == SystemEventTypes.User_Activated ||
                    eventType == SystemEventTypes.User_Created ||
                    eventType == SystemEventTypes.User_Created_External ||
                    eventType == SystemEventTypes.User_Created_Partner ||
                    eventType == SystemEventTypes.User_Deleted ||
                    eventType == SystemEventTypes.User_Deactivated ||
                    eventType == SystemEventTypes.Assignment_Updated_Participant_Assigned ||
                    eventType == SystemEventTypes.Assignment_Updated_Participant_Resigned
                    )
                {
                    ArrayList users = new ArrayList();

                    if (objectType == ObjectTypes.User)
                    {
                        users.Add(objectId);
                    }

                    if (relObjectType == ObjectTypes.User)
                    {
                        if (User.IsGroup(relObjectId))
                        {
                            // this method doesn't return inactive users
                            using (IDataReader reader = SecureGroup.GetListAllUsersInGroup(relObjectId, false))
                            {
                                while (reader.Read())
                                {
                                    users.Add((int)reader["UserId"]);
                                }
                            }
                        }
                        else
                        {
                            if (User.GetUserActivity(relObjectId) == User.UserActivity.Active)
                            {
                                users.Add(relObjectId);
                            }
                        }
                    }

                    foreach (int userId in users)
                    {
                        if (!processedUsers.Contains(userId))
                        {
                            AddSystemEventRecipient(eventId, userId, MessageTypes.Resource);
                            processedUsers.Add(userId);
                        }
                    }
                    if (emailTo != null)
                    {
                        AddSystemEventRecipient(eventId, MessageTypes.Resource, emailTo, emailFrom);
                    }
                }
                #endregion

                CollectAllObjectSubscribers(eventType, objectType, objectId, objectUid, processedUsers, infoRecipients);

                foreach (int userId in infoRecipients)
                {
                    if ((excludeUsers == null || !excludeUsers.Contains(userId)) && CheckRights(eventType, objectType, relObjectType, objectId, relObjectId, objectUid, userId))
                    {
                        AddSystemEventRecipient(eventId, userId, MessageTypes.Info);
                    }
                }

                _hasNewEvent = true;

                tran.Commit();
            }
        }
コード例 #9
0
        private static void SendReminder(DateTypes dateType, ObjectTypes objecType, int?objectId, Guid?objectUid, List <int> users)
        {
            // TODO: Step 0. Check Security (Not implemented yet)

            // Step 1. Calculate variables
            foreach (int userId in users)
            {
                int reminderType = 0;

                using (IDataReader reader = User.GetUserPreferences(userId))
                {
                    if (reader.Read())
                    {
                        reminderType = (int)reader["ReminderType"];
                    }
                }

                if (reminderType != 0)
                {
                    // Step 2. Get Message Template
                    ReminderTemplate tmpl = Reminder.GetMessageTemplate(dateType, User.GetUserLanguage(userId));

                    // Step 2.1. Calculate Variables
                    ArrayList vars = new ArrayList();

                    Alerts2.GetObjectVariables(objecType, objectId, objectUid, false, Reminder.GetVariables(dateType), vars);

                    // Step 3. Replace variables and GetMessage
                    Alerts2.Message msg = Reminder.GetMessage(tmpl, objectId, objectUid, objecType, userId, (VariableInfo[])vars.ToArray(typeof(VariableInfo)));

                    // Step 4. Save to log
                    using (DbTransaction tran = DbTransaction.Begin())
                    {
                        int logId = DbAlert2.MessageLogAdd(msg.Subject, msg.Body);
                        DBSystemEvents.RecipientUpdateSend(userId, (reminderType & 1) != 0, PortalConfig.UseIM && (reminderType & 2) != 0, logId);                         // IsNotifiedByEmail, IsNotifiedByIBN

                        tran.Commit();
                    }

                    #region -- Send via Email --
                    // Step 5. Send via Email
                    try
                    {
                        if ((reminderType & 1) != 0)                        //IsNotifiedByEmail
                        {
                            string body = "<html><head><meta http-equiv=Content-Type content=\"text/html; charset=utf-8\" /></head><body>" + msg.Body + "</body></html>";

                            using (DbTransaction tran = DbTransaction.Begin())
                            {
                                Alerts2.SendMessage(DeliveryType.Email, Reminder.GetAddress(DeliveryType.Email, userId), body, msg.Subject);

                                DBSystemEvents.RecipientUpdateSent(userId, (int)DeliveryType.Email, true);

                                tran.Commit();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.WriteError(ex.ToString());
                    }
                    #endregion

                    #region -- Send via IM --
                    // Step 6. Send via IM
                    try
                    {
                        if ((reminderType & 2) != 0)                        //uInfo != null && uInfo.IsNotifiedByIBN)
                        {
                            using (DbTransaction tran = DbTransaction.Begin())
                            {
                                Alerts2.SendMessage(DeliveryType.IBN, Reminder.GetAddress(DeliveryType.IBN, userId), msg.Body, msg.Subject);

                                DBSystemEvents.RecipientUpdateSent(userId, (int)DeliveryType.IBN, true);

                                tran.Commit();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.WriteError(ex.ToString());
                    }
                    #endregion
                }
            }
        }
コード例 #10
0
        public static void ProcessHandler(int handlerId, string argument, int hookId, int?objectId, Guid?objectUid, DateTime dateValue)
        {
            ObjectTypes objectType = ObjectTypes.UNDEFINED;
            DateTypes   dateType   = DateTypes.Undefined;

            if (handlerId == (int)DateTypeHandlers.SendReminder)
            {
                // Напоминать только о тех датах, которые еще не наступили.
                if (dateValue >= DateTime.UtcNow)
                {
                    bool sendReminder = false;

                    int userId = -1;
                    using (IDataReader reader = DbSchedule2.GetReminderSubscriptionByHookId(hookId))
                    {
                        if (reader.Read())
                        {
                            sendReminder = true;

                            if (reader["UserId"] != DBNull.Value)
                            {
                                userId = (int)reader["UserId"];

                                // O.R. [2010-04-01]: Don't process inactive user
                                if (User.GetUserActivity(userId) != User.UserActivity.Active)
                                {
                                    sendReminder = false;
                                }
                            }
                            objectType = (ObjectTypes)reader["ObjectTypeId"];
                            dateType   = (DateTypes)reader["DateTypeId"];
                        }
                    }

                    // Не напоминать о досрочно запущенных или досрочно завершённых объектах [2007-02-16]
                    if (sendReminder)
                    {
                        sendReminder = ConfirmNotification(objectType, dateType, objectId, objectUid);
                    }

                    if (sendReminder)
                    {
                        SubscriptionTypes subscriptionType = (SubscriptionTypes)int.Parse(argument, CultureInfo.InvariantCulture);

                        switch (subscriptionType)
                        {
                        case SubscriptionTypes.Global:
                            ProcessGlobalSubscription(hookId, dateType, objectType, objectId, objectUid);
                            break;

                        case SubscriptionTypes.Personal:
                            ProcessPersonalSubscription(hookId, dateType, userId, objectType, objectId, objectUid);
                            break;

                        case SubscriptionTypes.PersonalForObject:
                            ProcessPersonalSubscriptionForObject(hookId, dateType, userId, objectType, objectId, objectUid);
                            break;
                        }
                    }
                }
            }
            else if (handlerId == (int)DateTypeHandlers.RaiseSystemEvent)
            {
                bool raiseEvent = false;

                using (IDataReader reader = DbSchedule2.GetHook(hookId))
                {
                    if (reader.Read())
                    {
                        raiseEvent = true;

                        objectType = (ObjectTypes)reader["ObjectTypeId"];
                        dateType   = (DateTypes)reader["DateTypeId"];
                    }
                }

                if (raiseEvent)
                {
                    // Не уведомлять о досрочно запущенных или досрочно завершённых объектах [2008-07-29]
                    raiseEvent = ConfirmNotification(objectType, dateType, objectId, objectUid);

                    if (raiseEvent)
                    {
                        SystemEventTypes EventType = (SystemEventTypes)int.Parse(argument);
                        if (objectId.HasValue)
                        {
                            SystemEvents.AddSystemEvents(EventType, objectId.Value);
                        }
                        else if (objectUid.HasValue)
                        {
                            SystemEvents.AddSystemEvents(EventType, objectUid.Value);
                        }
                    }

                    if (objectType == ObjectTypes.Task)
                    {
                        Task.RecalculateAllStates(Task.GetProject(objectId.Value));
                    }
                    else if (objectType == ObjectTypes.ToDo)
                    {
                        ToDo.RecalculateState(objectId.Value);
                    }
                    else if (objectType == ObjectTypes.CalendarEntry)
                    {
                        CalendarEntry.RecalculateState(objectId.Value);
                    }
                }
            }
            else if (handlerId == (int)DateTypeHandlers.BatchAlert)
            {
                if (objectId.HasValue)
                {
                    Alerts2.SendBatch(objectId.Value, dateValue);
                }
            }
            else if (handlerId == (int)DateTypeHandlers.LdapSync)
            {
                if (objectId.HasValue)
                {
                    Ldap.Synchronize(objectId.Value, dateValue);
                }
            }
        }