Beispiel #1
0
        public static List <DocServiceParams.RecentDocument> GetRecentEditedDocument(bool forEdit, int count, string crumbsSeporator, IFileDao fileDao)
        {
            var recent = new List <DocServiceParams.RecentDocument>();

            var activity = UserActivityManager.GetUserActivities(TenantProvider.CurrentTenantID, SecurityContext.CurrentAccount.ID,
                                                                 ProductEntryPoint.ID, null, UserActivityConstants.AllActionType,
                                                                 new[] { "OpenEditorFile" }, 0, 100);

            foreach (var entryId in activity.Select(userActivity => userActivity.ContentID.Substring("file_".Length)))
            {
                if (recent.Exists(r => r.ID.Equals(entryId)))
                {
                    continue;
                }

                var fileAct = fileDao.GetFile(entryId);

                if (fileAct.RootFolderType == FolderType.TRASH)
                {
                    continue;
                }

                if (!FileUtility.UsingHtml5(fileAct.Title))
                {
                    continue;
                }

                if (!Global.GetFilesSecurity().CanRead(fileAct))
                {
                    continue;
                }

                string uri;
                if (forEdit && Global.GetFilesSecurity().CanEdit(fileAct))
                {
                    uri = CommonLinkUtility.GetFileWebEditorUrl(fileAct.ID);
                }
                else
                {
                    uri = CommonLinkUtility.GetFileWebViewerUrl(fileAct.ID);
                }

                var fileBreadCrumbs = Global.GetBreadCrumbs(fileAct.FolderID);
                recent.Add(new DocServiceParams.RecentDocument
                {
                    ID         = entryId,
                    Title      = fileAct.Title,
                    Uri        = CommonLinkUtility.GetFullAbsolutePath(uri),
                    FolderPath = string.Join(crumbsSeporator, fileBreadCrumbs.Select(folder => folder.Title).ToArray())
                });

                if (recent.Count == count)
                {
                    break;
                }
            }
            return(recent);
        }
Beispiel #2
0
        private void OutputData(string result, string reportName, Report report, ReportViewType outputFormat)
        {
            switch (outputFormat)
            {
            case ReportViewType.Html:
                reportResult.Text = result;

                var sb = new StringBuilder();
                sb.Append("<div class='report-name'>");
                sb.Append(reportName);
                sb.Append("<span class='generation-date'> (");
                sb.Append(TenantUtil.DateTimeNow().ToString(DateTimeExtension.ShortDatePattern));
                sb.Append(")</span>");
                sb.Append("</div>");
                reportFilter.Text = sb.ToString();
                break;

            case ReportViewType.Xml:
            case ReportViewType.EMail:
                if (result != null)
                {
                    var ext = outputFormat.ToString().ToLower();
                    Response.Clear();
                    Response.ContentType     = "text/" + ext + "; charset=utf-8";
                    Response.ContentEncoding = Encoding.UTF8;
                    Response.Charset         = Encoding.UTF8.WebName;
                    Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}.{1}", report.FileName, ext));
                    Response.Write(result);
                    Response.End();
                }
                break;

            case ReportViewType.Csv:
                string fileURL;

                using (var memStream = new MemoryStream(Encoding.UTF8.GetBytes(result)))
                {
                    var file = FileUploader.Exec(Files.Classes.Global.FolderMy.ToString(), report.FileName + ".csv", result.Length, memStream, true);

                    fileURL  = CommonLinkUtility.GetFileWebEditorUrl((int)file.ID);
                    fileURL += string.Format("&options={{\"delimiter\":{0},\"codePage\":{1}}}",
                                             (int)Global.ReportCsvDelimiter.Key,
                                             Encoding.UTF8.CodePage);
                }

                Response.Redirect(fileURL);

                break;
            }
        }
Beispiel #3
0
        public static string GetLink(File file)
        {
            var url = file.ViewUrl;

            if (FileUtility.CanWebView(file.Title) &&
                TenantExtra.GetTenantQuota().DocsEdition)
            {
                url = CommonLinkUtility.GetFileWebEditorUrl(file.ID);
            }

            var linkParams = Signature.Create(file.ID.ToString(), Global.GetDocDbKey());

            url += "&" + CommonLinkUtility.DocShareKey + "=" + HttpUtility.UrlEncode(linkParams);

            return(CommonLinkUtility.GetFullAbsolutePath(url));
        }
Beispiel #4
0
        private static String SaveCSVFileInMyDocument(String title, String data)
        {
            string fileURL;

            using (var memStream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
            {
                var file = FileUploader.Exec(Files.Classes.Global.FolderMy.ToString(), title, data.Length, memStream, true);

                fileURL = CommonLinkUtility.GetFileWebEditorUrl((int)file.ID);
            }
            fileURL += string.Format("&options={{\"delimiter\":{0},\"codePage\":{1}}}",
                                     (int)FileUtility.CsvDelimiter.Comma,
                                     Encoding.UTF8.CodePage);

            return(fileURL);
        }
Beispiel #5
0
        private static void CreateFile(HttpContext context)
        {
            var folderId = context.Request[CommonLinkUtility.FolderId];

            if (string.IsNullOrEmpty(folderId))
            {
                folderId = Global.FolderMy.ToString();
            }
            Folder folder;

            using (var folderDao = Global.DaoFactory.GetFolderDao())
            {
                folder = folderDao.GetFolder(folderId);
            }
            if (folder == null)
            {
                throw new HttpException((int)HttpStatusCode.NotFound, FilesCommonResource.ErrorMassage_FolderNotFound);
            }
            if (!Global.GetFilesSecurity().CanCreate(folder))
            {
                throw new HttpException((int)HttpStatusCode.Forbidden, FilesCommonResource.ErrorMassage_SecurityException_Create);
            }

            File file;
            var  fileUri   = context.Request[CommonLinkUtility.FileUri];
            var  fileTitle = context.Request[CommonLinkUtility.FileTitle];

            if (!string.IsNullOrEmpty(fileUri))
            {
                file = CreateFileFromUri(folder, fileUri, fileTitle);
            }
            else
            {
                var template = context.Request[UrlConstant.Template];
                var docType  = context.Request[UrlConstant.DocumentType];
                file = CreateFileFromTemplate(folder, template, fileTitle, docType);
            }

            FileMarker.MarkAsNew(file);

            context.Response.Redirect(
                (context.Request["openfolder"] ?? "").Equals("true")
                    ? PathProvider.GetFolderUrl(file.FolderID)
                    : CommonLinkUtility.GetFileWebEditorUrl(file.ID));
        }
        private static void CreateFile(HttpContext context)
        {
            var template  = context.Request[UrlConstant.Template];
            var fileTitle = context.Request[UrlConstant.FileTitle] ?? context.Request["title"];

            using (var fileDao = Global.DaoFactory.GetFileDao())
                using (var folderDao = Global.DaoFactory.GetFolderDao())
                {
                    var folder = folderDao.GetFolder(Global.FolderMy);
                    if (folder == null)
                    {
                        throw new HttpException((int)HttpStatusCode.NotFound, FilesCommonResource.ErrorMassage_FolderNotFound);
                    }
                    if (!Global.GetFilesSecurity().CanCreate(folder))
                    {
                        throw new HttpException((int)HttpStatusCode.Forbidden, FilesCommonResource.ErrorMassage_SecurityException_Create);
                    }

                    var storeTemp = Global.GetStoreTemplate();

                    var lang = CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).GetCulture().TwoLetterISOLanguageName;

                    var templatePath = DocumentUtils.TemplateDocPath + lang + "/";
                    if (!storeTemp.IsDirectory(templatePath))
                    {
                        templatePath = DocumentUtils.TemplateDocPath + "default/";
                    }

                    string       templateName;
                    const string fileExt = ".docx";

                    if (string.IsNullOrEmpty(template))
                    {
                        //For ThirdParty use original file type
                        templateName = ("imaginary" + (FileUtility.UsingHtml5(fileExt) ? "html5" : string.Empty))
                                       + fileExt;

                        templatePath = templateName;
                    }
                    else
                    {
                        templateName  = template + fileExt;
                        templatePath += templateName;

                        if (!storeTemp.IsFile(templatePath))
                        {
                            templatePath  = DocumentUtils.TemplateDocPath + "default/";
                            templatePath += templateName;
                        }
                    }

                    if (string.IsNullOrEmpty(fileTitle))
                    {
                        fileTitle = templateName;
                    }
                    else
                    {
                        fileTitle = fileTitle + fileExt;
                    }
                    var file = new File
                    {
                        Title         = Global.ReplaceInvalidCharsAndTruncate(fileTitle),
                        ContentLength = storeTemp.GetFileSize(templatePath),
                        ContentType   = MimeMapping.GetMimeMapping(fileTitle),
                        ConvertedType = ".zip",
                        FolderID      = folder.ID
                    };

                    using (var stream = storeTemp.IronReadStream("", templatePath, 10))
                    {
                        file = fileDao.SaveFile(file, stream);
                    }

                    FilesActivityPublisher.CreateFile(fileDao.GetFile(file.ID));

                    context.Response.Redirect(CommonLinkUtility.GetFileWebEditorUrl(file.ID));
                }
        }
        private void PageLoad()
        {
            var editPossible = !RequestEmbedded && !IsMobile;
            var isExtenral   = false;

            File file;
            var  fileUri = string.Empty;

            if (!ItsTry)
            {
                try
                {
                    if (string.IsNullOrEmpty(RequestFileUrl))
                    {
                        _fileNew = !string.IsNullOrEmpty(Request[UrlConstant.New]) && Request[UrlConstant.New] == "true";

                        var ver = string.IsNullOrEmpty(Request[CommonLinkUtility.Version]) ? -1 : Convert.ToInt32(Request[CommonLinkUtility.Version]);

                        file = DocumentServiceHelper.GetParams(RequestFileId, ver, RequestShareLinkKey, _fileNew, editPossible, !RequestView, out _docParams);

                        _fileNew = file.Version == 1 && file.ConvertedType != null && _fileNew && file.CreateOn == file.ModifiedOn;
                    }
                    else
                    {
                        isExtenral = true;

                        fileUri = RequestFileUrl;
                        var fileTitle = Request[CommonLinkUtility.FileTitle];
                        if (string.IsNullOrEmpty(fileTitle))
                        {
                            fileTitle = Path.GetFileName(HttpUtility.UrlDecode(fileUri)) ?? "";
                        }

                        if (CoreContext.Configuration.Standalone)
                        {
                            try
                            {
                                var webRequest = WebRequest.Create(RequestFileUrl);
                                using (var response = webRequest.GetResponse())
                                    using (var responseStream = new ResponseStream(response))
                                    {
                                        fileUri = DocumentServiceConnector.GetExternalUri(responseStream, MimeMapping.GetMimeMapping(fileTitle), "new");
                                    }
                            }
                            catch (Exception error)
                            {
                                Global.Logger.Error("Cannot receive external url for \"" + RequestFileUrl + "\"", error);
                            }
                        }

                        file = new File
                        {
                            ID    = fileUri.GetHashCode(),
                            Title = Global.ReplaceInvalidCharsAndTruncate(fileTitle)
                        };

                        file = DocumentServiceHelper.GetParams(file, true, true, true, false, false, false, out _docParams);
                        _docParams.CanEdit = editPossible && !CoreContext.Configuration.Standalone;
                        _editByUrl         = true;

                        _docParams.FileUri = fileUri;
                    }
                }
                catch (Exception ex)
                {
                    _errorMessage = ex.Message;
                    return;
                }
            }
            else
            {
                FileType tryType;
                try
                {
                    tryType = (FileType)Enum.Parse(typeof(FileType), Request[CommonLinkUtility.TryParam]);
                }
                catch
                {
                    tryType = FileType.Document;
                }

                var fileTitle = "Demo";
                fileTitle += FileUtility.InternalExtension[tryType];

                var relativeUri = string.Format(CommonLinkUtility.FileHandlerPath + UrlConstant.ParamsDemo, tryType);
                fileUri = new Uri(Request.Url, relativeUri).ToString();

                file = new File
                {
                    ID    = Guid.NewGuid(),
                    Title = Global.ReplaceInvalidCharsAndTruncate(fileTitle)
                };

                file = DocumentServiceHelper.GetParams(file, true, true, true, editPossible, editPossible, true, out _docParams);

                _docParams.FileUri = fileUri;
                _editByUrl         = true;
            }

            if (_docParams.ModeWrite && FileConverter.MustConvert(file))
            {
                try
                {
                    file = FileConverter.ExecDuplicate(file, RequestShareLinkKey);
                }
                catch (Exception e)
                {
                    _docParams    = null;
                    _errorMessage = e.Message;
                    return;
                }

                var comment = "#message/" + HttpUtility.UrlEncode(FilesCommonResource.CopyForEdit);

                Response.Redirect(CommonLinkUtility.GetFileWebEditorUrl(file.ID) + comment);
                return;
            }

            Title = HeaderStringHelper.GetPageTitle(file.Title);

            if (string.IsNullOrEmpty(_docParams.FolderUrl))
            {
                _docParams.FolderUrl = Request[CommonLinkUtility.FolderUrl] ?? "";
            }
            if (MobileDetector.IsRequestMatchesMobile(Context.Request.UserAgent, true))
            {
                _docParams.FolderUrl = string.Empty;
            }

            if (RequestEmbedded)
            {
                _docParams.Type = DocumentServiceParams.EditorType.Embedded;

                var shareLinkParam = "&" + CommonLinkUtility.DocShareKey + "=" + RequestShareLinkKey;
                _docParams.ViewerUrl   = CommonLinkUtility.GetFullAbsolutePath(CommonLinkUtility.FilesBaseAbsolutePath + CommonLinkUtility.EditorPage + "?" + CommonLinkUtility.Action + "=view" + shareLinkParam);
                _docParams.DownloadUrl = CommonLinkUtility.GetFullAbsolutePath(CommonLinkUtility.FileHandlerPath + "?" + CommonLinkUtility.Action + "=download" + shareLinkParam);
                _docParams.EmbeddedUrl = CommonLinkUtility.GetFullAbsolutePath(CommonLinkUtility.FilesBaseAbsolutePath + CommonLinkUtility.EditorPage + "?" + CommonLinkUtility.Action + "=embedded" + shareLinkParam);
            }
            else
            {
                _docParams.Type = IsMobile ? DocumentServiceParams.EditorType.Mobile : DocumentServiceParams.EditorType.Desktop;

                if (FileSharing.CanSetAccess(file))
                {
                    _docParams.SharingSettingsUrl = CommonLinkUtility.GetFullAbsolutePath(CommonLinkUtility.FilesBaseAbsolutePath + "share.aspx" + "?" + CommonLinkUtility.FileId + "=" + file.ID + "&" + CommonLinkUtility.FileTitle + "=" + HttpUtility.UrlEncode(file.Title));
                }
            }

            if (!isExtenral)
            {
                _docKeyForTrack = DocumentServiceHelper.GetDocKey(file.ID, -1, DateTime.MinValue);

                if (!ItsTry)
                {
                    FileMarker.RemoveMarkAsNew(file);
                }
            }

            if (_docParams.ModeWrite)
            {
                _tabId       = FileLocker.Add(file.ID, _fileNew);
                _lockVersion = FileLocker.LockVersion(file.ID);

                if (ItsTry)
                {
                    AppendAuthControl();
                }
            }
            else
            {
                _docParams.LinkToEdit = _editByUrl
                                            ? CommonLinkUtility.GetFullAbsolutePath(string.Format(CommonLinkUtility.FileWebEditorExternalUrlString, HttpUtility.UrlEncode(fileUri), file.Title))
                                            : FileConverter.MustConvert(_docParams.File)
                                                  ? CommonLinkUtility.GetFullAbsolutePath(CommonLinkUtility.GetFileWebEditorUrl(file.ID))
                                                  : string.Empty;
            }

            if (CoreContext.Configuration.YourDocsDemo && IsMobile)
            {
                _docParams.CanEdit = false;
            }
        }