示例#1
0
        private void PreparePage(SitePage sitePage, string[] permissions = null)
        {
            sitePage.Name = sitePage.Name.Trim();
            sitePage.Slug = Extensions.String.Coalesce(sitePage.Slug, sitePage.Name.CleanFileName());

            if (sitePage.HomePage)
            {
                var allpages = db.ActiveSitePages.Where(p => p.Id != sitePage.Id && p.HomePage == true).ToList();
                foreach (var page in allpages)
                {
                    page.HomePage        = false;
                    db.Entry(page).State = EntityState.Modified;
                }
            }

            Permission.Apply(db, User, RoleManager, sitePage, permissions);
        }
示例#2
0
        public async Task <ActionResult> Edit([Bind(Include = AllowedFields)] WebFile form, string[] permissions = null)
        {
            WebFile webFile = await WebFile.GetAvailableFiles(db, User, UserManager, RoleManager, !User.IsInRole(Roles.Administrators)).FindAsync(form.Id);

            if (webFile == null)
            {
                return(HttpNotFound());
            }
            if (ModelState.IsValid)
            {
                webFile.Update(form, UserTimeZoneOffset);
                db.Entry(webFile).State = EntityState.Modified;
                Permission.Apply(db, User, RoleManager, webFile, permissions);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(Auto(webFile));
        }
示例#3
0
        // GET: SitePages/Copy/5
        public async Task <ActionResult> Copy(long?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            SitePage sitePage = await db.ActiveSitePages.FindAsync(id);

            if (sitePage == null)
            {
                return(HttpNotFound());
            }
            var copy = sitePage.CreateCopy();

            Permission.Apply(db, User, RoleManager, copy, sitePage.Permissions.Select(p => p.AppliesToRole_Id));
            db.SitePages.Add(copy);
            await db.SaveChangesAsync();

            return(RedirectToAction("Edit", new { copy.Id }));
        }
示例#4
0
        private void PrepareFolder(SharedFolder sharedFolder, string[] permissions)
        {
            sharedFolder.Name = sharedFolder.Name.Trim();
            string cleanName = sharedFolder.Name.CleanFileName();
            string slug      = cleanName.ToLowerInvariant();

            if (slug != sharedFolder.Slug)
            {
                var folders = db.ActiveSharedFolders.Where(f => f.Slug.StartsWith(slug) && f.Id != sharedFolder.Id).OrderBy(f => f.Slug).ToList();
                if (folders.Count() > 0)
                {
                    int           count  = 0;
                    Func <string> suffix = () =>
                    {
                        if (sharedFolder.Id == 0)
                        {
                            count++;
                            return("_" + count);
                        }
                        else
                        {
                            return("-" + sharedFolder.Id);
                        }
                    };
                    foreach (var folder in folders)
                    {
                        if (folder.Slug.Equals(slug, StringComparison.InvariantCultureIgnoreCase))
                        {
                            slug = cleanName + suffix();
                            break;
                        }
                    }
                }
            }
            sharedFolder.Slug = slug.ToLowerInvariant();
            Permission.Apply(db, User, RoleManager, sharedFolder, permissions);
        }
示例#5
0
        public async Task <ActionResult> Create([Bind(Include = AllowedFields)] WebFile webFile, bool redir = false)
        {
            UploadResults results = new UploadResults
            {
                message = "No file upload received.",
                status  = UploadResults.Failed
            };

            try
            {
                var uploadRoles = Settings.RolesWithUploadPermission.Split(',');
                if (Roles.UserInAnyRole(User, RoleManager, uploadRoles))
                {
                    if (Request.Files.Count > 0)
                    {
                        string   defaultRoleSetting = Settings.DefaultUploadPermissions;
                        string[] defaultRoles;
                        if (!string.IsNullOrEmpty(defaultRoleSetting))
                        {
                            defaultRoles = defaultRoleSetting.Split(',');
                        }
                        else
                        {
                            defaultRoles = new string[] { RoleManager.FindByName(Roles.Users)?.Id };
                        }

                        int fileCount = Request.Files.Count;
                        for (int i = 0; i < fileCount; i++)
                        {
                            HttpPostedFileBase uploadedFile = Request.Files[i];

                            if (uploadedFile != null && uploadedFile.ContentLength > 0)
                            {
                                WebFile file = null;
                                ModelState["Name"]?.Errors?.Clear();
                                if (ImageHelper.IsImageFile(uploadedFile))
                                {
                                    file = UploadImage(uploadedFile, results);
                                }
                                else
                                if ((VideoHelper.IsVideoFile(uploadedFile) || VideoHelper.IsAudioFile(uploadedFile)))
                                {
                                    file = UploadVideoOrAudio(uploadedFile, results);
                                }
                                else
                                if (DocumentHelper.IsDocumentFile(uploadedFile))
                                {
                                    file = UploadDocument(uploadedFile, results);
                                }
                                else
                                if (IsAllowedFileType(uploadedFile))
                                {
                                    file = UploadFile(uploadedFile, results, db, HttpContext, Settings);
                                }
                                else
                                {
                                    results.status  = UploadResults.Failed;
                                    results.message = "The file format was not recognized or is not an allowed file type.";
                                }

                                if (file != null)
                                {
                                    if (webFile != null)
                                    {
                                        file.Update(webFile, UserTimeZoneOffset);
                                        webFile = null;
                                    }
                                    Permission.Apply(db, User, RoleManager, file, defaultRoles); //default permissions

                                    db.WebFiles.Add(file);
                                    await db.SaveChangesAsync();

                                    results.files.Add(file);
                                }
                            }
                        }

                        if (results.status != UploadResults.Failed)
                        {
                            results.status  = UploadResults.OK;
                            results.message = null;  //"File uploaded successfully.";
                        }
                        foreach (var wf in results.files)
                        {
                            if (!string.IsNullOrEmpty(webFile?.Name))
                            {
                                wf.Name = webFile.Name;
                            }
                            else
                            {
                                wf.Name = wf.GetFileName();
                            }
                        }
                        if (fileCount > 1)
                        {
                            SetSuccessMessage("{0} files uploaded successfully", fileCount);
                        }
                        else if (results.files.Count > 0)
                        {
                            SetSuccessMessage("{0} uploaded successfully", results.files.First().Name);
                        }
                    }
                    else
                    {
                        results.status  = UploadResults.Failed;
                        results.message = ErrorsFromModelState(ModelState) ?? results.message;
                    }
                }
                else
                {
                    throw new Exception("Permission denied");
                }
            }
            catch (Exception ex)
            {
                results.status  = UploadResults.Failed;
                results.message = ex.Message;
            }

            if (redir)
            {
                if (results.status == UploadResults.Failed)
                {
                    SetFailureMessage(results.message);
                    return(View(webFile));
                }
                else
                {
                    SetSuccessMessage(webFile.Name + " uploaded successfully!");
                    return(RedirectToAction("Index"));
                }
            }
            return(Auto(results, "Created"));
        }