Compare commits

..

642 Commits

Author SHA1 Message Date
985f96228f feat(nodejs): removed directUrl 2024-04-16 15:39:44 +07:00
e89eee7e28 Merge pull request #560 from ONLYOFFICE/bump-some-gems
build(ruby): bump gem versions as directed by dependabot
2024-04-09 11:20:35 +03:00
6a4b79fb54 build(ruby): bump gem versions as directed by dependabot 2024-04-05 17:39:48 +07:00
b1dd965590 Merge pull request #559 from ONLYOFFICE/fix/nodejs-dependencies-overrides
build(nodejs): add overrides in package.json
2024-04-05 10:25:35 +03:00
208bf086d8 Merge pull request #558 from ONLYOFFICE/feature/nodejs-navbar-update
feature/nodejs navbar update
2024-04-05 10:18:19 +03:00
ebb1179190 build(nodejs): add overrides in package.json 2024-04-04 17:32:09 +07:00
3375315cc0 feature(nodejs): show navigation bar at top even if there are no files in user directory 2024-04-04 13:08:47 +05:00
a070b6e82b nodejs: rename back (eda1876f59) 2024-04-03 14:27:57 +03:00
43d260cd7a Merge pull request #534 from ONLYOFFICE/feature/nodejs-forced-conversion
Feature/nodejs forced conversion
2024-04-03 14:05:24 +03:00
14bb9fc8a4 Merge pull request #556 from ONLYOFFICE/fix/wopi-mobile-default-action
fix(nodejs): mobileEdit default action for mobile wopi page. Fix Bug 65920
2024-04-03 13:07:02 +03:00
57ca15153f Merge pull request #551 from ONLYOFFICE/feature/fetching-formats
Feature/fetching formats
2024-04-03 12:31:53 +03:00
bbde4dc87b Merge pull request #525 from ONLYOFFICE/nodejs-update-dependencies
build(nodejs): updated dependencies
2024-04-03 12:19:33 +03:00
5b46195f72 fix(nodejs): mobileEdit default action for mobile wopi page. Fix Bug 65920 2024-04-02 12:55:33 +07:00
81c94c9fbd refactor(nodejs): load formats script and remove redundant variables 2024-04-01 12:24:14 +05:00
cc3c640868 refactor: merge format and format-manager files into formats file 2024-04-01 12:21:18 +05:00
20e6664a6b nodejs: absolute url in request to discovery (1e72167e7d)
Revert "nodejs: absolute host is not needed with urllib" (2460f2c7ac)
2024-03-28 13:35:50 +03:00
61af52a534 nodejs: fix favicon on wopi action 2024-03-28 10:53:12 +03:00
6236f90a50 Merge pull request #554 from ONLYOFFICE/feature/for-bug-59054
Feature/for bug 59054
2024-03-27 13:00:27 +03:00
5118352714 nodejs: debug mobile editors opening (Fix Bug 59054) 2024-03-27 12:57:58 +03:00
aa5a660001 nodejs: fix wopi editor size (Fix Bug 59054) 2024-03-27 12:57:52 +03:00
bf1f987333 nodejs: wopi refactoring 2024-03-27 12:56:08 +03:00
f1f834fb0c refactor: create and use new method for finding formats by extension 2024-03-26 17:57:52 +05:00
53c3e97b5c fix(nodejs): linter offence 2024-03-25 14:25:03 +05:00
eda1876f59 refactor(nodejs): rename convext variable and remove redundant internalext variable 2024-03-25 14:18:55 +05:00
64eab6c4a2 refactor(nodejs): add flag for keeping original file and replace conditional expression with it 2024-03-25 14:09:36 +05:00
acb9a0e4c9 refactor(java-spring): add formatslist dto object and replace jsonobject with it 2024-03-25 12:51:13 +05:00
909f638a92 Merge pull request #552 from ONLYOFFICE/fix/nodejs-wopi-putfile
fix(nodejs): handle document creation in putFile. Fix Bug 66817
2024-03-22 10:02:57 +03:00
6d28e3f8d8 Merge branch 'release/v8.1.0' into develop
# Conflicts:
#	CHANGELOG.md
2024-03-21 14:23:41 +03:00
1b8f60d5dd nodejs: update formats 2024-03-21 14:21:29 +03:00
0414319893 nodejs: fill permission in embedded mode 2024-03-21 14:05:31 +03:00
12ad0d9e7e fix(nodejs): handle document creation in putFile. Fix Bug 66817 2024-03-21 17:18:58 +07:00
f3b35a878c refactor(java-spring): move formats method to indexcontroller and change return type to responseentity 2024-03-21 13:23:31 +05:00
c712f596e1 Merge remote-tracking branch 'remotes/origin/release/v8.1.0' into develop
# Conflicts:
#	CHANGELOG.md
2024-03-20 12:52:55 +03:00
ad39fb7c19 nodejs: wopi formsubmit icon
# Conflicts:
#	CHANGELOG.md
2024-03-20 12:51:24 +03:00
7d2eb086ce Merge pull request #545 from ONLYOFFICE/feature/delete-all-files
Feature/delete all files
2024-03-20 11:01:40 +03:00
0a61708f67 Merge remote-tracking branch 'remotes/origin/develop' into feature/delete-all-files
# Conflicts:
#	CHANGELOG.md
2024-03-20 10:58:41 +03:00
389198aec6 Merge pull request #544 from ONLYOFFICE/feature/auto-conversion-error
Feature/auto conversion error
2024-03-20 10:02:53 +03:00
0d302ee8f6 nodejs: error message when error:1 2024-03-19 18:06:43 +03:00
d3a548bf3f fix(ruby): conversion error code to integer 2024-03-19 17:19:48 +07:00
fadae60e89 fix: linter offenses 2024-03-19 13:43:17 +05:00
426b15b8f1 Merge remote-tracking branch 'origin/develop' into feature/fetching-formats 2024-03-19 13:01:48 +05:00
601146c847 refactor(nodejs): change formats retrieval method on frontend 2024-03-19 12:59:54 +05:00
c4980c19e7 Revert "docxf and oform since v7.0"
This reverts commit beb9885b03.

# Conflicts:
#	web/documentserver-example/php/doceditor.php
2024-03-18 18:24:47 +03:00
0bfb036be6 refactor(csharp-mvc): change formats retrieval method on frontend 2024-03-18 18:03:10 +05:00
88b36049d2 refactor(csharp): change formats retrieval method on frontend 2024-03-18 18:02:29 +05:00
f1a1ec15ad Merge branch 'release/v8.1.0' into develop
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/nodejs/app.js
#	web/documentserver-example/nodejs/helpers/users.js
2024-03-18 14:38:55 +03:00
495ba9814f nodejs: close editor
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/nodejs/app.js
#	web/documentserver-example/nodejs/helpers/users.js
2024-03-18 14:35:26 +03:00
558365325c nodejs: format max length
# Conflicts:
#	web/documentserver-example/nodejs/helpers/users.js
2024-03-18 14:34:52 +03:00
683f1d33c4 nodejs: close editor 2024-03-18 14:30:25 +03:00
e8c98ba12a nodejs: format max length 2024-03-18 14:28:30 +03:00
e389cf41b8 fix(ruby): linter offence 2024-03-18 16:27:59 +05:00
80291baa40 goback: change state for users (408d80fff6) 2024-03-18 14:21:12 +03:00
b9113f93f6 fix: linter offenses 2024-03-18 16:03:00 +05:00
af778a8636 fix(ruby): linter offenses 2024-03-18 15:26:22 +05:00
47f4f022aa Merge remote-tracking branch 'remotes/origin/develop' into feature/delete-all-files
# Conflicts:
#	CHANGELOG.md
2024-03-15 16:48:58 +03:00
b2202111ac fix changelog 2024-03-15 16:47:29 +03:00
1da215b1eb Merge remote-tracking branch 'remotes/origin/develop' into feature/auto-conversion-error
# Conflicts:
#	CHANGELOG.md
2024-03-15 16:46:37 +03:00
8c8d14b48c refactor(java-spring): change formats retrieval method on frontend 2024-03-15 15:50:14 +05:00
5217a64e83 refactor(java): change formats retrieval method on frontend 2024-03-15 15:38:14 +05:00
456789191d build(nodejs): returned some dependencies versions with breaking changes 2024-03-15 17:33:00 +07:00
e1e9efa305 refactor(ruby): change formats retrieval method on frontend 2024-03-15 15:29:58 +05:00
a3016f3f96 Merge remote-tracking branch 'remotes/origin/master' into develop 2024-03-15 13:18:37 +03:00
333981cdad Merge pull request #549 from ONLYOFFICE/release/1.8.0
Release/1.8.0
2024-03-15 13:02:53 +03:00
cee60a340a nodejs: code alert 177 (e85cb5137b) 2024-03-15 12:55:59 +03:00
6c09b3f62a nodejs: wopi formsubmit icon 2024-03-15 11:18:45 +03:00
4b7ba35f83 nodejs: send email and image for protect request 2024-03-15 11:06:48 +03:00
abab30176f refactor(python): change formats retrieval method on frontend 2024-03-14 19:11:37 +05:00
1abcf78b85 refactor(php): change formats retrieval method on frontend 2024-03-14 19:08:12 +05:00
a952858ab8 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop 2024-03-14 15:07:47 +03:00
65ff78fba7 Merge pull request #548 from ONLYOFFICE/fix/ruby-conversion-progress
fix(ruby): conversion percent type validation. Fix Bug 66869
2024-03-14 15:07:11 +03:00
717996af87 Merge pull request #547 from ONLYOFFICE/fix/ruby-historyobj
fix(ruby): historyobj method. Fix Bug 66862
2024-03-14 15:06:45 +03:00
66389fe69c fix(ruby): conversion percent type validation. Fix Bug 66869 2024-03-14 17:24:02 +07:00
a63d8d4284 fix(ruby): previous in history data 2024-03-14 16:30:22 +07:00
ed39928d1f Merge pull request #546 from ONLYOFFICE/fix/ruby-saveas-url-in-docker
fix(ruby): replacing file_url host in saveas. Fix Bug 66874
2024-03-14 11:13:50 +03:00
5bc7ffde73 fix(ruby): historyobj method. Fix Bug 66862 2024-03-13 18:27:58 +07:00
5258fd0674 feat(csharp-mvc): handling auto-conversion error(-9) 2024-03-13 15:39:42 +05:00
ca274bc465 feat(csharp): handling auto-conversion error(-9) 2024-03-13 15:39:07 +05:00
b1d66e16a5 feat(java-spring): handling auto-conversion error(-9) 2024-03-13 15:38:24 +05:00
359cda0f67 feat(java): handling auto-conversion error(-9) 2024-03-13 15:37:13 +05:00
24a3441b1e feat(ruby): handling auto-conversion error(-9) 2024-03-13 15:36:13 +05:00
c6eff10be1 fix(ruby): replacing file_url host in saveas. Fix Bug 66874 2024-03-13 17:36:06 +07:00
a7fca1a53b feat(python): handling auto-conversion error(-9) 2024-03-13 15:35:06 +05:00
5b6a2ba318 refactor(csharp): remove console.log 2024-03-13 13:44:47 +05:00
bb4aed6efb fix(python): uncontrolled data used in path expression 2024-03-13 13:38:53 +05:00
01d8c0acde Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop
# Conflicts:
#	web/documentserver-example/ruby/Gemfile.lock
2024-03-12 11:22:07 +03:00
8fdbdb926b Merge pull request #543 from ONLYOFFICE/fix/ruby-gem-conflict
fix(ruby): resolved gem conflict. Fix Bug 66514
2024-03-12 11:21:04 +03:00
31cf6ca486 Merge pull request #529 from ONLYOFFICE/fix/ruby-gemfile-lock
build(ruby): updated gemfile.lock to 0 vulnerabilities
2024-03-12 11:20:10 +03:00
fbe24234d2 refactor(python): create method for deleting user folder and call it inside remove http method 2024-03-12 12:15:22 +05:00
ac894171fb changelog: delete all files 2024-03-12 11:23:53 +05:00
0174d2a465 fix(ruby): resolved gem conflict. Fix Bug 66514 2024-03-11 18:08:26 +07:00
0f000c1457 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop 2024-03-11 13:28:12 +03:00
97b0cdd042 fix(ruby): nginx body size 2024-03-11 13:26:29 +03:00
143c0a095f fix(python): nginx body size 2024-03-11 13:25:05 +03:00
04c004acdb fix(php): nginx body size 2024-03-11 13:25:04 +03:00
1699dc22b5 nodejs: fix rename var (9048082cb7) 2024-03-09 16:54:56 +03:00
cc62ff8a61 Merge pull request #531 from ONLYOFFICE/feature/php-forced-conversion
Feature/php forced conversion
2024-03-07 15:59:54 +03:00
fd21292dbd refactor(nodejs): change parameter name and remove redundant checking 2024-03-07 16:24:51 +05:00
d43294bd8a feat(csharp-mvc): implement delete all files method 2024-03-07 15:56:02 +05:00
81f5bdd528 feat(csharp): implement delete all files method 2024-03-07 15:42:23 +05:00
c1da8e14c3 feat(java-spring): implement delete all files method 2024-03-06 14:41:29 +05:00
767b5588ab feat(java): implement delete all files method 2024-03-06 14:27:21 +05:00
8858c3c256 feat(ruby): implement delete all files method 2024-03-06 14:24:52 +05:00
89f1c18d06 feat(python): implement delete all files method 2024-03-06 13:52:06 +05:00
81ad7f7a64 feat(php): implement delete all files method 2024-03-06 13:42:41 +05:00
23ba4ff5b3 Merge pull request #541 from ONLYOFFICE/feature/fix-domain
Feature/fix domain
2024-03-06 09:32:36 +03:00
423233e93f update submodule 2024-03-05 16:42:41 +03:00
5f3eaa05f9 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop
# Conflicts:
#	web/documentserver-example/php/assets/js/jscript.js
2024-03-05 16:33:14 +03:00
283d93667e ruby: change document-server to documentserver 2024-03-05 16:24:39 +03:00
158ac4161c python: change document-server to documentserver 2024-03-05 16:24:27 +03:00
bf3df5c89d php: change document-server to documentserver 2024-03-05 16:24:04 +03:00
d8251f3280 fix config paths 2024-03-05 16:16:31 +03:00
e4db31fbd5 Merge remote-tracking branch 'remotes/origin/feature/readme' into develop
# Conflicts:
#	Readme.md
2024-03-05 16:04:45 +03:00
b633f5ff19 Merge pull request #536 from Afrowave/python-example-update
CHORE: Add the Python example reference on the README.
2024-03-05 15:24:12 +03:00
0c8110d2aa Merge pull request #540 from ONLYOFFICE/fix/php-posExt-of-loaded-file
fix(php): ext of loaded file without dot. Fix Bug 66718
2024-03-05 09:51:06 +03:00
f9f8dada69 Merge pull request #539 from ONLYOFFICE/fix/php-user-in-open-source-request
fix(php): checking user in editor request. fix bug 66716
2024-03-05 09:50:33 +03:00
36535f89bb fix(php): ext of loaded file without dot. Fix Bug 66718 2024-03-05 13:46:14 +07:00
09031033aa fix(php): checking user in editor request. fix bug 66716 2024-03-05 13:30:34 +07:00
f657e5ab4a Merge pull request #537 from ONLYOFFICE/fix/csharp-mvc-document-formats-type
fix(csharp-mvc): empty strings tolerant json deserialization.
2024-03-04 15:12:50 +03:00
e42f7fd271 fix(csharp-mvc): empty strings tolerant json deserialization. Fix bug 66688 2024-03-04 13:53:31 +07:00
0f0549c535 Merge remote-tracking branch 'origin/python-example-update' into python-example-update 2024-03-02 15:53:10 +03:00
e896f03acc CHORE: Add the Python example reference on the README. 2024-03-02 15:53:06 +03:00
a74d6b8676 CHORE: Add the Python example reference on the README. 2024-03-02 15:39:19 +03:00
672aae3791 refactor(nodejs): rename variables, ids, and classes regarding forced conversion 2024-03-01 16:29:04 +05:00
999e147539 fix(nodejs): disable file type buttons after selection 2024-03-01 15:25:14 +05:00
e57ad73d4f feat(php): allow to explicitly select output file type when getting auto-conversion error(-9) 2024-03-01 13:03:59 +05:00
690ab5471b Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop 2024-02-28 17:40:09 +03:00
f9fa10e70a nodejs: fix when siteUrl is '/' (Fix Bug 66578) 2024-02-28 17:39:48 +03:00
2460f2c7ac nodejs: absolute host is not needed with urllib (1e72167e7d) 2024-02-28 17:22:31 +03:00
e3342a030c nodejs: fix mobile size (Fix Bug 34620) 2024-02-28 14:40:21 +03:00
47b07a5c8b Merge pull request #528 from ONLYOFFICE/fix/java-spring-document-formats-type
fix(java-spring): empty strings as null in json deserialization.
2024-02-27 15:02:14 +03:00
e7630f516d build(ruby): updated gemfile.lock to 0 vulnerabilities 2024-02-27 16:47:26 +07:00
3e6bee4cc1 fix(java-spring): empty strings as null in json deserialization. fix bug 66552 2024-02-27 15:14:16 +07:00
2b1f7b0548 Merge pull request #527 from ONLYOFFICE/fix/java-document-formats-type
fix(java): empty strings as null in json dererialization. fix bug 66534
2024-02-27 08:57:14 +03:00
ba195952b2 Merge pull request #526 from ONLYOFFICE/fix/ruby-correct-server-url
Fix/ruby correct server url
2024-02-27 08:56:10 +03:00
4ac8d9ee16 fix(ruby): correct server url for images 2024-02-27 08:55:10 +03:00
c46292c595 fix(java): empty strings as null in json dererialization. fix bug 66534 2024-02-26 17:43:55 +07:00
19a38df423 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop
# Conflicts:
#	web/documentserver-example/nodejs/app.js
2024-02-26 12:39:33 +03:00
b771b70ced Merge pull request #523 from ONLYOFFICE/fix/nodejs-editor-fileExt-vulnerability
fix(nodejs): editor fileExt validation. fix bug 66576
2024-02-26 12:37:56 +03:00
67a21fbe35 Merge pull request #524 from ONLYOFFICE/ruby-update-gemfile-lock
build(ruby): update gemfile.lock
2024-02-26 12:13:04 +03:00
08dc8ae6a7 build(ruby): updating gemfile.lock for containers 2024-02-22 17:28:13 +07:00
dcf2fb43e0 build(nodejs): updated dependencies (found 0 vulnerabilities) 2024-02-22 15:47:38 +07:00
dca6f4173e build(ruby): update gemfile.lock 2024-02-22 15:23:07 +07:00
c91d765296 fix(nodejs): editor fileExt validation. fix bug 66576 2024-02-22 14:49:46 +07:00
9615f5a93a Merge pull request #522 from ONLYOFFICE/fix/php-reference-link
fix(php): fix bug 66518
2024-02-21 15:46:08 +03:00
a9f0068600 fix(php): fix bug 66518 2024-02-21 16:53:19 +07:00
9f2a72aafa Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop
# Conflicts:
#	web/documentserver-example/php/templates/docEditor.tpl
2024-02-20 15:04:31 +03:00
a71e7b1896 Merge pull request #520 from ONLYOFFICE/fix/php-container-links
fix(php): nginx headers, correct serverPath and forgotten comma
2024-02-20 15:00:17 +03:00
d8cb434ad2 Merge pull request #521 from ONLYOFFICE/feat/php-make-restart
feat(php): make restart
2024-02-20 14:55:33 +03:00
96af86846b feat(php): make restart 2024-02-20 17:26:40 +07:00
a83c22e537 fix(php): nginx headers, correct serverPath and forgotten comma 2024-02-20 14:41:29 +07:00
fa5fb2f182 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop 2024-02-19 13:56:26 +03:00
4be1eaf917 Merge pull request #519 from ONLYOFFICE/fix/php-max-filesize
fix(php): upload file max size. fix bug 64359
2024-02-19 13:55:07 +03:00
f9bd8db640 fix(php): upload file max size. fix bug 64359 2024-02-19 13:54:25 +03:00
0ba4facdb7 Merge pull request #518 from ONLYOFFICE/fix/saveas-vulnerability
fix(nodejs): checking file domain. fix bug 65593
2024-02-19 13:51:55 +03:00
03625022ca fix(nodejs): checking file domain. fix bug 65593 2024-02-19 15:06:16 +07:00
f154ffc981 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop
# Conflicts:
#	web/documentserver-example/php/src/helpers/Users.php
2024-02-16 18:50:23 +03:00
be7ca0006a Merge pull request #517 from ONLYOFFICE/fix/php-user-image
fix(php): add image to users class
2024-02-16 18:49:07 +03:00
39a6581292 fix(php): add image to users class
Fix Bug 66516
2024-02-16 18:48:38 +03:00
90142299e5 Merge pull request #516 from ONLYOFFICE/feature/tabs-menu
feat(nodejs): move links to header
2024-02-15 15:12:37 +03:00
0f288d539e feat(nodejs): move links to header 2024-02-15 12:35:12 +03:00
d00237226b python: fix link (Fix Bug 66427) 2024-02-15 11:41:23 +03:00
2ead6e1f7e feat(nodejs): move links to header 2024-02-15 11:23:34 +03:00
98d48f373a nginx headers 2024-02-15 11:18:42 +03:00
92e7294f81 using ds v8.0 2024-02-15 11:16:46 +03:00
ea9ac4bb42 Merge pull request #506 from ONLYOFFICE/feature/delete-all-files
feat(nodejs): add a button to clear all files
2024-02-14 22:27:36 +03:00
5775f44f27 Merge remote-tracking branch 'remotes/origin/develop' into feature/delete-all-files
# Conflicts:
#	CHANGELOG.md
2024-02-14 22:26:45 +03:00
4ce10d82a1 Merge pull request #513 from ONLYOFFICE/python-reference-fix
fix(python): link in reference body
2024-02-14 22:22:38 +03:00
3e9e4281c5 Merge pull request #515 from ONLYOFFICE/fix/wopi-edit
fix(nodejs): correct edited exts from discovery info
2024-02-14 22:22:10 +03:00
3eac4912e1 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop 2024-02-14 22:19:11 +03:00
283139450c Form template rename as PDF form 2024-02-14 16:45:07 +03:00
e8df1c2821 fix(nodejs): correct edited exts from discovery info 2024-02-14 15:29:27 +07:00
da3224de7b Merge pull request #514 from ONLYOFFICE/fix/client-max-body-size
Fix/client max body size
2024-02-13 16:00:52 +03:00
819aa2b03f fix(python): nginx body size 2024-02-13 17:52:28 +07:00
f1aafa5fd6 fix(php): nginx body size 2024-02-13 17:44:05 +07:00
ff2bcd0ef6 feat(nodejs): add a button to clear all files 2024-02-13 11:12:36 +03:00
a17c349fb8 Merge pull request #512 from ONLYOFFICE/feature/rename-lock-file
Rename lock file
2024-02-13 09:53:36 +03:00
2268bd1cf4 nodejs: refactoring creating file 2024-02-12 13:37:26 +03:00
605c21c0be fix(python): link in reference body 2024-02-12 16:30:50 +07:00
941c00c476 nodejs: fix serbian lang 2024-02-12 10:37:27 +03:00
3f0495321c Rename npm-shrinkwrap.json to package-lock.json 2024-02-09 12:35:25 +03:00
18fd30700f copyright 2024 2024-02-09 12:22:50 +03:00
9721187083 Merge remote-tracking branch 'remotes/origin/release/1.8.0' into develop 2024-02-09 12:21:37 +03:00
bce5e3760a do not convert to oform 2024-02-09 12:21:24 +03:00
e4d43eda2a Revert "Remove and make"
This reverts commit ac6632d25b.
2024-02-09 08:56:51 +00:00
ac6632d25b Remove and make 2024-02-09 08:51:58 +00:00
b3d3b81274 copyright 2024 2024-02-01 12:39:36 +03:00
dab4841c1d inserting svg 2024-02-01 12:35:46 +03:00
0ec909346d Merge remote-tracking branch 'remotes/origin/release/v8.0.0' into release/1.8.0
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/nodejs/public/assets/document-formats
2024-01-31 09:44:13 +03:00
a7cf7ae378 Merge branch 'release/1.8.0' into develop
# Conflicts:
#	CHANGELOG.md
2024-01-30 18:12:51 +03:00
0bcd7088e6 1.8.0 2024-01-30 18:11:47 +03:00
d256b63263 Merge branch 'feature/filling-pdf' into release/1.8.0 2024-01-30 18:03:34 +03:00
89132ae29a nodejs: pdf editor without creation (Fix Bug 64607 ) 2024-01-30 18:02:13 +03:00
c15438a0d7 nodejs: pdf as new documentType 2024-01-30 18:02:12 +03:00
319a689fe2 nodejs: filling pdf 2024-01-30 16:51:02 +03:00
e85cb5137b nodejs: fix serbian lang 2024-01-23 16:22:41 +03:00
163daa37c9 Merge pull request #508 from ONLYOFFICE/fix/send-notify
fix(php): correct sendNotify agrument
2024-01-23 14:01:56 +03:00
541a1e55b4 Merge pull request #507 from ONLYOFFICE/fix/edit-converted
fix(php): correct ext substring
2024-01-23 13:39:14 +03:00
d692abda4b fix(php): correct sendNotify agrument 2024-01-19 18:08:02 +07:00
f0d7892526 fix(php): correct ext substring 2024-01-19 17:59:18 +07:00
79a2b7e8eb Merge branch 'feature/pdf-type' into release/v8.0.0 2024-01-19 12:28:10 +03:00
3a2f30bfcd Merge branch 'release/v8.0.0' into develop
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/csharp-mvc/web.appsettings.config
#	web/documentserver-example/csharp/settings.config
#	web/documentserver-example/java-spring/src/main/resources/application.properties
#	web/documentserver-example/java/src/main/resources/settings.properties
2024-01-19 12:27:44 +03:00
9f75edf22a nodejs: pdf editor without creation (Fix Bug 64607 ) 2024-01-19 12:24:51 +03:00
179766cc49 nodejs: change submitForm status 2024-01-19 12:24:50 +03:00
bc4c1dd87c nodejs: pdf as new documentType 2024-01-19 12:24:50 +03:00
766adeeb51 nodejs: filling pdf 2024-01-19 12:24:50 +03:00
7423edd7d9 ar skin language 2024-01-18 17:06:52 +03:00
03cc008de8 Merge pull request #505 from ONLYOFFICE/fix/saveas-exception
fix(python): correct saveAs url  (Fix Bug 65801)
2024-01-16 12:36:00 +03:00
5e76f08c83 fix(python): correct saveAs url 2024-01-16 14:50:46 +07:00
4ca824f1d7 Merge branch 'release/v8.0.0' into develop 2024-01-15 15:07:42 +03:00
b17b9fed56 nodejs: encode WOPISrc param 2024-01-15 15:06:05 +03:00
a2c8499622 update formats (add missed records) 2024-01-10 16:54:20 +03:00
ec268cacf7 nodejs: wopi frame without sandbox attribute (Fix Bug 65575) 2024-01-09 17:22:18 +03:00
c683d17bda Merge pull request #496 from ONLYOFFICE/feature/force-converting
Force converting problem files
2024-01-09 15:41:10 +03:00
7918671725 nodejs: handling conversion -9 error 2024-01-09 11:08:15 +03:00
408d80fff6 Merge pull request #502 from ONLYOFFICE/feature/users-different-goback
Users different goback
2024-01-09 11:04:15 +03:00
1b0e8df99f Merge remote-tracking branch 'remotes/origin/develop' into feature/users-different-goback
# Conflicts:
#	CHANGELOG.md
2024-01-09 11:01:08 +03:00
50104f1122 different goback to changelog 2024-01-09 11:00:16 +03:00
b90f333fdd csharp-mvc: add goback Users.cs 2023-12-29 12:47:37 +07:00
9e2aae1658 csharp: add goback Users.cs 2023-12-29 12:23:39 +07:00
0168355600 Merge pull request #494 from ONLYOFFICE/feature/converting
Converting
2023-12-28 12:26:02 +03:00
480b8af172 converting to changelog 2023-12-28 11:58:06 +03:00
f5d767e59d nodejs: wopi layout fix 2023-12-28 11:58:06 +03:00
62ad307327 nodejs: converting dialog window 2023-12-28 11:58:05 +03:00
b3b605230f nodejs: convert button on index page 2023-12-28 11:57:14 +03:00
ae2425f7e4 Merge pull request #503 from ONLYOFFICE/feature/formats-request
Getiing formats object on node
2023-12-28 10:45:30 +03:00
5849c9bb69 nodejs: getiing formats object 2023-12-27 13:35:03 +03:00
8ba1d5e8d7 update formats (add missed records) 2023-12-26 12:32:27 +03:00
91f3bda0b4 ruby: add goback users.rb 2023-12-22 15:15:26 +03:00
185605a1eb python: add goback users.py 2023-12-22 15:15:08 +03:00
6563a26d2d php: add goback users.php 2023-12-22 15:14:49 +03:00
d9061c57a3 nodejs: add goback users.js 2023-12-22 15:09:37 +03:00
b9c2c2e770 java: add goback user.java 2023-12-22 15:08:35 +03:00
a55d7b2d9d java-spring : add goback user.java 2023-12-22 15:08:09 +03:00
e0489a6922 Merge pull request #499 from ONLYOFFICE/feature/remove-history-close-restore
Remove Close History and Restore
2023-12-19 12:30:44 +03:00
dc14a9aa90 csharp-mvc: remove historyClose and restore 2023-12-19 15:41:22 +07:00
92206ed637 csharp: remove historyClose and restore 2023-12-19 15:31:28 +07:00
09f6ba00b2 ruby: add changes after pr #501 2023-12-18 10:09:54 +03:00
43f1555c68 python: add changes after pr #501 2023-12-18 10:09:47 +03:00
83535632bb php: add changes after pr #501 2023-12-18 10:09:40 +03:00
f1d41a4bf2 java: add changes after pr #501 2023-12-18 10:09:19 +03:00
f43e7414bb java-spring: add changes after pr #501 2023-12-18 10:09:11 +03:00
4455521e00 nodejs: add changes after pr #501 2023-12-18 10:08:32 +03:00
7b91694107 Merge branch 'develop' into feature/remove-history-close-restore 2023-12-15 18:16:04 +03:00
8edb65692a Merge pull request #501 from ONLYOFFICE/feature/fix-editros-files
Remove history methods for anonymous users
2023-12-15 17:55:20 +03:00
a36f270829 Merge remote-tracking branch 'remotes/origin/develop' into feature/fix-editros-files
# Conflicts:
#	web/documentserver-example/php/templates/docEditor.tpl
2023-12-15 17:54:25 +03:00
f726ae534c Merge pull request #500 from ONLYOFFICE/feature/add-onRequestUsers-onRequestSendNotify
Add functions RequestUsers and RequestSendNotify
2023-12-15 17:50:31 +03:00
69b266489f csharp-mvc: add onRequestUsers and onRequestSendNotify in Editor.aspx 2023-12-15 20:03:15 +07:00
7c18d08bc6 csharp: add onRequestUsers and onRequestSendNotify in DocEditor.aspx 2023-12-15 19:57:55 +07:00
6717612fc1 ruby: add onRequestUsers and onRequestSendNotify in editor.html.erb 2023-12-14 12:09:32 +03:00
7f678c9ed8 ruby: remove history methods for anonymous users (fe352ebad1)
old commit:
fe352ebad1
2023-12-12 10:35:35 +03:00
ee951fbfbc python: remove history methods for anonymous users (18cf21efe4)
old commit:
18cf21efe4
2023-12-12 10:32:42 +03:00
91f32c1387 php: remove history methods for anonymous users (39820cec0a)
old commit:
39820cec0a
2023-12-12 10:30:42 +03:00
7051437928 java: remove history methods for anonymous users (52a722cf89)
old commit:
52a722cf89
2023-12-12 10:25:45 +03:00
0967c1c3ac java-spring: remove history methods for anonymous users (bc5393e28c)
old commit:
bc5393e28c
2023-12-12 10:19:25 +03:00
cf097501c6 Fix Bug 34620 - resize on mobile
This reverts commit d3a08acec3.
2023-12-11 15:33:07 +03:00
0b0e0dad8c python: add onRequestUsers and onRequestSendNotify in editor.html 2023-12-11 12:55:06 +03:00
d97291719a php: add onRequestUsers and onRequestSendNotify in docEditor.tpl 2023-12-11 12:41:40 +03:00
75ca703f8a java-spring: add onRequestUsers and onRequestSendNotify in editor.html 2023-12-11 11:59:52 +03:00
01618fee17 java: add onRequestUsers and onRequestSendNotify in editor.jsp 2023-12-11 11:54:36 +03:00
78a8b56b48 java: delete spaces from editor.jsp 2023-12-07 13:47:25 +03:00
3b9bad4a26 Merge branch 'develop' into feature/remove-history-close-restore 2023-12-07 11:34:27 +03:00
435b8013f6 style: updates to styling 2023-12-07 10:58:41 +03:00
a9063af6e1 fix sr-Latn-RS 2023-12-06 12:56:12 +03:00
bde236075c ruby: remove historyClose and restore 2023-12-05 16:08:45 +03:00
f74f34504f python: remove historyClose and restore 2023-12-05 16:08:29 +03:00
3243a04a1b php: remove historyClose and restore 2023-12-05 15:25:20 +03:00
6598aa585a java: remove historyClose and restore 2023-12-05 15:25:05 +03:00
e02744e56b nodejs: remove historyClose and restore 2023-12-05 14:59:14 +03:00
ec596753c6 java-spring: remove historyClose and restore 2023-12-05 14:58:24 +03:00
685a62bb9c Merge pull request #497 from ONLYOFFICE/feature/version-on-front
Feature/version on front
2023-12-05 13:37:43 +03:00
2603acae16 ruby: Layout/ExtraSpacing correct 2023-12-05 13:34:30 +03:00
11489ac8ba ruby: fix sr-Latn-CS 2023-12-05 13:26:42 +03:00
e65f6f27be Merge remote-tracking branch 'remotes/origin/develop' into feature/version-on-front
# Conflicts:
#	CHANGELOG.md
2023-12-05 13:21:41 +03:00
a0a1b036e3 version to changelog 2023-12-05 13:19:57 +03:00
f846197396 csharp: add version Index.aspx 2023-12-04 16:29:37 +07:00
97f95fb850 csharp: add version Default.aspx 2023-12-04 16:17:37 +07:00
7d8a1a8b6d sr-Latn-CS skin language 2023-12-01 18:07:41 +03:00
23389056e8 ruby: add version application.html.erb 2023-12-01 10:52:44 +03:00
457e38c35a python: add version index.html 2023-12-01 10:52:14 +03:00
11075304a5 php: add version index.tpl 2023-12-01 10:51:59 +03:00
7af14e75e8 nodejs: add version index.ejs 2023-12-01 10:51:31 +03:00
c8ccb3b502 java: add version index.jsp 2023-12-01 10:50:57 +03:00
449ad0759b java-spring: add version index.html 2023-12-01 10:50:26 +03:00
32e4cb6d64 Merge pull request #498 from ONLYOFFICE/fix/hash-code-overflow (Fix Bug 65288)
node: fixed overflow when hashing сyrillic characters
2023-12-01 10:40:13 +03:00
83b1dc07e1 node: fixed overflow when hashing сyrillic characters 2023-11-30 18:19:38 +03:00
b61e05d203 Merge pull request #490 from ONLYOFFICE/feature/ruby-rubocop
Feature/ruby rubocop
2023-11-30 17:39:34 +03:00
9cf058078c ruby: fix lint problems after merging develop 2023-11-30 14:05:57 +03:00
d72834687e Merge branch 'develop' into feature/ruby-rubocop 2023-11-30 13:31:47 +03:00
af1dc6d9b5 ruby: add rubocop-rails 2023-11-30 09:28:05 +03:00
e5560b25d7 ruby: Rails/Present correct 2023-11-30 09:04:24 +03:00
d894663a4a ruby: Rails/NegateInclude correct 2023-11-30 09:02:38 +03:00
b262a34540 ruby: Rails/ToFormattedS correct 2023-11-30 09:02:38 +03:00
3d0ae07de4 ruby: Rails/TimeZone correct 2023-11-30 09:02:38 +03:00
efb4616ca6 ruby: Rails/HttpStatus correct 2023-11-30 09:02:38 +03:00
037c5682f8 ruby: Rails/Blank correct 2023-11-30 09:02:38 +03:00
7c1939e8c9 ruby: updated rubocop configuration file 2023-11-30 09:02:38 +03:00
6312833dd3 Merge pull request #491 from ONLYOFFICE/flake-make
Flake8 configuration file
2023-11-29 10:22:06 +03:00
ce58acbca9 Merge pull request #493 from ONLYOFFICE/fix/open-history-without-changes
Fix/open history without changes
2023-11-29 10:21:28 +03:00
d40f932863 python: deleted unnecessary lines from workflows 2023-11-29 10:11:43 +07:00
d6d1981296 getting history in changelog 2023-11-28 10:11:09 +03:00
b9fc1304d9 Merge pull request #469 from ONLYOFFICE/feature/restore-history
Feature/restore history
2023-11-28 10:09:11 +03:00
dac1cdcdc1 format 2023-11-28 10:08:01 +03:00
248beed471 Merge remote-tracking branch 'remotes/origin/develop' into feature/restore-history
# Conflicts:
#	CHANGELOG.md
2023-11-28 10:05:46 +03:00
9d5feaaf99 python: flake8 and mypy separated 2023-11-28 13:49:12 +07:00
d397db61cd python: lint workflow python version fix 2023-11-27 17:36:21 +07:00
969240ad53 python: intalling dependencies by make in lint workflow 2023-11-27 17:30:09 +07:00
8fd9113c47 python: mypy in lint workflow 2023-11-27 15:36:56 +07:00
068687ba91 Merge pull request #495 from ONLYOFFICE/feature/auto-convert
Convert after uploading only tagged formats
2023-11-27 11:35:51 +03:00
495d97bd3a - auto-convert in changelog 2023-11-27 11:35:33 +03:00
160c0bef3c ruby: fix opening history without changes 2023-11-27 10:58:03 +03:00
0b5b0d9c27 python: fix opening history without changes 2023-11-27 10:58:03 +03:00
b903bfc0cb java: fix opening history without changes 2023-11-27 10:57:59 +03:00
580f8f3e89 csharp: convert after uploading only tagged formats 2023-11-27 10:45:29 +03:00
b19abbcb36 csharp-mvc: convert after uploading only tagged formats 2023-11-27 10:44:17 +03:00
4de6f4d828 python: removing irrelevant changes 2023-11-27 14:36:18 +07:00
ad4b2d136c java-spring: fix opening history without changes 2023-11-24 13:41:43 +03:00
6578d414ea php: fix opening history without changes 2023-11-24 13:28:44 +03:00
5ac60bace6 Merge pull request #492 from ONLYOFFICE/feature/submit-form
Feature/submit form
2023-11-22 11:49:19 +03:00
c06b734045 python: fix forms_data variable 2023-11-22 11:45:02 +03:00
f32f90282c nodejs: fix status check 2023-11-22 11:42:05 +03:00
7ca8a2122f Merge branch 'develop' into feature/restore-history 2023-11-22 11:29:31 +07:00
293bc9b5b0 link in referenceData in changelog 2023-11-21 16:06:03 +03:00
a4cedb5725 Merge pull request #488 from ONLYOFFICE/feature/csharp-mvc-matrix-formats
Feature/csharp mvc matrix formats
2023-11-21 15:59:30 +03:00
8a2fc218d4 repo with formats to changelog 2023-11-21 15:59:08 +03:00
23d8315c37 Merge branch 'develop' into feature/csharp-mvc-matrix-formats 2023-11-21 15:56:31 +03:00
38aae731ba reorder modules 2023-11-21 15:54:33 +03:00
4d49e54129 csharp-mvc: added format caching 2023-11-21 15:19:24 +03:00
c1d1af6fae Merge pull request #487 from ONLYOFFICE/feature/csharp-matrix-formats
Feature/csharp matrix formats
2023-11-21 15:14:21 +03:00
c2466ddebe csharp: added format caching 2023-11-21 15:12:10 +03:00
7ecbc6d458 csharp: replace the previous implementation of formats 2023-11-21 15:12:05 +03:00
2e69ba0d3f python: fix lint 2023-11-21 12:58:17 +03:00
bf72a43605 Merge remote-tracking branch 'remotes/origin/develop' into feature/submit-form
# Conflicts:
#	web/documentserver-example/csharp-mvc/Helpers/Users.cs
#	web/documentserver-example/csharp/Users.cs
#	web/documentserver-example/java-spring/src/main/java/com/onlyoffice/integration/ExampleData.java
#	web/documentserver-example/java/src/main/java/helpers/Users.java
#	web/documentserver-example/php/src/helpers/ExampleUsers.php
#	web/documentserver-example/python/src/utils/users.py
#	web/documentserver-example/ruby/app/models/users.rb
2023-11-21 12:30:39 +03:00
86c2842198 Merge pull request #489 from ONLYOFFICE/fix/php-get-stored-files
fix/php-get-stored-files
2023-11-21 11:59:46 +03:00
9389607aaf python: flake8 configuration file 2023-11-21 15:39:31 +07:00
3d63728344 Merge branch 'develop' into feature/restore-history 2023-11-21 14:21:58 +07:00
40d1c0c03b python: getting storage path to file uri from config manager 2023-11-21 14:20:35 +07:00
0c2a271357 ruby: added rubocop configuration file 2023-11-20 13:11:01 +03:00
e94d81e228 ruby: Layout/FirstMethodParameterLineBreak correct 2023-11-20 13:04:00 +03:00
4c9c79ae8e ruby: Layout/EmptyLinesAroundClassBody correct 2023-11-20 13:02:20 +03:00
d51dab82c5 ruby: Layout/EndAlignment correct 2023-11-20 13:01:55 +03:00
1e66124a8a ruby: ElseAlignment correct 2023-11-20 13:01:15 +03:00
5fd2878c3d ruby: Layout/FirstHashElementIndentation correct 2023-11-20 13:00:04 +03:00
63ec4db0b3 ruby: Lint/AmbiguousOperatorPrecedence correct 2023-11-20 12:58:23 +03:00
0d3ed49adf ruby: Layout/MultilineOperationIndentation correct 2023-11-20 12:57:33 +03:00
7197a216f8 ruby: Layout/ParameterAlignment correct 2023-11-20 12:56:29 +03:00
716d4dc694 ruby: Layout/FirstHashElementIndentation correct 2023-11-20 12:55:58 +03:00
d744bc2e23 ruby: Layout/ClosingParenthesisIndentation correct 2023-11-20 12:55:19 +03:00
a69f7f343a ruby: Layout/HashAlignment correct 2023-11-20 12:54:56 +03:00
10b40423ad ruby: Layout/CommentIndentation correct 2023-11-20 12:54:30 +03:00
4ea23d1677 ruby: Style/Lambda correct 2023-11-20 12:54:00 +03:00
e0ed22d1f5 ruby: Layout/FirstArgumentIndentation correct 2023-11-20 12:52:31 +03:00
5148fd2601 ruby: Layout/EmptyLines correct 2023-11-20 12:52:02 +03:00
97420e18cf ruby: Style/AccessModifierDeclarations correct 2023-11-20 12:51:34 +03:00
10e1848beb ruby: Style/AccessorGrouping correct 2023-11-20 12:50:59 +03:00
d4b2bf95bc ruby: Layout/LineContinuationSpacing correct 2023-11-20 12:50:33 +03:00
d613a02068 ruby: Layout/FirstHashElementLineBreak correct 2023-11-20 12:50:13 +03:00
4ff7b6e543 ruby: Layout/IndentationWidth correct 2023-11-20 12:49:36 +03:00
066de3359d ruby: Layout/ExtraSpacing correct 2023-11-20 12:49:06 +03:00
4577861f8b ruby: Layout/ClosingParenthesisIndentation correct 2023-11-20 12:48:42 +03:00
94df21fe21 ruby: Style/ClassMethodsDefinitions correct 2023-11-20 12:48:18 +03:00
af38a4ba61 ruby: Layout/LineEndStringConcatenationIndentation correct 2023-11-20 12:47:24 +03:00
7e9356df5e ruby: Layout/MultilineMethodCallBraceLayout correct 2023-11-20 12:46:53 +03:00
5f68d09e2f ruby: Layout/FirstHashElementIndentation correct 2023-11-20 12:46:25 +03:00
18aa9487b3 ruby: Layout/FirstMethodArgumentLineBreak correct 2023-11-20 12:45:27 +03:00
f00f212662 ruby: Lint/SymbolConversion correct 2023-11-20 12:44:59 +03:00
743176bb5c ruby: Layout/TrailingWhitespace correct 2023-11-20 12:44:29 +03:00
58eec51312 ruby: Layout/IndentationConsistency correct 2023-11-20 12:44:03 +03:00
1f5c23a2d1 ruby: Layout/CommentIndentation correct 2023-11-20 12:43:31 +03:00
992dbe18af ruby: Layout/ArgumentAlignment correct 2023-11-20 12:41:52 +03:00
ae738e1be2 ruby: Style/RedundantSelfAssignmentBranch correct 2023-11-20 12:41:28 +03:00
9796abf846 ruby: Layout/FirstArgumentIndentation correct 2023-11-20 12:40:48 +03:00
9471891a89 ruby: Lint/NonAtomicFileOperation correct 2023-11-20 12:40:05 +03:00
9b64957189 ruby: Layout/MultilineMethodParameterLineBreaks correct 2023-11-20 12:39:19 +03:00
6f5a854cd2 ruby: Style/WordArray correct 2023-11-20 12:38:50 +03:00
f441ab1650 ruby: Style/RedundantParentheses correct 2023-11-20 12:38:22 +03:00
fd5a2b7b0e ruby: Style/NegatedIfElseCondition correct 2023-11-20 12:37:42 +03:00
f2504ab740 ruby: Style/FileWrite correct 2023-11-20 12:36:45 +03:00
7710c6d6e8 ruby: Style/QuotedSymbols correct 2023-11-20 12:36:03 +03:00
5b99e3d17a ruby: Style/HashSyntax correct 2023-11-20 12:35:14 +03:00
955b35f382 ruby: Style/MethodCallWithArgsParentheses correct 2023-11-20 12:33:36 +03:00
8580ea8a57 ruby: Style/StringHashKeys correct 2023-11-20 12:32:54 +03:00
cba2eac65d ruby: Lint/NumberConversion correct 2023-11-20 12:32:09 +03:00
f5ccc21f69 ruby: Style/FetchEnvVar correct 2023-11-20 12:31:23 +03:00
03a585685e ruby: Layout/FirstMethodArgumentLineBreak correct 2023-11-20 12:29:36 +03:00
40c520e8fd ruby: Layout/ArgumentAlignment correct 2023-11-20 12:29:02 +03:00
940b4bfc80 ruby: Layout/TrailingWhitespace correct 2023-11-20 12:28:12 +03:00
7fe7753c88 ruby: Layout/MultilineMethodArgumentLineBreaks correct 2023-11-20 12:27:25 +03:00
8fa40ab439 ruby: Style/SymbolArray correct 2023-11-20 12:10:24 +03:00
8f4de5ce0d ruby: Naming/PredicateName correct 2023-11-20 11:53:13 +03:00
94d22003b5 ruby: Naming/MethodName correct 2023-11-20 11:50:10 +03:00
f8d62ab8db ruby: Naming/AccessorMethodName correct 2023-11-20 00:37:46 +03:00
f955096fc0 ruby: Naming/VariableNumber correct 2023-11-20 00:37:46 +03:00
9b0d3e1a20 ruby: Naming/VariableName correct 2023-11-20 00:37:39 +03:00
dafc66d5d8 ruby: Style/Documentation correct 2023-11-19 02:38:42 +03:00
902ad1341c ruby: Naming/RescuedExceptionsVariableName correct 2023-11-16 15:16:47 +03:00
1cd457c5c6 ruby: Lint/DuplicateMethods correct 2023-11-16 13:35:06 +03:00
4536f83d10 ruby: Style/OptionalBooleanParameter correct 2023-11-16 13:33:09 +03:00
acdb60dd3b ruby: Style/ClassVars correct 2023-11-16 12:21:22 +03:00
c5315de84f ruby: Lint/Void correct 2023-11-16 10:16:22 +03:00
c639ba4287 ruby: Style/NegatedIf correct 2023-11-16 10:15:11 +03:00
ea15f12551 ruby: Style/TrailingUnderscoreVariable correct 2023-11-16 09:34:57 +03:00
c0135c52c5 ruby: Layout/TrailingWhitespace correct 2023-11-16 09:34:57 +03:00
f87fc045d3 ruby: Lint/UselessAssignment correct 2023-11-16 09:34:57 +03:00
684fa89c13 ruby: Style/EmptyLineAfterMagicComment correct 2023-11-16 09:34:57 +03:00
f4d838710c ruby: Style/MultilineIfModifier correct 2023-11-16 09:34:57 +03:00
0728a71f01 ruby: Style/EmptyElse correct 2023-11-16 09:34:57 +03:00
9cbb946c8f ruby: Style/MultilineTernaryOperator correct 2023-11-16 09:34:57 +03:00
24ff9ce804 ruby: Style/NegatedIf correct 2023-11-16 09:34:57 +03:00
498268a7a3 ruby: Style/ParenthesesAroundCondition correct 2023-11-16 09:34:57 +03:00
2477fb21c5 ruby: Style/RedundantAssignment correct 2023-11-16 09:34:57 +03:00
a809af8eca ruby: Style/IfUnlessModifier correct 2023-11-16 09:34:57 +03:00
5f053de539 ruby: Style/RedundantParentheses correct 2023-11-16 09:34:57 +03:00
f47f9bf897 ruby: Style/FrozenStringLiteralComment correct 2023-11-16 09:34:57 +03:00
7d09d87891 ruby: Layout/LineLength correct 2023-11-16 09:34:57 +03:00
83843342d4 ruby: Style/HashSyntax correct 2023-11-16 09:34:57 +03:00
a407b2b9c7 ruby: Style/For correct 2023-11-16 09:34:57 +03:00
b29b0c3fa5 ruby: Style/AndOr correct 2023-11-16 09:34:57 +03:00
821df5c700 ruby: Style/RescueStandardError correct 2023-11-16 09:34:57 +03:00
56e96eeac1 ruby: Style/Redundant correct 2023-11-16 09:34:57 +03:00
6525c29107 ruby: Style/NumericPredicate correct 2023-11-16 09:34:57 +03:00
3197702d7b ruby: Style/CommentedKeyword correct 2023-11-16 09:34:57 +03:00
286fb47fb8 ruby: Lint/RedundantStringCoercion correct 2023-11-16 09:34:57 +03:00
44445de6e7 ruby: Layout/CommentIndentation correct 2023-11-16 09:34:57 +03:00
986eeefb4d ruby: Layout/EmptyLinesAroundMethodBody correct 2023-11-16 09:34:57 +03:00
12aba3d66d ruby: Layout/EmptyLines correct 2023-11-16 09:34:57 +03:00
4c92c1c750 ruby: Layout/IndentationWidth correct 2023-11-16 09:34:57 +03:00
4e685d9eab ruby: Layout/ArrayAlignment correct 2023-11-16 09:34:57 +03:00
bb4e2b3b46 ruby: Layout/ExtraSpacing correct 2023-11-16 09:34:57 +03:00
d1b972fb18 ruby: Layout/HashAlignment correct 2023-11-16 09:34:57 +03:00
a17819efb2 ruby: Layout/RescueEnsureAlignment correct 2023-11-16 09:34:57 +03:00
79b98bed53 ruby: Layout/FirstHashElementIndentation correct 2023-11-16 09:34:57 +03:00
27267e2d5b ruby: Layout/ElseAlignment correct 2023-11-16 09:34:57 +03:00
de5fc508f2 ruby: Layout/CaseIndentation correct 2023-11-16 09:34:57 +03:00
dccc970fa1 ruby: Layout/TrailingWhitespace correct 2023-11-16 09:34:57 +03:00
5259cc19fa ruby: Layout/IndentationConsistency correct 2023-11-16 09:34:57 +03:00
8527ac602f ruby: Layout/EmptyLineAfterGuardClause correct 2023-11-16 09:34:57 +03:00
6ff7b4fa8f ruby: Layout/EmptyLines correct 2023-11-16 09:34:57 +03:00
9747867935 ruby: Layout/CommentIndentation correct 2023-11-16 09:34:57 +03:00
42c2c93e81 ruby: Layout/EndAlignment correct 2023-11-16 09:34:57 +03:00
c0d8e0e339 ruby: Layout/IndentationWidth correct 2023-11-16 09:34:49 +03:00
8ebbfa59be Merge pull request #470 from ONLYOFFICE/feature/routing-fix
Feature/routing fix
2023-11-15 10:16:47 +03:00
d06bb98a61 ruby: Style/DefWithParentheses correct 2023-11-14 16:18:58 +03:00
dd3b7ab077 ruby: Style/WordArray correct 2023-11-14 16:18:25 +03:00
7d6933803f ruby: Style/TrailingCommaInArrayLiteral correct 2023-11-14 16:17:39 +03:00
26fc316cee ruby: Style/OrAssignment correct 2023-11-14 16:15:09 +03:00
bd922d202e ruby: Style/ParenthesesAroundCondition correct 2023-11-14 16:13:10 +03:00
c350dd022f ruby: Style/TrailingCommaInHashLiteral correct 2023-11-14 16:12:30 +03:00
f3cfdc353e ruby: Style/MultilineTernaryOperator correct 2023-11-14 16:11:54 +03:00
9b010f8315 ruby: Style/MethodCallWithoutArgsParentheses correct 2023-11-14 16:11:23 +03:00
5171624adc ruby: Style/IfInsideElse correct 2023-11-14 16:10:50 +03:00
3247a75318 ruby: Style/ConditionalAssignment correct 2023-11-14 16:09:49 +03:00
81a43656b2 ruby: Style/SelfAssignment correct 2023-11-14 16:08:52 +03:00
3df552b4b2 ruby: Style/BlockDelimiters correct 2023-11-14 16:08:14 +03:00
e9b4fce50b ruby: Style/GuardClause correct 2023-11-14 16:06:55 +03:00
1989c5f44d ruby: Style/AccessorGrouping correct 2023-11-14 16:05:53 +03:00
23193739f7 ruby: Style/NonNilCheck correct 2023-11-14 16:04:41 +03:00
21d75418c2 ruby: Style/MultipleComparison correct 2023-11-14 16:03:32 +03:00
b630764daf ruby: Style/NegatedIf correct 2023-11-14 16:02:59 +03:00
f9375a7414 ruby: Style/SoleNestedConditional correct 2023-11-14 15:59:48 +03:00
52d72371d5 ruby: Style/Semicolon correct 2023-11-14 15:58:46 +03:00
519f6d6f32 ruby: Style/NilComparison correct 2023-11-14 15:54:50 +03:00
eb6861059e ruby: Style/StringConcatenation correct 2023-11-14 15:00:52 +03:00
f5801a7f8c ruby: Style/IfUnlessModifier correct 2023-11-14 14:53:05 +03:00
15b905613c ruby: Style/EmptyMethod correct 2023-11-14 14:47:16 +03:00
5255f0e462 ruby: Style/SymbolArray correct 2023-11-14 14:46:08 +03:00
5e29215a11 ruby: Style/StringLiterals correct 2023-11-14 14:38:10 +03:00
de32be3945 ruby: Lint/RedundantStringCoercion correct 2023-11-14 14:30:45 +03:00
63c04c85b0 ruby: Lint/ParenthesesAsGroupedExpression correct 2023-11-14 14:01:39 +03:00
2d3fc72283 ruby: Layout/FirstArrayElementIndentation correct 2023-11-14 13:53:42 +03:00
b6e71e42c1 ruby: Layout/ParameterAlignment correct 2023-11-14 13:53:08 +03:00
dcf78b13f2 ruby: Layout/ArgumentAlignment correct 2023-11-14 13:52:39 +03:00
d8b0bd55cf ruby: Layout/FirstHashElementIndentation correct 2023-11-14 13:52:07 +03:00
8ddbb6ba18 ruby: Layout/EmptyLinesAroundBeginBody correct 2023-11-14 13:51:36 +03:00
831e59b390 ruby: Layout/EmptyLineBetweenDefs correct 2023-11-14 13:50:53 +03:00
95de0fc2c7 ruby: Layout/CaseIndentation correct 2023-11-14 13:50:09 +03:00
b48efac604 ruby: Layout/SpaceAroundOperators correct 2023-11-14 13:48:40 +03:00
c0eb1c8a85 ruby: Layout/SpaceAroundEqualsInParameterDefault correct 2023-11-14 13:48:06 +03:00
118779aac1 ruby: Layout/SpaceInsideBlockBraces correct 2023-11-14 13:47:02 +03:00
276f5c1e20 ruby: Layout/SpaceAfterMethodName correct 2023-11-14 13:42:27 +03:00
64f66d4fa3 ruby: Layout/EmptyLinesAroundClassBody correct 2023-11-14 13:41:38 +03:00
ac3e0faba8 ruby: Layout/MultilineOperationIndentation correct 2023-11-14 13:40:44 +03:00
fde6a09f75 ruby: Layout/SpaceAfterComma correct 2023-11-14 13:39:32 +03:00
f12fb576d8 ruby: Layout/SpaceInsideHashLiteralBraces correct 2023-11-14 13:34:49 +03:00
b5585cf3db ruby: Layout/LeadingCommentSpace correct 2023-11-14 13:33:31 +03:00
f1a69218ae ruby: Layout/IndentationConsistency correct 2023-11-14 13:32:08 +03:00
dbce9946e0 ruby: Layout/TrailingWhitespace correct 2023-11-14 13:29:46 +03:00
3b66092a45 ruby: Layout/IndentationWidth correct 2023-11-14 13:25:32 +03:00
1b91592a9a ruby: Layout/ExtraSpacing correct 2023-11-14 13:10:31 +03:00
e9e6586d6d ruby: Layout/EmptyLinesAroundMethodBody correct 2023-11-14 12:43:19 +03:00
266e249b12 ruby: Layout/TrailingEmptyLines correct 2023-11-14 12:37:38 +03:00
ce9d62ad7d ruby: Layout/EmptyLineAfterGuardClause correct 2023-11-14 12:31:56 +03:00
a1db88e057 php: fixed overwriting of array elements when file creation dates are the same 2023-11-13 18:08:13 +03:00
9ea7e14c37 ruby: saving formsdata 2023-11-13 16:55:14 +03:00
9369b124da csharp-mvc: saving formsdata 2023-11-13 15:26:17 +03:00
5581cc1ad2 csharp: saving formsdata 2023-11-13 15:17:44 +03:00
ccf6fb4098 java-spring: saving formsdata 2023-11-13 14:02:49 +03:00
b26bd01f28 Merge pull request #481 from ONLYOFFICE/feature/referenceData-link
Feature/reference data link
2023-11-13 13:45:21 +03:00
1fda76552f java: saving formsdata 2023-11-13 13:13:09 +03:00
b6b001d7ef php: saving formsdata 2023-11-13 13:13:09 +03:00
6207d03984 python: saving formsdata 2023-11-13 13:13:05 +03:00
888957c967 php: removed unnecessary route and method 'csv' 2023-11-13 16:31:26 +07:00
febce17e86 Merge branch 'develop' into feature/restore-history 2023-11-13 16:16:10 +07:00
63b2202f82 python: storage folder in configuration manager 2023-11-13 16:15:05 +07:00
9f70cca92c php: link in referenceData
# Conflicts:
#	CHANGELOG.md
2023-11-10 17:21:33 +03:00
d2a6ebeb74 ruby: link in referenceData 2023-11-10 17:21:04 +03:00
6c6dd7a954 java: link in referenceData 2023-11-10 13:55:39 +03:00
778121f2af java-spring: link in referenceData 2023-11-10 13:54:55 +03:00
21e61a31af csharp-mvc: link in referenceData 2023-11-10 13:54:01 +03:00
99c046e498 csharp: link in referenceData
# Conflicts:
#	CHANGELOG.md
2023-11-10 13:52:58 +03:00
c2d190e811 python: link in referenceData 2023-11-10 13:52:06 +03:00
88b8af6004 Merge pull request #485 from ONLYOFFICE/feature/user-image
Feature/user image
2023-11-10 13:32:46 +03:00
9487a87b65 Merge remote-tracking branch 'remotes/origin/develop' into feature/user-image
# Conflicts:
#	CHANGELOG.md
2023-11-10 13:32:17 +03:00
1d65ec61ea nodejs: saving formsdata 2023-11-10 13:06:25 +03:00
9e351e4190 csharp-mvc: replace the previous implementation of formats 2023-11-10 12:46:30 +03:00
9b9049a2fc csharp-mvc: add format module 2023-11-10 12:32:38 +03:00
e5e84cdd67 Merge remote-tracking branch 'remotes/origin/develop' into feature/submit-form 2023-11-10 12:30:05 +03:00
6350e33c64 csharp-mvc: add document-formats submodule 2023-11-10 11:10:06 +03:00
15d2f6fa79 Merge pull request #486 from ONLYOFFICE/feature/auto-convert
Convert after uploading only tagged formats
2023-11-09 15:56:52 +03:00
0057b81adc csharp-mvc: moved the submodule to the assets/document-templates subfolder 2023-11-09 09:56:55 +03:00
28c8410e7d csharp: add format module 2023-11-09 09:51:43 +03:00
c91fbf6320 csharp: add document-formats submodule 2023-11-08 15:24:14 +03:00
030985bbeb csharp: moved the submodule to the assets/document-templates subfolder 2023-11-08 15:02:58 +03:00
7c57b0f575 python: code refactoring 2023-11-08 13:08:07 +07:00
d75a4c529d ruby: renaming asset method to assets 2023-11-08 12:17:42 +07:00
2ee051e9fc java-spring: 'uid-' prefix was returned to User class id field 2023-11-08 11:38:04 +07:00
f7386df050 ruby: convert after uploading only tagged formats 2023-11-07 13:01:27 +07:00
d3185253a8 python: convert after uploading only tagged formats 2023-11-07 12:56:06 +07:00
e18d36f18d php: convert after uploading only tagged formats 2023-11-07 12:43:05 +07:00
794e578a37 merging fix 2023-11-07 12:00:51 +07:00
c86c6bf17e Merge branch 'develop' into feature/user-image 2023-11-07 11:25:40 +07:00
0494d24e29 Merge branch 'develop' into feature/restore-history 2023-11-07 10:21:57 +07:00
34e60cd33f Merge pull request #484 from ONLYOFFICE/feature/remove-logo-parameter
java-spring: remove logo parameter in config and Logo.java class
2023-11-06 14:48:49 +03:00
089819cdc4 setUsers for region protection in changelog 2023-11-06 14:43:33 +03:00
146f6224f2 Merge pull request #480 from ONLYOFFICE/feature/region-protect
Feature/region protect
2023-11-06 14:42:21 +03:00
65b9bfec01 java-spring: remove logo parameter in config and Logo.java class 2023-11-06 09:55:45 +03:00
f620da3b98 java: empty usersInfo for anonymous 2023-11-06 12:02:38 +07:00
62e2f7426c csharp: user avatar 2023-11-06 11:41:09 +07:00
672a351402 csharp-mvc: user image 2023-11-06 10:54:39 +07:00
dfe61c5013 java: user avatar 2023-11-03 20:47:43 +07:00
13c93ce2de java-spring: user avatar 2023-11-03 19:44:33 +07:00
b175ebc761 Merge pull request #482 from ONLYOFFICE/feature/php-convert
php: fix convert (50dca2e2c0)
2023-11-02 17:21:50 +03:00
20aea45ac7 php: user avatar 2023-11-02 17:17:41 +07:00
a220cdd627 ruby: user avatar 2023-11-01 13:23:51 +07:00
20ca2d0cbd python: lint fix 2023-11-01 11:17:34 +07:00
e1d8418055 Merge branch 'develop' into feature/region-protect 2023-11-01 11:12:26 +07:00
6e6e5c472e Merge branch 'develop' into feature/routing-fix 2023-11-01 11:04:37 +07:00
9d3d5243b2 python: lint fix 2023-11-01 10:59:41 +07:00
440b51c7ff Merge branch 'develop' into feature/restore-history 2023-11-01 10:51:44 +07:00
1d747b834d Merge branch 'feature/user-image' of https://github.com/ONLYOFFICE/document-server-integration into feature/user-image 2023-11-01 10:25:20 +07:00
a5a1df45b1 python: user avatar 2023-11-01 10:18:58 +07:00
43fc58f6c7 Merge pull request #475 from ONLYOFFICE/feature/referenceData-open
Feature/reference data open
2023-10-31 14:27:49 +03:00
84824d1ed4 onRequestOpen to changelog 2023-10-31 14:26:29 +03:00
1620e8277d Merge remote-tracking branch 'remotes/origin/develop' into feature/referenceData-open
# Conflicts:
#	CHANGELOG.md
#	web/documentserver-example/python/src/views/actions.py
2023-10-31 14:25:00 +03:00
09c1b9e45c onRequestOpen to changelog 2023-10-31 13:28:06 +03:00
c7409e3f35 java-spring: added JsonIgnoreProperties annotation to ignore the "windowName" field 2023-10-31 13:02:14 +03:00
5c09e1cb53 Merge pull request #474 from ONLYOFFICE/feature/flake8-pylint
Feature/flake8 pylint
2023-10-31 12:54:52 +03:00
03ffae8115 php: fix convert (50dca2e2c0) 2023-10-31 13:54:06 +07:00
6a059bb498 Merge branch 'develop' into feature/flake8-pylint 2023-10-30 16:19:08 +07:00
2459863430 Merge pull request #468 from ONLYOFFICE/release/1.7.0
Release/1.7.0
2023-10-30 12:17:35 +03:00
c78814ced4 removed pylint 2023-10-30 16:15:57 +07:00
e444fd02e5 Merge branch 'develop' into feature/region-protect 2023-10-30 15:52:23 +07:00
0a76dba089 csharp: setUsers for region protection 2023-10-30 15:45:16 +07:00
7666394f1d csharp-mvc: setUsers for region protection 2023-10-30 15:28:45 +07:00
b8c6f72e74 java: setUsers for region protection 2023-10-30 14:38:45 +07:00
f501612067 java-spring: setUsers for region protection 2023-10-30 14:15:09 +07:00
043fb2c0cf returned documentserver version 7.3.3.50 to compose 2023-10-27 16:49:54 +03:00
c2bb7985de php: setUsers for region protection 2023-10-27 18:42:16 +07:00
eaf0245216 python: setUsers for region protection 2023-10-27 18:22:46 +07:00
ace724bc21 ruby: setUsers for region protection 2023-10-27 18:03:13 +07:00
8b5a2aceb0 deleted comments that duplicate the context 2023-10-26 17:11:29 +03:00
73c60fba7d ruby: onRequestOpen for referenceData source file 2023-10-26 16:45:32 +03:00
4387282949 java: onRequestOpen for referenceData source file 2023-10-26 16:30:48 +03:00
4e3f87f692 java-spring: onRequestOpen for referenceData source file 2023-10-26 16:20:30 +03:00
8d94e42421 python: onRequestOpen for referenceData source file 2023-10-26 15:55:11 +03:00
5b17ba41c3 mvc: onRequestOpen for referenceData source file 2023-10-26 15:55:11 +03:00
7ecec4219a csharp: onRequestOpen for referenceData source file 2023-10-26 15:55:11 +03:00
5ab7261d31 php: onRequestOpen for referenceData source file 2023-10-26 15:54:30 +03:00
8696f26555 nodejs: fix directUrl property (815b5fb) 2023-10-26 15:33:03 +03:00
bbeaea6d2e ruby: code refactoring 2023-10-26 13:34:14 +07:00
b093666d90 python: code refactoring 2023-10-26 13:03:10 +07:00
7825d0ae48 java-spring: code refactoring 2023-10-26 12:57:07 +07:00
c6d3c8d684 Merge branch 'develop' into feature/routing-fix 2023-10-26 12:45:22 +07:00
0d3cda32fa php: code refactoring 2023-10-26 11:33:38 +07:00
e5d4be0d61 python: code refactoring 2023-10-26 11:27:01 +07:00
5f2c5cea58 ruby: code refactoring 2023-10-26 11:15:26 +07:00
0a3785a3a4 python: merging lint fix 2023-10-25 13:55:29 +07:00
bcc49a4f41 Merge branch 'develop' into feature/flake8-pylint 2023-10-25 13:52:17 +07:00
fdf55a0da2 python: pylint workflow import-error(E0401) ignore 2023-10-25 13:10:12 +07:00
c23a8ac47d python: lint workflow fix 2023-10-25 12:48:34 +07:00
b7212b035a pylint: configuration file 2023-10-25 12:42:51 +07:00
39f39b0316 pylint: W0613 unused-argument 2023-10-25 11:44:00 +07:00
c3b2785c3f pylint: W3101 missing-timeout 2023-10-25 11:29:54 +07:00
6bd081c44d pylint: R1705 no-else-return 2023-10-25 11:19:19 +07:00
28211493bc pylint: C0209 consider-using-f-string 2023-10-25 11:12:39 +07:00
687b811eef pylint: C0411 wrong-import-order 2023-10-25 10:56:00 +07:00
14025def10 pylint: W0622 redefined-builtin 2023-10-24 13:51:44 +07:00
de4414fbb1 pylint: R1711 useless-return 2023-10-24 13:19:32 +07:00
feaa30bf2d pylint: C0325: Unnecessary parens 2023-10-24 12:36:22 +07:00
304995c3e1 flake8: E501 line too long (> 120 characters) 2023-10-24 11:23:55 +07:00
71215e342f Merge remote-tracking branch 'remotes/origin/develop' into feature/restore-history
# Conflicts:
#	CHANGELOG.md
2023-10-23 13:45:19 +03:00
8ea98a421d flake8: W293 blank line contains whitespace 2023-10-23 16:57:31 +07:00
11c9af2f80 flake8: W292 no newline at end of file 2023-10-23 16:54:22 +07:00
c3d7106072 flake8: W291 trailing whitespace 2023-10-23 16:52:33 +07:00
cf01b7f426 flake8: F841 local variable is assigned to but never used 2023-10-23 16:47:12 +07:00
8ce5c2d8d1 flake8: F401 imported but unused 2023-10-23 16:35:13 +07:00
51a28a7889 flake8: E713 test for membership should be 'not in' 2023-10-23 16:03:36 +07:00
c3074066f3 flake8: E711 comparison to None should be 'if cond is (not) None:' 2023-10-23 15:59:29 +07:00
8704be3daf flake8: E703 statement ends with a semicolon 2023-10-23 15:56:08 +07:00
88ec714801 flake8: E701 multiple statements on one line (colon) 2023-10-23 15:54:36 +07:00
75d6e79e6d flake8: E275 missing whitespace after keyword 2023-10-23 15:51:58 +07:00
e3a7399125 flake8: E272 multiple spaces before keyword 2023-10-23 15:49:57 +07:00
ddbfdf83bb flake8: E261 at least two spaces before inline comment 2023-10-23 15:48:33 +07:00
2fd48b9a37 flake8: E251 unexpected spaces around keyword / parameter equals 2023-10-23 15:32:53 +07:00
4b185e418c flake8: E231 missing whitespace after ',' or ':' 2023-10-23 15:27:48 +07:00
3d5d20da13 flake8: E225 missing whitespace around operator 2023-10-23 15:24:27 +07:00
93541a2702 flake8: E222 multiple spaces after operator 2023-10-23 15:22:11 +07:00
88f058f7b6 flake8: E211 whitespace before '(' 2023-10-23 15:19:50 +07:00
f1670c38df flake8: E203 whitespace before ':' 2023-10-23 15:11:07 +07:00
11fedb58bd flake8: E202 whitespace before '}' 2023-10-23 15:04:03 +07:00
650b514d82 flake8: E201 whitespace after '{' 2023-10-23 15:02:42 +07:00
5363a794b7 flake8: E126 continuation line over-indented for hanging indent 2023-10-23 14:58:41 +07:00
359c732b8a flake8: E122 continuation line missing indentation or outdented 2023-10-23 14:52:23 +07:00
952bd2b2f1 flake8: E121 continuation line under-indented for hanging indent 2023-10-23 14:49:56 +07:00
5ab8c4466a flake8: E131 continuation line unaligned for hanging indent 2023-10-23 14:45:20 +07:00
d8a7eeb1a0 flake8: E128 continuation line under-indented for visual indent 2023-10-23 14:35:21 +07:00
226689611e flake8: E124 closing bracket does not match visual indentation 2023-10-23 14:31:51 +07:00
0eb8c85f6f flake8: E111 indentation is not a multiple of 4 2023-10-23 14:23:31 +07:00
1c6312ed46 flake8: E3 blank lines 2023-10-23 14:15:14 +07:00
0e5e2b125d java-spring: lint fix 2023-10-20 21:00:39 +07:00
4b822dafe9 Merge branch 'develop' into feature/restore-history 2023-10-20 18:54:16 +07:00
cf64a80daa nodejs: set required users only 2023-10-20 14:53:17 +03:00
d29805a5ed nodejs: setUsers info 2023-10-20 14:53:11 +03:00
2a75ea80b8 nodejs: set current avatar 2023-10-20 14:37:04 +03:00
39820cec0a php: getting history via api 2023-10-19 14:19:15 +07:00
e9893c7c51 python: correct url/uri fix 2023-10-19 12:42:48 +07:00
fe352ebad1 ruby: getting history via api 2023-10-19 12:15:35 +07:00
18cf21efe4 python: getting history via api 2023-10-18 11:21:58 +07:00
825aafda25 nodejs: date format fix 2023-10-13 17:31:47 +07:00
75ab636a66 php: removed wrong route and unused method assets 2023-10-11 13:37:06 +07:00
7b275b15b7 python: added assets route for sample download 2023-10-11 13:27:27 +07:00
641cd912bb ruby: added asset route for sample download 2023-10-11 13:12:54 +07:00
170105efd3 java-spring: mapping fix for csv and assets 2023-10-10 10:40:12 +07:00
402 changed files with 10146 additions and 5959 deletions

View File

@ -21,20 +21,17 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
python-version: '3.11'
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install flake8
pip install pylint
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
make dev
- name: Lint Flake8
run: |
flake8 --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 --count --max-complexity=10 --max-line-length=79 --statistics
- name: Lint Pylint
run: |
find . -type f -name "*.py" | xargs pylint
make lint
# TODO: Configure mypy
# - name: Types mypy
# run: |
# make types

24
.gitmodules vendored
View File

@ -1,11 +1,3 @@
[submodule "web/documentserver-example/csharp-mvc/assets"]
path = web/documentserver-example/csharp-mvc/assets
url = https://github.com/ONLYOFFICE/document-templates
branch = main/en
[submodule "web/documentserver-example/csharp/assets"]
path = web/documentserver-example/csharp/assets
url = https://github.com/ONLYOFFICE/document-templates
branch = main/en
[submodule "web/documentserver-example/nodejs/public/assets/document-templates"]
path = web/documentserver-example/nodejs/public/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
@ -13,7 +5,14 @@
[submodule "web/documentserver-example/nodejs/public/assets/document-formats"]
path = web/documentserver-example/nodejs/public/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = master
branch = feature/v8.0
[submodule "web/documentserver-example/csharp-mvc/assets/document-templates"]
path = web/documentserver-example/csharp-mvc/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
branch = main/en
[submodule "web/documentserver-example/csharp-mvc/assets/document-formats"]
path = web/documentserver-example/csharp-mvc/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
[submodule "web/documentserver-example/php/assets/document-templates"]
path = web/documentserver-example/php/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
@ -54,3 +53,10 @@
path = web/documentserver-example/java-spring/src/main/resources/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats
branch = master
[submodule "web/documentserver-example/csharp/assets/document-templates"]
path = web/documentserver-example/csharp/assets/document-templates
url = https://github.com/ONLYOFFICE/document-templates
branch = main/en
[submodule "web/documentserver-example/csharp/assets/document-formats"]
path = web/documentserver-example/csharp/assets/document-formats
url = https://github.com/ONLYOFFICE/document-formats

View File

@ -1,18 +1,33 @@
# Change Log
- nodejs: user avatar
- fill permission in embedded mode
- delete all files
- handling conversion -9 error
- nodejs: wopi formsubmit icon
- nodejs: tabs menu
- change insert image
- different goback for users
- nodejs: converting function on index page
- nodejs: close editor
## 1.8.0
- nodejs: pdf, djvu, xps, oxps as pdf documentType
- nodejs: filling pdf
- version number to page meta
- ar skin languages
- sr-Latn-RS skin languages
- getting history via api
- using a repo with a list of formats
- convert after uploading only tagged formats
- link in referenceData
- setUsers for region protection
- onRequestOpen method
- user avatar
- trimming long name of uploading file
- nodejs: link in referenceData
- onRequestSelectDocument method
- onRequestSelectSpreadsheet method
- key in referenceData
- restore from history
- python: using a repo with a list of formats
- ruby: using a repo with a list of formats
- java: using a repo with a list of formats
- java: getting history by a separate request
- java-spring: using a repo with a list of formats
- java-spring: getting history by a separate request
## 1.7.0
- nodejs: onRequestSelectDocument method

View File

@ -1,11 +1,11 @@
## Integration examples
Test examples are simple document management systems that can be built into your application for testing.
These test examples are simple document management systems that can be built into your application for testing.
Do NOT use these integration examples on your own server without proper code modifications!
In case you enabled any of the test examples, disable it before going for production.
These examples show the way to integrate [ONLYOFFICE Docs][2] into your own website or application using one of the programming languages.
The package contains examples written in .Net (C# MVC), .Net (C#), Java, Node.js, PHP and Ruby.
The package contains examples written in .Net (C# MVC), .Net (C#), Java, Java Spring, Node.js, PHP, Python and Ruby.
You should change `http://documentserver` to your server address in these files:
* [.Net (C# MVC)](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/csharp-mvc) - `web/documentserver-example/csharp-mvc/web.appsettings.config`
@ -13,9 +13,9 @@ You should change `http://documentserver` to your server address in these files:
* [Java](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/java) - `web/documentserver-example/java/src/main/resources/settings.properties`
* [Java Spring](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/java-spring) - `web/documentserver-example/java-spring/src/main/resources/application.properties`
* [Node.js](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/nodejs) - `web/documentserver-example/nodejs/config/default.json`
* [PHP](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/php) - `web/documentserver-example/php/config.json`
* [Python](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/python) - `web/documentserver-example/python/config.py`
* [Ruby](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/ruby) - `web/documentserver-example/ruby/config/application.rb`
* [PHP](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/php) - `web/documentserver-example/php/src/configuration/ConfigurationManager.php`
* [Python](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/python) - `web/documentserver-example/python/src/configuration/configuration.py`
* [Ruby](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/ruby) - `web/documentserver-example/ruby/app/configuration/configuration.rb`
More information on how to use these examples can be found here: [http://api.onlyoffice.com/editors/demopreview](http://api.onlyoffice.com/editors/demopreview "http://api.onlyoffice.com/editors/demopreview")

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -502,6 +502,17 @@
justify-content: space-between;
align-items: center;
}
.buttonsMobile.indent {
margin-bottom: 0;
flex-wrap: nowrap;
}
.button.file-type:hover,
.button.file-type {
height: 28px;
width: 100px;
margin-bottom: 10px !important;
font-size: 9px;
}
.button.gray{
margin: 0;
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -230,6 +230,33 @@ label .checkbox {
color: #FF6F3D;
}
.button.file-type {
font-size: 11px;
color: #FFFFFF;
padding: 8px 8px;
margin-right: 10px;
}
.button.file-type.disable {
cursor: default;
}
.button.file-type.pale {
opacity: 30%;
}
.button.file-type.document {
background: #446995;
}
.button.file-type.spreadsheet {
background: #40865C;
}
.button.file-type.presentation {
background: #AA5252;
}
.upload-panel {
float: left;
padding: 24px 0;
@ -592,6 +619,29 @@ footer table tr td:first-child {
width: 4%;
}
.storedHeader {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
}
.storedHeaderClearAll {
padding-right: 52px;
}
.clear-all {
display: inline-block;
width: 100px;
padding: 2px;
outline: 1px solid #E5E5E5;
text-align: center;
cursor:pointer;
text-transform: uppercase;
background-color: #F5F5F5;
color: #666666;
}
.select-user {
color: #444444;
font-family: Open Sans;
@ -741,6 +791,16 @@ html {
margin-left: 25px;
}
.buttonsMobile.indent{
padding-left: 35px;
margin-top: 10px;
margin-bottom: 10px;
}
.invisible {
display: none;
}
.tooltip {
background: #FFFFFF;
border-radius: 5px;

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -31,6 +31,12 @@ namespace OnlineEditorsExampleMVC.Helpers
{
public class DocManagerHelper
{
//get server version
public static string GetVersion()
{
return WebConfigurationManager.AppSettings["version"];
}
// get max file size
public static long MaxFileSize
{
@ -51,24 +57,24 @@ namespace OnlineEditorsExampleMVC.Helpers
// get file extensions that can be viewed
public static List<string> ViewedExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.viewed-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.ViewableExtensions(); }
}
public static List<string> FillFormExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.fillform-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.FillableExtensions(); }
}
// get file extensions that can be edited
public static List<string> EditedExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.edited-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.EditableExtensions(); }
}
// get file extensions that can be converted
public static List<string> ConvertExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.convert-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.ConvertibleExtensions(); }
}
// get current user host address
@ -220,7 +226,7 @@ namespace OnlineEditorsExampleMVC.Helpers
public static string CreateDemo(string fileExt, bool withContent)
{
var demoName = (withContent ? "sample." : "new.") + fileExt; // create sample or new template file with the necessary extension
var demoPath = "assets\\" + (withContent ? "sample\\" : "new\\"); // get the path to the sample document
var demoPath = "assets\\document-templates\\" + (withContent ? "sample\\" : "new\\"); // get the path to the sample document
var fileName = GetCorrectName(demoName); // get a file name with an index if the file with such a name already exists

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -229,6 +229,10 @@ namespace OnlineEditorsExampleMVC.Helpers
switch (errorCode)
{
case -9:
// public const int c_nErrorConversionOutputFormatError = -9;
errorMessage = String.Format(errorMessageTemplate, "Error conversion output format");
break;
case -8:
// public const int c_nErrorFileVKey = -8;
errorMessage = String.Format(errorMessageTemplate, "Error document VKey");

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -256,6 +256,22 @@ namespace OnlineEditorsExampleMVC.Helpers
var action = jss.Deserialize<Dictionary<string, object>>(jss.Serialize(actions[0]));
var user = action["userid"].ToString(); // get the user id
DocManagerHelper.CreateMeta(fileName, user, "Filling Form", userAddress); // create meta data for the forcesaved file
string formsDataUrl = fileData["formsdataurl"].ToString();
if (!string.IsNullOrEmpty(formsDataUrl))
{
string formsName = DocManagerHelper.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + ".txt", userAddress);
string formsPath = DocManagerHelper.StoragePath(formsName, userAddress);
var bytesForms = DownloadFile(formsDataUrl);
SaveFile(bytesForms, formsPath);
}
else
{
throw new Exception("Document editing service did not return formsDataUrl");
}
}
} catch (Exception)
{

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -31,7 +31,9 @@ namespace OnlineEditorsExampleMVC.Helpers
"Can perform all actions with comments",
"The file favorite state is undefined",
"Can create files from templates using data from the editor",
"Can see the information about all users"
"Can see the information about all users",
"Has an avatar",
"Can submit forms"
};
static List<string> descr_user_2 = new List<string>()
@ -41,7 +43,9 @@ namespace OnlineEditorsExampleMVC.Helpers
"Can view comments, edit his own comments and comments left by users with no group. Can remove his own comments only",
"This file is marked as favorite",
"Can create new files from the editor",
"Can see the information about users from Group2 and users who dont belong to any group"
"Can see the information about users from Group2 and users who dont belong to any group",
"Has an avatar",
"Cant submit forms"
};
static List<string> descr_user_3 = new List<string>()
@ -54,7 +58,10 @@ namespace OnlineEditorsExampleMVC.Helpers
"Cant download the file",
"Cant print the file",
"Can create new files from the editor",
"Can see the information about Group2 users"
"Can see the information about Group2 users",
"Cant submit forms",
"Can't close history",
"Can't restore the file version"
};
static List<string> descr_user_0 = new List<string>()
@ -71,6 +78,7 @@ namespace OnlineEditorsExampleMVC.Helpers
"Can't view chat",
"Can't protect file",
"View file without collaboration",
"Cant submit forms"
};
private static List<User> users = new List<User>() {
@ -85,7 +93,9 @@ namespace OnlineEditorsExampleMVC.Helpers
null,
new List<string>(),
descr_user_1,
true
true,
true,
new Goback(null, false)
),
new User(
"uid-2",
@ -103,12 +113,14 @@ namespace OnlineEditorsExampleMVC.Helpers
true,
new List<string>(),
descr_user_2,
false
false,
true,
new Goback("Go to Documents", null)
),
new User(
"uid-3",
"Hamish Mitchell",
"mitchell@example.com",
null,
"group-3",
new List<string>() { "group-2" },
new Dictionary<string,object>()
@ -121,7 +133,9 @@ namespace OnlineEditorsExampleMVC.Helpers
false,
new List<string>() { "copy", "download", "print" },
descr_user_3,
false
false,
false,
null
),
new User(
"uid-0",
@ -134,7 +148,9 @@ namespace OnlineEditorsExampleMVC.Helpers
null,
new List<string>() { "protect" },
descr_user_0,
false
false,
false,
null
)
};
@ -171,6 +187,43 @@ namespace OnlineEditorsExampleMVC.Helpers
}
return usersData;
}
public static List<Dictionary<string, object>> getUsersInfo(string id)
{
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
if (id != "uid-0") {
foreach (User user in users)
{
usersData.Add(new Dictionary<string, object>()
{
{"id", user.id},
{"name", user.name },
{"email", user.email },
{"image", user.avatar ? DocManagerHelper.GetServerUrl(false) + "/Content/images/" + user.id + ".png" : null}
});
}
}
return usersData;
}
// get a list of users with their names and emails for protect
public static List<Dictionary<string, object>> getUsersForProtect(string id)
{
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
foreach (User user in users)
{
if (!user.id.Equals(id) && user.name != null)
{
usersData.Add(new Dictionary<string, object>()
{
{"name", user.name },
{"email", user.email },
{"id", user.id}
});
}
}
return usersData;
}
}
public class User
@ -186,8 +239,11 @@ namespace OnlineEditorsExampleMVC.Helpers
public List<string> descriptions;
public bool templates;
public List<string> userInfoGroups;
public bool avatar;
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates)
public Goback goback;
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback)
{
this.id = id;
this.name = name;
@ -200,6 +256,22 @@ namespace OnlineEditorsExampleMVC.Helpers
this.descriptions = descriptions;
this.templates = templates;
this.userInfoGroups = userInfoGroups;
this.avatar = avatar;
this.goback = goback;
}
}
public class Goback
{
public string text;
public bool? blank;
public Goback(){}
public Goback(string text, bool? blank)
{
this.text = text;
this.blank = blank;
}
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -88,7 +88,7 @@ namespace OnlineEditorsExampleMVC.Models
editorsMode = "fillForms";
canEdit = true;
}
var submitForm = editorsMode.Equals("fillForms") && id.Equals("uid-1") && false; // check if the Submit form button is displayed or not
var submitForm = editorsMode.Equals("fillForms") && id.Equals("uid-1"); // check if the Submit form button is displayed or not
var mode = canEdit && editorsMode != "view" ? "edit" : "view"; // set the mode parameter: change it to view if the document can't be edited
// favorite icon state
@ -157,7 +157,7 @@ namespace OnlineEditorsExampleMVC.Models
{ "download", !user.deniedPermissions.Contains("download") },
{ "edit", canEdit && (editorsMode == "edit" || editorsMode == "view" || editorsMode == "filter" || editorsMode == "blockcontent") },
{ "print", !user.deniedPermissions.Contains("print") },
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "embedded" && editorsMode != "blockcontent" },
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "blockcontent" },
{ "modifyFilter", editorsMode != "filter" },
{ "modifyContentControl", editorsMode != "blockcontent" },
{ "review", canEdit && (editorsMode == "edit" || editorsMode == "review") },
@ -190,7 +190,8 @@ namespace OnlineEditorsExampleMVC.Models
{
{ "id", !user.id.Equals("uid-0") ? user.id : null },
{ "name", user.name },
{ "group", user.group }
{ "group", user.group },
{ "image", user.avatar ? DocManagerHelper.GetServerUrl(false) + "/Content/images/" + user.id + ".png" : null}
}
},
{
@ -213,10 +214,12 @@ namespace OnlineEditorsExampleMVC.Models
{ "forcesave", false }, // adds the request for the forced file saving to the callback handler
{ "submitForm", submitForm }, // if the Submit form button is displayed or not
{
"goback", new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
"goback", user.goback != null ? new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
{
{ "url", DocManagerHelper.GetServerUrl(false) } // the absolute URL to the website address which will be opened when clicking the Open file location menu button
}
{ "url", DocManagerHelper.GetServerUrl(false) }, // the absolute URL to the website address which will be opened when clicking the Open file location menu button
{ "text", user.goback.text },
{ "blank", user.goback.blank }
} : new Dictionary<string, object>{}
}
}
}
@ -288,20 +291,20 @@ namespace OnlineEditorsExampleMVC.Models
{
Path = HttpRuntime.AppDomainAppVirtualPath
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
+ "Content\\images\\logo.png"
+ "Content\\images\\logo.svg"
};
var directMailMergeUrl = new UriBuilder(DocManagerHelper.GetServerUrl(false))
{
Path = HttpRuntime.AppDomainAppVirtualPath
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
+ "Content\\images\\logo.png"
+ "Content\\images\\logo.svg"
};
// create a logo config
var logoConfig = new Dictionary<string, object>
{
{ "fileType", "png"},
{ "fileType", "svg"},
{ "url", mailMergeUrl.ToString()}
};
@ -372,5 +375,22 @@ namespace OnlineEditorsExampleMVC.Models
var user = Users.getUser(id);
usersForMentions = !user.id.Equals("uid-0") ? jss.Serialize(Users.getUsersForMentions(user.id)) : null;
}
public void GetUsersInfo(HttpRequest request, out string usersInfo)
{
var jss = new JavaScriptSerializer();
var id = request.Cookies.GetOrDefault("uid", null);
var user = Users.getUser(id);
usersInfo = jss.Serialize(Users.getUsersInfo(user.id));
}
//get a users for protect
public void GetUsersProtect(HttpRequest request, out string usersForProtect)
{
var jss = new JavaScriptSerializer();
var id = request.Cookies.GetOrDefault("uid", null);
var user = Users.getUser(id);
usersForProtect = !user.id.Equals("uid-0") ? jss.Serialize(Users.getUsersForProtect(user.id)) : null;
}
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,8 +16,14 @@
*
*/
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using static OnlineEditorsExampleMVC.Models.FileUtility;
using System.Linq;
using System.Text;
using Newtonsoft.Json.Converters;
namespace OnlineEditorsExampleMVC.Models
{
@ -35,38 +41,188 @@ namespace OnlineEditorsExampleMVC.Models
{
var ext = Path.GetExtension(fileName).ToLower();
if (ExtsDocument.Contains(ext)) return FileType.Word; // word type for document extensions
if (ExtsSpreadsheet.Contains(ext)) return FileType.Cell; // cell type for spreadsheet extensions
if (ExtsPresentation.Contains(ext)) return FileType.Slide; // slide type for presentation extensions
if (FormatManager.DocumentExtensions().Contains(ext)) return FileType.Word; // word type for document extensions
if (FormatManager.SpreadsheetExtensions().Contains(ext)) return FileType.Cell; // cell type for spreadsheet extensions
if (FormatManager.PresentationExtensions().Contains(ext)) return FileType.Slide; // slide type for presentation extensions
return FileType.Word; // the default type is word
}
}
// document extensions
public static readonly List<string> ExtsDocument = new List<string>
{
".doc", ".docx", ".docm",
".dot", ".dotx", ".dotm",
".odt", ".fodt", ".ott", ".rtf", ".txt",
".html", ".htm", ".mht", ".xml",
".pdf", ".djvu", ".fb2", ".epub", ".xps", ".oxps", ".oform"
};
public class EmptyTolerantStringEnumConverter : StringEnumConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String && string.IsNullOrWhiteSpace(reader.Value.ToString()))
return Activator.CreateInstance(objectType);
// spreadsheet extensions
public static readonly List<string> ExtsSpreadsheet = new List<string>
{
".xls", ".xlsx", ".xlsm", ".xlsb",
".xlt", ".xltx", ".xltm",
".ods", ".fods", ".ots", ".csv"
};
return base.ReadJson(reader, objectType, existingValue, serializer);
}
}
// presentation extensions
public static readonly List<string> ExtsPresentation = new List<string>
public class Format
{
public string Name { get; }
[JsonConverter(typeof(EmptyTolerantStringEnumConverter))]
public FileType Type { get; }
public List<string> Actions { get; }
public List<string> Convert { get; }
public List<string> Mime { get; }
public Format(string name, FileType type, List<string> actions, List<string> convert, List<string> mime)
{
Name = name;
Type = type;
Actions = actions;
Convert = convert;
Mime = mime;
}
public string Extension()
{
return "." + Name;
}
}
public static class FormatManager
{
private static List<Format> cachedFormats;
public static List<string> FillableExtensions()
{
return Fillable()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Fillable()
{
return All()
.Where(format => format.Actions.Contains("fill"))
.ToList();
}
public static List<string> ViewableExtensions()
{
return Viewable()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Viewable()
{
return All()
.Where(format => format.Actions.Contains("view"))
.ToList();
}
public static List<string> EditableExtensions()
{
return Editable()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Editable()
{
return All()
.Where(format => format.Actions.Contains("edit") || format.Actions.Contains("lossy-edit"))
.ToList();
}
public static List<string> ConvertibleExtensions()
{
return Convertible()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Convertible()
{
return All()
.Where(format => format.Actions.Contains("auto-convert"))
.ToList();
}
public static List<string> SpreadsheetExtensions()
{
return Spreadsheets()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Spreadsheets()
{
return All()
.Where(format => format.Type == FileType.Cell)
.ToList();
}
public static List<string> PresentationExtensions()
{
return Presentations()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Presentations()
{
return All()
.Where(format => format.Type == FileType.Slide)
.ToList();
}
public static List<string> DocumentExtensions()
{
return Documents()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Documents()
{
return All()
.Where(format => format.Type == FileType.Word)
.ToList();
}
public static List<string> AllExtensions()
{
return All()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> All()
{
if (cachedFormats == null)
{
".pps", ".ppsx", ".ppsm",
".ppt", ".pptx", ".pptm",
".pot", ".potx", ".potm",
".odp", ".fodp", ".otp"
};
var path = GetPath();
var lines = File.ReadLines(path, Encoding.UTF8);
var contents = string.Join(Environment.NewLine, lines);
var formats = JsonConvert.DeserializeObject<Format[]>(contents);
cachedFormats = formats.ToList();
}
return cachedFormats;
}
private static string GetPath()
{
string path = Path.Combine(GetDirectory(), "onlyoffice-docs-formats.json");
if (File.Exists(path))
{
return path;
}
else
{
throw new FileNotFoundException("The JSON file does not exist.");
}
}
private static string GetDirectory()
{
string directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets", "document-formats");
return Path.GetFullPath(directory);
}
}
}

View File

@ -145,7 +145,6 @@
<Content Include="Content\images\icon_xlsx.svg" />
<Content Include="Content\images\info.svg" />
<Content Include="Content\images\loader16.gif" />
<Content Include="Content\images\logo.png" />
<Content Include="Content\images\logo.svg" />
<Content Include="Content\images\mobile-fill-forms.svg" />
<Content Include="Content\images\mobile.svg" />
@ -181,17 +180,23 @@
<Content Include="WebEditor.ashx" />
</ItemGroup>
<ItemGroup>
<Content Include="assets\AUTHORS.md" />
<Content Include="assets\LICENSE" />
<Content Include="assets\new\new.docx" />
<Content Include="assets\new\new.docxf" />
<Content Include="assets\new\new.pptx" />
<Content Include="assets\new\new.xlsx" />
<Content Include="assets\sample\csv.csv" />
<Content Include="assets\sample\sample.docx" />
<Content Include="assets\sample\sample.docxf" />
<Content Include="assets\sample\sample.pptx" />
<Content Include="assets\sample\sample.xlsx" />
<Content Include="assets\document-templates\AUTHORS.md" />
<Content Include="assets\document-templates\LICENSE" />
<Content Include="assets\document-templates\new\new.docx" />
<Content Include="assets\document-templates\new\new.docxf" />
<Content Include="assets\document-templates\new\new.pptx" />
<Content Include="assets\document-templates\new\new.xlsx" />
<Content Include="assets\document-templates\README.md" />
<Content Include="assets\document-templates\sample\csv.csv" />
<Content Include="assets\document-templates\sample\sample.docx" />
<Content Include="assets\document-templates\sample\sample.docxf" />
<Content Include="assets\document-templates\sample\sample.pptx" />
<Content Include="assets\document-templates\sample\sample.xlsx" />
<Content Include="assets\document-formats\AUTHORS.md" />
<Content Include="assets\document-formats\CHANGELOG.md" />
<Content Include="assets\document-formats\LICENSE" />
<Content Include="assets\document-formats\onlyoffice-docs-formats.json" />
<Content Include="assets\document-formats\README.md" />
<None Include="packages.config" />
</ItemGroup>
<PropertyGroup>

View File

@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Ascensio System SIA")]
[assembly: AssemblyProduct("OnlineEditorsExampleMVC")]
[assembly: AssemblyCopyright("Ascensio System SIA 2023")]
[assembly: AssemblyCopyright("Ascensio System SIA 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

View File

@ -0,0 +1,66 @@
/**
*
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
class Format {
constructor(name, type, actions, convert, mime) {
this.name = name;
this.type = type;
this.actions = actions;
this.convert = convert;
this.mime = mime;
}
isAutoConvertible() {
return this.actions.includes('auto-convert');
}
isEditable() {
return this.actions.includes('edit') || this.actions.includes('lossy-edit');
}
isFillable() {
return this.actions.includes('fill');
}
}
class FormatManager {
formats = [];
constructor(formats) {
if(Array.isArray(formats)) this.formats = formats;
}
findByExtension(extension) {
return this.formats.find(format => format.name == extension);
}
isAutoConvertible(extension) {
let format = this.findByExtension(extension);
return format !== undefined && format.isAutoConvertible();
}
isEditable(extension) {
let format = this.findByExtension(extension);
return format !== undefined && format.isEditable();
}
isFillable(extension) {
let format = this.findByExtension(extension);
return format !== undefined && format.isFillable();
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,6 +17,27 @@
*/
var directUrl;
var formatManager;
window.onload = function () {
fetch("webeditor.ashx?type=formats")
.then((response) => response.json())
.then((data) => {
if (data.formats) {
let formats = [];
data.formats.forEach(format => {
formats.push(new Format(
format.Name,
format.Type,
format.Actions,
format.Convert,
format.Mime
));
});
formatManager = new FormatManager(formats);
}
})
}
if (typeof jQuery != "undefined") {
jq = jQuery.noConflict();
@ -87,7 +108,7 @@ if (typeof jQuery != "undefined") {
});
var timer = null;
var checkConvert = function (filePass) {
var checkConvert = function (filePass, fileType) {
filePass = filePass ? filePass : null;
if (timer != null) {
clearTimeout(timer);
@ -103,7 +124,7 @@ if (typeof jQuery != "undefined") {
var posExt = fileName.lastIndexOf('.');
posExt = 0 <= posExt ? fileName.substring(posExt).trim().toLowerCase() : '';
if (ConverExtList.indexOf(posExt) == -1) {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
return;
@ -116,7 +137,7 @@ if (typeof jQuery != "undefined") {
contentType: "text/xml",
type: "post",
dataType: "json",
data: JSON.stringify({ filename: fileName, filePass: filePass }),
data: JSON.stringify({ filename: fileName, filePass: filePass, fileExt: fileType }),
url: UrlConverter,
complete: function (data) {
var responseText = data.responseText;
@ -132,6 +153,12 @@ if (typeof jQuery != "undefined") {
}
return;
} else {
if (response.error.includes("Error conversion output format")) {
jq("#select-file-type").removeClass("invisible");
jq("#step2").removeClass("current");
jq("#hiddenFileName").attr("placeholder", filePass);
return;
}
jq(".current").removeClass("current");
jq(".step:not(.done)").addClass("error");
jq("#mainProgress .error-message").show().find("span").text(response.error);
@ -143,7 +170,7 @@ if (typeof jQuery != "undefined") {
jq("#hiddenFileName").val(response.filename);
if (response.step && response.step < 100) {
checkConvert(filePass);
checkConvert(filePass, fileType);
} else {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
@ -178,10 +205,10 @@ if (typeof jQuery != "undefined") {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
var posExt = fileName.lastIndexOf('.');
var posExt = fileName.lastIndexOf('.') + 1;
posExt = 0 <= posExt ? fileName.substring(posExt).trim().toLowerCase() : '';
if (EditedExtList.indexOf(posExt) != -1 || FillExtList.indexOf(posExt) != -1) {
if (formatManager.isEditable(posExt) || formatManager.isFillable(posExt)) {
jq("#beginEdit").removeClass("disable");
}
};
@ -213,6 +240,15 @@ if (typeof jQuery != "undefined") {
});
};
jq(document).on("click", ".file-type:not(.disable)", function () {
const currentElement = jq(this);
var fileType = currentElement.attr("data");
var filePass = jq("#hiddenFileName").attr("placeholder");
jq('.file-type').addClass(["disable", "pale"]);
currentElement.removeClass("pale");
checkConvert(filePass, fileType);
});
jq(document).on("click", "#enterPass", function () {
var filePass = jq("#filePass").val();
if (filePass) {
@ -294,6 +330,23 @@ if (typeof jQuery != "undefined") {
});
});
jq(document).on("click", ".clear-all", function () {
if (confirm("Delete all the files?")) {
var requestAddress = "webeditor.ashx"
+ "?type=remove";
jq.ajax({
async: true,
contentType: "text/xml",
url: requestAddress,
complete: function (data) {
if (JSON.parse(data.responseText).success) {
window.location.reload(true);
}
}
});
}
});
function showUserTooltip (isMobile) {
if ( jq("div#portal-info").is(":hidden") ) {
jq("div#portal-info").show();

View File

@ -14,7 +14,7 @@
<meta name="mobile-web-app-capable" content="yes" />
<!--
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -182,15 +182,39 @@
}
};
var onRequestOpen = function (event) { // user open external data source
innerAlert("onRequestOpen");
var windowName = event.data.windowName;
requestReference(event.data, function (data) {
if (data.error) {
var winEditor = window.open("", windowName);
winEditor.close();
innerAlert(data.error, true);
return;
}
var link = data.link;
window.open(link, windowName);
});
};
var onRequestReferenceData = function (event) { // user refresh external data source
event.data.directUrl = !!config.document.directUrl;
innerAlert("onRequestReferenceData");
requestReference(event.data, function (data) {
docEditor.setReferenceData(data);
});
};
var requestReference = function (data, callback) {
innerAlert(data);
data.directUrl = !!config.document.directUrl;
let xhr = new XMLHttpRequest();
xhr.open("POST", "webeditor.ashx?type=reference");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(event.data));
xhr.send(JSON.stringify(data));
xhr.onload = function () {
console.log(xhr.responseText);
docEditor.setReferenceData(JSON.parse(xhr.responseText));
callback(JSON.parse(xhr.responseText));
}
};
@ -235,6 +259,48 @@
}
}
<% string usersForMentions; %>
<% Model.GetUsersMentions(Request, out usersForMentions); %>
<% string usersInfo; %>
<% Model.GetUsersInfo(Request, out usersInfo); %>
<% string usersForProtect; %>
<% Model.GetUsersProtect(Request, out usersForProtect); %>
var onRequestUsers = function (event) {
if (event && event.data){
var c = event.data.c;
}
switch (c) {
case "info":
users = [];
var allUsers = <%= usersInfo %>;
for (var i = 0; i < event.data.id.length; i++) {
for (var j = 0; j < allUsers.length; j++) {
if (allUsers[j].id == event.data.id[i]) {
users.push(allUsers[j]);
break;
}
}
}
break;
case "protect":
var users = <%= usersForProtect %>;
break;
default:
users = <%= usersForMentions %>;
}
docEditor.setUsers({
"c": c,
"users": users,
});
};
var onRequestSendNotify = function (event) {
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
var data = JSON.stringify(event.data);
innerAlert("onRequestSendNotify: " + data);
};
config = <%= Model.GetDocConfig(Request, Url) %>;
config.width = "100%";
@ -252,41 +318,33 @@
"onRequestSelectSpreadsheet": onRequestSelectSpreadsheet,
};
<% string usersForMentions; %>
<% Model.GetUsersMentions(Request, out usersForMentions); %>
if (config.editorConfig.user.id) {
// the user is trying to show the document version history
config.events['onRequestHistory'] = onRequestHistory;
// the user is trying to click the specific document version in the document version history
config.events['onRequestHistoryData'] = onRequestHistoryData;
// the user is trying to go back to the document from viewing the document version history
config.events['onRequestHistoryClose'] = function () {
document.location.reload();
};
config.events['onRequestRestore'] = onRequestRestore;
if (config.editorConfig.user.id !== "uid-3") {
config.events['onRequestHistoryClose'] = function () {
document.location.reload();
};
config.events['onRequestRestore'] = onRequestRestore;
}
// add mentions for not anonymous users
<% if (!string.IsNullOrEmpty(usersForMentions))
{ %>
config.events['onRequestUsers'] = function () {
docEditor.setUsers({ // set a list of users to mention in the comments
"users": <%= usersForMentions %>
});
};
config.events['onRequestUsers'] = onRequestUsers;
<% } %>
// the user is mentioned in a comment
config.events['onRequestSendNotify'] = function (event) {
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
var data = JSON.stringify(event.data);
innerAlert("onRequestSendNotify: " + data);
};
config.events['onRequestSendNotify'] = onRequestSendNotify;
// prevent file renaming for anonymous users
config.events['onRequestRename'] = onRequestRename;
config.events['onRequestReferenceData'] = onRequestReferenceData;
// prevent switch the document from the viewing into the editing mode for anonymous users
config.events['onRequestEditRights'] = onRequestEditRights;
config.events['onRequestOpen'] = onRequestOpen;
}
if (config.editorConfig.createUrl) {
@ -294,12 +352,6 @@
};
var сonnectEditor = function () {
if ((config.document.fileType === "docxf" || config.document.fileType === "oform")
&& DocsAPI.DocEditor.version().split(".")[0] < 7) {
innerAlert("Please update ONLYOFFICE Docs to version 7.0 to work on fillable forms online.");
return;
}
docEditor = new DocsAPI.DocEditor("iframeEditor", config);
};

View File

@ -13,9 +13,10 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width" />
<meta name="server-version" content=<%= DocManagerHelper.GetVersion() %> />
<!--
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -67,7 +68,7 @@
<a class="try-editor slide" data-type="pptx">Presentation</a>
</li>
<li>
<a class="try-editor form" data-type="docxf">Form template</a>
<a class="try-editor form" data-type="docxf">PDF form</a>
</li>
</ul>
<label class="side-option">
@ -150,7 +151,14 @@
if (storedFiles.Any())
{ %>
<div class="stored-list">
<span class="header-list">Your documents</span>
<div class="storedHeader">
<div class="storedHeaderText">
<span class="header-list">Your documents</span>
</div>
<div class="storedHeaderClearAll">
<div class="clear-all">Clear all</div>
</div>
</div>
<table class="tableHeader" cellspacing="0" cellpadding="0" width="100%">
<thead>
<tr>
@ -294,6 +302,15 @@
<div class="describeUpload">After these steps are completed, you can work with your document.</div>
<span id="step1" class="step">1. Loading the file.</span>
<span class="step-descr">The loading speed depends on file size and additional elements it contains.</span>
<div id="select-file-type" class="invisible">
<br />
<span class="step">Please select the current document type</span>
<div class="buttonsMobile indent">
<div class="button file-type document" data="docx">Document</div>
<div class="button file-type spreadsheet" data="xlsx">Spreadsheet</div>
<div class="button file-type presentation" data="pptx">Presentation</div>
</div>
</div>
<br />
<span id="step2" class="step">2. Conversion.</span>
<span class="step-descr">The file is converted to OOXML so that you can edit it.</span>
@ -356,9 +373,6 @@
<%: Scripts.Render("~/bundles/jquery", "~/bundles/scripts") %>
<script language="javascript" type="text/javascript">
var FillExtList = '<%= string.Join(",", DocManagerHelper.FillFormExts.ToArray()) %>';
var ConverExtList = '<%= string.Join(",", DocManagerHelper.ConvertExts.ToArray()) %>';
var EditedExtList = '<%= string.Join(",", DocManagerHelper.EditedExts.ToArray()) %>';
var UrlConverter = '<%= Url.Content("~/webeditor.ashx?type=convert") %>';
var UrlEditor = '<%= Url.Action("editor", "Home") %>';
</script>

View File

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width" />
<!--
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -87,6 +87,9 @@ namespace OnlineEditorsExampleMVC
case "reference":
Reference(context);
break;
case "formats":
Formats(context);
break;
}
}
@ -240,7 +243,13 @@ namespace OnlineEditorsExampleMVC
var fileUri = DocManagerHelper.GetDownloadUrl(fileName);
var extension = (Path.GetExtension(fileName).ToLower() ?? "").Trim('.');
var internalExtension = "ooxml";
string conversionExtension = "ooxml";
object fileExt;
if (body.TryGetValue("fileExt", out fileExt) && !String.IsNullOrEmpty(fileExt.ToString()))
{
conversionExtension = fileExt.ToString();
}
// check if the file with such an extension can be converted
if (DocManagerHelper.ConvertExts.Contains("." + extension))
@ -258,7 +267,7 @@ namespace OnlineEditorsExampleMVC
// get the url and file type of the converted file
Dictionary<string, string> newFileData;
var result = ServiceConverter.GetConvertedData(downloadUri.ToString(), extension, internalExtension, key, true, out newFileData, filePass, lang);
var result = ServiceConverter.GetConvertedData(downloadUri.ToString(), extension, conversionExtension, key, true, out newFileData, filePass, lang);
if (result != 100)
{
context.Response.Write("{ \"step\" : \"" + result + "\", \"filename\" : \"" + fileName + "\"}");
@ -393,8 +402,17 @@ namespace OnlineEditorsExampleMVC
context.Response.ContentType = "text/plain";
try
{
var fileName = Path.GetFileName(context.Request["fileName"]);
Remove(fileName); // remove a file and its history if it exists
string fileName = context.Request["fileName"];
if (!String.IsNullOrEmpty(fileName))
{
fileName = Path.GetFileName(context.Request["fileName"]);
Remove(fileName); // remove a file and its history if it exists
}
else
{
RemoveUserDirectory(); // remove the user's directory
}
context.Response.Write("{ \"success\": true }");
}
@ -414,6 +432,14 @@ namespace OnlineEditorsExampleMVC
if (Directory.Exists(histDir)) Directory.Delete(histDir, true);
}
// remove the user's directory
private static void RemoveUserDirectory()
{
var path = DocManagerHelper.StoragePath("", null); // get the path to the user directory
if (Directory.Exists(path)) Directory.Delete(path, true);
}
// get files information
private static void Files(HttpContext context)
{
@ -453,7 +479,7 @@ namespace OnlineEditorsExampleMVC
private static void Assets(HttpContext context)
{
var fileName = Path.GetFileName(context.Request["filename"]);
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
download(filePath, context);
}
@ -461,7 +487,7 @@ namespace OnlineEditorsExampleMVC
private static void GetCsv(HttpContext context)
{
var fileName = "csv.csv";
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
download(filePath, context);
}
@ -812,6 +838,27 @@ namespace OnlineEditorsExampleMVC
}
}
if (fileName == "" && body.ContainsKey("link"))
{
string link = body["link"].ToString();
if (!link.Contains(DocManagerHelper.GetServerUrl(false)))
{
context.Response.Write(jss.Serialize(new Dictionary<string, string>() {
{ "url", link },
{ "directUrl", link }
}));
return;
}
Uri linkUri = new Uri(link);
fileName = HttpUtility.ParseQueryString(linkUri.Query).Get("fileName");
if (string.IsNullOrEmpty(fileName) || !File.Exists(DocManagerHelper.StoragePath(fileName, null)))
{
context.Response.Write("{ \"error\": \"File is not exist\"}");
return;
}
}
if (fileName == "")
{
try
@ -853,7 +900,8 @@ namespace OnlineEditorsExampleMVC
{ "instanceId", DocManagerHelper.GetServerUrl(false) }
}
},
{ "path", fileName }
{ "path", fileName },
{ "link", DocManagerHelper.GetServerUrl(false) + "Editor?fileName=" + fileName }
};
if (JwtManager.Enabled)
@ -929,6 +977,25 @@ namespace OnlineEditorsExampleMVC
return history;
}
// return all the supported formats
private static void Formats(HttpContext context)
{
try
{
Dictionary<string, object> data = new Dictionary<string, object>
{
{ "formats", FormatManager.All() }
};
context.Response.ContentType = "application/json";
var jss = new JavaScriptSerializer();
context.Response.Write(jss.Serialize(data));
}
catch (Exception e)
{
context.Response.Write("{ \"error\": \"" + e.Message + "\"}");
}
}
}
}

View File

@ -1,16 +1,12 @@
<?xml version="1.0"?>
<appSettings>
<clear />
<add key="version" value="1.7.0"/>
<add key="version" value="1.8.0"/>
<add key="filesize-max" value="52428800"/>
<add key="storage-path" value=""/>
<add key="filename-max" value="50"/>
<add key="files.docservice.fillform-docs" value=".docx|.oform"/>
<add key="files.docservice.viewed-docs" value=".djvu|.oxps|.pdf|.xps"/>
<add key="files.docservice.edited-docs" value=".csv|.docm|.docx|.docxf|.dotm|.dotx|.epub|.fb2|.html|.odp|.ods|.odt|.otp|.ots|.ott|.potm|.potx|.ppsm|.ppsx|.pptm|.pptx|.rtf|.txt|.xlsm|.xlsx|.xltm|.xltx"/>
<add key="files.docservice.convert-docs" value=".doc|.dot|.dps|.dpt|.epub|.et|.ett|.fb2|.fodp|.fods|.fodt|.htm|.html|.mht|.mhtml|.odp|.ods|.odt|.otp|.ots|.ott|.pot|.pps|.ppt|.rtf|.stw|.sxc|.sxi|.sxw|.wps|.wpt|.xls|.xlsb|.xlt|.xml"/>
<add key="files.docservice.timeout" value="120000" />
<add key="files.docservice.secret" value="" />
<add key="files.docservice.header" value="Authorization" />
@ -19,7 +15,7 @@
<add key="files.docservice.verify-peer-off" value="true"/>
<add key="files.docservice.languages" value="en:English|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA: Test Language"/>
<add key="files.docservice.languages" value="en:English|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Latn-RS:Serbian|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA: Test Language"/>
<add key="files.docservice.url.site" value="http://documentserver/"/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -502,6 +502,17 @@
justify-content: space-between;
align-items: center;
}
.buttonsMobile.indent {
margin-bottom: 0;
flex-wrap: nowrap;
}
.button.file-type:hover,
.button.file-type {
height: 28px;
width: 100px;
margin-bottom: 10px !important;
font-size: 9px;
}
.button.gray{
margin: 0;
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -230,6 +230,33 @@ label .checkbox {
color: #FF6F3D;
}
.button.file-type {
font-size: 11px;
color: #FFFFFF;
padding: 8px 8px;
margin-right: 10px;
}
.button.file-type.disable {
cursor: default;
}
.button.file-type.pale {
opacity: 30%;
}
.button.file-type.document {
background: #446995;
}
.button.file-type.spreadsheet {
background: #40865C;
}
.button.file-type.presentation {
background: #AA5252;
}
.upload-panel {
float: left;
padding: 24px 0;
@ -596,6 +623,29 @@ footer a:hover {
width: 4%;
}
.storedHeader {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
}
.storedHeaderClearAll {
padding-right: 52px;
}
.clear-all {
display: inline-block;
width: 100px;
padding: 2px;
outline: 1px solid #E5E5E5;
text-align: center;
cursor:pointer;
text-transform: uppercase;
background-color: #F5F5F5;
color: #666666;
}
.select-user {
color: #444444;
font-family: Open Sans;
@ -745,6 +795,16 @@ html {
margin-left: 25px;
}
.buttonsMobile.indent{
padding-left: 35px;
margin-top: 10px;
margin-bottom: 10px;
}
.invisible {
display: none;
}
.tooltip {
background: #FFFFFF;
border-radius: 5px;

View File

@ -13,10 +13,11 @@
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width" />
<meta name="server-version" content=<%= GetVersion() %> />
<title>ONLYOFFICE</title>
<!--
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -70,7 +71,7 @@
<a class="try-editor slide" data-type="slide">Presentation</a>
</li>
<li>
<a class="try-editor form" data-type="docxf">Form template</a>
<a class="try-editor form" data-type="docxf">PDF form</a>
</li>
</ul>
<label class="side-option">
@ -152,7 +153,14 @@
if (storedFiles.Any())
{ %>
<div class="stored-list">
<span class="header-list">Your documents</span>
<div class="storedHeader">
<div class="storedHeaderText">
<span class="header-list">Your documents</span>
</div>
<div class="storedHeaderClearAll">
<div class="clear-all">Clear all</div>
</div>
</div>
<table class="tableHeader" cellspacing="0" cellpadding="0" width="100%">
<thead>
<tr >
@ -296,6 +304,15 @@
<div class="describeUpload">After these steps are completed, you can work with your document.</div>
<span id="step1" class="step">1. Loading the file.</span>
<span class="step-descr">The loading speed depends on file size and additional elements it contains.</span>
<div id="select-file-type" class="invisible">
<br />
<span class="step">Please select the current document type</span>
<div class="buttonsMobile indent">
<div class="button file-type document" data="docx">Document</div>
<div class="button file-type spreadsheet" data="xlsx">Spreadsheet</div>
<div class="button file-type presentation" data="pptx">Presentation</div>
</div>
</div>
<br />
<span id="step2" class="step">2. Conversion.</span>
<span class="step-descr">The file is converted to OOXML so that you can edit it.</span>
@ -363,12 +380,8 @@
<script language="javascript" type="text/javascript" src="script/jquery.iframe-transport.js"></script>
<script language="javascript" type="text/javascript" src="script/jquery.fileupload.js"></script>
<script language="javascript" type="text/javascript" src="script/jquery.dropdownToggle.js"></script>
<script language="javascript" type="text/javascript" src="script/formats.js"></script>
<script language="javascript" type="text/javascript" src="script/jscript.js"></script>
<script language="javascript" type="text/javascript">
var FillFormExtList = '<%= string.Join(",", FillFormsExts.ToArray()) %>';
var ConverExtList = '<%= string.Join(",", ConvertExts.ToArray()) %>';
var EditedExtList = '<%= string.Join(",", EditedExts.ToArray()) %>';
</script>
</body>
</html>

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -30,49 +30,15 @@ using ASC.Api.DocumentConverter;
namespace OnlineEditorsExample
{
internal static class FileType
{
// the spreadsheet extension list
public static readonly List<string> ExtsSpreadsheet = new List<string>
{
".xls", ".xlsx", ".xlsm", ".xlsb",
".xlt", ".xltx", ".xltm",
".ods", ".fods", ".ots", ".csv"
};
// the presentation extension list
public static readonly List<string> ExtsPresentation = new List<string>
{
".pps", ".ppsx", ".ppsm",
".ppt", ".pptx", ".pptm",
".pot", ".potx", ".potm",
".odp", ".fodp", ".otp"
};
// the document extension list
public static readonly List<string> ExtsDocument = new List<string>
{
".doc", ".docx", ".docm",
".dot", ".dotx", ".dotm",
".odt", ".fodt", ".ott", ".rtf", ".txt",
".html", ".htm", ".mht", ".xml",
".pdf", ".djvu", ".fb2", ".epub", ".xps", ".oxps", ".oform"
};
// get an internal file extension
public static string GetInternalExtension(string extension)
{
extension = Path.GetExtension(extension).ToLower(); // get file extension
if (ExtsDocument.Contains(extension)) return ".docx"; // .docx for text document extensions
if (ExtsSpreadsheet.Contains(extension)) return ".xlsx"; // .xlsx for spreadsheet extensions
if (ExtsPresentation.Contains(extension)) return ".pptx"; // .pptx for presentation extensions
return string.Empty;
}
}
public partial class _Default : Page
{
//get server version
public static string GetVersion()
{
return WebConfigurationManager.AppSettings["version"];
}
// get the virtual path
public static string VirtualPath
{
@ -115,24 +81,24 @@ namespace OnlineEditorsExample
// file extensions that can be viewed
private static List<string> ViewedExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.viewed-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.ViewableExtensions(); }
}
public static List<string> FillFormsExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.fillform-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.FillableExtensions(); }
}
// file extensions that can be edited
public static List<string> EditedExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.edited-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.EditableExtensions(); }
}
// file extensions that can be converted
public static List<string> ConvertExts
{
get { return (WebConfigurationManager.AppSettings["files.docservice.convert-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
get { return FormatManager.ConvertibleExtensions(); }
}
private static string _fileName;
@ -284,9 +250,9 @@ namespace OnlineEditorsExample
{
var ext = Path.GetExtension(fileName).ToLower();
if (FileType.ExtsDocument.Contains(ext)) return "word"; // word for text document extensions
if (FileType.ExtsSpreadsheet.Contains(ext)) return "cell"; // cell for spreadsheet extensions
if (FileType.ExtsPresentation.Contains(ext)) return "slide"; // slide for presentation extensions
if (FormatManager.DocumentExtensions().Contains(ext)) return "word"; // word for text document extensions
if (FormatManager.SpreadsheetExtensions().Contains(ext)) return "cell"; // cell for spreadsheet extensions
if (FormatManager.PresentationExtensions().Contains(ext)) return "slide"; // slide for presentation extensions
return "word"; // the default document type is word
}
@ -471,7 +437,14 @@ namespace OnlineEditorsExample
var lang = context.Request.Cookies.GetOrDefault("ulang", null);
var extension = (Path.GetExtension(_fileName).ToLower() ?? "").Trim('.');
var internalExtension = "ooxml";
string conversionExtension = "ooxml"; // set the default conversion extension as ooxml
object fileExt;
// change the conversion extension if it was provided in the request body
if (body.TryGetValue("fileExt", out fileExt) && !String.IsNullOrEmpty(fileExt.ToString()))
{
conversionExtension = fileExt.ToString();
}
// check if the file with such an extension can be converted
if (ConvertExts.Contains("." + extension))
@ -488,7 +461,7 @@ namespace OnlineEditorsExample
// get the url and file type of the converted file
Dictionary<string, string> newFileData;
var result = ServiceConverter.GetConvertedData(fileUrl.ToString() , extension, internalExtension, key, true, out newFileData, filePass, lang);
var result = ServiceConverter.GetConvertedData(fileUrl.ToString() , extension, conversionExtension, key, true, out newFileData, filePass, lang);
if (result != 100)
{
return "{ \"step\" : \"" + result + "\", \"filename\" : \"" + _fileName + "\"}";

View File

@ -15,7 +15,7 @@
<title>ONLYOFFICE</title>
<!--
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -194,19 +194,80 @@
}
};
var onRequestReferenceData = function (event) { // user refresh external data source
var onRequestOpen = function (event) { // user open external data source
innerAlert("onRequestOpen");
var windowName = event.data.windowName;
event.data.directUrl = !!config.document.directUrl;
requestReference(event.data, function (data) {
if (data.error) {
var winEditor = window.open("", windowName);
winEditor.close();
innerAlert(data.error, true);
return;
}
var link = data.link;
window.open(link, windowName);
});
};
var onRequestReferenceData = function (event) { // user refresh external data source
innerAlert("onRequestReferenceData");
requestReference(event.data, function (data) {
docEditor.setReferenceData(data);
});
};
var requestReference = function (data, callback) {
innerAlert(data);
data.directUrl = !!config.document.directUrl;
let xhr = new XMLHttpRequest();
xhr.open("POST", "webeditor.ashx?type=reference");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(event.data));
xhr.send(JSON.stringify(data));
xhr.onload = function () {
console.log(xhr.responseText);
docEditor.setReferenceData(JSON.parse(xhr.responseText));
callback(JSON.parse(xhr.responseText));
}
};
var onRequestUsers = function (event) {
if (event && event.data){
var c = event.data.c;
}
switch (c) {
case "info":
users = [];
var allUsers = <%= UsersInfo %>;
for (var i = 0; i < event.data.id.length; i++) {
for (var j = 0; j < allUsers.length; j++) {
if (allUsers[j].id == event.data.id[i]) {
users.push(allUsers[j]);
break;
}
}
}
break;
case "protect":
var users = <%= UsersForProtect %>;
break;
default:
users = <%= UsersForMentions %>;
}
docEditor.setUsers({
"c": c,
"users": users,
});
};
var onRequestSendNotify = function (event) {
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
var data = JSON.stringify(event.data);
innerAlert("onRequestSendNotify: " + data);
};
config = <%= DocConfig %>;
config.width = "100%";
@ -249,47 +310,42 @@
docEditor.setHistoryData(JSON.parse(xhr.responseText)); // send the link to the document for viewing the version history
}
};
config.events['onRequestHistoryClose'] = function () { // the user is trying to go back to the document from viewing the document version history
document.location.reload();
};
config.events['onRequestRestore'] = function (event) {
var fileName = "<%= FileName %>";
var version = event.data.version;
var data = {
fileName: fileName,
version: version
if (config.editorConfig.user.id !== "uid-3") {
config.events['onRequestHistoryClose'] = function () { // the user is trying to go back to the document from viewing the document version history
document.location.reload();
};
config.events['onRequestRestore'] = function (event) {
var fileName = "<%= FileName %>";
var version = event.data.version;
var data = {
fileName: fileName,
version: version
};
let xhr = new XMLHttpRequest();
xhr.open("POST", "webeditor.ashx?type=restore&directUrl=" + !!config.document.directUrl);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(data));
xhr.onload = function () {
docEditor.refreshHistory(JSON.parse(xhr.responseText));
}
};
let xhr = new XMLHttpRequest();
xhr.open("POST", "webeditor.ashx?type=restore&directUrl=" + !!config.document.directUrl);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(data));
xhr.onload = function () {
docEditor.refreshHistory(JSON.parse(xhr.responseText));
}
};
}
// add mentions for not anonymous users
<% if (!string.IsNullOrEmpty(UsersForMentions))
{ %>
config.events['onRequestUsers'] = function () {
docEditor.setUsers({ // set a list of users to mention in the comments
"users": <%= UsersForMentions %>
});
};
config.events['onRequestUsers'] = onRequestUsers;
<% } %>
// the user is mentioned in a comment
config.events['onRequestSendNotify'] = function (event) {
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
var data = JSON.stringify(event.data);
innerAlert("onRequestSendNotify: " + data);
};
config.events['onRequestSendNotify'] = onRequestSendNotify;
// prevent file renaming for anonymous users
config.events['onRequestRename'] = onRequestRename;
config.events['onRequestReferenceData'] = onRequestReferenceData;
// prevent switch the document from the viewing into the editing mode for anonymous users
config.events['onRequestEditRights'] = onRequestEditRights;
config.events['onRequestOpen'] = onRequestOpen;
}
if (config.editorConfig.createUrl) {
@ -297,12 +353,6 @@
};
var сonnectEditor = function () {
if ((config.document.fileType === "docxf" || config.document.fileType === "oform")
&& DocsAPI.DocEditor.version().split(".")[0] < 7) {
innerAlert("Please update ONLYOFFICE Docs to version 7.0 to work on fillable forms online.");
return;
}
docEditor = new DocsAPI.DocEditor("iframeEditor", config);
};

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -64,6 +64,8 @@ namespace OnlineEditorsExample
protected string DocumentData { get; private set; }
protected string DataSpreadsheet { get; private set; }
protected string UsersForMentions { get; private set; }
protected string UsersInfo { get; private set; }
protected string UsersForProtect { get; private set; }
protected string DocumentType { get { return _Default.DocumentType(FileName); } }
// get callback url
@ -152,7 +154,7 @@ namespace OnlineEditorsExample
editorsMode = "fillForms";
canEdit = true;
}
var submitForm = editorsMode.Equals("fillForms") && id.Equals("uid-1") && false; // check if the Submit form button is displayed or hidden
var submitForm = editorsMode.Equals("fillForms") && id.Equals("uid-1"); // check if the Submit form button is displayed or hidden
var mode = canEdit && editorsMode != "view" ? "edit" : "view"; // get the editor opening mode (edit or view)
var jss = new JavaScriptSerializer();
@ -223,7 +225,7 @@ namespace OnlineEditorsExample
{ "download", !user.deniedPermissions.Contains("download") },
{ "edit", canEdit && (editorsMode == "edit" || editorsMode =="view" || editorsMode == "filter" || editorsMode == "blockcontent") },
{ "print", !user.deniedPermissions.Contains("print") },
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "embedded" && editorsMode != "blockcontent" },
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "blockcontent" },
{ "modifyFilter", editorsMode != "filter" },
{ "modifyContentControl", editorsMode != "blockcontent" },
{ "review", canEdit && (editorsMode == "edit" || editorsMode == "review") },
@ -256,7 +258,8 @@ namespace OnlineEditorsExample
{
{ "id", !user.id.Equals("uid-0") ? user.id : null },
{ "name", user.name },
{ "group", user.group }
{ "group", user.group },
{ "image", user.avatar ? _Default.GetServerUrl(false) + "/App_Themes/images/"+ user.id + ".png" : null }
}
},
{
@ -279,10 +282,12 @@ namespace OnlineEditorsExample
{ "forcesave", false }, // adds the request for the forced file saving to the callback handler
{ "submitForm", submitForm }, // if the Submit form button is displayed or not
{
"goback", new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
"goback", user.goback != null ? new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
{
{ "url", _Default.GetServerUrl(false) + "default.aspx" } // the absolute URL to the website address which will be opened when clicking the Open file location menu button
}
{ "url", _Default.GetServerUrl(false) + "default.aspx" }, // the absolute URL to the website address which will be opened when clicking the Open file location menu button
{ "text", user.goback.text },
{ "blank", user.goback.blank }
} : new Dictionary<string, object>{}
}
}
}
@ -317,6 +322,13 @@ namespace OnlineEditorsExample
// get users for mentions
List<Dictionary<string, object>> usersData = Users.getUsersForMentions(user.id);
UsersForMentions = !user.id.Equals("uid-0") ? jss.Serialize(usersData) : null;
List<Dictionary<string, object>> usersInfo = Users.getUsersInfo(user.id);
UsersInfo = jss.Serialize(usersData);
// get users for protect
List<Dictionary<string, object>> usersProtectData = Users.getUsersForProtect(user.id);
UsersForProtect = !user.id.Equals("uid-0") ? jss.Serialize(usersProtectData) : null;
}
catch { }
}
@ -328,17 +340,17 @@ namespace OnlineEditorsExample
var InsertImageUrl = new UriBuilder(_Default.GetServerUrl(true));
InsertImageUrl.Path = HttpRuntime.AppDomainAppVirtualPath
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
+ "App_Themes\\images\\logo.png";
+ "App_Themes\\images\\logo.svg";
var DirectImageUrl = new UriBuilder(_Default.GetServerUrl(false));
DirectImageUrl.Path = HttpRuntime.AppDomainAppVirtualPath
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
+ "App_Themes\\images\\logo.png";
+ "App_Themes\\images\\logo.svg";
// create a logo config
Dictionary<string, object> logoConfig = new Dictionary<string, object>
{
{ "fileType", "png"},
{ "fileType", "svg"},
{ "url", InsertImageUrl.ToString()}
};
@ -484,7 +496,7 @@ namespace OnlineEditorsExample
return;
}
var demoName = (string.IsNullOrEmpty(sample) ? "new" : "sample") + ext; // create demo document name with the necessary extension
var demoPath = "assets\\" + (string.IsNullOrEmpty(sample) ? "new\\" : "sample\\"); // and put this file into the assets directory
var demoPath = "assets\\document-templates\\" + (string.IsNullOrEmpty(sample) ? "new\\" : "sample\\"); // and put this file into the assets directory
FileName = _Default.GetCorrectName(demoName); // get file name with an index if such a file name already exists

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -231,6 +231,10 @@ namespace ASC.Api.DocumentConverter
switch (errorCode)
{
case -9:
// public const int c_nErrorConversionOutputFormatError = -9;
errorMessage = String.Format(errorMessageTemplate, "Error conversion output format");
break;
case -8:
// public const int c_nErrorFileVKey = -8;
errorMessage = String.Format(errorMessageTemplate, "Error document VKey");

View File

@ -0,0 +1,192 @@
/**
*
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
namespace OnlineEditorsExample
{
public class Format
{
public string Name { get; }
public string Type { get; }
public List<string> Actions { get; }
public List<string> Convert { get; }
public List<string> Mime { get; }
public Format(string name, string type, List<string> actions, List<string> convert, List<string> mime)
{
Name = name;
Type = type;
Actions = actions;
Convert = convert;
Mime = mime;
}
public string Extension()
{
return "." + Name;
}
}
public class FormatManager
{
private static List<Format> cachedFormats;
public static List<string> FillableExtensions()
{
return Fillable()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Fillable()
{
return All()
.Where(format => format.Actions.Contains("fill"))
.ToList();
}
public static List<string> ViewableExtensions()
{
return Viewable()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Viewable()
{
return All()
.Where(format => format.Actions.Contains("view"))
.ToList();
}
public static List<string> EditableExtensions()
{
return Editable()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Editable()
{
return All()
.Where(format => format.Actions.Contains("edit") || format.Actions.Contains("lossy-edit"))
.ToList();
}
public static List<string> ConvertibleExtensions()
{
return Convertible()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Convertible()
{
return All()
.Where(format => format.Actions.Contains("auto-convert"))
.ToList();
}
public static List<string> SpreadsheetExtensions()
{
return Spreadsheets()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Spreadsheets()
{
return All()
.Where(format => format.Type == "cell")
.ToList();
}
public static List<string> PresentationExtensions()
{
return Presentations()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Presentations()
{
return All()
.Where(format => format.Type == "slide")
.ToList();
}
public static List<string> DocumentExtensions()
{
return Documents()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> Documents()
{
return All()
.Where(format => format.Type == "word")
.ToList();
}
public static List<string> AllExtensions()
{
return All()
.Select(format => format.Extension())
.ToList();
}
public static List<Format> All()
{
if (cachedFormats == null) {
var path = GetPath();
var lines = File.ReadLines(path, Encoding.UTF8);
var contents = string.Join(Environment.NewLine, lines);
var formats = JsonConvert.DeserializeObject<Format[]>(contents);
cachedFormats = formats.ToList();
}
return cachedFormats;
}
private static string GetPath()
{
string path = Path.Combine(GetDirectory(), "onlyoffice-docs-formats.json");
if (File.Exists(path))
{
return path;
}
else
{
throw new FileNotFoundException("The JSON file does not exist.");
}
}
private static string GetDirectory()
{
string directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets", "document-formats");
return Path.GetFullPath(directory);
}
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -119,6 +119,7 @@
<DependentUpon>DocEditor.aspx</DependentUpon>
</Compile>
<Compile Include="DocumentConverter.cs" />
<Compile Include="FormatManager.cs" />
<Compile Include="JwtManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Default.aspx.cs">
@ -144,7 +145,6 @@
</ItemGroup>
<ItemGroup>
<Content Include="App_Themes\images\loader16.gif" />
<Content Include="App_Themes\images\logo.png" />
<Content Include="App_Themes\jquery-ui.css" />
<Content Include="App_Themes\stylesheet.css" />
<Content Include="DocEditor.aspx" />
@ -157,17 +157,23 @@
<Content Include="WebEditor.ashx" />
</ItemGroup>
<ItemGroup>
<Content Include="assets\AUTHORS.md" />
<Content Include="assets\LICENSE" />
<Content Include="assets\new\new.docx" />
<Content Include="assets\new\new.docxf" />
<Content Include="assets\new\new.pptx" />
<Content Include="assets\new\new.xlsx" />
<Content Include="assets\sample\csv.csv" />
<Content Include="assets\sample\sample.docx" />
<Content Include="assets\sample\sample.docxf" />
<Content Include="assets\sample\sample.pptx" />
<Content Include="assets\sample\sample.xlsx" />
<Content Include="assets\document-formats\AUTHORS.md" />
<Content Include="assets\document-formats\CHANGELOG.md" />
<Content Include="assets\document-formats\LICENSE" />
<Content Include="assets\document-formats\onlyoffice-docs-formats.json" />
<Content Include="assets\document-formats\README.md" />
<Content Include="assets\document-templates\AUTHORS.md" />
<Content Include="assets\document-templates\LICENSE" />
<Content Include="assets\document-templates\new\new.docx" />
<Content Include="assets\document-templates\new\new.docxf" />
<Content Include="assets\document-templates\new\new.pptx" />
<Content Include="assets\document-templates\new\new.xlsx" />
<Content Include="assets\document-templates\README.md" />
<Content Include="assets\document-templates\sample\csv.csv" />
<Content Include="assets\document-templates\sample\sample.docx" />
<Content Include="assets\document-templates\sample\sample.docxf" />
<Content Include="assets\document-templates\sample\sample.pptx" />
<Content Include="assets\document-templates\sample\sample.xlsx" />
<None Include="packages.config" />
</ItemGroup>
<PropertyGroup>

View File

@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Ascensio System SIA")]
[assembly: AssemblyProduct("OnlineEditorsExample")]
[assembly: AssemblyCopyright("Ascensio System SIA 2023")]
[assembly: AssemblyCopyright("Ascensio System SIA 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -258,6 +258,22 @@ namespace OnlineEditorsExample
var action = jss.Deserialize<Dictionary<string, object>>(jss.Serialize(actions[0]));
var user = action["userid"].ToString(); // get the user id
DocEditor.CreateMeta(fileName, user, "Filling Form", userAddress); // create meta data for the forcesaved file
string formsDataUrl = fileData["formsdataurl"].ToString();
if (!string.IsNullOrEmpty(formsDataUrl))
{
string formsName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + ".txt", userAddress);
string formsPath = _Default.StoragePath(formsName, userAddress);
var bytesForms = DownloadFile(formsDataUrl);
SaveFile(bytesForms, formsPath);
}
else
{
throw new Exception("Document editing service did not return formsDataUrl");
}
}
}
catch (Exception)

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -30,7 +30,9 @@ namespace OnlineEditorsExample
"Can perform all actions with comments",
"The file favorite state is undefined",
"Can create files from templates using data from the editor",
"Can see the information about all users"
"Can see the information about all users",
"Has an avatar",
"Can submit forms"
};
static List<string> descr_user_2 = new List<string>()
@ -40,7 +42,9 @@ namespace OnlineEditorsExample
"Can view comments, edit his own comments and comments left by users with no group. Can remove his own comments only",
"This file is marked as favorite",
"Can create new files from the editor",
"Can see the information about users from Group2 and users who dont belong to any group"
"Can see the information about users from Group2 and users who dont belong to any group",
"Has an avatar",
"Cant submit forms"
};
static List<string> descr_user_3 = new List<string>()
@ -53,7 +57,10 @@ namespace OnlineEditorsExample
"Cant download the file",
"Cant print the file",
"Can create new files from the editor",
"Can see the information about Group2 users"
"Can see the information about Group2 users",
"Cant submit forms",
"Can't close history",
"Can't restore the file version"
};
static List<string> descr_user_0 = new List<string>()
@ -70,6 +77,7 @@ namespace OnlineEditorsExample
"Can't view chat",
"Can't protect file",
"View file without collaboration",
"Cant submit forms"
};
private static List<User> users = new List<User>() {
@ -84,7 +92,9 @@ namespace OnlineEditorsExample
null,
new List<string>(),
descr_user_1,
true
true,
true,
new Goback(null, false)
),
new User(
"uid-2",
@ -102,12 +112,14 @@ namespace OnlineEditorsExample
true,
new List<string>(),
descr_user_2,
false
false,
true,
new Goback("Go to Documents",null)
),
new User(
"uid-3",
"Hamish Mitchell",
"mitchell@example.com",
null,
"group-3",
new List<string>() { "group-2" },
new Dictionary<string,object>()
@ -120,7 +132,9 @@ namespace OnlineEditorsExample
false,
new List<string>() { "copy", "download", "print" },
descr_user_3,
false
false,
false,
null
),
new User(
"uid-0",
@ -133,7 +147,9 @@ namespace OnlineEditorsExample
null,
new List<string>() { "protect" },
descr_user_0,
false
false,
false,
null
)
};
@ -171,6 +187,44 @@ namespace OnlineEditorsExample
}
return usersData;
}
public static List<Dictionary<string, object>> getUsersInfo(string id)
{
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
if(id != "uid-0"){
foreach (User user in users)
{
usersData.Add(new Dictionary<string, object>()
{
{"id", user.id},
{"name", user.name },
{"email", user.email },
{"image", user.avatar ? _Default.GetServerUrl(false) + "/App_Themes/images/"+ user.id + ".png" : null }
});
}
}
return usersData;
}
// get a list of users with their names and emails for protect
public static List<Dictionary<string, object>> getUsersForProtect(string id)
{
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
foreach (User user in users)
{
if (!user.id.Equals(id) && user.name != null)
{
usersData.Add(new Dictionary<string, object>()
{
{"name", user.name },
{"email", user.email },
{"id", user.id}
});
}
}
return usersData;
}
}
public class User
@ -186,8 +240,10 @@ namespace OnlineEditorsExample
public List<string> descriptions;
public bool templates;
public List<string> userInfoGroups;
public bool avatar;
public Goback goback;
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates)
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback)
{
this.id = id;
this.name = name;
@ -200,6 +256,22 @@ namespace OnlineEditorsExample
this.descriptions = descriptions;
this.templates = templates;
this.userInfoGroups = userInfoGroups;
this.avatar = avatar;
this.goback = goback;
}
}
public class Goback
{
public string text;
public bool? blank;
public Goback(){}
public Goback(string text, bool? blank)
{
this.text = text;
this.blank = blank;
}
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -29,6 +29,7 @@ using System.Net;
using System.Collections;
using System.Net.Sockets;
using ASC.Api.DocumentConverter;
using Newtonsoft.Json;
namespace OnlineEditorsExample
{
@ -86,6 +87,9 @@ namespace OnlineEditorsExample
case "reference":
Reference(context);
break;
case "formats":
Formats(context);
break;
}
}
@ -221,12 +225,22 @@ namespace OnlineEditorsExample
context.Response.ContentType = "text/plain";
try
{
var fileName = Path.GetFileName(context.Request["fileName"]);
var path = _Default.StoragePath(fileName, HttpUtility.UrlEncode(_Default.CurUserHostAddress(HttpContext.Current.Request.UserHostAddress)));
var histDir = _Default.HistoryDir(path);
string fileName = context.Request["fileName"];
string userAddress = HttpUtility.UrlEncode(_Default.CurUserHostAddress(HttpContext.Current.Request.UserHostAddress));
if (File.Exists(path)) File.Delete(path); // delete file
if (Directory.Exists(histDir)) Directory.Delete(histDir, true); // delete file history
if (!String.IsNullOrEmpty(fileName))
{
fileName = Path.GetFileName(fileName);
var path = _Default.StoragePath(fileName, userAddress);
var histDir = _Default.HistoryDir(path);
if (File.Exists(path)) File.Delete(path); // delete file
if (Directory.Exists(histDir)) Directory.Delete(histDir, true); // delete file history
} else
{
string userDir = _Default.StoragePath("", userAddress);
if (Directory.Exists(userDir)) Directory.Delete(userDir, true); // delete the user's directory
}
context.Response.Write("{ \"success\": true }");
}
@ -275,7 +289,7 @@ namespace OnlineEditorsExample
private static void Assets(HttpContext context)
{
var fileName = Path.GetFileName(context.Request["filename"]);
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
download(filePath, context);
}
@ -283,7 +297,7 @@ namespace OnlineEditorsExample
private static void GetCsv(HttpContext context)
{
var fileName = "csv.csv";
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
download(filePath, context);
}
@ -622,6 +636,27 @@ namespace OnlineEditorsExample
}
}
if (fileName == "" && body.ContainsKey("link"))
{
string link = body["link"].ToString();
if (!link.Contains(_Default.GetServerUrl(false)))
{
context.Response.Write(jss.Serialize(new Dictionary<string, string>() {
{ "url", link },
{ "directUrl", link }
}));
return;
}
Uri linkUri = new Uri(link);
fileName = HttpUtility.ParseQueryString(linkUri.Query).Get("fileID");
if (string.IsNullOrEmpty(fileName) || !File.Exists(_Default.StoragePath(fileName, null)))
{
context.Response.Write("{ \"error\": \"File is not exist\"}");
return;
}
}
if (fileName == "")
{
try
@ -665,7 +700,8 @@ namespace OnlineEditorsExample
{"instanceId", _Default.GetServerUrl(false) }
}
},
{ "path", fileName }
{ "path", fileName },
{ "link", _Default.GetServerUrl(false) + "doceditor.aspx?fileID=" + fileName }
};
if (JwtManager.Enabled)
@ -755,5 +791,25 @@ namespace OnlineEditorsExample
+ userAddress;
return fileUrl.ToString();
}
// return all the supported formats
private static void Formats(HttpContext context)
{
try
{
Dictionary<string, object> data = new Dictionary<string, object>
{
{ "formats", FormatManager.All() }
};
context.Response.ContentType = "application/json";
var jss = new JavaScriptSerializer();
context.Response.Write(jss.Serialize(data));
}
catch (Exception e)
{
context.Response.Write("{ \"error\": \"" + e.Message + "\"}");
}
}
}
}

View File

@ -0,0 +1,66 @@
/**
*
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
class Format {
constructor(name, type, actions, convert, mime) {
this.name = name;
this.type = type;
this.actions = actions;
this.convert = convert;
this.mime = mime;
}
isAutoConvertible() {
return this.actions.includes('auto-convert');
}
isEditable() {
return this.actions.includes('edit') || this.actions.includes('lossy-edit');
}
isFillable() {
return this.actions.includes('fill');
}
}
class FormatManager {
formats = [];
constructor(formats) {
if(Array.isArray(formats)) this.formats = formats;
}
findByExtension(extension) {
return this.formats.find(format => format.name == extension);
}
isAutoConvertible(extension) {
let format = this.findByExtension(extension);
return format !== undefined && format.isAutoConvertible();
}
isEditable(extension) {
let format = this.findByExtension(extension);
return format !== undefined && format.isEditable();
}
isFillable(extension) {
let format = this.findByExtension(extension);
return format !== undefined && format.isFillable();
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -17,6 +17,27 @@
*/
var directUrl;
var formatManager;
window.onload = function () {
fetch("webeditor.ashx?type=formats")
.then((response) => response.json())
.then((data) => {
if (data.formats) {
let formats = [];
data.formats.forEach(format => {
formats.push(new Format(
format.Name,
format.Type,
format.Actions,
format.Convert,
format.Mime
));
});
formatManager = new FormatManager(formats);
}
})
}
if (typeof jQuery != "undefined") {
jq = jQuery.noConflict();
@ -87,7 +108,7 @@ if (typeof jQuery != "undefined") {
});
var timer = null;
var checkConvert = function (filePass) {
var checkConvert = function (filePass, fileType) {
filePass = filePass ? filePass : null;
if (timer != null) {
clearTimeout(timer);
@ -103,7 +124,7 @@ if (typeof jQuery != "undefined") {
var posExt = fileName.lastIndexOf('.');
posExt = 0 <= posExt ? fileName.substring(posExt).trim().toLowerCase() : '';
if (ConverExtList.indexOf(posExt) == -1) {
if (!formatManager.isAutoConvertible(posExt)) {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
return;
@ -116,7 +137,7 @@ if (typeof jQuery != "undefined") {
contentType: "text/xml",
type: "post",
dataType: "json",
data: JSON.stringify({ filename: fileName, filePass: filePass }),
data: JSON.stringify({ filename: fileName, filePass: filePass, fileExt: fileType }),
url: requestAddress,
complete: function (data) {
var responseText = data.responseText;
@ -132,6 +153,12 @@ if (typeof jQuery != "undefined") {
}
return;
} else {
if (response.error.includes("Error conversion output format")) {
jq("#select-file-type").removeClass("invisible");
jq("#step2").removeClass("current");
jq("#hiddenFileName").attr("placeholder", filePass);
return;
}
jq(".current").removeClass("current");
jq(".step:not(.done)").addClass("error");
jq("#mainProgress .error-message").show().find("span").text(response.error);
@ -143,7 +170,7 @@ if (typeof jQuery != "undefined") {
jq("#hiddenFileName").val(response.filename);
if (response.step && response.step < 100) {
checkConvert(filePass);
checkConvert(filePass, fileType);
} else {
jq("#step2").addClass("done").removeClass("current");
loadScripts();
@ -178,10 +205,10 @@ if (typeof jQuery != "undefined") {
jq("#beginView, #beginEmbedded").removeClass("disable");
var fileName = jq("#hiddenFileName").val();
var posExt = fileName.lastIndexOf('.');
var posExt = fileName.lastIndexOf('.') + 1;
posExt = 0 <= posExt ? fileName.substring(posExt).trim().toLowerCase() : '';
if (EditedExtList.indexOf(posExt) != -1 || FillFormExtList.indexOf(posExt) != -1) {
if (formatManager.isEditable(posExt) || formatManager.isFillable(posExt)) {
jq("#beginEdit").removeClass("disable");
}
};
@ -213,6 +240,15 @@ if (typeof jQuery != "undefined") {
});
};
jq(document).on("click", ".file-type:not(.disable)", function () {
const currentElement = jq(this);
var fileType = currentElement.attr("data");
var filePass = jq("#hiddenFileName").attr("placeholder");
jq('.file-type').addClass(["disable", "pale"]);
currentElement.removeClass("pale");
checkConvert(filePass, fileType);
});
jq(document).on("click", "#enterPass", function () {
var filePass = jq("#filePass").val();
if (filePass) {
@ -293,6 +329,24 @@ if (typeof jQuery != "undefined") {
});
});
jq(document).on("click", ".clear-all", function () {
if (confirm("Delete all the files?")) {
var requestAddress = "webeditor.ashx"
+ "?type=remove";
jq.ajax({
async: true,
contentType: "text/xml",
url: requestAddress,
complete: function (data) {
if (JSON.parse(data.responseText).success) {
window.location.reload(true);
}
}
});
}
});
function showUserTooltip (isMobile) {
if ( jq("div#portal-info").is(":hidden") ) {
jq("div#portal-info").show();

View File

@ -1,16 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<clear />
<add key="version" value="1.7.0"/>
<add key="version" value="1.8.0"/>
<add key="filesize-max" value="52428800"/>
<add key="storage-path" value=""/>
<add key="filename-max" value="50"/>
<add key="files.docservice.fillform-docs" value=".docx|.oform"/>
<add key="files.docservice.viewed-docs" value=".djvu|.oxps|.pdf|.xps"/>
<add key="files.docservice.edited-docs" value=".csv|.docm|.docx|.docxf|.dotm|.dotx|.epub|.fb2|.html|.odp|.ods|.odt|.otp|.ots|.ott|.potm|.potx|.ppsm|.ppsx|.pptm|.pptx|.rtf|.txt|.xlsm|.xlsx|.xltm|.xltx"/>
<add key="files.docservice.convert-docs" value=".doc|.dot|.dps|.dpt|.epub|.et|.ett|.fb2|.fodp|.fods|.fodt|.htm|.html|.mht|.mhtml|.odp|.ods|.odt|.otp|.ots|.ott|.pot|.pps|.ppt|.rtf|.stw|.sxc|.sxi|.sxw|.wps|.wpt|.xls|.xlsb|.xlt|.xml"/>
<add key="files.docservice.timeout" value="120000" />
<add key="files.docservice.secret" value="" />
<add key="files.docservice.header" value="Authorization" />
@ -18,7 +14,7 @@
<add key="files.docservice.token.useforrequest" value="true" />
<add key="files.docservice.languages" value="en:English|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA: Test Language"/>
<add key="files.docservice.languages" value="en:English|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Latn-RS:Serbian|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA: Test Language"/>
<add key="files.docservice.url.site" value="http://documentserver/"/>

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -19,6 +19,7 @@
package com.onlyoffice.integration;
import com.onlyoffice.integration.documentserver.serializers.FilterState;
import com.onlyoffice.integration.entities.Goback;
import com.onlyoffice.integration.services.UserServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -46,7 +47,8 @@ public class ExampleData {
"Can't rename files from the editor",
"Can't view chat",
"Can't protect file",
"View file without collaboration"
"View file without collaboration",
"Cant submit forms"
);
// the description for user 1
@ -58,7 +60,9 @@ public class ExampleData {
"The file favorite state is undefined",
"Can create a file from a template with data from the editor",
"Can see the information about all users",
"Can view chat"
"Can view chat",
"Has an avatar",
"Can submit forms"
);
// the description for user 2
@ -71,7 +75,9 @@ public class ExampleData {
"This file is favorite",
"Can create a file from an editor",
"Can see the information about users from Group2 and users who dont belong to any group",
"Can view chat"
"Can view chat",
"Has an avatar",
"Cant submit forms"
);
// the description for user 3
@ -86,30 +92,33 @@ public class ExampleData {
"He cant print the file",
"Can create a file from an editor",
"Can see the information about Group2 users",
"Can view chat"
"Can view chat",
"Cant submit forms",
"Can't close history",
"Can't restore the file version"
);
// create user 1 with the specified parameters
userService.createUser("John Smith", "smith@example.com", descriptionUserFirst,
"", List.of(FilterState.NULL.toString()), List.of(FilterState.NULL.toString()),
List.of(FilterState.NULL.toString()), List.of(FilterState.NULL.toString()),
List.of(FilterState.NULL.toString()), null, true, true);
List.of(FilterState.NULL.toString()), null, true, true, true, new Goback(null, false));
// create user 2 with the specified parameters
userService.createUser("Mark Pottato", "pottato@example.com", descriptionUserSecond,
"group-2", List.of("", "group-2"), List.of(FilterState.NULL.toString()),
List.of("group-2", ""), List.of("group-2"), List.of("group-2", ""), true, true,
true);
true, true, new Goback("Go to Documents", null));
// create user 3 with the specified parameters
userService.createUser("Hamish Mitchell", "mitchell@example.com", descriptionUserThird,
userService.createUser("Hamish Mitchell", null, descriptionUserThird,
"group-3", List.of("group-2"), List.of("group-2", "group-3"), List.of("group-2"),
new ArrayList<>(), List.of("group-2"), false, true, true);
new ArrayList<>(), List.of("group-2"), false, true, true, false, null);
// create user 0 with the specified parameters
userService.createUser("Anonymous", null, descriptionUserZero, "",
List.of(FilterState.NULL.toString()), List.of(FilterState.NULL.toString()),
List.of(FilterState.NULL.toString()), List.of(FilterState.NULL.toString()),
new ArrayList<>(), null, false, false);
new ArrayList<>(), null, false, false, false, null);
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -25,6 +25,8 @@ import com.onlyoffice.integration.documentserver.models.enums.Action;
import com.onlyoffice.integration.documentserver.storage.FileStoragePathBuilder;
import com.onlyoffice.integration.entities.User;
import com.onlyoffice.integration.dto.Mentions;
import com.onlyoffice.integration.dto.UserInfo;
import com.onlyoffice.integration.dto.Protect;
import com.onlyoffice.integration.documentserver.models.enums.Type;
import com.onlyoffice.integration.documentserver.models.filemodel.FileModel;
import com.onlyoffice.integration.services.UserServices;
@ -117,6 +119,8 @@ public class EditorController {
}
User user = optionalUser.get();
user.setImage(user.getAvatar() ? storagePathBuilder.getServerUrl(true) + "/css/img/uid-"
+ user.getId() + ".png" : null);
// get file model with the default file parameters
FileModel fileModel = fileConfigurer.getFileModel(
@ -150,6 +154,12 @@ public class EditorController {
// get user data for mentions and add it to the model
model.addAttribute("usersForMentions", getUserMentions(uid));
model.addAttribute("usersInfo", getUsersInfo(uid));
// get user data for protect and add it to the model
model.addAttribute("usersForProtect", getUserProtect(uid));
return "editor.html";
}
@ -169,14 +179,44 @@ public class EditorController {
return usersForMentions;
}
private List<UserInfo> getUsersInfo(final String uid) { // get user data for mentions
List<UserInfo> usersInfo = new ArrayList<>();
if (uid != null && !uid.equals("4")) {
List<User> list = userService.findAll();
for (User u : list) {
String image = u.getAvatar() ? storagePathBuilder.getServerUrl(true) + "/css/img/uid-"
+ u.getId() + ".png" : null;
usersInfo.add(new UserInfo(u.getId(), u.getName(), u.getEmail(), image));
}
}
return usersInfo;
}
private List<Protect> getUserProtect(final String uid) { // get user data for protect
List<Protect> usersForProtect = new ArrayList<>();
if (uid != null && !uid.equals("4")) {
List<User> list = userService.findAll();
for (User u : list) {
if (u.getId() != Integer.parseInt(uid) && u.getId() != ANONYMOUS_USER_ID) {
// user data includes user names, IDs and emails
usersForProtect.add(new Protect(u.getId(), u.getName(), u.getEmail()));
}
}
}
return usersForProtect;
}
@SneakyThrows
private String getInsertImage(final Boolean directUrl) { // get an image that will be inserted into the document
Map<String, Object> dataInsertImage = new HashMap<>();
dataInsertImage.put("fileType", "png");
dataInsertImage.put("url", storagePathBuilder.getServerUrl(true) + "/css/img/logo.png");
dataInsertImage.put("fileType", "svg");
dataInsertImage.put("url", storagePathBuilder.getServerUrl(true) + "/css/img/logo.svg");
if (directUrl) {
dataInsertImage.put("directUrl", storagePathBuilder
.getServerUrl(false) + "/css/img/logo.png");
.getServerUrl(false) + "/css/img/logo.svg");
}
// check if the document token is enabled

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -48,6 +48,7 @@ import org.json.simple.parser.JSONParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
@ -62,6 +63,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
@ -70,6 +73,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@ -147,6 +151,28 @@ public class FileController {
.body(resource);
}
private ResponseEntity<Resource> downloadSample(final String fileName) {
String serverPath = System.getProperty("user.dir");
String contentType = "application/octet-stream";
String[] fileLocation = new String[] {serverPath, "src", "main", "resources", "assets", "document-templates",
"sample", fileName};
Path filePath = Paths.get(String.join(File.separator, fileLocation));
Resource resource;
try {
resource = new UrlResource(filePath.toUri());
if (resource.exists()) {
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType(contentType))
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + resource.getFilename() + "\"")
.body(resource);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
// download data from the specified history file
private ResponseEntity<Resource> downloadFileHistory(final String fileName,
final String version,
@ -222,15 +248,15 @@ public class FileController {
// get document type (word, cell or slide)
DocumentType type = fileUtility.getDocumentType(fileName);
// convert to .ooxml
String internalFileExt = "ooxml";
// get an auto-conversion extension from the request body or set it to the ooxml extension
String conversionExtension = body.getFileExt() != null ? body.getFileExt() : "ooxml";
try {
// check if the file with such an extension can be converted
if (fileUtility.getConvertExts().contains(fileExt)) {
String key = serviceConverter.generateRevisionId(fileUri); // generate document key
ConvertedData response = serviceConverter // get the URL to the converted file
.getConvertedData(fileUri, fileExt, internalFileExt, key, filePass, true, lang);
.getConvertedData(fileUri, fileExt, conversionExtension, key, filePass, true, lang);
String newFileUri = response.getUri();
String newFileType = "." + response.getFileType();
@ -265,24 +291,33 @@ public class FileController {
return createUserMetadata(uid, fileName);
} catch (Exception e) {
e.printStackTrace();
// if the operation of file converting is unsuccessful, an error occurs
return "{ \"error\": \"" + e.getMessage() + "\"}";
}
// if the operation of file converting is unsuccessful, an error occurs
return "{ \"error\": \"" + "The file can't be converted.\"}";
}
@PostMapping("/delete")
@ResponseBody
public String delete(@RequestBody final Converter body) { // delete a file
try {
String fullFileName = fileUtility.getFileName(body.getFileName()); // get full file name
String filename = body.getFileName();
boolean success = false;
// delete a file from the storage and return the status of this operation (true or false)
boolean fileSuccess = storageMutator.deleteFile(fullFileName);
if (filename != null) {
String fullFileName = fileUtility.getFileName(filename); // get full file name
// delete file history and return the status of this operation (true or false)
boolean historySuccess = storageMutator.deleteFileHistory(fullFileName);
// delete a file from the storage and return the status of this operation (true or false)
boolean fileSuccess = storageMutator.deleteFile(fullFileName);
return "{ \"success\": \"" + (fileSuccess && historySuccess) + "\"}";
// delete file history and return the status of this operation (true or false)
boolean historySuccess = storageMutator.deleteFileHistory(fullFileName);
success = fileSuccess && historySuccess;
} else {
// delete the user's folder and return the boolean status
success = storageMutator.deleteUserFolder();
}
return "{ \"success\": \"" + (success) + "\"}";
} catch (Exception e) {
// if the operation of file deleting is unsuccessful, an error occurs
return "{ \"error\": \"" + e.getMessage() + "\"}";
@ -372,14 +407,12 @@ public class FileController {
@GetMapping("/assets")
public ResponseEntity<Resource> assets(@RequestParam("name")
final String name) { // get sample files from the assests
String fileName = Path.of("assets", "document-templates", "sample", fileUtility.getFileName(name)).toString();
return downloadFile(fileName);
return downloadSample(name);
}
@GetMapping("/csv")
public ResponseEntity<Resource> csv() { // download a csv file
String fileName = Path.of("assets", "document-templates", "sample", "csv.csv").toString();
return downloadFile(fileName);
return downloadSample("csv.csv");
}
@GetMapping("/files")
@ -485,6 +518,22 @@ public class FileController {
}
}
String link = body.getLink();
if (fileName.equals("") && link != null) {
if (!link.contains(storagePathBuilder.getServerUrl(true))) {
HashMap<String, String> data = new HashMap<>();
data.put("url", link);
data.put("directUrl", link);
return gson.toJson(data);
}
UriComponents uriComponents = UriComponentsBuilder.fromUriString(body.getLink()).build();
fileName = uriComponents.getQueryParams().getFirst("fileName");
boolean fileExists = new File(storagePathBuilder.getFileLocation(fileName)).exists();
if (!fileExists) {
return "{ \"error\": \"File is not exist\"}";
}
}
if (fileName.equals("")) {
try {
@ -522,6 +571,7 @@ public class FileController {
data.put("directUrl", body.getDirectUrl() ? documentManager.getDownloadUrl(fileName, false) : null);
data.put("referenceData", referenceData);
data.put("path", fileName);
data.put("link", storagePathBuilder.getServerUrl(true) + "/editor?fileName=" + fileName);
if (jwtManager.tokenEnabled()) {
String token = jwtManager.createToken(data);

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -22,8 +22,10 @@ import com.onlyoffice.integration.documentserver.storage.FileStorageMutator;
import com.onlyoffice.integration.documentserver.storage.FileStoragePathBuilder;
import com.onlyoffice.integration.documentserver.util.Misc;
import com.onlyoffice.integration.documentserver.util.file.FileUtility;
import com.onlyoffice.integration.documentserver.util.service.FormatService;
import com.onlyoffice.integration.entities.User;
import com.onlyoffice.integration.services.UserServices;
import com.onlyoffice.integration.dto.FormatsList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
@ -33,6 +35,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.http.ResponseEntity;
import java.util.ArrayList;
import java.util.Arrays;
@ -61,6 +64,9 @@ public class IndexController {
@Autowired
private UserServices userService;
@Autowired
private FormatService formatService;
@Value("${files.docservice.url.site}")
private String docserviceSite;
@ -76,6 +82,9 @@ public class IndexController {
@Value("${files.docservice.languages}")
private String langs;
@Value("${server.version}")
private String serverVersion;
@GetMapping("${url.index}")
public String index(@RequestParam(value = "directUrl", required = false) final Boolean directUrl,
final Model model) {
@ -124,6 +133,7 @@ public class IndexController {
model.addAttribute("users", users);
model.addAttribute("languages", languages);
model.addAttribute("directUrl", directUrl);
model.addAttribute("serverVersion", serverVersion);
return "index.html";
}
@ -132,16 +142,16 @@ public class IndexController {
@ResponseBody
public HashMap<String, String> configParameters() { // get configuration parameters
HashMap<String, String> configuration = new HashMap<>();
configuration.put("FillExtList", String.join(",", fileUtility
.getFillExts())); // put a list of the extensions that can be filled to config
configuration.put("ConverExtList", String.join(",", fileUtility
.getConvertExts())); // put a list of the extensions that can be converted to config
configuration.put("EditedExtList", String.join(",", fileUtility
.getEditedExts())); // put a list of the extensions that can be edited to config
configuration.put("UrlConverter", urlConverter);
configuration.put("UrlEditor", urlEditor);
return configuration;
}
@GetMapping("/formats")
@ResponseBody
public ResponseEntity<FormatsList> formats() { // return all the supported formats
FormatsList list = new FormatsList(formatService.getFormats());
return ResponseEntity.ok(list);
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -315,6 +315,24 @@ public class DefaultCallbackManager implements CallbackManager {
String user = action.getUserid(); // get the user ID
// create meta data for the forcesaved file
storageMutator.createMeta(fileName, user, "Filling Form");
try {
String formsDataUrl = body.getFormsdataurl();
if (formsDataUrl != null && !formsDataUrl.isEmpty()) {
String formsName = documentManager.getCorrectName(fileUtility
.getFileNameWithoutExtension(fileName) + ".txt");
String formsPath = storagePathBuilder.getFileLocation(formsName);
byte[] byteArrayFormsData = getDownloadFile(formsDataUrl);
saveFile(byteArrayFormsData, Paths.get(formsPath));
} else {
throw new RuntimeException("Document editing service did not return formsDataUrl");
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (newFileName) {
fileName = documentManager

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -40,6 +40,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.nio.file.Paths;
// todo: Rebuild completely
@Component
@ -280,8 +281,9 @@ public class DefaultHistoryManager implements HistoryManager {
dataObj.put("version", i);
if (i > 1) { //check if the version number is greater than 1
Integer verdiff = i - 1;
// get the history data from the previous file version
Map<String, Object> prev = (Map<String, Object>) histData.get(Integer.toString(i - 1));
Map<String, Object> prev = (Map<String, Object>) histData.get(Integer.toString(verdiff));
Map<String, Object> prevInfo = new HashMap<String, Object>();
prevInfo.put("fileType", prev.get("fileType"));
prevInfo.put("key", prev.get("key")); // write key and URL information about previous file version
@ -292,10 +294,12 @@ public class DefaultHistoryManager implements HistoryManager {
// write information about previous file version to the data object
dataObj.put("previous", prevInfo);
// write the path to the diff.zip archive with differences in this file version
Integer verdiff = i - 1;
dataObj.put("changesUrl", documentManager
.getHistoryFileUrl(fileName, verdiff, "diff.zip", true));
if (diffExists(histDir, verdiff)) {
// write the path to the diff.zip archive with differences in this file version
dataObj.put("changesUrl", documentManager
.getHistoryFileUrl(fileName, verdiff, "diff.zip", true));
}
}
if (jwtManager.tokenEnabled()) {
@ -331,4 +335,11 @@ public class DefaultHistoryManager implements HistoryManager {
}
return output;
}
// diff.zip existence check
private Boolean diffExists(final String histDir, final Integer verdiff) {
String filePath = Paths.get(histDir, String.valueOf(verdiff), "diff.zip").toString();
File file = new File(filePath);
return file.exists();
}
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -32,8 +32,6 @@ import org.springframework.stereotype.Component;
other products (if there are any) and change the presence or absence of the additional buttons,
links, change logos and editor owner details. */
public class Customization {
@Autowired
private Logo logo; // the image file at the top left corner of the Editor header
@Autowired
private Goback goback; // the settings for the Open file location menu button and upper right corner button
private Boolean autosave = true; // if the Autosave menu option is enabled or disabled
@ -47,7 +45,7 @@ public class Customization {
private Boolean help = true; // if the Help menu button is displayed or hidden
private Boolean hideRightMenu = false; // if the right menu is displayed or hidden on first loading
private Boolean hideRulers = false; // if the editor rulers are displayed or hidden
private Boolean submitForm = false; // if the Submit form button is displayed or hidden
private Boolean submitForm = true; // if the Submit form button is displayed or hidden
private Boolean about = true;
private Boolean feedback = true;
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,6 +20,7 @@ package com.onlyoffice.integration.documentserver.models.configurations;
import com.onlyoffice.integration.documentserver.storage.FileStoragePathBuilder;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
@ -38,9 +39,18 @@ public class Goback { // the settings for the Open file location menu button an
private String indexMapping;
@Getter
@Setter
private String url; /* the absolute URL to the website address which will be opened
when clicking the Open file location menu button */
@Getter
@Setter
private String text;
@Getter
@Setter
private Boolean blank;
@PostConstruct
private void init() {
this.url = storagePathBuilder.getServerUrl(false) + indexMapping;

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,38 +0,0 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.onlyoffice.integration.documentserver.models.configurations;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("prototype")
@Getter
@Setter
public class Logo { // the image file at the top left corner of the Editor header
@Value("${logo.image}")
private String image; // the path to the image file used to show in common work mode
@Value("${logo.imageEmbedded}")
private String imageEmbedded; // the path to the image file used to show in the embedded mode
@Value("${logo.url}")
private String url; // the absolute URL which will be used when someone clicks the logo image
}

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -27,7 +27,8 @@ public enum ConvertErrorType {
UNEXPECTED_GUID_ERROR(-5, "Error unexpected guid"),
DATABASE_ERROR(-6, "Error database"),
DOCUMENT_REQUEST_ERROR(-7, "Error document request"),
DOCUMENT_VKEY_ERROR(-8, "Error document VKey");
DOCUMENT_VKEY_ERROR(-8, "Error document VKey"),
DOCUMENT_CONVERSION_OUTPUT_ERROR(-9, "Error conversion output format");
private final int code;
private final String label;

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@ -1,6 +1,6 @@
/**
*
* (c) Copyright Ascensio System SIA 2023
* (c) Copyright Ascensio System SIA 2024
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

Some files were not shown because too many files have changed in this diff Show More