internal async Task <Guid> Save()
        {
            UserHelperFunctions userHelper = new UserHelperFunctions()
            {
                _context         = _context,
                _emailService    = _emailService,
                _securityOptions = _securityOptions,
                _user            = _user
            };

            userHelper.Populate();

            bool isNew = false;

            var folder = _context.Folders.Where(x => x.FolderID == FolderID).FirstOrDefault();

            if (folder == null)
            {
                folder          = new Folder();
                isNew           = true;
                folder.FolderID = Guid.NewGuid();
            }

            folder.Description    = Description;
            folder.ParentFolderID = (SelectedParentFolderID != Guid.Empty.ToString() && !string.IsNullOrEmpty(SelectedParentFolderID)) ? Guid.Parse(SelectedParentFolderID) : (Guid?)null;

            if (isNew)
            {
                _context.Add(folder);

                //Add logged in user as a share user
                var folderUsr = new FolderUser()
                {
                    AllowDelete  = true,
                    AllowEdit    = true,
                    FolderID     = folder.FolderID,
                    FolderUserID = Guid.NewGuid(),
                    UserID       = userHelper.loggedInUserID
                };

                _context.Add(folderUsr);
            }
            else
            {
                _context.Update(folder);
            }

            await _context.SaveChangesAsync();

            FolderID = folder.FolderID;

            return(FolderID);
        }
        internal async Task <Guid> Save()
        {
            UserHelperFunctions userHelper = new UserHelperFunctions()
            {
                _context         = _context,
                _emailService    = _emailService,
                _securityOptions = _securityOptions,
                _user            = _user
            };

            userHelper.Populate();

            bool isNew = false;

            var folderUser = _context.FolderUsers.Where(x => x.FolderUserID == FolderUserID).FirstOrDefault();

            if (folderUser == null)
            {
                folderUser = new FolderUser();
                isNew      = true;
                folderUser.FolderUserID = Guid.NewGuid();
                folderUser.FolderID     = FolderID;
            }

            folderUser.UserID      = Guid.Parse(SelectedUserID);
            folderUser.AllowDelete = AllowDelete;
            folderUser.AllowEdit   = AllowEdit;

            if (isNew)
            {
                _context.Add(folderUser);
            }
            else
            {
                _context.Update(folderUser);
            }

            await _context.SaveChangesAsync();

            FolderUserID = folderUser.FolderUserID;

            return(FolderUserID);
        }
Esempio n. 3
0
 // get or create a Folder by name for given user
 public Folder GetOrCreateFolder(User user, string name, Guid itemTypeID)
 {
     try
     {   // get the folder by name for user
         if (Folders.Any(f => f.UserID == user.ID && f.Name == name))
         {
             return(Folders.Single(f => f.UserID == user.ID && f.Name == name));
         }
         else
         {   // create the folder with given name and itemTypeID for user
             var folderUser = new FolderUser()
             {
                 ID = Guid.NewGuid(), FolderID = Guid.NewGuid(), UserID = user.ID, PermissionID = BuiltSteady.Zaplify.Shared.Entities.Permissions.Full
             };
             var folder = new Folder()
             {
                 ID          = folderUser.FolderID,
                 SortOrder   = 0,
                 Name        = name,
                 UserID      = user.ID,
                 ItemTypeID  = itemTypeID,
                 Items       = new List <Item>(),
                 FolderUsers = new List <FolderUser>()
                 {
                     folderUser
                 }
             };
             Folders.Add(folder);
             SaveChanges();
             TraceLog.TraceInfo(string.Format("Created folder named '{0}' for user '{1}'", name, user.Name));
             return(folder);
         }
     }
     catch (Exception ex)
     {
         TraceLog.TraceException(string.Format("Could not find or create folder named '{0}' for user '{1}'", name, user.Name), ex);
         return(null);
     }
 }
Esempio n. 4
0
        public HttpResponseMessageWrapper <Folder> InsertFolder(HttpRequestMessage req)
        {
            Operation      operation = null;
            HttpStatusCode code      = AuthenticateUser(req);

            if (code != HttpStatusCode.OK)
            {   // user not authenticated
                return(ReturnResult <Folder>(req, operation, code));
            }

            Folder clientFolder = null;

            code = ProcessRequestBody <Folder>(req, out clientFolder, out operation);
            if (code != HttpStatusCode.OK)  // error encountered processing body
            {
                return(ReturnResult <Folder>(req, operation, code));
            }

            // default ItemTypeID to Task if not set
            if (clientFolder.ItemTypeID == null || clientFolder.ItemTypeID == Guid.Empty)
            {
                clientFolder.ItemTypeID = SystemItemTypes.Task;
            }

            // this operation isn't meant to do more than just insert the new folder
            // therefore make sure items collection is empty
            if (clientFolder.Items != null)
            {
                clientFolder.Items.Clear();
            }

            // if the current user isn't in the FolderUsers collection, add it now (must have at least one FolderUser)
            bool addFolderUser = false;

            if (clientFolder.FolderUsers == null || clientFolder.FolderUsers.Count < 1)
            {
                addFolderUser = true;
            }
            else
            {
                var folderUsers = clientFolder.FolderUsers.Where <FolderUser>(gu => gu.UserID == clientFolder.UserID);
                if (folderUsers == null || folderUsers.Count() < 1)
                {
                    addFolderUser = true;
                }
            }
            if (addFolderUser)
            {
                FolderUser fu = new FolderUser()
                {
                    ID           = Guid.NewGuid(),
                    UserID       = clientFolder.UserID,
                    FolderID     = clientFolder.ID,
                    PermissionID = 3 /* full */
                };
                if (clientFolder.FolderUsers == null)
                {
                    clientFolder.FolderUsers = new List <FolderUser>();
                }
                clientFolder.FolderUsers.Add(fu);
            }

            try
            {
                var folder = this.StorageContext.Folders.Add(clientFolder);
                if (folder == null || this.StorageContext.SaveChanges() < 1)
                {
                    TraceLog.TraceError("Internal Server Error (database operation did not succeed)");
                    return(ReturnResult <Folder>(req, operation, HttpStatusCode.InternalServerError));
                }
                else
                {
                    TraceLog.TraceInfo("Created");
                    return(ReturnResult <Folder>(req, operation, folder, HttpStatusCode.Created));
                }
            }
            catch (Exception ex)
            {
                // check for the condition where the folder is already in the database
                // in that case, return 202 Accepted; otherwise, return 409 Conflict
                try
                {
                    var dbFolder = this.StorageContext.Folders.Single(g => g.ID == clientFolder.ID);
                    if (dbFolder.Name == clientFolder.Name &&
                        dbFolder.UserID == clientFolder.UserID)
                    {
                        TraceLog.TraceInfo("Accepted, entity exists : Exception[" + ex.Message + "]");
                        return(ReturnResult <Folder>(req, operation, dbFolder, HttpStatusCode.Accepted));
                    }
                    else
                    {
                        TraceLog.TraceException("Conflict, entity in database did not match", ex);
                        return(ReturnResult <Folder>(req, operation, HttpStatusCode.Conflict));
                    }
                }
                catch (Exception e)
                {
                    // folder not inserted - return 409 Conflict
                    TraceLog.TraceException(String.Format("Conflict, entity was not in database : Exception[{0}]", ex.Message), e);
                    return(ReturnResult <Folder>(req, operation, HttpStatusCode.Conflict));
                }
            }
        }