Ejemplo n.º 1
0
        private void SaveProjects(BaseCamp basecampManager)
        {
            var projects = basecampManager.Projects;
            var step = 50.0 / projects.Count();
            var projectEngine = _engineFactory.GetProjectEngine();
            var participantEngine = _engineFactory.GetParticipantEngine();
            foreach (var project in projects.Where(x => _withClosed ? true : x.Status == "active"))
            {
                try
                {
                    Status.LogInfo(string.Format(SettingsResource.ImportProjectStarted, project.Name));
                    Status.ProjectProgress += step;
                    var newProject = new Project()
                                             {
                                                 Status = project.Status == "active" ? ProjectStatus.Open : ProjectStatus.Closed,
                                                 Title = ReplaceLineSeparator(project.Name),
                                                 Description = project.Description,
                                                 Responsible = _initiatorId,
                                                 Private = true
                                             };

                    projectEngine.SaveOrUpdate(newProject, true);
                    Participant prt = participantEngine.GetByID(newProject.Responsible);
                    projectEngine.AddToTeam(newProject, prt, true);

                    foreach (var wrapper in
                        project.People.SelectMany(user => NewUsersID.Where(wrapper => user.ID == wrapper.inBasecamp)))
                    {
                        prt = participantEngine.GetByID(wrapper.inProjects);
                        projectEngine.AddToTeam(newProject, prt, true);
                        
                        //check permission
                        var user = project.People.ToList().Find(p => p.ID == wrapper.inBasecamp);
                        if (user!=null)
                        {
                            if (!user.HasAccessToNewProjects)
                            {
                                switch (user.CanPost)
                                {
                                    case 1:
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Messages, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Files, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Tasks, false);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Milestone, false);
                                        break;
                                    case 2:
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Messages, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Files, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Tasks, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Milestone, false);
                                        break;
                                    case 3:
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Messages, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Files, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Tasks, true);
                                        projectEngine.SetTeamSecurity(newProject, prt, ProjectTeamSecurity.Milestone, true);
                                        break;
                                }
                            }
                        }
                    }
                    NewProjectsID.Add(new ProjectIDWrapper() { inBasecamp = project.ID, inProjects = newProject.ID });
                }
                catch (Exception e)
                {
                    Status.LogError(string.Format(SettingsResource.FailedToSaveProject, project.Name), e);
                    LogError(string.Format("project '{0}' failed", project.Name), e);
                    NewProjectsID.RemoveAll(x => x.inBasecamp == project.ID);
                }

            }

            //Select only suceeded projects
            var projectsToProcess = projects.Where(x => NewProjectsID.Count(y => y.inBasecamp == x.ID) > 0).ToList();
            step = 50.0 / projectsToProcess.Count;
            foreach (var project in projectsToProcess)
            {
                Status.LogInfo(string.Format(SettingsResource.ImportProjectDataStarted, project.Name));

                Status.ProjectProgress += step;
                SaveMilestones(project.Milestones);

                var messages = project.RecentMessages;
                foreach (var message in messages)
                {
                    SaveMessages(message);
                }

                var todoLists = project.ToDoLists;
                foreach (var todoList in todoLists)
                {
                    SaveTasks(todoList);
                }
                SaveFileCategories(project.Categories);
                SaveTimeSpends(project.TimeEntries);
                Attachments.AddRange(project.Attachments);

            }
        }
Ejemplo n.º 2
0
        private void SaveFiles(BaseCamp basecampManeger, IEnumerable<IAttachment> attachments)
        {
            var step = 100.0 / attachments.Count();

            Status.LogInfo(string.Format(SettingsResource.ImportFileStarted, attachments.Count()));

            //select last version
            foreach (var attachment in attachments.GroupBy(a => a.Collection).Select(g => g.OrderByDescending(a => a.Vers).FirstOrDefault()))
            {
                Status.FileProgress += step;
                try
                {
                    HttpWebRequest HttpWReq = basecampManeger.Service.GetRequest(attachment.DownloadUrl);
                    using (HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse())
                    {
                        if (attachment.ByteSize > SetupInfo.MaxUploadSize) break;

                        var file = new ASC.Files.Core.File();
                        file.FolderID = attachment.CategoryID != -1 ? FindFileCategory(attachment.CategoryID) : FileEngine2.GetRoot(FindProject(attachment.ProjectID));
                        file.Title = attachment.Name;
                        file.ContentLength = attachment.ByteSize;
                        file.ContentType = MimeMapping.GetMimeMapping(attachment.Name);
                        file.CreateBy = FindUser(attachment.AuthorID);
                        file.CreateOn = attachment.CreatedOn.ToUniversalTime();
                        if (file.Title.LastIndexOf('\\') != -1) file.Title = file.Title.Substring(file.Title.LastIndexOf('\\') + 1);

                        file = FileEngine2.SaveFile(file, HttpWResp.GetResponseStream());

                        if ("Post".Equals(attachment.OwnerType,StringComparison.OrdinalIgnoreCase) )
                        {
                            try
                            {
                                var messageId = FindMessage(attachment.OwnerID);
                                FileEngine2.AttachFileToMessage(messageId, file.ID);//It's not critical 
                            }
                            catch (Exception e)
                            {
                                LogError(string.Format("not critical. attaching file '{0}' to message  failed", attachment.Name), e);
                            }
                        }

                        NewFilesID.Add(new FileIDWrapper
                        {
                            inBasecamp = attachment.ID,
                            inProjects = file.ID,
                            version = attachment.Vers,
                            collection = attachment.Collection
                        });
                    }
                }
                catch (Exception e)
                {
                    try
                    {
                        Status.LogError(string.Format(SettingsResource.FailedToSaveFile, attachment.Name), e);
                        LogError(string.Format("file '{0}' failed", attachment.Name), e);
                        NewFilesID.RemoveAll(x => x.inBasecamp == attachment.ID && x.version == attachment.Vers);
                    }
                    catch (Exception ex)
                    {
                        LogError(string.Format("file remove after error failed"), ex);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void SaveUsers(BaseCamp basecampManager)
        {
            var employees = basecampManager.People;
            var step = 100.0 / employees.Count();
            foreach (var person in employees.Where(x => _withClosed ? true : !x.Deleted))
            {
                try
                {

                    Status.UserProgress += step;
                    Guid userID = FindUserByEmail(person.EmailAddress);

                    if (userID.Equals(Guid.Empty))
                    {
                        UserInfo userInfo = new UserInfo()
                        {
                            Email = person.EmailAddress,
                            FirstName = person.FirstName,
                            LastName = person.LastName,
                            Title = person.Title,
                            Status = person.Deleted ? EmployeeStatus.Terminated : EmployeeStatus.Active,
                        };

                        if (!string.IsNullOrEmpty(person.PhoneNumberMobile))
                            userInfo.AddSocialContact(SocialContactsManager.ContactType_mobphone, person.PhoneNumberMobile);
                        if (!string.IsNullOrEmpty(person.PhoneNumberHome))
                            userInfo.AddSocialContact(SocialContactsManager.ContactType_phone, person.PhoneNumberHome);
                        if (!string.IsNullOrEmpty(person.PhoneNumberOffice))
                            userInfo.AddSocialContact(SocialContactsManager.ContactType_phone, person.PhoneNumberOffice);
                        if (!string.IsNullOrEmpty(person.PhoneNumberFax))
                            userInfo.AddSocialContact(SocialContactsManager.ContactType_phone, person.PhoneNumberFax);
                        if (!string.IsNullOrEmpty(person.ImHandle))
                            switch (person.ImService)
                            {
                                case "MSN":
                                    userInfo.AddSocialContact(SocialContactsManager.ContactType_msn, person.ImHandle);
                                    break;
                                case "ICQ":
                                    userInfo.AddSocialContact(SocialContactsManager.ContactType_icq, person.ImHandle);
                                    break;
                                case "Yahoo":
                                    userInfo.AddSocialContact(SocialContactsManager.ContactType_yahoo, person.ImHandle);
                                    break;
                                case "Jabber":
                                    userInfo.AddSocialContact(SocialContactsManager.ContactType_jabber, person.ImHandle);
                                    break;
                                case "Skype":
                                    userInfo.AddSocialContact(SocialContactsManager.ContactType_skype, person.ImHandle);
                                    break;
                                case "Google":
                                    userInfo.AddSocialContact(SocialContactsManager.ContactType_gmail, person.ImHandle);
                                    break;
                            }

                        var newUserInfo = UserManagerWrapper.AddUser(userInfo, UserManagerWrapper.GeneratePassword(),false,!_disableNotifications);
                        if (person.Administrator)
                            CoreContext.UserManager.AddUserIntoGroup(newUserInfo.ID, ASC.Core.Users.Constants.GroupAdmin.ID);
                        NewUsersID.Add(new UserIDWrapper() { inBasecamp = person.ID, inProjects = newUserInfo.ID });

                        //save user avatar
                        const string emptyAvatar = "http://asset1.37img.com/global/missing/avatar.png?r=3";//TODO:?!!! Wtf??!!
                        if (person.AvatarUrl != emptyAvatar)
                            UserPhotoManager.SaveOrUpdatePhoto(newUserInfo.ID, StreamFile(person.AvatarUrl));
                    }
                    else
                    {
                        NewUsersID.Add(new UserIDWrapper() { inBasecamp = person.ID, inProjects = userID });
                    }
                }
                catch (Exception e)
                {
                    Status.LogError(string.Format(SettingsResource.FailedToSaveUser, person.EmailAddress), e);
                    LogError(string.Format("user '{0}' failed", person.EmailAddress), e);
                    NewUsersID.RemoveAll(x => x.inBasecamp == person.ID);
                }
            }
        }