Compare commits

...

3234 Commits

Author SHA1 Message Date
Uwe Steinmann
a825bb43fb Merge branch 'seeddms-6.0.x' 2025-05-22 17:50:22 +02:00
Uwe Steinmann
00c3a63ff1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-22 10:39:00 +02:00
Uwe Steinmann
396fd6a4fe allow attriutes for globalNavigationBar 2025-05-22 10:38:50 +02:00
Uwe Steinmann
4972929258 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-21 17:02:51 +02:00
Uwe Steinmann
776f19d501 add changes for 5.1.40 2025-05-21 17:02:34 +02:00
Uwe Steinmann
c014749676 use quoted printable encoding for email subject 2025-05-21 17:01:19 +02:00
Uwe Steinmann
2ec29e3336 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-20 20:24:22 +02:00
Uwe Steinmann
9a826b88e9 fix error in Search class 2025-05-20 20:24:01 +02:00
Uwe Steinmann
c638258a10 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-19 18:05:58 +02:00
Uwe Steinmann
d7c1e4b103 make database search work 2025-05-19 18:01:04 +02:00
Uwe Steinmann
637fd66210 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-16 19:12:34 +02:00
Uwe Steinmann
964495b9b6 run authenticator only if user is still not known 2025-05-16 19:12:05 +02:00
Uwe Steinmann
7fe2a12af3 actually run postRun hook 2025-05-16 19:11:42 +02:00
Uwe Steinmann
e1f976e646 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-16 08:08:01 +02:00
Uwe Steinmann
ba18e89cda varios minor changes in preparation to moving search functionality into own class 2025-05-16 07:48:30 +02:00
Uwe Steinmann
4c6d047bb8 copy most of the search functions into own class 2025-05-16 07:46:49 +02:00
Uwe Steinmann
e687474d19 pass $fulltextservice to view 2025-05-15 19:54:23 +02:00
Uwe Steinmann
31aa18606f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-14 15:10:13 +02:00
Uwe Steinmann
0fd6ed5381 initial search class 2025-05-14 15:07:35 +02:00
Uwe Steinmann
a74229eb14 cleanup code 2025-05-14 15:07:07 +02:00
Uwe Steinmann
04e9402094 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-13 18:54:21 +02:00
Uwe Steinmann
e9388dc3ec use translation of documents_user_rejected in list of menu tasks 2025-05-13 18:53:46 +02:00
Uwe Steinmann
fb5bf43990 better translation for documents_user_rejected 2025-05-13 18:53:15 +02:00
Uwe Steinmann
abc8df5939 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-12 12:49:11 +02:00
Uwe Steinmann
72245fabe0 add missing phrase 'extension_config' 2025-05-12 11:15:30 +02:00
Uwe Steinmann
cd6afd07fe add missing phrases 2025-05-12 11:06:50 +02:00
Uwe Steinmann
69f4d9a194 add missing phrases 2025-05-12 11:03:38 +02:00
Uwe Steinmann
00d5d8b334 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-05-08 19:34:53 +02:00
Uwe Steinmann
6610647ddf add changes for 5.1.40 2025-05-08 19:34:33 +02:00
Uwe Steinmann
3fb3434c61 expired documents can be filtered by user 2025-05-08 19:33:42 +02:00
Uwe Steinmann
4ed83488ba log number of documents which will expired 2025-05-08 19:15:04 +02:00
Uwe Steinmann
2288be497c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-04-29 12:38:22 +02:00
Uwe Steinmann
d377bd81ab rename methode and class for inline editiing of document name 2025-04-29 10:34:16 +02:00
Uwe Steinmann
e069f784b4 add hooks for addtional tabs 2025-04-29 10:33:13 +02:00
Uwe Steinmann
181482a1a7 set text for no-result in selection of mimetype 2025-04-29 10:32:20 +02:00
Uwe Steinmann
b2cfde85ca contentOffsetDir may be a string 2025-04-29 10:30:42 +02:00
Uwe Steinmann
f46ae01386 add changes of 5.1.40 2025-04-24 16:31:44 +02:00
Uwe Steinmann
ae66ec223c add searching for mime types 2025-04-24 16:31:27 +02:00
Uwe Steinmann
a5edba86ae fix search url, add search for mime types 2025-04-24 16:30:48 +02:00
Uwe Steinmann
8b0d8e85c2 add changes for 5.1.40 2025-04-24 14:52:06 +02:00
Uwe Steinmann
4184cd4f1d add hook for creating preview image (like preview images in lists) 2025-04-24 14:50:32 +02:00
Uwe Steinmann
d50247ba09 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-04-23 14:24:45 +02:00
Uwe Steinmann
6a39584dcc add search link in tables 2025-04-23 14:24:31 +02:00
Uwe Steinmann
e8c0ebbf4f add option 'Draft' to select box for status 2025-04-23 14:23:07 +02:00
Uwe Steinmann
67a2afc626 add changes for 5.1.40 2025-04-13 14:30:22 +02:00
Uwe Steinmann
133fc5d570 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-04-13 14:29:29 +02:00
Uwe Steinmann
92bee67638 fix update of postgres database 2025-04-13 14:28:02 +02:00
Uwe Steinmann
5fdd83de3c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-04-02 09:30:03 +02:00
Uwe Steinmann
cd4743d917 check if attribute 'remote' is set 2025-04-02 09:29:37 +02:00
Uwe Steinmann
904e4b8657 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-04-02 09:28:59 +02:00
Uwe Steinmann
de4fae18d0 set title of modal box for extension config to title of extension 2025-04-02 09:16:37 +02:00
Uwe Steinmann
f1859da68b remove aria-hidden from some buttons 2025-04-02 08:14:11 +02:00
Uwe Steinmann
c8a7dad7d6 run initMost() after modal box has been opened 2025-04-02 08:13:38 +02:00
Uwe Steinmann
3bed5b0d68 extension config can edited from extension mgr 2025-04-02 08:10:44 +02:00
Uwe Steinmann
1bff379d84 allow to set config of extension only 2025-04-02 08:09:57 +02:00
Uwe Steinmann
073948d4c3 add hidden field without value to checkboxes 2025-04-02 08:08:37 +02:00
Uwe Steinmann
4f3e6cadf5 remove aria-hidden from some buttons 2025-04-02 08:06:38 +02:00
Uwe Steinmann
692318dcc1 pass extension name to view 2025-04-02 08:05:37 +02:00
Uwe Steinmann
c2d8b383c3 support saving via ajax 2025-04-02 08:04:56 +02:00
Uwe Steinmann
f8ceb0d56a do not set bool/array value if not exist in post data 2025-04-02 08:03:52 +02:00
Uwe Steinmann
e578e2a206 remove old function getBoolValue() 2025-04-02 08:02:53 +02:00
Uwe Steinmann
22f23c71f0 fix indenting 2025-04-02 08:02:09 +02:00
Uwe Steinmann
42a38984f7 add method showConfigFolder() (currently not used) 2025-04-01 12:55:35 +02:00
Uwe Steinmann
fb59582a56 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-04-01 12:51:57 +02:00
Uwe Steinmann
8f2f15bb80 add new method extension() for showing config of extension 2025-04-01 12:50:01 +02:00
Uwe Steinmann
7f2d12e299 output timezone and current date/time on server 2025-04-01 10:39:48 +02:00
Uwe Steinmann
fc555555d2 allow CheckOut for users 2025-03-27 14:14:18 +01:00
Uwe Steinmann
28ba7b59b9 fix possible xss attack 2025-03-26 09:36:38 +01:00
Uwe Steinmann
b7e075cdba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-26 09:30:49 +01:00
Uwe Steinmann
0ad6416d65 fix typo 2025-03-26 09:30:33 +01:00
Uwe Steinmann
d1dfc924b5 fix possible xss attack when document name contains malicious code 2025-03-26 08:39:58 +01:00
Uwe Steinmann
5a40423836 set id of some select fields for extension config 2025-03-26 08:39:30 +01:00
Uwe Steinmann
53133fc824 add changes for 5.1.40 2025-03-26 07:55:50 +01:00
Uwe Steinmann
7529c68c80 include all conf.php files and var_export() them instead of concating them 2025-03-26 07:54:33 +01:00
Uwe Steinmann
edb91d3299 fix possible xss attack 2025-03-25 18:09:41 +01:00
Uwe Steinmann
5ce55216ad add changes for 5.1.40 2025-03-24 15:55:57 +01:00
Uwe Steinmann
f3fa653eee replace file_exists() with exists() function of object 2025-03-21 13:25:13 +01:00
Uwe Steinmann
37fd1ac969 replace functions directly accessing file system if documents or attachments are involved 2025-03-21 13:23:07 +01:00
Uwe Steinmann
54c3ec54fc seperate seeddms info from extension list, output storage driver 2025-03-21 13:20:52 +01:00
Uwe Steinmann
a4899a52ad $settings must be passed into route function 2025-03-21 13:20:04 +01:00
Uwe Steinmann
0e6f14dbaf add odt2txt for converting libreoffice documents to txt 2025-03-21 13:19:26 +01:00
Uwe Steinmann
c4c37becf6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-19 15:41:14 +01:00
Uwe Steinmann
9d400a808e use httpRoot when redirecting to out.ViewFolder.php 2025-03-19 15:40:41 +01:00
Uwe Steinmann
287753b7bc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-18 15:25:49 +01:00
Uwe Steinmann
54832e3727 fix saving user data when language selection is turned of (Closes: #568) 2025-03-18 14:19:37 +01:00
Uwe Steinmann
52401dce05 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-18 11:02:03 +01:00
Uwe Steinmann
597e9c89b3 start new version 5.1.40 2025-03-18 11:00:52 +01:00
Uwe Steinmann
bfe17bcc46 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-18 10:41:42 +01:00
Uwe Steinmann
df8d6edcff add changes for 5.1.39 2025-03-18 09:58:49 +01:00
Uwe Steinmann
9b2c120b5f call hooks for show document and folder row 2025-03-18 09:57:45 +01:00
Uwe Steinmann
757e95ab86 set previewConverters and convertToPdf 2025-03-18 09:57:28 +01:00
Uwe Steinmann
2e6d25873c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-17 16:16:17 +01:00
Uwe Steinmann
38b3abc50e add new phrases 2025-03-17 16:16:03 +01:00
Uwe Steinmann
3bbdf680de Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-17 15:59:24 +01:00
Uwe Steinmann
2ecef66355 add changes for 5.1.39 2025-03-17 15:58:19 +01:00
Uwe Steinmann
9abbf6a1e5 objects can be removed from clipboard 2025-03-17 15:57:51 +01:00
Uwe Steinmann
9a3f217e45 add method isOnClipboard() 2025-03-17 12:50:01 +01:00
Uwe Steinmann
d7f1e899ba fix nasty error when validating attribute in a hook 2025-03-14 17:32:36 +01:00
Uwe Steinmann
1d62de5213 add changes for 6.0.32 2025-03-14 17:22:28 +01:00
Uwe Steinmann
ddab6e2b57 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-14 17:21:30 +01:00
Uwe Steinmann
dee29cb64f add changes for 5.1.39 2025-03-14 17:21:09 +01:00
Uwe Steinmann
128a57a9c5 fix setting attributes (user, group, document, folder) 2025-03-14 17:20:05 +01:00
Uwe Steinmann
5ed5476106 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-14 17:16:47 +01:00
Uwe Steinmann
70c63afd10 fix setting attributes (user, group, folder, document) 2025-03-14 17:16:06 +01:00
Uwe Steinmann
789b5daaf8 add checking for revision date 2025-03-14 16:51:34 +01:00
Uwe Steinmann
2eb19048ab add checking for revision date 2025-03-14 16:51:15 +01:00
Uwe Steinmann
b30c4a7a66 fix wrong position of text in progress bar 2025-03-06 19:29:17 +01:00
Uwe Steinmann
b5d32f3d53 do not add standard footer to mails send by scheduler 2025-03-06 07:15:46 +01:00
Uwe Steinmann
304db26698 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-05 09:41:53 +01:00
Uwe Steinmann
444af0831b use add_log_line() 2025-03-05 07:56:55 +01:00
Uwe Steinmann
3197f25ce8 log password forgotten request 2025-03-05 07:29:56 +01:00
Uwe Steinmann
71d5154945 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-03-04 12:37:30 +01:00
Uwe Steinmann
056736ecc5 add changes for 5.1.39 2025-03-03 21:44:33 +01:00
Uwe Steinmann
329b54d00f encrypt referer to prevent malicious manipulation 2025-03-03 21:42:54 +01:00
Uwe Steinmann
157c033f2a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-28 17:58:30 +01:00
Uwe Steinmann
d66f12ae21 do not tread each field of search form as multivalued 2025-02-28 17:54:52 +01:00
Uwe Steinmann
4ba5099569 getAttributeEditField() handels arrays of attr values propperly 2025-02-28 17:53:54 +01:00
Uwe Steinmann
86362c5284 fix output of attributes 2025-02-28 08:40:06 +01:00
Uwe Steinmann
9f39b639c6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-27 11:19:40 +01:00
Uwe Steinmann
0999808364 add new phrases, updates 2025-02-27 09:26:44 +01:00
Uwe Steinmann
6c0b1691c3 add changes of 5.1.39 2025-02-27 09:08:34 +01:00
Uwe Steinmann
985aa5cc28 check im memcached is turned on in configuration 2025-02-27 09:07:19 +01:00
Uwe Steinmann
e714e361a9 add checkbox for enabling memcached 2025-02-27 09:07:06 +01:00
Uwe Steinmann
9f5390e560 add checkbox for enabling memcached 2025-02-27 09:06:19 +01:00
Uwe Steinmann
f281376ac2 fix setting group approvers from previous version 2025-02-27 09:05:49 +01:00
Uwe Steinmann
6731882ae0 do not add group manager as mandatory reviewer/approver if logged in user is the manager itself 2025-02-27 09:04:55 +01:00
Uwe Steinmann
3538fd2616 add slim error middleware and catch all route 2025-02-21 07:34:55 +01:00
Uwe Steinmann
a44ddc0b94 remove old code, add error middleware and catch all route 2025-02-21 07:34:24 +01:00
Uwe Steinmann
879855536f new flag to skip exporting default columns 2025-02-18 21:22:27 +01:00
Uwe Steinmann
4352f95818 new export flag to skip default columns 2025-02-18 21:22:01 +01:00
Uwe Steinmann
0fe367820f turn off legend for chart sizepermonth 2025-02-18 21:20:59 +01:00
Uwe Steinmann
3fec498ce5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-18 13:35:53 +01:00
Uwe Steinmann
d9a2ea5303 show quota on chart page when listing total document size per user 2025-02-18 13:27:20 +01:00
Uwe Steinmann
ae34e29fed Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-14 08:23:47 +01:00
Uwe Steinmann
d4bfb539b7 eval parameter 'order' in config settings for select menus 2025-02-14 08:22:40 +01:00
Uwe Steinmann
b2cc1a122e support for skipping default columns 2025-02-14 08:22:12 +01:00
Uwe Steinmann
0eff90974e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-13 09:40:33 +01:00
Uwe Steinmann
b75bcb5725 new version 5.1.39 2025-02-13 09:39:16 +01:00
Uwe Steinmann
327d65c7e0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-13 09:38:03 +01:00
Uwe Steinmann
d3d08e5b15 requires php 8.2 2025-02-13 09:37:36 +01:00
Uwe Steinmann
a8f52db542 fix access on objects in container 2025-02-12 21:37:57 +01:00
Uwe Steinmann
15fc9bf312 add changes for 6.0.31 2025-02-12 21:15:50 +01:00
Uwe Steinmann
bef2fb0786 use json renderer instead of withJson() 2025-02-12 21:01:20 +01:00
Uwe Steinmann
1510acc606 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-12 20:56:53 +01:00
Uwe Steinmann
d27b762945 use Slim/Psr7/Stream 2025-02-12 20:56:07 +01:00
Uwe Steinmann
2c9e10b88f require slim/psr7 2025-02-12 20:54:46 +01:00
Uwe Steinmann
ddcc6d6841 use new json renderer 2025-02-12 20:54:08 +01:00
Uwe Steinmann
d9278b5600 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-12 13:21:19 +01:00
Uwe Steinmann
e88ae2cc44 add changes for 5.1.38 2025-02-12 13:21:03 +01:00
Uwe Steinmann
0d7f9e674a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-12 13:19:55 +01:00
Uwe Steinmann
31ac9a8335 fix php syntax error 2025-02-12 13:19:32 +01:00
Uwe Steinmann
052fee8222 badges can have a type 2025-02-12 13:16:36 +01:00
Uwe Steinmann
12979afcbc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-12 08:46:30 +01:00
Uwe Steinmann
6c5dd72b86 require php 8.2 2025-02-10 16:17:28 +01:00
Uwe Steinmann
a5999caca3 use setValueCell() and AdvancedValueBinder 2025-02-10 16:17:03 +01:00
Uwe Steinmann
35ad154ab4 return full version by endpoint 'version' 2025-02-10 07:58:38 +01:00
Uwe Steinmann
728d162bc2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x, new version 6.0.31 2025-02-07 15:24:33 +01:00
Uwe Steinmann
42594884a5 new version 5.1.38 2025-02-07 15:23:54 +01:00
Uwe Steinmann
28e01b577a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-07 12:07:18 +01:00
Uwe Steinmann
e9bdf8a0bb set comment in PUT uploadDocument 2025-02-07 12:06:53 +01:00
Uwe Steinmann
c620ec8f15 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-06 16:37:43 +01:00
Uwe Steinmann
d540ec8f2b use local composer.phar if exists 2025-02-06 16:36:45 +01:00
Uwe Steinmann
0a1f2ea418 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-06 15:20:59 +01:00
Uwe Steinmann
52669c8d35 add changes for 5.1.37 2025-02-06 15:20:37 +01:00
Uwe Steinmann
6c130b3f8c add extra log level for rest api logging 2025-02-06 15:19:45 +01:00
Uwe Steinmann
b646333c37 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-06 11:21:46 +01:00
Uwe Steinmann
8c589a60ba add endpoint GET /attributedefinitions/{id} 2025-02-06 11:19:25 +01:00
Uwe Steinmann
35d7d132d3 add BodyParsingMiddleware because PUT request don't have access on body data 2025-02-06 11:18:58 +01:00
Uwe Steinmann
c940162328 setting quota and homefolder returns the updated account 2025-02-06 11:18:01 +01:00
Uwe Steinmann
4e39c69224 remove old commented call of search() 2025-02-06 11:17:04 +01:00
Uwe Steinmann
3f0275e25d fix typo in messages 2025-02-06 11:16:27 +01:00
Uwe Steinmann
b9c083e08b doLogin does not need access on global 2025-02-06 11:15:59 +01:00
Uwe Steinmann
a4462cdb6a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-04 18:20:26 +01:00
Uwe Steinmann
975bd1689e fix line indenting 2025-02-04 18:20:11 +01:00
Uwe Steinmann
1af377b268 remove trailing newline 2025-02-04 17:30:43 +01:00
Uwe Steinmann
6ddf3c3cfe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-04 13:40:29 +01:00
Uwe Steinmann
4d44774a7f select options in extension configuration can retain order (only attributedefinitions) 2025-02-04 13:39:02 +01:00
Uwe Steinmann
c62abbcd06 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-04 11:05:17 +01:00
Uwe Steinmann
c815b0069d get $accessobject from view 2025-02-04 11:04:58 +01:00
Uwe Steinmann
5b611a425a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-04 08:27:46 +01:00
Uwe Steinmann
a3ea05177a controll access on batch operations by advanced access rights 2025-02-04 08:27:05 +01:00
Uwe Steinmann
992afe8e7c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-02-03 15:22:14 +01:00
Uwe Steinmann
ca29a27187 support export of folders in excel file 2025-02-03 15:21:14 +01:00
Uwe Steinmann
435c94f585 add export of folder list 2025-02-03 15:20:41 +01:00
Uwe Steinmann
665deb0595 update translation 2025-02-03 14:43:08 +01:00
Uwe Steinmann
b45bfc6035 add comment with info why seeddms core is still explicitly included 2025-02-03 12:18:15 +01:00
Uwe Steinmann
a2804d252a very old file which is no longer needed 2025-02-03 12:14:07 +01:00
Uwe Steinmann
6b325cb4df remove trailing white space 2025-02-03 12:11:39 +01:00
Uwe Steinmann
e3b6c2f5b6 remove no longer needed function _printMessage() 2025-02-03 12:10:38 +01:00
Uwe Steinmann
cd448c160b add visibility of methods 2025-02-03 12:10:18 +01:00
Uwe Steinmann
8cc6a417c8 add class variables _smtpForceFrom and _smtpLazySSL 2025-02-03 12:09:46 +01:00
Uwe Steinmann
c56d18299c remove no longer needed method _printMessage() 2025-02-03 12:09:10 +01:00
Uwe Steinmann
0abcfb4d12 remove trailing white space 2025-02-03 10:27:35 +01:00
Uwe Steinmann
eb64f09375 add class variable $user 2025-02-03 10:23:22 +01:00
Uwe Steinmann
07d9047b2e add class variables $filenames, $header, $extraheader 2025-02-03 10:22:27 +01:00
Uwe Steinmann
a6d67be34e add class variable $_force_from 2025-02-03 10:17:22 +01:00
Uwe Steinmann
712df50a9c fix checking if user is already in list of notifiers (sendReplaceContentMail) 2025-02-03 10:14:51 +01:00
Uwe Steinmann
ab729a3f21 fix stringToArray() 2025-02-03 09:52:39 +01:00
Uwe Steinmann
325498e63a fix evaluation of _ldapMailField 2025-02-03 09:52:10 +01:00
Uwe Steinmann
895dbf1b29 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-01-31 10:15:21 +01:00
Uwe Steinmann
4316b1afee fix definition of echo endpoint 2025-01-31 10:14:40 +01:00
Uwe Steinmann
327b1c4284 add some missing functions 2025-01-31 09:54:21 +01:00
Uwe Steinmann
325a180ff8 lots of formatting fixes 2025-01-31 09:53:58 +01:00
Uwe Steinmann
1ad8fbcb2a more info for debian users 2025-01-30 14:53:59 +01:00
Uwe Steinmann
675bcf66ac add warning about cleared environment when running php-fpm 2025-01-30 14:51:44 +01:00
Uwe Steinmann
f2e5faf80b use type: 'string' instead 'file' 2025-01-29 14:57:37 +01:00
Uwe Steinmann
2b0c3241ed Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-01-29 10:29:03 +01:00
Uwe Steinmann
aa6454fce9 add changes for 5.1.37 2025-01-29 10:25:55 +01:00
Uwe Steinmann
dd13504fef fix xss attack 2025-01-29 10:25:26 +01:00
Uwe Steinmann
a0df82c2e7 add example of PHP FPM handler 2025-01-29 10:24:52 +01:00
Uwe Steinmann
be1ebce45f fix errors 2025-01-29 10:23:57 +01:00
Uwe Steinmann
77df75a038 add changes for 5.1.37 2025-01-28 17:38:05 +01:00
Uwe Steinmann
612f297926 fix loading more entries at end of page 2025-01-28 17:37:09 +01:00
Uwe Steinmann
fe88895808 add changes for 6.0.30 2025-01-26 19:51:52 +01:00
Uwe Steinmann
ec6c4855fc send request receipt notification only if document is released 2025-01-25 12:42:08 +01:00
Uwe Steinmann
1033fee1b3 add method sendToAllReceiptMail() 2025-01-25 12:40:58 +01:00
Uwe Steinmann
ceddf4d5bf do not show content container if form has no visible fields 2025-01-24 11:32:08 +01:00
Uwe Steinmann
30682237e9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-01-23 14:10:38 +01:00
Uwe Steinmann
d8f7d473cb do not log environment anymore 2025-01-23 14:10:15 +01:00
Uwe Steinmann
5f4b1dde54 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-01-17 14:09:12 +01:00
Uwe Steinmann
588c7fa798 rename file 2025-01-17 14:08:54 +01:00
Uwe Steinmann
05835e8d3d set title of sheet in export file, only export documents 2025-01-17 14:08:10 +01:00
Uwe Steinmann
adeae90695 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-01-17 13:49:17 +01:00
Uwe Steinmann
f024da6fc2 add examples on how to use the rest api 2025-01-17 13:48:46 +01:00
Uwe Steinmann
53cbe64222 add 'add' button before 'list' button 2025-01-17 13:12:22 +01:00
Uwe Steinmann
ee143ad5d4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-01-16 09:17:18 +01:00
Uwe Steinmann
e9783c882d first column number is 1 not 0 2025-01-16 09:16:59 +01:00
Uwe Steinmann
3c2f8f6013 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2025-01-02 14:40:59 +01:00
Uwe Steinmann
ee6d2f15fc fix getting uploaded files 2025-01-02 14:40:49 +01:00
Uwe Steinmann
7cb75bf518 skip footer in mail with recent changes 2024-12-29 08:06:56 +01:00
Uwe Steinmann
d189443b29 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-12-26 08:37:57 +01:00
Uwe Steinmann
267c8c468b do not check cache in checkExtensionByName() 2024-12-26 08:37:33 +01:00
Uwe Steinmann
2576001ad1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-12-23 16:17:25 +01:00
Uwe Steinmann
cad3258a98 array_diff must be array_intersect for excluding documents in certain folders 2024-12-23 16:16:36 +01:00
Uwe Steinmann
9f5528b7c2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-12-20 17:06:45 +01:00
Uwe Steinmann
226d2f01f4 set $_excludeFoldersDashboard to empty array 2024-12-20 13:26:21 +01:00
Uwe Steinmann
5a5f5657a9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-12-20 08:05:52 +01:00
Uwe Steinmann
682cb8904f rename showConfigFolder() to showConfigFolderNoTree() 2024-12-20 08:05:11 +01:00
Uwe Steinmann
05400afbcd require guzzlehttp/psr7 2024-12-20 08:04:15 +01:00
Uwe Steinmann
0abffe1f3d get missing parameters in countTasks() 2024-12-17 18:15:05 +01:00
Uwe Steinmann
ab5411c44f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-12-17 17:54:59 +01:00
Uwe Steinmann
9762db9f26 fix passing version to addContent() 2024-12-17 17:44:20 +01:00
Uwe Steinmann
755f601d7b add attachment from dropfolder dir 2024-12-14 19:19:24 +01:00
Uwe Steinmann
774d17c3f9 suppress errors when loading html file 2024-12-11 15:58:11 +01:00
Uwe Steinmann
df5c81334e add changes for 5.1.37 2024-12-11 14:46:41 +01:00
Uwe Steinmann
b6dcff3fe3 upgrade from slim 3 to slim 4 2024-12-11 14:46:12 +01:00
Uwe Steinmann
abe6b94b3e propperly check if a fulltext service exists 2024-12-10 15:04:20 +01:00
Uwe Steinmann
a787d61404 add conversion for webp and avif images 2024-12-07 19:09:01 +01:00
Uwe Steinmann
5221f9756e new config option to exclude folders from dashboard 2024-11-27 19:11:00 +01:00
Uwe Steinmann
ae22f5aba6 fix typo in comment 2024-11-27 19:10:26 +01:00
Uwe Steinmann
2fb41d1f40 new method showConfigFolder() 2024-11-27 19:09:57 +01:00
Uwe Steinmann
4a3cdf24b5 fix typo in comment 2024-11-27 19:08:14 +01:00
Uwe Steinmann
8bb4f80032 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-18 10:03:58 +01:00
Uwe Steinmann
0161da6143 return id of owner when getting document/folder data 2024-11-18 10:03:32 +01:00
Uwe Steinmann
3113c59796 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-17 19:44:52 +01:00
Uwe Steinmann
26ca0d9c4d minor change of users/{id}/homefolder 2024-11-17 19:44:20 +01:00
Uwe Steinmann
faaf6d2fbb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-17 10:38:07 +01:00
Uwe Steinmann
7da7d2e4a1 __getUserData() returns quota 2024-11-17 10:27:51 +01:00
Uwe Steinmann
7e4b4fd3ea add methods changeUserQuota, setFolderOwner, setFolderOwner 2024-11-17 10:23:45 +01:00
Uwe Steinmann
1307bb74cd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-16 09:50:55 +01:00
Uwe Steinmann
b9d5c31211 move rrmdir() into own class in inc.Utils.php 2024-11-16 09:50:42 +01:00
Uwe Steinmann
e6c7ebaaec fixed wrong constraint in table tblUserSubstitutes 2024-11-14 14:34:47 +01:00
Uwe Steinmann
27110c06a9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-13 22:35:07 +01:00
Uwe Steinmann
f6f7fe0ab6 https status must be 400 instead of 200 in case of an error 2024-11-13 22:31:55 +01:00
Uwe Steinmann
f5db14dd74 pass propper parameter to hook cleanUpDocument 2024-11-13 22:31:13 +01:00
Uwe Steinmann
964bed081d check for function system() 2024-11-13 22:30:15 +01:00
Uwe Steinmann
bb0f34a05a fix title of page 2024-11-13 12:51:08 +01:00
Uwe Steinmann
cef5e73ba5 set parameter tasksinmenu 2024-11-11 10:48:21 +01:00
Uwe Steinmann
35fa11a7c2 remove code from seeddms 6 2024-11-11 10:47:51 +01:00
Uwe Steinmann
8afef96440 do not show expired documents in menu tasks 2024-11-11 09:48:40 +01:00
Uwe Steinmann
ea5d4651e5 fix merge errors 2024-11-11 09:36:11 +01:00
Uwe Steinmann
ca79b730ff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-11 09:29:51 +01:00
Uwe Steinmann
bbfd144906 optimize counting tasks 2024-11-11 09:29:41 +01:00
Uwe Steinmann
a2a39ce946 Merge branch 'seeddms-6.0.x' 2024-11-08 06:45:24 +01:00
Uwe Steinmann
9573d473e9 do not show chart by category if there are no categories 2024-11-07 13:52:43 +01:00
Uwe Steinmann
1922899d7e allow to turn of comment for receptions 2024-11-07 08:52:03 +01:00
Uwe Steinmann
58a29b675b add space between consecutive forms and divs,legends 2024-11-07 08:51:08 +01:00
Uwe Steinmann
d1d348deb9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-07 07:10:56 +01:00
Uwe Steinmann
63693d73b0 start new version 5.1.37 2024-11-07 07:09:29 +01:00
Uwe Steinmann
b9abff5c55 Merge branch 'seeddms-6.0.x' 2024-11-07 07:08:11 +01:00
Uwe Steinmann
b4d0761824 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-05 21:08:26 +01:00
Uwe Steinmann
2676b5db8f add more mimetypes and its extension 2024-11-05 18:49:35 +01:00
Uwe Steinmann
e43168059e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-02 13:01:24 +01:00
Uwe Steinmann
120bb3f572 update translation 2024-11-02 13:01:10 +01:00
Uwe Steinmann
36acb63ebe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-11-01 17:49:44 +01:00
Uwe Steinmann
616bec13bf set smaller font for subtitles of select2 option 2024-10-31 18:11:32 +01:00
Uwe Steinmann
507c85821d running initMost() can be turned off, when updating a div.ajax 2024-10-31 18:11:22 +01:00
Uwe Steinmann
7bf9768359 add select2 with ajax for getting folders 2024-10-31 18:10:28 +01:00
Uwe Steinmann
a7342b600e add fold marks 2024-10-31 18:09:19 +01:00
Uwe Steinmann
63ba189b3f get subtitle in chzn template from state 2024-10-31 18:08:08 +01:00
Uwe Steinmann
5fb5cd00bc add new extension config folderlist for select-internal 2024-10-31 18:06:40 +01:00
Uwe Steinmann
bcaaa82014 remove double spaces 2024-10-31 18:05:36 +01:00
Uwe Steinmann
951f9bfefb set noinit=true when running dropfolder task 2024-10-31 18:04:44 +01:00
Uwe Steinmann
b65322ab54 use only first two chars of language in html lang attribute 2024-10-31 18:03:58 +01:00
Uwe Steinmann
6849ccd34d add support for select2 in 'searchfolder', search only in folder name 2024-10-31 18:02:24 +01:00
Uwe Steinmann
a19d0c1b2a copy missing i18n files of select2 2024-10-31 18:01:15 +01:00
Uwe Steinmann
c2f69ce491 check access on CheckOutDocument 2024-10-30 19:45:10 +01:00
Uwe Steinmann
588d150c39 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-10-28 17:02:14 +01:00
Uwe Steinmann
286151c697 remove empty line 2024-10-28 16:56:59 +01:00
Uwe Steinmann
32b6445904 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-10-28 13:02:04 +01:00
Uwe Steinmann
da99d6e366 add jquery-lazy 2024-10-28 12:59:47 +01:00
Uwe Steinmann
a8a8402c6e fix code formatting 2024-10-28 12:59:31 +01:00
Uwe Steinmann
012977d606 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-10-27 06:36:12 +01:00
Uwe Steinmann
d70a6c79b3 fix code formating, add license if missing 2024-10-27 06:35:57 +01:00
Uwe Steinmann
d80009e484 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-10-26 11:54:43 +02:00
Uwe Steinmann
4f4f3923b9 code beautifying 2024-10-26 11:47:22 +02:00
Uwe Steinmann
122959d11c code beautify 2024-10-26 11:47:06 +02:00
Uwe Steinmann
c4014dfddf code beautify 2024-10-26 11:46:40 +02:00
Uwe Steinmann
ec04ed665e place mandatory reviewers/approvers into own box 2024-10-22 10:18:30 +02:00
Uwe Steinmann
886a79119e fix typo 2024-10-16 07:28:13 +02:00
Uwe Steinmann
cd0ec52931 pass context to getAccessMode() 2024-10-12 13:50:30 +02:00
Uwe Steinmann
5a3ba8243d some general information about converting documents 2024-10-12 13:49:51 +02:00
Uwe Steinmann
4ace32c927 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-10-11 14:38:45 +02:00
Uwe Steinmann
f195525793 set memcached server if php has support for it 2024-10-11 14:00:06 +02:00
Uwe Steinmann
2d6c0eea9e check if folder tree is enable when creating javascript code 2024-10-11 13:17:17 +02:00
Uwe Steinmann
69c84c86fd check if session exists 2024-10-10 08:42:47 +02:00
Uwe Steinmann
17ca27d95b add phrase 'filesize' 2024-10-07 16:32:54 +02:00
Uwe Steinmann
79560a8164 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-10-07 08:25:46 +02:00
Uwe Steinmann
8097340d88 add changes of 5.1.36 2024-10-06 17:08:51 +02:00
Uwe Steinmann
5275a50d6d initial code to set the number of parallel requests when indexing 2024-10-02 14:59:40 +02:00
Uwe Steinmann
ccab32bb42 issue error if file drop on drop area is > maxfilesize 2024-10-02 14:58:43 +02:00
Uwe Steinmann
12fc5c1185 rename file_size to filesize 2024-10-02 14:57:43 +02:00
Uwe Steinmann
e9372be430 rename file_size to filesize 2024-10-02 14:57:15 +02:00
Uwe Steinmann
9a972c2c44 add support for searching for filesize 2024-10-02 14:56:25 +02:00
Uwe Steinmann
8bcf76ca8c propperly check for duplicate folder names in op/op.Ajax.php 2024-09-29 07:17:31 +02:00
Uwe Steinmann
8a217a9254 add path of parent folder in list elements 2024-09-25 19:12:43 +02:00
Uwe Steinmann
c1940fd97c just a comment 2024-09-25 17:25:58 +02:00
Uwe Steinmann
f89011f2ee Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-09-25 16:54:07 +02:00
Uwe Steinmann
36d322f296 hook processConfig must return null, unless it changes the ext configuration 2024-09-25 13:34:56 +02:00
Uwe Steinmann
a05d94d3bb show path of documents in list 2024-09-25 13:34:12 +02:00
Uwe Steinmann
428a5ca3ec replace german comments 2024-09-25 13:33:42 +02:00
Uwe Steinmann
7717600973 add changes for 5.1.36 2024-09-23 12:42:57 +02:00
Uwe Steinmann
4832e14b30 fix setting attributes, return quota and disk usage in PROPFIND 2024-09-23 12:42:26 +02:00
Uwe Steinmann
2661fae059 add composer-dev to require-dev 2024-09-20 18:28:48 +02:00
Uwe Steinmann
7a81d238d9 set enableDropUpload to true 2024-09-20 14:22:43 +02:00
Uwe Steinmann
dd3f3d7f02 set logFileMaxLevel=6 2024-09-20 13:41:17 +02:00
Uwe Steinmann
e71fccbb1e fix constructor of AccessRestrictions 2024-09-20 12:40:51 +02:00
Uwe Steinmann
43b1bb6fd8 fix constructor for AccessRestrictions 2024-09-18 17:53:00 +02:00
Uwe Steinmann
cc41763a96 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-09-18 14:21:10 +02:00
Uwe Steinmann
f4ee4cdcc4 fix for deleting previews from cache 2024-09-18 10:36:06 +02:00
Uwe Steinmann
1c7b4b0466 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-09-18 10:29:19 +02:00
Uwe Steinmann
51f66a5d12 remove some conversions because they seldomly work 2024-09-18 09:46:06 +02:00
Uwe Steinmann
af4f95d368 update body of testmail 2024-09-18 09:42:53 +02:00
Uwe Steinmann
40652c92ca set more parameters in test mail 2024-09-18 09:40:41 +02:00
Uwe Steinmann
c9fa3e641e go back to out/out.ClearCache.php 2024-09-18 09:26:26 +02:00
Uwe Steinmann
697ca1ffe3 more changes os 5.1.36 2024-09-18 09:25:55 +02:00
Uwe Steinmann
2c10334e9a set parameters in test mail 2024-09-18 09:24:51 +02:00
Uwe Steinmann
59f30a4a36 use name of sender even if force_from is set 2024-09-18 09:24:22 +02:00
Uwe Steinmann
5d083993df use unlink() to delete js files in cache, because rm can fail for a large number of files 2024-09-18 09:23:15 +02:00
Uwe Steinmann
fdf91ac3a2 fix typo 2024-09-18 08:57:11 +02:00
Uwe Steinmann
4a6c484912 minor updates and new phrases 2024-09-18 08:56:10 +02:00
Uwe Steinmann
5024c29dce add more changes for 5.1.36 2024-09-17 20:34:54 +02:00
Uwe Steinmann
97f9eb0efe updated translations 2024-09-17 20:33:51 +02:00
Uwe Steinmann
451d31d9f6 add changes for 5.1.36 2024-09-17 20:31:57 +02:00
Uwe Steinmann
f2ab106a81 from address in settings can be forced 2024-09-17 20:29:19 +02:00
Uwe Steinmann
ad37593625 pass _smtpLazySSL and _smtpForcrFrom to email notification 2024-09-17 20:27:57 +02:00
Uwe Steinmann
dfa1d4d842 set max log level of logger 2024-09-17 20:26:19 +02:00
Uwe Steinmann
55bd02fdea add 'lazy ssl' and 'force from' 2024-09-17 20:24:04 +02:00
Uwe Steinmann
32f2cffa9f add checkmark for each conversion service 2024-09-17 20:22:56 +02:00
Uwe Steinmann
1dad0081f9 add fold marks 2024-09-17 14:29:43 +02:00
Uwe Steinmann
939660f151 add changes for 5.1.36 2024-09-10 10:07:15 +02:00
Uwe Steinmann
3d030d4396 fix checking if group is in mandatory approvers 2024-09-10 10:05:45 +02:00
Uwe Steinmann
2d4d4c59a3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-09-07 21:52:26 +02:00
Uwe Steinmann
62ce0e7440 set placeholder of baseUrl to getBaseUrl() 2024-09-07 19:26:44 +02:00
Uwe Steinmann
74af17c020 showConfigText() checks if translation for <key>_placeholder exists 2024-09-07 19:26:30 +02:00
Uwe Steinmann
fe5a2d1add set requesturi 2024-09-07 19:25:07 +02:00
Uwe Steinmann
dfe73c8cb1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-09-05 18:10:48 +02:00
Uwe Steinmann
77cdca3fe3 chzn-select needѕ data-placeholder if data-allow-clear is set 2024-09-05 16:07:49 +02:00
Uwe Steinmann
36477ca71d fix typo 2024-09-04 22:07:49 +02:00
Uwe Steinmann
2c8054512b add changes for 5.1.36 2024-09-02 16:00:32 +02:00
Uwe Steinmann
f97c42f9b7 use rename() on windows when moving an extension to its final destination 2024-09-02 16:00:17 +02:00
Uwe Steinmann
15c5ef1441 do not treat repository url like a directory name 2024-09-02 15:33:19 +02:00
Uwe Steinmann
dcf448072d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-09-01 09:53:29 +02:00
Uwe Steinmann
74e65c9e0c fix js error 2024-09-01 09:49:19 +02:00
Uwe Steinmann
c947c990e4 add changes for 5.1.36 2024-09-01 09:45:28 +02:00
Uwe Steinmann
85c1c70c22 support for different storage of documents 2024-09-01 09:45:21 +02:00
Uwe Steinmann
0ceb6d602c fix potential xss attack when showing log file 2024-09-01 09:29:12 +02:00
Uwe Steinmann
aae0d004c3 add changes 2024-08-31 12:24:58 +02:00
Uwe Steinmann
34743e3177 fix error in attributes of select menus 2024-08-31 12:24:31 +02:00
Uwe Steinmann
65299463f4 do some logging 2024-08-21 16:44:19 +02:00
Uwe Steinmann
83f0cfff8d remove old code 2024-08-21 16:43:54 +02:00
Uwe Steinmann
3618a72313 fix setting attributes 2024-08-21 16:43:09 +02:00
Uwe Steinmann
7e32644307 set 'referer' in View to HTTP_REFERER 2024-08-19 20:03:48 +02:00
Uwe Steinmann
7a322702af add another converter for pdf to png using pdftocairo 2024-08-19 20:03:12 +02:00
Uwe Steinmann
165a5ef31e base folder can be skipped 2024-08-16 11:29:30 +02:00
Uwe Steinmann
54c7c49137 add help for checkboxes, add checkbox to add base folder 2024-08-16 11:29:03 +02:00
Uwe Steinmann
6fc30510cd actually exclude files set with --exclude 2024-08-15 13:35:25 +02:00
Uwe Steinmann
7f94f38ed2 add chart to short increase of disk space over time 2024-08-12 10:25:54 +02:00
Uwe Steinmann
2d721e542e add function formatFileSize() 2024-08-12 10:25:23 +02:00
Uwe Steinmann
154ec361ed get new method getRealMimeType() 2024-08-12 09:49:06 +02:00
Uwe Steinmann
13d9717f74 use new method getRealChecksum() and getRealMimeType() 2024-08-12 09:48:32 +02:00
Uwe Steinmann
a7e9172557 fix fold marks 2024-08-12 08:33:35 +02:00
Uwe Steinmann
3a6e03d306 add changes of 5.1.36 2024-07-31 11:20:22 +02:00
Uwe Steinmann
0e8d2ea165 remove empty line 2024-07-31 11:20:09 +02:00
Uwe Steinmann
5202240f2f create Access Operation for view 2024-07-31 11:17:05 +02:00
Uwe Steinmann
9e6573ecc7 add conversion for application/x-xopp 2024-07-11 19:48:57 +02:00
Uwe Steinmann
8854ae5543 remove deprecated function formatted_size() 2024-07-11 19:48:13 +02:00
Uwe Steinmann
b12cd07c5a add changes for 5.1.36 2024-07-08 17:16:31 +02:00
Uwe Steinmann
cc892ee72a add page for ѕending test notifications 2024-07-08 17:15:04 +02:00
Uwe Steinmann
48abf555d9 lots of new phrases for sending test notifications 2024-07-08 17:13:47 +02:00
Uwe Steinmann
87e4e2eba0 pass null instead of '' as default translation of subject 2024-07-08 17:11:31 +02:00
Uwe Steinmann
a14ea507fc fix php error 2024-07-02 17:07:30 +02:00
Uwe Steinmann
9db0985495 isDue() reads nextrun from from database 2024-07-02 16:25:05 +02:00
Uwe Steinmann
36a962e2a7 pass notifiert to view 2024-06-29 13:24:44 +02:00
Uwe Steinmann
f3c4385115 pass notifier to view 2024-06-29 13:24:20 +02:00
Uwe Steinmann
595ce3cbe7 get_extension() returns extension for image/jpg 2024-06-29 13:23:29 +02:00
Uwe Steinmann
6f11dc6dc2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-06-20 16:59:55 +02:00
Uwe Steinmann
9ac33d289f prevent php warnings 2024-06-20 16:59:32 +02:00
Uwe Steinmann
e6042e8538 remove old jquery 2024-06-17 19:17:07 +02:00
Uwe Steinmann
eefbd18e5e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-06-17 13:54:22 +02:00
Uwe Steinmann
19668222ca translate error msg after authentication error 2024-06-17 13:53:51 +02:00
Uwe Steinmann
e39cfe068c use getReadableDate() instead of date() 2024-06-17 09:26:29 +02:00
Uwe Steinmann
8039a0f479 task to run can be passed in url 2024-05-29 20:02:28 +02:00
Uwe Steinmann
ae72faab11 remove old html code to output class name 2024-05-29 20:02:00 +02:00
Uwe Steinmann
7c01e94015 fix regression in FolderNotify 2024-05-27 19:23:52 +02:00
Uwe Steinmann
41a438754a set initial document status 2024-05-24 08:25:13 +02:00
Uwe Steinmann
a44d7e3af0 expand tabs 2024-05-21 13:48:06 +02:00
Uwe Steinmann
9e3bb361ae Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-16 15:03:14 +02:00
Uwe Steinmann
47a1fcd2fa start new version 5.1.36 2024-05-16 15:01:57 +02:00
Uwe Steinmann
8870ca5c5d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-14 15:34:41 +02:00
Uwe Steinmann
1a00f4eaf4 changes of 5.1.35 2024-05-14 15:34:23 +02:00
Uwe Steinmann
5c7ef9dfd2 field for storing email in ldap can be configured 2024-05-14 15:33:45 +02:00
Uwe Steinmann
17351584d5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-14 13:07:39 +02:00
Uwe Steinmann
9e899d0064 add new phrase document_in_revision_no_date 2024-05-14 13:07:24 +02:00
Uwe Steinmann
0ef6be4fc2 add changes of 5.1.35 2024-05-14 13:06:23 +02:00
Uwe Steinmann
c7c5714f76 add missing class in progress bars 2024-05-14 12:22:22 +02:00
Uwe Steinmann
a429cc436f ldap_get_entries() returns lower case keys 2024-05-14 11:57:05 +02:00
Uwe Steinmann
ac841494a9 show a message if the revision date cannot be set 2024-05-14 07:30:34 +02:00
Uwe Steinmann
ce0de15ce1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-13 18:17:56 +02:00
Uwe Steinmann
226b839baa add changes for 5.1.35 2024-05-13 10:09:56 +02:00
Uwe Steinmann
3d605272c8 check access on RemoveDocumentFile and EditDocumentFile 2024-05-13 10:09:19 +02:00
Uwe Steinmann
42f7795d5f allow to set expiration date in the past 2024-05-13 10:08:36 +02:00
Uwe Steinmann
1b163e90e1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-07 21:35:53 +02:00
Uwe Steinmann
436b4a1453 start new version 5.1.35 2024-05-07 21:34:04 +02:00
Uwe Steinmann
791c23befa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-07 14:50:53 +02:00
Uwe Steinmann
6d86aee6cf add new translations 2024-05-07 14:50:40 +02:00
Uwe Steinmann
1c638b83a5 add changes for 5.1.34 2024-05-07 13:54:34 +02:00
Uwe Steinmann
56cc64d1cf add new conversion service from text/html to text/plain 2024-05-07 13:51:21 +02:00
Uwe Steinmann
79d4315ff7 add converter from text/markdown and text/x-rst to text/plain 2024-05-07 13:24:10 +02:00
Uwe Steinmann
d552047b0b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-06 18:57:55 +02:00
Uwe Steinmann
e6cb1ce446 fix drag&drop upload of folders 2024-05-06 18:57:03 +02:00
Uwe Steinmann
e1a970fb02 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-06 12:32:05 +02:00
Uwe Steinmann
024f47367a use controller in updateDocument 2024-05-06 12:31:40 +02:00
Uwe Steinmann
c8167d62ed check if document is locked when updating it 2024-05-06 08:06:01 +02:00
Uwe Steinmann
e9d953eed6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-03 11:35:55 +02:00
Uwe Steinmann
8e1e146515 output list of existing mimetypes and its conversion services 2024-05-03 11:35:04 +02:00
Uwe Steinmann
eb6b93715f suppress messages when running ffmpeg 2024-05-03 11:34:30 +02:00
Uwe Steinmann
82c3349842 add conversion from video to png with ffmpeg 2024-05-03 10:11:00 +02:00
Uwe Steinmann
fd92b6c078 add note for pdftotext 2024-05-03 08:51:03 +02:00
Uwe Steinmann
3a5886b64a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-03 08:38:22 +02:00
Uwe Steinmann
188d440560 schedule document for reindexing when changing the mimetype or name 2024-05-02 18:12:41 +02:00
Uwe Steinmann
72509a09eb add ViewOnlіne and Download to legacy access rights 2024-05-02 18:12:10 +02:00
Uwe Steinmann
f2b4830730 check for maxfileszise of uploaded file 2024-05-02 14:24:43 +02:00
Uwe Steinmann
bf4fe82cd5 status of previous version can be overwritten 2024-05-02 14:24:09 +02:00
Uwe Steinmann
b77609d375 comment is no longer required 2024-05-02 14:23:42 +02:00
Uwe Steinmann
60696ac079 check for attribute 'required' when creating select menu in formField() 2024-05-02 14:23:03 +02:00
Uwe Steinmann
14d79d58e7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-05-02 08:27:47 +02:00
Uwe Steinmann
3024bf6f5f get allowed file types from view for passing the getFileChooserHtml() 2024-05-02 07:49:16 +02:00
Uwe Steinmann
56e15e5125 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-30 20:45:31 +02:00
Uwe Steinmann
b3633b7cf0 do not show head line of batch operations if none is allowed 2024-04-30 20:45:01 +02:00
Uwe Steinmann
594c5a5db5 fix setting batchOperations if none is set 2024-04-30 20:44:41 +02:00
Uwe Steinmann
76b9b3c2d6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-30 18:32:29 +02:00
Uwe Steinmann
e0973e4a21 new batch operation for adding reviewer/approver 2024-04-30 10:46:27 +02:00
Uwe Steinmann
aa80886ced more translations 2024-04-30 10:13:12 +02:00
Uwe Steinmann
b176a145f4 new translations 2024-04-30 08:12:52 +02:00
Uwe Steinmann
44621c0bb6 add legacy access check for controllers 2024-04-29 13:05:59 +02:00
Uwe Steinmann
0d0fc4e50a check for documents with a link to themselves 2024-04-28 19:38:10 +02:00
Uwe Steinmann
dc14fc5217 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-28 14:41:41 +02:00
Uwe Steinmann
36ab25dfdc put file name in '' 2024-04-28 14:41:27 +02:00
Uwe Steinmann
1edb468877 put file name in '' 2024-04-28 14:40:39 +02:00
Uwe Steinmann
2107955b7e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-28 13:48:44 +02:00
Uwe Steinmann
2ded968aa3 fix wrong function call 2024-04-28 13:48:10 +02:00
Uwe Steinmann
a0e906a067 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-28 10:03:14 +02:00
Uwe Steinmann
59309b7db8 check if attachment could be imported 2024-04-28 10:02:52 +02:00
Uwe Steinmann
da69c19a1a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-28 09:58:12 +02:00
Uwe Steinmann
9d37187e43 check if date of file can be parsed 2024-04-28 09:50:29 +02:00
Uwe Steinmann
9e16e54aaa fix includes 2024-04-27 20:13:58 +02:00
Uwe Steinmann
b51749e631 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-27 20:10:06 +02:00
Uwe Steinmann
e86aeff722 fix includes, do not import document category with id=0 2024-04-27 20:09:09 +02:00
Uwe Steinmann
f230cd6918 remove duplicate code 2024-04-27 20:07:21 +02:00
Uwe Steinmann
4f44241850 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-27 18:40:54 +02:00
Uwe Steinmann
eb9f0e7eda export and import quota of users 2024-04-27 18:12:05 +02:00
Uwe Steinmann
d70c90e758 export and import roles 2024-04-27 18:09:38 +02:00
Uwe Steinmann
72a4a05bb2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-25 18:34:05 +02:00
Uwe Steinmann
6679c3b868 new translations for transmittals in menu 2024-04-25 18:33:54 +02:00
Uwe Steinmann
409b86461b add transmittals in menu 2024-04-25 18:33:05 +02:00
Uwe Steinmann
0d2cc403da add endpoint delete '/roles/{id}' 2024-04-25 15:13:17 +02:00
Uwe Steinmann
f5073ffd4f add changes for 6.0.27 2024-04-23 18:27:51 +02:00
Uwe Steinmann
4ed40bff78 fix appearance of delete button 2024-04-23 18:26:56 +02:00
Uwe Steinmann
478c385d13 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-23 18:22:30 +02:00
Uwe Steinmann
b81252e082 set vim commands 2024-04-23 18:22:14 +02:00
Uwe Steinmann
7a06b50e92 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-23 18:21:36 +02:00
Uwe Steinmann
3a1be1333d fix line indenting 2024-04-23 18:19:51 +02:00
Uwe Steinmann
ce9be505fd hash password when setting new password 2024-04-23 18:16:06 +02:00
Uwe Steinmann
0da2308ee3 add new endpoints for managing roles 2024-04-23 18:15:14 +02:00
Uwe Steinmann
4275072338 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-23 13:57:07 +02:00
Uwe Steinmann
6250a212b3 hash password when creating a new user 2024-04-23 13:55:55 +02:00
Uwe Steinmann
d3ab3e7069 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-23 12:39:49 +02:00
Uwe Steinmann
84443437a2 comment must be set to '' because user comment may not be null 2024-04-23 12:38:41 +02:00
Uwe Steinmann
cf786e749a fix setting role of user when creating a new user 2024-04-23 12:38:03 +02:00
Uwe Steinmann
06f0e1423b add changes for 6.0.27 2024-04-23 12:20:04 +02:00
Uwe Steinmann
55aa6fe170 the checkout info is not related to substituted user 2024-04-23 12:18:34 +02:00
Uwe Steinmann
15ee5357a5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-22 17:49:50 +02:00
Uwe Steinmann
0044cd6a19 fix adding workflow log 2024-04-22 17:49:40 +02:00
Uwe Steinmann
7f16340a26 fix adding workflow log 2024-04-22 17:47:11 +02:00
Uwe Steinmann
50b25a59ec Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-22 14:49:18 +02:00
Uwe Steinmann
593b6359d2 enlarge space between menu items (new sass compiler causes other changes) 2024-04-22 14:47:50 +02:00
Uwe Steinmann
6a13d61abc fix calling getMandatory(Reviewer|Approver) 2024-04-22 10:59:02 +02:00
Uwe Steinmann
416df6c846 fix insert statement 2024-04-21 13:38:33 +02:00
Uwe Steinmann
bb416ffe56 allow empty for regular select menus of config variables 2024-04-19 17:18:28 +02:00
Uwe Steinmann
23b9def5c8 pass logger to view and controller 2024-04-19 17:18:06 +02:00
Uwe Steinmann
d96cae4864 set max number of item in sequence chooser to 200, make it a chzn-select menu 2024-04-18 19:23:47 +02:00
Uwe Steinmann
0da7e0f655 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-16 06:36:39 +02:00
Uwe Steinmann
c3bd028774 add new phrases 2024-04-16 06:31:24 +02:00
Uwe Steinmann
c411505701 tasks and clipboard can be shown in main menu, even if there are no tasks due or the clipboard is empty 2024-04-15 17:37:20 +02:00
Uwe Steinmann
c9286b75a0 show tasklist in menu even if there are no task 2024-04-15 11:54:23 +02:00
Uwe Steinmann
bd80e96c92 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-13 09:25:27 +02:00
Uwe Steinmann
f79c60e927 add changes for 5.1.34 2024-04-13 09:25:10 +02:00
Uwe Steinmann
d74b9ed9de fix sending mails when document/folder was moved 2024-04-13 09:24:27 +02:00
Uwe Steinmann
9c81a10109 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-11 12:45:55 +02:00
Uwe Steinmann
d6aa0e4f60 improve log line 2024-04-11 12:44:57 +02:00
Uwe Steinmann
74e5be95c2 log calling script 2024-04-11 12:37:02 +02:00
Uwe Steinmann
2f8e3fbb51 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-11 12:21:51 +02:00
Uwe Steinmann
c8ac0bacad init variable 2024-04-11 12:21:41 +02:00
Uwe Steinmann
f73bdb8388 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-08 18:01:43 +02:00
Uwe Steinmann
b6a1339bd7 do not add anchor for extension config, if no config exists 2024-04-08 18:01:29 +02:00
Uwe Steinmann
35873391c8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-04 15:01:24 +02:00
Uwe Steinmann
9558075a2f various minor updates 2024-04-04 15:01:11 +02:00
Uwe Steinmann
3914b76919 expand tabs 2024-04-04 15:00:02 +02:00
Uwe Steinmann
e1c7e27a69 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-04 14:15:29 +02:00
Uwe Steinmann
6bc247c0ad add notifications send by SetReviewersApprovers 2024-04-04 14:15:08 +02:00
Uwe Steinmann
4e9901161f add more notifications in seeddms 6 2024-04-04 14:14:17 +02:00
Uwe Steinmann
aae9422e30 move sending mails into inc.ClassNotificationService.php 2024-04-04 13:58:36 +02:00
Uwe Steinmann
ad84609a49 add functions to send mail on revision/receipt add/delete 2024-04-04 13:57:36 +02:00
Uwe Steinmann
0b4afff149 set new and old status 2024-04-04 13:56:14 +02:00
Uwe Steinmann
01837f6c5c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-03 13:43:13 +02:00
Uwe Steinmann
5aa5db880d pass convertToPdf to view 2024-04-03 13:42:58 +02:00
Uwe Steinmann
1999206af0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-03 09:26:07 +02:00
Uwe Steinmann
f0f5cd5058 fix php warnings 2024-04-03 09:25:50 +02:00
Uwe Steinmann
d36636be55 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-03 09:21:59 +02:00
Uwe Steinmann
bad9db377b add label to checkboxes 2024-04-03 09:21:43 +02:00
Uwe Steinmann
7b65c50b7e use own code for creating checkboxes 2024-04-03 09:21:24 +02:00
Uwe Steinmann
e0b421dcca convert checkin into controller 2024-04-02 20:33:34 +02:00
Uwe Steinmann
038e929778 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-04-02 09:07:16 +02:00
Uwe Steinmann
f4a44a853f improve navigating in typeahead menu 2024-04-01 11:35:37 +02:00
Uwe Steinmann
da664f2948 set height of typeahead menu to 600px max 2024-04-01 11:32:34 +02:00
Uwe Steinmann
246ba45c52 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-30 13:15:12 +01:00
Uwe Steinmann
060c5f6a00 fix selection in typeahead menu 2024-03-30 13:14:55 +01:00
Uwe Steinmann
08cac16ecf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-30 12:29:37 +01:00
Uwe Steinmann
9e7fa8eecd fix render function for typeahead folder search 2024-03-30 12:28:00 +01:00
Uwe Steinmann
6b17c35804 sync changes in application.js 2024-03-30 12:14:55 +01:00
Uwe Steinmann
245bfe640a updated folder chooser 2024-03-30 12:12:47 +01:00
Uwe Steinmann
f06267dd0b fix typeahead menu 2024-03-30 12:00:04 +01:00
Uwe Steinmann
66114a653c fix link to document in html mail of expired documents 2024-03-28 20:11:09 +01:00
Uwe Steinmann
eded3365b1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-28 19:27:42 +01:00
Uwe Steinmann
929ceb91e4 fixed typo in variable name 2024-03-28 19:27:25 +01:00
Uwe Steinmann
7998c9d7e0 change sequence of parameters for expired docs task 2024-03-28 19:26:50 +01:00
Uwe Steinmann
8b2db5376c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-28 18:30:22 +01:00
Uwe Steinmann
1abf8802dc include complete day of end date 2024-03-28 18:30:02 +01:00
Uwe Steinmann
3e8a494f1a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-28 18:22:41 +01:00
Uwe Steinmann
84ff9e48fe start and end date can be specified 2024-03-28 18:22:08 +01:00
Uwe Steinmann
9fad6c6e61 add dryrun paramter 2024-03-28 14:08:27 +01:00
Uwe Steinmann
c1b736022d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-28 11:04:37 +01:00
Uwe Steinmann
ac1442d7ca set proper names/text for cmd and error msg 2024-03-28 11:03:59 +01:00
Uwe Steinmann
8e834e8898 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-27 19:50:18 +01:00
Uwe Steinmann
6b91d3ce40 log errors and set $success to false 2024-03-27 19:49:52 +01:00
Uwe Steinmann
69b61b1a75 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-26 13:30:02 +01:00
Uwe Steinmann
a05a0b9b49 various minor updates 2024-03-26 13:29:41 +01:00
Uwe Steinmann
f65af1741c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-25 16:22:39 +01:00
Uwe Steinmann
9b3cbb3417 escape several strings to prevent xss attacks 2024-03-25 16:20:50 +01:00
Uwe Steinmann
fc4d2edb57 pass latest content to hooks. Fix php warnings 2024-03-25 15:17:27 +01:00
Uwe Steinmann
37478ecd89 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-25 14:22:01 +01:00
Uwe Steinmann
2fe99c2905 attributes of type user, group, document, folder are now an object 2024-03-25 14:18:36 +01:00
Uwe Steinmann
8d758085a4 get attribute as string, set folder_id when sending 'folder_attribute_added' 2024-03-25 12:43:08 +01:00
Uwe Steinmann
5d5e4e7741 add changes for 5.1.34 2024-03-25 11:11:34 +01:00
Uwe Steinmann
19c70d5588 do not add items ot sequence chooser, if number of documents/folders is greater than 50 2024-03-25 10:58:16 +01:00
Uwe Steinmann
6a7d596806 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-23 11:57:58 +01:00
Uwe Steinmann
a00655932b check for latest content 2024-03-23 11:57:13 +01:00
Uwe Steinmann
ceaa62f16c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-23 11:56:11 +01:00
Uwe Steinmann
5fc7c85bf2 add changes for 5.1.34 2024-03-22 18:55:03 +01:00
Uwe Steinmann
2c4b729582 some code clean ups 2024-03-22 10:06:06 +01:00
Uwe Steinmann
78afbe8699 take enableusersview into account (currently disabled) 2024-03-22 10:04:59 +01:00
Uwe Steinmann
637476f0a9 fix button to remove membership, show login of user 2024-03-22 10:03:40 +01:00
Uwe Steinmann
39179d6056 show login name of user 2024-03-22 10:02:37 +01:00
Uwe Steinmann
7bdfd5f88f code cleanup 2024-03-22 10:01:19 +01:00
Uwe Steinmann
6cb356454f fix label of menu item for notifications 2024-03-21 08:24:43 +01:00
Uwe Steinmann
28aaf8e28f users will see only their own notifications 2024-03-21 08:23:08 +01:00
Uwe Steinmann
2b7f90991a support login by email 2024-03-20 18:21:22 +01:00
Uwe Steinmann
0017137d0b allow login by email if turned on in configuration 2024-03-20 17:05:41 +01:00
Uwe Steinmann
e383f8be11 add changes for 5.1.34 2024-03-20 16:28:29 +01:00
Uwe Steinmann
6490052342 do not check if owner has got submitted review/approval email, because owners not longer receive that mail 2024-03-20 16:23:57 +01:00
Uwe Steinmann
7c07fba0ba do not send submitted approval/review mail to owner 2024-03-20 16:21:00 +01:00
Uwe Steinmann
20e61d1691 send status changes to uploader of document 2024-03-20 16:19:53 +01:00
Uwe Steinmann
825186a046 set default lang in login form if language selector is turned off 2024-03-20 15:28:58 +01:00
Uwe Steinmann
39ded6779d check if attribute is aof type document or folder and multivalue 2024-03-20 14:04:56 +01:00
Uwe Steinmann
5235a859fc add comment how $tmpDN is used 2024-03-20 14:02:24 +01:00
Uwe Steinmann
18715fe4fa check more error codes in attribute validation 2024-03-20 14:01:52 +01:00
Uwe Steinmann
88c49363ac document search show path of items 2024-03-18 13:54:35 +01:00
Uwe Steinmann
4e91604d44 show parent of document in list of linked documents 2024-03-18 10:38:33 +01:00
Uwe Steinmann
996163f72f show parent folder in list of documents 2024-03-18 07:50:10 +01:00
Uwe Steinmann
935c9557f9 getMandatoryReviewers() and getMandatoryApprovers() require 3 params 2024-03-15 07:08:28 +01:00
Uwe Steinmann
81b45ceeff do not show fast upload area if access on folder is insufficient 2024-03-13 09:29:39 +01:00
Uwe Steinmann
423ee97ef1 add changes of 5.1.34 2024-03-12 15:58:46 +01:00
Uwe Steinmann
352c3997bd fix check if current user is owner 2024-03-12 15:57:47 +01:00
Uwe Steinmann
ac2ade6b6e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-03-06 17:38:04 +01:00
Uwe Steinmann
de0eb7cd2c add changes of 5.1.34 2024-03-06 16:41:10 +01:00
Uwe Steinmann
71d5970ef0 add attribute 'data-uploadformtoken' to document list entry 2024-03-06 16:33:40 +01:00
Uwe Steinmann
484a95029c add support for updating a document by dropping a file on a document, folder hierarchies can be uploaded by drag&drop 2024-03-06 16:32:23 +01:00
Uwe Steinmann
5d548bafcb add more translations in js 2024-03-06 16:31:49 +01:00
Uwe Steinmann
dd4149e3a6 add commands 'updatedocument' and 'addfolder' 2024-03-06 16:31:02 +01:00
Uwe Steinmann
0402877a39 remove unused () 2024-03-05 18:18:14 +01:00
Uwe Steinmann
2ddbc24108 remove not needed () 2024-03-04 18:42:29 +01:00
Uwe Steinmann
84a3df2e45 add entry for 5.1.34 2024-03-04 11:40:21 +01:00
Uwe Steinmann
83e131d677 list of documents: output folder where document is located 2024-03-04 11:17:58 +01:00
Uwe Steinmann
88452a63a1 do not show form if there are no process to transfer 2024-02-29 08:50:35 +01:00
Uwe Steinmann
36dbc1f825 no need to check if group has users because it has been remove from the mandatory groups already 2024-02-22 12:07:35 +01:00
Uwe Steinmann
43f078a153 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-22 12:07:06 +01:00
Uwe Steinmann
43a22ea252 no need to check if group has users, because those groups have been removed from the mandatory already 2024-02-22 12:06:16 +01:00
Uwe Steinmann
a1a20a4c25 pass document to getMandatoryReviewers() and getMandatoryApprovers() 2024-02-22 11:58:05 +01:00
Uwe Steinmann
12a4a6446f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-21 16:04:29 +01:00
Uwe Steinmann
c5d44c3674 do not add empty groups as mandatory approver/reviewer 2024-02-21 16:04:01 +01:00
Uwe Steinmann
a0b3d9da27 take all mandatory reviewers/approvers into account 2024-02-21 15:33:13 +01:00
Uwe Steinmann
f4003f72e9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-17 13:04:16 +01:00
Uwe Steinmann
17dbfcf2c7 propperly import group names with non-printable chars 2024-02-17 13:03:29 +01:00
Uwe Steinmann
18e4874a77 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-16 08:51:23 +01:00
Uwe Steinmann
98984619f6 add changes for 5.1.34 2024-02-16 08:50:09 +01:00
Uwe Steinmann
c6243813bf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-15 09:40:59 +01:00
Uwe Steinmann
d009cbf3a5 ??? 2024-02-15 09:38:12 +01:00
Uwe Steinmann
53812aa45d checkboxes can be made invisible 2024-02-15 09:37:43 +01:00
Uwe Steinmann
6f2300fdd7 depend on sabre/dav 4, passwords can be shown 2024-02-15 09:28:19 +01:00
Uwe Steinmann
3345155e5e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-12 14:12:29 +01:00
Uwe Steinmann
b7b3aab059 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2024-02-12 14:12:17 +01:00
Uwe Steinmann
f671dc0b1c add missing phrases 2024-02-12 14:11:34 +01:00
Uwe Steinmann
0224793366 add showConfigGroup() 2024-02-12 14:10:12 +01:00
Uwe Steinmann
4eba2e3283 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-12 14:08:17 +01:00
Uwe Steinmann
d8c2a9df06 add global group approver/reviewer 2024-02-12 14:06:53 +01:00
Uwe Steinmann
3347b8e4f5 fix encapsulation with start/end container 2024-02-09 10:49:15 +01:00
Uwe Steinmann
9300d92311 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-08 21:20:28 +01:00
Uwe Steinmann
663ce7f675 add global and group manager reviewers/approvers 2024-02-08 21:02:12 +01:00
Uwe Steinmann
7c538ad5d1 some more information when using php-fpm 2024-02-08 20:56:49 +01:00
Uwe Steinmann
192e750f00 output warning if list of recipients contains disabled users 2024-02-07 09:41:40 +01:00
Uwe Steinmann
fb37e526cc separated revisions without access from disabled users 2024-02-06 10:29:23 +01:00
Uwe Steinmann
00d71f4c2e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-06 09:25:22 +01:00
Uwe Steinmann
86fe68ea15 fix marking of disabled users 2024-02-06 09:24:53 +01:00
Uwe Steinmann
5d2d80b0af fix output of documents with disabled recipients 2024-02-06 09:23:47 +01:00
Uwe Steinmann
0fa5ffae48 changes for 6.0.27 2024-02-05 16:15:53 +01:00
Uwe Steinmann
192daaec69 distinguish between no access and disabled users in check for receptions 2024-02-05 16:15:18 +01:00
Uwe Steinmann
89ce934164 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-02-02 16:09:53 +01:00
Uwe Steinmann
956c84de1f fix regression in 5.1.33, workflow and reviewers/approvers could not be set anymore 2024-02-02 16:07:17 +01:00
Uwe Steinmann
61dd316e09 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-31 07:51:59 +01:00
Uwe Steinmann
f14617b3c6 show finished workflow only in advanced workflow mode 2024-01-31 07:37:54 +01:00
Uwe Steinmann
81ee0beeae Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-30 20:39:56 +01:00
Uwe Steinmann
4e63fd2ecf start new version 5.1.34 2024-01-30 20:36:46 +01:00
Uwe Steinmann
c66637ce6c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-30 17:11:48 +01:00
Uwe Steinmann
5f229063bf Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2024-01-30 17:11:35 +01:00
Uwe Steinmann
95c3678109 add various translations 2024-01-30 17:10:38 +01:00
Uwe Steinmann
eb95f7999a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-30 16:32:45 +01:00
Uwe Steinmann
40d05f5e47 no need for php 8.0 anymore 2024-01-30 16:32:20 +01:00
Uwe Steinmann
2009e59629 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-26 12:54:59 +01:00
Uwe Steinmann
2f5392797d cast parameter to SeedDMS_Core_File::format_filesize into int 2024-01-26 12:54:15 +01:00
Uwe Steinmann
c94d940325 setting HTTP_AUTHORI 2024-01-26 12:53:32 +01:00
Uwe Steinmann
22aaa5608f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-16 17:59:16 +01:00
Uwe Steinmann
e3f563c3e7 better check if upper limit of version is set 2024-01-16 17:58:53 +01:00
Uwe Steinmann
6b562477aa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-15 09:31:28 +01:00
Uwe Steinmann
11ea03560e requires php 8.x 2024-01-15 09:31:04 +01:00
Uwe Steinmann
a03b96330a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-12 14:31:06 +01:00
Uwe Steinmann
96406dd432 set HTTP_AUTHORIZATION header 2024-01-12 14:30:46 +01:00
Uwe Steinmann
6c84787027 fix inclusion of php files, turn on authentication 2024-01-12 14:29:45 +01:00
Uwe Steinmann
ba8aebb24b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-12 14:11:49 +01:00
Uwe Steinmann
84a85f145a set language in hidden field 2024-01-12 14:11:22 +01:00
Uwe Steinmann
023e2c3edf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-11 10:10:12 +01:00
Uwe Steinmann
4b761a95a1 check if method specified in 'action' is public 2024-01-11 10:09:56 +01:00
Uwe Steinmann
dd40e979e7 update spectrum-colorpicker2 2024-01-10 22:18:03 +01:00
Uwe Steinmann
d94366c918 update to jquery 3.71 2024-01-10 21:51:19 +01:00
Uwe Steinmann
8f945181c5 add changes for 5.1.33 2024-01-10 20:38:43 +01:00
Uwe Steinmann
255fb59416 do not allow url parameter 'action' if calling Login controller 2024-01-10 20:37:49 +01:00
Uwe Steinmann
53bca0e294 seed_pass_verify() checks strictly hash amd md5 of password 2024-01-10 20:36:53 +01:00
Uwe Steinmann
3af7ce8177 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2024-01-02 17:58:39 +01:00
Uwe Steinmann
56d1173ecd do not use var_dump(), use echo() and imagesx() 2024-01-02 17:58:02 +01:00
Uwe Steinmann
d872b68efe more efficient way to get documents in process 2024-01-02 17:56:43 +01:00
Uwe Steinmann
2021a124a5 pass fulltext service to AddSubFolder controller 2023-12-22 07:46:39 +01:00
Uwe Steinmann
699e1bcfad Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-12-19 12:53:16 +01:00
Uwe Steinmann
ced00167bf turn of links 2023-12-19 12:52:14 +01:00
Uwe Steinmann
c23c5845ad add changes for 6.0.26 2023-12-19 10:00:51 +01:00
Uwe Steinmann
00c1efffac add substitution of users 2023-12-19 09:58:55 +01:00
Uwe Steinmann
ddfe87a82c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-12-19 09:32:14 +01:00
Uwe Steinmann
02b4dd2635 add changes for 5.1.33 2023-12-19 09:31:58 +01:00
Uwe Steinmann
9050f8b374 remove session when logging out 2023-12-19 09:31:18 +01:00
Uwe Steinmann
79aa8098e9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-12-18 21:48:03 +01:00
Uwe Steinmann
6a558a4d26 add converter from txt to pdf/png 2023-12-18 21:47:38 +01:00
Uwe Steinmann
98f5cee2eb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-12-18 14:36:12 +01:00
Uwe Steinmann
ebd11bdaf2 fix getting mandatory reviewers for document in upload_document 2023-12-18 14:35:39 +01:00
Uwe Steinmann
07bfdca11e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-12-15 17:14:02 +01:00
Uwe Steinmann
facd9f7a65 use a stats array from fulltext search for min/max of facet value 2023-12-15 17:13:28 +01:00
Uwe Steinmann
62ff3da502 get composer 2.2.22 2023-12-15 14:19:49 +01:00
Uwe Steinmann
ac656d4da0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-12-15 11:00:16 +01:00
Uwe Steinmann
f330477003 add changes for 5.1.33 2023-12-13 08:26:16 +01:00
Uwe Steinmann
08415039ca add name of attribute def. in error msg when setting an attribute 2023-12-13 08:24:30 +01:00
Uwe Steinmann
1ac232476a simplified removeDocumentCategory 2023-12-13 08:23:58 +01:00
Uwe Steinmann
cab5f5bb2e __getDocumentData() sets categories 2023-12-13 08:23:19 +01:00
Uwe Steinmann
2a2035cccf use showActions() to output list of buttons on attachment tab 2023-12-13 08:07:38 +01:00
Uwe Steinmann
03de004b30 fix calling changeGroupMembership() 2023-11-30 17:02:51 +01:00
Uwe Steinmann
576b866b7f fix return code of changeGroupMembership() if no user id is passed 2023-11-30 17:02:28 +01:00
Uwe Steinmann
b131c63dd7 fix error msg when creating a group without passing a name 2023-11-30 17:01:16 +01:00
Uwe Steinmann
1133d65544 new method to delete group 2023-11-30 17:00:18 +01:00
Uwe Steinmann
dbb9381573 use controller when adding a new document 2023-11-30 16:59:00 +01:00
Uwe Steinmann
8ff3303015 add changes for 5.1.33 2023-11-28 10:23:23 +01:00
Uwe Steinmann
d59a4c18c9 use conversion manager 2023-11-28 10:23:08 +01:00
Uwe Steinmann
0012de7337 allow ttf files in directory 'res' 2023-11-23 15:50:25 +01:00
Uwe Steinmann
1115d08d2f use instead of 2023-11-12 19:19:02 +01:00
Uwe Steinmann
cd0a5c9844 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-11-12 19:16:11 +01:00
Uwe Steinmann
2e8ab0cb52 do not allow to set workflow of previous versions 2023-11-12 19:05:54 +01:00
Uwe Steinmann
6f8f56ad4b sync with layout of ViewDocument 2023-11-12 19:05:35 +01:00
Uwe Steinmann
8432340154 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-11-12 17:38:31 +01:00
Uwe Steinmann
9132e28052 add changes for 5.1.33 2023-11-12 17:36:44 +01:00
Uwe Steinmann
aa9600453d show logs of finished worflows 2023-11-12 17:36:01 +01:00
Uwe Steinmann
1a5dbfef51 get settings from view 2023-11-06 14:31:56 +01:00
Uwe Steinmann
0f258d81ac add warning about document being release only if initial doc status is 'released' 2023-11-06 14:31:18 +01:00
Uwe Steinmann
bcf2239334 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-11-02 13:11:56 +01:00
Uwe Steinmann
172d5b3063 do not set max_execution_time in constructor, it will be set later 2023-11-02 13:11:14 +01:00
Uwe Steinmann
f69c9ad9d0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-31 21:14:32 +01:00
Uwe Steinmann
4b887c987b fix checking for metadatafile 2023-10-31 21:14:04 +01:00
Uwe Steinmann
46f5b630d6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-31 21:09:36 +01:00
Uwe Steinmann
7a346f3b9f fix inclusion of files 2023-10-31 21:09:15 +01:00
Uwe Steinmann
ee4162a565 check if $previewer is set 2023-10-31 18:51:03 +01:00
Uwe Steinmann
7c1479708f do not list more than 20 folders/files 2023-10-31 18:49:54 +01:00
Uwe Steinmann
4e2af679e9 sync with op/op.ImportFS.php 2023-10-31 18:49:19 +01:00
Uwe Steinmann
d7e780493f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-31 16:17:47 +01:00
Uwe Steinmann
71369f73b9 add changes for 5.1.33 2023-10-31 14:43:42 +01:00
Uwe Steinmann
929129abac do not show filter for categories if none exist 2023-10-31 14:42:26 +01:00
Uwe Steinmann
0aedf55ec6 prevent xss attach 2023-10-27 12:51:21 +02:00
Uwe Steinmann
8a148daa42 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-27 12:09:34 +02:00
Uwe Steinmann
f562a1bbed fix typo 2023-10-27 12:09:15 +02:00
Uwe Steinmann
46371b2cf2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-27 08:30:38 +02:00
Uwe Steinmann
2c32f6f4de more changes for 5.1.33 2023-10-27 08:21:30 +02:00
Uwe Steinmann
246ce885e2 add changes for 5.1.33 2023-10-27 08:08:15 +02:00
Uwe Steinmann
31fa1d505c fix call of contructor of SeedDMS_AccessOperation 2023-10-20 07:14:34 +02:00
Uwe Steinmann
b118b00536 pass $document ot mayRemoveVersion() 2023-10-18 19:04:02 +02:00
Uwe Steinmann
ab16c6b539 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-17 16:36:06 +02:00
Uwe Steinmann
d567519e0e new phrases 2023-10-17 16:35:46 +02:00
Uwe Steinmann
b34b37189a remove SeedDMЅ_Core 2023-10-16 12:59:20 +02:00
Uwe Steinmann
c10d2f403a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-16 12:57:38 +02:00
Uwe Steinmann
825883a667 has been moved into extra git repoository 2023-10-16 12:55:35 +02:00
Uwe Steinmann
8b4c01e339 addGrpRecepient() and addIndRecepient() return the log id not 0 2023-10-15 19:24:17 +02:00
Uwe Steinmann
ee568bb916 allow to edit hidden users for receiving a document 2023-10-15 17:38:22 +02:00
Uwe Steinmann
000f1e2c44 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-15 17:31:43 +02:00
Uwe Steinmann
b2505e1486 show checkbox for enableHiddenRevApp 2023-10-15 17:30:26 +02:00
Uwe Steinmann
45d00e5bd0 check $settings->_enableHiddenRevApp 2023-10-15 17:30:03 +02:00
Uwe Steinmann
889f49daca fix line indenting 2023-10-15 17:29:28 +02:00
Uwe Steinmann
f56b500b9f save and read enableHiddenRevApp from settings 2023-10-15 17:28:31 +02:00
Uwe Steinmann
e06aa0a286 do not list hidden users as recipient or revisor 2023-10-15 10:30:06 +02:00
Uwe Steinmann
568718f023 add parameters keepfile and dryrun to import drop folder task 2023-10-14 13:47:27 +02:00
Uwe Steinmann
1085401ccf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-14 12:55:20 +02:00
Uwe Steinmann
f0ffe1173e add SeedDMSBox.callback() 2023-10-14 12:54:29 +02:00
Uwe Steinmann
3dd304eb98 add changes for 5.1.33 2023-10-14 10:46:58 +02:00
Uwe Steinmann
ec990ef1c5 make code theme independent, open confirm dialog for category change, check if category, user, docs are selected before opening confirm dialog 2023-10-14 10:45:33 +02:00
Uwe Steinmann
a2676573a6 add SeedDMSBox.redirect() 2023-10-14 10:44:23 +02:00
Uwe Steinmann
69cab29178 use " instead of ' 2023-10-14 08:50:48 +02:00
Uwe Steinmann
2b3d127808 fix 'Add to clipboard' menu item in bootstrap theme 2023-10-14 08:49:57 +02:00
Uwe Steinmann
ac69311242 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-13 21:40:26 +02:00
Uwe Steinmann
34697b62bd new config _enableHiddenRevApp (currently set to false) 2023-10-13 19:33:25 +02:00
Uwe Steinmann
dca43ea703 fix colouring of user lines, show hidden users in yellow 2023-10-13 19:32:07 +02:00
Uwe Steinmann
00fe04a82f number of user session can be limited 2023-10-13 19:31:41 +02:00
Uwe Steinmann
f1183cd4d2 changes in 6.0.26 2023-10-13 16:39:51 +02:00
Uwe Steinmann
878f7e559a add task to import files from dropfolder 2023-10-13 16:39:14 +02:00
Uwe Steinmann
5ebbaa9336 set initial doc status from settings when uploading a document 2023-10-13 16:38:44 +02:00
Uwe Steinmann
04b63531c7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-13 13:36:10 +02:00
Uwe Steinmann
183bdcfa69 use mayRemoveVersion() 2023-10-13 13:33:58 +02:00
Uwe Steinmann
fcf5c9be93 addititional lecacy right can be added 2023-10-13 13:33:14 +02:00
Uwe Steinmann
f02ba8ddc5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-13 11:42:12 +02:00
Uwe Steinmann
3eb830855a if fields of type 'checkbox' have a default value, the will have a hidden input field to set this value 2023-10-13 11:38:51 +02:00
Uwe Steinmann
437f9e894f options of a conf var of type select can be retrieved by a hook 2023-10-13 11:38:02 +02:00
Uwe Steinmann
14a3da7855 if fields of type 'checkbox' have a default value, the will have a hidden input field to set this value 2023-10-13 11:37:07 +02:00
Uwe Steinmann
40f2311b91 show files and folders in dropfolder dir recursively 2023-10-12 16:02:50 +02:00
Uwe Steinmann
ab82a65bcc fix creating preview image of file in drop folder if it contains special chars 2023-10-12 13:34:46 +02:00
Uwe Steinmann
0139beb33f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-11 19:54:38 +02:00
Uwe Steinmann
5843db1451 add converter from audio/mpeg in spectrum as png file 2023-10-11 13:41:36 +02:00
Uwe Steinmann
54baa86089 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-10-11 08:51:20 +02:00
Uwe Steinmann
73087455fc minor translation updates 2023-10-11 08:51:06 +02:00
Uwe Steinmann
8b950006f5 remove old output of missing functions and classes 2023-10-11 08:50:06 +02:00
Uwe Steinmann
da8e5a6eab Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-10-11 08:43:11 +02:00
Uwe Steinmann
4c266f79d7 new translations 2023-10-11 08:42:12 +02:00
Uwe Steinmann
b480439397 add security check, echo error for each missing function, class, php-ext 2023-10-11 08:38:33 +02:00
Uwe Steinmann
11301f1955 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-10-10 10:35:07 +02:00
Uwe Steinmann
bc70af210d add fulltext search for attribute=__any__ 2023-10-10 10:33:26 +02:00
Uwe Steinmann
749c40211d show week number in date selector 2023-09-29 14:34:42 +02:00
Uwe Steinmann
ca56d18b97 set propper class in folder row if class 'error' is passed 2023-09-29 14:34:18 +02:00
Uwe Steinmann
ede79bf40d only dates in the future can be selected, add help message for expiration date 2023-09-29 14:32:27 +02:00
Uwe Steinmann
520515303a show expiration date in options of preselected dates 2023-09-29 14:31:35 +02:00
Uwe Steinmann
2c01243ec5 use new function getTsByPeriod() 2023-09-29 14:30:20 +02:00
Uwe Steinmann
01fd55832f date format can be passed to getConvertDateFormat() 2023-09-29 14:29:44 +02:00
Uwe Steinmann
70a455c422 add new function getTsByPeriod() 2023-09-29 14:29:30 +02:00
Uwe Steinmann
d120b9eb7d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-27 13:03:54 +02:00
Uwe Steinmann
60410708de filter out documents on Dashboard which cannot be read 2023-09-27 13:02:41 +02:00
Uwe Steinmann
c721c05d6d do not show link to EditUserData if user may not edit himself 2023-09-27 12:48:13 +02:00
Uwe Steinmann
bd396e1c69 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-27 11:41:45 +02:00
Uwe Steinmann
d6568bf62e new version 5.1.33 2023-09-27 11:41:07 +02:00
Uwe Steinmann
b5dbadfb66 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-27 11:40:04 +02:00
Uwe Steinmann
2bc00fc575 add changes for 5.1.33 2023-09-27 11:32:07 +02:00
Uwe Steinmann
b8ded0fed7 set max-height of user image to 150px 2023-09-27 11:31:50 +02:00
Uwe Steinmann
2213ea7e29 handle extension conf parameters of type 'date' 2023-09-27 11:30:45 +02:00
Uwe Steinmann
929c93fdb9 do not scale user image if too small, allow images up to 300px height 2023-09-27 11:30:02 +02:00
Uwe Steinmann
4cb589b0ed check reques instead of query for param action 2023-09-27 11:29:14 +02:00
Uwe Steinmann
295c805a15 set maxsizeforfulltext 2023-09-27 11:28:54 +02:00
Uwe Steinmann
700add3b7f use SeedDMS_Core_File::mimetype() to determin mimetype 2023-09-27 11:28:39 +02:00
Uwe Steinmann
0e86608cbc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-18 13:37:40 +02:00
Uwe Steinmann
66f5efb487 set width of select box for undel user ids to 100% 2023-09-18 13:36:54 +02:00
Uwe Steinmann
4f00481f1e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-18 09:38:35 +02:00
Uwe Steinmann
82751c0b84 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-09-17 16:27:23 +02:00
Uwe Steinmann
8dce4215c8 various translation updates 2023-09-17 16:21:53 +02:00
Uwe Steinmann
7b805b62d3 show message below spinner when waiting for ajax request 2023-09-17 16:13:21 +02:00
Uwe Steinmann
fdc6c6a863 add Dashboard to legacy access rights 2023-09-17 16:12:45 +02:00
Uwe Steinmann
2b0d45c68c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-14 12:11:24 +02:00
Uwe Steinmann
3e47e80874 calc and diѕplay disc usage and number of files in cache 2023-09-14 12:10:34 +02:00
Uwe Steinmann
c2a4c76f3f use DIRECTORY_SEPARATOR when building path to cache dir 2023-09-14 12:10:12 +02:00
Uwe Steinmann
4d3fa42716 show number of files and size in cache 2023-09-14 10:27:47 +02:00
Uwe Steinmann
6ea76aa00e set width of table col to * instead of 100% 2023-09-12 21:09:24 +02:00
Uwe Steinmann
0638776bc5 show placeholder if set in task config 2023-09-12 21:09:17 +02:00
Uwe Steinmann
153796b82c add changes for 6.0.25 2023-09-12 12:49:56 +02:00
Uwe Steinmann
6b6410997f more condensed layout for better use on small devices 2023-09-12 12:44:21 +02:00
Uwe Steinmann
52fdbb8c16 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-12 10:15:30 +02:00
Uwe Steinmann
69786c4196 do not show facetted search if fulltext search is off 2023-09-12 10:14:54 +02:00
Uwe Steinmann
deb2aeea57 some minor code improvements, add help for folder selection 2023-09-12 09:40:23 +02:00
Uwe Steinmann
0bd625ca20 add help when selecting folder 2023-09-12 09:39:45 +02:00
Uwe Steinmann
0092f359bd declare $_params as class var 2023-09-12 09:38:15 +02:00
Uwe Steinmann
681ce9090f add class var $conversionmgr 2023-09-11 09:26:40 +02:00
Uwe Steinmann
fc8bef612e use logger in task to check checksum 2023-09-11 09:26:05 +02:00
Uwe Steinmann
5bb70b82aa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-07 15:51:36 +02:00
Uwe Steinmann
6c298030a5 add translation to js which will be needed for dropping a file on a document 2023-09-07 15:50:57 +02:00
Uwe Steinmann
9493d5e185 initial code to support dropping of files on a document 2023-09-07 15:50:33 +02:00
Uwe Steinmann
754a601e73 correct changes of 5.1.32 2023-09-06 20:49:00 +02:00
Uwe Steinmann
d61ed7f22e fix various drag&drop operations 2023-09-06 20:48:46 +02:00
Uwe Steinmann
2bb27b5b8e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-06 18:56:09 +02:00
Uwe Steinmann
f2a2e81e66 add changes for 5.1.32 2023-09-05 19:31:37 +02:00
Uwe Steinmann
dce2b753a8 more documentation 2023-09-05 19:30:56 +02:00
Uwe Steinmann
401cd7dd1c more documentation 2023-09-05 19:30:48 +02:00
Uwe Steinmann
a3c183c909 do not send mail to uploader if owner has received mail already 2023-09-05 19:30:18 +02:00
Uwe Steinmann
5fed617fc1 set name of attachment in params when deleting it 2023-09-05 19:29:47 +02:00
Uwe Steinmann
b3a288ec3d do not send mail to uploader if owner has received mail already 2023-09-05 19:28:53 +02:00
Uwe Steinmann
391c82af24 set __recvtype__ in params 2023-09-05 19:28:14 +02:00
Uwe Steinmann
4e6bc10273 fix drag&drop when adding new attachment 2023-09-05 19:27:15 +02:00
Uwe Steinmann
6c36dff064 log error when conversion fails 2023-09-01 12:10:27 +02:00
Uwe Steinmann
3c92ebd942 send notifications when adding and deleting access 2023-08-31 17:39:43 +02:00
Uwe Steinmann
23c73ed578 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-31 15:38:49 +02:00
Uwe Steinmann
a7d4b786a2 send notification when document access changes 2023-08-31 14:19:52 +02:00
Uwe Steinmann
b66f05142f distinguish between attribute value changed and new value 2023-08-31 08:19:07 +02:00
Uwe Steinmann
084cb44318 distinguish between attribute value changed and new value 2023-08-31 08:18:15 +02:00
Uwe Steinmann
e5390d0dbe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-30 19:39:28 +02:00
Uwe Steinmann
d6db2a8b28 fix minor formating issues in translations 2023-08-30 16:40:06 +02:00
Uwe Steinmann
464845205b pass showtree to view 2023-08-30 16:33:59 +02:00
Uwe Steinmann
a01b62a6d0 set folder_id in params for notification msg 2023-08-30 16:33:33 +02:00
Uwe Steinmann
7d575b2d11 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-30 15:54:00 +02:00
Uwe Steinmann
f7fc4c2923 lots of new phrases with notification messages 2023-08-30 15:53:35 +02:00
Uwe Steinmann
1271493d61 more changes for 5.1.32 2023-08-30 15:51:58 +02:00
Uwe Steinmann
5567b57853 fix checking upload error 2023-08-30 15:48:34 +02:00
Uwe Steinmann
b3b5d11642 fix typos in comments 2023-08-30 15:48:14 +02:00
Uwe Steinmann
6b888f4592 fix error when sending notification to group of reviewers 2023-08-30 15:47:42 +02:00
Uwe Steinmann
c16fa90241 split messages for folder and document 2023-08-30 15:47:15 +02:00
Uwe Steinmann
dfc5ea37d4 set document_id in params for notification message 2023-08-30 15:46:17 +02:00
Uwe Steinmann
4a1a3c6bfe fix typo in class var _dms 2023-08-28 12:09:33 +02:00
Uwe Steinmann
eb712f106f -trim_trailing_whitespaces must be -trim_trailing_whitespace 2023-08-25 21:06:09 +02:00
Uwe Steinmann
9f23cc37d7 -trim_trailing_whitespaces must be -trim_trailing_whitespace 2023-08-25 21:05:27 +02:00
Uwe Steinmann
c3094ce87f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-25 20:18:48 +02:00
Uwe Steinmann
c10d5ebb9b do not use a general dn for a user if ldap filter is set 2023-08-25 20:17:47 +02:00
Uwe Steinmann
83923eba59 fix some errors 2023-08-25 20:17:21 +02:00
Uwe Steinmann
d1a00f5c62 take over groups from ldap 2023-08-25 20:16:40 +02:00
Uwe Steinmann
ef42fcac07 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-25 12:43:56 +02:00
Uwe Steinmann
5390668066 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-08-25 12:43:43 +02:00
Uwe Steinmann
04c3d7cd3d Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-08-25 12:43:30 +02:00
Uwe Steinmann
32bfeb0a4e various language updates 2023-08-25 12:43:18 +02:00
Uwe Steinmann
0c99740d25 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-25 12:37:36 +02:00
Uwe Steinmann
95372d6905 add option to disable setting a password 2023-08-25 12:34:09 +02:00
Uwe Steinmann
c51088a3b6 add more code documentation 2023-08-25 12:33:35 +02:00
Uwe Steinmann
8ac054cb72 add documentation for authenticate() 2023-08-25 12:33:08 +02:00
Uwe Steinmann
d602484f4b add new fields 2023-08-25 12:32:49 +02:00
Uwe Steinmann
1d74863f81 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-24 13:22:49 +02:00
Uwe Steinmann
13bb99f729 add comment of newly created user 2023-08-24 13:22:19 +02:00
Uwe Steinmann
c117b9a590 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-24 13:14:21 +02:00
Uwe Steinmann
87f3406bbf check if bindDN is not empty, more documentation 2023-08-24 13:13:11 +02:00
Uwe Steinmann
b8c59fd264 do not set role when adding new user because the default is just fine 2023-08-24 13:12:09 +02:00
Uwe Steinmann
23b8e48831 add definitions of class variables 2023-08-24 08:11:24 +02:00
Uwe Steinmann
b5768e8dd9 add class variabels $nonces and $footerjs 2023-08-23 11:32:24 +02:00
Uwe Steinmann
1265f6e469 declare _usersConnectors as class var 2023-08-22 14:44:11 +02:00
Uwe Steinmann
5bd8111f41 declare previewer as class var 2023-08-22 14:43:41 +02:00
Uwe Steinmann
66214aff2f declare proxyurl, proxyuser, proxypass as class vars 2023-08-22 14:43:15 +02:00
Uwe Steinmann
52b43ba8c6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-22 11:24:34 +02:00
Uwe Steinmann
f34bd41ec5 use php7.4 for phing 2023-08-22 11:24:14 +02:00
Uwe Steinmann
d2cc7d083e fix typo in var name, which cause a warning in php 8.2 2023-08-22 11:23:32 +02:00
Uwe Steinmann
0f46a7cd6a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-18 08:01:50 +02:00
Uwe Steinmann
0eeb8be393 change example for content of memberOf 2023-08-18 08:01:21 +02:00
Uwe Steinmann
5f00ebd852 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-18 08:00:12 +02:00
Uwe Steinmann
a283cc5ead check if DOCUMENT_ROOT is set propperly 2023-08-18 06:38:25 +02:00
Uwe Steinmann
5a0410f68e check for sync of groups from ldap 2023-08-17 13:51:02 +02:00
Uwe Steinmann
5de8c66d1f move code to update/add user into protected function 2023-08-16 18:45:20 +02:00
Uwe Steinmann
7b8f3ef0bb some reorganization of code 2023-08-16 17:40:14 +02:00
Uwe Steinmann
918af9b2e3 add head line in plain/text mail 2023-08-16 17:39:37 +02:00
Uwe Steinmann
bd9c9e8e3b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-15 08:07:26 +02:00
Uwe Steinmann
eae779832f better names for totp 2023-08-15 08:06:46 +02:00
Uwe Steinmann
54bdbfdc56 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-07-20 11:21:09 +02:00
Uwe Steinmann
a2ceed6f87 do not set httpbasedir if ext/xxx/out/out.xxx.php does not exist 2023-07-20 11:20:56 +02:00
Uwe Steinmann
d92acf86a9 status log can be turned on with advanced access control 2023-07-19 06:43:47 +02:00
Uwe Steinmann
7c0634f272 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-07-17 14:56:07 +02:00
Uwe Steinmann
b63dc11a29 check for view in current view and default bootstrap view 2023-07-17 14:55:54 +02:00
Uwe Steinmann
0e66c6457a pass document to mayReview and mayApprove 2023-06-19 20:57:52 +02:00
Uwe Steinmann
77474bdaee document must be readable to be reviewed or approved 2023-06-19 17:31:08 +02:00
Uwe Steinmann
039473d905 remove old code, sync with 6.0.x 2023-06-19 17:20:45 +02:00
Uwe Steinmann
64a7d341eb remove second sending of emails 2023-06-19 17:06:26 +02:00
Uwe Steinmann
0fd0293f35 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-06-19 16:51:15 +02:00
Uwe Steinmann
7fa51000d5 add changes for 5.1.32 2023-06-19 15:39:46 +02:00
Uwe Steinmann
e735972c70 move comment at right position 2023-06-19 08:55:57 +02:00
Uwe Steinmann
75d74cad69 more readable code 2023-06-18 13:59:58 +02:00
Uwe Steinmann
b7d029475d move most of the code in op/* into new controller 2023-06-18 13:59:23 +02:00
Uwe Steinmann
0be0f90881 move display of form into own function 2023-06-18 13:58:14 +02:00
Uwe Steinmann
42d7d7c096 add changes for 5.1.32 2023-06-13 15:28:40 +02:00
Uwe Steinmann
d868438af9 initial support to upload folders by drag and drop 2023-06-13 15:28:18 +02:00
Uwe Steinmann
26553cf69d show errors of none activated extensions 2023-06-13 07:14:30 +02:00
Uwe Steinmann
63cc8cca52 make some function parameters required as they are implicit required anyway 2023-06-02 18:43:39 +02:00
Uwe Steinmann
07ba52da63 make first 3 parameters of html_link() required, because 4th parameter is also required 2023-06-02 18:10:39 +02:00
Uwe Steinmann
18215ebf7f fix php warning 2023-05-28 11:08:46 +02:00
Uwe Steinmann
630b7b33d0 minor fixes 2023-05-24 09:49:39 +02:00
Uwe Steinmann
0328121063 make form as wide as login form 2023-05-22 16:21:31 +02:00
Uwe Steinmann
6ba69e0dca set width of login_wrapper to 460px 2023-05-22 16:21:13 +02:00
Uwe Steinmann
61712715e0 add changes of 5.1.32 2023-05-22 10:43:44 +02:00
Uwe Steinmann
1b45b1c1eb better logging 2023-05-22 10:43:10 +02:00
Uwe Steinmann
48c3505c73 update on how to use gmail 2023-05-22 10:42:12 +02:00
Uwe Steinmann
0affcd93e7 execWithTimeout() fails if cmd returns something in stderr 2023-05-15 08:11:14 +02:00
Uwe Steinmann
5a96788ccc number of days to look back on dashboard can be configured 2023-05-13 12:07:47 +02:00
Uwe Steinmann
24c918e698 run verifyLastestContentExpriry() on document 2023-05-12 10:12:47 +02:00
Uwe Steinmann
3df06b4471 showActions() sets title of items if given 2023-05-12 09:09:01 +02:00
Uwe Steinmann
5bd93d4efe use httpRoot to create absolute links instead of relative links 2023-05-11 17:33:09 +02:00
Uwe Steinmann
403d391d72 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-11 17:30:29 +02:00
Uwe Steinmann
9fdb5c5e15 use httpRoot to create absolute links instead of using relative links 2023-05-11 17:29:58 +02:00
Uwe Steinmann
076e5bc5c2 fix layout of input field for 2nd factore, not need to include 2-factor lib 2023-05-11 17:26:55 +02:00
Uwe Steinmann
2ccbe2b9c7 use httpRoot for absolute links instead of relative links 2023-05-11 17:26:15 +02:00
Uwe Steinmann
24c6cbb5f7 add changes for 5.1.32 2023-05-11 16:59:59 +02:00
Uwe Steinmann
7a56c45db4 better checking of error msg after upload new document 2023-05-11 16:59:18 +02:00
Uwe Steinmann
7fc1a88e95 better eval of error msg after updating or adding a document 2023-05-11 16:58:08 +02:00
Uwe Steinmann
b42be5971a check if $document->getTimeline() returns data 2023-05-11 16:57:24 +02:00
Uwe Steinmann
d9f25b5a3a get error msg from controller just like AddDocument 2023-05-09 11:46:19 +02:00
Uwe Steinmann
eebe9d48d3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-09 08:48:00 +02:00
Uwe Steinmann
f3e4182c57 makes no sense to set cachedir 2023-05-09 08:47:40 +02:00
Uwe Steinmann
c865927fe4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-09 08:46:18 +02:00
Uwe Steinmann
1c5139a00a set cache dir 2023-05-09 08:46:00 +02:00
Uwe Steinmann
d4add8b343 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-08 18:00:20 +02:00
Uwe Steinmann
0c06df2d78 call hook postLoginForm 2023-05-08 17:59:54 +02:00
Uwe Steinmann
bad3799d62 make _finalize because it might be called from extensions 2023-05-08 17:59:31 +02:00
Uwe Steinmann
23568c0a6a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-06 07:19:29 +02:00
Uwe Steinmann
cf75d8a7cc move much of code after success full auth in __finalize() 2023-05-06 07:18:51 +02:00
Uwe Steinmann
40f86da41d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-05 06:43:48 +02:00
Uwe Steinmann
24595a234d Merge branch 'master' of ssh://git.code.sf.net/p/seeddms/code 2023-05-04 14:29:51 +02:00
Uwe Steinmann
e5c81e6e83 start new version 5.1.32 2023-05-04 14:25:04 +02:00
Uwe Steinmann
199fd57151 Merge branch 'seeddms-6.0.x' 2023-05-04 14:24:04 +02:00
Uwe Steinmann
1103324e89 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-04 14:17:27 +02:00
Uwe Steinmann
fbdbc4e174 complete fulltext search with filter for modification date 2023-05-04 08:56:50 +02:00
Uwe Steinmann
bb2ccf05a0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-03 18:30:03 +02:00
Uwe Steinmann
a4a6671867 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-05-03 18:26:34 +02:00
Uwe Steinmann
8e06c66c57 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-05-03 18:26:19 +02:00
Uwe Steinmann
f82191f20b add missing phrases 2023-05-03 18:25:59 +02:00
Uwe Steinmann
626a325df7 add database search by modification date 2023-05-03 18:24:09 +02:00
Uwe Steinmann
c8d6eafc71 allow sorting of fulltext search 2023-05-03 17:38:01 +02:00
Uwe Steinmann
244066d34d default public status of attachments can be configured 2023-05-03 16:24:33 +02:00
Uwe Steinmann
14afb5f1b7 add more changes for 5.1.31 2023-05-03 16:23:37 +02:00
Uwe Steinmann
97a3da352f propperly handle modification date 2023-05-03 16:23:11 +02:00
Uwe Steinmann
3739f9e658 pass modification date to search() functions 2023-05-03 16:21:57 +02:00
Uwe Steinmann
b6dce79936 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-02 17:10:33 +02:00
Uwe Steinmann
b3e50278b1 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-05-02 17:10:21 +02:00
Uwe Steinmann
0ce08474dd Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-05-02 17:10:04 +02:00
Uwe Steinmann
6ba018eabb add missing phrases 2023-05-02 17:09:48 +02:00
Uwe Steinmann
ed695a6e49 add Dashboard to menu 2023-05-02 17:08:52 +02:00
Uwe Steinmann
8b7eae47d3 check if attributes in url are set 2023-05-02 15:57:13 +02:00
Uwe Steinmann
424d279c7f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-30 07:24:34 +02:00
Uwe Steinmann
d48ece4a43 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-04-30 07:17:30 +02:00
Uwe Steinmann
a69380ebbb Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-04-30 07:17:15 +02:00
Uwe Steinmann
362839365b add some new translations 2023-04-30 07:17:04 +02:00
Uwe Steinmann
4b4b7c1330 allow to search for unset dates 2023-04-29 15:10:28 +02:00
Uwe Steinmann
8c4564bf23 use translated strings 2023-04-29 15:10:05 +02:00
Uwe Steinmann
f1763c3930 add hidden input field for 'not set' attribute value 2023-04-29 15:09:20 +02:00
Uwe Steinmann
6178252e56 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-28 18:43:27 +02:00
Uwe Steinmann
921eab9e54 add more hooks for reindexing documents/folders 2023-04-28 18:39:53 +02:00
Uwe Steinmann
3dfcb8d581 do not reindex document imediately 2023-04-28 18:39:20 +02:00
Uwe Steinmann
adfa9c442f fix setting comment in notificatoin mail 2023-04-28 18:38:48 +02:00
Uwe Steinmann
1e699147ff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-28 17:13:50 +02:00
Uwe Steinmann
b6e6b66125 search for objects with an attribute not set 2023-04-28 17:13:16 +02:00
Uwe Steinmann
fa19503ab2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-28 12:15:37 +02:00
Uwe Steinmann
693a68261b remove min-height of search form 2023-04-28 12:11:09 +02:00
Uwe Steinmann
7610eacf1f call hook checkConfig() which outputs messages in the right column 2023-04-28 11:23:01 +02:00
Uwe Steinmann
96423e1388 fix output of markdown, because accessing settings was wrong 2023-04-28 11:22:14 +02:00
Uwe Steinmann
78515e93b4 pass new parameter to getDateChooser() 2023-04-28 11:21:59 +02:00
Uwe Steinmann
9c82ba9e3a placeholder can be passed to date chooser 2023-04-28 11:20:24 +02:00
Uwe Steinmann
febccfc604 switching between search tabs will no longer loose values 2023-04-26 17:35:59 +02:00
Uwe Steinmann
96a0091002 allow to set creation date in full search with facets 2023-04-26 08:42:50 +02:00
Uwe Steinmann
3f699ebe62 no border radius for date selector and select2 2023-04-26 08:41:39 +02:00
Uwe Steinmann
6e1ce682f2 do not show new search tab for lucene based search 2023-04-26 06:44:59 +02:00
Uwe Steinmann
03aa307fa3 add changes of 5.1.31 2023-04-26 06:21:01 +02:00
Uwe Steinmann
497d1e1ca3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-25 17:11:27 +02:00
Uwe Steinmann
1a8a614359 show preview of document next to form for attributes 2023-04-25 17:10:58 +02:00
Uwe Steinmann
775a785525 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-25 14:18:59 +02:00
Uwe Steinmann
e5b60df503 output date chooser without surrounding group 2023-04-25 13:24:16 +02:00
Uwe Steinmann
cef0c78ea3 add parameter $nogroup to getDateChooser() 2023-04-25 13:23:43 +02:00
Uwe Steinmann
f97124d694 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-25 13:05:15 +02:00
Uwe Steinmann
19144f3c73 better handling of date attributes 2023-04-25 12:29:40 +02:00
Uwe Steinmann
e3ce931cbd turn attributes of type date into timestamps before searching 2023-04-25 12:28:05 +02:00
Uwe Steinmann
d69921c709 echo error message in debug mode 2023-04-25 12:27:27 +02:00
Uwe Steinmann
d7eeacdc74 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-24 17:07:17 +02:00
Uwe Steinmann
798a52ed37 make set button for ranges 'primary' 2023-04-24 16:58:48 +02:00
Uwe Steinmann
b7c9ecf162 fix nesting of containers 2023-04-24 16:58:30 +02:00
Uwe Steinmann
f42d4d38b1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-24 07:31:56 +02:00
Uwe Steinmann
a9f88c7191 add search for integer ranges 2023-04-24 07:31:20 +02:00
Uwe Steinmann
fab8276b0d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-23 19:15:48 +02:00
Uwe Steinmann
2e6fe1b868 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-04-23 19:15:35 +02:00
Uwe Steinmann
841d3709c1 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-04-23 19:15:24 +02:00
Uwe Steinmann
ce7cf33514 update translation 2023-04-23 19:15:09 +02:00
Uwe Steinmann
94ab8e9a21 use translated string 2023-04-23 19:14:15 +02:00
Uwe Steinmann
337c0ed41f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-23 19:11:08 +02:00
Uwe Steinmann
ebf4f5a829 showNavigationListWithBadges() skips badge if not set, fix creating link 2023-04-23 19:06:54 +02:00
Uwe Steinmann
7172aad62b add new search tag with facetted full text search 2023-04-23 19:03:51 +02:00
Uwe Steinmann
36a51e9606 check if 'facetsearch' is set 2023-04-23 19:02:57 +02:00
Uwe Steinmann
c9b31d8de9 only last token of query will be used for getting terms 2023-04-23 19:02:42 +02:00
Uwe Steinmann
0475bd57cb passed owners can be a list of strings 2023-04-23 19:01:43 +02:00
Uwe Steinmann
923e235b9a pass categories can be a list of strings 2023-04-23 19:01:08 +02:00
Uwe Steinmann
efa587493e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-22 19:42:21 +02:00
Uwe Steinmann
28174e3a33 run comment through htmlspecialchars() if markdown parsing is enabled 2023-04-22 19:41:41 +02:00
Uwe Steinmann
511492fb5c do not suggest terms if query is empty 2023-04-22 19:41:15 +02:00
Uwe Steinmann
d3ddc38c7f take out 'category' from suggestTerms 2023-04-22 19:40:41 +02:00
Uwe Steinmann
5112b1614c set more options for suggestTerms 2023-04-21 19:06:24 +02:00
Uwe Steinmann
5f0484c4cb set convertToPdf for view 2023-04-21 19:05:54 +02:00
Uwe Steinmann
fde112e2d9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-21 18:01:53 +02:00
Uwe Steinmann
8ae0bc09c4 search for creation date in fulltext 2023-04-21 17:55:56 +02:00
Uwe Steinmann
a1520299a2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-21 16:53:20 +02:00
Uwe Steinmann
3cfcfaa558 typeahead will also show the column where the search terms comes from 2023-04-21 16:52:07 +02:00
Uwe Steinmann
89e930ba00 add search terms to typeahead if configured 2023-04-21 13:03:08 +02:00
Uwe Steinmann
66ecc57780 add new config var suggestTerms 2023-04-21 13:02:42 +02:00
Uwe Steinmann
3d4a63f335 indent typeahead() 2023-04-21 13:00:31 +02:00
Uwe Steinmann
d778006170 use conversion mgr in show() 2023-04-21 13:00:05 +02:00
Uwe Steinmann
de53c5159c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-20 13:30:03 +02:00
Uwe Steinmann
ec55cc3f28 do not add '*' to typeahead query anymore 2023-04-20 13:28:57 +02:00
Uwe Steinmann
ff64e76213 add access checks for all tabs 2023-04-20 13:28:03 +02:00
Uwe Steinmann
c4c36735b6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-19 15:05:41 +02:00
Uwe Steinmann
69cff4e9b4 fix handling of floats in getAttributeEditField 2023-04-19 15:05:29 +02:00
Uwe Steinmann
80ecac5710 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-19 14:00:41 +02:00
Uwe Steinmann
874aecb4bb search form shows 'from' and 'to' field for integers and floats 2023-04-19 13:59:01 +02:00
Uwe Steinmann
5ca2bf9fe0 check for openssl and openssl_cipher_iv_length 2023-04-19 06:41:52 +02:00
Uwe Steinmann
eb2296f814 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-18 20:13:45 +02:00
Uwe Steinmann
ff78380f4b add changes for 5.1.31 2023-04-18 20:09:45 +02:00
Uwe Steinmann
a43a09a0e2 use openssl to encrypt and decrypt data with key 2023-04-18 20:09:03 +02:00
Uwe Steinmann
63ee505c0f use openssl to create encryption key 2023-04-18 20:08:44 +02:00
Uwe Steinmann
2d9297c668 handle unknown objtype in getAttributeObjectTypeText() 2023-04-18 12:50:53 +02:00
Uwe Steinmann
7fcb8da860 do not include inc/inc.ClassNotificationService.php and inc.ClassEmailNotify.php 2023-04-18 12:48:20 +02:00
Uwe Steinmann
9bde72fe20 add change for 5.1.31 2023-04-18 10:00:29 +02:00
Uwe Steinmann
300bcb2514 remove change which was done in 5.1.31 2023-04-18 10:00:00 +02:00
Uwe Steinmann
e6312db48f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-18 09:59:42 +02:00
Uwe Steinmann
4ffb8da5b2 no php error anymore 2023-04-18 09:59:18 +02:00
Uwe Steinmann
ca706753bc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-18 09:41:54 +02:00
Uwe Steinmann
048c56f3a3 add changes of 6.0.24 2023-04-18 09:41:38 +02:00
Uwe Steinmann
55c7a32a05 fix some old php spreadsheet consts 2023-04-18 09:40:50 +02:00
Uwe Steinmann
ec7b24c044 fix setting html language 2023-04-17 22:10:18 +02:00
Uwe Steinmann
e14bfd9326 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-15 13:24:38 +02:00
Uwe Steinmann
5a7f8655d8 check if adding to document to index succeeded 2023-04-15 13:24:12 +02:00
Uwe Steinmann
337f9f2ce4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-14 12:48:24 +02:00
Uwe Steinmann
140b6de1a6 turn cache in SeedDMS_Core_DMS on 2023-04-14 12:47:57 +02:00
Uwe Steinmann
6e489dc80a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-13 15:05:11 +02:00
Uwe Steinmann
53d7ab063d fix preview for files in dropfolder 2023-04-13 12:56:59 +02:00
Uwe Steinmann
eb51882726 add converters for image/svg+xml 2023-04-13 10:01:18 +02:00
Uwe Steinmann
32c93f5494 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-13 09:16:37 +02:00
Uwe Steinmann
a067cc9949 add method getFromWithTo() 2023-04-13 09:05:03 +02:00
Uwe Steinmann
3fce0d58b6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-12 16:35:04 +02:00
Uwe Steinmann
762ccbb373 fix wrong variable name 2023-04-12 16:34:01 +02:00
Uwe Steinmann
e51e7cd758 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-11 19:27:07 +02:00
Uwe Steinmann
62d5328b48 use version 2.1.14 of composer 2023-04-11 19:26:54 +02:00
Uwe Steinmann
835b330331 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-11 12:38:03 +02:00
Uwe Steinmann
1bc2ff764e add missing shell script 2023-04-11 12:37:27 +02:00
Uwe Steinmann
a25de1eea5 fix some old entries 2023-04-11 12:35:30 +02:00
Uwe Steinmann
752653a2b3 add link to document in recent changes and expired documents 2023-04-06 18:54:08 +02:00
Uwe Steinmann
e3cc28916d change description of parameter 'lists' 2023-04-06 14:36:22 +02:00
Uwe Steinmann
6211ab6b32 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-06 14:35:13 +02:00
Uwe Steinmann
79b7315c85 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-04-06 14:35:00 +02:00
Uwe Steinmann
86520b35b8 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-04-06 14:34:49 +02:00
Uwe Steinmann
ad1d723650 new translations 2023-04-06 14:34:27 +02:00
Uwe Steinmann
00f7a0ee35 some code cleanups 2023-04-06 14:30:46 +02:00
Uwe Steinmann
f63f7847f0 lists of recent changes can be configured 2023-04-06 14:30:20 +02:00
Uwe Steinmann
3bef98756a fix call of SeedDMS_AccessOperation() 2023-04-06 12:21:24 +02:00
Uwe Steinmann
626e521bc7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-06 12:20:02 +02:00
Uwe Steinmann
f21dfb009e Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-04-06 12:19:22 +02:00
Uwe Steinmann
29da8d575c Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-04-06 12:19:06 +02:00
Uwe Steinmann
71701d324f new translations 2023-04-06 12:18:55 +02:00
Uwe Steinmann
e8fcf01ad4 parameter to getLatestChanges() has changed 2023-04-06 12:18:10 +02:00
Uwe Steinmann
e88321c577 add changes for 6.0.24 2023-04-06 12:14:13 +02:00
Uwe Steinmann
c44aaae446 show parameters of task if they are an array 2023-04-06 12:13:47 +02:00
Uwe Steinmann
b71467b8c8 add task to send list of recent changes by email 2023-04-06 12:13:36 +02:00
Uwe Steinmann
d612220ad5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-06 08:02:49 +02:00
Uwe Steinmann
7c836e0d41 add Dashboard 2023-04-06 08:02:21 +02:00
Uwe Steinmann
2b2d9ef7de Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-05 14:55:40 +02:00
Uwe Steinmann
a557e98927 show access rights only if unlimited access 2023-04-05 14:55:28 +02:00
Uwe Steinmann
f4097c6831 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-05 13:47:14 +02:00
Uwe Steinmann
15cfd20ed2 do not set sitename to 'SeedDMS' by default anymore 2023-04-05 13:46:40 +02:00
Uwe Steinmann
9092eeb0a3 comment of document, documentcontent and folder can be rendered as markdown 2023-04-04 17:46:08 +02:00
Uwe Steinmann
1f92a47c30 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-04 12:33:03 +02:00
Uwe Steinmann
d4fbae1a4c new version 5.1.31 2023-04-04 12:31:52 +02:00
Uwe Steinmann
99fe2244fb return message and not just status 2023-04-04 12:31:20 +02:00
Uwe Steinmann
ac3c62355f start new version 5.1.31 2023-04-04 12:31:09 +02:00
Uwe Steinmann
10a3aaf212 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-03 16:29:07 +02:00
Uwe Steinmann
33249dea35 set platform to php 7.4 2023-04-03 16:28:39 +02:00
Uwe Steinmann
c83bcf9877 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-03 15:51:05 +02:00
Uwe Steinmann
d0c5905c0e check for access rights of documents 2023-04-03 15:50:40 +02:00
Uwe Steinmann
8776173ec9 set propper html language 2023-04-03 12:26:04 +02:00
Uwe Steinmann
c04eb28ac1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-03 12:13:58 +02:00
Uwe Steinmann
277c968bb0 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-04-03 12:04:19 +02:00
Uwe Steinmann
af062ad745 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-04-03 12:04:06 +02:00
Uwe Steinmann
8b087325a3 add phrases for directory check 2023-04-03 12:03:55 +02:00
Uwe Steinmann
3a8b897d61 more consice layout, add test for directories on disc 2023-04-03 12:02:21 +02:00
Uwe Steinmann
173ecb00b3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-31 12:01:56 +02:00
Uwe Steinmann
7790f483f0 no need to create notification service a second time 2023-03-31 12:00:56 +02:00
Uwe Steinmann
3fb9d140fa fix translations for recipients 2023-03-30 12:33:46 +02:00
Uwe Steinmann
cb808e0e66 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-30 12:28:54 +02:00
Uwe Steinmann
23a94f8ac8 put reviewer and approver into own content container 2023-03-30 12:26:35 +02:00
Uwe Steinmann
8609fdee74 do not show warning that document is released if initial status is draft 2023-03-30 12:02:31 +02:00
Uwe Steinmann
dc642fa898 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-29 20:59:06 +02:00
Uwe Steinmann
476c726a45 improve password expiration 2023-03-29 20:57:48 +02:00
Uwe Steinmann
7fb0acb562 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-29 20:50:19 +02:00
Uwe Steinmann
382e78855d do not force password change if in substitute user mode 2023-03-29 20:48:07 +02:00
Uwe Steinmann
0280a8adc0 show current password expiration 2023-03-29 20:38:48 +02:00
Uwe Steinmann
7c292986f5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-29 09:04:29 +02:00
Uwe Steinmann
a13e1121e3 no need to include vendor/autoload.php. It's done in inc.Settings.php 2023-03-29 09:03:58 +02:00
Uwe Steinmann
b25776eaad complete changes of 6.0.23 2023-03-27 14:30:56 +02:00
Uwe Steinmann
d8e38c2825 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-24 16:33:45 +01:00
Uwe Steinmann
ed27dbcf4b add open office formats to get_extension 2023-03-24 16:33:17 +01:00
Uwe Steinmann
668ee243b2 actually send mail 2023-03-24 15:37:29 +01:00
Uwe Steinmann
9616a540c2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-24 11:19:34 +01:00
Uwe Steinmann
5e591f3a75 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-03-24 11:19:20 +01:00
Uwe Steinmann
553882fd50 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-03-24 11:19:09 +01:00
Uwe Steinmann
8628e5b02c add new phrases 2023-03-24 11:18:59 +01:00
Uwe Steinmann
f4ee945ab1 add new task for sending statistics 2023-03-24 11:17:32 +01:00
Uwe Steinmann
057abec09c fix sending calendar events 2023-03-24 11:17:16 +01:00
Uwe Steinmann
8218b752f5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-21 11:25:28 +01:00
Uwe Steinmann
882b87c885 check if logger is set before using it 2023-03-21 11:25:08 +01:00
Uwe Steinmann
b7b9acbe7e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-19 09:17:54 +01:00
Uwe Steinmann
197a6e8824 set various callbacks to reindex document when it has changed 2023-03-19 09:17:08 +01:00
Uwe Steinmann
ae0c641865 add note for pdftotext 2023-03-19 09:16:49 +01:00
Uwe Steinmann
db5b242cbc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-15 11:13:46 +01:00
Uwe Steinmann
782e4c2044 include Log.php early and use require_once 2023-03-15 11:13:14 +01:00
Uwe Steinmann
c383ca0625 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-15 11:09:18 +01:00
Uwe Steinmann
1bad1d2aa5 use require_once instead of include("Log.php") 2023-03-15 11:08:51 +01:00
Uwe Steinmann
f1211f6c80 init options to empty array for list of users 2023-03-14 12:09:45 +01:00
Uwe Steinmann
33fe05fc6e fix unique id of folder chooser 2023-03-14 12:09:33 +01:00
Uwe Steinmann
1c5977fca5 add missing config types when showing the empty form 2023-03-14 12:09:01 +01:00
Uwe Steinmann
5ae461a157 add changes for 6.0.23 2023-03-13 13:01:54 +01:00
Uwe Steinmann
836a2b50a1 confirm checkbox is required 2023-03-13 13:00:39 +01:00
Uwe Steinmann
2b900b5e06 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-13 10:26:51 +01:00
Uwe Steinmann
c099903f12 fix html error in menu item if attributes are passed 2023-03-13 10:26:22 +01:00
Uwe Steinmann
ab72673379 do not show menu item if document may not be checked in 2023-03-13 10:24:53 +01:00
Uwe Steinmann
a7579f47ae show message if document may not be checked in 2023-03-13 10:23:36 +01:00
Uwe Steinmann
67d6191024 echo splash msg 2023-03-13 10:22:54 +01:00
Uwe Steinmann
00fe788571 check if document may be checked in 2023-03-13 10:22:30 +01:00
Uwe Steinmann
7ae5749bcf add new method mayCheckIn() 2023-03-13 10:18:14 +01:00
Uwe Steinmann
fe0fd30971 add fold marks 2023-03-12 09:18:30 +01:00
Uwe Steinmann
d127b137ba create missing preview files 2023-03-11 22:49:41 +01:00
Uwe Steinmann
658351a4d3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-11 21:14:55 +01:00
Uwe Steinmann
37f64d0a3e add menu item for adding folder/document to clipboard 2023-03-11 20:54:42 +01:00
Uwe Steinmann
20686bccbd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-11 18:59:32 +01:00
Uwe Steinmann
da992a7bdd create 8-bit png instead of 16-bit 2023-03-11 18:59:02 +01:00
Uwe Steinmann
63adb75fbc fix regression when setting review by individual 2023-03-11 18:57:17 +01:00
Uwe Steinmann
3f6719e7aa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-10 17:59:54 +01:00
Uwe Steinmann
2e818d5426 add changes for 5.1.30 2023-03-10 17:59:32 +01:00
Uwe Steinmann
2c5f661108 support README of extension in different languages 2023-03-10 17:58:27 +01:00
Uwe Steinmann
5d2ace6a14 take over attribute validation from op.UpdateDocument.php 2023-03-09 08:10:12 +01:00
Uwe Steinmann
742929002b show number of occurances in subtitle of options 2023-03-06 10:03:28 +01:00
Uwe Steinmann
0e712c1554 empty password in csv file will not override an existing password 2023-03-04 10:09:05 +01:00
Uwe Steinmann
359cdedfdb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-04 09:05:08 +01:00
Uwe Steinmann
9e36d82873 initial support for attributes in full text search 2023-03-04 09:04:58 +01:00
Uwe Steinmann
102a5603c0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-03 16:14:31 +01:00
Uwe Steinmann
39026ef4a8 new algo for contrast color based on lightness 2023-03-03 16:14:01 +01:00
Uwe Steinmann
97778d3e2b use two column layout (left for check in, right for cancel checkout) 2023-03-02 09:55:08 +01:00
Uwe Steinmann
8bfe9e92db Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-01 12:18:11 +01:00
Uwe Steinmann
198dc8c730 use propper language names 2023-03-01 12:16:41 +01:00
Uwe Steinmann
61b7620ab0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-28 14:21:46 +01:00
Uwe Steinmann
05b95bd0ed note about required ffmpeg 2023-02-28 13:10:16 +01:00
Uwe Steinmann
3d170ad18c add converter to png for videos 2023-02-28 13:09:33 +01:00
Uwe Steinmann
258914e884 override action to 'show' when showing error msg 2023-02-28 12:54:56 +01:00
Uwe Steinmann
13a0646698 formField() evals allow_empty 2023-02-28 11:31:31 +01:00
Uwe Steinmann
737e69876d fix nasty php error 2023-02-28 10:44:25 +01:00
Uwe Steinmann
245092bb10 fix get smtp parameters 2023-02-27 19:36:14 +01:00
Uwe Steinmann
df6a2e79bc adjust call of getDocumentChooserHtml() for 6.0.x 2023-02-24 14:20:33 +01:00
Uwe Steinmann
bc4362c196 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-24 13:27:09 +01:00
Uwe Steinmann
4bfdc9cbf5 add selection of document in extension configuration 2023-02-24 13:26:40 +01:00
Uwe Steinmann
e88aa870db Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-23 08:24:49 +01:00
Uwe Steinmann
b496f02c2c Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-02-23 08:24:34 +01:00
Uwe Steinmann
394e7c8d5e Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-02-23 08:24:20 +01:00
Uwe Steinmann
04210265c0 add translations for conversion services 2023-02-23 08:24:11 +01:00
Uwe Steinmann
4c3218bc0f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-23 07:18:42 +01:00
Uwe Steinmann
e2d94d2e56 depth is now one less then before 2023-02-23 07:18:14 +01:00
Uwe Steinmann
d8f79b846e pass correct depth in callback of SeedDMS_FolderTree 2023-02-23 07:17:17 +01:00
Uwe Steinmann
b5be1c8490 add changes for 5.1.30 2023-02-22 10:33:31 +01:00
Uwe Steinmann
352446e9d8 create missing preview images in category or attribute manager 2023-02-22 10:33:06 +01:00
Uwe Steinmann
cb1cb46cfe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-22 10:11:37 +01:00
Uwe Steinmann
6301e9228e add changes for 5.1.30 2023-02-22 10:02:31 +01:00
Uwe Steinmann
ac3580aa1c color category batch 2023-02-22 10:01:06 +01:00
Uwe Steinmann
05c0f296fc place button with color of category in front of title in select menu 2023-02-22 10:00:31 +01:00
Uwe Steinmann
9e6e13a041 add method getContrastColor() 2023-02-22 09:59:45 +01:00
Uwe Steinmann
1463f00faf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-22 09:18:04 +01:00
Uwe Steinmann
e21e301ea3 use chosen select for custom attributes 2023-02-22 08:30:34 +01:00
Uwe Steinmann
0ffc8c78f7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-21 14:21:13 +01:00
Uwe Steinmann
a7b00ae22a add new key 'attrcallback' to configuration of fulltext engine 2023-02-20 16:07:22 +01:00
Uwe Steinmann
44d043ef21 add fold marks 2023-02-20 16:06:43 +01:00
Uwe Steinmann
2ffe130666 set theme to bootstrap4, fulltext engine to sqlitefts, turn on theme selector 2023-02-20 16:05:55 +01:00
Uwe Steinmann
535de29e7d check return value of postInitDMS 2023-02-18 15:49:55 +01:00
Uwe Steinmann
dc868bd83b getBaseUrl() checks for HTTP_X_FORWARDED_HOST and HTTP_X_FORWARDED_PROTO 2023-02-18 15:49:04 +01:00
Uwe Steinmann
4e08744631 addDirSep() can check for arbitrary chars at end of string 2023-02-17 16:10:59 +01:00
Uwe Steinmann
bea6ab35a8 add changes in 5.1.30 2023-02-17 12:42:05 +01:00
Uwe Steinmann
3e5497a7fd add more error checking when including extensions.php 2023-02-17 06:57:42 +01:00
Uwe Steinmann
513343c89a add changes for 6.0.23 2023-02-16 17:29:29 +01:00
Uwe Steinmann
0b7d3cad2d add changes for 6.0.23 2023-02-16 17:28:37 +01:00
Uwe Steinmann
9c8c9616d5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-16 11:36:18 +01:00
Uwe Steinmann
bcd0977803 fix inclusion of php files 2023-02-16 11:36:07 +01:00
Uwe Steinmann
7c973d9f37 fix inclusion of php files 2023-02-16 11:35:19 +01:00
Uwe Steinmann
8cb7e22bf9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-15 08:27:51 +01:00
Uwe Steinmann
d45f050e46 conversion from pdf to png replaces alpha channel with white 2023-02-15 08:27:37 +01:00
Uwe Steinmann
d86b2cc883 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-12 14:36:17 +01:00
Uwe Steinmann
73562364b0 add debug menu in admin tools 2023-02-12 14:34:31 +01:00
Uwe Steinmann
d07219a213 add list of conversion and notification services 2023-02-12 14:33:51 +01:00
Uwe Steinmann
6c6b754e52 remove duplicate class 'alert-warning' in drag&drop box for attachments 2023-02-10 10:17:16 +01:00
Uwe Steinmann
6fd8d3e7f5 log error when execution of command fails 2023-02-09 07:16:50 +01:00
Uwe Steinmann
45e1d47e8f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x, start version 6.0.23 2023-02-09 06:51:31 +01:00
Uwe Steinmann
27b19f5c3a start version 5.1.30 2023-02-09 06:50:15 +01:00
Uwe Steinmann
9dfc6e8b1e Merge branch 'seeddms-6.0.x' 2023-02-07 13:16:15 +01:00
Uwe Steinmann
1934cdd7c5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-07 13:08:23 +01:00
Uwe Steinmann
69cd042851 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-02-07 12:40:54 +01:00
Uwe Steinmann
a52fcea5d9 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-02-07 12:40:41 +01:00
Uwe Steinmann
ff4ebb0c38 various minor translation updates 2023-02-07 12:40:24 +01:00
Uwe Steinmann
477c79d5a4 add warning that preview images are recreated 2023-02-07 12:37:16 +01:00
Uwe Steinmann
22463fdb40 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-05 17:06:31 +01:00
Uwe Steinmann
ef9e685f55 set libfolder to null if not accessible, but do no issue a error 2023-02-04 15:14:38 +01:00
Uwe Steinmann
81ff5aef93 fix indenting of line 2023-02-02 19:15:54 +01:00
Uwe Steinmann
458252f531 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-26 21:06:16 +01:00
Uwe Steinmann
2ab8cd5215 init $t and $ot 2023-01-26 21:05:53 +01:00
Uwe Steinmann
11030fad52 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-26 20:59:38 +01:00
Uwe Steinmann
23bd194007 use getAttributeTypeText() and getAttributeObjectTypeText() 2023-01-26 20:58:47 +01:00
Uwe Steinmann
12a9762c96 use getAttributeTypeText() and getAttributeObjectTypeText() 2023-01-26 20:57:59 +01:00
Uwe Steinmann
d30ba981be add functions to return type of object type of attribute definitions 2023-01-26 20:55:42 +01:00
Uwe Steinmann
bdcaf2b5f3 minor correction of log messages 2023-01-26 18:42:28 +01:00
Uwe Steinmann
23f17e291e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-26 13:31:08 +01:00
Uwe Steinmann
b495fd248b add baseUrl for those cases where seeddms cannot determine the host and protocol itself 2023-01-26 13:29:46 +01:00
Uwe Steinmann
970622564c SeedDMSTask.add() returns taskid, task will be passed to function of task 2023-01-26 13:19:28 +01:00
Uwe Steinmann
e87d7546a3 handle proxy settings and _baseUrl in settings in getBaseUrl() 2023-01-26 13:18:40 +01:00
Uwe Steinmann
42a81b6b0e eval parameter 'multiple' 2023-01-26 13:17:34 +01:00
Uwe Steinmann
1ab07d53f7 better and more verbose logging 2023-01-26 13:16:47 +01:00
Uwe Steinmann
845317e27d better documentation 2023-01-26 13:16:18 +01:00
Uwe Steinmann
0788c29c4a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-25 17:32:33 +01:00
Uwe Steinmann
1aca53f63a div.ajax update shows message when set in data-update-msg 2023-01-25 12:00:47 +01:00
Uwe Steinmann
57bbc06577 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-25 10:12:23 +01:00
Uwe Steinmann
345d34fbc8 add changes for 5.1.29 2023-01-25 10:11:44 +01:00
Uwe Steinmann
d6cca9291c clean up code, support drag&drop for items in clipboard 2023-01-25 09:53:08 +01:00
Uwe Steinmann
e0b1052640 add class 'add-clipboard-area' to clipboard menu item to make it drop aware 2023-01-25 09:52:23 +01:00
Uwe Steinmann
95cf35c1e3 do not copy pear packages anymore 2023-01-24 16:36:12 +01:00
Uwe Steinmann
335c7bbf98 do not include SeedDMS/Preview.php anymore because it is included in inc.FulltextInit.php already 2023-01-22 19:16:38 +01:00
Uwe Steinmann
c56a92b395 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-22 19:15:32 +01:00
Uwe Steinmann
5c985f32b1 do not include SeedDMS/Preview.php anymore because it is included in inc.FulltextInit.php already 2023-01-22 19:15:11 +01:00
Uwe Steinmann
77ce7554a8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-21 13:58:14 +01:00
Uwe Steinmann
29cae0fb65 keep SeedDMS/Preview until all extensions are updated 2023-01-21 13:55:27 +01:00
Uwe Steinmann
22802c4abd remove phpexcel, raise some max version numbers 2023-01-21 13:47:28 +01:00
Uwe Steinmann
e34830a53e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-21 13:33:54 +01:00
Uwe Steinmann
f2fb5827f3 do not include pear packages anymore 2023-01-21 13:31:44 +01:00
Uwe Steinmann
2913a9bc97 include webdav server from vendor dir 2023-01-21 13:31:25 +01:00
Uwe Steinmann
cca8416ef6 use composer packages for lucene, preview, sqlitefs, webdav server 2023-01-21 13:08:33 +01:00
Uwe Steinmann
2a265ecea6 minor improvements in cmd to create changelog 2023-01-21 09:16:50 +01:00
Uwe Steinmann
fc61b3d759 include SQLiteFTS.php from vendor/seeddms/sqlitefts 2023-01-21 09:15:46 +01:00
Uwe Steinmann
97feb24466 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-21 09:10:29 +01:00
Uwe Steinmann
9b780bd883 include Lucene.php from vendor dir 2023-01-21 09:09:57 +01:00
Uwe Steinmann
78f80e7190 add new repositories for lucene, sqlitefts, preview, core 2023-01-21 09:09:20 +01:00
Uwe Steinmann
0c30b97f2d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 17:33:01 +01:00
Uwe Steinmann
875954e730 add composer.json 2023-01-20 17:31:22 +01:00
Uwe Steinmann
a7fd69a6b9 add new changelog files 2023-01-20 17:12:34 +01:00
Uwe Steinmann
284d0707cc fix formating of notes in preparation of creating CHANGELOG.md 2023-01-20 17:11:17 +01:00
Uwe Steinmann
3426fa1032 fix formating of notes in preparation for creating a changelog.md 2023-01-20 17:01:19 +01:00
Uwe Steinmann
496bc9214d backport some changes from 6.0.x 2023-01-20 16:57:34 +01:00
Uwe Steinmann
cb1d55e413 add all changes from 6.0.x 2023-01-20 12:32:13 +01:00
Uwe Steinmann
3d880be30c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 12:30:27 +01:00
Uwe Steinmann
4c39fb065a add composer file 2023-01-20 12:28:56 +01:00
Uwe Steinmann
33f7567241 add unit tests 2023-01-20 12:28:35 +01:00
Uwe Steinmann
b7a718732d new changelog created from package.xml 2023-01-20 12:27:22 +01:00
Uwe Steinmann
c3e415ff7a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 12:22:22 +01:00
Uwe Steinmann
9df57ebe67 no longer include Core.php from SeedDMS, use vendor/seeddms/core instead 2023-01-20 12:21:14 +01:00
Uwe Steinmann
88874155b0 add seeddms/core 2023-01-20 12:09:45 +01:00
Uwe Steinmann
6dc9cc8b8e minor corrections to sync with seeddms 5 2023-01-20 11:11:10 +01:00
Uwe Steinmann
3bf13c9e03 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 11:06:19 +01:00
Uwe Steinmann
1c8d267a66 minor correction of old release dates 2023-01-20 11:05:58 +01:00
Uwe Steinmann
4f6261321f replace tabs by spaces 2023-01-20 11:00:07 +01:00
Uwe Steinmann
21a787aa21 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 10:58:57 +01:00
Uwe Steinmann
1da52544af handle none numberic versions when creating changelog 2023-01-20 10:58:16 +01:00
Uwe Steinmann
c8057fc72f replace tabs by spaces 2023-01-20 10:57:59 +01:00
Uwe Steinmann
ef61f16f95 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 10:52:04 +01:00
Uwe Steinmann
93088edfce set SEEDDMS_CORE_SQL before running unit tests 2023-01-20 10:51:13 +01:00
Uwe Steinmann
42828065ce add target changelog which turns a package.xml into markdown 2023-01-20 10:48:28 +01:00
Uwe Steinmann
7bfc2c4602 various minor changes to easy conversion into a markdown file 2023-01-20 10:48:00 +01:00
Uwe Steinmann
f6ae2c3868 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-19 15:02:19 +01:00
Uwe Steinmann
b197639dd2 add wasSuccessful() to check if last conversion was successful 2023-01-19 15:01:43 +01:00
Uwe Steinmann
872c66158b conversion service gets reference to conversion mgr when service is added 2023-01-19 12:10:33 +01:00
Uwe Steinmann
f0a3d7d60c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-19 09:37:30 +01:00
Uwe Steinmann
0a3f8dd180 add endpoint 'version', send notification after document or content was added 2023-01-19 09:36:46 +01:00
Uwe Steinmann
fb43a82818 check for more mimetypes in getWrongFiletypeDocumentContent() 2023-01-19 08:59:49 +01:00
Uwe Steinmann
1506cef2ab Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-19 07:10:36 +01:00
Uwe Steinmann
9ec87a727e do not show batch operation on categories if none are defined 2023-01-19 07:08:04 +01:00
Uwe Steinmann
b6a52ee4de _getDocumentsData returns filetype and origfilename 2023-01-19 07:07:36 +01:00
Uwe Steinmann
19cdccbd88 fix syntax error 2023-01-19 07:07:08 +01:00
Uwe Steinmann
2f0fdfca19 make it work in recent versions of seeddms 2023-01-19 07:06:45 +01:00
Uwe Steinmann
9d69bd12eb fix text in comment 2023-01-19 07:05:41 +01:00
Uwe Steinmann
83d11651b3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-17 13:04:24 +01:00
Uwe Steinmann
0825ab0113 add list of all extension at beginning of extensions tab 2023-01-17 12:31:55 +01:00
Uwe Steinmann
ace30334a8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-13 21:30:35 +01:00
Uwe Steinmann
cafc50ca4b pass logger to hooks 2023-01-13 21:21:41 +01:00
Uwe Steinmann
c77938cd11 add extra content in document list row after last column 2023-01-13 13:51:44 +01:00
Uwe Steinmann
cf82094149 add rule to provide auth info if php is run in fpm mode 2023-01-12 06:46:49 +01:00
Uwe Steinmann
795b0e08d3 add rule to provide auth info if php is run in fpm mode 2023-01-12 06:46:00 +01:00
Uwe Steinmann
d628b01ede Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-11 13:28:55 +01:00
Uwe Steinmann
b1d6cc1357 return 'status' as facet, get path as array of folder ids 2023-01-11 13:26:52 +01:00
Uwe Steinmann
e42af89bcf fix indenting 2023-01-11 13:26:12 +01:00
Uwe Steinmann
69a70242b0 move record type further up in form 2023-01-11 11:58:15 +01:00
Uwe Steinmann
f2381dca72 owner wasn't handled propperly 2023-01-11 11:57:58 +01:00
Uwe Steinmann
824742b5bb set separator between categories to '#' 2023-01-10 20:41:02 +01:00
Uwe Steinmann
fa683ba65f set separator between categories to '#' 2023-01-10 20:39:42 +01:00
Uwe Steinmann
48eebee92a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-10 18:33:40 +01:00
Uwe Steinmann
7531afca4b do not set user in view 2023-01-10 18:33:23 +01:00
Uwe Steinmann
b351a05aba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-10 16:57:41 +01:00
Uwe Steinmann
28f16a5da5 check field 'indexed', count errors 2023-01-10 16:27:17 +01:00
Uwe Steinmann
328cbd9eb9 fix indexing documents 2023-01-10 15:44:30 +01:00
Uwe Steinmann
6d6bbca94b set placeholder of task frequency 2023-01-10 15:44:09 +01:00
Uwe Steinmann
aa733c7531 pass logger to controller, fix including php files 2023-01-10 15:43:37 +01:00
Uwe Steinmann
41b2ae91e1 use authenticator 2023-01-10 15:43:06 +01:00
Uwe Steinmann
244a5da6d8 get logger 2023-01-10 15:42:50 +01:00
Uwe Steinmann
9461f2c24d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-10 08:26:39 +01:00
Uwe Steinmann
acd96034d8 add changes of 5.1.29 2023-01-10 08:12:06 +01:00
Uwe Steinmann
cc144f6c0f show number of keywords per category in select menu 2023-01-10 08:11:52 +01:00
Uwe Steinmann
913baaa7ce show number of documents per category in select menu 2023-01-10 08:11:24 +01:00
Uwe Steinmann
da4aafff86 add more notes for 5.1.29 2023-01-10 08:10:51 +01:00
Uwe Steinmann
1d217251c1 add method SeedDMS_Core_KeywordCategory::countKeywordLists() 2023-01-10 08:10:33 +01:00
Uwe Steinmann
330a147533 update release date and notes 2023-01-09 17:45:20 +01:00
Uwe Steinmann
1374c7fda3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-09 16:58:39 +01:00
Uwe Steinmann
8c87816070 check if $record_type is set 2023-01-09 16:15:36 +01:00
Uwe Steinmann
627baa5cc8 add logos to list of extensions 2023-01-09 16:15:18 +01:00
Uwe Steinmann
927e5acdc2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-09 15:40:41 +01:00
Uwe Steinmann
095605f85e add text preview 2023-01-09 15:33:56 +01:00
Uwe Steinmann
b1b16e1008 output time in secs for indexing 2023-01-09 15:32:38 +01:00
Uwe Steinmann
bc5aa7703c display number of occurences of term 2023-01-09 15:32:00 +01:00
Uwe Steinmann
707082f6b6 list terms in auto complete if set 2023-01-09 15:31:30 +01:00
Uwe Steinmann
5e48d724ac pass terms to view 2023-01-09 15:31:05 +01:00
Uwe Steinmann
2310395e46 add field record_type 2023-01-09 15:30:44 +01:00
Uwe Steinmann
0686cfecf5 init only fulltext service which was selected in configuration 2023-01-09 15:30:18 +01:00
Uwe Steinmann
732fd81018 add query for record_type 2023-01-09 15:29:58 +01:00
Uwe Steinmann
409df834a3 check for typeahead action without php warnings 2023-01-08 16:24:02 +01:00
Uwe Steinmann
23c4327382 escape html in typeahead action 2023-01-08 16:23:27 +01:00
Uwe Steinmann
71b8b197da various minor improvements 2023-01-08 16:22:52 +01:00
Uwe Steinmann
593792089f implement Zend indexer as singleton in SeedDMS_Lucene_Indexer 2023-01-08 16:22:01 +01:00
Uwe Steinmann
3cc7497863 fix setting limit 2023-01-08 16:21:08 +01:00
Uwe Steinmann
30ab2f9ef7 limit can be passed by url parameter, add '*' to query in typeahead mode 2023-01-07 12:18:30 +01:00
Uwe Steinmann
1ec7715b26 set limit of typeahead search to 15 2023-01-07 12:18:03 +01:00
Uwe Steinmann
8f07c2fd1f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-06 18:55:13 +01:00
Uwe Steinmann
d35cf5d9f6 fix syntax of url, set propper favicon 2023-01-06 18:43:18 +01:00
Uwe Steinmann
b14a421591 do not auth because browsers do not send cookies to fetch opensearch desc 2023-01-06 18:41:29 +01:00
Uwe Steinmann
f98df0efcc better legend title 2023-01-06 13:46:58 +01:00
Uwe Steinmann
26e6f24565 fix checking for search result hits 2023-01-06 13:46:33 +01:00
Uwe Steinmann
8c86b4f61c output homefolder and link email address 2023-01-06 11:13:32 +01:00
Uwe Steinmann
adbea2919a do not set PDO::ATTR_AUTOCOMMIT because it prevents sql statements not in a transaction from being executed 2023-01-06 07:48:32 +01:00
Uwe Steinmann
67163324bb set end of conversion in any case, not just if iptc data was found 2023-01-05 16:57:18 +01:00
Uwe Steinmann
99bb9e5e20 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-05 16:47:28 +01:00
Uwe Steinmann
4ef60bbf10 add note for 5.1.29 2023-01-05 15:10:21 +01:00
Uwe Steinmann
b01dd7655c separate cache by png, txt, and pdf 2023-01-05 15:09:25 +01:00
Uwe Steinmann
a94eccb6cf add converter for postscript 2023-01-05 15:09:04 +01:00
Uwe Steinmann
58fd8877fb use DIRECTORY_SEPARATOR, add prefix 'png', 'txt', 'pdf' to previewDir 2023-01-05 15:08:05 +01:00
Uwe Steinmann
ba8a2d5d87 add method getPreviewDir() 2023-01-05 15:07:19 +01:00
Uwe Steinmann
8cdafe49e0 remove spaces which prevented reading the stop word list 2023-01-05 09:45:22 +01:00
Uwe Steinmann
292ade83e7 return empty text if image has no iptc data 2023-01-05 09:35:13 +01:00
Uwe Steinmann
735fe4235f set $success to false if exec of command failed 2023-01-05 09:34:39 +01:00
Uwe Steinmann
a8474b08c6 use method wasSuccessful() to check if conversion succeeded 2023-01-05 09:34:09 +01:00
Uwe Steinmann
5a778a1b75 add note about setting papersize for a2ps 2023-01-05 09:02:30 +01:00
Uwe Steinmann
12ffb0174e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-05 08:39:45 +01:00
Uwe Steinmann
f48f649249 call constructor of parent 2023-01-05 08:05:46 +01:00
Uwe Steinmann
99e7623ea0 init index with stopwords file 2023-01-05 08:04:48 +01:00
Uwe Steinmann
4540f85745 add var $success which is set to false if the conversion fails 2023-01-05 08:04:07 +01:00
Uwe Steinmann
99ee18a336 add note for 1.1.18 2023-01-05 08:03:13 +01:00
Uwe Steinmann
b9ac1860cf use stop words 2023-01-05 08:02:14 +01:00
Uwe Steinmann
e28911711b make init() static 2023-01-05 08:01:48 +01:00
Uwe Steinmann
a9aa87332d add comment that converters are deprecated 2023-01-04 14:33:36 +01:00
Uwe Steinmann
dd65fe2e35 add conversion service from text to png 2023-01-04 14:33:11 +01:00
Uwe Steinmann
a80702e7b8 add more documentation 2023-01-04 14:32:52 +01:00
Uwe Steinmann
722b5dfba5 add converter from text to image 2023-01-04 14:32:16 +01:00
Uwe Steinmann
18ea59bfc7 add more documentation 2023-01-04 14:31:59 +01:00
Uwe Steinmann
2cbe041b60 user getClassname() for SeedDMS_Core_DocumentFile 2023-01-04 14:31:28 +01:00
Uwe Steinmann
dbe7f36eb0 add conversion service from text to image 2023-01-04 14:30:45 +01:00
Uwe Steinmann
b5c773a4a3 fix php error 2023-01-03 17:53:36 +01:00
Uwe Steinmann
c4f1019afb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-03 17:01:07 +01:00
Uwe Steinmann
0b94308831 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2023-01-03 17:00:57 +01:00
Uwe Steinmann
7694adabaa Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2023-01-03 17:00:47 +01:00
Uwe Steinmann
d8ed7797c0 some new phrases 2023-01-03 17:00:25 +01:00
Uwe Steinmann
eb0be965ee adjust label of checkbox to delete preview images and text 2023-01-03 16:59:08 +01:00
Uwe Steinmann
51d8ebbf60 improve html for listing errors 2023-01-03 16:58:40 +01:00
Uwe Steinmann
2f868c4f44 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-03 16:38:57 +01:00
Uwe Steinmann
a8ccf1669b script for uploading files from local disc 2023-01-03 14:16:43 +01:00
Uwe Steinmann
3633beb98d script for informing users about expired documents 2023-01-03 14:13:06 +01:00
Uwe Steinmann
7634208432 script for deleting a docuemnt 2023-01-03 14:09:48 +01:00
Uwe Steinmann
e54874c3ff some more documentation 2023-01-03 14:07:38 +01:00
Uwe Steinmann
d8e9cb5707 indexdocument returns propper error msg 2023-01-03 14:07:05 +01:00
Uwe Steinmann
29310e7c43 pass text previewer to fulltext service 2023-01-03 14:06:24 +01:00
Uwe Steinmann
98e7c58b74 fulltext service can use new text previewer to create a cached txt file of a document 2023-01-03 14:05:32 +01:00
Uwe Steinmann
75638089e6 add notes for latest version 2023-01-03 14:04:08 +01:00
Uwe Steinmann
05d7c709ab callable can be passed for retrieving text content 2023-01-03 14:01:04 +01:00
Uwe Steinmann
eefb0f5ad3 include TxtPreviewer.php 2023-01-03 14:00:28 +01:00
Uwe Steinmann
388cf0d136 update release notes 2023-01-02 19:36:22 +01:00
Uwe Steinmann
91e20d72af start new version 1.5.0 2023-01-02 19:36:07 +01:00
Uwe Steinmann
8418bb962d use get getClassname() for getting class of documentfile 2023-01-02 19:35:35 +01:00
Uwe Steinmann
ff5e6e6302 use getClassname() for getting class of documentfile 2023-01-02 19:34:48 +01:00
Uwe Steinmann
c9f3a2c335 get class name for 'documentfile' 2023-01-02 19:34:14 +01:00
Uwe Steinmann
be62540c69 set $new when creating preview 2023-01-02 12:26:48 +01:00
Uwe Steinmann
0e55c95171 remove old converters 2023-01-02 12:26:31 +01:00
Uwe Steinmann
d291c18eab add logger, conversionmgr, authenticator, etc to container 2023-01-01 20:00:27 +01:00
Uwe Steinmann
e30032f028 move init of notification into DBInit.php 2023-01-01 19:59:29 +01:00
Uwe Steinmann
5bd69596c9 add slim middleware for authenticating with session 2023-01-01 19:58:28 +01:00
Uwe Steinmann
7202d85e55 fix indention of lines 2023-01-01 09:23:04 +01:00
Uwe Steinmann
f4b8eb05b7 set timeout of SeedDMS_ConversionServiceExec 2023-01-01 09:22:11 +01:00
Uwe Steinmann
c67cc6ede4 turn off auto commit for mysql 2023-01-01 09:21:01 +01:00
Uwe Steinmann
8940a3b338 timeout can be passed to constructor 2023-01-01 09:18:52 +01:00
Uwe Steinmann
06e9f41ec1 replace plain html in formField() method 2022-12-20 15:55:37 +01:00
Uwe Steinmann
41721467ac focus search field after loading page 2022-12-20 15:54:47 +01:00
Uwe Steinmann
6233ac59ff log transactions 2022-12-20 13:45:53 +01:00
Uwe Steinmann
d72422eb36 add second column with error messages 2022-12-19 16:00:28 +01:00
Uwe Steinmann
79b1560a27 fix typo 2022-12-18 12:46:29 +01:00
Uwe Steinmann
edabd515f1 use methods in style to create tabs 2022-12-18 12:41:39 +01:00
Uwe Steinmann
ed036819e7 set currenttab from GET if available 2022-12-17 14:07:55 +01:00
Uwe Steinmann
e141892934 fulltext index uses 'indexed' instead of 'created' 2022-12-15 12:46:54 +01:00
Uwe Steinmann
9e9c0c8ac5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-12-15 12:45:04 +01:00
Uwe Steinmann
61db1313a3 add translation of 'Processing ...', use getMLText() 2022-12-15 12:36:57 +01:00
Uwe Steinmann
0186e1af00 check field indexed instead of created 2022-12-15 12:36:35 +01:00
Uwe Steinmann
20d368ec99 add new field 'indexed' 2022-12-15 12:35:16 +01:00
Uwe Steinmann
a81f51c17c add new field 'indexed' 2022-12-15 12:35:02 +01:00
Uwe Steinmann
de7d1c005e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-12-13 17:48:54 +01:00
Uwe Steinmann
c53e27efff make getFileName() public 2022-12-13 17:43:47 +01:00
Uwe Steinmann
c786635f9c fix inclusion of php files 2022-12-11 16:56:05 +01:00
Uwe Steinmann
082a6a8af0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-12-11 15:35:02 +01:00
Uwe Steinmann
45221b8154 add changes of 5.1.29 2022-12-11 15:34:30 +01:00
Uwe Steinmann
5694bf9501 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-12-10 14:23:43 +01:00
Uwe Steinmann
aeb0e4f1de use formSubmit() instead of plain html for submit button 2022-12-10 14:18:07 +01:00
Uwe Steinmann
3477b1fc9b use formSubmit() instead of plain html for submit button 2022-12-10 13:48:11 +01:00
Uwe Steinmann
ad19678e86 add secondary submit button 2022-12-10 13:47:32 +01:00
Uwe Steinmann
6ae0eb38d9 use formSubmit() instead of plain html for submit button 2022-12-10 13:12:21 +01:00
Uwe Steinmann
22d59a61ed add neutral submit button 2022-12-10 13:07:26 +01:00
Uwe Steinmann
c31250089e use formSubmit() instead of plain html for submit button 2022-12-10 13:05:22 +01:00
Uwe Steinmann
1e178fb1c3 use formSubmit() instead of plain html for submit button 2022-12-10 13:01:46 +01:00
Uwe Steinmann
995fd19684 remove spaces 2022-12-10 12:59:32 +01:00
Uwe Steinmann
276ca2c5f4 allow to filter search by creation date 2022-12-10 12:59:13 +01:00
Uwe Steinmann
35e2f86dba add parameter $filter to find() 2022-12-10 12:58:37 +01:00
Uwe Steinmann
a00883c100 set class of container, put terms in span 2022-12-09 10:54:28 +01:00
Uwe Steinmann
8340f9eb64 add style for div.fulltextinfo > span:hover 2022-12-09 10:54:06 +01:00
Uwe Steinmann
b50ca0321d start new version 1.0.18 2022-12-09 10:53:15 +01:00
Uwe Steinmann
5fc160a8dc add optional parameter $order to search() which is passed to find() 2022-12-09 10:52:33 +01:00
Uwe Steinmann
a8034350ef fix documentation of count() 2022-12-09 10:52:08 +01:00
Uwe Steinmann
68f19b87c3 add optional parameter $col and $query to terms() 2022-12-09 10:51:43 +01:00
Uwe Steinmann
91c5b113b2 add optional parameter $order to find() 2022-12-09 10:51:05 +01:00
Uwe Steinmann
6341e13ca6 show path of document/folder in typeahead search 2022-12-08 14:48:36 +01:00
Uwe Steinmann
ecb0258186 fix filename of attachment 2022-12-08 14:48:10 +01:00
Uwe Steinmann
56bd5c00e4 set resolution of pdf to 72dpi, using 36dpi will not allow previes wider than 298px 2022-12-08 14:45:31 +01:00
Uwe Steinmann
291b62eeb2 getFolderPathPlain(): add sep as prefix if skiproot is true 2022-12-08 14:44:49 +01:00
Uwe Steinmann
6f9ec7cdc3 $width passed to getFileName() is optional 2022-12-07 17:03:11 +01:00
Uwe Steinmann
99569a3435 fix possible xss attack 2022-12-06 11:15:51 +01:00
Uwe Steinmann
e40f7e6a25 fix typo 2022-12-05 09:18:36 +01:00
Uwe Steinmann
de61d9f1f3 set error msg if extension list cannot be fetched 2022-11-29 21:46:07 +01:00
Uwe Steinmann
57ab966404 add changes of 5.1.29 2022-11-29 17:37:25 +01:00
Uwe Steinmann
11d134e35a last element of breadcrumb has a link 2022-11-29 17:36:59 +01:00
Uwe Steinmann
cd5a39b50f make breakcrumps capable of drag&drop 2022-11-29 17:36:17 +01:00
Uwe Steinmann
92ba1a9e76 focus folder selection after loading page 2022-11-29 17:35:32 +01:00
Uwe Steinmann
55df94a993 use authentication service 2022-11-29 17:34:29 +01:00
Uwe Steinmann
a5e975caa5 searchfolder returns full path of folder 2022-11-29 17:33:04 +01:00
Uwe Steinmann
e8192d2813 add $skiproot and $sep parameter to getFolderPathPlain() 2022-11-29 17:31:54 +01:00
Uwe Steinmann
8a01102cf5 add documentation on how to use the scheduler 2022-11-29 10:49:37 +01:00
Uwe Steinmann
c87eb6c6f0 add changs for 5.1.29 2022-11-29 10:49:01 +01:00
Uwe Steinmann
6a24ce5d10 documentation on how to use swagger 2022-11-29 10:46:34 +01:00
Uwe Steinmann
e9b3b25b64 pass notification and authentication service to ServeRequest 2022-11-29 10:44:19 +01:00
Uwe Steinmann
f7ebe88822 add authentication service 2022-11-28 21:40:42 +01:00
Uwe Steinmann
28a4a24613 add constructor, authenticate() returns null if authentication fails 2022-11-28 21:36:40 +01:00
Uwe Steinmann
0f0ba03449 remove constructor and class vars from abstract class 2022-11-28 21:35:41 +01:00
Uwe Steinmann
182418c856 allow parameter of type 'folder' and 'users' 2022-11-25 15:06:49 +01:00
Uwe Steinmann
1488cdcfca use predefined key for translation of parameter description 2022-11-25 13:45:27 +01:00
Uwe Steinmann
e4be5465be issue propper err msg when view access is prohibited 2022-11-24 17:16:43 +01:00
Uwe Steinmann
0c28f47481 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-24 12:40:55 +01:00
Uwe Steinmann
4e528975b8 use Login controller 2022-11-24 12:40:25 +01:00
Uwe Steinmann
2556bf5b3f set 'source' = 'web' for controller 2022-11-24 12:39:57 +01:00
Uwe Steinmann
ec38938d8d include Log.php 2022-11-24 12:39:37 +01:00
Uwe Steinmann
53389d9054 do cookie handling and session update only if logged in via web page 2022-11-24 12:38:59 +01:00
Uwe Steinmann
53f350c2fa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-24 11:03:56 +01:00
Uwe Steinmann
3e61d93049 add changes for 5.1.29 2022-11-24 11:02:07 +01:00
Uwe Steinmann
d3d7956f4e set data-remote of button to open a modal box with content loaded from remote 2022-11-24 11:01:31 +01:00
Uwe Steinmann
7854f75c8c add unsafe-inline to csp rule, because of jquery 3.6.1 2022-11-24 11:01:14 +01:00
Uwe Steinmann
63ca342576 show warning if import file has no users or misses a header line 2022-11-24 09:44:43 +01:00
Uwe Steinmann
823d98b261 add a render function for hashed passwords 2022-11-24 09:44:23 +01:00
Uwe Steinmann
9e4eae8206 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-22 06:56:46 +01:00
Uwe Steinmann
3af5b0f943 new version 5.1.29 2022-11-22 06:52:44 +01:00
Uwe Steinmann
4fe2f97fea js code for drag&drop upload is added even if user has no access on folder 2022-11-21 16:33:38 +01:00
Uwe Steinmann
0073b00c5e fix calling changeFolderAccess() 2022-11-21 16:33:02 +01:00
Uwe Steinmann
c93d42228d start new version 5.1.29 2022-11-21 16:32:37 +01:00
Uwe Steinmann
4e1e126783 propperly rollback addDocument() if add categories fails 2022-11-21 16:32:06 +01:00
Uwe Steinmann
cfc23e0ddf Merge branch 'seeddms-5.1.x' 2022-11-21 15:10:31 +01:00
Uwe Steinmann
baa3010b43 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-18 17:17:38 +01:00
Uwe Steinmann
c9ea05b263 fix target to create api doc 2022-11-18 11:22:08 +01:00
Uwe Steinmann
8d2becb0ca change namespace of iterators from SeedDMS to SeedDMS\Core 2022-11-18 11:20:38 +01:00
Uwe Steinmann
a9feb3e182 change namespace of iterators from SeedDMS to SeedDMS\Core 2022-11-18 11:20:18 +01:00
Uwe Steinmann
bafa55b489 fix typo, update copyright 2022-11-18 11:15:27 +01:00
Uwe Steinmann
9dbe4e25aa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-17 17:44:05 +01:00
Uwe Steinmann
2e4b19e4ef fix counting of login failures if both ldap and db authentication is done 2022-11-17 17:43:55 +01:00
Uwe Steinmann
330073f52a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-17 15:24:32 +01:00
Uwe Steinmann
b45bc9d57c update notes of 5.1.28 2022-11-17 13:10:53 +01:00
Uwe Steinmann
d06f33abeb all file operations use methods of SeedDMS_Core_File 2022-11-17 13:10:46 +01:00
Uwe Steinmann
820370d713 getMimeType() is now SeedDMS_Core_File::mimetype() 2022-11-17 11:35:34 +01:00
Uwe Steinmann
2c96fb5a1c remove getMimeType(), it has been moved to SeedDMS_Core 2022-11-17 11:34:28 +01:00
Uwe Steinmann
e719f31167 fix moveDir() which didn't work at all 2022-11-17 11:33:43 +01:00
Uwe Steinmann
09f6dc64a6 removeDir() does not require a leading dir separator 2022-11-17 11:33:34 +01:00
Uwe Steinmann
f9328a5b7c add text/markdown in fileExtension() 2022-11-17 11:32:45 +01:00
Uwe Steinmann
62c2606d09 add file_exists(), improve parse_filesize() 2022-11-17 11:32:05 +01:00
Uwe Steinmann
7716d3ad54 add method mimetype() 2022-11-17 11:31:12 +01:00
Uwe Steinmann
0e8f9c5164 fix copyright and description of class 2022-11-17 11:30:07 +01:00
Uwe Steinmann
4888082cda Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-15 17:16:46 +01:00
Uwe Steinmann
83770f7521 fix getMimetype() 2022-11-15 16:15:24 +01:00
Uwe Steinmann
1667187613 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-15 16:08:32 +01:00
Uwe Steinmann
08d10d2cc0 get mimetype without encoding which simplifies the code 2022-11-15 16:07:06 +01:00
Uwe Steinmann
581841bc42 click on .ajax-click will always call op/op.Ajax.php 2022-11-15 16:06:31 +01:00
Uwe Steinmann
2e0c369b25 allow to set mimetype if is possibly wrong 2022-11-15 16:05:53 +01:00
Uwe Steinmann
f52e950283 add command 'setmimetype' 2022-11-15 16:05:27 +01:00
Uwe Steinmann
aa18d3f883 add new function getMimeType() 2022-11-15 16:05:06 +01:00
Uwe Steinmann
8e47c444b2 better checking form mimetype!=null in setMimeType() 2022-11-15 16:04:15 +01:00
Uwe Steinmann
38b0cbda7f replace space by tabs 2022-11-15 16:03:52 +01:00
Uwe Steinmann
9850b2d8f9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-14 17:40:41 +01:00
Uwe Steinmann
67feaf55cf Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-11-14 17:40:29 +01:00
Uwe Steinmann
6dbf7827df Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-11-14 17:40:18 +01:00
Uwe Steinmann
ad89814db0 translation updates 2022-11-14 17:39:59 +01:00
Uwe Steinmann
9c740db936 add changes of 6.0.21 2022-11-14 17:23:26 +01:00
Uwe Steinmann
938126c19c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-14 17:22:17 +01:00
Uwe Steinmann
9c1fd788d6 use the list of docs ordered by sequence in reorderDocuments() 2022-11-14 17:21:22 +01:00
Uwe Steinmann
3b473edd25 add button to reorder docs in a folder if sequence numbers are not unique 2022-11-14 16:25:22 +01:00
Uwe Steinmann
b6a0b45867 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-14 09:05:35 +01:00
Uwe Steinmann
b2fd46dac0 add SeedDMS_Core_Folder::reorderDocuments() 2022-11-14 09:03:41 +01:00
Uwe Steinmann
863c3f971c add list of folders containing duplicate sequences 2022-11-14 08:39:09 +01:00
Uwe Steinmann
fbbc79815d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-14 08:21:01 +01:00
Uwe Steinmann
e2e52d61b1 fix output, add translations 2022-11-14 08:16:51 +01:00
Uwe Steinmann
9c715a7071 add SeedDMS_Core_DMS::getDuplicateSequenceNo() 2022-11-14 07:55:40 +01:00
Uwe Steinmann
b786e42bb3 fix inclusion of php files 2022-11-11 14:47:42 +01:00
Uwe Steinmann
a97fcbc67a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-11 13:01:44 +01:00
Uwe Steinmann
b587a4f2a1 more changes in 5.1.28 2022-11-11 10:46:48 +01:00
Uwe Steinmann
28c2670504 add a random sequence number deviation 2022-11-11 10:42:28 +01:00
Uwe Steinmann
3b74689c9c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-10 08:29:17 +01:00
Uwe Steinmann
28f78baed0 add changes in 5.1.28 (mostly restapi) 2022-11-10 08:27:39 +01:00
Uwe Steinmann
25c2d03190 add hook to add additional routes 2022-11-10 08:27:00 +01:00
Uwe Steinmann
ebf7fb7591 change json field 'version-attributes' to 'version_attributes' 2022-11-10 08:24:52 +01:00
Uwe Steinmann
650339c519 return id of attribute as int 2022-11-10 08:24:07 +01:00
Uwe Steinmann
cbf68b7ab6 explain how to set an auto command in vim 2022-11-09 19:33:26 +01:00
Uwe Steinmann
971dc536f7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-09 19:15:55 +01:00
Uwe Steinmann
d0a4f481ba use sensible sections 2022-11-09 19:15:16 +01:00
Uwe Steinmann
05b616f675 fix typos 2022-11-09 19:13:51 +01:00
Uwe Steinmann
b9311ff1e7 find a better mimetype by using file() and the extension 2022-11-09 15:14:38 +01:00
Uwe Steinmann
b8449289ac do not even try to remove a checked out file if it doesn't exist anymore 2022-11-09 13:33:18 +01:00
Uwe Steinmann
3e733b91cd check checkout status 2022-11-09 13:31:47 +01:00
Uwe Steinmann
e422fcf67a checkout can be canceled if file disappeared, is obsolete 2022-11-09 13:31:10 +01:00
Uwe Steinmann
2ce2fd07fe add version 5.1.28 and updated notes of 6.0.21 2022-11-09 12:22:23 +01:00
Uwe Steinmann
f0cd33d110 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-09 12:20:32 +01:00
Uwe Steinmann
5438d95eb5 add SeedDMS_Core_Attribute::getParsedValue() and use it in SeedDMS_Core_Object:: getAttributeValue() 2022-11-09 10:26:08 +01:00
Uwe Steinmann
3571d97f2f fix inclusion of php files 2022-11-09 09:25:45 +01:00
Uwe Steinmann
17dac9d1bc pass object of SeedDMS_AccessOperation to view 2022-11-09 06:41:20 +01:00
Uwe Steinmann
233639ce35 include inc.Utils.php early 2022-11-09 06:40:50 +01:00
Uwe Steinmann
f36735ef81 pass mask=PEAR_LOG_DEBUG to getLogger() 2022-11-08 20:07:59 +01:00
Uwe Steinmann
17673db914 use getLogger() to retrieve logger 2022-11-08 20:07:39 +01:00
Uwe Steinmann
a9f3b7a6a6 add optional parameter $mask to getLogger() 2022-11-08 20:07:08 +01:00
Uwe Steinmann
2a027105cb add changes for 5.1.28 2022-11-08 16:46:09 +01:00
Uwe Steinmann
7dee5cb767 allow to add more tabs with log files with a selectable prefix 2022-11-08 16:45:27 +01:00
Uwe Steinmann
e0cd3fb1e8 add changes of 5.1.28 2022-11-07 12:21:16 +01:00
Uwe Steinmann
fa56d5735d fix various errors, add missing functions 2022-11-07 12:20:50 +01:00
Uwe Steinmann
6f4ec80ad6 add new routes for changing attributes 2022-11-07 12:20:30 +01:00
Uwe Steinmann
31e47d4fbe do more logging during authentication 2022-11-07 12:19:58 +01:00
Uwe Steinmann
196fa91a27 add method setDocumentContentAttribute() 2022-11-07 12:19:07 +01:00
Uwe Steinmann
6d13883e8f add logging and fix status codes in setDocumentAttribute() 2022-11-07 12:18:26 +01:00
Uwe Steinmann
8484d38974 add new method getDocumentContentAttributes() 2022-11-07 12:17:03 +01:00
Uwe Steinmann
b068c385e7 add new method __getAttributesData() 2022-11-07 12:16:10 +01:00
Uwe Steinmann
239487e198 fix sql error when deleting a folder attribute 2022-11-07 12:13:15 +01:00
Uwe Steinmann
7cba489f1a fix typo 2022-11-06 20:04:12 +01:00
Uwe Steinmann
a5802ad3e8 add route /document/{id}/attribute/{attrdefid} 2022-11-06 20:03:58 +01:00
Uwe Steinmann
1ec3367695 fix line indenting 2022-11-06 20:03:12 +01:00
Uwe Steinmann
0e1b00d0b5 use controller to create subfolder, send notifications 2022-11-06 17:02:38 +01:00
Uwe Steinmann
257c23aead fix indenting of lines 2022-11-06 16:38:56 +01:00
Uwe Steinmann
441d8d6c0f add changes of 5.1.28 2022-11-06 16:09:46 +01:00
Uwe Steinmann
fbe6e492c8 use methods in inc/inc.ClassNotificationService.php it send notifications 2022-11-06 16:09:27 +01:00
Uwe Steinmann
57b298c489 invoke controller instead of calling run() 2022-11-06 16:08:57 +01:00
Uwe Steinmann
9869c3d8ce add missing space in log message 2022-11-06 16:07:40 +01:00
Uwe Steinmann
d9ba59990f clear login failures after successful login 2022-11-06 16:07:04 +01:00
Uwe Steinmann
35b83b37dc add changes in 5.1.28 2022-11-05 16:29:10 +01:00
Uwe Steinmann
13099d67aa add initial support for logging and notifications 2022-11-05 16:24:39 +01:00
Uwe Steinmann
fd8de36db8 allow facicon in extensions 2022-11-04 20:38:09 +01:00
Uwe Steinmann
88faf823e6 add changes of 5.1.28 2022-11-02 09:57:31 +01:00
Uwe Steinmann
dc6b153df8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-02 09:00:43 +01:00
Uwe Steinmann
df4d492874 do not include inc/inc.ClassEmailNotify.php 2022-11-02 09:00:13 +01:00
Uwe Steinmann
f363e226fd SeedDMS_Core_DMS::createPasswordRequest() creates a cryptographically secure hash 2022-11-02 09:00:01 +01:00
Uwe Steinmann
68427394ae add new function uniqidReal() 2022-11-02 08:57:01 +01:00
Uwe Steinmann
f6ec37df74 do not rawurl[de|en]code path anymore 2022-10-25 13:16:59 +02:00
Uwe Steinmann
04211bd09c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-10-24 17:12:27 +02:00
Uwe Steinmann
4ba98d45bc update bootstrap to 4.6.2 2022-10-24 17:12:00 +02:00
Uwe Steinmann
550d62a7a7 place login outside of container 2022-10-24 17:10:25 +02:00
Uwe Steinmann
6bb4eeb926 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-10-20 14:44:25 +02:00
Uwe Steinmann
3aca89e174 pass extension mgr to init() of extension 2022-10-20 14:43:58 +02:00
Uwe Steinmann
fa66cb8332 allow .woff, .html, .gif in ext/*/res dir 2022-10-20 14:43:26 +02:00
Uwe Steinmann
2e6e3f67b1 pass convertToPdf to view 2022-10-20 14:43:01 +02:00
Uwe Steinmann
d48af54737 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-10-13 16:36:16 +02:00
Uwe Steinmann
9d752afbff add entry for 5.1.28 2022-10-13 16:35:54 +02:00
Uwe Steinmann
02947f1bf0 include missing class for email notification 2022-10-13 16:34:57 +02:00
Uwe Steinmann
6dade497b6 show readme of extension 2022-10-11 18:15:18 +02:00
Uwe Steinmann
57151b3b1f make table for iptc data condensed 2022-10-11 18:14:52 +02:00
Uwe Steinmann
ebfbed7887 add space below nav-pills 2022-10-11 12:41:31 +02:00
Uwe Steinmann
97c6b19c1f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-10-11 12:33:09 +02:00
Uwe Steinmann
bc9a05258c eval more tags in iptc data 2022-10-10 20:14:00 +02:00
Uwe Steinmann
5278732456 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-10-10 14:04:19 +02:00
Uwe Steinmann
39eef26b10 add change in 5.1.28 2022-09-26 08:11:28 +02:00
Uwe Steinmann
c65d20f740 fix SeedDMS_Core_File::fileExtension() 2022-09-26 08:10:50 +02:00
Uwe Steinmann
ed17678490 add change in 5.1.28 2022-09-26 07:48:59 +02:00
Uwe Steinmann
e8a3779547 fix SeedDMS_Core_User::getDocumentContents() 2022-09-26 07:48:45 +02:00
Uwe Steinmann
df659c52d9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-25 13:49:35 +02:00
Uwe Steinmann
83099dd422 start new version 5.1.28 2022-09-24 08:32:43 +02:00
Uwe Steinmann
7012580476 Merge branch 'seeddms-5.1.x' 2022-09-22 16:52:06 +02:00
Uwe Steinmann
54c6d63a2d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-21 14:32:50 +02:00
Uwe Steinmann
6eae010b24 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-09-21 14:32:34 +02:00
Uwe Steinmann
44d430aeb6 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-09-21 14:32:23 +02:00
Uwe Steinmann
ead3a9fdf4 various new phrases 2022-09-21 14:32:07 +02:00
Uwe Steinmann
d13bc2a6bb escape category name 2022-09-21 14:29:39 +02:00
Uwe Steinmann
4b9844262c init variable 2022-09-21 12:49:22 +02:00
Uwe Steinmann
6dbcf2a172 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-21 12:48:04 +02:00
Uwe Steinmann
dbb9e09070 remove plain html and use methodes from theme 2022-09-21 12:33:41 +02:00
Uwe Steinmann
c3058176f3 do not use plain html, but use methods from theme class 2022-09-21 10:09:40 +02:00
Uwe Steinmann
dbd43d5877 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-21 08:32:21 +02:00
Uwe Steinmann
ec7a8a5bef Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-09-21 08:32:08 +02:00
Uwe Steinmann
b3e84e8134 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-09-21 08:31:57 +02:00
Uwe Steinmann
756d8d3f38 add one missing phrase 2022-09-21 08:31:42 +02:00
Uwe Steinmann
0cf15ecd0e always do a db search, set from an to if searching for an attr of type date 2022-09-20 15:06:33 +02:00
Uwe Steinmann
4aa38182db convert attribute of type date into format yyyy-mm-dd 2022-09-20 08:24:27 +02:00
Uwe Steinmann
877a94c37d return err msg if attribute has not enough values 2022-09-20 08:23:52 +02:00
Uwe Steinmann
12675426e6 return false if attribute has not enough attribute values 2022-09-20 08:23:04 +02:00
Uwe Steinmann
18a5306d3c check for revision date even if document is expired 2022-09-20 07:09:13 +02:00
Uwe Steinmann
3add16e06a use conversion manager for all lists 2022-09-18 13:42:22 +02:00
Uwe Steinmann
d9e6472fff propperly check for action listDocsWithMissingRevisionDate 2022-09-18 13:41:20 +02:00
Uwe Steinmann
ff1c29561f update notes and release date 2022-09-18 12:54:53 +02:00
Uwe Steinmann
43e114101a issue msg if there are revisors in state 'sleeping' but no revision date 2022-09-18 12:53:05 +02:00
Uwe Steinmann
3e2e8e2591 getDocumentsInReception() returns status, though it should be 0 2022-09-18 12:52:04 +02:00
Uwe Steinmann
c2a8b4bbc6 getDocumentsInRevision() also returns status of revision log 2022-09-18 12:45:40 +02:00
Uwe Steinmann
3721fcfc22 check for documents with missing revision date 2022-09-18 12:44:56 +02:00
Uwe Steinmann
94d6dd0511 some more documentation of method 2022-09-18 12:44:20 +02:00
Uwe Steinmann
4329729ae0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-16 07:02:46 +02:00
Uwe Steinmann
724046e539 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-09-16 07:02:08 +02:00
Uwe Steinmann
94daaea5dd Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-09-16 07:01:57 +02:00
Uwe Steinmann
aa3d23b4cf new phrases for batch operations 2022-09-16 07:01:31 +02:00
Uwe Steinmann
68b8f31a25 handle iptc data with unknown key 2022-09-15 20:24:51 +02:00
Uwe Steinmann
a453c0e6ef Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-15 20:06:21 +02:00
Uwe Steinmann
f53b6fd3fd make column for preview image smaller 2022-09-15 20:04:30 +02:00
Uwe Steinmann
1495603a40 minor upates 2022-09-15 13:10:36 +02:00
Uwe Steinmann
cf025abcc1 do not set max_width of div.popupbox 2022-09-15 13:10:16 +02:00
Uwe Steinmann
aaf7733ab2 add conversion service from jpeg to text based on iptc data 2022-09-15 13:09:20 +02:00
Uwe Steinmann
d2eee3345f show iptc data of jpeg if available 2022-09-15 13:08:56 +02:00
Uwe Steinmann
2ee4773357 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-14 20:42:30 +02:00
Uwe Steinmann
5a806f729b check access on document in 'searchdocument' 2022-09-14 20:40:33 +02:00
Uwe Steinmann
3283d35db8 add batch operation to add/remove category 2022-09-14 18:08:34 +02:00
Uwe Steinmann
100b0bfa26 check access on folder in 'searchfolder' 2022-09-14 18:07:57 +02:00
Uwe Steinmann
fc68b025ef add foldmarks 2022-09-14 14:24:33 +02:00
Uwe Steinmann
c4d5ebd24d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-14 10:48:57 +02:00
Uwe Steinmann
c04561ef5f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-09-14 10:48:44 +02:00
Uwe Steinmann
f102971ace Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-09-14 10:48:27 +02:00
Uwe Steinmann
bdd0482ffa 1 new phrase, minor updates 2022-09-14 10:48:06 +02:00
Uwe Steinmann
56a0b14fe9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-13 20:04:31 +02:00
Uwe Steinmann
f2c8718586 keep paginator even if all hits are shown 2022-09-13 20:03:56 +02:00
Uwe Steinmann
4b69739b51 set 'All' in paginator active if selected 2022-09-13 20:03:22 +02:00
Uwe Steinmann
ea2173b4ed set 'All' in paginator active if selected 2022-09-13 20:02:14 +02:00
Uwe Steinmann
ad3ecdd586 image conversion falls back to gd library if imagick extension is not loaded 2022-09-13 13:23:48 +02:00
Uwe Steinmann
b8c94556ca Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-12 11:45:14 +02:00
Uwe Steinmann
e6ebabfc09 add parameter $dataparam to method pageList() 2022-09-12 11:44:44 +02:00
Uwe Steinmann
620a5ff99d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-12 09:40:30 +02:00
Uwe Steinmann
51d0a273bc fix placeholder of select menu for attribute defs 2022-09-12 09:39:42 +02:00
Uwe Steinmann
ad35601bf2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-12 09:37:05 +02:00
Uwe Steinmann
b3bc78fb96 set width of select tags, add class chzn-select to all select tags 2022-09-10 16:35:07 +02:00
Uwe Steinmann
8521b19c5d add some info on how ocr software can be integrated 2022-09-09 10:14:52 +02:00
Uwe Steinmann
49167c8149 some initial documentation on setting up email 2022-09-09 09:56:23 +02:00
Uwe Steinmann
c0afafd400 add documentation on how ldap auth works 2022-09-09 09:32:29 +02:00
Uwe Steinmann
57a90d93a6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-09 09:29:37 +02:00
Uwe Steinmann
ef3047aae9 add rewrite of header for php fpm 2022-09-09 09:29:08 +02:00
Uwe Steinmann
589b213fe7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-09 07:53:54 +02:00
Uwe Steinmann
c045ba702e used wrong var when listing approvals 2022-09-09 07:53:28 +02:00
Uwe Steinmann
fdf7126a68 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-09 06:57:17 +02:00
Uwe Steinmann
eecba62d8c use conversion manager 2022-09-09 06:56:56 +02:00
Uwe Steinmann
95111066f0 no need to set dms and user twice in view 2022-09-09 06:56:36 +02:00
Uwe Steinmann
5cd59a7a84 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-09 06:31:17 +02:00
Uwe Steinmann
506f822147 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-09-08 18:31:36 +02:00
Uwe Steinmann
7f304bed4a Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-09-08 18:31:23 +02:00
Uwe Steinmann
ab007e9490 updates 2022-09-08 18:31:05 +02:00
Uwe Steinmann
64f75009bf partially fix some old update tools 2022-09-08 17:50:01 +02:00
Uwe Steinmann
d3294518ad check if content file exists 2022-09-08 16:43:29 +02:00
Uwe Steinmann
4d5139fe82 translate all labels of menus before passing them to the method to show the menu 2022-09-08 09:50:33 +02:00
Uwe Steinmann
3ccdf862bf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-07 17:12:08 +02:00
Uwe Steinmann
12599bd712 use the conversion manager for preview images 2022-09-07 17:09:57 +02:00
Uwe Steinmann
607251e02d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-07 16:57:46 +02:00
Uwe Steinmann
1e26bc181b move onselect() method into timeline view, because it's only needed there 2022-09-07 16:43:49 +02:00
Uwe Steinmann
dd8f9c7186 set latest content if no version is set 2022-09-07 16:40:37 +02:00
Uwe Steinmann
e76df4c71f create original file name from new document name when uploading document from the library folder. 2022-09-07 09:26:27 +02:00
Uwe Steinmann
04ce8ea28f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-07 09:08:54 +02:00
Uwe Steinmann
56bbdefced add function getFilenameByDocname() 2022-09-07 08:56:08 +02:00
Uwe Steinmann
446f04c775 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-06 10:42:09 +02:00
Uwe Steinmann
769706fe9c add confirm box before changing owner 2022-09-06 10:41:39 +02:00
Uwe Steinmann
6c7d397837 set width of select2 to 'resolve' instead of '100%' 2022-09-06 10:41:12 +02:00
Uwe Steinmann
225817d468 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-05 11:28:04 +02:00
Uwe Steinmann
f9b4291512 add changes for 5.1.27 2022-09-02 09:40:52 +02:00
Uwe Steinmann
f4b621de36 make it work with SeedDMS 6 2022-09-02 09:39:40 +02:00
Uwe Steinmann
9a22f0390a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-02 08:04:55 +02:00
Uwe Steinmann
3f6755e7e5 add function renderQuotaData(), import hidden and disabled field 2022-09-02 08:04:15 +02:00
Uwe Steinmann
ab8d5ed502 run output through htmlspecialchars() 2022-09-02 08:03:54 +02:00
Uwe Steinmann
da3946adc6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-01 07:49:36 +02:00
Uwe Steinmann
1fa117281b add changes for 5.1.27 2022-09-01 06:32:21 +02:00
Uwe Steinmann
9a08430d5b add changes for 5.1.27 and 6.0.20 2022-08-31 20:59:12 +02:00
Uwe Steinmann
e5ad205169 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-31 20:57:17 +02:00
Uwe Steinmann
a83c497deb add changes for 5.1.27 2022-08-31 20:56:59 +02:00
Uwe Steinmann
80067393f1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-31 20:39:43 +02:00
Uwe Steinmann
52f08f99f0 make select fields in search form always multiple 2022-08-31 20:39:12 +02:00
Uwe Steinmann
f6d0fb85fd add parameter $alwaysmultiple getAttributeEditField() which makes select fields always multiple 2022-08-31 20:38:20 +02:00
Uwe Steinmann
4ac560c8d1 value of extracols can be an array 2022-08-31 20:32:51 +02:00
Uwe Steinmann
c981129a4b sort by 'i' or 'n' is like 'ia' or 'na' 2022-08-31 20:32:32 +02:00
Uwe Steinmann
f2a211b1bf allow to search for multiple attribute values 2022-08-31 20:31:59 +02:00
Uwe Steinmann
107d9a8684 check if file in drop folder is readable 2022-08-31 08:38:51 +02:00
Uwe Steinmann
16d068e430 add changes for 5.1.27 2022-08-30 18:14:15 +02:00
Uwe Steinmann
8f4c2f454b user uid instead of cn in distinguished name to auth. user 2022-08-30 18:11:00 +02:00
Uwe Steinmann
3fd63b98d9 add missing column in header of attribute values list 2022-08-25 08:23:29 +02:00
Uwe Steinmann
0539945bf1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-24 08:29:36 +02:00
Uwe Steinmann
748041ffd8 allow batch operation on fulltext search result 2022-08-24 07:58:02 +02:00
Uwe Steinmann
d271dfbf1f folders and docs can be marked for batch operation 2022-08-24 07:57:14 +02:00
Uwe Steinmann
9f34304a41 remove spaces in empty lines 2022-08-24 07:55:10 +02:00
Uwe Steinmann
93ade78deb pass list of marked docs/folders to view 2022-08-24 07:54:04 +02:00
Uwe Steinmann
9c333447b2 show text of doc status in lists on large displays 2022-08-23 12:48:13 +02:00
Uwe Steinmann
dc7cf3ce86 remove duplicate export form 2022-08-23 08:30:27 +02:00
Uwe Steinmann
eb1034d1cc allow wide modal boxes to be 642px height which is enough for an iframe with 600px height 2022-08-19 15:37:12 +02:00
Uwe Steinmann
3a9abc5009 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-19 15:01:04 +02:00
Uwe Steinmann
e827a6c2d7 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-08-19 15:00:50 +02:00
Uwe Steinmann
208fb91788 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-08-19 15:00:40 +02:00
Uwe Steinmann
2eeb3771ee add missing translation 2022-08-19 15:00:23 +02:00
Uwe Steinmann
d2a3ca301c fix import of extension from repository 2022-08-19 14:50:25 +02:00
Uwe Steinmann
4bbf6ddecf output additional filters only if attributes exists 2022-08-19 10:06:27 +02:00
Uwe Steinmann
fe419f4857 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-19 08:40:11 +02:00
Uwe Steinmann
4eef2bd0b0 allow to change owner of folders, change owner only possible of search returned hits 2022-08-18 20:41:11 +02:00
Uwe Steinmann
20ac984a64 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-18 18:46:07 +02:00
Uwe Steinmann
e1aaf3a7b8 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-08-18 18:45:09 +02:00
Uwe Steinmann
fef53d3bc9 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-08-18 18:44:53 +02:00
Uwe Steinmann
377498b934 update translations 2022-08-18 18:44:34 +02:00
Uwe Steinmann
90ab728c6c add indonesian 2022-08-18 18:42:57 +02:00
Uwe Steinmann
966a6eb976 add batch operation to change owner 2022-08-18 18:40:51 +02:00
Uwe Steinmann
cac7608e0b backport export of search result from 6.0.x 2022-08-18 13:49:27 +02:00
Uwe Steinmann
751918ef17 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-18 13:21:53 +02:00
Uwe Steinmann
bfaf43c6e9 sync code with seeddms6 (no functional changes) 2022-08-18 13:18:00 +02:00
Uwe Steinmann
8c12ecd0b2 add fold marks 2022-08-18 13:05:02 +02:00
Uwe Steinmann
6211976f3c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-18 10:13:08 +02:00
Uwe Steinmann
d40a88125d add margin bottom to accordion 2022-08-18 10:12:41 +02:00
Uwe Steinmann
73d748a025 move export below search button 2022-08-18 10:08:28 +02:00
Uwe Steinmann
e5057d8223 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-18 10:04:00 +02:00
Uwe Steinmann
540d2fbab9 add changes for 5.1.27 2022-08-18 10:02:53 +02:00
Uwe Steinmann
475ba8fbfb use conversion mgr for creating previews 2022-08-18 10:02:13 +02:00
Uwe Steinmann
6d9cc4039b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-18 09:25:13 +02:00
Uwe Steinmann
256a8ec6ca add changes for 5.1.27 2022-08-18 08:38:50 +02:00
Uwe Steinmann
0344ad0c80 open accordion if a filter parameter is set 2022-08-18 08:38:09 +02:00
Uwe Steinmann
ec570c9ba4 add parameter to printAccordion() in order to open/close it 2022-08-18 08:37:25 +02:00
Uwe Steinmann
f12a9094db Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-17 20:53:41 +02:00
Uwe Steinmann
93844fadbc fix translation, add title to 'list documents' icon 2022-08-17 20:53:08 +02:00
Uwe Steinmann
64a11add81 allow to delete own processes 2022-08-17 20:52:48 +02:00
Uwe Steinmann
365661afb8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-16 17:06:45 +02:00
Uwe Steinmann
4f1bb55a89 use '/folder' instead of '/folder/' 2022-08-16 17:06:07 +02:00
Uwe Steinmann
f3e7d04674 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-12 10:55:37 +02:00
Uwe Steinmann
196f6f7658 add ':' after err msg 2022-08-12 10:54:22 +02:00
Uwe Steinmann
a0db4bcc6d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-12 10:53:32 +02:00
Uwe Steinmann
99f28f0cfc link behind logo in header can be set in extension 2022-08-12 10:40:54 +02:00
Uwe Steinmann
fdc7aa5ab7 drag&drop handler can call function after upload 2022-08-11 17:47:28 +02:00
Uwe Steinmann
db3fcbaaab add changes for 5.1.27 2022-08-11 07:59:16 +02:00
Uwe Steinmann
3c5a11fa08 set default for currenttab 2022-08-09 15:54:48 +02:00
Uwe Steinmann
d02f813205 add tabs above folder content 2022-08-09 15:54:12 +02:00
Uwe Steinmann
b54eb4dc61 return true in case of succees 2022-08-09 15:53:05 +02:00
Uwe Steinmann
e31c532c68 get rid of old code, use actions for 'version' and 'file' 2022-08-05 13:32:46 +02:00
Uwe Steinmann
014bcc009d first check if parameter 'action' is set, return false if preRun fails 2022-08-01 12:43:56 +02:00
Uwe Steinmann
5378d6e7d9 pass class name to preRun, invoke() returns false if preRun fails 2022-08-01 12:11:51 +02:00
Uwe Steinmann
59d24bde03 split run() into seperate methods() 2022-08-01 12:11:10 +02:00
Uwe Steinmann
ce084ccd45 add changes for 5.1.27 2022-07-29 21:45:42 +02:00
Uwe Steinmann
54d802b36a do not call run() but use __invoke() 2022-07-29 21:44:04 +02:00
Uwe Steinmann
4179a0398f set title of document/folder delete button 2022-07-29 21:43:43 +02:00
Uwe Steinmann
1051f669f4 create request 2022-07-29 21:41:43 +02:00
Uwe Steinmann
8b75ffaea1 call hook preRun and check result 2022-07-29 21:41:12 +02:00
Uwe Steinmann
718d922950 make some methods public 2022-07-29 21:40:32 +02:00
Uwe Steinmann
8ceb8d1e6a get action from request, run hook preRun and check for return value 2022-07-29 21:37:59 +02:00
Uwe Steinmann
1cce969ba7 pass request to controller 2022-07-29 21:36:40 +02:00
Uwe Steinmann
7bf671c20a pass request to view 2022-07-29 21:36:22 +02:00
Uwe Steinmann
507d47869f initial support for setting verbosity 2022-07-28 21:11:29 +02:00
Uwe Steinmann
b3cb5de21f output overall stats of added, updated, unchanged docs and folders 2022-07-28 11:59:27 +02:00
Uwe Steinmann
3a4220fe18 check if exists 2022-07-28 11:43:15 +02:00
Uwe Steinmann
9a0992751d fix parameters for validate() 2022-07-27 09:37:58 +02:00
Uwe Steinmann
c21467a24d pass flag $new=true to validate() 2022-07-27 09:32:59 +02:00
Uwe Steinmann
87a9db64f8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-27 09:25:53 +02:00
Uwe Steinmann
1f6a509876 set flag $new when calling validate() 2022-07-27 09:24:59 +02:00
Uwe Steinmann
b8fd313e2d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-26 14:33:23 +02:00
Uwe Steinmann
85c190aad2 add changes for 6.0.20 2022-07-26 14:32:34 +02:00
Uwe Steinmann
995f7a5bad propperly get workflow log 2022-07-26 13:39:46 +02:00
Uwe Steinmann
29ec6ff2c9 run invoke instead of run() 2022-07-26 11:57:45 +02:00
Uwe Steinmann
6421aa94ed pass array passed to __invoke() to hooks preRun and postRun 2022-07-26 11:33:12 +02:00
Uwe Steinmann
525eea082c depend on symfony/http-foundation 2022-07-26 11:31:36 +02:00
Uwe Steinmann
6557d2edc9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-15 15:31:52 +02:00
Uwe Steinmann
607dcc41b9 skip internal conversion service for images if imagick extension is missing 2022-07-15 15:27:15 +02:00
Uwe Steinmann
3e45d6a13f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-15 12:10:15 +02:00
Uwe Steinmann
9fcebb898a finally got rid of ancient method sanitizeString() 2022-07-15 09:32:58 +02:00
Uwe Steinmann
502ea86d8d fix merge error 2022-07-08 18:49:02 +02:00
Uwe Steinmann
418c42ae59 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-08 18:46:17 +02:00
Uwe Steinmann
c31d12b44c set splash message 2022-07-08 13:17:27 +02:00
Uwe Steinmann
5c4ae08b4a sync with RemoveFolder 2022-07-08 13:17:02 +02:00
Uwe Steinmann
be2ed2f061 fix some comments and variable names 2022-07-08 13:16:40 +02:00
Uwe Steinmann
ca2739b96e add hooks folderRowAction and documentRowAction 2022-07-07 16:47:42 +02:00
Uwe Steinmann
fac375a371 do not use callHook() because the return value of the last hook must be passed to the next hook 2022-07-07 16:47:21 +02:00
Uwe Steinmann
16cdb8a323 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-06 14:01:30 +02:00
Uwe Steinmann
53db4c2d3a add changes for 5.1.27 2022-07-06 09:21:17 +02:00
Uwe Steinmann
96ef457183 first create a list of action buttons and then render it in documetListRow 2022-07-06 09:20:44 +02:00
Uwe Steinmann
d47e2377bb do not explode() attrtype and objtype, if an array is needed it can be set in conf.php 2022-07-06 09:16:47 +02:00
Uwe Steinmann
dd8f1b7a8e fix SeedDMS_Core_DMS::addAttributeDefinition() when objtype is 0 2022-07-06 09:15:12 +02:00
Uwe Steinmann
0799f908f1 remove old get_magic_quotes code 2022-07-01 09:51:30 +02:00
Uwe Steinmann
f8b78c7212 include vendor/autoload.php after setting include path 2022-07-01 09:50:37 +02:00
Uwe Steinmann
d991978144 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-28 17:42:10 +02:00
Uwe Steinmann
65801f1181 start version 5.1.27 2022-06-28 17:08:45 +02:00
Uwe Steinmann
40bd123fe3 Merge branch 'seeddms-5.1.x' 2022-06-27 17:01:18 +02:00
Uwe Steinmann
2bc5b26175 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-22 22:13:50 +02:00
Uwe Steinmann
a51a068e28 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-06-22 22:13:36 +02:00
Uwe Steinmann
611e9e7006 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-06-22 22:13:24 +02:00
Uwe Steinmann
42a3859a26 various language updates 2022-06-22 22:13:14 +02:00
Uwe Steinmann
7deddf8f4e set role to button for each nav-item 2022-06-22 16:48:26 +02:00
Uwe Steinmann
2c42fd6a23 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-22 16:45:48 +02:00
Uwe Steinmann
c9e61ccf30 set role to button for each nav-item 2022-06-22 16:45:37 +02:00
Uwe Steinmann
6b5826ded4 check if totalreceipts != 0 2022-06-17 20:10:34 +02:00
Uwe Steinmann
dee7977016 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-16 17:07:21 +02:00
Uwe Steinmann
23c6a6b5d9 allow ext/*/node_modules 2022-06-16 12:45:56 +02:00
Uwe Steinmann
d3e6cecaa7 do not call hook documentNavigationBar with callHook, but iterate over hookObjs 2022-06-16 12:44:53 +02:00
Uwe Steinmann
c3f5a637f6 getHookObjects() takes parent classes into account 2022-06-16 12:43:50 +02:00
Uwe Steinmann
199f26703c set default of $class to 'Style' 2022-06-16 12:42:53 +02:00
Uwe Steinmann
573fe293ac better layout of footer, especially of disclaimer is turned off 2022-06-10 16:44:11 +02:00
Uwe Steinmann
8bc93eac03 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-10 08:53:18 +02:00
Uwe Steinmann
9eae4c4863 make getConfigDir() public, because it is used in install/install.php 2022-06-10 08:51:33 +02:00
Uwe Steinmann
7a7fca84b4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-09 16:56:06 +02:00
Uwe Steinmann
6e6851d165 fix upload with fine-uploader 2022-06-09 16:00:38 +02:00
Uwe Steinmann
89c6dc580a fix query if rootFolder or startFolder is set 2022-06-09 15:18:53 +02:00
Uwe Steinmann
12e9a803bc set cmd and mimetype in returned json data in case of an error when indexing a document/folder 2022-06-09 12:44:17 +02:00
Uwe Steinmann
6af82069e8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-09 09:04:17 +02:00
Uwe Steinmann
83fa62a386 add imagick to list of required php extensions, sqlite -> sqlite3 2022-06-08 16:08:18 +02:00
Uwe Steinmann
3dd4fb145b add mimetype as title attribute in folder listing 2022-06-08 16:05:39 +02:00
Uwe Steinmann
6cb9556e87 add entry for 5.1.26 2022-06-08 15:53:26 +02:00
Uwe Steinmann
0d5a1ba3c7 rawurlencode path of files and folders 2022-06-08 15:52:27 +02:00
Uwe Steinmann
821d9b1470 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-08 11:21:19 +02:00
Uwe Steinmann
82e25025ab add entry for 5.1.26 2022-06-07 17:45:16 +02:00
Uwe Steinmann
4f995dcd23 set propper date value in custom date fields 2022-06-07 17:44:42 +02:00
Uwe Steinmann
4762b06741 fix validating custom attribute of type 'date' 2022-06-07 17:43:59 +02:00
Uwe Steinmann
38dd38d7c6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-02 17:37:21 +02:00
Uwe Steinmann
249e42f956 remove colon after name of config vars 2022-06-01 15:02:00 +02:00
Uwe Steinmann
dc4c26916b add request uri to start line of sql log 2022-06-01 15:01:38 +02:00
Uwe Steinmann
6254c8a41a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-31 20:05:59 +02:00
Uwe Steinmann
fce2ba2bd7 fix getLongReadableDate() 2022-05-31 20:05:38 +02:00
Uwe Steinmann
490fe09390 add changes for 6.0.19 2022-05-31 14:27:28 +02:00
Uwe Steinmann
a91003d5fa do not include bootbox.min.js 2022-05-31 14:27:05 +02:00
Uwe Steinmann
7ba81f50e3 fix deletion of task when using bootstrap4 theme 2022-05-31 14:25:23 +02:00
Uwe Steinmann
c6470efc6f fix deleting a document by clicking on the icon in the document list 2022-05-31 14:24:45 +02:00
Uwe Steinmann
d2c680280b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-30 17:48:18 +02:00
Uwe Steinmann
6d5d1a7703 check if IndexedDocument() set error msg, call right hook after indexing document 2022-05-30 13:07:30 +02:00
Uwe Steinmann
6179e517b2 add changes for 5.1.26 2022-05-30 09:41:12 +02:00
Uwe Steinmann
0d5536f198 add conversion service from tiff, gif to png 2022-05-30 09:41:02 +02:00
Uwe Steinmann
a11bba23e4 check if logger is set before using it 2022-05-30 09:15:08 +02:00
Uwe Steinmann
c52abe7198 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-25 11:34:08 +02:00
Uwe Steinmann
93f6b01c7f do not allow to set revision date if document status is 'in revision' 2022-05-25 11:33:44 +02:00
Uwe Steinmann
ece2eec128 add sqlite to list of required php extensions 2022-05-25 08:19:16 +02:00
Uwe Steinmann
bb75ca5896 add change in 5.1.26 2022-05-24 08:39:54 +02:00
Uwe Steinmann
298f345cea fix clear clipboard link in menu 2022-05-24 08:39:21 +02:00
Uwe Steinmann
4e7fb4a6e9 add btn-sm to remove button, manager cannot remove himself from group 2022-05-23 16:14:04 +02:00
Uwe Steinmann
d641a8d2ed Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-23 09:34:55 +02:00
Uwe Steinmann
a1f2ecf22d set width of progress bar in % instead of px 2022-05-23 09:34:22 +02:00
Uwe Steinmann
4ffe010d06 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-22 11:15:45 +02:00
Uwe Steinmann
c974c29578 fix setting max upload file size 2022-05-21 19:35:15 +02:00
Uwe Steinmann
332a7b2f3d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-21 19:11:11 +02:00
Uwe Steinmann
56cda2798f add iterm for 5.1.26 2022-05-21 19:10:53 +02:00
Uwe Steinmann
218934fea6 make sendFileToServer() and createStatusbar() public, add getMaxFileSize() and getMaxFileSizeMsg() 2022-05-21 19:10:06 +02:00
Uwe Steinmann
4483b21d05 use a instead of button from .btn-file, because firefox submits the form when clicking on it 2022-05-21 19:06:59 +02:00
Uwe Steinmann
bf5aedf1b5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-21 11:19:23 +02:00
Uwe Steinmann
80799aa1d4 add changes for 5.1.26 2022-05-21 11:04:48 +02:00
Uwe Steinmann
1f6a3c7f77 add list of notifications to debug menu 2022-05-21 11:00:16 +02:00
Uwe Steinmann
987cc5d164 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-21 10:59:30 +02:00
Uwe Steinmann
cb18ea8756 add list of notification services 2022-05-21 10:59:08 +02:00
Uwe Steinmann
f852ae0827 log type of receiver 2022-05-21 10:58:22 +02:00
Uwe Steinmann
369dc80110 log type of receiver 2022-05-21 10:57:50 +02:00
Uwe Steinmann
eb4b28ea8c fix php warnings and propperly handle failure of cancelCheckout() 2022-05-20 17:40:04 +02:00
Uwe Steinmann
20b03dcbe0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-20 13:54:01 +02:00
Uwe Steinmann
c8b7eea3cf add change for 5.1.26 2022-05-20 12:32:31 +02:00
Uwe Steinmann
af93db836e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-20 12:31:25 +02:00
Uwe Steinmann
649fcbbc8b add all custom attributes of type date to calendar 2022-05-20 12:05:04 +02:00
Uwe Steinmann
8f6402c51f extension config can filter attributes by type 2022-05-20 12:04:24 +02:00
Uwe Steinmann
f718f565ff SeedDMS_Core_DMS::getAllAttributeDefinitions() has second parameter to filter attributes by type 2022-05-20 12:03:47 +02:00
Uwe Steinmann
1b15008870 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-19 19:26:19 +02:00
Uwe Steinmann
55126a689b add optional parameter $op to SeedDMS_Core_AttributeDefinition::getObjects(), SeedDMS_Core_AttributeDefinition::getObjects() will not filter by value if null is passed 2022-05-19 19:23:10 +02:00
Uwe Steinmann
ecc70bc99a make progress bar a block for better positioning of popup box 2022-05-19 08:07:32 +02:00
Uwe Steinmann
afddc5a4d6 remove spaces when showing content of popup box 2022-05-19 08:05:47 +02:00
Uwe Steinmann
f306c186cf set line-height, max-width, white-space of popupbox 2022-05-19 08:05:24 +02:00
Uwe Steinmann
cc341f6ed3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-17 08:20:16 +02:00
Uwe Steinmann
c9d6d840d9 use preview converters or conversion mgr 2022-05-17 07:51:17 +02:00
Uwe Steinmann
1ae35ca6ad do not show debug menu if all items are inaccessible 2022-05-17 07:45:05 +02:00
Uwe Steinmann
983af33300 use conversion mgr 2022-05-17 07:43:43 +02:00
Uwe Steinmann
49a1b33df4 check extension dependency on shell commands 2022-05-16 15:54:04 +02:00
Uwe Steinmann
9b07f6e943 pass logger to fulltextservice 2022-05-16 15:45:23 +02:00
Uwe Steinmann
30c2b8a493 do not set orderby when clicking on link in sidebar as it is undefined anyway 2022-05-13 17:53:38 +02:00
Uwe Steinmann
9a76df52bd fix documentation of execute() methods 2022-05-13 07:27:24 +02:00
Uwe Steinmann
307b524d11 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-12 17:35:36 +02:00
Uwe Steinmann
395e60ca71 logger can be set 2022-05-12 09:03:27 +02:00
Uwe Steinmann
c8ec7d70f0 set logger and add option to turn it off again 2022-05-12 09:02:24 +02:00
Uwe Steinmann
dfedd201dd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-10 18:33:41 +02:00
Uwe Steinmann
38ac4e6005 add changes for 5.1.16 2022-05-09 15:27:46 +02:00
Uwe Steinmann
9522d38cfb fix editing of custom attributes of type date 2022-05-09 15:27:19 +02:00
Uwe Steinmann
3388a14793 fix line indenting 2022-05-09 15:26:45 +02:00
Uwe Steinmann
92ce4ff1bc add more types to getStatisticalData() 2022-05-09 15:22:35 +02:00
Uwe Steinmann
6fd868c5a7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-09 10:03:03 +02:00
Uwe Steinmann
2b6a68cc28 restrict operation on selected documents 2022-05-09 09:58:05 +02:00
Uwe Steinmann
2aa67b93a0 handle case when certain docs are passed to removefromprocesses 2022-05-09 09:55:48 +02:00
Uwe Steinmann
70114bbd30 if documents are paѕsed to __removeFromProcesses(), only the latest version will be updated 2022-05-09 09:54:33 +02:00
Uwe Steinmann
c9e93c329c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-06 16:39:02 +02:00
Uwe Steinmann
05092f6943 add entry for 5.1.26 2022-05-06 12:54:42 +02:00
Uwe Steinmann
d234673748 add hook additionalDocumentContentInfo 2022-05-06 12:54:11 +02:00
Uwe Steinmann
dbb2340269 backport assigning processes to other user 2022-05-06 09:54:55 +02:00
Uwe Steinmann
5950be6292 backport __removeFromProcesses from 6.0.x 2022-05-06 09:52:00 +02:00
Uwe Steinmann
87fe831973 removeFromProcesses() will not touch documents for which the new user does not have at least read access 2022-05-05 11:03:28 +02:00
Uwe Steinmann
5dab792dba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-03 18:22:14 +02:00
Uwe Steinmann
c4f9fa8c08 pass conversion mgr to view 2022-05-03 18:22:03 +02:00
Uwe Steinmann
21989fadbb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-03 18:19:51 +02:00
Uwe Steinmann
99d1d1455c use conversion manager 2022-05-03 18:14:50 +02:00
Uwe Steinmann
17d1f2bffe fix checks in __removeFromProcesses() 2022-05-03 16:45:21 +02:00
Uwe Steinmann
7c1c81f7fc addRevisor and addRecipient return id of log entry 2022-05-03 16:44:43 +02:00
Uwe Steinmann
bef41ad838 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-03 08:13:36 +02:00
Uwe Steinmann
da17e00422 place submit button outside of content container 2022-05-03 06:43:10 +02:00
Uwe Steinmann
49842f9728 readd hook actionMenu 2022-05-03 06:42:25 +02:00
Uwe Steinmann
939a7dbce2 use require_once instead of include 2022-05-02 22:11:29 +02:00
Uwe Steinmann
e67dce277e make getLongReadableDate() behave like getReadableDate() 2022-05-02 11:45:32 +02:00
Uwe Steinmann
52fbe0128f use small button to remove link 2022-05-01 15:08:58 +02:00
Uwe Steinmann
637c9279aa make iframe height = 1.41 time width 2022-05-01 15:08:35 +02:00
Uwe Steinmann
bfc436b5f0 set overflow: hidden for legend 2022-05-01 15:02:26 +02:00
Uwe Steinmann
b412f113bf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-30 15:55:29 +02:00
Uwe Steinmann
e20d7a21f8 output number of folders/docs only if not 0 2022-04-30 15:55:19 +02:00
Uwe Steinmann
7370eebba7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-30 15:52:31 +02:00
Uwe Steinmann
b5120113f7 fix status column of folder 2022-04-30 15:52:18 +02:00
Uwe Steinmann
d13f37cfec Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-30 14:58:41 +02:00
Uwe Steinmann
50c4931834 fix font-size of status column, use icons for folder count in status column 2022-04-30 14:58:28 +02:00
Uwe Steinmann
49c2e54e94 add missing status to getOverallStatusIcon() 2022-04-30 14:50:08 +02:00
Uwe Steinmann
8c43c709b0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-30 14:40:20 +02:00
Uwe Steinmann
5cd7dbec89 - move folder status column into own method 2022-04-30 14:39:49 +02:00
Uwe Steinmann
bcd15517eb make setViewOnlineFileTypesFromString() and setEditOnlineFileTypesFromString() public 2022-04-30 14:19:56 +02:00
Uwe Steinmann
16c560d549 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-30 14:11:51 +02:00
Uwe Steinmann
2194c92801 - use more icons in status column of document/folder list, fix getReadableDate() 2022-04-30 14:10:51 +02:00
Uwe Steinmann
8907c2f20a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-29 18:32:59 +02:00
Uwe Steinmann
af6f48db48 use new method getMaximumUploadSize() 2022-04-29 18:30:46 +02:00
Uwe Steinmann
9d2dd94662 readd space below navigation 2022-04-29 18:30:21 +02:00
Uwe Steinmann
03cc220380 getReadableDate() returns empty string if emptry string or null is passed 2022-04-29 18:29:17 +02:00
Uwe Steinmann
8d4492164d add method getMaximumUploadSize(), make various methods protected 2022-04-29 18:27:49 +02:00
Uwe Steinmann
e383434a3d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-29 07:06:58 +02:00
Uwe Steinmann
1aa52e3164 add CVE numbers 2022-04-29 07:06:33 +02:00
Uwe Steinmann
b854d64757 fix merge errors 2022-04-29 07:04:52 +02:00
Uwe Steinmann
2014eae334 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-28 16:03:00 +02:00
Uwe Steinmann
8d7791a0c5 do not underline a.accordion2-toggle 2022-04-28 13:31:48 +02:00
Uwe Steinmann
1916147d43 undo fixed menubars to head 2022-04-28 13:30:40 +02:00
Uwe Steinmann
8b4fc459ab fix validating multi value attributes 2022-04-28 13:29:44 +02:00
Uwe Steinmann
34c7132847 translate '2_factor_auth' 2022-04-27 21:35:45 +02:00
Uwe Steinmann
c8bca55368 getFormData() can handle undefined data 2022-04-27 12:30:15 +02:00
Uwe Steinmann
e5755d593f update to bootstrap 4.6.1, make navigation, breadcrumbs fixed to top, add new printAccordion2() method 2022-04-26 18:50:22 +02:00
Uwe Steinmann
24146db478 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-25 10:19:40 +02:00
Uwe Steinmann
b9a993c2b3 start new version 5.1.26 2022-04-25 10:12:37 +02:00
Uwe Steinmann
da94f54294 start new version 5.1.25 2022-04-25 10:12:09 +02:00
Uwe Steinmann
6c3ecaf9a1 Merge branch 'seeddms-5.1.x' 2022-04-22 13:14:19 +02:00
Uwe Steinmann
15182713ea Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-19 18:37:52 +02:00
Uwe Steinmann
dd37e509b9 make printAccordion() public 2022-04-19 18:37:41 +02:00
Uwe Steinmann
7c29d1d4e8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-19 18:12:38 +02:00
Uwe Steinmann
24c02b77f4 add item for 5.1.25 2022-04-19 18:12:13 +02:00
Uwe Steinmann
4bfe18a7de fix check of extension available from repos 2022-04-19 18:11:24 +02:00
Uwe Steinmann
58e8306bb4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-19 14:14:50 +02:00
Uwe Steinmann
5ec682592e add title to button for showing changelog 2022-04-19 11:23:17 +02:00
Uwe Steinmann
31bcd5d9bf more access restrictions on files in extensions 2022-04-19 11:02:27 +02:00
Uwe Steinmann
eca2701da1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-14 17:01:34 +02:00
Uwe Steinmann
612a6d1473 pass 'add' or 'update' to hook 'addDocumentContentFile' 2022-04-14 17:00:44 +02:00
Uwe Steinmann
0198955905 add new hook cleanUpDocument 2022-04-14 16:59:42 +02:00
Uwe Steinmann
9cab1880a7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-12 13:26:03 +02:00
Uwe Steinmann
7a0f2a784e add more extension in get_extension() 2022-04-12 08:14:53 +02:00
Uwe Steinmann
202e607959 include files with require_once, check if $settings are set already 2022-04-12 07:15:56 +02:00
Uwe Steinmann
b558844841 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-08 12:44:34 +02:00
Uwe Steinmann
ad0f3b2cfe better error checking if conversion fails 2022-04-08 12:44:10 +02:00
Uwe Steinmann
91a081325d add commands to convert message/rfc822 to pdf 2022-04-08 07:25:49 +02:00
Uwe Steinmann
3a8ab4286c add expiring documents to calendar 2022-04-08 06:51:40 +02:00
Uwe Steinmann
f235a8b8d8 add item for 5.1.25 2022-04-07 18:18:43 +02:00
Uwe Steinmann
1a9825f999 add expired docs in the future 2022-04-07 18:18:09 +02:00
Uwe Steinmann
b48318d1da Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-07 14:39:21 +02:00
Uwe Steinmann
f1e200ad83 use new method getLogger() 2022-04-07 14:38:49 +02:00
Uwe Steinmann
de31db0bec add new method getLogger() 2022-04-07 14:38:32 +02:00
Uwe Steinmann
b177e77389 addEvent() returns new event 2022-04-07 13:57:49 +02:00
Uwe Steinmann
f8ac9090fb add optional parameter to getWorkflow() to retrieve data from tblWorkflowDocumentContent 2022-04-06 19:54:46 +02:00
Uwe Steinmann
d80d1be9de include inc.ClassAccessOperation.php because it is need at many places and the back button of the ErrorDlg works again 2022-04-04 08:42:26 +02:00
Uwe Steinmann
f24330740a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-04 08:26:51 +02:00
Uwe Steinmann
1e0172dd8f move workflow protocol on workflow tab 2022-04-02 11:07:31 +02:00
Uwe Steinmann
d90b01111e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-31 06:53:21 +02:00
Uwe Steinmann
38ea04c20d fix sql in getEventsInInterval() if user is taken into account 2022-03-31 06:52:27 +02:00
Uwe Steinmann
f0e05463af make methods public, add methods getUser() and setUser() 2022-03-31 06:48:32 +02:00
Uwe Steinmann
43fe015049 add task to informa about upcoming events 2022-03-31 06:48:05 +02:00
Uwe Steinmann
6f4a1bab68 make methods public, add methods getUser() and setUser() 2022-03-31 06:36:48 +02:00
Uwe Steinmann
7a1836d33a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-30 11:39:47 +02:00
Uwe Steinmann
e483796c85 add field to filter user list 2022-03-30 11:36:35 +02:00
Uwe Steinmann
687d7eb0dd add entry for 6.0.18 2022-03-28 21:34:48 +02:00
Uwe Steinmann
9e92524fdb escape role name to prevent xss attack 2022-03-28 21:33:48 +02:00
Uwe Steinmann
ef0f9cfc46 add entry for 5.1.25 2022-03-28 19:11:38 +02:00
Uwe Steinmann
78e701d585 date can be passed to AddEvent 2022-03-28 19:11:00 +02:00
Uwe Steinmann
fe03d58100 adjust colors and title of event 2022-03-28 19:10:45 +02:00
Uwe Steinmann
58de462ff5 show user who has created event 2022-03-28 19:10:03 +02:00
Uwe Steinmann
2134754e91 show only events of logged in user unless it is admin 2022-03-28 19:09:02 +02:00
Uwe Steinmann
283d051d3a initial code to check for upcomming events in calendar 2022-03-28 17:36:20 +02:00
Uwe Steinmann
988dc9deff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-28 08:31:40 +02:00
Uwe Steinmann
b8924666b6 ensure log file ends with .log 2022-03-27 17:03:36 +02:00
Uwe Steinmann
d68c922152 fix possible DoS 2022-03-26 18:48:04 +01:00
Uwe Steinmann
f5148c00c2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-25 08:44:57 +01:00
Uwe Steinmann
6de426bbc3 call hook 'filenameDownloadItem' in search export and transmittal download 2022-03-25 08:44:32 +01:00
Uwe Steinmann
11942c825d filename can be passed to addItem() 2022-03-25 07:21:37 +01:00
Uwe Steinmann
8d3077cd34 set placeholder of textarea in formField() 2022-03-24 16:09:03 +01:00
Uwe Steinmann
48613b5897 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-23 11:27:53 +01:00
Uwe Steinmann
6fc17be5d9 fix xss attack in DefaultKeywords 2022-03-23 11:27:42 +01:00
Uwe Steinmann
a5a2b877ce add entry for 6.0.18 2022-03-09 16:12:23 +01:00
Uwe Steinmann
b65d940259 move methods for updating, deleting transmittal item into trait, makes it work in bootstrap4 2022-03-09 16:11:43 +01:00
Uwe Steinmann
b88e05fe22 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-09 08:39:34 +01:00
Uwe Steinmann
a7212a0708 read categories and keywords from drag and drop area 2022-03-09 08:39:20 +01:00
Uwe Steinmann
2fa2d33fe9 categories and keywords can be set in uploaddocument 2022-03-09 08:38:19 +01:00
Uwe Steinmann
a4f96c76d6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-07 15:20:24 +01:00
Uwe Steinmann
22b054f764 comment and attributes can passed to document uploaded by drag&drop 2022-03-07 15:19:42 +01:00
Uwe Steinmann
85f7332e06 comment and attributes can be passed to uploaddocument 2022-03-07 15:19:22 +01:00
Uwe Steinmann
1e8da679b5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-04 09:36:00 +01:00
Uwe Steinmann
c5dbe1995d fix possible cross side scripting 2022-03-04 08:27:46 +01:00
Uwe Steinmann
1c4fbbed96 fix php warning in getAttributeEditField() 2022-03-04 08:27:17 +01:00
Uwe Steinmann
4d0b9a6511 start new version 1.0.17 2022-03-04 08:23:49 +01:00
Uwe Steinmann
27b207f4db add note 2022-03-04 08:21:03 +01:00
Uwe Steinmann
8fdc151198 check if passed categories actually exist 2022-03-04 08:20:45 +01:00
Uwe Steinmann
a4afc1cfa7 cast status to int when indexing it 2022-03-04 08:18:30 +01:00
Uwe Steinmann
210f5cb1c4 no need to include inc.ClassEmailNotify.php 2022-03-04 08:17:34 +01:00
Uwe Steinmann
e4fb5d5255 set session to null if login fails to prevent warning when error msg is shown 2022-03-04 08:17:07 +01:00
Uwe Steinmann
fe43b944c9 throw exeption in find() 2022-03-04 08:15:52 +01:00
Uwe Steinmann
8e542b448f include Exception.php 2022-03-04 08:15:38 +01:00
Uwe Steinmann
c83c2c21f4 add note for 5.1.25 2022-03-04 08:14:41 +01:00
Uwe Steinmann
37d49474fd fix searching for document content with a custom attribute having a value set 2022-03-04 08:14:20 +01:00
Uwe Steinmann
10876c6495 check if attribute is a string before using it in an sql statement 2022-03-03 12:45:49 +01:00
Uwe Steinmann
5b5ac45e21 no need to create access restriction class 2022-03-03 12:41:42 +01:00
Uwe Steinmann
a156932843 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-03 09:04:47 +01:00
Uwe Steinmann
e107139f1b use backticks in sql statement 2022-03-02 07:42:31 +01:00
Uwe Steinmann
c218f9ab29 fix line indenting 2022-03-02 07:42:15 +01:00
Uwe Steinmann
c355fecc8b set _public to a bool value, used to be int 2022-03-02 07:37:58 +01:00
Uwe Steinmann
bc0e03c6c6 set default value of setDate() to null 2022-03-02 07:37:20 +01:00
Uwe Steinmann
313f518548 add isType() for links and files, set _public to a bool value 2022-03-02 07:36:16 +01:00
Uwe Steinmann
54fb986a59 rename getApproversList() to __getApproversList(), it's deprecated 2022-03-02 07:35:24 +01:00
Uwe Steinmann
1e5930fb98 fix line indenting 2022-03-02 07:34:32 +01:00
Uwe Steinmann
fc71efe437 enhance description of addAccess() 2022-03-02 07:34:12 +01:00
Uwe Steinmann
c810e99a6b use backticks in sql statement 2022-03-02 07:32:05 +01:00
Uwe Steinmann
fc44fdf537 fix second parameter passed to setDefaultAccess() 2022-03-02 07:31:25 +01:00
Uwe Steinmann
0652faf7c3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-26 14:16:53 +01:00
Uwe Steinmann
2d6c1d635b add onPostRemoveAttribute callback 2022-02-26 14:15:06 +01:00
Uwe Steinmann
8052b76165 set ETag 2022-02-25 19:14:54 +01:00
Uwe Steinmann
eca5f3608f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-25 18:38:09 +01:00
Uwe Steinmann
3ad44fac0b pass old value to onPostUpdateAttribute callback 2022-02-25 18:38:00 +01:00
Uwe Steinmann
dafa4813c1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-25 12:34:07 +01:00
Uwe Steinmann
c9fae356b3 add callbacks on onPostUpdateAttribute and onPostAddAttribute 2022-02-25 12:31:57 +01:00
Uwe Steinmann
efc724e773 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2022-02-25 08:06:44 +01:00
Uwe Steinmann
554d8523dc Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2022-02-25 08:06:33 +01:00
Uwe Steinmann
2b9431ebb2 some new phrases 2022-02-25 08:06:17 +01:00
Uwe Steinmann
b747cc4224 extensions cannot be disabled/enabled if configuration file is not writeable 2022-02-25 08:04:10 +01:00
Uwe Steinmann
7da6cabafa add build file for phing 2022-02-25 07:46:05 +01:00
Uwe Steinmann
ad9566b36f do not need daverandom/resume 2022-02-25 07:45:37 +01:00
Uwe Steinmann
b64ee6012c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-24 08:18:58 +01:00
Uwe Steinmann
ff49e2b31f make large modal box wider 2022-02-24 08:18:45 +01:00
Uwe Steinmann
95547cf6b8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-24 07:32:15 +01:00
Uwe Steinmann
74b3f896ff do not show class of modal box link if empty 2022-02-24 07:31:57 +01:00
Uwe Steinmann
aa9a30a98a do not include inc.ClassNotificationService.php and inc.ClassEmailNotify.php anymore 2022-02-24 07:29:04 +01:00
Uwe Steinmann
0869e97a1a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-22 17:55:01 +01:00
Uwe Steinmann
1e85c6c5c6 set default value of checkbox with hidden input field 2022-02-22 17:54:08 +01:00
Uwe Steinmann
aa61028f08 set default value of checkbox with hidden input field 2022-02-22 17:53:17 +01:00
Uwe Steinmann
6cac794913 set type of input field for search query to 'search' 2022-02-22 13:16:43 +01:00
Uwe Steinmann
cca363fc0b add entry for 5.1.25 2022-02-22 09:11:06 +01:00
Uwe Steinmann
d4df6796f3 output splash messages when adding, editing, removing an entry 2022-02-22 09:10:04 +01:00
Uwe Steinmann
673bc9ec7d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-21 16:02:48 +01:00
Uwe Steinmann
a8ba048ea9 add entry for 5.1.25 2022-02-21 13:28:45 +01:00
Uwe Steinmann
c945829b80 value for _inheritAccess are true or false 2022-02-21 13:26:57 +01:00
Uwe Steinmann
275e81874a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-21 11:10:56 +01:00
Uwe Steinmann
375c68e8de call getLastWorkflowLog() instead od getWorkflowLog() 2022-02-21 11:10:13 +01:00
Uwe Steinmann
98936632b2 call getLastWorkflowLog() instead of getWorkflowLog() 2022-02-21 11:08:15 +01:00
Uwe Steinmann
830f0258df add note for 6.0.18 2022-02-21 11:07:43 +01:00
Uwe Steinmann
f095e252ad getWorkflowLog() will always return all log entries if document is not in a workflow 2022-02-21 11:05:22 +01:00
Uwe Steinmann
68bb7bcfaf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-21 08:55:01 +01:00
Uwe Steinmann
f9721da684 use SeedDMS_Core_File::fileExtension() in setFileType() 2022-02-21 08:52:59 +01:00
Uwe Steinmann
eb12465fb2 add SeedDMS_Core_File::fileExtension() 2022-02-21 08:52:46 +01:00
Uwe Steinmann
5b244db6a2 backport setFileType() from seeddms 6.0.x 2022-02-21 08:30:32 +01:00
Uwe Steinmann
659cdb4e6c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-21 07:15:01 +01:00
Uwe Steinmann
663dc869f4 fix line indenting 2022-02-21 07:12:01 +01:00
Uwe Steinmann
535a0b1b67 fix line indenting 2022-02-21 07:10:28 +01:00
Uwe Steinmann
0f417a2d7b handle docs in workflow proppeerly in verifyStatus() 2022-02-21 07:10:08 +01:00
Uwe Steinmann
87ee71a1a1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-18 18:15:05 +01:00
Uwe Steinmann
022fdc86b3 update release date 2022-02-18 18:05:05 +01:00
Uwe Steinmann
b914fc3c98 add changes for 5.1.25 2022-02-18 18:04:33 +01:00
Uwe Steinmann
ec1f99229e rename getLastWorkflowTransition() to getLastWorkflowLow(), returns a log even after the workflow was ended 2022-02-18 18:02:08 +01:00
Uwe Steinmann
cffad48b61 add method descrition for getWorkflowLog() 2022-02-18 18:01:35 +01:00
Uwe Steinmann
d91787bf44 check if !workflow instead of isset(workflow) 2022-02-18 18:00:50 +01:00
Uwe Steinmann
d805de5035 setHomeFolder returns true on success 2022-02-18 18:00:07 +01:00
Uwe Steinmann
cc5d7d1ecd search for document by name in root folder if requested 2022-02-18 17:58:39 +01:00
Uwe Steinmann
1534d2be8e add target unittest 2022-02-17 12:31:22 +01:00
Uwe Steinmann
96933bb30d ensure setRole() is passed an object 2022-02-17 12:30:29 +01:00
Uwe Steinmann
b9c613ff83 handle role in addUser() propperly 2022-02-17 12:29:37 +01:00
Uwe Steinmann
b57dc78e2a replace checks isset(_workflow) with _workflow == null 2022-02-14 11:06:02 +01:00
Uwe Steinmann
f93af56f52 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-12 19:48:56 +01:00
Uwe Steinmann
b2fd7bb383 add entry for 6.0.18 2022-02-11 11:14:49 +01:00
Uwe Steinmann
3e63f1ffc0 init $ret in setStatus() 2022-02-11 10:56:14 +01:00
Uwe Steinmann
27b5af8ada propperly get workflow log (Closes #522) 2022-02-11 10:55:45 +01:00
Uwe Steinmann
2ad448581a add new parameter 'addon' used by input fields 2022-02-11 07:07:54 +01:00
Uwe Steinmann
7a21fa77b5 add new parameter 'addon' in formField() used by input fields 2022-02-11 07:07:19 +01:00
Uwe Steinmann
fb29402194 allow placeholder for textarea 2022-02-11 07:07:01 +01:00
Uwe Steinmann
82d9a42968 comment old unused code 2022-02-09 08:10:17 +01:00
Uwe Steinmann
35b8b9b703 images can be passed to toIndividual() for adding it to the html part 2022-02-02 21:36:27 +01:00
Uwe Steinmann
aa8eb38560 do not access $settings before loading it 2022-01-31 12:06:19 +01:00
Uwe Steinmann
8b558c7142 take out relodge 2022-01-31 12:05:48 +01:00
Uwe Steinmann
d9d434a7be make it work with 6.0.17 2022-01-31 07:14:52 +01:00
Uwe Steinmann
9889bbe639 make role id an integer 2022-01-20 07:44:31 +01:00
Uwe Steinmann
b7315c501f get id from args in getFolderParent() 2022-01-16 10:58:19 +01:00
Uwe Steinmann
7fc1a62b75 fix error when sending notification after owner change (see 4dda2549c7) 2022-01-05 08:25:57 +01:00
Uwe Steinmann
ea5218ea03 add SeeddmsAjax for running function after updating div.ajax 2022-01-05 08:04:38 +01:00
Uwe Steinmann
22915df3e1 add method documentListRowStatus() 2022-01-05 07:34:51 +01:00
Uwe Steinmann
4dda2549c7 fix error when sending notification after owner change 2022-01-05 07:29:23 +01:00
Uwe Steinmann
a93fdd91c8 remove old code 2022-01-03 19:14:53 +01:00
Uwe Steinmann
84f1afc1d3 use new method folderListHeader() 2022-01-03 19:14:35 +01:00
Uwe Steinmann
cff6b66d1c use new method folderListHeader() 2022-01-03 19:14:13 +01:00
Uwe Steinmann
771b9674cc use new methods to show list of docs/folders 2022-01-03 13:35:12 +01:00
Uwe Steinmann
5c93d53e60 add methods to show list headers and columns of doc/folder lists 2022-01-03 13:29:24 +01:00
Uwe Steinmann
3f0cbc50bd use conversion manager 2021-12-29 12:06:50 +01:00
Uwe Steinmann
3bdb215adf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-17 21:47:07 +01:00
Uwe Steinmann
4efc8226c8 show header of additional preview only if hook returns a text 2021-12-17 21:46:28 +01:00
Uwe Steinmann
056dd8bd09 new css with google fonts 2021-12-17 16:42:58 +01:00
Uwe Steinmann
2b0351325c remove html with $this->formField() 2021-12-17 16:42:40 +01:00
Uwe Steinmann
5e386597c3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-15 17:19:23 +01:00
Uwe Steinmann
7e34fa0663 add changes for 5.1.25 2021-12-15 17:17:51 +01:00
Uwe Steinmann
52a9a41d5c add hook documentListPreview 2021-12-15 17:17:23 +01:00
Uwe Steinmann
ad2ea73031 send mail to uploader of a version 2021-12-15 10:28:34 +01:00
Uwe Steinmann
7f61dbbcad new mail body for change of version comment 2021-12-15 10:28:00 +01:00
Uwe Steinmann
5ec5bab294 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-15 08:40:37 +01:00
Uwe Steinmann
97bdb0773d certain fields in configuration can be disabled for editing 2021-12-15 08:39:11 +01:00
Uwe Steinmann
b91745626a add entry for 6.0.18 2021-12-12 13:01:46 +01:00
Uwe Steinmann
7b87cc355d finish running cron jobs via web, result is returned as json 2021-12-12 12:58:42 +01:00
Uwe Steinmann
29a6882106 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-11 14:08:19 +01:00
Uwe Steinmann
3e2fccfcbb start new version 5.1.25 2021-12-11 14:02:24 +01:00
Uwe Steinmann
5ff285c745 start new version 5.1.25 2021-12-11 14:00:22 +01:00
Uwe Steinmann
6fbc6043eb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-10 15:13:42 +01:00
Uwe Steinmann
5e758f2787 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-12-10 14:11:03 +01:00
Uwe Steinmann
63ddbfb664 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-12-10 14:10:52 +01:00
Uwe Steinmann
463ba00cab some new phrases 2021-12-10 14:10:30 +01:00
Uwe Steinmann
92dbaf5e35 add note about better error checking on uploading files 2021-12-09 17:31:02 +01:00
Uwe Steinmann
afb7736f9b check if post request succeeds 2021-12-09 17:30:01 +01:00
Uwe Steinmann
0c888bc9d1 categories are and'ed not or'ed 2021-12-09 10:11:17 +01:00
Uwe Steinmann
3f9a5b8635 add conversion with mutool 2021-12-09 10:09:03 +01:00
Uwe Steinmann
e78c8174d8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-05 07:52:25 +01:00
Uwe Steinmann
6fdd3ea39d index document if max size is 0 2021-12-05 07:52:00 +01:00
Uwe Steinmann
d4f4d5cfcd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-04 17:51:33 +01:00
Uwe Steinmann
f263ec1ac2 init $oldattributes 2021-12-04 17:51:18 +01:00
Uwe Steinmann
f7f0721dba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-04 13:20:08 +01:00
Uwe Steinmann
ccd5bb7d41 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-12-04 13:19:56 +01:00
Uwe Steinmann
028f26b413 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-12-04 13:19:48 +01:00
Uwe Steinmann
468188a61d add some missing phrases 2021-12-04 13:19:20 +01:00
Uwe Steinmann
9821dceab3 add record_type and some facets 2021-12-04 13:18:05 +01:00
Uwe Steinmann
a1b4b3b081 remove duplicate submit button 2021-12-03 20:55:59 +01:00
Uwe Steinmann
f7683f2176 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-03 20:41:14 +01:00
Uwe Steinmann
73398f105e Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-12-03 20:41:06 +01:00
Uwe Steinmann
bb65f0ff94 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-12-03 20:40:56 +01:00
Uwe Steinmann
b6793c62f5 some new phrases 2021-12-03 20:40:38 +01:00
Uwe Steinmann
fa946be140 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-03 20:39:13 +01:00
Uwe Steinmann
f24badd9ce move send of notification mail in Notification class, do not inform approvers and reviewers anymore 2021-12-03 19:13:16 +01:00
Uwe Steinmann
897f6ce64b fix indenting of lines 2021-12-03 19:12:53 +01:00
Uwe Steinmann
004af591a9 do not allow to select category if no categories exists 2021-12-03 11:31:37 +01:00
Uwe Steinmann
14d8a1bd91 show date in configured format, skip groups of user if not exsit 2021-12-03 10:49:59 +01:00
Uwe Steinmann
84442d68f0 move submit button at end of form 2021-12-03 10:49:27 +01:00
Uwe Steinmann
368b0fc6a5 do not show workflow tab if workflow was ended 2021-12-03 10:49:04 +01:00
Uwe Steinmann
faf62aaff0 fix php warning 2021-12-03 10:48:47 +01:00
Uwe Steinmann
d9936e30ec add changes for 5.1.24 2021-12-03 09:31:56 +01:00
Uwe Steinmann
489e01d2c6 remove old form validation 2021-12-03 09:31:03 +01:00
Uwe Steinmann
2c182e3d09 add form validation 2021-12-03 09:30:43 +01:00
Uwe Steinmann
c75a9ef455 do not authenticate 2021-12-03 09:30:21 +01:00
Uwe Steinmann
1f2e9496a8 extra error msg if hash is invalid 2021-12-03 09:30:00 +01:00
Uwe Steinmann
6a54f7dac7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-03 07:26:27 +01:00
Uwe Steinmann
bc22043b80 add more changes for 5.1.24 2021-12-03 07:26:05 +01:00
Uwe Steinmann
050aff4798 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-02 22:10:09 +01:00
Uwe Steinmann
9d0b961364 call sendRequestWorkflowActionMail() only if next state was reached 2021-12-02 22:08:50 +01:00
Uwe Steinmann
58434abf10 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-01 16:54:43 +01:00
Uwe Steinmann
7588fb8317 set mail to owner if doc status or owner changed or doc is transfered 2021-12-01 13:06:33 +01:00
Uwe Steinmann
6e124f73f1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-01 11:14:22 +01:00
Uwe Steinmann
11dabf2cb0 make jqtree look nice again 2021-12-01 11:13:26 +01:00
Uwe Steinmann
47f77d9d4c send mails to owner of doc only if not logged or in list of notifiers 2021-11-30 17:18:43 +01:00
Uwe Steinmann
b01e2aa666 take out sending mails to owner 2021-11-30 17:17:28 +01:00
Uwe Steinmann
36110a85e7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-29 18:58:53 +01:00
Uwe Steinmann
1e64083faa fix css of jquery tree 2021-11-29 18:58:12 +01:00
Uwe Steinmann
684c316f86 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-29 11:31:26 +01:00
Uwe Steinmann
5ac2e10da5 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-11-29 11:31:13 +01:00
Uwe Steinmann
959f348c3e Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-11-29 11:31:00 +01:00
Uwe Steinmann
06125b203b minor correction of 'confirm_transfer_link_document' 2021-11-29 11:30:34 +01:00
Uwe Steinmann
9cff7df236 propper icon on buttons of bootbox 2021-11-29 11:22:23 +01:00
Uwe Steinmann
622b7a13bb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-28 08:44:06 +01:00
Uwe Steinmann
91f679ed35 install bootbox 5 2021-11-28 08:43:16 +01:00
Uwe Steinmann
9a80e88553 get bootbox 2021-11-28 08:42:48 +01:00
Uwe Steinmann
f635d0e546 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-27 13:51:15 +01:00
Uwe Steinmann
a5c60677ab install jquery-typeahead 2021-11-27 12:44:00 +01:00
Uwe Steinmann
539b026d5e init $settings->_contentDir to data directory 2021-11-27 12:08:32 +01:00
Uwe Steinmann
f4a4460600 set onePageMode to true 2021-11-27 12:08:10 +01:00
Uwe Steinmann
eae5699bdf get error msg from controller 2021-11-26 14:32:00 +01:00
Uwe Steinmann
ab7cef5666 set workflow mode to 'transitional' 2021-11-26 14:31:38 +01:00
Uwe Steinmann
6ce7cd5858 set error msg if conversion fails 2021-11-26 14:31:13 +01:00
Uwe Steinmann
a5588590ca turn enableLargeFileUpload off 2021-11-26 13:25:36 +01:00
Uwe Steinmann
9ae7a54183 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-26 12:33:35 +01:00
Uwe Steinmann
53e56da09b add target quickstart for building quickstart package with phing 2021-11-26 12:33:08 +01:00
Uwe Steinmann
45d0d0b9d7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-26 12:30:41 +01:00
Uwe Steinmann
29a7a3ff5c lucene is autoloaded by composer 2021-11-26 12:30:10 +01:00
Uwe Steinmann
4ef64199ab Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-26 10:05:24 +01:00
Uwe Steinmann
5347fe3682 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-11-26 10:05:13 +01:00
Uwe Steinmann
230da5ba25 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-11-26 10:05:01 +01:00
Uwe Steinmann
ef49f5b7fe major update of zn_CH translation, minor updates in other languages 2021-11-26 10:04:15 +01:00
Uwe Steinmann
248f11653a allo echo without authentication 2021-11-26 09:43:06 +01:00
Uwe Steinmann
a4bb363799 get total number of hits, some code formating 2021-11-19 13:49:46 +01:00
Uwe Steinmann
f2dbe4c18b pass record_type to view, some code formating 2021-11-19 13:49:07 +01:00
Uwe Steinmann
582a85947f add method getService() 2021-11-19 13:34:55 +01:00
Uwe Steinmann
be2de9cfc1 set cmd to class name of conversion service 2021-11-19 13:34:21 +01:00
Uwe Steinmann
611be01cce Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-17 20:58:16 +01:00
Uwe Steinmann
bb10ff084b replace old form validation with jquery validation 2021-11-17 20:57:42 +01:00
Uwe Steinmann
e6766a3607 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-10 08:35:22 +01:00
Uwe Steinmann
5049169d09 show fulltext search tab if fulltext search was used 2021-11-10 08:33:52 +01:00
Uwe Steinmann
96310c40c2 pass source and source details to controller 2021-11-10 08:33:10 +01:00
Uwe Steinmann
e653817813 pass source details to controller 2021-11-10 08:32:52 +01:00
Uwe Steinmann
efdb37399d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-09 09:34:34 +01:00
Uwe Steinmann
a46549a7b2 propperly eval return of hook addDocumentContentFile 2021-11-09 09:33:54 +01:00
Uwe Steinmann
2558450993 fix line indenting 2021-11-09 09:33:36 +01:00
Uwe Steinmann
25e12c5f5e include Notification.php instead of setting services 2021-11-08 15:54:15 +01:00
Uwe Steinmann
542a6cb045 require basic auth and login as user cli_scheduler 2021-11-08 15:53:43 +01:00
Uwe Steinmann
31fda7e60e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-08 14:36:39 +01:00
Uwe Steinmann
dc8cdb9db9 fix list of documents with workflow action by group 2021-11-08 14:18:13 +01:00
Uwe Steinmann
76dffe2497 use jquery validate 2021-11-08 12:26:13 +01:00
Uwe Steinmann
3d3bee169f add selection of sort field to form 2021-11-08 12:25:34 +01:00
Uwe Steinmann
a0566372f7 add sorting by id in search(), set default to unsorted 2021-11-08 12:25:06 +01:00
Uwe Steinmann
99cc8b5b5d return error msg of extension mgr 2021-11-08 09:01:37 +01:00
Uwe Steinmann
b7b92bcc57 replace rename() by exec('mv ..') 2021-11-08 09:01:15 +01:00
Uwe Steinmann
f727843720 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-04 17:44:14 +01:00
Uwe Steinmann
334639cbb5 fix checking of extensions 2021-11-04 17:43:58 +01:00
Uwe Steinmann
4e5fefa4ba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-04 17:07:36 +01:00
Uwe Steinmann
b6ed28b4ec extension mgr can now cache check result 2021-11-04 17:06:47 +01:00
Uwe Steinmann
de003de613 fix indenting of lines 2021-11-04 17:04:47 +01:00
Uwe Steinmann
ea5a9f499f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-03 16:18:06 +01:00
Uwe Steinmann
4abdb104f0 iterate over all service until a working one is found 2021-10-29 19:55:01 +02:00
Uwe Steinmann
29bf7cd062 add spectrum-colorpicker2, new version of flot 2021-10-29 19:28:24 +02:00
Uwe Steinmann
ffb29d7066 install spectrum 2021-10-29 19:27:39 +02:00
Uwe Steinmann
df94bc0c1a add spectrum-colorpicker2, new version of flot 2021-10-29 19:26:28 +02:00
Uwe Steinmann
07f50b4b95 install spectrum 2021-10-29 19:26:06 +02:00
Uwe Steinmann
fdda22b58d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-26 10:16:49 +02:00
Uwe Steinmann
623b1bf0f4 fix cols of formField 'textarea' 2021-10-26 10:16:27 +02:00
Uwe Steinmann
adde8afc84 fix cols of formField 'textarea' 2021-10-26 10:15:21 +02:00
Uwe Steinmann
e40afa452c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-26 08:29:54 +02:00
Uwe Steinmann
f61c79cbf9 add placeholder for httpRoot 2021-10-26 08:01:32 +02:00
Uwe Steinmann
da1bf3fb97 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-26 06:57:49 +02:00
Uwe Steinmann
eaddd31198 hook addDocumentContentFile returns an array of form fields to upload a file 2021-10-25 12:52:13 +02:00
Uwe Steinmann
9260382ef2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-22 09:46:36 +02:00
Uwe Steinmann
c19eed3638 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-10-20 12:27:08 +02:00
Uwe Steinmann
50444f7216 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-10-20 12:26:52 +02:00
Uwe Steinmann
b4096c1aab major polish update, minor updates in other languages 2021-10-20 12:26:00 +02:00
Uwe Steinmann
61a53f8e90 start of week can be passed to datepicker (not used yet) 2021-10-20 07:58:09 +02:00
Uwe Steinmann
ae08602e68 add hook getCspRules() in htmlStartPage() 2021-10-20 07:09:39 +02:00
Uwe Steinmann
359be28912 catch imagemagick exception 2021-10-19 12:18:16 +02:00
Uwe Steinmann
4c8a2496b6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-16 17:46:34 +02:00
Uwe Steinmann
d422927f87 do not pop service from services in convert(), use end() 2021-10-16 17:46:03 +02:00
Uwe Steinmann
b46795cbfe pass conversion mgr to task 2021-10-16 17:44:45 +02:00
Uwe Steinmann
e7303b6371 pass conversion mgr to previewer, list all conversion services 2021-10-16 17:44:11 +02:00
Uwe Steinmann
b2b61eb990 pass conversion mgr to constructor of task 2021-10-16 17:43:42 +02:00
Uwe Steinmann
e9ae9cce34 add conversion from image/svg+xml to png 2021-10-16 16:32:57 +02:00
Uwe Steinmann
0508ccaa1c new version 1.4.0, support for conversion mgr 2021-10-16 16:32:25 +02:00
Uwe Steinmann
54d4ebf872 check for settings.xml in conf dir not just the conf dir 2021-10-16 15:01:30 +02:00
Uwe Steinmann
3cd4763c0e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-15 13:53:55 +02:00
Uwe Steinmann
3a81d22e8b backport addLogLine from 6.0.x 2021-10-15 13:53:16 +02:00
Uwe Steinmann
8e6828e36d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-15 13:50:46 +02:00
Uwe Steinmann
fdfad0ccc8 add parameter '-d tab' to xlsx2csv 2021-10-08 13:11:40 +02:00
Uwe Steinmann
90555f9728 add method getInfo() 2021-10-08 13:11:20 +02:00
Uwe Steinmann
31db5f69fe add extension to temp file, because this is needed for programms like unoconv 2021-10-08 13:10:24 +02:00
Uwe Steinmann
9734d57ff3 rerun filter after toggling an extension 2021-10-08 12:15:37 +02:00
Uwe Steinmann
96bff23919 fix add_log_line() if query string contains '/', log complete path to script 2021-10-08 12:14:42 +02:00
Uwe Steinmann
1d90291032 add fulltext converter 2021-10-08 12:14:05 +02:00
Uwe Steinmann
8d3815d7db add getAdditionalParams(), getInfo(), width and page can be passed to convert() 2021-10-08 12:13:31 +02:00
Uwe Steinmann
43c0f626ea add getAdditionalParams(), getInfo(), width of image can be passed 2021-10-08 12:12:37 +02:00
Uwe Steinmann
306555cd45 add getInfo(), getAdditionalParams() and handle output to stdout 2021-10-08 12:12:00 +02:00
Uwe Steinmann
1813ac32a0 add getAdditionalParams(), convert() returns false 2021-10-08 12:11:10 +02:00
Uwe Steinmann
895c76c42d specify output format in all convert commands 2021-10-08 12:10:23 +02:00
Uwe Steinmann
1737d43cd3 add method getServices() 2021-10-08 10:03:27 +02:00
Uwe Steinmann
48898a67b7 fix rewrite rule for favicon 2021-10-08 10:03:03 +02:00
Uwe Steinmann
a830b18fc3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-06 15:19:14 +02:00
Uwe Steinmann
898943dd6e add new conversion manager and services 2021-10-06 15:03:03 +02:00
Uwe Steinmann
12c79d8773 type of conf vars of extension can be 'number' 2021-10-06 15:01:08 +02:00
Uwe Steinmann
4e8bb56821 add support for new conversion service 2021-10-06 14:59:46 +02:00
Uwe Steinmann
6838c26c5f remove doc from index before indexing it again 2021-10-06 14:58:04 +02:00
Uwe Steinmann
0f9fa74bbe add support for conversion service pass to IndexedDocument() 2021-10-06 14:57:03 +02:00
Uwe Steinmann
6d8dcd8125 fix rewriting for favicon 2021-10-06 14:56:00 +02:00
Uwe Steinmann
1a61a6ca8f fix recursive removal and copying of dirs 2021-10-04 20:26:03 +02:00
Uwe Steinmann
790eef7e84 handle special case size=1 in format_filesize() 2021-10-04 20:24:51 +02:00
Uwe Steinmann
7bac4e730e make fopen() silent in fileSize() 2021-10-04 20:24:02 +02:00
Uwe Steinmann
357c0c1bac fix error in moveFile() 2021-10-04 20:23:17 +02:00
Uwe Steinmann
9c5e5905c9 check if version exists and is not the latest version in removeVersion() 2021-10-04 20:22:21 +02:00
Uwe Steinmann
cd061e8c2f file is removed after cleaning up the database in _removeContent() 2021-10-04 20:21:41 +02:00
Uwe Steinmann
a0b95e8792 check if argument passed to setDefaultAccess() is in valid range 2021-10-04 20:20:45 +02:00
Uwe Steinmann
b5a6ea330b check if argument passed to setOwner() is a user 2021-10-04 20:20:08 +02:00
Uwe Steinmann
fb86b4330c check if passed argument to setFolder() is a folder 2021-10-04 20:17:21 +02:00
Uwe Steinmann
c4380583a9 set M_LOWEST_RIGHT and M_HIGHTEST_RIGHT 2021-10-04 19:13:47 +02:00
Uwe Steinmann
7119b431f8 fix line indenting 2021-10-02 07:35:02 +02:00
Uwe Steinmann
cd08883c55 fix line indenting 2021-10-02 07:34:44 +02:00
Uwe Steinmann
b5ef570ea5 fix method comment 2021-10-02 07:34:18 +02:00
Uwe Steinmann
4913607e84 addGrpReviewer() returns false on sql error 2021-10-02 07:33:37 +02:00
Uwe Steinmann
68a1500ea6 check if date passed to setStatus() is valid 2021-10-02 07:32:49 +02:00
Uwe Steinmann
9ad56c418d set if updateUser passed to setStatus() is a user 2021-10-02 07:31:44 +02:00
Uwe Steinmann
905b2aa621 format class method comment 2021-10-02 07:29:54 +02:00
Uwe Steinmann
0163159c84 new method setMimeType() 2021-10-02 07:29:15 +02:00
Uwe Steinmann
fbf86b0fe6 date passed to setDate() can be string with format Y-m-d H:i:s 2021-10-02 07:28:23 +02:00
Uwe Steinmann
bca394176e cast date to int in constructor of SeedDMS_Core_DocumentContent 2021-10-02 07:27:29 +02:00
Uwe Steinmann
a0d214eac2 add getInheritAccess() as a replacement for inheritsAccess() 2021-10-02 07:26:37 +02:00
Uwe Steinmann
228b891e3a do not clean notify list in setDefaultAccess() if rights are inherited 2021-10-02 07:25:48 +02:00
Uwe Steinmann
7ba418f25a use upper case for sql keywords 2021-10-02 07:24:59 +02:00
Uwe Steinmann
bae7e939a1 fix line indenting 2021-10-02 07:23:23 +02:00
Uwe Steinmann
0260b8dad9 init categories in getCategories() 2021-09-30 15:44:54 +02:00
Uwe Steinmann
1b1e60f88f setName() didn't work due to a copy&paste error 2021-09-30 15:44:08 +02:00
Uwe Steinmann
ef2aaaf32c remove extra space 2021-09-30 07:57:47 +02:00
Uwe Steinmann
77a606cebe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-30 07:56:50 +02:00
Uwe Steinmann
99efcac8bb fix line indenting 2021-09-30 07:52:47 +02:00
Uwe Steinmann
8c3857c6e2 fix indenting of lines 2021-09-30 07:01:22 +02:00
Uwe Steinmann
768631bf55 fix various errors and validation of form 2021-09-29 22:04:59 +02:00
Uwe Steinmann
3487a27f9d make comment required 2021-09-29 21:24:13 +02:00
Uwe Steinmann
43f7a94aa6 remove most of html code to create form 2021-09-29 21:23:51 +02:00
Uwe Steinmann
19266f1647 set return value and new status in verifyStatus() 2021-09-29 18:50:48 +02:00
Uwe Steinmann
2d3ec59c2d fix creation of instance of SeedDMS_AccessOperation 2021-09-29 18:30:06 +02:00
Uwe Steinmann
ab5aec99ba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-29 18:25:54 +02:00
Uwe Steinmann
529efd6baa check for new return values when modifying reviewers and approvers 2021-09-29 17:27:43 +02:00
Uwe Steinmann
6d92be55fb propperly check return value after removing log entry 2021-09-29 17:27:00 +02:00
Uwe Steinmann
7a4e0e8513 propperly change the return value of setReviewByXXX 2021-09-29 17:26:20 +02:00
Uwe Steinmann
7aaa02cf7d propperly check return value of setApprovalByXX 2021-09-29 17:25:24 +02:00
Uwe Steinmann
7e17ea145c set strict_types 2021-09-29 17:24:30 +02:00
Uwe Steinmann
2b1f637e9c adding a review returns the log id not 0 2021-09-29 17:23:59 +02:00
Uwe Steinmann
989572e069 return false not -1 if sql fails 2021-09-29 17:23:03 +02:00
Uwe Steinmann
b9fb7e2585 fix indenting 2021-09-29 17:21:58 +02:00
Uwe Steinmann
335c2ffee5 more documentation, better parameter checking, return false is sql fails 2021-09-29 17:21:19 +02:00
Uwe Steinmann
7366644d19 ensure strict types 2021-09-29 17:16:33 +02:00
Uwe Steinmann
e14ae4b252 add comment 2021-09-29 15:01:07 +02:00
Uwe Steinmann
74035b6fde fix accessing settings 2021-09-29 14:59:28 +02:00
Uwe Steinmann
c8c79175bd order review log by id desc 2021-09-29 14:58:55 +02:00
Uwe Steinmann
43e98643ee verifyStatus() returns new status (or old status if not changed) 2021-09-29 14:55:55 +02:00
Uwe Steinmann
fbe091eaf6 minor fix in method documentation 2021-09-29 14:54:10 +02:00
Uwe Steinmann
1e451529b8 add method dropTemporaryTable() 2021-09-29 14:53:38 +02:00
Uwe Steinmann
8cd08a6f08 fix recreation of temp. table if requested
table was just emptied by not removed
2021-09-29 14:52:22 +02:00
Uwe Steinmann
dc48e5da2c get[Review|Approval]Status takes ttreviewid|ttapproveid into account 2021-09-29 14:50:35 +02:00
Uwe Steinmann
cce3899688 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-28 16:22:56 +02:00
Uwe Steinmann
007e3faa0a various minor changes ported back from SeedDMS 6 2021-09-28 16:20:33 +02:00
Uwe Steinmann
b8763822d0 init possible values of attribute in getStatistic() 2021-09-28 16:19:25 +02:00
Uwe Steinmann
39ec44cd41 sewPwdExpiration() sets date internally not 'now' 2021-09-28 15:46:05 +02:00
Uwe Steinmann
b6a308e630 set default $role='3' in addUser() 2021-09-28 15:44:12 +02:00
Uwe Steinmann
d05a200ed6 add more packages needed for 6.0.x 2021-09-28 11:18:26 +02:00
Uwe Steinmann
8b68402bec Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-28 11:14:26 +02:00
Uwe Steinmann
9b986e16c5 composer.json for distribution 2021-09-28 11:13:40 +02:00
Uwe Steinmann
772f15ce7d add configuration for defaultFolderPosition 2021-09-28 11:13:21 +02:00
Uwe Steinmann
70d250cfea add configuration for defaultFolderPosition 2021-09-28 11:13:05 +02:00
Uwe Steinmann
f6d9b1892e add some more documentation 2021-09-28 11:12:45 +02:00
Uwe Steinmann
0c1a795113 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-28 10:33:44 +02:00
Uwe Steinmann
2b14bb5748 move stopwords.txt away 2021-09-28 10:31:30 +02:00
Uwe Steinmann
84f3e3ef96 add changes for 5.1.24 2021-09-27 16:08:32 +02:00
Uwe Steinmann
5f5d2549ef turn off example extension 2021-09-27 16:03:36 +02:00
Uwe Steinmann
cf30ad5ddd initialize path if not explicitly set in settings.xml 2021-09-27 15:56:50 +02:00
Uwe Steinmann
590fc0c957 turn off example extension 2021-09-27 15:56:33 +02:00
Uwe Steinmann
ff0a08c6a3 remove inc.DBAccess.php and add tests to package 2021-09-27 15:55:52 +02:00
Uwe Steinmann
5fb134f066 remove old logo 2021-09-27 11:23:53 +02:00
Uwe Steinmann
4b25badcf6 remove old styles which hasn't be used for years 2021-09-27 11:22:37 +02:00
Uwe Steinmann
b10241f3f1 replace attribute required by required="required" 2021-09-27 10:26:10 +02:00
Uwe Steinmann
e982737630 run some urls through htmlentities 2021-09-27 10:25:39 +02:00
Uwe Steinmann
145d4021a9 class tags (img, meta, link) with '/>' 2021-09-27 10:23:46 +02:00
Uwe Steinmann
cf4f49e57a more changes in 5.1.24 2021-09-27 10:18:33 +02:00
Uwe Steinmann
6d4f00a137 fix echo test 2021-09-27 10:18:16 +02:00
Uwe Steinmann
28ddd4b5b2 check if passed user is a valid user in setOwner() 2021-09-27 10:13:46 +02:00
Uwe Steinmann
378377780e trim name and check if not empty in setName() 2021-09-27 10:13:00 +02:00
Uwe Steinmann
e36f6ee15c trim email, commen, language, theme before saving in database 2021-09-27 10:12:08 +02:00
Uwe Steinmann
3101d6d952 trim name in setName() 2021-09-27 10:09:42 +02:00
Uwe Steinmann
7a5123aa6c trim name in setName() 2021-09-27 10:09:18 +02:00
Uwe Steinmann
88e0dcc58d check if passed id > 0 in getWorkflow(), getWorkflowAction(), getWorkflowState() 2021-09-27 10:08:20 +02:00
Uwe Steinmann
79bcdb6086 getting category or attributedef. returns null not false if none was found 2021-09-27 10:07:19 +02:00
Uwe Steinmann
84ffa71d24 use upper case for all sql keywords in sql statements 2021-09-27 10:06:07 +02:00
Uwe Steinmann
a002a23c9b do not dump table sqlite_sequence 2021-09-24 10:23:50 +02:00
Uwe Steinmann
8c3c49e3b5 add method useViews() to turn on/off the use of views 2021-09-24 10:23:11 +02:00
Uwe Steinmann
9d926fb55c better documentation of getAccessMode() 2021-09-24 10:22:28 +02:00
Uwe Steinmann
959c75ff79 check parameter $mode of addAccess() 2021-09-24 10:21:32 +02:00
Uwe Steinmann
ce124bb862 fix indenting 2021-09-24 10:21:10 +02:00
Uwe Steinmann
8e302bc770 hasDocuments() doesn't use internal cache anymore 2021-09-24 10:20:19 +02:00
Uwe Steinmann
3cf58fbc86 add some documentation for isDescendant() and isSubFolder() 2021-09-24 10:19:31 +02:00
Uwe Steinmann
3d7357fca9 clear _notifyList in clearCache() 2021-09-24 10:17:04 +02:00
Uwe Steinmann
0f5b189838 pass document itself to callback onPostRemoveDocument 2021-09-24 10:16:25 +02:00
Uwe Steinmann
233e464692 addDocumentFiles() clears internal list, make removeDocumentFile() more robust 2021-09-24 10:15:06 +02:00
Uwe Steinmann
08887fcbd9 just added some spaces in parameter list 2021-09-24 10:14:19 +02:00
Uwe Steinmann
efa85c70a0 fix documentation of getDocumentFiles() 2021-09-24 10:12:51 +02:00
Uwe Steinmann
7a606ca1fb much better checking of passed parameters in addDocumentLink() 2021-09-24 10:12:05 +02:00
Uwe Steinmann
77de9bfaae better documentation of getReverseDocumentLinks() and getDocumentLinks() 2021-09-24 10:11:13 +02:00
Uwe Steinmann
2f9148e5b9 method which return content will return null if no content was found
false is only returned if an error occured
2021-09-24 10:09:13 +02:00
Uwe Steinmann
01e243e966 fix indenting of comment for method getContentByVersion() 2021-09-24 10:07:18 +02:00
Uwe Steinmann
2c7b7344dd check paramert $mode of addAccess() has valid value 2021-09-24 10:06:41 +02:00
Uwe Steinmann
85f838b354 remove old unused code 2021-09-24 10:05:59 +02:00
Uwe Steinmann
ada7c1d692 add method clearCache() 2021-09-24 10:05:00 +02:00
Uwe Steinmann
3b55c458c2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-22 10:54:54 +02:00
Uwe Steinmann
825ae7bfeb check access on RemoveDocumentFile and EditDocumentFile 2021-09-22 10:41:36 +02:00
Uwe Steinmann
fbe13a87f1 lot of changes in 5.1.24 2021-09-22 10:00:21 +02:00
Uwe Steinmann
e95b5a971e edit comment and sequence of folders can be turned off 2021-09-22 09:59:33 +02:00
Uwe Steinmann
3e1dcc3c75 add new configuration noFolderFormFields 2021-09-22 09:53:53 +02:00
Uwe Steinmann
da8765fe33 add method getFoldersMinMax() 2021-09-22 09:48:12 +02:00
Uwe Steinmann
5a587e5c85 add more documentation for isSubFolder() 2021-09-22 09:47:40 +02:00
Uwe Steinmann
674002c02f init class variables for internal cache, add method to clear cache 2021-09-22 09:46:20 +02:00
Uwe Steinmann
16e48bbb16 search() will not find docs without expiration date if filtered by expiration date 2021-09-22 09:45:06 +02:00
Uwe Steinmann
37a30e6082 start and end date of expiration are within the range in search() 2021-09-22 09:43:51 +02:00
Uwe Steinmann
e23b9f09ad check expiration date in search() 2021-09-22 09:43:12 +02:00
Uwe Steinmann
96f858cbdd getDocumentContent() returns null if no document was found 2021-09-22 09:42:31 +02:00
Uwe Steinmann
b6452faa9b order documents by id, return null if getDocumentByOriginalFilename() does not find any documents 2021-09-22 09:41:23 +02:00
Uwe Steinmann
96f8c1db21 order documents by id in getDocumentByName(), return null if not document was found 2021-09-22 09:40:25 +02:00
Uwe Steinmann
b777b786dd check expiration date in search() 2021-09-22 09:39:18 +02:00
Uwe Steinmann
8e7d2547b4 remove constructor, because it was the same like in the parent class 2021-09-20 16:42:14 +02:00
Uwe Steinmann
63ae861257 many code style cleanups 2021-09-20 16:41:48 +02:00
Uwe Steinmann
822a07485c getImage() returns null if no image exists 2021-09-20 16:41:07 +02:00
Uwe Steinmann
4322b97fe2 better checking of quota when set by setQuota() 2021-09-20 16:40:30 +02:00
Uwe Steinmann
472b066d4b cast $newRole to int when passed to setRole() 2021-09-20 16:40:00 +02:00
Uwe Steinmann
af9178aa93 set internal pwd expiration to null when set to 'never' or '' 2021-09-20 16:39:08 +02:00
Uwe Steinmann
08836de4d8 number of counted folders/documents is converted to int before return 2021-09-20 16:37:45 +02:00
Uwe Steinmann
47e07ae2d1 return null if no folder was found by getParent() 2021-09-20 16:37:10 +02:00
Uwe Steinmann
247e8b09ca set date to current timestamp if $date passed to setDate() is false 2021-09-20 16:36:24 +02:00
Uwe Steinmann
6d01627553 fix comment (document -> folder) 2021-09-20 16:34:57 +02:00
Uwe Steinmann
7ed1a83453 check if $user, $requestUser is passed to addIndReviewer() addIndApprover() 2021-09-20 16:33:25 +02:00
Uwe Steinmann
69e3ad87f9 add note in comment about a possible wrong check for a return value 2021-09-20 16:32:34 +02:00
Uwe Steinmann
a5e12cb444 fix errors in coding style 2021-09-20 16:31:42 +02:00
Uwe Steinmann
851e81a9b9 check if login != '' in setLogin() 2021-09-18 17:51:17 +02:00
Uwe Steinmann
578aa30bc5 better checking of passed arguments 2021-09-18 17:50:32 +02:00
Uwe Steinmann
e765737d93 trim name passed to various methods 2021-09-18 17:49:26 +02:00
Uwe Steinmann
a3e6373673 createDump() has moved into database class and now expects a file pointer 2021-09-17 19:03:14 +02:00
Uwe Steinmann
a3965b8299 min version of php is 7.3 2021-09-17 19:02:53 +02:00
Uwe Steinmann
90aac2f1ad new method createDump() which was in SeedDMS_Core_DMS 2021-09-17 19:00:57 +02:00
Uwe Steinmann
2789e017eb check function pass to setCallback() and addCallback() is callable, remove createDump() 2021-09-17 19:00:06 +02:00
Uwe Steinmann
59c16b3ce4 trim name passed to addDocumentCategory() and check if != '' 2021-09-17 18:59:06 +02:00
Uwe Steinmann
3ed0854e13 check if id passed to getDocumentCategory() is < 1 2021-09-17 18:58:29 +02:00
Uwe Steinmann
e809297cfd getAllUserKeywordCategories() calls getAllKeywordCategories(), better checking of parameters pass to addDocumentCategory() 2021-09-17 18:31:19 +02:00
Uwe Steinmann
2ee30ccd5b ensure user ids passed to getAllKeywordCategories() are all integers 2021-09-17 18:29:33 +02:00
Uwe Steinmann
7d7deeb313 check if id passed to getKeywordCategory() is greater 0 2021-09-17 18:28:40 +02:00
Uwe Steinmann
e06cd59f6c fix wrong spell callback name 'onPostAddUser' 2021-09-17 18:28:01 +02:00
Uwe Steinmann
a39355f2ed ensure $logicalmode in search() is either 'OR' or 'AND' 2021-09-17 18:27:16 +02:00
Uwe Steinmann
31290fbcf7 document meaning of 5 in $seachin passed to search() 2021-09-17 18:26:11 +02:00
Uwe Steinmann
9687c8f081 check if user passed to setUser() is a real user 2021-09-17 18:25:23 +02:00
Uwe Steinmann
0cd4c9b727 check if the folder set by setRootFolderID() actually exists 2021-09-17 18:24:32 +02:00
Uwe Steinmann
ffd5cd9a7b use upper case in sql statements for reserved words 2021-09-17 18:23:25 +02:00
Uwe Steinmann
9309497e75 init $user to null in constructor 2021-09-17 18:22:35 +02:00
Uwe Steinmann
f9afc08355 add more documentation 2021-09-17 18:21:57 +02:00
Uwe Steinmann
4ad5628833 return better error msg if regex is invalid 2021-09-16 17:11:42 +02:00
Uwe Steinmann
56a352caca add placeholder with example for regex 2021-09-16 17:11:14 +02:00
Uwe Steinmann
16da190e06 setRegex() checks regex only if not '' 2021-09-16 17:10:41 +02:00
Uwe Steinmann
f1db74929c pass sortusersinlist of view 2021-09-16 16:25:36 +02:00
Uwe Steinmann
0d37021f6d no need to check isHidden()=='1' anymore, isHidden() returns a bool 2021-09-16 16:21:58 +02:00
Uwe Steinmann
5e112fb8f3 set email of admin to info@seeddms.org, fix inserts of sqlite 2021-09-16 16:20:57 +02:00
Uwe Steinmann
c13756ac02 do not call $dms->setEnableConverting() and setViewOnlineFileTypes() 2021-09-16 16:19:19 +02:00
Uwe Steinmann
a7e2ec7b01 ensure isHidden and isDisabled is a boolean 2021-09-16 16:18:26 +02:00
Uwe Steinmann
adba550a63 minor simplification of sql statement 2021-09-16 16:17:24 +02:00
Uwe Steinmann
1d031e44a2 return null not false if getInstanceByName() didn't find a folder 2021-09-16 16:16:21 +02:00
Uwe Steinmann
95b4bb9d22 init value set, separator, trim value set in setValue() 2021-09-16 16:14:51 +02:00
Uwe Steinmann
4aa4556df8 add more documentation 2021-09-16 16:14:21 +02:00
Uwe Steinmann
32dda4b3e9 return ',' as separator for most attr types, if value map is not set 2021-09-16 16:12:54 +02:00
Uwe Steinmann
c50be6d215 init separator and validation error in constructor 2021-09-16 16:12:27 +02:00
Uwe Steinmann
ffe4b50c7f many value validation improvements, use constants for validation errors 2021-09-16 16:11:13 +02:00
Uwe Steinmann
cd1800c19d add docs for var $separator 2021-09-16 16:09:18 +02:00
Uwe Steinmann
90074c3947 fix get value map separator 2021-09-16 16:07:31 +02:00
Uwe Steinmann
b0d13f9518 replace array_search by in_array, makeTimestamp() returns an error if days > max days of month 2021-09-16 16:05:04 +02:00
Uwe Steinmann
ad52fffd21 set file format to unix, fix indenting of comments 2021-09-16 16:02:16 +02:00
Uwe Steinmann
b111c1428e remove old database file unused for a long time 2021-09-15 21:49:44 +02:00
Uwe Steinmann
9334e1a6f2 make all class variables of SeedDMS_Core_User protected 2021-09-13 10:15:33 +02:00
Uwe Steinmann
fe71cf92b3 move old tests out of the way 2021-09-13 09:09:41 +02:00
Uwe Steinmann
84887e3b18 some clean ups, add more documentation 2021-09-10 09:37:07 +02:00
Uwe Steinmann
24ae96b9fa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-09 12:07:17 +02:00
Uwe Steinmann
da0f5d3053 more settings to disable import and download of extensions 2021-09-09 11:42:38 +02:00
Uwe Steinmann
9f618c5437 remove titleDisplayHack configuration 2021-09-09 09:57:00 +02:00
Uwe Steinmann
5904d22394 add dummy note in 6.0.17, update release date 2021-09-09 08:20:53 +02:00
Uwe Steinmann
753d808d2a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-09 08:19:51 +02:00
Uwe Steinmann
40f3cf35c9 use formField() instead of plain html for select menus 2021-09-09 08:19:04 +02:00
Uwe Steinmann
c376e352b5 add attribute 'for' to label in formField() 2021-09-09 08:17:52 +02:00
Uwe Steinmann
4a5426a180 fix indention 2021-09-09 08:17:28 +02:00
Uwe Steinmann
a343c4cc1c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-06 16:33:26 +02:00
Uwe Steinmann
fc19df6b71 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-09-06 16:33:13 +02:00
Uwe Steinmann
f5347e6b04 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-09-06 16:32:59 +02:00
Uwe Steinmann
d00ac5c1b0 add html body of all notification mails 2021-09-06 16:32:24 +02:00
Uwe Steinmann
7a1b03951e use methods in notification class for sending notifications 2021-09-01 17:45:56 +02:00
Uwe Steinmann
1398b614cd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-01 16:29:01 +02:00
Uwe Steinmann
9ea8a02893 fix task parameters of type 'select' 2021-09-01 16:25:54 +02:00
Uwe Steinmann
ce621bb6b8 add entry for 5.1.24 2021-08-31 13:32:36 +02:00
Uwe Steinmann
67ab9fbf71 remove old code 2021-08-31 10:29:56 +02:00
Uwe Steinmann
200806effd use new methods to inform approvers/reviewers about deleting/adding a review/approval 2021-08-31 10:27:20 +02:00
Uwe Steinmann
df8e0c29e9 add methods to inform a user/group about adding/deleting as a reviewer/approver 2021-08-31 10:26:34 +02:00
Uwe Steinmann
1d5164c2ab use sendChangedDocumentStatusMail() 2021-08-30 19:41:26 +02:00
Uwe Steinmann
cd10bcaea3 add sendApprovalRequestMail() and sendReviewRequestMail() 2021-08-30 19:40:43 +02:00
Uwe Steinmann
aadcbbd979 check if workflow exists in sendRequestWorkflowActionMail() 2021-08-30 19:40:10 +02:00
Uwe Steinmann
a4276a42a9 add and use sendRewindWorkflowMail() 2021-08-30 19:39:29 +02:00
Uwe Steinmann
6dac961e9c call sendChangedDocumentStatusMail() if status has changed 2021-08-30 19:36:40 +02:00
Uwe Steinmann
3951c3ec38 call sendReviewRequestMail() after review was removed 2021-08-30 19:35:47 +02:00
Uwe Steinmann
13ad0788a3 send notification mail when new attachment was added 2021-08-30 19:35:08 +02:00
Uwe Steinmann
33c10fc1db add some documentation in comments 2021-08-30 19:34:38 +02:00
Uwe Steinmann
48a0ca8cb9 use new methods sendTriggerWorkflowTransitionMail and sendRequestWorkflowActionMail 2021-08-30 16:04:51 +02:00
Uwe Steinmann
42fdeaf915 fix type of recipient when send notification, remove old code 2021-08-30 16:04:15 +02:00
Uwe Steinmann
8018dc1a24 remove old code 2021-08-30 16:03:42 +02:00
Uwe Steinmann
96ca072528 add methods sendRequestWorkflowActionMail and sendTriggerWorkflowTransitionMail 2021-08-30 16:03:00 +02:00
Uwe Steinmann
33ad98bdfd replace $notifier-> by $this-> 2021-08-30 16:02:22 +02:00
Uwe Steinmann
45b51cb043 send notification to owner 2021-08-30 16:01:54 +02:00
Uwe Steinmann
0ac0ca5760 remove duplicate of sendRequestWorkflowActionMail() 2021-08-30 16:00:51 +02:00
Uwe Steinmann
5cf3b5fc3e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-27 09:56:43 +02:00
Uwe Steinmann
567488cab9 lots or minor corrections and updates 2021-08-27 09:55:58 +02:00
Uwe Steinmann
6ccabf1c68 start change log for 6.0.17 2021-08-27 09:55:31 +02:00
Uwe Steinmann
4f3a7f6512 send notification on submit of reception 2021-08-27 09:55:08 +02:00
Uwe Steinmann
6fbfe15baf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-25 16:11:04 +02:00
Uwe Steinmann
e80da33da7 start changelog for 5.1.24 2021-08-25 15:09:33 +02:00
Uwe Steinmann
60a13b9f13 check view access for DocumentAccess and Folder FolderAccess 2021-08-25 15:08:24 +02:00
Uwe Steinmann
b66e87b72d fix sending of notification mails to groups 2021-08-25 15:05:35 +02:00
Uwe Steinmann
d19288b7c3 take section on jumploader, minor corrections 2021-08-25 12:39:07 +02:00
Uwe Steinmann
43c1385e0f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-20 11:16:21 +02:00
Uwe Steinmann
d786a66adc check for access on WorkflowGraph 2021-08-20 11:16:03 +02:00
Uwe Steinmann
11c97f4c41 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-20 11:02:53 +02:00
Uwe Steinmann
ace8161afd fix strange char 2021-08-20 11:02:34 +02:00
Uwe Steinmann
ef551e6923 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-20 11:01:13 +02:00
Uwe Steinmann
0f786a73b6 check access on WorkflowGraph 2021-08-20 11:00:51 +02:00
Uwe Steinmann
ada2730636 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-20 10:51:34 +02:00
Uwe Steinmann
6a8382747b start new version 5.1.24 2021-08-20 10:42:44 +02:00
Uwe Steinmann
160f427bea start new version 5.1.24 2021-08-20 10:42:26 +02:00
Uwe Steinmann
fa8356d729 in removeWorkflow() remove records from tblWorkflowLog before tblWorkflowDocumentContent 2021-08-20 10:38:33 +02:00
Uwe Steinmann
3a26fc3e2a use a unified layout 2021-08-20 09:45:58 +02:00
Uwe Steinmann
f18ab76b63 escape special chars in translation form 2021-08-20 09:45:35 +02:00
Uwe Steinmann
ee654df475 fix css to mostly prevent scroll bars 2021-08-20 09:44:30 +02:00
Uwe Steinmann
ffc2565933 show translated action name in workflow log 2021-08-20 09:44:02 +02:00
Uwe Steinmann
588369b64d fix table class 2021-08-20 09:43:09 +02:00
Uwe Steinmann
fd4131497b escape special chars in missing translation form 2021-08-20 09:42:27 +02:00
Uwe Steinmann
7b807f8d67 correct processing of return value of getWorkflowLog() 2021-08-20 08:46:18 +02:00
Uwe Steinmann
40ce4a74e1 Merge branch 'seeddms-5.1.x' 2021-08-19 15:54:46 +02:00
Uwe Steinmann
f19ed34d25 pass notifier to constructor of SeedDMS_SchedulerTaskBase 2021-08-19 13:52:51 +02:00
Uwe Steinmann
bbcf7cb979 do send mail to disabled users or guests 2021-08-19 13:52:13 +02:00
Uwe Steinmann
99bc6becb6 do not check for sender in toList() because it is done in toIndividual() 2021-08-19 13:51:07 +02:00
Uwe Steinmann
0a6ce976c7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-18 12:42:46 +02:00
Uwe Steinmann
a4fb4230e8 add login to key when getting statistics for 'sizeperuser' 2021-08-18 12:21:48 +02:00
Uwe Steinmann
c3dd223dc4 check if array key '__disabled__' is set 2021-08-18 12:12:36 +02:00
Uwe Steinmann
80dbb8f09b check if fetch() returns a record 2021-08-18 12:12:07 +02:00
Uwe Steinmann
ef1113490d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-18 10:57:51 +02:00
Uwe Steinmann
a7aa3ff904 fix php error when checking for undeletable user ids 2021-08-18 10:57:18 +02:00
Uwe Steinmann
5ddfa0e297 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-18 10:31:34 +02:00
Uwe Steinmann
e3cf72b3d2 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-08-18 10:31:19 +02:00
Uwe Steinmann
663aa0cb91 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-08-18 10:31:05 +02:00
Uwe Steinmann
fb114b8dbf minor translation updates 2021-08-18 10:30:41 +02:00
Uwe Steinmann
73d27bc82b schedule next run before executing current run 2021-08-17 20:54:57 +02:00
Uwe Steinmann
be7aa1b4a8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-17 17:56:17 +02:00
Uwe Steinmann
494e5912af include Previewer 2021-08-17 17:55:55 +02:00
Uwe Steinmann
749f7a2fb1 revert change of $myincpath 2021-08-06 09:19:54 +02:00
Uwe Steinmann
9e9995241d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-06 08:58:35 +02:00
Uwe Steinmann
0cf8e7cac5 fix adding of multiple favicons or logos 2021-08-06 08:58:03 +02:00
Uwe Steinmann
46040dce7e add '/www' to $myincpath 2021-08-06 08:34:19 +02:00
Uwe Steinmann
8b34c4f82e fix width in task for creating preview 2021-08-06 08:33:34 +02:00
Uwe Steinmann
8bc9ab8f3c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-05 08:42:34 +02:00
Uwe Steinmann
bb77e2d62d fix typo in echo 2021-08-05 08:41:51 +02:00
Uwe Steinmann
0f79234012 show versions if database version doesn't match seeddms version 2021-08-05 08:41:16 +02:00
Uwe Steinmann
817433638b doNotCheckVersion must be doNotCheckDBVersion 2021-08-05 08:40:49 +02:00
Uwe Steinmann
62d9241276 catch exeption when opening database connection 2021-08-05 08:40:13 +02:00
Uwe Steinmann
cd9d1fe25f fix hard coded version number 2021-08-05 08:39:39 +02:00
Uwe Steinmann
9f20268d3b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-04 14:20:07 +02:00
Uwe Steinmann
401452767e get dir of config file even if config file is set in environment 2021-08-04 14:19:11 +02:00
Uwe Steinmann
cb0c51234e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-23 14:07:03 +02:00
Uwe Steinmann
b9f4d7b0ba issue a message if no attributes are defined 2021-07-23 14:03:44 +02:00
Uwe Steinmann
03eb842f8e remove extra '/' in referuri 2021-07-23 13:41:04 +02:00
Uwe Steinmann
a027f1f70d check if sqlite db has propper path 2021-07-23 13:40:42 +02:00
Uwe Steinmann
9c7ce41163 msg can be passed to install method 2021-07-23 13:40:16 +02:00
Uwe Steinmann
cc9835e3a6 add pear dir to include path 2021-07-23 13:39:59 +02:00
Uwe Steinmann
a26916243c move lots of functions into view 2021-07-23 12:09:07 +02:00
Uwe Steinmann
6a72b3c0fa extra _extraPath if not empty, add rootDir.'../pear' to include path 2021-07-23 12:08:26 +02:00
Uwe Steinmann
e29976bf25 check for more php modules and > 7.2.5 2021-07-23 12:07:30 +02:00
Uwe Steinmann
c16246fcfb nicer formatting 2021-07-23 12:06:50 +02:00
Uwe Steinmann
58a46497f0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-21 16:11:33 +02:00
Uwe Steinmann
79292956c5 better error checking 2021-07-21 15:48:42 +02:00
Uwe Steinmann
dbced5e409 no longer use old static methods in UI_Default 2021-07-21 15:46:01 +02:00
Uwe Steinmann
f1358317ea remove all old methods not longer used 2021-07-21 15:45:24 +02:00
Uwe Steinmann
c1e794dc4f fix updating tblDocumentFiles 2021-07-21 15:24:50 +02:00
Uwe Steinmann
51c342b5e3 replace tab with spaces 2021-07-21 15:24:17 +02:00
Uwe Steinmann
93c88a6f87 add changes for 6.0.16 2021-07-21 08:33:14 +02:00
Uwe Steinmann
50d528a831 fix export, export xlsx, do not collapse search form anymore 2021-07-21 08:13:15 +02:00
Uwe Steinmann
20dd55840e use replacement for PHPExcel() which is outdated for a long time, create xlsx instead of xls 2021-07-21 08:12:17 +02:00
Uwe Steinmann
74003313e8 pass url param 'includecontent' to view 2021-07-21 08:11:14 +02:00
Uwe Steinmann
09a60988fb parameter $urlparams of html_url() can be a string 2021-07-21 08:10:42 +02:00
Uwe Steinmann
23f05a4eb6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-20 17:32:01 +02:00
Uwe Steinmann
b0804f5562 add note on how to use tika 2021-07-20 16:31:44 +02:00
Uwe Steinmann
d7a936f6f1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-20 07:59:16 +02:00
Uwe Steinmann
048a9d8b82 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-07-20 07:59:02 +02:00
Uwe Steinmann
36dcadc237 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-07-20 07:58:52 +02:00
Uwe Steinmann
11368e8349 some new phrases 2021-07-20 07:58:33 +02:00
Uwe Steinmann
54396e6876 move submit button out of contentContainer 2021-07-20 06:22:37 +02:00
Uwe Steinmann
532db722a6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-16 16:20:11 +02:00
Uwe Steinmann
0571739142 add notes for 5.1.23 2021-07-16 16:08:03 +02:00
Uwe Steinmann
a113649be3 add support for drag and drop of attachments 2021-07-16 16:03:34 +02:00
Uwe Steinmann
9c66a9350a show all readable folders in tree, to make writeable subfolder visible 2021-07-16 15:57:06 +02:00
Uwe Steinmann
0072efd2ff new command 'addfile' for adding attachments 2021-07-16 15:55:47 +02:00
Uwe Steinmann
c1a2411882 remove plain html for error and warning msgs 2021-07-15 17:43:50 +02:00
Uwe Steinmann
75d716db26 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-14 21:10:57 +02:00
Uwe Steinmann
9b6f376be8 get access list before checking for workflow mode 2021-07-14 21:10:21 +02:00
Uwe Steinmann
4401ce7b23 fix form validation, sync with UpdateDocument 2021-07-14 21:09:28 +02:00
Uwe Steinmann
74d1b11250 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-14 16:32:00 +02:00
Uwe Steinmann
7d16ed6168 take given name of document if set 2021-07-14 16:31:32 +02:00
Uwe Steinmann
34ebc280e8 remove extra '/' in path 2021-07-14 15:45:06 +02:00
Uwe Steinmann
3cfa3d2d7b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-14 15:27:48 +02:00
Uwe Steinmann
b369ab3d31 add class fileupload-group to input field of document chooser 2021-07-14 14:52:28 +02:00
Uwe Steinmann
f2b0375df6 user warningMsg() instead of plain html code 2021-07-14 13:45:55 +02:00
Uwe Steinmann
64a5ea3d90 allow to cancel checkout if document was not modified 2021-07-14 13:28:26 +02:00
Uwe Steinmann
020e307240 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-14 12:03:12 +02:00
Uwe Steinmann
55a7667c1e check for null passed as folder to getFolderList() 2021-07-14 12:02:15 +02:00
Uwe Steinmann
ca9e1c8860 check for null passed as folder to getFolderList() 2021-07-14 12:00:47 +02:00
Uwe Steinmann
59d9786a4c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-13 12:45:40 +02:00
Uwe Steinmann
d4b05b61f2 remove old code 2021-07-13 12:05:18 +02:00
Uwe Steinmann
fcff7b2a1d add missing access checks, remove old code 2021-07-13 12:05:01 +02:00
Uwe Steinmann
180b9a4b7e remove some spaces 2021-07-13 11:48:54 +02:00
Uwe Steinmann
e733b4fced add new method printAttribute() (just like in 5.1.x) 2021-07-12 19:47:34 +02:00
Uwe Steinmann
652acf4b86 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-12 19:45:02 +02:00
Uwe Steinmann
5f1460757a add new method printAttribute(), just like in class.ViewDocument.php 2021-07-12 19:44:25 +02:00
Uwe Steinmann
0bd2e2d83d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-11 20:42:56 +02:00
Uwe Steinmann
2ccb30490d add changes in 5.1.23 2021-07-11 20:42:35 +02:00
Uwe Steinmann
39eda2a180 add method concat() and use it in getStatistics() for docspersuser and foldersperuser 2021-07-11 20:41:53 +02:00
Uwe Steinmann
c5b9306918 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-11 20:18:16 +02:00
Uwe Steinmann
51b72eb7b2 fix checking if a document link may be deleted 2021-07-11 20:08:13 +02:00
Uwe Steinmann
40ca91d9d7 pass $dms to view which fixes an error when calling the page 2021-07-11 20:07:30 +02:00
Uwe Steinmann
c91476fe80 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-10 22:28:35 +02:00
Uwe Steinmann
0efbba9e20 fix setting bool and array values 2021-07-10 22:28:16 +02:00
Uwe Steinmann
8767d170f1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-10 22:08:40 +02:00
Uwe Steinmann
0037aeae68 pass dms to view, because it's needed in globalBanner() 2021-07-10 12:53:07 +02:00
Uwe Steinmann
e2960219c8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-09 14:53:16 +02:00
Uwe Steinmann
42bb24358c output number of folders, links, files, versions 2021-07-09 14:24:20 +02:00
Uwe Steinmann
a9b2b267a4 new chart foldersperuser 2021-07-09 14:24:03 +02:00
Uwe Steinmann
c889e075f7 add notes for 5.1.23 2021-07-09 14:23:31 +02:00
Uwe Steinmann
d955f07b7a new methods getFolders(), getDocumentLinks(), getDocumentFiles(), getDocumentContents() 2021-07-09 14:22:11 +02:00
Uwe Steinmann
14b1cd34cd new type foldersperuser in getStatisticalData() 2021-07-09 14:21:52 +02:00
Uwe Steinmann
0b22b8d657 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-08 14:27:08 +02:00
Uwe Steinmann
42f2ce31cf check if hooks return false (but not action is taken) 2021-07-08 14:19:36 +02:00
Uwe Steinmann
13f0f6aafb use errorMsg() instead of plain html 2021-07-08 14:18:49 +02:00
Uwe Steinmann
d67e85be06 add class fileupload-group to dropfolder and file upload, used by validation 2021-07-08 14:17:47 +02:00
Uwe Steinmann
91170c7db3 add hook addDocumentContentFile() for extra form field getting data for file upload (e.g. a web page), better validation 2021-07-08 14:16:13 +02:00
Uwe Steinmann
4149c33b39 add hook for retrieving more uploaded files from post data 2021-07-08 14:15:03 +02:00
Uwe Steinmann
e0a12590da callHook merges strings and arrays returned from hook 2021-07-08 14:14:13 +02:00
Uwe Steinmann
8a7fb230da fix hasHook() which still had some old code 2021-07-08 11:05:27 +02:00
Uwe Steinmann
8b2b2a12e2 propperly update expire of cookie (do not take enableLargeFileUpload into account) 2021-07-07 09:46:29 +02:00
Uwe Steinmann
f5068fa30f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-07 08:28:56 +02:00
Uwe Steinmann
ee55fc6688 use html_url() where possible 2021-07-07 08:26:13 +02:00
Uwe Steinmann
132cbf336a rename check_access to check_view_access, first param of html_url is no longer optional 2021-07-07 08:25:26 +02:00
Uwe Steinmann
bf45f09381 add note about changed link creation 2021-07-06 18:18:43 +02:00
Uwe Steinmann
378993782b do not create relative link 2021-07-06 18:15:00 +02:00
Uwe Steinmann
47a47b84aa ignore webapp 2021-07-06 17:09:57 +02:00
Uwe Steinmann
75b2ba4132 add missing logo images 2021-07-06 17:09:46 +02:00
Uwe Steinmann
8de6c64f1c add missing css and js files (formerly in styles/bootstrap) 2021-07-06 09:55:57 +02:00
Uwe Steinmann
30b8d4ddd9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-06 09:45:44 +02:00
Uwe Steinmann
b7885ad6f6 use check_xxx_access() and html_link(), backported from 6.0.x 2021-07-06 09:32:02 +02:00
Uwe Steinmann
496c70c024 add methods check_access(), html_url(), html_link() backported from 6.0.x 2021-07-06 09:31:11 +02:00
Uwe Steinmann
cdb93920e4 html_link() takes care of wrapping the links into '<li>..</li>' 2021-07-06 07:35:00 +02:00
Uwe Steinmann
9a616999d3 new parameter $wrap can be passed to html_link() 2021-07-06 07:34:26 +02:00
Uwe Steinmann
00041b30bd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-06 06:44:29 +02:00
Uwe Steinmann
6ce08a531f replace relative links by absolute links 2021-07-06 06:13:57 +02:00
Uwe Steinmann
a289c8bbf6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-05 17:22:04 +02:00
Uwe Steinmann
40beffff14 remove lots of relative links because the can break with faked urls 2021-07-05 16:30:26 +02:00
Uwe Steinmann
6fccfd1d18 use _httpRoot for imagepath 2021-07-05 16:29:30 +02:00
Uwe Steinmann
00bbfff34d make $settings already in constructor of view class available 2021-07-05 16:28:51 +02:00
Uwe Steinmann
cb601a82eb expect parameter of type SeedDMS_SchedulerTask in execute() 2021-07-05 10:08:51 +02:00
Uwe Steinmann
7218e47558 do not output date of last run if task hasn't run yet 2021-07-02 12:26:15 +02:00
Uwe Steinmann
56c35b5eba new method showConfigFolder() for selecting a folder, use for libraryFolder 2021-07-02 09:28:05 +02:00
Uwe Steinmann
486a685873 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-02 08:36:23 +02:00
Uwe Steinmann
4d7e041388 approvals can be removed by admins 2021-07-02 08:34:06 +02:00
Uwe Steinmann
948184b5b0 fix comment in header 2021-07-02 08:32:56 +02:00
Uwe Steinmann
2c4dc73be3 add new method removeApproval() 2021-07-02 08:32:18 +02:00
Uwe Steinmann
5cbf98e832 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-01 12:45:53 +02:00
Uwe Steinmann
f28153497e add missing files to package 2021-07-01 12:45:36 +02:00
Uwe Steinmann
bffa24ad60 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-01 12:28:58 +02:00
Uwe Steinmann
c9a842e2d0 add entry for 5.1.23 2021-07-01 12:26:43 +02:00
Uwe Steinmann
2a23dbb0ef Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-01 12:25:19 +02:00
Uwe Steinmann
83975e150a Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-07-01 12:21:35 +02:00
Uwe Steinmann
9a9f797311 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-07-01 12:21:14 +02:00
Uwe Steinmann
d11feff2aa add more phrases 2021-07-01 12:20:54 +02:00
Uwe Steinmann
1360fbc478 allow removal of reviews 2021-07-01 12:17:04 +02:00
Uwe Steinmann
d6419d38ef add new config var enableRemoveRevApp 2021-07-01 12:14:55 +02:00
Uwe Steinmann
2ea83e65d5 set class of table 2021-07-01 11:46:33 +02:00
Uwe Steinmann
80f712e716 catch exeption if 'created' is not set 2021-07-01 11:45:46 +02:00
Uwe Steinmann
0cd9910c25 add new method SeedDMS_Core_DocumentContent::removeReview() 2021-07-01 11:44:49 +02:00
Uwe Steinmann
f67ba27e4b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-30 16:33:03 +02:00
Uwe Steinmann
189f962012 add new methods setCmd() and setContent() 2021-06-30 12:53:20 +02:00
Uwe Steinmann
b84bf38842 make api much more like Zend_Lucene api 2021-06-30 12:51:57 +02:00
Uwe Steinmann
8c4e20e649 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-29 11:27:25 +02:00
Uwe Steinmann
1f22a0dd22 add more access checking 2021-06-29 11:26:55 +02:00
Uwe Steinmann
8eb5882520 revert to regex for email validation 2021-06-29 10:20:31 +02:00
Uwe Steinmann
03a394906e more access control 2021-06-29 09:44:30 +02:00
Uwe Steinmann
bf23abad87 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-29 09:07:23 +02:00
Uwe Steinmann
0edce2694b include Settings.php only if $settings not set 2021-06-29 09:06:49 +02:00
Uwe Steinmann
e8a50e3101 more access checking 2021-06-29 09:04:57 +02:00
Uwe Steinmann
0c260f286b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-29 08:27:07 +02:00
Uwe Steinmann
efd159e4d8 call hook preIndexFolder() for folders 2021-06-29 08:26:42 +02:00
Uwe Steinmann
38993eced2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-28 12:04:58 +02:00
Uwe Steinmann
84b0f6ac35 check for type and value and showConfigVar() 2021-06-28 12:04:27 +02:00
Uwe Steinmann
635d8253fe add space after scriptname in add_log_line() 2021-06-28 11:15:56 +02:00
Uwe Steinmann
f02074c794 better message when running in dry mode 2021-06-28 11:15:36 +02:00
Uwe Steinmann
4e33cee86a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-28 09:32:00 +02:00
Uwe Steinmann
47aebfdb14 do not strip .php from uri in add_log_line() 2021-06-28 09:27:40 +02:00
Uwe Steinmann
34a02f77d7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-28 09:26:22 +02:00
Uwe Steinmann
cb383eb70b do not strip .php from uri in add_log_line() 2021-06-28 09:25:58 +02:00
Uwe Steinmann
4de124d9ae take out logging of cachedir path 2021-06-28 09:19:20 +02:00
Uwe Steinmann
c57640f804 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-28 09:03:35 +02:00
Uwe Steinmann
2ce03dcb2a Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-06-28 09:03:21 +02:00
Uwe Steinmann
7209175766 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-06-28 09:03:10 +02:00
Uwe Steinmann
ee544eb4e7 add new and update existing phrases 2021-06-28 09:02:46 +02:00
Uwe Steinmann
b0478bec3c show a message if conf var is disabled, but do not hide it completely 2021-06-28 09:00:35 +02:00
Uwe Steinmann
8c130c06e4 check remaining conf vars if disabled in hiddenConfFields 2021-06-28 08:59:42 +02:00
Uwe Steinmann
ece38b9d22 store undelUserIds as array in settings class 2021-06-26 11:57:02 +02:00
Uwe Steinmann
1eb2c3ed9f check if partitionsize is greater the max upload size 2021-06-26 11:56:25 +02:00
Uwe Steinmann
39fc81b64b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-25 09:35:35 +02:00
Uwe Steinmann
bc50f2f8b6 add new method SeedDMS_Core_Document::hasCategory() 2021-06-25 09:34:54 +02:00
Uwe Steinmann
db2c4a739e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-25 09:06:41 +02:00
Uwe Steinmann
61a5dbc2b9 check if latest content exists 2021-06-25 09:02:39 +02:00
Uwe Steinmann
371f348d88 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-25 08:59:18 +02:00
Uwe Steinmann
ff9385bf1e change behaviour of mayEditComment and mayEditAttributes 2021-06-25 08:54:05 +02:00
Uwe Steinmann
d871bd6e62 update note for 5.1.23 2021-06-24 22:49:16 +02:00
Uwe Steinmann
265865a9b6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-24 22:46:54 +02:00
Uwe Steinmann
a18bc970df do not explode hiddenConfFields, because it's done when reading the xml 2021-06-24 22:34:04 +02:00
Uwe Steinmann
7af5857df3 add new methods setXXXValue which check if _POST data has value and it is not hidden 2021-06-24 22:33:17 +02:00
Uwe Steinmann
97414a0971 just read hiddenConfFields but do not save 2021-06-24 22:32:04 +02:00
Uwe Steinmann
f443f6544a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-24 14:37:50 +02:00
Uwe Steinmann
3ad1c9aa38 set field created of folders 2021-06-24 14:37:31 +02:00
Uwe Steinmann
7635146a94 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-24 12:52:49 +02:00
Uwe Steinmann
9fd8465a43 pass fulltextservice to view 2021-06-24 12:52:27 +02:00
Uwe Steinmann
363f417eb7 index folders in task 2021-06-24 12:51:44 +02:00
Uwe Steinmann
3827cdda27 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-24 11:41:23 +02:00
Uwe Steinmann
1ee2744256 index current folder before tree 2021-06-24 11:39:46 +02:00
Uwe Steinmann
04c494eaaa set documentid in findById(), getDocument returns content, take out getFolder() 2021-06-24 11:39:13 +02:00
Uwe Steinmann
50e8c84932 use findById instead of find in getDocument() and getFolder() 2021-06-24 11:38:04 +02:00
Uwe Steinmann
ec46d40194 indent folders, place folder icon in front of folder name 2021-06-24 09:26:37 +02:00
Uwe Steinmann
1c839fd26b pass depth of iterator to callback function 2021-06-24 09:26:17 +02:00
Uwe Steinmann
6d1aa2f347 use translated text 2021-06-24 08:43:09 +02:00
Uwe Steinmann
cefcdc966b use check_view_access instead of checking for admin 2021-06-23 17:55:35 +02:00
Uwe Steinmann
780d398d4c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-23 17:52:48 +02:00
Uwe Steinmann
98e5c868a4 pass access object to view 2021-06-23 17:48:46 +02:00
Uwe Steinmann
8cbf9c803f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-23 17:18:21 +02:00
Uwe Steinmann
5baac2b4ff add entry for 5.1.23 2021-06-23 17:17:16 +02:00
Uwe Steinmann
932835ef03 add field in configuration for hidden other fields in settings form 2021-06-23 16:27:09 +02:00
Uwe Steinmann
f8d81bd734 theme can be set in user manager 2021-06-23 14:49:53 +02:00
Uwe Steinmann
0754a794d3 fix creating AccessOperation 2021-06-23 09:01:24 +02:00
Uwe Steinmann
1a3d3c8f80 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-23 09:00:33 +02:00
Uwe Steinmann
e21ef794c4 add access control 2021-06-23 08:58:55 +02:00
Uwe Steinmann
ea5efd75d7 add access control for EditComment and EditAttributes 2021-06-22 11:33:54 +02:00
Uwe Steinmann
d1b967e9f3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-22 10:01:31 +02:00
Uwe Steinmann
0f98640ba3 make login form smaller and put it into a div 2021-06-22 10:00:55 +02:00
Uwe Steinmann
aab0e356bb add logo in global navigation 2021-06-22 10:00:24 +02:00
Uwe Steinmann
846e8d490e remove output of favicon in global navigation, add logo in global nav 2021-06-22 09:59:17 +02:00
Uwe Steinmann
aa4997a7e7 add access check 2021-06-22 09:48:28 +02:00
Uwe Steinmann
79e926324a add access check for EditFolder, MoveFolder, put logo in header 2021-06-22 09:47:16 +02:00
Uwe Steinmann
bfcad700af Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-21 18:10:50 +02:00
Uwe Steinmann
369497ee3a fix validation of emails 2021-06-21 18:09:59 +02:00
Uwe Steinmann
525b6d45c9 add entry for 5.1.23 2021-06-21 08:59:17 +02:00
Uwe Steinmann
0b9435d362 append referuri to base url to prevent redirects to arbitraty sites 2021-06-21 08:58:22 +02:00
Uwe Steinmann
fff27af7e6 better documentation 2021-06-18 13:56:18 +02:00
Uwe Steinmann
e91a66af21 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-16 14:28:33 +02:00
Uwe Steinmann
a8921b67f8 add note about fixed security issue in 5.1.23 2021-06-16 14:26:31 +02:00
Uwe Steinmann
a38f7fd408 secure locking/inlocking documents with security token 2021-06-16 14:23:53 +02:00
Uwe Steinmann
1ab5f83395 output info message above form if it set 2021-06-16 08:04:42 +02:00
Uwe Steinmann
e425120d7d mails listing expired documents can be send for each owner 2021-06-16 08:02:32 +02:00
Uwe Steinmann
fbc3be64a2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-14 17:24:10 +02:00
Uwe Steinmann
22c4649d27 fix html for unfolding search form 2021-06-14 17:23:42 +02:00
Uwe Steinmann
eeb3422e8a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-14 17:20:39 +02:00
Uwe Steinmann
59130d1756 fix listing users in form 2021-06-14 17:20:16 +02:00
Uwe Steinmann
4363566998 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-14 09:10:27 +02:00
Uwe Steinmann
ab546099f1 fix possible CSRF attack by setting document name 2021-06-14 09:09:36 +02:00
Uwe Steinmann
514249a132 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-09 13:01:45 +02:00
Uwe Steinmann
dfb6061b41 fix classes of table 2021-06-08 18:16:43 +02:00
Uwe Steinmann
3480a9550d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-08 09:01:51 +02:00
Uwe Steinmann
290a01c2b1 logo can be set in extraheader 2021-06-08 09:01:30 +02:00
Uwe Steinmann
047b5bb3b0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-08 07:09:04 +02:00
Uwe Steinmann
54b403882e fix downloading log file 2021-06-08 07:07:34 +02:00
Uwe Steinmann
74292d9304 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-07 21:15:48 +02:00
Uwe Steinmann
0d5ba3bc1e pass $logger to migrate() 2021-06-07 21:15:18 +02:00
Uwe Steinmann
7c818d0913 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-01 11:02:45 +02:00
Uwe Steinmann
2ef409c197 make it look like Review/Approval summary 2021-06-01 10:54:32 +02:00
Uwe Steinmann
0f072fc9a9 check if current workflow state != null 2021-06-01 10:54:06 +02:00
Uwe Steinmann
822aef2e53 check if current workflow state != null 2021-06-01 10:52:45 +02:00
Uwe Steinmann
0ba0724e82 add class 'table-sm' 2021-06-01 10:52:26 +02:00
Uwe Steinmann
3366d9a149 check for workflow state != null 2021-06-01 10:52:00 +02:00
Uwe Steinmann
6de32dcc2c add class 'table-sm' 2021-06-01 10:51:16 +02:00
Uwe Steinmann
3003d6d0d3 check for non empty workflow state 2021-06-01 10:50:55 +02:00
Uwe Steinmann
1ef9e60297 add note for 5.1.23 2021-06-01 10:50:28 +02:00
Uwe Steinmann
116bf3d5dd getNextTransitions() returns false if passed state is empty 2021-06-01 10:49:32 +02:00
Uwe Steinmann
b624cd0a61 fix getWorkflowState(), can now handle empty state 2021-06-01 10:48:52 +02:00
Uwe Steinmann
d5b21e0eca place submit button outside of content container 2021-06-01 07:15:52 +02:00
Uwe Steinmann
cd263e7353 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-01 07:07:12 +02:00
Uwe Steinmann
04a5f21a07 place submit button and graph outside of content container 2021-06-01 07:06:37 +02:00
Uwe Steinmann
7485d0291a use jquery validation 2021-06-01 07:05:59 +02:00
Uwe Steinmann
5d6235ec0b place submit button outside of contentContainer 2021-06-01 06:49:55 +02:00
Uwe Steinmann
554b102356 fix layout (still not perfect) 2021-06-01 06:49:16 +02:00
Uwe Steinmann
012c3b7d22 use jquery validatation 2021-06-01 06:48:42 +02:00
Uwe Steinmann
33616f2c92 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-31 21:55:09 +02:00
Uwe Steinmann
f187a80ac5 fix php warning because of missing $workflow 2021-05-31 21:54:16 +02:00
Uwe Steinmann
64658c06cd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-31 21:53:08 +02:00
Uwe Steinmann
4d931b74e5 use jquery validation 2021-05-31 19:38:26 +02:00
Uwe Steinmann
9ae4a01705 check if download/viewonline is allowed 2021-05-31 19:32:39 +02:00
Uwe Steinmann
13d1e92434 use jquery validation 2021-05-31 19:14:19 +02:00
Uwe Steinmann
8f5a699f0c log successful authentication 2021-05-31 19:13:51 +02:00
Uwe Steinmann
d325340e0b use jquery validation 2021-05-28 14:18:26 +02:00
Uwe Steinmann
07919b0810 add code to use bootstrap's custom file input (currently not used) 2021-05-28 12:23:04 +02:00
Uwe Steinmann
16e4675d93 add comment 2021-05-28 10:36:39 +02:00
Uwe Steinmann
1b566f8fde add '\n' after js statement 2021-05-28 10:36:15 +02:00
Uwe Steinmann
d3b8202086 set message after successful folder/document deletion 2021-05-28 10:35:39 +02:00
Uwe Steinmann
8ed5d8cdc9 add more changes to 5.1.22 2021-05-27 21:57:57 +02:00
Uwe Steinmann
c75ae806ae switch to jquery validation of forms 2021-05-27 21:57:12 +02:00
Uwe Steinmann
3a3b4ec953 add default values for jquery validation 2021-05-27 21:56:33 +02:00
Uwe Steinmann
cf411df04f add data-target-highlight for jquery validation 2021-05-27 21:55:34 +02:00
Uwe Steinmann
ea45ed5b7b issue warning if document has expired, validate form to add link 2021-05-27 21:53:49 +02:00
Uwe Steinmann
2ec025451b pass $dms and guestId to view 2021-05-27 21:52:40 +02:00
Uwe Steinmann
386a18be09 check for name, email and comment, remove duplicate quota code 2021-05-27 21:52:01 +02:00
Uwe Steinmann
9575090fdd check if name and comment is set 2021-05-27 19:52:13 +02:00
Uwe Steinmann
8b69d859a4 check if comment is set 2021-05-27 19:51:50 +02:00
Uwe Steinmann
730bcedc30 put header above error messages 2021-05-27 12:58:37 +02:00
Uwe Steinmann
a4d78cc0f6 set all themes to bootstrap 2021-05-27 12:58:14 +02:00
Uwe Steinmann
43938a1c19 set SQL_MODE to allow invalid date values 2021-05-27 12:57:44 +02:00
Uwe Steinmann
917b583d2a do not drop primary key of tblDocumentContent (it doesn't exist) 2021-05-27 12:57:02 +02:00
Uwe Steinmann
7406ad6297 check if guest user actually exists 2021-05-27 12:56:31 +02:00
Uwe Steinmann
afb77c4365 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-25 15:40:20 +02:00
Uwe Steinmann
bbb9d5c0d6 set class="btn" in link to open modal box, otherwise the button disappears 2021-05-25 15:15:27 +02:00
Uwe Steinmann
9691a106e2 fix typo 2021-05-25 09:03:32 +02:00
Uwe Steinmann
1132bd134e fix strict php warning 2021-05-25 09:02:59 +02:00
Uwe Steinmann
1a5a5ad6c8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-22 13:58:37 +02:00
Uwe Steinmann
21ce9631d7 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-05-22 13:58:23 +02:00
Uwe Steinmann
be5785589b Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-05-22 13:58:11 +02:00
Uwe Steinmann
f1a17f18a4 minor updates 2021-05-22 13:57:55 +02:00
Uwe Steinmann
aef421a581 fix color change of header after substituion of user 2021-05-22 13:14:17 +02:00
Uwe Steinmann
3614bae91b get status of latest content 2021-05-22 13:12:38 +02:00
Uwe Steinmann
da86d0714d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-21 14:55:05 +02:00
Uwe Steinmann
635c40bd84 put menu items into one global menu 2021-05-21 14:54:23 +02:00
Uwe Steinmann
165eaec67e set zIndexOffset of datepicker to 1040, which is above the header 2021-05-21 14:53:42 +02:00
Uwe Steinmann
88ace95baa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-21 10:40:25 +02:00
Uwe Steinmann
19600dd7ca no need to include bootbox.js anymore 2021-05-21 10:37:09 +02:00
Uwe Steinmann
05a3405f07 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-21 10:11:42 +02:00
Uwe Steinmann
b12dbd8e02 move sending notification mail into Notification service 2021-05-21 09:14:55 +02:00
Uwe Steinmann
a9d912bce2 better error checking, send notification mail via notification service 2021-05-21 08:54:07 +02:00
Uwe Steinmann
eacd59c2ef issue splash messages 2021-05-21 08:53:43 +02:00
Uwe Steinmann
477d1a69b8 issue splash message 2021-05-21 08:51:47 +02:00
Uwe Steinmann
9ed96e2a2a init $statusstartdate and $statusenddate in search() 2021-05-21 08:51:08 +02:00
Uwe Steinmann
aa8f6250b3 move sending notification emails into notification service 2021-05-19 21:19:32 +02:00
Uwe Steinmann
8de5b0ab15 add notes for 5.1.23 2021-05-19 20:44:37 +02:00
Uwe Steinmann
5028f37acc move notification emails into notification service 2021-05-19 20:41:50 +02:00
Uwe Steinmann
24be00ccd1 add methods getApproveLog() and getReviewLog() 2021-05-19 20:40:45 +02:00
Uwe Steinmann
1d4bd6d1f0 place submit outside of content area 2021-05-19 17:01:18 +02:00
Uwe Steinmann
acf85728c3 move sending notification mail into Notification Service 2021-05-19 16:18:03 +02:00
Uwe Steinmann
4d84aa2ce2 remove old commented code 2021-05-19 16:11:18 +02:00
Uwe Steinmann
92ff13afc6 move notification mail into notification service 2021-05-19 15:13:49 +02:00
Uwe Steinmann
6feb6d7121 remove already commented code 2021-05-19 08:34:31 +02:00
Uwe Steinmann
ba381d8e85 use controller RemoveDocument, send mail with notification class 2021-05-19 08:33:15 +02:00
Uwe Steinmann
0852d10df4 add version to document update mail, add stub for remove version mail 2021-05-19 08:32:38 +02:00
Uwe Steinmann
97c001acbe move notification mail into notification service 2021-05-18 17:39:14 +02:00
Uwe Steinmann
040793034b move notification mail into class NotificationService 2021-05-18 17:07:14 +02:00
Uwe Steinmann
3422e5a906 move sending notification mail in class NotificationService 2021-05-18 16:58:16 +02:00
Uwe Steinmann
960edf45ea Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-17 13:34:08 +02:00
Uwe Steinmann
72dcae36a2 place submit button outside content area 2021-05-17 13:31:32 +02:00
Uwe Steinmann
cd99928cd4 remove superflous fold mark 2021-05-17 07:01:50 +02:00
Uwe Steinmann
d939b40486 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-17 07:01:22 +02:00
Uwe Steinmann
abd52ea219 set version in sendChangedVersionCommentMail() 2021-05-17 07:01:03 +02:00
Uwe Steinmann
447c035065 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-17 06:59:44 +02:00
Uwe Steinmann
33c6436c16 move more emails into class NotificationService 2021-05-15 22:46:46 +02:00
Uwe Steinmann
7f417157f8 move sending mails into NotificationService 2021-05-15 12:17:07 +02:00
Uwe Steinmann
07b8ab9706 use methods in notification service for sending mails 2021-05-15 07:39:18 +02:00
Uwe Steinmann
d6a296c071 add more methods for sending mails 2021-05-15 07:38:46 +02:00
Uwe Steinmann
64c6c21592 fix error in creating list of notifier 2021-05-15 07:38:04 +02:00
Uwe Steinmann
c6a7460533 add missing case in getAttributeValidationError() 2021-05-15 07:37:21 +02:00
Uwe Steinmann
423f42c1f4 use new method sendNewDocumentMail() to send notification mail 2021-05-14 21:56:37 +02:00
Uwe Steinmann
e436e7fb05 pass settings to notification 2021-05-14 21:56:09 +02:00
Uwe Steinmann
ca52671bac add method sendNewDocumentMail(), settings can be passed to construct 2021-05-14 21:55:48 +02:00
Uwe Steinmann
e40fcf1c2c add method sendNewDocumentMail(), settings can be passed to construct 2021-05-14 21:55:00 +02:00
Uwe Steinmann
e5159ca7f9 add methods SeedDMS_Core_DocumentContent::getReviewers() and SeedDMS_Core_DocumentContent::getApprovers() 2021-05-14 21:54:34 +02:00
Uwe Steinmann
1ac8f31105 check if shift key was preset when clicked in a folder/document row 2021-05-14 19:05:02 +02:00
Uwe Steinmann
b87f68c06e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-14 12:40:48 +02:00
Uwe Steinmann
639c280920 add changes for 5.1.23 2021-05-14 12:39:05 +02:00
Uwe Steinmann
5a74c3debf add mandatory group reviewer/approver 2021-05-14 12:37:37 +02:00
Uwe Steinmann
9a2ebf80cc fix sending notification mail to group, add mandatory group rev/app 2021-05-14 12:37:10 +02:00
Uwe Steinmann
a024cc19d3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-13 17:02:52 +02:00
Uwe Steinmann
74eccd1a1f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-05-13 17:02:42 +02:00
Uwe Steinmann
414e49e248 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-05-13 17:02:29 +02:00
Uwe Steinmann
e76581f5b1 add new and some missing translations 2021-05-13 17:01:55 +02:00
Uwe Steinmann
9d9e05a54b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-13 17:00:54 +02:00
Uwe Steinmann
0b2ba1a893 fix layout of filter field 2021-05-13 16:46:18 +02:00
Uwe Steinmann
c56901147b add class action-list to list of version actions 2021-05-12 15:32:25 +02:00
Uwe Steinmann
01a4251b9a remove extra div 2021-05-12 11:56:05 +02:00
Uwe Steinmann
c1ea7fd6cc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-12 11:39:49 +02:00
Uwe Steinmann
95f4485382 add bootstrap4 to view 2021-05-12 11:39:30 +02:00
Uwe Steinmann
21b590d547 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-12 10:57:17 +02:00
Uwe Steinmann
9a417a9460 include inc/inc.ClassAccessOperation.php 2021-05-12 09:37:48 +02:00
Uwe Steinmann
67511017bd remove SeedDMS_AccessOperation 2021-05-12 09:37:27 +02:00
Uwe Steinmann
1e20ddcddf remove SeedDMS_AccessOperation 2021-05-12 09:37:06 +02:00
Uwe Steinmann
c60f8f660d fix layout 2021-05-12 09:36:39 +02:00
Uwe Steinmann
1575cdb154 remove old call of sanitizeString() 2021-05-12 09:35:42 +02:00
Uwe Steinmann
686fef1f4e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-12 08:44:02 +02:00
Uwe Steinmann
a4935f608b remove old magic_quote code for compatibility with php 8 2021-05-12 08:43:09 +02:00
Uwe Steinmann
7d34bd86b3 create previews of attachments 2021-05-11 22:13:35 +02:00
Uwe Steinmann
813587e8c9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-11 21:19:01 +02:00
Uwe Steinmann
d1bd50fa24 support for 5.1.23 2021-05-11 21:18:36 +02:00
Uwe Steinmann
c0120b0a1d do not call get_magic_quotes_gpc() anymore 2021-05-11 21:18:15 +02:00
Uwe Steinmann
0f9be43152 get status of latest content 2021-05-11 19:06:52 +02:00
Uwe Steinmann
d1690c917d show only detail preview for older versions 2021-05-11 19:02:48 +02:00
Uwe Steinmann
2c0729915c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-11 17:59:11 +02:00
Uwe Steinmann
fb366307bf fix second parameter of showEndPaneContent() 2021-05-11 17:21:11 +02:00
Uwe Steinmann
4d9a36b080 make string of $seq, otherwise a 0 value can be set 2021-05-11 17:20:08 +02:00
Uwe Steinmann
1af7524b76 add changes of 6.0.16 2021-05-10 09:03:44 +02:00
Uwe Steinmann
266ae182f0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-10 09:03:15 +02:00
Uwe Steinmann
2bc5ce80d7 closes #510 2021-05-10 09:02:27 +02:00
Uwe Steinmann
bc4a1b5dac propperly check for translation of html body (Closes: #510) 2021-05-10 09:01:20 +02:00
Uwe Steinmann
175dd6902d update package info 2021-05-10 09:00:55 +02:00
Uwe Steinmann
4f59c3b4e8 execWithTimeout() closes all pipes and also returns return value of cmd 2021-05-10 08:54:18 +02:00
Uwe Steinmann
e0cfbd9b1b set converters in preview task, really check if preview was created 2021-05-10 08:45:52 +02:00
Uwe Steinmann
6d817b333c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-09 13:49:06 +02:00
Uwe Steinmann
c37802fdca add opitonal parameter $new to createRawPreview() and createPreview() 2021-05-09 13:48:36 +02:00
Uwe Steinmann
9cd60901b1 set proper class for coloring a table row 2021-05-09 13:42:35 +02:00
Uwe Steinmann
c53b3babbd add task for creating missing preview images 2021-05-09 13:41:53 +02:00
Uwe Steinmann
53654444f0 use sys_get_temp_dir() instead of '/tmp' 2021-05-09 08:15:14 +02:00
Uwe Steinmann
6c1327d893 add missing space between attributes of html tag 2021-05-09 08:12:49 +02:00
Uwe Steinmann
3cee482b1c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 17:51:17 +02:00
Uwe Steinmann
ed4b5e34a4 item in list with badges can be set active 2021-05-07 17:35:29 +02:00
Uwe Steinmann
e4f4a52ed6 add changes for 5.1.23 2021-05-07 15:48:27 +02:00
Uwe Steinmann
38b18488d8 show path of document/folder instead of comment 2021-05-07 15:48:07 +02:00
Uwe Steinmann
1cb6816a6f use jwt for securing preview image 2021-05-07 14:37:36 +02:00
Uwe Steinmann
06025d03db Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 13:23:12 +02:00
Uwe Steinmann
543890e4eb add class SeedDMS_JwtToken 2021-05-07 13:22:57 +02:00
Uwe Steinmann
8d660b1f98 use json web token for authentication 2021-05-07 13:20:00 +02:00
Uwe Steinmann
7e73388730 add extra script for accessing preview images in rss feed 2021-05-07 12:41:03 +02:00
Uwe Steinmann
b2f0f2fa30 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 12:23:17 +02:00
Uwe Steinmann
ea37036bb1 add obsolete documents 2021-05-07 11:45:23 +02:00
Uwe Steinmann
3029bb195e SeedDMS_Core_DMS::getTimeline() uses status log instead of document content 2021-05-07 11:45:06 +02:00
Uwe Steinmann
3205f6ad82 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 09:34:09 +02:00
Uwe Steinmann
c1e6a8360f improve layout of clipboard on small devices 2021-05-07 09:32:32 +02:00
Uwe Steinmann
a0a392ff98 add classes table-sm, table-condensed 2021-05-07 09:32:06 +02:00
Uwe Steinmann
c519feb6c8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 08:54:46 +02:00
Uwe Steinmann
9d87ff9ff3 minor layout improvements 2021-05-07 08:49:13 +02:00
Uwe Steinmann
dd95c1ed8a set title of modal box from data-modal-title 2021-05-07 08:48:38 +02:00
Uwe Steinmann
1d4e7364ec Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 08:27:05 +02:00
Uwe Steinmann
8c77c1fd06 do not show file size on small devices, fix toggling checkbox 2021-05-07 08:26:29 +02:00
Uwe Steinmann
e014b37f44 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 07:53:34 +02:00
Uwe Steinmann
4adf79bb3f add a logout button in navbar (only visible on small devices) 2021-05-07 07:52:52 +02:00
Uwe Steinmann
aece6cbaaa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 07:33:43 +02:00
Uwe Steinmann
4baba28ed6 move search form out of collapsable nav, add logo in header 2021-05-07 07:32:53 +02:00
Uwe Steinmann
8406d0764b show search form only if user is logged in 2021-05-07 07:32:34 +02:00
Uwe Steinmann
bf62dd68e9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 22:22:56 +02:00
Uwe Steinmann
0142de1c03 collapse search form after searching 2021-05-06 22:22:37 +02:00
Uwe Steinmann
065244c128 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 21:24:54 +02:00
Uwe Steinmann
6542972a12 make body margin bottom 10px larger 2021-05-06 21:24:21 +02:00
Uwe Steinmann
37192040e7 make page list smaller to fit on smal devices 2021-05-06 21:15:48 +02:00
Uwe Steinmann
ce84a8d9c8 put heading above form and search result 2021-05-06 21:15:31 +02:00
Uwe Steinmann
39e9ba904a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 20:56:40 +02:00
Uwe Steinmann
0356d65cce add form-control and placeholder to filter field 2021-05-06 20:55:48 +02:00
Uwe Steinmann
faa47a9d2e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 20:54:17 +02:00
Uwe Steinmann
1746842aa3 better layout for small devices 2021-05-06 20:51:13 +02:00
Uwe Steinmann
096312dbdb replace SeedDMS_Theme_Bootstrap by SeedDMS_Theme_Style 2021-05-06 20:25:54 +02:00
Uwe Steinmann
a99efecb7b pass email to setAuthor() only if it is syntactical correct 2021-05-06 20:25:18 +02:00
Uwe Steinmann
4ea54923d3 add class table-sm to table 2021-05-06 15:18:01 +02:00
Uwe Steinmann
c640ece18b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 15:12:35 +02:00
Uwe Steinmann
5d00837489 use warningMsg() instead of plain html 2021-05-06 15:12:11 +02:00
Uwe Steinmann
8644e750e9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 15:08:55 +02:00
Uwe Steinmann
cdd75239e3 fix wrong call of parent method 2021-05-06 15:08:33 +02:00
Uwe Steinmann
2001f4f0d3 slightly improved layout 2021-05-06 15:08:11 +02:00
Uwe Steinmann
9c9de6d0a1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 14:49:32 +02:00
Uwe Steinmann
8a2aa4bdda better html layout 2021-05-06 14:49:10 +02:00
Uwe Steinmann
189bbb540c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 14:33:48 +02:00
Uwe Steinmann
f48bdb1280 set class of modal box link 2021-05-06 14:33:24 +02:00
Uwe Steinmann
93192b7e3d support custom date format, remove some html 2021-05-06 14:22:50 +02:00
Uwe Steinmann
1a84cb311a make button primary 2021-05-06 14:22:37 +02:00
Uwe Steinmann
4fb43aef5a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 13:46:15 +02:00
Uwe Steinmann
75d033d73c use showVersionDetails() for previous versions 2021-05-06 13:42:18 +02:00
Uwe Steinmann
be7df6ffab get previewwidthdetail from view in showVersionDetails() 2021-05-06 13:13:12 +02:00
Uwe Steinmann
791872adee Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 13:09:45 +02:00
Uwe Steinmann
9be41bca0b set class of modal box link button 2021-05-06 12:53:05 +02:00
Uwe Steinmann
0cbfba4d41 pass previewer to showVersionDetails() 2021-05-06 12:52:24 +02:00
Uwe Steinmann
8807257aa2 check if array element exists 2021-05-06 12:18:51 +02:00
Uwe Steinmann
f63315f6c0 move version details in own method showVersionDetails() 2021-05-06 12:17:32 +02:00
Uwe Steinmann
5869abc56b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 11:19:30 +02:00
Uwe Steinmann
b58c16bdee smaller font size on small displays 2021-05-06 11:03:50 +02:00
Uwe Steinmann
81fd140a92 replace ul.actions by ul.unstyled 2021-05-06 11:03:26 +02:00
Uwe Steinmann
ca4022ce7c add method showActions(), move version actions in second column 2021-05-06 11:02:20 +02:00
Uwe Steinmann
80689dc9c1 add method getModalBoxLinkAttributes() 2021-05-06 11:01:50 +02:00
Uwe Steinmann
36240ed21e do not collapse search form 2021-05-06 06:54:27 +02:00
Uwe Steinmann
cb1f49277c minor correction of nav bar color 2021-05-06 06:54:13 +02:00
Uwe Steinmann
a17fcfcd8e do not collapse search form 2021-05-05 21:54:47 +02:00
Uwe Steinmann
c6c99bc384 minor correction of nav bar color 2021-05-05 21:54:26 +02:00
Uwe Steinmann
8bb02689e4 output categories od document in lists 2021-05-05 17:13:32 +02:00
Uwe Steinmann
5549aa2b13 limit datepicker input file in width 2021-05-05 16:52:32 +02:00
Uwe Steinmann
e557811acf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-05 15:31:20 +02:00
Uwe Steinmann
aa87fffd74 set width of select2 to 100% 2021-05-05 15:30:53 +02:00
Uwe Steinmann
41b5caa302 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-05 14:34:08 +02:00
Uwe Steinmann
02bed41f65 check if certian variables are empty 2021-05-05 14:32:58 +02:00
Uwe Steinmann
515a8de2e0 put export into accordion, use formFields 2021-05-05 14:31:13 +02:00
Uwe Steinmann
12896970cc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-05 14:13:03 +02:00
Uwe Steinmann
5bf6ba8db5 add missing parameter 'type' for formField 2021-05-05 14:12:36 +02:00
Uwe Steinmann
12a44b75a3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-05 14:12:09 +02:00
Uwe Steinmann
e870e2071b redo the search form 2021-05-05 13:47:38 +02:00
Uwe Steinmann
805dbe212a fix html for date picker and accordion 2021-05-05 13:46:05 +02:00
Uwe Steinmann
1e08ea06e9 add missing ' AND ' in query string 2021-05-05 13:44:02 +02:00
Uwe Steinmann
edd60363f3 return false if query fails 2021-05-05 13:43:40 +02:00
Uwe Steinmann
f5b8b5b45d major rework, make it work again 2021-05-04 18:25:33 +02:00
Uwe Steinmann
efd79e7521 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 18:11:34 +02:00
Uwe Steinmann
26b3762962 fix layout 2021-05-04 18:11:18 +02:00
Uwe Steinmann
ff4151093c nicer layout 2021-05-04 18:08:31 +02:00
Uwe Steinmann
84a61cbd14 fix parameters of SeedDMS_AccessOperation() 2021-05-04 18:08:19 +02:00
Uwe Steinmann
d7a935b276 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 17:52:59 +02:00
Uwe Steinmann
22882e2634 pass access object to view 2021-05-04 17:50:36 +02:00
Uwe Steinmann
073ba8281c place submit button outside of contentContainer 2021-05-04 17:50:18 +02:00
Uwe Steinmann
b5116e3c1b place submit button outside of contentContainer 2021-05-04 17:49:36 +02:00
Uwe Steinmann
585fa964d5 add class 'form-control' to some select tags 2021-05-04 17:41:21 +02:00
Uwe Steinmann
f6fbcbadfa do not show message anymore, if keyword list is empty 2021-05-04 17:35:24 +02:00
Uwe Steinmann
0acfb9a265 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 17:30:23 +02:00
Uwe Steinmann
c5b5ac07db set 'setcategory' in view 2021-05-04 17:29:55 +02:00
Uwe Steinmann
7da093ff4e replace most of the html 2021-05-04 17:29:30 +02:00
Uwe Steinmann
9990fdb57d replace table with form controll 2021-05-04 17:29:07 +02:00
Uwe Steinmann
62d8197751 add formField of type 'plain', fix printAccordion() 2021-05-04 17:28:04 +02:00
Uwe Steinmann
ef42392e7f add formField of type 'plain' 2021-05-04 17:27:27 +02:00
Uwe Steinmann
431a2e581c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 15:57:20 +02:00
Uwe Steinmann
6b0b72a062 move all init function into one function and call after loading html 2021-05-04 15:56:43 +02:00
Uwe Steinmann
10e3ae560c set class of ul list for attachments 2021-05-04 15:56:09 +02:00
Uwe Steinmann
620783d17d move submit button out of contentContainer 2021-05-04 15:55:35 +02:00
Uwe Steinmann
bd73b57a63 move submit out of contentContainer 2021-05-04 15:55:10 +02:00
Uwe Steinmann
4cb4cce922 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 13:53:29 +02:00
Uwe Steinmann
1c6c36eb52 fix update of pwd strength bar 2021-05-04 13:40:49 +02:00
Uwe Steinmann
5fe8ab1615 set width of pwd strength bar to 100% 2021-05-04 13:40:05 +02:00
Uwe Steinmann
d3958e73f9 add border botton to contentHeading 2021-05-04 13:17:07 +02:00
Uwe Steinmann
4cb9ed294e place submit button outside of contentContainer 2021-05-04 13:16:35 +02:00
Uwe Steinmann
07affc574b fix layout, show icon on buttons only on small devices 2021-05-04 13:16:01 +02:00
Uwe Steinmann
56adaae427 fix button for removing, downloading file 2021-05-04 12:20:52 +02:00
Uwe Steinmann
efd46b7a1d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 12:12:15 +02:00
Uwe Steinmann
23b1ab9e06 use pane function from parent class 2021-05-04 12:09:44 +02:00
Uwe Steinmann
a3caa4a0c1 use getModalBox() and getModalBoxLink() 2021-05-04 12:09:20 +02:00
Uwe Steinmann
460cad8290 move author below description, use getModalBox() and getModalBoxLink() 2021-05-04 12:08:32 +02:00
Uwe Steinmann
30bed2abdf add methods for creating panes 2021-05-04 12:08:05 +02:00
Uwe Steinmann
d3674886ae add methods for creating panes, make modal boxes wide 2021-05-04 12:07:18 +02:00
Uwe Steinmann
b4b0258fbd use nav-pills instead of nav-tabs, set attribute role 2021-05-04 09:57:23 +02:00
Uwe Steinmann
196b19d42a enlarge margin bottom on smaller devices 2021-05-04 09:56:56 +02:00
Uwe Steinmann
b03e759053 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 09:04:25 +02:00
Uwe Steinmann
4be72880a8 typeahead search for folders can search in subfolders 2021-05-04 09:03:10 +02:00
Uwe Steinmann
b7c46ccfda put form into contentContainer 2021-05-03 22:03:37 +02:00
Uwe Steinmann
90f849c801 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-03 17:49:43 +02:00
Uwe Steinmann
a8dfcd9528 showNavigationBar() checks if 'link' is set 2021-05-03 17:49:15 +02:00
Uwe Steinmann
9578bc87d2 colorize tables 2021-05-03 17:48:51 +02:00
Uwe Steinmann
9531568586 fix editing category, place submit button outside of container 2021-05-03 17:48:12 +02:00
Uwe Steinmann
34b1d792ec Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-03 15:17:43 +02:00
Uwe Steinmann
a8ba6ef5a4 and changes for 5.1.23 2021-05-03 15:17:25 +02:00
Uwe Steinmann
a3cc1c3c43 fix php error when setting mandatory workflow 2021-05-03 14:01:56 +02:00
Uwe Steinmann
570df730e8 fix typo in comment 2021-05-03 13:52:19 +02:00
Uwe Steinmann
bc1faf4d2e set initial document status from settings 2021-05-03 13:44:38 +02:00
Uwe Steinmann
b10c3bf9af do not include bootbox.min.js, make docinfo tab active if none is selected 2021-05-03 09:02:32 +02:00
Uwe Steinmann
f95c9d6795 do not include bootbox.min.js, make currenttab active if none is selected 2021-05-03 09:01:33 +02:00
Uwe Steinmann
0a8659826f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-03 08:07:29 +02:00
Uwe Steinmann
85992322d7 set padding-left of ul.actions to 0 2021-05-03 08:05:39 +02:00
Uwe Steinmann
25a7a57112 make tables smaller (no column for status anymore) 2021-05-03 08:04:54 +02:00
Uwe Steinmann
612a493873 fix syntax error in some php versions 2021-05-02 14:46:40 +02:00
Uwe Steinmann
c2f773ad85 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-02 14:41:33 +02:00
Uwe Steinmann
cc09cd419c fix margin of body and height of footer for small devices 2021-05-02 14:41:03 +02:00
Uwe Steinmann
5e18a0b5b4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-02 13:06:29 +02:00
Uwe Steinmann
db63f8526c set footer height and body margin on smaller devices 2021-05-02 13:05:48 +02:00
Uwe Steinmann
dcba7a7572 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-02 12:53:15 +02:00
Uwe Steinmann
d51ec988d8 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-05-02 12:53:01 +02:00
Uwe Steinmann
9ac421d059 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-05-02 12:52:49 +02:00
Uwe Steinmann
258968b2c2 minor translation updates 2021-05-02 12:52:30 +02:00
Uwe Steinmann
da2174fafd docs and folders can be repaired again 2021-05-02 08:34:28 +02:00
Uwe Steinmann
f0fc1bfcc3 add class 'table-sm' to all tables 2021-05-02 08:08:11 +02:00
Uwe Steinmann
8773195f2a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-02 07:58:13 +02:00
Uwe Steinmann
720615c175 pass enableRecursiveCount and maxRecursiveCount to view 2021-05-02 07:56:58 +02:00
Uwe Steinmann
1afda0e677 add class table-sm to table 2021-05-02 07:54:38 +02:00
Uwe Steinmann
29e9907c89 use showNavigationListWithBadges() 2021-05-02 07:54:02 +02:00
Uwe Steinmann
113db3fb01 change type of badge depending on count 2021-05-02 07:53:20 +02:00
Uwe Steinmann
539b5b02eb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-01 14:51:12 +02:00
Uwe Steinmann
262ba1345b take out submit from contentContainer, add class btn-primary to buttons 2021-05-01 14:50:04 +02:00
Uwe Steinmann
ded86a39f2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-01 14:09:28 +02:00
Uwe Steinmann
feee7732ca fix layout of buttons, place submit button outside of container around form 2021-05-01 14:08:50 +02:00
Uwe Steinmann
a2645a4f16 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-01 13:55:21 +02:00
Uwe Steinmann
23bc6ad49c add class btn-danger and btn-sm to delete buttons 2021-05-01 13:54:42 +02:00
Uwe Steinmann
8a4b520754 add class form-control to select menu 2021-05-01 13:54:14 +02:00
Uwe Steinmann
9644153d7b fix layout of dropdown folder/document search 2021-05-01 13:52:21 +02:00
Uwe Steinmann
025e293f80 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-01 13:21:12 +02:00
Uwe Steinmann
42cf1e9d05 use identical layout on all remove pages 2021-05-01 13:19:47 +02:00
Uwe Steinmann
db8e6f3ac6 fix call of constructor SeedDMS_AccessOperation() 2021-05-01 13:07:09 +02:00
Uwe Steinmann
6bb34b870a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-01 12:55:57 +02:00
Uwe Steinmann
a27d1aabe5 add changes for 5.1.23 2021-05-01 12:49:32 +02:00
Uwe Steinmann
d647b72463 remove preview images before deleting document 2021-05-01 12:47:04 +02:00
Uwe Steinmann
756b38a067 do not declare callback function in run(), uses static method instead 2021-05-01 12:46:29 +02:00
Uwe Steinmann
a3d2f844b0 limit img.mimeicon in width 2021-05-01 08:58:46 +02:00
Uwe Steinmann
49e46a6aab add style wordwrap to second column of folder/doc table 2021-05-01 08:58:14 +02:00
Uwe Steinmann
4a23c1df86 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-30 16:13:30 +02:00
Uwe Steinmann
35aa7f077f add changes of 5.1.23 2021-04-30 14:51:26 +02:00
Uwe Steinmann
0ba7aaf9b1 add css class to make look nice with bootstrap4 2021-04-30 14:49:38 +02:00
Uwe Steinmann
8be856e688 check for quota and duplicate content when uploading new doc or version 2021-04-30 14:49:02 +02:00
Uwe Steinmann
4ec36dc6db pass accessobject to view 2021-04-30 14:48:40 +02:00
Uwe Steinmann
13001867be pass accessobject to exitError view 2021-04-30 14:48:13 +02:00
Uwe Steinmann
bb5a79ba70 add changes for 6.0.16 2021-04-30 11:48:28 +02:00
Uwe Steinmann
30eadac7cd move filter field for recipients into head of table 2021-04-30 11:48:03 +02:00
Uwe Steinmann
1873d77958 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-30 09:32:42 +02:00
Uwe Steinmann
4a678ad1ec escape workflow name, fix counting recipients 2021-04-30 09:31:50 +02:00
Uwe Steinmann
98f7fc85f4 run htmlspecialchars on workflow names 2021-04-30 09:27:59 +02:00
Uwe Steinmann
4d471ed592 fix layout of recipient list, add field to filter table rows 2021-04-30 09:25:11 +02:00
Uwe Steinmann
fb44b524fd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-30 09:04:24 +02:00
Uwe Steinmann
751e91ceaf sync with bootstrap style, remove old hooks 2021-04-30 09:03:11 +02:00
Uwe Steinmann
ed12ddb573 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-30 07:57:57 +02:00
Uwe Steinmann
53af7e3173 add methods cmp_user_login() and cmp_user_fullname() 2021-04-30 07:57:27 +02:00
Uwe Steinmann
d8b2433edd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-28 18:49:17 +02:00
Uwe Steinmann
c1d2b46b2e put list of open tasks into table 2021-04-28 17:40:55 +02:00
Uwe Steinmann
e128e0e9dd add changes for 6.0.16 2021-04-28 14:26:34 +02:00
Uwe Steinmann
2c7ab1cfb1 move checkForDueRevisionWorkflow() into document version 2021-04-28 14:24:40 +02:00
Uwe Steinmann
a7deac7948 removeFromProcess() writes into log when a user was replaced (not just removed) 2021-04-28 07:05:15 +02:00
Uwe Steinmann
e279a2f8e8 do not prevent events, otherwise the checkbox doesn't work anymore 2021-04-27 22:17:26 +02:00
Uwe Steinmann
84fca7227c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-27 21:01:04 +02:00
Uwe Steinmann
1a6f2e9b17 add js for operations on documents 2021-04-27 21:00:26 +02:00
Uwe Steinmann
86fa6269b4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-27 20:57:54 +02:00
Uwe Steinmann
3f40dce22d add changes for 5.1.23 2021-04-27 20:33:54 +02:00
Uwe Steinmann
6033a702c6 fix icon for sustitute user 2021-04-27 19:36:54 +02:00
Uwe Steinmann
1956cf74ce add class table-sm 2021-04-27 19:36:41 +02:00
Uwe Steinmann
cce5b69c23 show list of documents affected 2021-04-27 19:36:12 +02:00
Uwe Steinmann
42b97969b5 pass task and previewer to view 2021-04-27 19:35:35 +02:00
Uwe Steinmann
7e7b12f1c3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-27 17:11:09 +02:00
Uwe Steinmann
74a2e39ff4 put form into column 2021-04-27 17:10:42 +02:00
Uwe Steinmann
734ff7d33f add path to documentListRow, make column for form wider 2021-04-27 17:06:19 +02:00
Uwe Steinmann
cad9e24ec3 fix progress bars of reception 2021-04-27 07:27:31 +02:00
Uwe Steinmann
42a7644d09 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-26 12:25:35 +02:00
Uwe Steinmann
43a280bc6d set sequence of document when moving 2021-04-26 12:24:55 +02:00
Uwe Steinmann
4c47d69a88 remove old html code 2021-04-23 12:51:31 +02:00
Uwe Steinmann
62eb152b01 indicate if extension is enabled/disabled 2021-04-23 10:18:23 +02:00
Uwe Steinmann
33e746ff80 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-23 10:04:09 +02:00
Uwe Steinmann
c61581f836 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2021-04-23 10:03:55 +02:00
Uwe Steinmann
b5c4ae8238 Merge branch 'seeddms-4.3.x' into seeddms-5.0.x 2021-04-23 10:03:42 +02:00
Uwe Steinmann
51d1bd98d6 various updates 2021-04-23 10:03:19 +02:00
Uwe Steinmann
54dabfed93 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-23 10:01:03 +02:00
Uwe Steinmann
ffdc648292 use same way to check for hooks in hasHook() and callHook() 2021-04-23 09:56:25 +02:00
Uwe Steinmann
a7e214b5a9 check for missing class 'finfo', add style table-sm 2021-04-23 09:55:58 +02:00
Uwe Steinmann
fd90623de4 use callHook() instead of interating over hookObjects 2021-04-23 09:55:25 +02:00
Uwe Steinmann
1a114830a5 do not include page navigation with ajax anymore 2021-04-23 09:54:36 +02:00
Uwe Steinmann
3d15736772 read property viewAliasName 2021-04-23 06:55:10 +02:00
Uwe Steinmann
f275ea1927 add example on how to set viewAliasName 2021-04-23 06:54:43 +02:00
Uwe Steinmann
132b904315 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-22 14:50:28 +02:00
Uwe Steinmann
1c4b17f053 move notifier into left column 2021-04-22 14:47:38 +02:00
Uwe Steinmann
fa241482c0 set type='danger' of submit button 2021-04-22 14:41:30 +02:00
Uwe Steinmann
f55db469c7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-22 14:38:51 +02:00
Uwe Steinmann
566e3b713d add 4th parameter $type to formSubmit() 2021-04-22 14:38:23 +02:00
Uwe Steinmann
621bf34ad9 add changes for 5.1.23 2021-04-22 14:38:04 +02:00
Uwe Steinmann
c9ae939bff add entry for 6.0.16 2021-04-22 14:32:47 +02:00
Uwe Steinmann
73a7f8a5f2 cancel checkout needs confirmation 2021-04-22 14:31:36 +02:00
Uwe Steinmann
39b81e03c3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-22 14:19:35 +02:00
Uwe Steinmann
7f4c9a036d check if parent folder exists in getListRowPath() 2021-04-22 10:22:03 +02:00
Uwe Steinmann
b291149644 show path of found folder 2021-04-22 09:59:37 +02:00
Uwe Steinmann
7d4ed3a975 move search for documents to first position in select box 2021-04-22 09:29:42 +02:00
Uwe Steinmann
6a9def5358 issue warning if full text search is disabled 2021-04-22 09:28:25 +02:00
Uwe Steinmann
15c281095d set placeholder for frequency 2021-04-22 09:28:07 +02:00
Uwe Steinmann
7bdf60ebbf update execute() to meet latest changes in passed parameters 2021-04-21 17:44:17 +02:00
Uwe Steinmann
6245a53bae allow autocompletion 2021-04-21 17:39:23 +02:00
Uwe Steinmann
92ddf1b4b7 add class btn-sm to go-to-parent button 2021-04-21 12:45:15 +02:00
Uwe Steinmann
3299c75d18 set type of alert for clipboard drop area 2021-04-21 12:43:57 +02:00
Uwe Steinmann
606f8d8df8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-21 12:39:54 +02:00
Uwe Steinmann
68b307cf34 add missing notes for 5.1.23 2021-04-21 08:52:37 +02:00
Uwe Steinmann
06962e39c2 add new method getListRowPath() 2021-04-20 22:24:16 +02:00
Uwe Steinmann
801e5fd6ac fix line indention 2021-04-20 22:21:13 +02:00
Uwe Steinmann
42c4b4eaaf add support for fts5, start new version 1.0.16 2021-04-20 20:52:17 +02:00
Uwe Steinmann
993a8056ec convert checkout date to readable date 2021-04-20 08:38:52 +02:00
Uwe Steinmann
81f091a44d fix class for list a actions 2021-04-19 19:54:24 +02:00
Uwe Steinmann
1fc4d21f27 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-19 19:52:25 +02:00
Uwe Steinmann
c559afd97c remove old code, fix link to MyDocuments 2021-04-19 19:49:24 +02:00
Uwe Steinmann
7b30188dd9 use class SeedDMS_Theme_Style, remove plain html 2021-04-19 19:45:40 +02:00
Uwe Steinmann
d3631a4f61 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-19 15:54:55 +02:00
Uwe Steinmann
6484094809 add missing file 2021-04-19 15:54:41 +02:00
Uwe Steinmann
79d2a5efb1 new theme based on bootstrap 4 2021-04-19 15:53:04 +02:00
Uwe Steinmann
d994232cc4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-19 08:38:41 +02:00
Uwe Steinmann
3d7a74ec32 fix line indenting 2021-04-19 08:36:07 +02:00
Uwe Steinmann
d57a4c69b2 add class table-sm to table 2021-04-19 08:35:57 +02:00
Uwe Steinmann
bbe919118f add class table-sm to table 2021-04-19 08:35:05 +02:00
Uwe Steinmann
70985572dc use colums und rows from theme style 2021-04-19 08:34:40 +02:00
Uwe Steinmann
84b709c8cd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-19 06:26:51 +02:00
Uwe Steinmann
08e2c2d5ef fix line indenting 2021-04-19 06:25:04 +02:00
Uwe Steinmann
d8c534dff4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-18 20:16:22 +02:00
Uwe Steinmann
4d24b0a11d call dummy check_[view|controller]_access method 2021-04-18 19:41:09 +02:00
Uwe Steinmann
91e4351ccc include inc.ClassAccessOperation.php 2021-04-18 19:40:13 +02:00
Uwe Steinmann
9565010cd0 pass AccessOperation to view 2021-04-18 19:39:37 +02:00
Uwe Steinmann
0695f35f8d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-18 13:02:30 +02:00
Uwe Steinmann
314a35b2d8 backport check_view_access and check_controller_access for smoother migration 2021-04-18 13:01:11 +02:00
Uwe Steinmann
f3fb09762f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-18 08:45:23 +02:00
Uwe Steinmann
8141ce72ec some minor corrections taken over from new bootstrap4 theme 2021-04-18 08:44:01 +02:00
Uwe Steinmann
2c2d1e4dd8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-18 08:05:07 +02:00
Uwe Steinmann
871460899c use new SeedDMS_Theme_Style, replace plain html by methods in theme style 2021-04-18 07:08:00 +02:00
Uwe Steinmann
28480a8733 move 'new SeedDMS_AccessOperation' after document is known 2021-04-18 07:05:57 +02:00
Uwe Steinmann
a6ac5d546a include inc.DBInit.php 2021-04-18 07:05:10 +02:00
Uwe Steinmann
43567ac1d7 include missing inc.Utils.php 2021-04-18 07:04:15 +02:00
Uwe Steinmann
2458655961 add more packages for new bootstrap4 theme 2021-04-18 07:03:31 +02:00
Uwe Steinmann
6c0b544446 do not use session id in form key if not logged in 2021-04-18 07:02:53 +02:00
Uwe Steinmann
888d75953e use require_once for style classes, set 'theme' in view 2021-04-18 07:02:01 +02:00
Uwe Steinmann
91a98ac6c6 copy bootstrap 2021-04-15 17:33:18 +02:00
Uwe Steinmann
1b7a5c48ba replace SeedDMS_Bootstrap_Style by SeedDMS_Theme_Style 2021-04-15 15:36:32 +02:00
Uwe Steinmann
4a9d3666f1 move css and js files into theme directory 2021-04-15 15:35:53 +02:00
Uwe Steinmann
5a90336583 change bootstrapDir to bootstrap4 2021-04-15 15:35:11 +02:00
Uwe Steinmann
0278989a7e switch to new class name SeedDMS_Theme_Style 2021-04-15 10:33:29 +02:00
Uwe Steinmann
3e81ad7654 rename SeedDMS_Bootstrap_Style to SeedDMS_Theme_Style 2021-04-15 10:32:42 +02:00
Uwe Steinmann
ac85cfe26d fall back to bootstrap file, include theme style 2021-04-15 10:31:37 +02:00
Uwe Steinmann
130afd7d25 pass name of user as parameter to checkout msg 2021-04-15 06:34:56 +02:00
Uwe Steinmann
c0377d4e34 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-13 08:42:36 +02:00
Uwe Steinmann
5efc5802b7 start version 5.1.23 2021-04-13 08:39:07 +02:00
Uwe Steinmann
8fcfd70bd6 Merge branch 'seeddms-5.1.x' 2021-04-13 07:43:43 +02:00
Uwe Steinmann
6f0803e698 Merge branch 'seeddms-5.1.x' 2020-12-29 09:15:13 +01:00
Uwe Steinmann
5d28744758 Merge branch 'seeddms-5.1.x' into master 2020-09-29 14:25:14 +02:00
Uwe Steinmann
a17220d373 Merge branch 'seeddms-5.1.x' into master 2020-09-02 21:25:53 +02:00
Uwe Steinmann
54dea818f7 Merge branch 'seeddms-5.1.x' into master 2020-07-27 20:29:54 +02:00
Uwe Steinmann
a446f45e43 Merge branch 'seeddms-5.1.x' 2020-05-28 11:37:04 +02:00
Uwe Steinmann
6139c781d0 Merge branch 'seeddms-5.1.x' 2020-03-02 12:03:38 +01:00
Uwe Steinmann
0602fad397 Merge branch 'seeddms-5.1.x' 2020-02-17 10:21:29 +01:00
Uwe Steinmann
44bf03c557 Merge branch 'seeddms-5.1.x' 2019-07-19 15:29:20 +02:00
Uwe Steinmann
4bcb5f8e4c Merge branch 'seeddms-5.1.x' 2019-06-20 08:27:24 +02:00
Uwe Steinmann
4fe696f18b Merge branch 'seeddms-5.1.x' 2019-06-14 08:53:26 +02:00
Uwe Steinmann
023c2c58f1 Merge branch 'seeddms-5.1.x' 2019-06-13 11:23:19 +02:00
Uwe Steinmann
1a002c9d18 Merge branch 'seeddms-5.1.x' 2019-04-04 19:18:44 +02:00
Uwe Steinmann
3321b097e6 Merge branch 'seeddms-5.1.x' 2018-11-13 08:55:38 +01:00
Uwe Steinmann
dc2cadc6d8 Merge branch 'seeddms-5.1.x' 2018-07-03 11:42:39 +02:00
Uwe Steinmann
20e9157d01 Merge branch 'seeddms-5.1.x' 2018-01-03 09:23:05 +01:00
Sebastian Bartus-Kunz
02e7066749 Fixed wrong return object in getDocumentLink() 2017-12-20 15:40:20 +01:00
Uwe Steinmann
18c34ce29d Merge branch 'seeddms-5.1.x' 2017-11-02 08:53:59 +01:00
Uwe Steinmann
b7014a6b21 Merge branch 'seeddms-5.1.x' 2017-09-05 09:02:05 +02:00
Uwe Steinmann
fdf14b2a1f Merge branch 'seeddms-5.1.x' 2017-07-19 08:30:53 +02:00
Uwe Steinmann
e79a0015f9 Merge tag '5.1.2' 2017-07-11 18:05:39 +02:00
Uwe Steinmann
0c4103ce34 Merge branch 'seeddms-5.0.x' 2017-03-20 15:46:04 +01:00
Uwe Steinmann
ff3dd800e4 Merge branch 'seeddms-5.0.x' 2017-02-27 20:18:46 +01:00
Uwe Steinmann
211a3bc6bc Merge branch 'seeddms-5.0.x' 2017-01-26 15:51:47 +01:00
Uwe Steinmann
e49c9e1c98 Merge branch 'seeddms-5.0.x' 2016-12-12 10:32:27 +01:00
Uwe Steinmann
e3002fce0b Merge branch 'seeddms-5.0.x' 2016-09-23 09:07:18 +02:00
Uwe Steinmann
2a45854818 Merge tag '5.0.5' 2016-08-29 09:56:36 +02:00
Uwe Steinmann
cb059d53eb Merge branch 'seeddms-5.0.x' 2016-07-06 12:52:35 +02:00
Uwe Steinmann
44bd7fda79 Merge branch 'seeddms-5.0.x' 2016-04-22 17:24:34 +02:00
Uwe Steinmann
5f54964d69 Merge branch 'seeddms-5.0.x' 2016-03-25 17:13:27 +01:00
Uwe Steinmann
3dc3b6f0d2 Merge branch 'seeddms-5.0.x' 2016-02-22 15:20:24 +01:00
Uwe Steinmann
468b146a64 Merge branch 'seeddms-5.0.x' 2016-01-25 09:40:01 +01:00
Uwe Steinmann
d81f946446 Merge branch 'seeddms-5.0.x' 2016-01-22 09:51:45 +01:00
Uwe Steinmann
097aae895f Merge branch 'seeddms-4.3.x' 2016-01-21 08:39:21 +01:00
Uwe Steinmann
a55662ea1b Merge branch 'seeddms-4.3.x' 2015-11-19 17:43:24 +01:00
Uwe Steinmann
8d35bb6a9b Merge branch 'seeddms-4.3.x' 2015-09-28 14:47:29 +02:00
Uwe Steinmann
7826d487cc Merge branch 'seeddms-4.3.x' 2015-08-25 21:31:53 +02:00
Uwe Steinmann
ddbc3839a5 Merge branch 'seeddms-4.3.x' 2015-06-26 16:51:06 +02:00
629 changed files with 65032 additions and 46985 deletions

View File

@ -3,6 +3,6 @@ root = true
[*]
charset = utf-8
end_of_line = lf
trim_trailing_whitespaces = true
trim_trailing_whitespace = true
indent_style = tab
indent_size = 2

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
*.tar.gz
SeedDMS_*/*.tgz
ext/*
webapp/*

View File

@ -6,7 +6,10 @@ Header set X-Content-Type-Options: "nosniff"
</IfModule>
RewriteEngine On
RewriteRule ^favicon.ico$ styles/bootstrap/favicon.ico [L]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#RewriteRule "^favicon\.ico$" "-" [L]
#RewriteRule "^(favicon\.ico)$" %{HTTP_HOST}/views/bootstrap/images/favicon.svg [L,NC]
RewriteRule "^(favicon\.ico)" /views/bootstrap/images/favicon.svg [L,NC]
# Store the current location in an environment variable CWD to use
# mod_rewrite in .htaccess files without knowing the RewriteBase
@ -23,10 +26,16 @@ RewriteRule "^views/.*/images.*$" "-" [L]
RewriteRule "^out/images.*$" "-" [L]
RewriteRule "^styles/.*$" "-" [L]
# Accessing a file in an extension is always possible
# Accessing a file in an extension is only possible in one
# of the directories op, out. res
# Added for old extensions which do not use routes
RewriteRule ^ext/[^/]+/icon.(?:png|svg)$ - [L]
RewriteCond %{REQUEST_URI} "ext/[^/]+/"
RewriteRule !^ext/[^/]+/.*(?:op|out|res|node_modules) - [F]
RewriteCond %{REQUEST_URI} "ext/[^/]+/res/.*$" [NC]
RewriteRule !^ext/[^/]+/res/.*\.(?:css|js|png|gif|svg|ico|html|woff|ttf) - [F]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule "^ext/.*$" "-" [L]
RewriteRule ^ext/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

454
CHANGELOG
View File

@ -1,3 +1,132 @@
--------------------------------------------------------------------------------
Changes in version 6.0.33
--------------------------------------------------------------------------------
- merge changes up to 5.1.40
--------------------------------------------------------------------------------
Changes in version 6.0.32
--------------------------------------------------------------------------------
- merge changes up to 5.1.39
- fix setting attributes (user, group, document, folder) when checking in
a new document version
- validate setting revision date
--------------------------------------------------------------------------------
Changes in version 6.0.31
--------------------------------------------------------------------------------
- merge changes up to 5.1.38
- fix various restapi endpoints which hadn't been updated to slim4
--------------------------------------------------------------------------------
Changes in version 6.0.30
--------------------------------------------------------------------------------
- merge changes up to 5.1.37
- receipt comment can be disabled
- send request receipt notification only when document is released
--------------------------------------------------------------------------------
Changes in version 6.0.29
--------------------------------------------------------------------------------
- merge changes up to 5.1.36
- fix regression in FolderNotify
--------------------------------------------------------------------------------
Changes in version 6.0.28
--------------------------------------------------------------------------------
- merge changes up to 5.1.35
--------------------------------------------------------------------------------
Changes in version 6.0.27
--------------------------------------------------------------------------------
- merge changes up to 5.1.34
- Document/folder check distinguishes between documents which cannot be
receiped/revised because of access rights or the recipient/revisor being
disabled.
- fix creating user via rest api
- checkout info does not depend on whether the logged in user was substituted
- add new endpoints for managing roles by rest api
- add transmittals in menu
- add legacy access check for controllers
--------------------------------------------------------------------------------
Changes in version 6.0.26
--------------------------------------------------------------------------------
- merge changes up to 5.1.33
- add task to import files from drop folder
- add substitution of users in bootstrap4 theme
--------------------------------------------------------------------------------
Changes in version 6.0.25
--------------------------------------------------------------------------------
- merge changes up to 5.1.32
- status log can be turned on with advanced access control
- scheduler has more condensed layout
--------------------------------------------------------------------------------
Changes in version 6.0.24
--------------------------------------------------------------------------------
- add task to send list of recent changes by email
- merge changes up to 5.1.31
--------------------------------------------------------------------------------
Changes in version 6.0.23
--------------------------------------------------------------------------------
- fix setting recipients and revisors
- check in of a document is allowed for the user having done the check out
or those users with unlimited access rights on the document
- merge changes up to 5.1.30
--------------------------------------------------------------------------------
Changes in version 6.0.22
--------------------------------------------------------------------------------
- merge changes up to 5.1.29
--------------------------------------------------------------------------------
Changes in version 6.0.21
--------------------------------------------------------------------------------
- merge changes up to 5.1.28
- add new check for documents with identical sequence numbers in a folder
--------------------------------------------------------------------------------
Changes in version 6.0.20
--------------------------------------------------------------------------------
- merge changes up to 5.1.27
- fix triggering workflow (Closes: #542)
- create original file name from new document name when uploading document
from the library folder. Used to be the original file name
--------------------------------------------------------------------------------
Changes in version 6.0.19
--------------------------------------------------------------------------------
- merge changes up to 5.1.26
- fix deletion of tasks when using bootstrap4 theme
- fix deletion of documents when clicking on icon in document list (my documents)
--------------------------------------------------------------------------------
Changes in version 6.0.18
--------------------------------------------------------------------------------
- finish op/op.Cron.php, returns json
- merge changes up to 5.1.25
- fix sending trigger workflow notification (Closes: #522)
- fix updating und deleting items in document lists
- call hook 'filenameDownloadItem' in search export and transmittal download
- fix possible xss attack in UsrMgr (CVE-2022-28479)
--------------------------------------------------------------------------------
Changes in version 6.0.17
--------------------------------------------------------------------------------
- merge changes up to 5.1.24
- send notification when a receiption of a document was submitted
--------------------------------------------------------------------------------
Changes in version 6.0.16
--------------------------------------------------------------------------------
- cancel checkout needs confirmation
- add input field to filter list of recipients if more then 10
- add task for creating missing preview images
- no longer use old PHPExcel classes, use PhpOffice\PhpSpreadsheet\Spreadsheet
instead
--------------------------------------------------------------------------------
Changes in version 6.0.15
--------------------------------------------------------------------------------
@ -192,6 +321,330 @@
- add document list which can be exported as an archive
- search results can be exported
--------------------------------------------------------------------------------
Changes in version 5.1.40
--------------------------------------------------------------------------------
- fix saving user data when language selection is turned of (Closes: #568)
- add much better support for new storage drivers
- fix possible xss attacks
- saver way to collect plugin configuration
- fix update of postgres database
- add hook displayPreviewThumb
- add searching for mimetype in database
- list of expired documents can be filtered by user
- use quoted printable encoding instead of base64 for email subjects
--------------------------------------------------------------------------------
Changes in version 5.1.39
--------------------------------------------------------------------------------
- show quota on chart page when listing total document size per user
- turn off legend for chart sizepermonth
- do not add group manager as mandatory approver/reviewer if logged in
user is the manager itself
- fixed setting group approvers from previous document version
- very experimental support of memcached for accelerating some database
operations (do not use in production)
- prevent malicious manipulation of referer when setting language
- fix setting attributes of type user, group, document, folder when updating
a document
- objects can be removed from clipboard
- call hooks for document/folder list in attribute manager
--------------------------------------------------------------------------------
Changes in version 5.1.38
--------------------------------------------------------------------------------
- require php 8.2
- fix php error in out/out.ReviewSummary.php
--------------------------------------------------------------------------------
Changes in version 5.1.37
--------------------------------------------------------------------------------
- do not show chart by category if there are no categories
- documents in certain folders can be excluded from dashboard, could be useful
for folders containing archived documents
- migrate from Slim 3 to Slim 4 (check for extension updates)
- fix reloading more entries in list of folders/documents at end of page if
maxItemsPerPage is set
- prevent xss attack
- log level for rest api can be set separately
--------------------------------------------------------------------------------
Changes in version 5.1.36
--------------------------------------------------------------------------------
- add new page for send test notification
- remove deprecated function formatted_size()
- fix bugs when importing files from filesystem with metadata, better logging
- fix potential xss attack when showing log file
- support for different storage of documents (not yet used)
- do not treat repository url like a directory name (will no longer add a
directory seperator)
- use rename() on windows when moving an extension to its final destination
- fixed bug in AddDocument, approver group wasn't checked properly against
mandatory approvers
- email From-address in settings can be forced for all outgoing mail
- checking of ssl certificate for smtp can be turned off
- add chart for disk space per month
- clearing cache of js files works for a large number of files
- WebDAV returns `quota-used-bytes` and `quota-available-bytes`
- fix settings SeedDMS attributes in WebDAV server
- propperly check for duplicate folder names in op/op.Ajax.php
- add searching for file size (fulltext search)
--------------------------------------------------------------------------------
Changes in version 5.1.35
--------------------------------------------------------------------------------
- check access rights on EditDocumentFile and RemoveDocumentFile
- allow to set expiration dates in the past again
- fix authentication with ldap if AD is used
- fix progress bar in list of users if quota is active
- field storing email in ldap can be configured
--------------------------------------------------------------------------------
Changes in version 5.1.34
--------------------------------------------------------------------------------
- introduce global reviewer/approver
- group managers can be used as mandatory reviewers/approvers for all
users of that group
- update sabre/dav to 4.*
- show parent folder of document in lists of documents (calendar, dashboard)
- documents can be updated by dragging a file on a document list item
- dragging a folder on a folder list item oder the drag and drop area will
recursively upload the folder hierarchy including all files
- fix checking if user is owner when sending notifications
- do not show fast upload area if access on folder is insufficient
- do not send notification mail 'submitted review/approval' to owner of
document, still send it to uploader of version
- set default language in login form if language selector is turned off
- do not show full list of notifiers to none admins
- do not list document/folders in sequence selector if its number exceeds 50
- typeahead menu works with arrow keys again, wait 1 sec. before searching
- fix sending notification mails when document/folder was moved
- tasks and clipboard can be shown in main menu, even if there are no tasks
due or the clipboard is empty
- add conversion service from text/html to text/plain
--------------------------------------------------------------------------------
Changes in version 5.1.33
--------------------------------------------------------------------------------
- use SeedDMS_Core_File::mimetype() to determine mime type when uploading a
file with drag&drop
- user images may be 300px height, do not scale them up
- do not show unreadable documents on Dashboard
- fix creating preview image of file in drop folder if it contains
special chars
- show fileѕ and folders in dropfolder dir recursively
- fix 'Add to clipboard' menu item in bootstrap theme
- open confirm box when changing category in batch operation
- hidden users can excluded when setting list of reviewers/approvers
- extension can add a legacy access right
- check if document version may be removed
- set max file size for indexing when updating a document
- nicer output on info page
- do not show filter for categories in database search if they don't exist
- show logs of finished worflows
- show preview of documents on clipboard
- minor improvements in restapi
- update layout of tab for attachments
- remove session when calling logout of restapi
- fix some potential security issues
--------------------------------------------------------------------------------
Changes in version 5.1.32
--------------------------------------------------------------------------------
- check error msg after calling AddDocument and UpdateDocument controller
in webdav module
- more verbose log messages
- show errors of none activated extensions and do not allow to activate it,
if there are errors (e.g. missing php extensions)
- move Approve/ReviewDocument in a controller
- setting password by user can be disabled
- groups from ldap can be synced with seeddms groups
- fix error when sending notification to group of reviewers
- seperate some notification messages for folders and documents
- fix various drag&drop operations
- do not sent notifidation mail to uploader if owner has received on already
--------------------------------------------------------------------------------
Changes in version 5.1.31
--------------------------------------------------------------------------------
- rest api returns error msg and not just http status
- comment of document, documentcontent and folder can be rendered as
markdown
- fix preview for file in drop folder
- fix export of search result
- use openssl instead of mcrypt
- search form shows 'from' and 'to' field for integers and floats
- show preview of document in EditAttributes page
- major overhaul of fulltext search, add new search tab for a more
facetted based search
- add initial version of Dashboard
- default public status of attachments can be configured
--------------------------------------------------------------------------------
Changes in version 5.1.30
--------------------------------------------------------------------------------
- conversion from pdf to png replaces alpha channel with white
- add list of conversion services in debug menu of admin tool
- use chosen select for custom attributes
- color category (use first 6 chars of md5(category name) as hex color)
- create missing preview images in category or attribute manager
- support README of extension in different languages
- do not force password change if in substitute user mode
--------------------------------------------------------------------------------
Changes in version 5.1.29
--------------------------------------------------------------------------------
- fix php errors in restapi
- fix 'maximum size' error when uploading a file with drag&drop
- update jquery to 3.6.1 (only bootstrap4 theme)
- introduce authentication service
- new hook in restapi to add middleware
- previews for png, txt, pdf in different directories. This will
enforce a recreation of all cached preview images, pdf and text files!
- various improvements of fulltext service
- show number of documents per category in category manager
- show number of keywords per category in keyword manager
- improve drag&drop with clipboard
- old pear packages SeedDMS/Core, SeedDMS/Lucene, SeedDMS/Preview
are now based on composer and has moved into vendor dir
--------------------------------------------------------------------------------
Changes in version 5.1.28
--------------------------------------------------------------------------------
- user information in user manager failed to load when a document content
with 0 bytes was created by the user
- fix repair of wrong file extension
- fix regression in password forgotten function
- fix security issue when creating hash in password forgotten operation
- add initial support for logging and notifications in rest api
- add rest api calls to get attributes of a document version and to set
attributes of folders, documents, and document versions
- fixed various errors in swagger.yaml
- use methods in inc/inc.ClassNotificationService.php for webdav
- clear login failures when login by webdav succeeds
- output log of restapi in LogManagement
- new hook to add more tabs for sections in LogManagement
- rest api returns version attributes as 'version_attributes' (was
'version-attributes'), each attribute also contains the name
- new hook in rest api to add more routes in extensions
- uploaded several documents at once by fast upload will assign random
sequence number to allow manually sorting the documents afterwards
- fix counting of login failures if both ldap and db authentication is done
--------------------------------------------------------------------------------
Changes in version 5.1.27
--------------------------------------------------------------------------------
- fix adding new attribute definition if object type is 'all'
- EmptyFolder runs callbacks to remove objects from index and remove preview images
- skip internal conversion service for images if imagick extension is missing
- running the controller will always call the hooks preRun and postRun
- add tabs on ViewFolder page
- link behind logo in header can be set in extension
- move attributes for documents and folders on search page into own accordion
- search page uses conversion mgr for preview images
- backport export of search result from seeddms 6.0.x
- ldap authentication used 'uid' instead 'cn' in distinguished name if
the initial bind failed and a second bind with the user's credentials
is done
- fix sorting in search result
- import of users can handle hidden and disabled flag
- image conversion falls back to gd library if imagick extension is not loaded
--------------------------------------------------------------------------------
Changes in version 5.1.26
--------------------------------------------------------------------------------
- add hook additionalDocumentContentInfo
- add restapi function 'statstotal'
- custom attributes of type 'date' regard the date format
- check extension dependency on shell commands
- log reason for notification
- add list of notification services
- clicking on the file selection button no longer submits the form in firefox
- fix clear clipboard link in menu
- add conversion service from tiff, gif to png
- do not use logger in notification service if it was not initialized
- fix editing of custom date fields
- fix listing files/folders with umlauts when using webdav
- fix upload with fine-uploader
--------------------------------------------------------------------------------
Changes in version 5.1.25
--------------------------------------------------------------------------------
- certain fields in configuration can be disabled for editing, also works for
configuration fields of extensions
- send notification mail to owner of document and uploader of a version
- new mail body for changing a version comment
- add hook documentListPreview
- various improvements for workflows
- output splash message when removing, editing, adding a category or keyword
- extensions cannot be disabled/enabled if configuration file is not writeable
- prevent cross site scripting in views/bootstrap/class.DefaultKeywords.php (CVE-2022-28051)
- fix possible DoS in op/op.RemoveLog.php (CVE-2022-28478)
- show only calendar events of logged in user
- show expired documents in calendar
- call new hook 'cleanUpDocument' after uploading or updating a document
- pass 'add' or 'update' to hook 'addDocumentContentFile'
- more access restrictions on files in extensions
- fix check of extensions available in repository
--------------------------------------------------------------------------------
Changes in version 5.1.24
--------------------------------------------------------------------------------
- fix sending of some notification mails to groups
- major overhaul of notifications
- check view access for FolderAccess and DocumentAccess
- more settings to disable import and download of extensions
- add new configuration for excluding sequence and comment when creating
a folder
- get zendframework from pkgist
- auto generate path if not set in settings.xml
- add document conversion service
- send request email for next workflow step only if that step is actually reached
- send mails to owner of document/folder only if not logged in or already
in list of notifiers
- improve fulltext search
- improve validation of change password form
- better error checking if uploading or adding a document failed due to
size limits
--------------------------------------------------------------------------------
Changes in version 5.1.23
--------------------------------------------------------------------------------
- output path of parent folder in many document/folder lists
- list affected documents when transfering processes to another user
- check for quota and duplicate content in restapi
- remove preview images before removing document
- fixed error due to multiple declared function when controller method
RemoveFolder::run was called more than once
- fix php error setting mandatory workflow when uploading documents via webdav
- typeahead search for folders can search in subfolders
- new theme based on bootstrap 4, including many improvements on small displays
- propperly check for translation of html email body (Closes: #510)
- set mandatory group reviewer/approver when adding a new document or version
- fix sending notification mails to group when uploading document via drag&drop
- guest login can use any user account
- issue warning if document cannot be approved/reviewed anymore, because it has
expired
- much better form validation based on jquery validation
- secure unlocking/locking of a documents with form token to prevent CSRF attacks
- append referuri to base url to prevent redirects to arbitraty sites in op.Login.php
- theme can be set in user manager
- fields in configuration can be omitted from display and saving
- comment of document version may not be modified when document has expired
- attributes of document version may be edited if enableVersionModification is true
even if the document has been released, obsoleted or has been expired
- reviews and approvals can be removed by admin
- links are all created absolute based on _httpRoot instead of relative to
the current page. This fixes a potential security hole cased by malformed
links.
- add chart with number of folders per document
- add number of links, attachments, versions of a selected user in the user
manager
- add support for drag and drop of attachments
- show all folders in tree when selecting a target folder for move operations
even if they are not writable, otherwise sub folders may not appear in the
tree, because parent folders are not writable
--------------------------------------------------------------------------------
Changes in version 5.1.22
--------------------------------------------------------------------------------
@ -345,6 +798,7 @@
- pass configuration to init() of extension (backport from 6.0.x)
- place comment of version below version data (remove extra column, backport from 6.0.x)
- fix creating folders via restapi (Closes: #469)
- custom attributes of type date show up in the calendar
--------------------------------------------------------------------------------
Changes in version 5.1.15

View File

@ -1,7 +1,10 @@
module.exports = function (grunt) {
'use strict';
var bootstrapDir = 'views/bootstrap/vendors',
// if you set bootstrapDir to views/bootstrap/vendors then make sure
// bootbox is not installed, because version 5 of bootbox will not work
// with bootstrap 2
var bootstrapDir = 'views/bootstrap4/vendors',
tdkDir = 'views/tdk/vendors',
nodeDir = 'node_modules';
@ -71,6 +74,13 @@ module.exports = function (grunt) {
],
dest: bootstrapDir + '/select2/js',
flatten: true
},{
expand: true,
src: [
nodeDir + '/select2/dist/js/i18n/*'
],
dest: bootstrapDir + '/select2/js/i18n',
flatten: true
},{
expand: true,
src: [
@ -78,6 +88,20 @@ module.exports = function (grunt) {
],
dest: bootstrapDir + '/select2/css',
flatten: true
},{
expand: true,
src: [
nodeDir + '/@ttskch/select2-bootstrap4-theme/dist/*'
],
dest: bootstrapDir + '/select2-bootstrap4-theme',
flatten: true
},{
expand: true,
src: [
nodeDir + '/vis-timeline/dist/*'
],
dest: bootstrapDir + '/vis-timeline',
flatten: true
},{
expand: true,
src: [
@ -92,6 +116,20 @@ module.exports = function (grunt) {
],
dest: bootstrapDir + '/jquery-validation',
flatten: true
},{
expand: true,
src: [
nodeDir + '/jquery-typeahead/dist/*'
],
dest: bootstrapDir + '/jquery-typeahead',
flatten: true
},{
expand: true,
src: [
nodeDir + '/bootbox/dist/*'
],
dest: bootstrapDir + '/bootbox',
flatten: true
},{
expand: true,
src: [
@ -145,6 +183,13 @@ module.exports = function (grunt) {
],
dest: bootstrapDir + '/moment/locale',
flatten: true
},{
expand: true,
src: [
nodeDir + '/popper.js/dist/umd/*'
],
dest: bootstrapDir + '/popper',
flatten: true
},{
expand: true,
src: [
@ -152,6 +197,30 @@ module.exports = function (grunt) {
],
dest: bootstrapDir + '/perfect-scrollbar',
flatten: true
},{
expand: true,
src: [
nodeDir + '/bootstrap/dist/js/bootstrap.min.js',
nodeDir + '/bootstrap/dist/css/bootstrap.min.css'
],
dest: bootstrapDir + '/bootstrap',
flatten: true
},{
expand: true,
src: [
nodeDir + '/spectrum-colorpicker2/dist/spectrum.min.js',
nodeDir + '/spectrum-colorpicker2/dist/spectrum.min.css'
],
dest: bootstrapDir + '/spectrum-colorpicker2',
flatten: true
},{
expand: true,
src: [
nodeDir + '/jquery-lazy/jquery.lazy.min.js',
nodeDir + '/jquery-lazy/jquery.lazy.plugins.js'
],
dest: bootstrapDir + '/jquery-lazy',
flatten: true
},{
expand: true,
src: [

View File

@ -1,8 +1,8 @@
VERSION=$(shell php -r 'include("inc/inc.Version.php"); $$v=new SeedDMS_Version(); echo $$v->version();')
SRC=CHANGELOG inc conf utils index.php .htaccess languages op out controllers doc TODO LICENSE webdav install restapi pdfviewer
VIEWS ?= bootstrap
VIEWS ?= bootstrap bootstrap4
NODISTFILES=utils/importmail.php utils/seedddms-importmail utils/remote-email-upload utils/remote-upload utils/da-bv-reminder.php utils/seeddms-da-bv-reminder .svn .gitignore
NODISTFILES=utils/importmail.php utils/seedddms-importmail utils/remote-email-upload utils/remote-upload utils/da-bv-reminder.php utils/seeddms-da-bv-reminder utils/relodge.php utils/seeddms-relodge .svn .gitignore
PHPDOC=~/Downloads/phpDocumentor.phar
@ -23,6 +23,12 @@ dist:
(cd tmp; tar --exclude=.svn --exclude=.gitignore -czvf ../seeddms-$(VERSION).tar.gz seeddms-$(VERSION))
rm -rf tmp
quickstart:
php7.4 vendor/bin/phing -Dversion=$(VERSION) package
unittest:
vendor/bin/phing -Dversion=$(VERSION) phpunitfast
pear:
(cd SeedDMS_Core/; pear package)
(cd SeedDMS_Lucene/; pear package)
@ -56,7 +62,37 @@ repository:
doc:
$(PHPDOC) -d SeedDMS_Core --ignore 'getusers.php,getfoldertree.php,config.php,reverselookup.php' --force -t html
# Download apigen with
# composer create-project --no-dev apigen/apigen:^7.0@alpha tools/apigen
apidoc:
apigen generate -s SeedDMS_Core --exclude tests -d html
tools/apigen/bin/apigen SeedDMS_Core/Core --exclude "tests/*" --output html
.PHONY: doc webdav webapp repository
# Turn the package.xml file into CHANGELOG.md
#
# The idea is to form blocks of lines separated by an empty line.
# Echo block consists of the version number, release date und notes.
# This blocks are turned into single lines which are than sorted.
# Afterwards the single lines are turned back into blocks.
#
# It first uses sgrep to extract the version, date und notes. This is
# feed to sed to isolated the date and version and put them on separate
# lines. Each version
# forms a block of n lines with the first two being the version and date.
# All remaining lines are notes. Blocks are separated by an empty line.
# It's important to form blocks without ane empty lines because the following
# awk will create a single line from each block which can then be sorted
# (or simply reversed in order).
# Because the blocks are listed in the wrong order (last version first and
# previous version last, e.g. 5.1.29, 3.3.0, 3.3.1, ...., 5.1.27, 5.1.28) they
# need to be reversed in order. This is done by turning each block into line
# with the former new lines replaced by a '|'. So it's basically a '|' separated
# csv file which is then reversed in order by 'sort -r'. In order to separate
# blocks by a newline, each line of that output is appended by another
# line break. Result is put back
# into the original format by replacing all '|' by newline.
#
PKGFILE=SeedDMS_Core/package.xml
changelog:
@sgrep 'stag("DATE") .. etag("DATE") or ((stag("RELEASE") .. etag("RELEASE")) in (stag("VERSION") .. etag("VERSION"))) or inner(stag("NOTES") __ etag("NOTES"))' ${PKGFILE} | sed -e 's#^ *<date>\([-0-9]*\)</date><release>\([0-9.preRC]*\)</release>#\n\n\2 (\1)\n---------------------#' | awk -F'\n' -vRS='' -vOFS='|' '{$$1=$$1}1' | sort -V -r | sed 's/$$/\n/' | tr '|' '\n'
.PHONY: doc webdav webapp repository changelog

View File

@ -1,108 +0,0 @@
<?php
/**
* Implementation of a document in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @license GPL2
* @author Markus Westphal, Malcolm Cowe, Matteo Lucarelli,
* Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Matteo Lucarelli, 2010-2012 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* @uses SeedDMS_DatabaseAccess
*/
define('USE_PDO', 1);
if(defined('USE_PDO'))
require_once('Core/inc.DBAccessPDO.php');
else
require_once('Core/inc.DBAccess.php');
/**
* @uses SeedDMS_DMS
*/
require_once('Core/inc.ClassDMS.php');
/**
* @uses SeedDMS_Decorator
*/
require_once('Core/inc.ClassDecorator.php');
/**
* @uses SeedDMS_Object
*/
require_once('Core/inc.ClassObject.php');
/**
* @uses SeedDMS_Folder
*/
require_once('Core/inc.ClassFolder.php');
/**
* @uses SeedDMS_Document
*/
require_once('Core/inc.ClassDocument.php');
/**
* @uses SeedDMS_Attribute
*/
require_once('Core/inc.ClassAttribute.php');
/**
* @uses SeedDMS_Group
*/
require_once('Core/inc.ClassGroup.php');
/**
* @uses SeedDMS_User
*/
require_once('Core/inc.ClassUser.php');
/**
* @uses SeedDMS_KeywordCategory
*/
require_once('Core/inc.ClassKeywords.php');
/**
* @uses SeedDMS_DocumentCategory
*/
require_once('Core/inc.ClassDocumentCategory.php');
/**
* @uses SeedDMS_Notification
*/
require_once('Core/inc.ClassNotification.php');
/**
* @uses SeedDMS_UserAccess
* @uses SeedDMS_GroupAccess
*/
require_once('Core/inc.ClassAccess.php');
/**
* @uses SeedDMS_Workflow
*/
require_once('Core/inc.ClassWorkflow.php');
/**
*/
require_once('Core/inc.AccessUtils.php');
/**
* @uses SeedDMS_File
*/
require_once('Core/inc.FileUtils.php');
/**
* @uses SeedDMS_Transmittal
*/
require_once('Core/inc.ClassTransmittal.php');
/**
* @uses SeedDMS_File
*/
require_once('Core/inc.ClassIterator.php');
?>

View File

@ -1,88 +0,0 @@
<?php
/**
* Some definitions for access control
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Used to indicate that a search should return all
* results in the ACL table. See {@link SeedDMS_Core_Folder::getAccessList()}
*/
define("M_ANY", -1);
/**
* No rights at all
*/
define("M_NONE", 1);
/**
* Read access only
*/
define("M_READ", 2);
/**
* Read and write access only
*/
define("M_READWRITE", 3);
/**
* Unrestricted access
*/
define("M_ALL", 4);
define ("O_GTEQ", ">=");
define ("O_LTEQ", "<=");
define ("O_EQ", "=");
/**
* Folder notification
*/
define("T_FOLDER", 1); //TargetType = Folder
/**
* Document notification
*/
define("T_DOCUMENT", 2); // " = Document
/**
* Notify on all actions on the folder/document
*/
define("N_ALL", 0);
/**
* Notify when object has been deleted
*/
define("N_DELETE", 1);
/**
* Notify when object has been moved
*/
define("N_MOVE", 2);
/**
* Notify when object has been updated (no new version)
*/
define("N_UPDATE", 3);
/**
* Notify when document has new version
*/
define("N_NEW_VERSION", 4);
/**
* Notify when version of document was deleted
*/
define("N_DELETE_VERSION", 5);
/**
* Notify when version of document was deleted
*/
define("N_ADD_DOCUMENT", 6);

View File

@ -1,122 +0,0 @@
<?php
/**
* Implementation of user and group access object
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a user access right.
* This class cannot be used to modify access rights.
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_UserAccess { /* {{{ */
/**
* @var SeedDMS_Core_User
*/
var $_user;
/**
* @var
*/
var $_mode;
/**
* SeedDMS_Core_UserAccess constructor.
* @param $user
* @param $mode
*/
function __construct($user, $mode) {
$this->_user = $user;
$this->_mode = $mode;
}
/**
* @return int
*/
function getUserID() { return $this->_user->getID(); }
/**
* @return mixed
*/
function getMode() { return $this->_mode; }
/**
* @return bool
*/
function isAdmin() {
return ($this->_mode == SeedDMS_Core_User::role_admin);
}
/**
* @return SeedDMS_Core_User
*/
function getUser() {
return $this->_user;
}
} /* }}} */
/**
* Class to represent a group access right.
* This class cannot be used to modify access rights.
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe, 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_GroupAccess { /* {{{ */
/**
* @var SeedDMS_Core_Group
*/
var $_group;
/**
* @var
*/
var $_mode;
/**
* SeedDMS_Core_GroupAccess constructor.
* @param $group
* @param $mode
*/
function __construct($group, $mode) {
$this->_group = $group;
$this->_mode = $mode;
}
/**
* @return int
*/
function getGroupID() { return $this->_group->getID(); }
/**
* @return mixed
*/
function getMode() { return $this->_mode; }
/**
* @return SeedDMS_Core_Group
*/
function getGroup() {
return $this->_group;
}
} /* }}} */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,42 +0,0 @@
<?php
/**
* Implementation of the decorator pattern
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class which implements a simple decorator pattern
*
* @category DMS
* @package SeedDMS_Core
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_Decorator {
protected $o;
public function __construct($object) {
$this->o = $object;
}
public function __call($method, $args)
{
if (!method_exists($this->o, $method)) {
throw new Exception("Undefined method $method attempt.");
}
/* In case the called method returns the object itself, then return this object */
$result = call_user_func_array(array($this->o, $method), $args);
return $result === $this->o ? $this : $result;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,120 +0,0 @@
<?php
/**
* Implementation of document categories in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a document category in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C)2011 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_DocumentCategory {
/**
* @var integer $_id id of document category
* @access protected
*/
protected $_id;
/**
* @var string $_name name of category
* @access protected
*/
protected $_name;
/**
* @var object $_dms reference to dms this category belongs to
* @access protected
*/
protected $_dms;
function __construct($id, $name) { /* {{{ */
$this->_id = $id;
$this->_name = $name;
$this->_dms = null;
} /* }}} */
function setDMS($dms) { /* {{{ */
$this->_dms = $dms;
} /* }}} */
function getID() { return $this->_id; }
function getName() { return $this->_name; }
function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblCategory` SET `name` = ".$db->qstr($newName)." WHERE `id` = ". $this->_id;
if (!$db->getResult($queryStr))
return false;
$this->_name = $newName;
return true;
} /* }}} */
function isUsed() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT * FROM `tblDocumentCategory` WHERE `categoryID`=".$this->_id;
$resArr = $db->getResultArray($queryStr);
if (is_array($resArr) && count($resArr) == 0)
return false;
return true;
} /* }}} */
function remove() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "DELETE FROM `tblCategory` WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr))
return false;
return true;
} /* }}} */
function getDocumentsByCategory($limit=0, $offset=0) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT * FROM `tblDocumentCategory` where `categoryID`=".$this->_id;
if($limit && is_numeric($limit))
$queryStr .= " LIMIT ".(int) $limit;
if($offset && is_numeric($offset))
$queryStr .= " OFFSET ".(int) $offset;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$resArr)
return false;
$documents = array();
foreach ($resArr as $row) {
if($doc = $this->_dms->getDocument($row["documentID"]))
array_push($documents, $doc);
}
return $documents;
} /* }}} */
function countDocumentsByCategory() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT COUNT(*) as `c` FROM `tblDocumentCategory` where `categoryID`=".$this->_id;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$resArr)
return false;
return $resArr[0]['c'];
} /* }}} */
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -1,624 +0,0 @@
<?php
/**
* Implementation of the group object in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a user group in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe, 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_Group { /* {{{ */
/**
* The id of the user group
*
* @var integer
*/
protected $_id;
/**
* The name of the user group
*
* @var string
*/
protected $_name;
/**
* @var SeedDMS_Core_User[]
*/
protected $_users;
/**
* The comment of the user group
*
* @var string
*/
protected $_comment;
/**
* Back reference to DMS this user group belongs to
*
* @var SeedDMS_Core_DMS
*/
protected $_dms;
function __construct($id, $name, $comment) { /* {{{ */
$this->_id = $id;
$this->_name = $name;
$this->_comment = $comment;
$this->_dms = null;
} /* }}} */
/**
* Return an instance of a group object
*
* @param string|integer $id Id, name of group, depending
* on the 3rd parameter.
* @param SeedDMS_Core_DMS $dms instance of dms
* @param string $by search by group name if set to 'name'.
* Search by Id of group if left empty.
* @return SeedDMS_Core_Group|bool instance of class SeedDMS_Core_Group if group was
* found, null if group was not found, false in case of error
*/
public static function getInstance($id, $dms, $by='') { /* {{{ */
$db = $dms->getDB();
switch($by) {
case 'name':
$queryStr = "SELECT * FROM `tblGroups` WHERE `name` = ".$db->qstr($id);
break;
default:
$queryStr = "SELECT * FROM `tblGroups` WHERE `id` = " . (int) $id;
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
else if (count($resArr) != 1) //wenn, dann wohl eher 0 als > 1 ;-)
return null;
$resArr = $resArr[0];
$group = new self($resArr["id"], $resArr["name"], $resArr["comment"]);
$group->setDMS($dms);
return $group;
} /* }}} */
/**
* @param $orderby
* @param SeedDMS_Core_DMS $dms
* @return array|bool
*/
public static function getAllInstances($orderby, $dms) { /* {{{ */
$db = $dms->getDB();
switch($orderby) {
default:
$queryStr = "SELECT * FROM `tblGroups` ORDER BY `name`";
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
$groups = array();
for ($i = 0; $i < count($resArr); $i++) {
$group = new self($resArr[$i]["id"], $resArr[$i]["name"], $resArr[$i]["comment"]);
$group->setDMS($dms);
$groups[$i] = $group;
}
return $groups;
} /* }}} */
/**
* Check if this object is of type 'group'.
*
* @param string $type type of object
*/
public function isType($type) { /* {{{ */
return $type == 'group';
} /* }}} */
/**
* @param SeedDMS_Core_DMS $dms
*/
function setDMS($dms) { /* {{{ */
$this->_dms = $dms;
} /* }}} */
/**
* @return SeedDMS_Core_DMS $dms
*/
function getDMS() {
return $this->_dms;
}
/**
* @return int
*/
function getID() { return $this->_id; }
/**
* @return string
*/
function getName() { return $this->_name; }
/**
* @param $newName
* @return bool
*/
function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblGroups` SET `name` = ".$db->qstr($newName)." WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr))
return false;
$this->_name = $newName;
return true;
} /* }}} */
/**
* @return string
*/
function getComment() { return $this->_comment; }
/**
* @param $newComment
* @return bool
*/
function setComment($newComment) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblGroups` SET `comment` = ".$db->qstr($newComment)." WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr))
return false;
$this->_comment = $newComment;
return true;
} /* }}} */
/**
* @return SeedDMS_Core_User[]|bool
*/
function getUsers() { /* {{{ */
$db = $this->_dms->getDB();
if (!isset($this->_users)) {
$queryStr = "SELECT `tblUsers`.* FROM `tblUsers` ".
"LEFT JOIN `tblGroupMembers` ON `tblGroupMembers`.`userID`=`tblUsers`.`id` ".
"WHERE `tblGroupMembers`.`groupID` = '". $this->_id ."'";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
$this->_users = array();
$classnamerole = $this->_dms->getClassname('role');
$classname = $this->_dms->getClassname('user');
foreach ($resArr as $row) {
/** @var SeedDMS_Core_User $user */
$role = $classnamerole::getInstance($row['role'], $this->_dms);
$user = new $classname($row["id"], $row["login"], $row["pwd"], $row["fullName"], $row["email"], $row["language"], $row["theme"], $row["comment"], $role, $row['hidden']);
$user->setDMS($this->_dms);
array_push($this->_users, $user);
}
}
return $this->_users;
} /* }}} */
/**
* @return SeedDMS_Core_User[]|bool
*/
function getManagers() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT `tblUsers`.* FROM `tblUsers` ".
"LEFT JOIN `tblGroupMembers` ON `tblGroupMembers`.`userID`=`tblUsers`.`id` ".
"WHERE `tblGroupMembers`.`groupID` = '". $this->_id ."' AND `tblGroupMembers`.`manager` = 1";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
$managers = array();
$classnamerole = $this->_dms->getClassname('role');
$classname = $this->_dms->getClassname('user');
foreach ($resArr as $row) {
/** @var SeedDMS_Core_User $user */
$role = $classnamerole::getInstance($row['role'], $this->_dms);
$user = new $classname($row["id"], $row["login"], $row["pwd"], $row["fullName"], $row["email"], $row["language"], $row["theme"], $row["comment"], $role, $row['hidden']);
$user->setDMS($this->_dms);
array_push($managers, $user);
}
return $managers;
} /* }}} */
/**
* @param SeedDMS_Core_User $user
* @param bool $asManager
* @return bool
*/
function addUser($user,$asManager=false) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "INSERT INTO `tblGroupMembers` (`groupID`, `userID`, `manager`) VALUES (".$this->_id.", ".$user->getID(). ", " . ($asManager?"1":"0") ." )";
$res = $db->getResult($queryStr);
if (!$res) return false;
unset($this->_users);
return true;
} /* }}} */
/**
* @param SeedDMS_Core_User $user
* @return bool
*/
function removeUser($user) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "DELETE FROM `tblGroupMembers` WHERE `groupID` = ".$this->_id." AND `userID` = ".$user->getID();
$res = $db->getResult($queryStr);
if (!$res) return false;
unset($this->_users);
return true;
} /* }}} */
/**
* Check if user is member of group
*
* @param SeedDMS_Core_User $user user to be checked
* @param boolean $asManager also check whether user is manager of group if
* set to true, otherwise does not care about manager status
* @return boolean true if user is member, otherwise false
*/
function isMember($user,$asManager=false) { /* {{{ */
if (isset($this->_users)&&!$asManager) {
foreach ($this->_users as $usr)
if ($usr->getID() == $user->getID())
return true;
return false;
}
$db = $this->_dms->getDB();
if ($asManager) $queryStr = "SELECT * FROM `tblGroupMembers` WHERE `groupID` = " . $this->_id . " AND `userID` = " . $user->getID() . " AND `manager` = 1";
else $queryStr = "SELECT * FROM `tblGroupMembers` WHERE `groupID` = " . $this->_id . " AND `userID` = " . $user->getID();
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) return false;
if (count($resArr) != 1) return false;
return true;
} /* }}} */
/**
* Toggle manager status of user
*
* @param SeedDMS_Core_User $user
* @return boolean true if operation was successful, otherwise false
*/
function toggleManager($user) { /* {{{ */
$db = $this->_dms->getDB();
if (!$this->isMember($user)) return false;
if ($this->isMember($user,true)) $queryStr = "UPDATE `tblGroupMembers` SET `manager` = 0 WHERE `groupID` = ".$this->_id." AND `userID` = ".$user->getID();
else $queryStr = "UPDATE `tblGroupMembers` SET `manager` = 1 WHERE `groupID` = ".$this->_id." AND `userID` = ".$user->getID();
if (!$db->getResult($queryStr)) return false;
return true;
} /* }}} */
/**
* Delete user group
* This function deletes the user group and all it references, like access
* control lists, notifications, as a child of other groups, etc.
*
* @param SeedDMS_Core_User $user the user doing the removal (needed for entry in
* review log.
* @return boolean true on success or false in case of an error
*/
function remove($user) { /* {{{ */
$db = $this->_dms->getDB();
$db->startTransaction();
$queryStr = "DELETE FROM `tblGroupMembers` WHERE `groupID` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$queryStr = "DELETE FROM `tblACLs` WHERE `groupID` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$queryStr = "DELETE FROM `tblNotify` WHERE `groupID` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$queryStr = "DELETE FROM `tblMandatoryReviewers` WHERE `reviewerGroupID` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$queryStr = "DELETE FROM `tblMandatoryApprovers` WHERE `approverGroupID` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$queryStr = "DELETE FROM `tblWorkflowTransitionGroups` WHERE `groupid` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$queryStr = "DELETE FROM `tblGroups` WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
// TODO : update document status if reviewer/approver has been deleted
$reviewStatus = $this->getReviewStatus();
foreach ($reviewStatus as $r) {
$queryStr = "INSERT INTO `tblDocumentReviewLog` (`reviewID`, `status`, `comment`, `date`, `userID`) ".
"VALUES ('". $r["reviewID"] ."', '-2', 'Review group removed from process', ".$db->getCurrentDatetime().", '". $user->getID() ."')";
$res=$db->getResult($queryStr);
if(!$res) {
$db->rollbackTransaction();
return false;
}
}
$approvalStatus = $this->getApprovalStatus();
foreach ($approvalStatus as $a) {
$queryStr = "INSERT INTO `tblDocumentApproveLog` (`approveID`, `status`, `comment`, `date`, `userID`) ".
"VALUES ('". $a["approveID"] ."', '-2', 'Approval group removed from process', ".$db->getCurrentDatetime().", '". $user->getID() ."')";
$res=$db->getResult($queryStr);
if(!$res) {
$db->rollbackTransaction();
return false;
}
}
$receiptStatus = $this->getReceiptStatus();
foreach ($receiptStatus as $r) {
$queryStr = "INSERT INTO `tblDocumentReceiptLog` (`receiptID`, `status`, `comment`, `date`, `userID`) ".
"VALUES ('". $r["receiptID"] ."', '-2', 'Recipients group removed from process', ".$db->getCurrentDatetime().", '". $user->getID() ."')";
$res=$db->getResult($queryStr);
if(!$res) {
$db->rollbackTransaction();
return false;
}
}
$revisionStatus = $this->getRevisionStatus();
foreach ($revisionStatus as $r) {
$queryStr = "INSERT INTO `tblDocumentRevisionLog` (`revisionID`, `status`, `comment`, `date`, `userID`) ".
"VALUES ('". $r["revisionID"] ."', '-2', 'Revisors group removed from process', ".$db->getCurrentDatetime().", '". $user->getID() ."')";
$res=$db->getResult($queryStr);
if(!$res) {
$db->rollbackTransaction();
return false;
}
}
$db->commitTransaction();
return true;
} /* }}} */
function getReviewStatus($documentID=null, $version=null) { /* {{{ */
$db = $this->_dms->getDB();
if (!$db->createTemporaryTable("ttreviewid")) {
return false;
}
$status = array();
// See if the group is assigned as a reviewer.
$queryStr = "SELECT `tblDocumentReviewers`.*, `tblDocumentReviewLog`.`status`, ".
"`tblDocumentReviewLog`.`comment`, `tblDocumentReviewLog`.`date`, ".
"`tblDocumentReviewLog`.`userID` ".
"FROM `tblDocumentReviewers` ".
"LEFT JOIN `tblDocumentReviewLog` USING (`reviewID`) ".
"LEFT JOIN `ttreviewid` on `ttreviewid`.`maxLogID` = `tblDocumentReviewLog`.`reviewLogID` ".
"WHERE `ttreviewid`.`maxLogID`=`tblDocumentReviewLog`.`reviewLogID` ".
($documentID==null ? "" : "AND `tblDocumentReviewers`.`documentID` = '". (int) $documentID ."' ").
($version==null ? "" : "AND `tblDocumentReviewers`.`version` = '". (int) $version ."' ").
"AND `tblDocumentReviewers`.`type`='1' ".
"AND `tblDocumentReviewers`.`required`='". $this->_id ."' ";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
if (count($resArr)>0) {
foreach ($resArr as $res)
$status[] = $res;
}
return $status;
} /* }}} */
function getApprovalStatus($documentID=null, $version=null) { /* {{{ */
$db = $this->_dms->getDB();
if (!$db->createTemporaryTable("ttapproveid")) {
return false;
}
$status = array();
// See if the group is assigned as an approver.
$queryStr = "SELECT `tblDocumentApprovers`.*, `tblDocumentApproveLog`.`status`, ".
"`tblDocumentApproveLog`.`comment`, `tblDocumentApproveLog`.`date`, ".
"`tblDocumentApproveLog`.`userID` ".
"FROM `tblDocumentApprovers` ".
"LEFT JOIN `tblDocumentApproveLog` USING (`approveID`) ".
"LEFT JOIN `ttapproveid` on `ttapproveid`.`maxLogID` = `tblDocumentApproveLog`.`approveLogID` ".
"WHERE `ttapproveid`.`maxLogID`=`tblDocumentApproveLog`.`approveLogID` ".
($documentID==null ? "" : "AND `tblDocumentApprovers`.`documentID` = '". (int) $documentID ."' ").
($version==null ? "" : "AND `tblDocumentApprovers`.`version` = '". (int) $version ."' ").
"AND `tblDocumentApprovers`.`type`='1' ".
"AND `tblDocumentApprovers`.`required`='". $this->_id ."' ";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
if (count($resArr)>0) {
foreach ($resArr as $res)
$status[] = $res;
}
return $status;
} /* }}} */
function getReceiptStatus($documentID=null, $version=null) { /* {{{ */
$db = $this->_dms->getDB();
$status = array();
// See if the group is assigned as a recipient.
$queryStr = "SELECT `tblDocumentRecipients`.*, `tblDocumentReceiptLog`.`status`, ".
"`tblDocumentReceiptLog`.`comment`, `tblDocumentReceiptLog`.`date`, ".
"`tblDocumentReceiptLog`.`userID` ".
"FROM `tblDocumentRecipients` ".
"LEFT JOIN `tblDocumentReceiptLog` USING (`receiptID`) ".
"WHERE `tblDocumentRecipients`.`type`='1' ".
($documentID==null ? "" : "AND `tblDocumentRecipients`.`documentID` = '". (int) $documentID ."' ").
($version==null ? "" : "AND `tblDocumentRecipients`.`version` = '". (int) $version ."' ").
"AND `tblDocumentRecipients`.`required`='". $this->_id ."' ";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
if (count($resArr)>0) {
foreach ($resArr as $res) {
if(isset($status["status"][$res['documentID']])) {
if($status["status"][$res['documentID']]['date'] < $res['date']) {
$status["status"][$res['documentID']] = $res;
}
} else {
$status["status"][$res['documentID']] = $res;
}
}
}
return $status;
} /* }}} */
function getRevisionStatus($documentID=null, $version=null) { /* {{{ */
$db = $this->_dms->getDB();
$status = array();
if (!$db->createTemporaryTable("ttcontentid")) {
return false;
}
// See if the group is assigned as a revisor.
$queryStr = "SELECT `tblDocumentRevisors`.*, `tblDocumentRevisionLog`.`status`, ".
"`tblDocumentRevisionLog`.`comment`, `tblDocumentRevisionLog`.`date`, ".
"`tblDocumentRevisionLog`.`userID` ".
"FROM `tblDocumentRevisors` ".
"LEFT JOIN `tblDocumentRevisionLog` USING (`revisionID`) ".
"LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentRevisors`.`version` AND `ttcontentid`.`document` = `tblDocumentRevisors`.`documentID` ".
"WHERE `tblDocumentRevisors`.`type`='1' ".
($documentID==null ? "" : "AND `tblDocumentRevisors`.`documentID` = '". (int) $documentID ."' ").
($version==null ? "" : "AND `tblDocumentRevisors`.`version` = '". (int) $version ."' ").
($documentID==null && $version==null ? "AND `ttcontentid`.`maxVersion` = `tblDocumentRevisors`.`version` " : "").
"AND `tblDocumentRevisors`.`required`='". $this->_id ."' ".
"ORDER BY `tblDocumentRevisionLog`.`revisionLogID` DESC";
$resArr = $db->getResultArray($queryStr);
if ($resArr === false)
return false;
if (count($resArr)>0) {
$status['status'] = array();
foreach ($resArr as $res) {
if($res['date']) {
if(isset($status["status"][$res['documentID']])) {
if($status["status"][$res['documentID']]['date'] < $res['date']) {
$status["status"][$res['documentID']] = $res;
}
} else {
$status["status"][$res['documentID']] = $res;
}
}
}
}
return $status;
} /* }}} */
/**
* Get a list of documents with a workflow
*
* @param int $documentID optional document id for which to retrieve the
* reviews
* @param int $version optional version of the document
* @return bool|array list of all workflows
*/
function getWorkflowStatus($documentID=null, $version=null) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = 'select distinct d.*, c.`groupid` from `tblWorkflowTransitions` a left join `tblWorkflows` b on a.`workflow`=b.`id` left join `tblWorkflowTransitionGroups` c on a.`id`=c.`transition` left join `tblWorkflowDocumentContent` d on b.`id`=d.`workflow` where d.`document` is not null and a.`state`=d.`state` and c.`groupid`='.$this->_id;
if($documentID) {
$queryStr .= ' AND d.`document`='.(int) $documentID;
if($version)
$queryStr .= ' AND d.`version`='.(int) $version;
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
$result = array();
if (count($resArr)>0) {
foreach ($resArr as $res) {
$result[] = $res;
}
}
return $result;
} /* }}} */
/**
* Get all notifications of group
*
* @param integer $type type of item (T_DOCUMENT or T_FOLDER)
* @return SeedDMS_Core_Notification[]|bool array of notifications
*/
function getNotifications($type=0) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT `tblNotify`.* FROM `tblNotify` ".
"WHERE `tblNotify`.`groupID` = ". $this->_id;
if($type) {
$queryStr .= " AND `tblNotify`.`targetType` = ". (int) $type;
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$resArr)
return false;
$notifications = array();
foreach ($resArr as $row) {
$not = new SeedDMS_Core_Notification($row["target"], $row["targetType"], $row["userID"], $row["groupID"]);
$not->setDMS($this->_dms);
array_push($notifications, $not);
}
return $notifications;
} /* }}} */
} /* }}} */

View File

@ -1,231 +0,0 @@
<?php
namespace SeedDMS;
/**
* Implementation of the document iterartor
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
class DocumentIterator implements \Iterator {
/**
* @var object folder
*/
protected $_folder;
/**
* @var object dms
*/
protected $_dms;
/**
* @var array documents
*/
protected $_documents;
public function __construct($folder) {
$this->_folder = $folder;
$this->_dms = $folder->getDMS();
$this->_documents = array();
$this->_pointer = 0;
$this->_cache = array();
$this->populate();
}
public function rewind() {
$this->_pointer = 0;
}
public function valid() {
return isset($this->_documents[$this->_pointer]);
}
public function next() {
$this->_pointer++;
}
public function key() {
return $this->_folders[$this->_pointer];
}
public function current() {
if($this->_documents[$this->_pointer]) {
$documentid = $this->_documents[$this->_pointer]['id'];
if(!isset($this->_cache[$documentid])) {
// echo $documentid." not cached<br />";
$this->_cache[$documentid] = $this->_dms->getdocument($documentid);
}
return $this->_cache[$documentid];
}
return null;
}
private function populate($orderby="", $dir="asc", $limit=0, $offset=0) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT `id` FROM `tblDocuments` WHERE `folder` = " . $this->_folder->getID();
if ($orderby && $orderby[0]=="n") $queryStr .= " ORDER BY `name`";
elseif ($orderby && $orderby[0]=="s") $queryStr .= " ORDER BY `sequence`";
elseif ($orderby && $orderby[0]=="d") $queryStr .= " ORDER BY `date`";
if($dir == 'desc')
$queryStr .= " DESC";
if(is_int($limit) && $limit > 0) {
$queryStr .= " LIMIT ".$limit;
if(is_int($offset) && $offset > 0)
$queryStr .= " OFFSET ".$offset;
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
$this->_documents = $resArr;
} /* }}} */
}
class FolderIterator implements \Iterator { /* {{{ */
/**
* @var object folder
*/
protected $_folder;
/**
* @var object dms
*/
protected $_dms;
/**
* @var array documents
*/
protected $_folders;
public function __construct($folder) { /* {{{ */
$this->_folder = $folder;
$this->_dms = $folder->getDMS();
$this->_folders = array();
$this->_pointer = 0;
$this->_cache = array();
$this->populate();
} /* }}} */
public function rewind() { /* {{{ */
$this->_pointer = 0;
} /* }}} */
public function valid() { /* {{{ */
return isset($this->_folders[$this->_pointer]);
} /* }}} */
public function next() { /* {{{ */
$this->_pointer++;
} /* }}} */
public function key() { /* {{{ */
return $this->_folders[$this->_pointer];
} /* }}} */
public function current() { /* {{{ */
if($this->_folders[$this->_pointer]) {
$folderid = $this->_folders[$this->_pointer]['id'];
if(!isset($this->_cache[$folderid])) {
// echo $folderid." not cached<br />";
$this->_cache[$folderid] = $this->_dms->getFolder($folderid);
}
return $this->_cache[$folderid];
}
return null;
} /* }}} */
private function populate($orderby="", $dir="asc", $limit=0, $offset=0) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT `id` FROM `tblFolders` WHERE `parent` = " . $this->_folder->getID();
if ($orderby && $orderby[0]=="n") $queryStr .= " ORDER BY `name`";
elseif ($orderby && $orderby[0]=="s") $queryStr .= " ORDER BY `sequence`";
elseif ($orderby && $orderby[0]=="d") $queryStr .= " ORDER BY `date`";
if($dir == 'desc')
$queryStr .= " DESC";
if(is_int($limit) && $limit > 0) {
$queryStr .= " LIMIT ".$limit;
if(is_int($offset) && $offset > 0)
$queryStr .= " OFFSET ".$offset;
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
$this->_folders = $resArr;
} /* }}} */
} /* }}} */
/**
* The FolderFilterIterator checks if the given user has access on
* the current folder.
* FilterIterator uses an inner iterator passed to the constructor
* to iterate over the sub folders of a folder.
*
$iter = new FolderIterator($folder);
$iter2 = new FolderFilterIterator($iter, $user);
foreach($iter2 as $ff) {
echo $ff->getName()."<br />";
}
*/
class FolderFilterIterator extends \FilterIterator { /* {{{ */
public function __construct(Iterator $iterator , $filter ) {
parent::__construct($iterator);
$this->userFilter = $filter;
}
public function accept() { /* {{{ */
$folder = $this->getInnerIterator()->current();
echo "accept() for ".$folder->getName()."<br />";
return true;
} /* }}} */
} /* }}} */
/**
$iter = new RecursiveFolderIterator($folder);
$iter2 = new RecursiveIteratorIterator($iter, RecursiveIteratorIterator::SELF_FIRST);
foreach($iter2 as $ff) {
echo $ff->getID().': '.$ff->getName()."<br />";
}
*/
class RecursiveFolderIterator extends FolderIterator implements \RecursiveIterator { /* {{{ */
public function hasChildren() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT id FROM `tblFolders` WHERE `parent` = ".(int) $this->current()->getID();
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$resArr)
return false;
return true;
} /* }}} */
public function getChildren() { /* {{{ */
return new RecursiveFolderIterator($this->current());
} /* }}} */
} /* }}} */
class RecursiveFolderFilterIterator extends FolderFilterIterator { /* {{{ */
public function hasChildren() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT id FROM `tblFolders` WHERE `parent` = ".(int) $this->current()->getID();
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$resArr)
return false;
return true;
} /* }}} */
public function getChildren() { /* {{{ */
return new RecursiveFolderIterator($this->current());
} /* }}} */
} /* }}} */

View File

@ -1,186 +0,0 @@
<?php
/**
* Implementation of keyword categories in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a keyword category in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_KeywordCategory {
/**
* @var integer $_id id of keyword category
* @access protected
*/
protected $_id;
/**
* @var integer $_ownerID id of user who is the owner
* @access protected
*/
protected $_ownerID;
/**
* @var string $_name name of category
* @access protected
*/
protected $_name;
/**
* @var SeedDMS_Core_DMS $_dms reference to dms this category belongs to
* @access protected
*/
protected $_dms;
/**
* SeedDMS_Core_KeywordCategory constructor.
* @param $id
* @param $ownerID
* @param $name
*/
function __construct($id, $ownerID, $name) {
$this->_id = $id;
$this->_name = $name;
$this->_ownerID = $ownerID;
$this->_dms = null;
}
/**
* @param SeedDMS_Core_DMS $dms
*/
function setDMS($dms) {
$this->_dms = $dms;
}
/**
* @return int
*/
function getID() { return $this->_id; }
/**
* @return string
*/
function getName() { return $this->_name; }
/**
* @return bool|SeedDMS_Core_User
*/
function getOwner() {
if (!isset($this->_owner))
$this->_owner = $this->_dms->getUser($this->_ownerID);
return $this->_owner;
}
/**
* @param $newName
* @return bool
*/
function setName($newName) {
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblKeywordCategories` SET `name` = ".$db->qstr($newName)." WHERE `id` = ". $this->_id;
if (!$db->getResult($queryStr))
return false;
$this->_name = $newName;
return true;
}
/**
* @param SeedDMS_Core_User $user
* @return bool
*/
function setOwner($user) {
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblKeywordCategories` SET `owner` = " . $user->getID() . " WHERE = `id` = " . $this->_id;
if (!$db->getResult($queryStr))
return false;
$this->_ownerID = $user->getID();
$this->_owner = $user;
return true;
}
/**
* @return array
*/
function getKeywordLists() {
$db = $this->_dms->getDB();
$queryStr = "SELECT * FROM `tblKeywords` WHERE `category` = " . $this->_id . " order by `keywords`";
return $db->getResultArray($queryStr);
}
/**
* @param $listID
* @param $keywords
* @return bool
*/
function editKeywordList($listID, $keywords) {
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblKeywords` SET `keywords` = ".$db->qstr($keywords)." WHERE `id` = $listID";
return $db->getResult($queryStr);
}
/**
* @param $keywords
* @return bool
*/
function addKeywordList($keywords) {
$db = $this->_dms->getDB();
$queryStr = "INSERT INTO `tblKeywords` (`category`, `keywords`) VALUES (" . $this->_id . ", ".$db->qstr($keywords).")";
return $db->getResult($queryStr);
}
/**
* @param $listID
* @return bool
*/
function removeKeywordList($listID) {
$db = $this->_dms->getDB();
$queryStr = "DELETE FROM `tblKeywords` WHERE `id` = $listID";
return $db->getResult($queryStr);
}
/**
* @return bool
*/
function remove() {
$db = $this->_dms->getDB();
$db->startTransaction();
$queryStr = "DELETE FROM `tblKeywords` WHERE `category` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$queryStr = "DELETE FROM `tblKeywordCategories` WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;
}
$db->commitTransaction();
return true;
}
}

View File

@ -1,116 +0,0 @@
<?php
/**
* Implementation of a notification object
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a notification
*
* @category DMS
* @package SeedDMS_Core
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_Notification { /* {{{ */
/**
* @var integer id of target (document or folder)
*
* @access protected
*/
protected $_target;
/**
* @var integer document or folder
*
* @access protected
*/
protected $_targettype;
/**
* @var integer id of user to notify
*
* @access protected
*/
protected $_userid;
/**
* @var integer id of group to notify
*
* @access protected
*/
protected $_groupid;
/**
* @var object reference to the dms instance this user belongs to
*
* @access protected
*/
protected $_dms;
/**
* Constructor
*
* @param integer $target id of document/folder this notification is
* attached to.
* @param integer $targettype 1 = target is document, 2 = target is a folder
* @param integer $userid id of user. The id is -1 if the notification is
* for a group.
* @param integer $groupid id of group. The id is -1 if the notification is
* for a user.
*/
function __construct($target, $targettype, $userid, $groupid) { /* {{{ */
$this->_target = $target;
$this->_targettype = $targettype;
$this->_userid = $userid;
$this->_groupid = $groupid;
} /* }}} */
/**
* Set instance of dms this object belongs to
*
* @param object $dms instance of dms
*/
function setDMS($dms) { /* {{{ */
$this->_dms = $dms;
} /* }}} */
/**
* Get id of target (document/object) this notification is attachted to
*
* @return integer id of target
*/
function getTarget() { return $this->_target; }
/**
* Get type of target
*
* @return integer type of target (1=document/2=object)
*/
function getTargetType() { return $this->_targettype; }
/**
* Get user for this notification
*
* @return integer id of user or -1 if this notification does not belong
* to a user
*/
function getUser() { return $this->_dms->getUser($this->_userid); }
/**
* Get group for this notification
*
* @return integer id of group or -1 if this notification does not belong
* to a group
*/
function getGroup() { return $this->_dms->getGroup($this->_groupid); }
} /* }}} */
?>

View File

@ -1,313 +0,0 @@
<?php
/**
* Implementation of an generic object in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @license GPL2
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2012 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a generic object in the document management system
*
* This is the base class for generic objects in SeedDMS.
*
* @category DMS
* @package SeedDMS_Core
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2012 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_Object { /* {{{ */
/**
* @var integer unique id of object
*/
protected $_id;
/**
* @var array list of attributes
*/
protected $_attributes;
/**
* @var SeedDMS_Core_DMS back reference to document management system
*/
public $_dms;
/**
* SeedDMS_Core_Object constructor.
* @param $id
*/
function __construct($id) { /* {{{ */
$this->_id = $id;
$this->_dms = null;
} /* }}} */
/**
* Check if this object is of a given type.
*
* This method must be implemened in the child class
*
* @param string $type type of object
*/
public function isType($type) {return false;}
/**
* Set dms this object belongs to.
*
* Each object needs a reference to the dms it belongs to. It will be
* set when the object is created.
* The dms has a references to the currently logged in user
* and the database connection.
*
* @param SeedDMS_Core_DMS $dms reference to dms
*/
public function setDMS($dms) { /* {{{ */
$this->_dms = $dms;
} /* }}} */
public function getDMS() { /* {{{ */
return $this->_dms;
} /* }}} */
/**
* Return the internal id of the document
*
* @return integer id of document
*/
public function getID() { return $this->_id; }
/**
* Returns all attributes set for the object
*
* @return array|bool
*/
public function getAttributes() { /* {{{ */
if (!$this->_attributes) {
$db = $this->_dms->getDB();
switch(get_class($this)) {
case $this->_dms->getClassname('document'):
$queryStr = "SELECT a.* FROM `tblDocumentAttributes` a LEFT JOIN `tblAttributeDefinitions` b ON a.`attrdef`=b.`id` WHERE a.`document` = " . $this->_id." ORDER BY b.`name`";
break;
case $this->_dms->getClassname('documentcontent'):
$queryStr = "SELECT a.* FROM `tblDocumentContentAttributes` a LEFT JOIN `tblAttributeDefinitions` b ON a.`attrdef`=b.`id` WHERE a.`content` = " . $this->_id." ORDER BY b.`name`";
break;
case $this->_dms->getClassname('folder'):
$queryStr = "SELECT a.* FROM `tblFolderAttributes` a LEFT JOIN `tblAttributeDefinitions` b ON a.`attrdef`=b.`id` WHERE a.`folder` = " . $this->_id." ORDER BY b.`name`";
break;
default:
return false;
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$resArr) return false;
$this->_attributes = array();
foreach ($resArr as $row) {
$attrdef = $this->_dms->getAttributeDefinition($row['attrdef']);
$attr = new SeedDMS_Core_Attribute($row["id"], $this, $attrdef, $row["value"]);
$attr->setDMS($this->_dms);
$this->_attributes[$attrdef->getId()] = $attr;
}
}
return $this->_attributes;
} /* }}} */
/**
* Returns an attribute of the object for the given attribute definition
*
* @param SeedDMS_Core_AttributeDefinition $attrdef
* @return array|string value of attritbute or false. The value is an array
* if the attribute is defined as multi value
*/
public function getAttribute($attrdef) { /* {{{ */
if (!$this->_attributes) {
$this->getAttributes();
}
if (isset($this->_attributes[$attrdef->getId()])) {
return $this->_attributes[$attrdef->getId()];
} else {
return false;
}
} /* }}} */
/**
* Returns an attribute value of the object for the given attribute definition
*
* @param SeedDMS_Core_AttributeDefinition $attrdef
* @return array|string value of attritbute or false. The value is an array
* if the attribute is defined as multi value
*/
public function getAttributeValue($attrdef) { /* {{{ */
if (!$this->_attributes) {
$this->getAttributes();
}
if (isset($this->_attributes[$attrdef->getId()])) {
$value = $this->_attributes[$attrdef->getId()]->getValue();
if($attrdef->getMultipleValues()) {
$sep = substr($value, 0, 1);
$vsep = $attrdef->getValueSetSeparator();
/* If the value doesn't start with the separator used in the value set,
* then assume that the value was not saved with a leading separator.
* This can happen, if the value was previously a single value from
* the value set and later turned into a multi value attribute.
*/
if($sep == $vsep)
return(explode($sep, substr($value, 1)));
else
return(array($value));
} else {
return $value;
}
} else
return false;
} /* }}} */
/**
* Returns an attribute value of the object for the given attribute definition
*
* This is a short cut for getAttribute($attrdef)->getValueAsArray() but
* first checks if the object has an attribute for the given attribute
* definition.
*
* @param SeedDMS_Core_AttributeDefinition $attrdef
* @return array|bool
* even if the attribute is not defined as multi value
*/
public function getAttributeValueAsArray($attrdef) { /* {{{ */
if (!$this->_attributes) {
$this->getAttributes();
}
if (isset($this->_attributes[$attrdef->getId()])) {
return $this->_attributes[$attrdef->getId()]->getValueAsArray();
} else
return false;
} /* }}} */
/**
* Returns an attribute value of the object for the given attribute definition
*
* This is a short cut for getAttribute($attrdef)->getValueAsString() but
* first checks if the object has an attribute for the given attribute
* definition.
*
* @param SeedDMS_Core_AttributeDefinition $attrdef
* @return string value of attritbute or false. The value is always a string
* even if the attribute is defined as multi value
*/
public function getAttributeValueAsString($attrdef) { /* {{{ */
if (!$this->_attributes) {
$this->getAttributes();
}
if (isset($this->_attributes[$attrdef->getId()])) {
return $this->_attributes[$attrdef->getId()]->getValue();
} else
return false;
} /* }}} */
/**
* Set an attribute of the object for the given attribute definition
*
* @param SeedDMS_Core_AttributeDefinition $attrdef definition of attribute
* @param array|string $value value of attribute, for multiple values this
* must be an array
* @return boolean true if operation was successful, otherwise false
*/
public function setAttributeValue($attrdef, $value) { /* {{{ */
$db = $this->_dms->getDB();
if (!$this->_attributes) {
$this->getAttributes();
}
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_boolean:
$value = ($value === true || $value != '' || $value == 1) ? 1 : 0;
break;
}
if($attrdef->getMultipleValues() && is_array($value)) {
if(in_array($attrdef->getType(), array(SeedDMS_Core_AttributeDefinition::type_user, SeedDMS_Core_AttributeDefinition::type_group)))
$sep = ',';
else
$sep = substr($attrdef->getValueSet(), 0, 1);
$value = $sep.implode($sep, $value);
}
/* Handle the case if an attribute is not set already */
if(!isset($this->_attributes[$attrdef->getId()])) {
switch(get_class($this)) {
case $this->_dms->getClassname('document'):
$tablename = 'tblDocumentAttributes';
$queryStr = "INSERT INTO `tblDocumentAttributes` (`document`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")";
break;
case $this->_dms->getClassname('documentcontent'):
$tablename = 'tblDocumentContentAttributes';
$queryStr = "INSERT INTO `tblDocumentContentAttributes` (`content`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")";
break;
case $this->_dms->getClassname('folder'):
$tablename = 'tblFolderAttributes';
$queryStr = "INSERT INTO `tblFolderAttributes` (`folder`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")";
break;
default:
return false;
}
$res = $db->getResult($queryStr);
if (!$res)
return false;
$attr = new SeedDMS_Core_Attribute($db->getInsertID($tablename), $this, $attrdef, $value);
$attr->setDMS($this->_dms);
$this->_attributes[$attrdef->getId()] = $attr;
return true;
}
/* The attribute already exists. setValue() will either update or delete it. */
$this->_attributes[$attrdef->getId()]->setValue($value);
return true;
} /* }}} */
/**
* Remove an attribute of the object for the given attribute definition
* @param SeedDMS_Core_AttributeDefinition $attrdef
* @return boolean true if operation was successful, otherwise false
*/
public function removeAttribute($attrdef) { /* {{{ */
$db = $this->_dms->getDB();
if (!$this->_attributes) {
$this->getAttributes();
}
if(isset($this->_attributes[$attrdef->getId()])) {
switch(get_class($this)) {
case $this->_dms->getClassname('document'):
$queryStr = "DELETE FROM `tblDocumentAttributes` WHERE `document`=".$this->_id." AND `attrdef`=".$attrdef->getId();
break;
case $this->_dms->getClassname('documentcontent'):
$queryStr = "DELETE FROM `tblDocumentContentAttributes` WHERE `content`=".$this->_id." AND `attrdef`=".$attrdef->getId();
break;
case $this->_dms->getClassname('folder'):
$queryStr = "DELETE FROM `tblFolderAttributes` WHERE `folder`=".$this->_id." AND `attrdef`=".$attrdef->getId();
break;
default:
return false;
}
$res = $db->getResult($queryStr);
if (!$res)
return false;
unset($this->_attributes[$attrdef->getId()]);
}
return true;
} /* }}} */
} /* }}} */

View File

@ -1,398 +0,0 @@
<?php
/**
* Implementation of the transmittal object in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a transmittal in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_Transmittal {
/**
* @var integer id of transmittal
*
* @access protected
*/
var $_id;
/**
* @var string name of transmittal
*
* @access protected
*/
var $_name;
/**
* @var string comment of transmittal
*
* @access protected
*/
var $_comment;
/**
* @var boolean true if transmittal is public
*
* @access protected
*/
var $_isPublic;
/**
* @var object user this transmittal belongs to
*
* @access protected
*/
var $_user;
/**
* @var object date of creation
*
* @access protected
*/
var $_date;
/**
* @var object items
*
* @access protected
*/
var $_items;
/**
* @var object reference to the dms instance this user belongs to
*
* @access protected
*/
var $_dms;
function __construct($id, $user, $name, $comment, $isPublic=0, $date='') {
$this->_id = $id;
$this->_name = $name;
$this->_comment = $comment;
$this->_user = $user;
$this->_isPublic = $isPublic;
$this->_date = $date;
$this->_items = array();
$this->_dms = null;
}
/**
* Get an instance of a transmittal object
*
* @param string|integer $id id or name of transmittal, depending
* on the 3rd parameter.
* @param object $dms instance of dms
* @param string $by search by [id|name]. If this
* parameter is left empty, the user will be search by its Id.
* @return object instance of class SeedDMS_Core_Transmittal
*/
public static function getInstance($id, $dms, $by='') { /* {{{ */
if(!$dms || get_class($dms) != 'SeedDMS_Core_DMS')
return false;
$db = $dms->getDB();
switch($by) {
case 'name':
$queryStr = "SELECT * FROM `tblTransmittals` WHERE `name` = ".$db->qstr($id);
break;
default:
$queryStr = "SELECT * FROM `tblTransmittals` WHERE id = " . (int) $id;
}
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) return false;
if (count($resArr) != 1) return false;
$resArr = $resArr[0];
$uclassname = $dms->getClassname('user');
$user = $uclassname::getInstance($resArr['userID'], $dms);
$transmittal = new self($resArr["id"], $user, $resArr["name"], $resArr["comment"], $resArr["public"], $resArr["date"]);
$transmittal->setDMS($dms);
return $transmittal;
} /* }}} */
/**
* Get all instances of a transmittal object
*
* @param string|integer $id id or name of transmittal, depending
* on the 3rd parameter.
* @param object $dms instance of dms
* @param string $by search by [id|name]. If this
* parameter is left empty, the user will be search by its Id.
* @return object instance of class SeedDMS_Core_Transmittal
*/
public static function getAllInstances($user, $orderby, $dms) { /* {{{ */
$db = $dms->getDB();
$queryStr = "SELECT * FROM `tblTransmittals`";
if($user)
$queryStr .= " WHERE `userID` = " . $user->getID();
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) return false;
$uclassname = $dms->getClassname('user');
$transmittals = array();
foreach ($resArr as $res) {
$user = $uclassname::getInstance($res['userID'], $dms);
$transmittal = new self($res["id"], $user, $res["name"], $res["comment"], $res["public"], $res["date"]);
$transmittal->setDMS($dms);
$transmittals[] = $transmittal;
}
return $transmittals;
} /* }}} */
function setDMS($dms) {
$this->_dms = $dms;
}
function getID() { return $this->_id; }
function getName() { return $this->_name; }
function setName($newName) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblTransmittals` SET `name` =".$db->qstr($newName)." WHERE `id` = " . $this->_id;
$res = $db->getResult($queryStr);
if (!$res)
return false;
$this->_name = $newName;
return true;
} /* }}} */
function getComment() { return $this->_comment; }
function setComment($newComment) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "UPDATE `tblTransmittals` SET `comment` =".$db->qstr($newComment)." WHERE `id` = " . $this->_id;
$res = $db->getResult($queryStr);
if (!$res)
return false;
$this->_comment = $newComment;
return true;
} /* }}} */
function getUser() { return $this->_user; }
function getItems() { /* {{{ */
$db = $this->_dms->getDB();
if (!$this->_items) {
$queryStr = "SELECT `tblTransmittalItems`.* FROM `tblTransmittalItems` ".
"LEFT JOIN `tblDocuments` ON `tblTransmittalItems`.`document`=`tblDocuments`.`id` ".
"WHERE `tblTransmittalItems`.`transmittal` = '". $this->_id ."'";
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
$this->_users = array();
$classname = $this->_dms->getClassname('transmittalitem');
foreach ($resArr as $row) {
$document = $this->_dms->getDocument($row['document']);
$content = $document->getContentByVersion($row['version']);
$item = new $classname($row["id"], $this, $content, $row["date"]);
array_push($this->_items, $item);
}
}
return $this->_items;
} /* }}} */
function getSize() { /* {{{ */
$db = $this->_dms->getDB();
if (!$this->_items) {
self::getItems();
}
$size = 0;
foreach ($this->_items as $item) {
if($content = $item->getContent()) {
$size += $content->getFileSize();
}
}
return $size;
} /* }}} */
/**
* Add an item to the transmittal
*
* @param object $item instance of SeedDMS_Core_DocumentContent
* @return boolean true if item could be added, otherwise false
*/
function addContent($item) { /* {{{ */
$db = $this->_dms->getDB();
if(get_class($item) != $this->_dms->getClassname('documentcontent'))
return false;
$document = $item->getDocument();
$queryStr = "INSERT INTO `tblTransmittalItems` (`transmittal`, `document`, `version`, `date`) ".
"VALUES ('". $this->_id ."', ".$document->getID().", ".$item->getVersion().", ".$db->getCurrentDatetime().")";
$res=$db->getResult($queryStr);
if(!$res) {
return false;
}
$itemID = $db->getInsertID('tblTransmittalItems');
return SeedDMS_Core_TransmittalItem::getInstance($itemID, $this->_dms);
} /* }}} */
function remove() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "DELETE FROM `tblTransmittals` WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr)) {
return false;
}
return true;
} /* }}} */
}
/**
* Class to represent a transmittal in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_TransmittalItem {
/**
* @var integer id of transmittal item
*
* @access protected
*/
var $_id;
/**
* @var object document content
*
* @access protected
*/
var $_content;
/**
* @var object transmittal
*
* @access protected
*/
var $_transmittal;
/**
* @var object date of creation
*
* @access protected
*/
var $_date;
function __construct($id, $transmittal, $content, $date='') {
$this->_id = $id;
$this->_transmittal = $transmittal;
$this->_content = $content;
$this->_date = $date;
$this->_dms = null;
}
public static function getInstance($id, $dms) { /* {{{ */
if(!$dms || get_class($dms) != 'SeedDMS_Core_DMS')
return false;
$db = $dms->getDB();
$queryStr = "SELECT * FROM `tblTransmittalItems` WHERE `id` = " . (int) $id;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
if (count($resArr) != 1)
return false;
$resArr = $resArr[0];
$transmittal = SeedDMS_Core_Transmittal::getInstance($resArr['transmittal'], $dms);
$dclassname = $dms->getClassname('document');
$document = $dclassname::getInstance($resArr['document'], $dms);
$content = $document->getContentByVersion((int) $resArr['version']);
$item = new self($resArr["id"], $transmittal, $content, $resArr["date"]);
$item->setDMS($dms);
return $item;
} /* }}} */
function setDMS($dms) {
$this->_dms = $dms;
}
function getID() { return $this->_id; }
function getTransmittal() { return $this->_transmittal; }
function getContent() { return $this->_content; }
function getDate() { return $this->_date; }
function remove() { /* {{{ */
$db = $this->_dms->getDB();
$transmittal = $this->_transmittal;
$queryStr = "DELETE FROM `tblTransmittalItems` WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr)) {
return false;
}
return true;
} /* }}} */
/**
* Check if the content referenzed by the transmittal item is unequal
* to the latest content of the document.
*
* This function updateѕ always to the latest version of the document,
* even if the version in the item is higher. This can happen if a
* version has been removed.
*
* @return boolean/integer false in case of an error, otherwise the new
* version.
*/
function updateContent() { /* {{{ */
$db = $this->_dms->getDB();
$transmittal = $this->_transmittal;
$document = $this->_content->getDocument();
$latestcontent = $document->getLatestContent();
if($latestcontent->getVersion() != $this->_content->getVersion()) {
$queryStr = "UPDATE `tblTransmittalItems` set `version` = ".$latestcontent->getVersion()." WHERE `id` = " . $this->_id;
if (!$db->getResult($queryStr)) {
return false;
}
}
return $latestcontent->getVersion();
} /* }}} */
}
?>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,317 +0,0 @@
<?php
/**
* Implementation of database access
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe,
* 2010 Matteo Lucarelli, 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Include the adodb database abstraction
*/
require_once "adodb/adodb.inc.php";
/** @noinspection PhpUndefinedClassInspection */
/**
* Class to represent the database access for the document management
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Matteo Lucarelli, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal, 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli, 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_DatabaseAccess {
var $_debug;
var $_driver;
var $_hostname;
var $_database;
var $_user;
var $_passw;
var $_conn;
var $_connected;
var $_ttreviewid;
var $_ttapproveid;
var $_ttstatid;
var $_ttcontentid;
var $_intransaction;
/*
Backup functions
*/
/**
* Return list of all database tables
*
* This function is used to retrieve a list of database tables for backup
*
* @return array list of table names
*/
function TableList() {
return $this->_conn->MetaTables("TABLES");
}
/**
* Constructor of SeedDMS_Core_DatabaseAccess
*
* Sets all database parameters but does not connect.
*
* @param string $driver the database type e.g. mysql, sqlite
* @param string $hostname host of database server
* @param string $user name of user having access to database
* @param string $passw password of user
* @param bool|string $database name of database
*/
function __construct($driver, $hostname, $user, $passw, $database = false) {
$this->_driver = $driver;
$this->_hostname = $hostname;
$this->_database = $database;
$this->_user = $user;
$this->_passw = $passw;
$this->_connected = false;
$this->_intransaction = 0;
// $tt*****id is a hack to ensure that we do not try to create the
// temporary table twice during a single connection. Can be fixed by
// using Views (MySQL 5.0 onward) instead of temporary tables.
// CREATE ... IF NOT EXISTS cannot be used because it has the
// unpleasant side-effect of performing the insert again even if the
// table already exists.
//
// See createTemporaryTable() method for implementation.
$this->_ttreviewid = false;
$this->_ttapproveid = false;
$this->_ttstatid = false;
$this->_ttcontentid = false;
$this->_debug = false;
}
/**
* Connect to database
*
* @return boolean true if connection could be established, otherwise false
*/
function connect() { /* {{{ */
$this->_conn = ADONewConnection($this->_driver);
if ($this->_database)
$this->_conn->Connect($this->_hostname, $this->_user, $this->_passw, $this->_database);
else
$this->_conn->Connect($this->_hostname, $this->_user, $this->_passw);
if (!$this->_conn)
return false;
$this->_conn->SetFetchMode(ADODB_FETCH_ASSOC);
$this->_conn->Execute('SET NAMES utf8');
$this->_connected = true;
return true;
} /* }}} */
/**
* Make sure a database connection exisits
*
* This function checks for a database connection. If it does not exists
* it will reconnect.
*
* @return boolean true if connection is established, otherwise false
*/
function ensureConnected() { /* {{{ */
if (!$this->_connected) return $this->connect();
else return true;
} /* }}} */
/**
* Sanitize String used in database operations
*
* @param string $text
* @return string sanitized string
*/
function qstr($text) { /* {{{ */
return $this->_conn->qstr($text);
} /* }}} */
/**
* Execute SQL query and return result
*
* Call this function only with sql query which return data records.
*
* @param string $queryStr sql query
* @return array|boolean data if query could be executed otherwise false
*/
function getResultArray($queryStr) { /* {{{ */
/** @noinspection PhpUnusedLocalVariableInspection */
$resArr = array();
$res = $this->_conn->Execute($queryStr);
if (!$res) {
if($this->_debug)
echo "error: ".$queryStr."<br />";
return false;
}
$resArr = $res->GetArray();
$res->Close();
return $resArr;
} /* }}} */
/**
* Execute SQL query
*
* Call this function only with sql query which do not return data records.
*
* @param string $queryStr sql query
* @return bool true if query could be executed otherwise false
* @internal param bool $silent not used anymore. This was used when this method
* still issued an error message
*/
function getResult($queryStr) { /* {{{ */
$res = $this->_conn->Execute($queryStr);
if(!$res) {
if($this->_debug)
echo "error: ".$queryStr."<br />";
}
return $res;
} /* }}} */
/**
* Return the id of the last instert record
*
* @return integer id used in last autoincrement
*/
function getInsertID() { /* {{{ */
return $this->_conn->Insert_ID();
} /* }}} */
function startTransaction() { /* {{{ */
if(!$this->_intransaction) {
$this->_conn->BeginTrans();
}
$this->_intransaction++;
} /* }}} */
function rollbackTransaction() { /* {{{ */
if($this->_intransaction == 1) {
$this->_conn->RollbackTrans();
}
$this->_intransaction--;
} /* }}} */
function commitTransaction() { /* {{{ */
if($this->_intransaction == 1) {
$this->_conn->CommitTrans();
}
$this->_intransaction--;
} /* }}} */
function getErrorMsg() { /* {{{ */
return $this->_conn->ErrorMsg();
} /* }}} */
function getErrorNo() { /* {{{ */
return $this->_conn->ErrorNo();
} /* }}} */
/**
* Create various temporary tables to speed up and simplify sql queries
* @param $tableName
* @param bool $override
* @return bool
*/
function createTemporaryTable($tableName, $override=false) { /* {{{ */
if (!strcasecmp($tableName, "ttreviewid")) {
$queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttreviewid` (PRIMARY KEY (`reviewID`), INDEX (`maxLogID`)) ".
"SELECT `tblDocumentReviewLog`.`reviewID`, ".
"MAX(`tblDocumentReviewLog`.`reviewLogID`) AS `maxLogID` ".
"FROM `tblDocumentReviewLog` ".
"GROUP BY `tblDocumentReviewLog`.`reviewID` ".
"ORDER BY `tblDocumentReviewLog`.`reviewLogID`";
if (!$this->_ttreviewid) {
if (!$this->getResult($queryStr))
return false;
$this->_ttreviewid=true;
}
else {
if (is_bool($override) && $override) {
if (!$this->getResult("DELETE FROM `ttreviewid`"))
return false;
if (!$this->getResult($queryStr))
return false;
}
}
return $this->_ttreviewid;
}
else if (!strcasecmp($tableName, "ttapproveid")) {
$queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttapproveid` (PRIMARY KEY (`approveID`), INDEX (`maxLogID`)) ".
"SELECT `tblDocumentApproveLog`.`approveID`, ".
"MAX(`tblDocumentApproveLog`.`approveLogID`) AS `maxLogID` ".
"FROM `tblDocumentApproveLog` ".
"GROUP BY `tblDocumentApproveLog`.`approveID` ".
"ORDER BY `tblDocumentApproveLog`.`approveLogID`";
if (!$this->_ttapproveid) {
if (!$this->getResult($queryStr))
return false;
$this->_ttapproveid=true;
}
else {
if (is_bool($override) && $override) {
if (!$this->getResult("DELETE FROM `ttapproveid`"))
return false;
if (!$this->getResult($queryStr))
return false;
}
}
return $this->_ttapproveid;
}
else if (!strcasecmp($tableName, "ttstatid")) {
$queryStr = "CREATE TEMPORARY TABLE IF NOT EXISTS `ttstatid` (PRIMARY KEY (`statusID`), INDEX (`maxLogID`)) ".
"SELECT `tblDocumentStatusLog`.`statusID`, ".
"MAX(`tblDocumentStatusLog`.`statusLogID`) AS `maxLogID` ".
"FROM `tblDocumentStatusLog` ".
"GROUP BY `tblDocumentStatusLog`.`statusID` ".
"ORDER BY `tblDocumentStatusLog`.`statusLogID`";
if (!$this->_ttstatid) {
if (!$this->getResult($queryStr))
return false;
$this->_ttstatid=true;
}
else {
if (is_bool($override) && $override) {
if (!$this->getResult("DELETE FROM `ttstatid`"))
return false;
if (!$this->getResult($queryStr))
return false;
}
}
return $this->_ttstatid;
}
else if (!strcasecmp($tableName, "ttcontentid")) {
$queryStr = "CREATE TEMPORARY TABLE `ttcontentid` (PRIMARY KEY (`document`), INDEX (`maxVersion`)) ".
"SELECT `tblDocumentContent`.`document`, ".
"MAX(`tblDocumentContent`.`version`) AS `maxVersion` ".
"FROM `tblDocumentContent` ".
"GROUP BY `tblDocumentContent`.`document` ".
"ORDER BY `tblDocumentContent`.`document`";
if (!$this->_ttcontentid) {
if (!$this->getResult($queryStr))
return false;
$this->_ttcontentid=true;
}
else {
if (is_bool($override) && $override) {
if (!$this->getResult("DELETE FROM `ttcontentid`"))
return false;
if (!$this->getResult($queryStr))
return false;
}
}
return $this->_ttcontentid;
}
return false;
} /* }}} */
}

File diff suppressed because it is too large Load Diff

View File

@ -1,286 +0,0 @@
<?php
/**
* Implementation of various file system operations
*
* @category DMS
* @package SeedDMS_Core
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to represent a user in the document management system
*
* @category DMS
* @package SeedDMS_Core
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010 Matteo Lucarelli,
* 2010 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Core_File {
/**
* @param $old
* @param $new
* @return bool
*/
static function renameFile($old, $new) { /* {{{ */
return @rename($old, $new);
} /* }}} */
/**
* @param $file
* @return bool
*/
static function removeFile($file) { /* {{{ */
return @unlink($file);
} /* }}} */
/**
* @param $source
* @param $target
* @return bool
*/
static function copyFile($source, $target) { /* {{{ */
return @copy($source, $target);
} /* }}} */
/**
* @param $source
* @param $target
* @return bool
*/
static function moveFile($source, $target) { /* {{{ */
/** @noinspection PhpUndefinedFunctionInspection */
if (!@copyFile($source, $target))
return false;
/** @noinspection PhpUndefinedFunctionInspection */
return @removeFile($source);
} /* }}} */
/**
* @param $file
* @return bool|int
*/
static function fileSize($file) { /* {{{ */
if(!$a = fopen($file, 'r'))
return false;
fseek($a, 0, SEEK_END);
$filesize = ftell($a);
fclose($a);
return $filesize;
} /* }}} */
/**
* @param $size
* @param array $sizes
* @return string
*/
static function format_filesize($size, $sizes = array('Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB')) { /* {{{ */
if ($size == 0) return('0 Bytes');
/** @noinspection PhpIllegalArrayKeyTypeInspection */
return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $sizes[$i]);
} /* }}} */
/**
* @param $str
* @return bool|int
*/
static function parse_filesize($str) { /* {{{ */
preg_replace('/\s\s+/', '', $str);
if(in_array(strtoupper(substr($str, -1)), array('B','K','M','G'))) {
$value = (int) substr($str, 0, -1);
$unit = substr($str, -1, 1);
} else {
return (int) $str;
}
switch(strtoupper($unit)) {
case 'G':
return $value * 1024 * 1024 * 1024;
break;
case 'M':
return $value * 1024 * 1024;
break;
case 'K':
return $value * 1024;
break;
default;
return $value;
break;
}
/** @noinspection PhpUnreachableStatementInspection */
return false;
} /* }}} */
/**
* @param $file
* @return string
*/
static function checksum($file) { /* {{{ */
return md5_file($file);
} /* }}} */
/**
* @param $old
* @param $new
* @return bool
*/
static function renameDir($old, $new) { /* {{{ */
return @rename($old, $new);
} /* }}} */
/**
* @param $path
* @return bool
*/
static function makeDir($path) { /* {{{ */
if( !is_dir( $path ) ){
$res=@mkdir( $path , 0777, true);
if (!$res) return false;
}
return true;
/* some old code
if (strncmp($path, DIRECTORY_SEPARATOR, 1) == 0) {
$mkfolder = DIRECTORY_SEPARATOR;
}
else {
$mkfolder = "";
}
$path = preg_split( "/[\\\\\/]/" , $path );
for( $i=0 ; isset( $path[$i] ) ; $i++ )
{
if(!strlen(trim($path[$i])))continue;
$mkfolder .= $path[$i];
if( !is_dir( $mkfolder ) ){
$res=@mkdir( "$mkfolder" , 0777);
if (!$res) return false;
}
$mkfolder .= DIRECTORY_SEPARATOR;
}
return true;
// patch from alekseynfor safe_mod or open_basedir
global $settings;
$path = substr_replace ($path, "/", 0, strlen($settings->_contentDir));
$mkfolder = $settings->_contentDir;
$path = preg_split( "/[\\\\\/]/" , $path );
for( $i=0 ; isset( $path[$i] ) ; $i++ )
{
if(!strlen(trim($path[$i])))continue;
$mkfolder .= $path[$i];
if( !is_dir( $mkfolder ) ){
$res= @mkdir( "$mkfolder" , 0777);
if (!$res) return false;
}
$mkfolder .= DIRECTORY_SEPARATOR;
}
return true;
*/
} /* }}} */
/**
* @param $path
* @return bool
*/
static function removeDir($path) { /* {{{ */
$handle = @opendir($path);
while ($entry = @readdir($handle) )
{
if ($entry == ".." || $entry == ".")
continue;
else if (is_dir($path . $entry))
{
if (!self::removeDir($path . $entry . "/"))
return false;
}
else
{
if (!@unlink($path . $entry))
return false;
}
}
@closedir($handle);
return @rmdir($path);
} /* }}} */
/**
* @param $sourcePath
* @param $targetPath
* @return bool
*/
static function copyDir($sourcePath, $targetPath) { /* {{{ */
if (mkdir($targetPath, 0777)) {
$handle = @opendir($sourcePath);
while ($entry = @readdir($handle) ) {
if ($entry == ".." || $entry == ".")
continue;
else if (is_dir($sourcePath . $entry)) {
if (!self::copyDir($sourcePath . $entry . "/", $targetPath . $entry . "/"))
return false;
} else {
if (!@copy($sourcePath . $entry, $targetPath . $entry))
return false;
}
}
@closedir($handle);
}
else
return false;
return true;
} /* }}} */
/**
* @param $sourcePath
* @param $targetPath
* @return bool
*/
static function moveDir($sourcePath, $targetPath) { /* {{{ */
/** @noinspection PhpUndefinedFunctionInspection */
if (!copyDir($sourcePath, $targetPath))
return false;
/** @noinspection PhpUndefinedFunctionInspection */
return removeDir($sourcePath);
} /* }}} */
// code by Kioob (php.net manual)
/**
* @param $source
* @param bool $level
* @return bool|string
*/
static function gzcompressfile($source, $level=false) { /* {{{ */
$dest=$source.'.gz';
$mode='wb'.$level;
$error=false;
if($fp_out=@gzopen($dest,$mode)) {
if($fp_in=@fopen($source,'rb')) {
while(!feof($fp_in))
@gzwrite($fp_out,fread($fp_in,1024*512));
@fclose($fp_in);
}
else $error=true;
@gzclose($fp_out);
}
else $error=true;
if($error) return false;
else return $dest;
} /* }}} */
}

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +0,0 @@
<?php
$g_config['type'] = 'mysql';
$g_config['hostname'] = 'localhost';
$g_config['user'] = 'letodms';
$g_config['passwd'] = 'letodms';
$g_config['name'] = 'letodms';
$g_config['contentDir'] = '/tmp/content';
$g_config['contentOffsetDir'] = '/tmp/content';
?>

View File

@ -1,25 +0,0 @@
<?php
include("config.php");
include("SeedDMS/SeedDMS_Core.php");
$db = new SeedDMS_Core_DatabaseAccess($g_config['type'], $g_config['hostname'], $g_config['user'], $g_config['passwd'], $g_config['name']);
$db->connect() or die ("Could not connect to db-server \"" . $g_config['hostname'] . "\"");
$dms = new SeedDMS_Core_DMS($db, $g_config['contentDir'], $g_config['contentOffsetDir']);
function tree($folder, $indent='') {
echo $indent."D ".$folder->getName()."\n";
$subfolders = $folder->getSubFolders();
foreach($subfolders as $subfolder) {
tree($subfolder, $indent.' ');
}
$documents = $folder->getDocuments();
foreach($documents as $document) {
echo $indent." ".$document->getName()."\n";
}
}
$folder = $dms->getFolder(1);
tree($folder);
?>

View File

@ -1,14 +0,0 @@
<?php
include("config.php");
include("SeedDMS/SeedDMS_Core.php");
$db = new SeedDMS_Core_DatabaseAccess($g_config['type'], $g_config['hostname'], $g_config['user'], $g_config['passwd'], $g_config['name']);
$db->connect() or die ("Could not connect to db-server \"" . $g_config['hostname'] . "\"");
$dms = new SeedDMS_Core_DMS($db, $g_config['contentDir'], $g_config['contentOffsetDir']);
$users = $dms->getAllUsers();
foreach($users as $user)
echo $user->getId()." ".$user->getLogin()." ".$user->getFullname()."\n";
?>

View File

@ -1,44 +0,0 @@
<?php
include("config.php");
include("SeedDMS/SeedDMS_Core.php");
$db = new SeedDMS_Core_DatabaseAccess($g_config['type'], $g_config['hostname'], $g_config['user'], $g_config['passwd'], $g_config['name']);
$db->connect() or die ("Could not connect to db-server \"" . $g_config['hostname'] . "\"");
$dms = new SeedDMS_Core_DMS($db, $g_config['contentDir'], $g_config['contentOffsetDir']);
$path = '/Test 1/';
echo "Searching for folder or document with path '".$path."'\n";
$root = $dms->getRootFolder();
if($path[0] == '/') {
$path = substr($path, 1);
}
$patharr = explode('/', $path);
/* The last entry is always the document, though if the path ends in '/' the
* document name will be empty.
*/
$docname = array_pop($patharr);
$parentfolder = $root;
foreach($patharr as $pathseg) {
if($folder = $dms->getFolderByName($pathseg, $parentfolder)) {
$parentfolder = $folder;
}
}
if($folder) {
if($docname) {
if($document = $dms->getDocumentByName($docname, $folder)) {
echo "Given path is document '".$document->getName()."'\n";
} else {
echo "No object found\n";
}
} else {
echo "Given path is a folder '".$folder->getName()."'\n";
}
} else {
echo "No object found\n";
}
?>

View File

@ -1,44 +0,0 @@
<?php
// SeedDMS. Document Management System
// Copyright (C) 2011-2013 Uwe Steinmann
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
/**
* @uses Zend_Search_Lucene
*/
require_once('Zend/Search/Lucene.php');
/**
* @uses Zend_Search_Lucene_Analysis_TokenFilter_Stopwords
*/
require_once("Zend/Search/Lucene/Analysis/TokenFilter/StopWords.php");
/**
* @uses SeedDMS_Lucene_Indexer
*/
require_once('Lucene/Indexer.php');
/**
* @uses SeedDMS_Lucene_Search
*/
require_once('Lucene/Search.php');
/**
* @uses SeedDMS_Lucene_IndexedDocument
*/
require_once('Lucene/IndexedDocument.php');
?>

View File

@ -1,217 +0,0 @@
<?php
/**
* Implementation of an indexed document
*
* @category DMS
* @package SeedDMS_Lucene
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing an indexed document.
*
* @category DMS
* @package SeedDMS_Lucene
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document {
/**
* @var string
*/
protected $errormsg;
/**
* @var string
*/
protected $mimetype;
/**
* @var string
*/
protected $cmd;
/**
* @param $cmd
* @param int $timeout
* @return string
* @throws Exception
*/
static function execWithTimeout($cmd, $timeout=2) { /* {{{ */
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$pipes = array();
$timeout += time();
$process = proc_open($cmd, $descriptorspec, $pipes);
if (!is_resource($process)) {
throw new Exception("proc_open failed on: " . $cmd);
}
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
$output = $error = '';
$timeleft = $timeout - time();
$read = array($pipes[1], $pipes[2]);
$write = NULL;
$exeptions = NULL;
do {
$num_changed_streams = stream_select($read, $write, $exeptions, $timeleft, 200000);
if ($num_changed_streams === false) {
proc_terminate($process);
throw new Exception("stream select failed on: " . $cmd);
} elseif ($num_changed_streams > 0) {
$output .= fread($pipes[1], 8192);
$error .= fread($pipes[2], 8192);
}
$timeleft = $timeout - time();
} while (!feof($pipes[1]) && $timeleft > 0);
if ($timeleft <= 0) {
proc_terminate($process);
throw new Exception("command timeout on: " . $cmd);
} else {
return array('stdout'=>$output, 'stderr'=>$error);
}
} /* }}} */
/**
* Constructor. Creates our indexable document and adds all
* necessary fields to it using the passed in document
* @param SeedDMS_Core_DMS $dms
* @param SeedDMS_Core_Document|Folder $document
* @param null $convcmd
* @param bool $nocontent
* @param int $timeout
*/
public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { /* {{{ */
$this->errormsg = '';
$this->cmd = '';
$this->mimetype = '';
$this->addField(Zend_Search_Lucene_Field::Text('title', $document->getName(), 'utf-8'));
if($acllist = $document->getReadAccessList(1, 1, 1)) {
$allu = [];
foreach($acllist['users'] as $u)
$allu[] = $u->getLogin();
$this->addField(Zend_Search_Lucene_Field::Text('users', implode(' ', $allu), 'utf-8'));
/*
$allg = [];
foreach($acllist['groups'] as $g)
$allg[] = $g->getName();
$this->addField(Zend_Search_Lucene_Field::Text('groups', implode(' ', $allg), 'utf-8'));
*/
}
if($attributes = $document->getAttributes()) {
foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition();
if($attrdef->getValueSet() != '')
$this->addField(Zend_Search_Lucene_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue(), 'utf-8'));
else
$this->addField(Zend_Search_Lucene_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue(), 'utf-8'));
}
}
$owner = $document->getOwner();
$this->addField(Zend_Search_Lucene_Field::Text('owner', $owner->getLogin(), 'utf-8'));
if($comment = $document->getComment()) {
$this->addField(Zend_Search_Lucene_Field::Text('comment', $comment, 'utf-8'));
}
$tmp = explode(':', substr($document->getFolderList(), 1, -1));
foreach($tmp as $t)
$this->addField(Zend_Search_Lucene_Field::Keyword('path', $t));
// $this->addField(Zend_Search_Lucene_Field::Keyword('path', str_replace(':', 'x', $document->getFolderList())));
if($document->isType('document')) {
$this->addField(Zend_Search_Lucene_Field::Keyword('document_id', 'D'.$document->getID()));
$version = $document->getLatestContent();
if($version) {
$this->addField(Zend_Search_Lucene_Field::Keyword('mimetype', $version->getMimeType()));
$this->addField(Zend_Search_Lucene_Field::Keyword('origfilename', $version->getOriginalFileName(), 'utf-8'));
if(!$nocontent)
$this->addField(Zend_Search_Lucene_Field::UnIndexed('created', $version->getDate()));
if($attributes = $version->getAttributes()) {
foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition();
if($attrdef->getValueSet() != '')
$this->addField(Zend_Search_Lucene_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue(), 'utf-8'));
else
$this->addField(Zend_Search_Lucene_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue(), 'utf-8'));
}
}
}
if($categories = $document->getCategories()) {
$names = array();
foreach($categories as $cat) {
$names[] = $cat->getName();
}
$this->addField(Zend_Search_Lucene_Field::Text('category', implode(' ', $names), 'utf-8'));
}
if($keywords = $document->getKeywords()) {
$this->addField(Zend_Search_Lucene_Field::Text('keywords', $keywords, 'utf-8'));
}
if($version) {
$status = $version->getStatus();
$this->addField(Zend_Search_Lucene_Field::Keyword('status', $status['status'], 'utf-8'));
}
if($version && !$nocontent) {
$path = $dms->contentDir . $version->getPath();
if(file_exists($path)) {
$content = '';
$mimetype = $version->getMimeType();
$this->mimetype = $mimetype;
$cmd = '';
$mimeparts = explode('/', $mimetype, 2);
if(isset($convcmd[$mimetype])) {
$cmd = sprintf($convcmd[$mimetype], $path);
} elseif(isset($convcmd[$mimeparts[0].'/*'])) {
$cmd = sprintf($convcmd[$mimetype], $path);
} elseif(isset($convcmd['*'])) {
$cmd = sprintf($convcmd[$mimetype], $path);
}
if($cmd) {
$this->cmd = $cmd;
try {
$content = self::execWithTimeout($cmd, $timeout);
if($content['stdout']) {
$this->addField(Zend_Search_Lucene_Field::UnStored('content', $content['stdout'], 'utf-8'));
}
if($content['stderr']) {
$this->errormsg = $content['stderr'];
}
} catch (Exception $e) {
}
}
}
}
} elseif($document->isType('folder')) {
$this->addField(Zend_Search_Lucene_Field::Keyword('document_id', 'F'.$document->getID()));
$this->addField(Zend_Search_Lucene_Field::UnIndexed('created', $document->getDate()));
}
} /* }}} */
public function getErrorMsg() { /* {{{ */
return $this->errormsg;
} /* }}} */
public function getMimeType() { /* {{{ */
return $this->mimetype;
} /* }}} */
public function getCmd() { /* {{{ */
return $this->cmd;
} /* }}} */
}
?>

View File

@ -1,67 +0,0 @@
<?php
/**
* Implementation of lucene index
*
* @category DMS
* @package SeedDMS_Lucene
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing a lucene index.
*
* @category DMS
* @package SeedDMS_Lucene
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Lucene_Indexer {
/**
* @var string $indexname name of lucene index
* @access protected
*/
protected $indexname;
static function open($conf) { /* {{{ */
try {
$index = Zend_Search_Lucene::open($conf['indexdir']);
return($index);
} catch (Exception $e) {
return null;
}
} /* }}} */
static function create($conf) { /* {{{ */
try {
$index = Zend_Search_Lucene::create($conf['indexdir']);
return($index);
} catch (Exception $e) {
return null;
}
} /* }}} */
/**
* Do some initialization
*
*/
static function init($stopWordsFile='') { /* {{{ */
$analyzer = new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive();
if($stopWordsFile && file_exists($stopWordsFile)) {
$stopWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_StopWords();
$stopWordsFilter->loadFromFile($stopWordsFile);
$analyzer->addFilter($stopWordsFilter);
}
Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer);
} /* }}} */
}
?>

View File

@ -1,153 +0,0 @@
<?php
/**
* Implementation of search in lucene index
*
* @category DMS
* @package SeedDMS_Lucene
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for searching in a lucene index.
*
* @category DMS
* @package SeedDMS_Lucene
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Lucene_Search {
/**
* @var object $index lucene index
* @access protected
*/
protected $index;
/**
* Create a new instance of the search
*
* @param object $index lucene index
* @return object instance of SeedDMS_Lucene_Search
*/
function __construct($index) { /* {{{ */
$this->index = $index;
$this->version = '@package_version@';
if($this->version[0] == '@')
$this->version = '3.0.0';
} /* }}} */
/**
* Get document from index
*
* @param object $index lucene index
* @return object instance of SeedDMS_Lucene_Document of false
*/
function getDocument($id) { /* {{{ */
$hits = $this->index->find('document_id:D'.$id);
return $hits ? $hits[0] : false;
} /* }}} */
/**
* Get folder from index
*
* @param object $index lucene index
* @return object instance of SeedDMS_Lucene_Document of false
*/
function getFolder($id) { /* {{{ */
$hits = $this->index->find('document_id:F'.$id);
return $hits ? $hits[0] : false;
} /* }}} */
/**
* Search in index
*
* @param object $index lucene index
* @return object instance of SeedDMS_Lucene_Search
*/
function search($term, $fields=array(), $limit=array()) { /* {{{ */
$querystr = '';
$term = trim($term);
if($term) {
$querystr = substr($term, -1) != '*' ? $term.'*' : $term;
}
if(!empty($fields['owner'])) {
if(is_string($owner)) {
if($querystr)
$querystr .= ' && ';
$querystr .= 'owner:'.$owner;
} elseif(is_array($fields['owner'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(owner:"';
$querystr .= implode('" || owner:"', $fields['owner']);
$querystr .= '")';
}
}
if(!empty($fields['category'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(category:"';
$querystr .= implode('" || category:"', $fields['category']);
$querystr .= '")';
}
if(!empty($fields['status'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(status:"';
$querystr .= implode('" || status:"', $fields['status']);
$querystr .= '")';
}
if(!empty($fields['user'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(users:"';
$querystr .= implode('" || users:"', $fields['user']);
$querystr .= '")';
}
if(!empty($fields['rootFolder']) && $fields['rootFolder']->getFolderList()) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(path:"';
$tmp[] = $fields['rootFolder']->getID();
$querystr .= implode('" && path:"', $tmp);
//$querystr .= $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':';
$querystr .= '")';
}
if(!empty($fields['startFolder']) && $fields['startFolder']->getFolderList()) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(path:"';
// $querystr .= str_replace(':', 'x', $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':');
$tmp = array();//explode(':', substr($fields['startFolder']->getFolderList(), 1, -1));
$tmp[] = $fields['startFolder']->getID();
$querystr .= implode('" && path:"', $tmp);
// $querystr .= str_replace(':', ' ', $fields['startFolder']->getFolderList().$fields['startFolder']->getID());
$querystr .= '")';
}
try {
$query = Zend_Search_Lucene_Search_QueryParser::parse($querystr);
try {
$hits = $this->index->find($query);
$recs = array();
$c = 0;
foreach($hits as $hit) {
if($c >= $limit['offset'] && ($c-$limit['offset'] < $limit))
$recs[] = array('id'=>$hit->id, 'document_id'=>$hit->document_id);
$c++;
}
return array('count'=>count($hits), 'hits'=>$recs, 'facets'=>array());
} catch (Zend_Search_Lucene_Exception $e) {
return false;
}
} catch (Zend_Search_Lucene_Search_QueryParserException $e) {
return false;
}
} /* }}} */
}
?>

View File

@ -1,356 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.8.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
<name>SeedDMS_Lucene</name>
<channel>pear.php.net</channel>
<summary>Fulltext search for SeedDMS</summary>
<description>SeedDMS is a web based document management system (DMS). This is
the fulltext search engine for it, based on Lucene.</description>
<lead>
<name>Uwe Steinmann</name>
<user>steinm</user>
<email>uwe@steinmann.cx</email>
<active>yes</active>
</lead>
<date>2020-12-12</date>
<time>08:55:43</time>
<version>
<release>1.1.16</release>
<api>1.1.16</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- add indexing of folders
</notes>
<contents>
<dir baseinstalldir="SeedDMS" name="/">
<dir name="Lucene">
<file name="Indexer.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="Search.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="IndexedDocument.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
</dir> <!-- /Lucene -->
<dir name="tests">
</dir> <!-- /tests -->
<file name="Lucene.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
</dir> <!-- / -->
</contents>
<dependencies>
<required>
<php>
<min>4.3.0</min>
</php>
<pearinstaller>
<min>1.5.4</min>
</pearinstaller>
</required>
</dependencies>
<phprelease />
<changelog>
<release>
<version>
<release>0.0.1</release>
<api>0.0.1</api>
</version>
<stability>
<release>alpha</release>
<api>alpha</api>
</stability>
<date>2009-04-27</date>
<license uri="http://opensource.org/licenses/bsd-license">BSD License</license>
<notes>
</notes>
</release>
<release>
<date>2011-11-06</date>
<time>08:05:38</time>
<version>
<release>1.0.1</release>
<api>1.0.0</api>
</version>
<stability>
<release>beta</release>
<api>beta</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- New Release
</notes>
</release>
<release>
<date>2012-11-06</date>
<time>08:05:38</time>
<version>
<release>1.1.0</release>
<api>1.1.0</api>
</version>
<stability>
<release>beta</release>
<api>beta</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
use a configurable list of mime type converters, fixed indexing and searching
of special chars like german umlaute.
</notes>
</release>
<release>
<date>2012-12-03</date>
<time>10:31:23</time>
<version>
<release>1.1.1</release>
<api>1.1.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
catch exception if index is opened but not available
</notes>
</release>
<release>
<date>2013-06-17</date>
<time>10:31:23</time>
<version>
<release>1.1.2</release>
<api>1.1.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
parse query term and catch errors before using it
</notes>
</release>
<release>
<date>2013-06-27</date>
<time>15:12:50</time>
<version>
<release>1.1.3</release>
<api>1.1.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
explicitly set encoding to utf-8 when adding fields
do not check if deleting document from index fails, update it in any case
</notes>
</release>
<release>
<date>2013-08-13</date>
<time>21:56:55</time>
<version>
<release>1.1.4</release>
<api>1.1.4</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
class SeedDMS_Lucene_Search::search returns false if query is invalid instead of an empty result record
</notes>
</release>
<release>
<date>2014-07-30</date>
<time>09:00:34</time>
<version>
<release>1.1.5</release>
<api>1.1.5</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
field for original filename is treated as utf-8
declare SeeDMS_Lucene_Indexer::open() static
</notes>
</release>
<release>
<date>2015-08-05</date>
<time>21:13:13</time>
<version>
<release>1.1.6</release>
<api>1.1.6</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
run external commands with a timeout
</notes>
</release>
<release>
<date>2016-02-01</date>
<time>09:14:07</time>
<version>
<release>1.1.7</release>
<api>1.1.7</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add command for indexing postѕcript files
</notes>
</release>
<release>
<date>2016-03-29</date>
<time>08:11:19</time>
<version>
<release>1.1.8</release>
<api>1.1.7</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
set last parameter of stream_select() to 200000 micro sec. in case the timeout in sec. is set to 0
</notes>
</release>
<release>
<date>2016-04-28</date>
<time>08:11:19</time>
<version>
<release>1.1.9</release>
<api>1.1.7</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
pass variables to stream_select() to fullfill strict standards.
make all functions in Indexer.php static
</notes>
</release>
<release>
<date>2017-03-01</date>
<time>15:55:32</time>
<version>
<release>1.1.10</release>
<api>1.1.10</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
catch exception in execWithTimeout()
</notes>
</release>
<release>
<date>2017-12-04</date>
<time>10:58:13</time>
<version>
<release>1.1.11</release>
<api>1.1.11</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
allow conversion commands for mimetypes with wildcards
</notes>
</release>
<release>
<date>2018-01-30</date>
<time>10:58:13</time>
<version>
<release>1.1.12</release>
<api>1.1.12</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
execWithTimeout() reads data from stderr and saves it into error msg
</notes>
</release>
<release>
<date>2018-04-11</date>
<time>10:58:13</time>
<version>
<release>1.1.13</release>
<api>1.1.13</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
IndexedDocument() remembers cmd and mimetype
</notes>
</release>
<release>
<date>2020-09-02</date>
<time>08:55:43</time>
<version>
<release>1.1.14</release>
<api>1.1.14</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
Index users with at least read access on the document
</notes>
</release>
<release>
<date>2020-09-10</date>
<time>08:55:43</time>
<version>
<release>1.1.15</release>
<api>1.1.15</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- add searching for document status
- better error handling if opening index fails
- parameters for SeedDMS_Lucene_Search::search() has changed
- SeedDMS_Lucene_Search::search() returns array of hits, count and facets
- pass config array instead of index directory to SeedDMS_Lucene_Indexer::create()
and SeedDMS_Lucene_Indexer::open()
</notes>
</release>
</changelog>
</package>

View File

@ -1,34 +0,0 @@
<?php
// SeedDMS. Document Management System
// Copyright (C) 2011-2013 Uwe Steinmann
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
/**
* @uses Preview/Base.php
*/
require_once('Preview/Base.php');
/**
* @uses Preview/Previewer.php
*/
require_once('Preview/Previewer.php');
/**
* @uses Preview/PdfPreviewer.php
*/
require_once('Preview/PdfPreviewer.php');
?>

View File

@ -1,202 +0,0 @@
<?php
/**
* Implementation of preview base
*
* @category DMS
* @package SeedDMS_Preview
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing creation of preview images for documents.
*
* @category DMS
* @package SeedDMS_Preview
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Preview_Base {
/**
* @var string $cacheDir location in the file system where all the
* cached data like thumbnails are located. This should be an
* absolute path.
* @access public
*/
public $previewDir;
/**
* @var array $converters list of mimetypes and commands for converting
* file into preview image
* @access protected
*/
protected $converters;
/**
* @var integer $timeout maximum time for execution of external commands
* @access protected
*/
protected $timeout;
/**
* @var boolean $xsendfile set to true if mod_xѕendfile is to be used
* @access protected
*/
protected $xsendfile;
/**
* @var string $lastpreviewfile will be set to the file name of the last preview
* @access protected
*/
protected $lastpreviewfile;
function __construct($previewDir, $timeout=5, $xsendfile=true) { /* {{{ */
if(!is_dir($previewDir)) {
if (!SeedDMS_Core_File::makeDir($previewDir)) {
$this->previewDir = '';
} else {
$this->previewDir = $previewDir;
}
} else {
$this->previewDir = $previewDir;
}
$this->timeout = intval($timeout);
$this->converters = array();
$this->xsendfile = $xsendfile;
} /* }}} */
static function execWithTimeout($cmd, $timeout=5) { /* {{{ */
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$pipes = array();
$timeout += time();
// Putting an 'exec' before the command will not fork the command
// and therefore not create any child process. proc_terminate will
// then reliably terminate the cmd and not just shell. See notes of
// https://www.php.net/manual/de/function.proc-terminate.php
$process = proc_open('exec '.$cmd, $descriptorspec, $pipes);
if (!is_resource($process)) {
throw new Exception("proc_open failed on: " . $cmd);
}
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
$output = $error = '';
$timeleft = $timeout - time();
$read = array($pipes[1], $pipes[2]);
$write = NULL;
$exeptions = NULL;
do {
$num_changed_streams = stream_select($read, $write, $exeptions, $timeleft, 200000);
if ($num_changed_streams === false) {
proc_terminate($process);
throw new Exception("stream select failed on: " . $cmd);
} elseif ($num_changed_streams > 0) {
$output .= fread($pipes[1], 8192);
$error .= fread($pipes[2], 8192);
}
$timeleft = $timeout - time();
} while (!feof($pipes[1]) && $timeleft > 0);
if ($timeleft <= 0) {
proc_terminate($process);
throw new Exception("command timeout on: " . $cmd);
} else {
return array('stdout'=>$output, 'stderr'=>$error);
}
} /* }}} */
/**
* Set a list of converters
*
* Merges the list of passed converters with the already existing ones.
* Existing converters will be overwritten.
*
* @param array list of converters. The key of the array contains the mimetype
* and the value is the command to be called for creating the preview
*/
function setConverters($arr) { /* {{{ */
if(is_array($arr))
$this->converters = $arr;
else
$this->converters = array();
} /* }}} */
/**
* Enable/Disable xsendfile extension
*
* Merges the list of passed converters with the already existing ones.
* Existing converters will be overwritten.
*
* @param boolean $xsendfile turn on/off use of xsendfile module in apache
*/
function setXsendfile($xsendfile) { /* {{{ */
$this->xsendfile = $xsendfile;
} /* }}} */
/**
* Add a list of converters
*
* Merges the list of passed converters with the already existing ones.
* Existing converters will be overwritten.
*
* @param array list of converters. The key of the array contains the mimetype
* and the value is the command to be called for creating the preview
*/
function addConverters($arr) { /* {{{ */
$this->converters = array_merge($this->converters, $arr);
} /* }}} */
/**
* Check if converter for a given mimetype is set
*
* @param string $mimetype
* @return boolean true if converter exists, otherwise false
*/
function hasConverter($mimetype) { /* {{{ */
return array_key_exists($mimetype, $this->converters) && $this->converters[$mimetype];
} /* }}} */
/**
* Send a file from disk to the browser
*
* This function uses either readfile() or the xѕendfile apache module if
* it is installed.
*
* @param string $filename
*/
protected function sendFile($filename) { /* {{{ */
if($this->xsendfile && function_exists('apache_get_modules') && in_array('mod_xsendfile',apache_get_modules())) {
header("X-Sendfile: ".$filename);
} else {
$size = filesize($filename);
header("Content-Length: " . $size);
/* Make sure output buffering is off */
if (ob_get_level()) {
ob_end_clean();
}
readfile($filename);
}
} /* }}} */
/**
* Return path of last created preview file
*
* @return string
*/
public function getPreviewFile() { /* {{{ */
return $this->lastpreviewfile;
} /* }}} */
}

View File

@ -1,295 +0,0 @@
<?php
/**
* Implementation of pdf preview documents
*
* @category DMS
* @package SeedDMS_Preview
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing creation of pdf preview for documents.
*
* @category DMS
* @package SeedDMS_Preview
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Preview_PdfPreviewer extends SeedDMS_Preview_Base {
function __construct($previewDir, $timeout=5, $xsendfile=true) { /* {{{ */
parent::__construct($previewDir, $timeout, $xsendfile);
$this->converters = array(
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => "unoconv -d document -f pdf --stdout -v '%f' > '%o'",
'application/vnd.oasis.opendocument.text' => "unoconv -d document -f pdf --stdout -v '%f' > '%o'",
'text/rtf' => "unoconv -d document -f pdf --stdout -v '%f' > '%o'",
'application/msword' => "unoconv -d document -f pdf --stdout -v '%f' > '%o'",
'application/vnd.ms-excel' => "unoconv -d document -f pdf --stdout -v '%f' > '%o'",
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => "unoconv -d document -f pdf --stdout -v '%f' > '%o'",
'text/plain' => "unoconv -d document -f pdf --stdout -v '%f' > '%o'",
'application/postscript' => "ps2pdf '%f' - > '%o'",
'image/jpeg' => "convert '%f' pdf:- > '%o'",
'image/png' => "convert '%f' pdf:- > '%o'",
'image/gif' => "convert '%f' pdf:- > '%o'",
'video/mp4' => "convert '%f[1-20]' pdf:- > '%o'",
);
} /* }}} */
/**
* Return the physical filename of the preview image on disk
*
* @param object $object document content or document file
* @return string file name of preview image
*/
protected function getFileName($object) { /* {{{ */
if(!$object)
return false;
$document = $object->getDocument();
$dms = $document->_dms;
$dir = $this->previewDir.'/'.$document->getDir();
switch(get_class($object)) {
case $dms->getClassname('documentcontent'):
$target = $dir.'p'.$object->getVersion();
break;
case "SeedDMS_Core_DocumentFile":
$target = $dir.'f'.$object->getID();
break;
default:
return false;
}
return $target;
} /* }}} */
/**
* Create a pdf preview for a given file
*
* This method creates a preview in pdf format for a regular file
* in the file system and stores the result in the directory $dir relative
* to the configured preview directory. The filename of the resulting preview
* image is either $target.pdf (if set) or md5($infile).pdf.
* The $mimetype is used to select the propper conversion programm.
* An already existing pdf preview is replaced.
*
* @param string $infile name of input file including full path
* @param string $dir directory relative to $this->previewDir
* @param string $mimetype MimeType of input file
* @param string $target optional name of preview image (without extension)
* @return boolean true on success, false on failure
*/
public function createRawPreview($infile, $dir, $mimetype, $target='') { /* {{{ */
if(!$this->previewDir)
return false;
if(!is_dir($this->previewDir.'/'.$dir)) {
if (!SeedDMS_Core_File::makeDir($this->previewDir.'/'.$dir)) {
return false;
}
}
if(!file_exists($infile))
return false;
if(!$target)
$target = $this->previewDir.$dir.md5($infile);
$this->lastpreviewfile = $target.'.pdf';
if($target != '' && (!file_exists($target.'.pdf') || filectime($target.'.pdf') < filectime($infile))) {
$cmd = '';
$mimeparts = explode('/', $mimetype, 2);
if(isset($this->converters[$mimetype])) {
$cmd = str_replace(array('%f', '%o', '%m'), array($infile, $target.'.pdf', $mimetype), $this->converters[$mimetype]);
} elseif(isset($this->converters[$mimeparts[0].'/*'])) {
$cmd = str_replace(array('%f', '%o', '%m'), array($infile, $target.'.pdf', $mimetype), $this->converters[$mimeparts[0].'/*']);
} elseif(isset($this->converters['*'])) {
$cmd = str_replace(array('%f', '%o', '%m'), array($infile, $target.'.pdf', $mimetype), $this->converters['*']);
}
if($cmd) {
try {
self::execWithTimeout($cmd, $this->timeout);
} catch(Exception $e) {
$this->lastpreviewfile = '';
return false;
}
}
return true;
}
return true;
} /* }}} */
/**
* Create preview image
*
* This function creates a preview image for the given document
* content or document file. It internally uses
* {@link SeedDMS_Preview::createRawPreview()}. The filename of the
* preview image is created by {@link SeedDMS_Preview_Previewer::getFileName()}
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @return boolean true on success, false on failure
*/
public function createPreview($object) { /* {{{ */
if(!$object)
return false;
$document = $object->getDocument();
$file = $document->_dms->contentDir.$object->getPath();
$target = $this->getFileName($object);
return $this->createRawPreview($file, $document->getDir(), $object->getMimeType(), $target);
} /* }}} */
/**
* Check if a preview image already exists.
*
* This function is a companion to {@link SeedDMS_Preview_Previewer::createRawPreview()}.
*
* @param string $infile name of input file including full path
* @param string $dir directory relative to $this->previewDir
* @return boolean true if preview exists, otherwise false
*/
public function hasRawPreview($infile, $dir, $target='') { /* {{{ */
if(!$this->previewDir)
return false;
if(!$target)
$target = $this->previewDir.$dir.md5($infile);
if($target !== false && file_exists($target.'.pdf') && filectime($target.'.pdf') >= filectime($infile)) {
return true;
}
return false;
} /* }}} */
/**
* Check if a preview image already exists.
*
* This function is a companion to {@link SeedDMS_Preview_Previewer::createPreview()}.
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @return boolean true if preview exists, otherwise false
*/
public function hasPreview($object) { /* {{{ */
if(!$object)
return false;
if(!$this->previewDir)
return false;
$target = $this->getFileName($object);
if($target !== false && file_exists($target.'.pdf') && filectime($target.'.pdf') >= $object->getDate()) {
return true;
}
return false;
} /* }}} */
/**
* Return a preview image.
*
* This function returns the content of a preview image if it exists..
*
* @param string $infile name of input file including full path
* @param string $dir directory relative to $this->previewDir
* @return boolean/string image content if preview exists, otherwise false
*/
public function getRawPreview($infile, $dir, $target='') { /* {{{ */
if(!$this->previewDir)
return false;
if(!$target)
$target = $this->previewDir.$dir.md5($infile);
if($target && file_exists($target.'.pdf')) {
$this->sendFile($target.'.pdf');
}
} /* }}} */
/**
* Return a preview image.
*
* This function returns the content of a preview image if it exists..
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @return boolean/string image content if preview exists, otherwise false
*/
public function getPreview($object) { /* {{{ */
if(!$this->previewDir)
return false;
$target = $this->getFileName($object);
if($target && file_exists($target.'.pdf')) {
$this->sendFile($target.'.pdf');
}
} /* }}} */
/**
* Return file size preview image.
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @return boolean/integer size of preview image or false if image
* does not exist
*/
public function getFilesize($object) { /* {{{ */
$target = $this->getFileName($object);
if($target && file_exists($target.'.pdf')) {
return(filesize($target.'.pdf'));
} else {
return false;
}
} /* }}} */
/**
* Delete preview image.
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @return boolean true if deletion succeded or false if file does not exist
*/
public function deletePreview($object) { /* {{{ */
if(!$this->previewDir)
return false;
$target = $this->getFileName($object);
if($target && file_exists($target.'.pdf')) {
return(unlink($target.'.pdf'));
} else {
return false;
}
} /* }}} */
static function recurseRmdir($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? SeedDMS_Preview_Previewer::recurseRmdir("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}
/**
* Delete all preview images belonging to a document
*
* This function removes the preview images of all versions and
* files of a document including the directory. It actually just
* removes the directory for the document in the cache.
*
* @param object $document instance of SeedDMS_Core_Document
* @return boolean true if deletion succeded or false if file does not exist
*/
public function deleteDocumentPreviews($document) { /* {{{ */
if(!$this->previewDir)
return false;
$dir = $this->previewDir.'/'.$document->getDir();
if(file_exists($dir) && is_dir($dir)) {
return SeedDMS_Preview_Previewer::recurseRmdir($dir);
} else {
return false;
}
} /* }}} */
}
?>

View File

@ -1,338 +0,0 @@
<?php
/**
* Implementation of preview documents
*
* @category DMS
* @package SeedDMS_Preview
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing creation of preview images for documents.
*
* @category DMS
* @package SeedDMS_Preview
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Preview_Previewer extends SeedDMS_Preview_Base {
/**
* @var integer $width maximum width/height of resized image
* @access protected
*/
protected $width;
function __construct($previewDir, $width=40, $timeout=5, $xsendfile=true) { /* {{{ */
parent::__construct($previewDir, $timeout, $xsendfile);
$this->converters = array(
'image/png' => "convert -resize %wx '%f' '%o'",
'image/gif' => "convert -resize %wx '%f' '%o'",
'image/jpg' => "convert -resize %wx '%f' '%o'",
'image/jpeg' => "convert -resize %wx '%f' '%o'",
'image/svg+xml' => "convert -resize %wx '%f' '%o'",
'text/plain' => "convert -resize %wx '%f' '%o'",
'application/pdf' => "convert -density 100 -resize %wx '%f[0]' '%o'",
'application/postscript' => "convert -density 100 -resize %wx '%f[0]' '%o'",
'application/x-compressed-tar' => "tar tzvf '%f' | convert -density 100 -resize %wx text:-[0] '%o'",
);
$this->width = intval($width);
} /* }}} */
/**
* Return the physical filename of the preview image on disk
*
* @param object $object document content or document file
* @param integer $width width of preview image
* @return string file name of preview image
*/
public function getFileName($object, $width) { /* {{{ */
if(!$object)
return false;
$document = $object->getDocument();
$dms = $document->_dms;
$dir = $this->previewDir.'/'.$document->getDir();
switch(get_class($object)) {
case $dms->getClassname('documentcontent'):
$target = $dir.'p'.$object->getVersion().'-'.$width;
break;
case "SeedDMS_Core_DocumentFile":
$target = $dir.'f'.$object->getID().'-'.$width;
break;
default:
return false;
}
return $target;
} /* }}} */
/**
* Create a preview image for a given file
*
* This method creates a preview image in png format for a regular file
* in the file system and stores the result in the directory $dir relative
* to the configured preview directory. The filename of the resulting preview
* image is either $target.png (if set) or md5($infile)-$width.png.
* The $mimetype is used to select the propper conversion programm.
* An already existing preview image is replaced.
*
* @param string $infile name of input file including full path
* @param string $dir directory relative to $this->previewDir
* @param string $mimetype MimeType of input file
* @param integer $width width of generated preview image
* @param string $target optional name of preview image (without extension)
* @return boolean true on success, false on failure
*/
public function createRawPreview($infile, $dir, $mimetype, $width=0, $target='') { /* {{{ */
if($width == 0)
$width = $this->width;
else
$width = intval($width);
if(!$this->previewDir)
return false;
if(!is_dir($this->previewDir.'/'.$dir)) {
if (!SeedDMS_Core_File::makeDir($this->previewDir.'/'.$dir)) {
return false;
}
}
if(!file_exists($infile))
return false;
if(!$target)
$target = $this->previewDir.$dir.md5($infile).'-'.$width;
$this->lastpreviewfile = $target.'.png';
if($target != '' && (!file_exists($target.'.png') || filectime($target.'.png') < filectime($infile))) {
$cmd = '';
$mimeparts = explode('/', $mimetype, 2);
if(isset($this->converters[$mimetype])) {
$cmd = str_replace(array('%w', '%f', '%o', '%m'), array($width, $infile, $target.'.png', $mimetype), $this->converters[$mimetype]);
} elseif(isset($this->converters[$mimeparts[0].'/*'])) {
$cmd = str_replace(array('%w', '%f', '%o', '%m'), array($width, $infile, $target.'.png', $mimetype), $this->converters[$mimeparts[0].'/*']);
} elseif(isset($this->converters['*'])) {
$cmd = str_replace(array('%w', '%f', '%o', '%m'), array($width, $infile, $target.'.png', $mimetype), $this->converters['*']);
}
if($cmd) {
try {
self::execWithTimeout($cmd, $this->timeout);
} catch(Exception $e) {
$this->lastpreviewfile = '';
return false;
}
}
return true;
}
return true;
} /* }}} */
/**
* Create preview image
*
* This function creates a preview image for the given document
* content or document file. It internally uses
* {@link SeedDMS_Preview::createRawPreview()}. The filename of the
* preview image is created by {@link SeedDMS_Preview_Previewer::getFileName()}
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @param integer $width desired width of preview image
* @return boolean true on success, false on failure
*/
public function createPreview($object, $width=0) { /* {{{ */
if(!$object)
return false;
if($width == 0)
$width = $this->width;
else
$width = intval($width);
$document = $object->getDocument();
$file = $document->_dms->contentDir.$object->getPath();
$target = $this->getFileName($object, $width);
return $this->createRawPreview($file, $document->getDir(), $object->getMimeType(), $width, $target);
} /* }}} */
/**
* Check if a preview image already exists.
*
* This function is a companion to {@link SeedDMS_Preview_Previewer::createRawPreview()}.
*
* @param string $infile name of input file including full path
* @param string $dir directory relative to $this->previewDir
* @param integer $width desired width of preview image
* @return boolean true if preview exists, otherwise false
*/
public function hasRawPreview($infile, $dir, $width=0) { /* {{{ */
if($width == 0)
$width = $this->width;
else
$width = intval($width);
if(!$this->previewDir)
return false;
$target = $this->previewDir.$dir.md5($infile).'-'.$width;
if($target !== false && file_exists($target.'.png') && filectime($target.'.png') >= filectime($infile)) {
return true;
}
return false;
} /* }}} */
/**
* Check if a preview image already exists.
*
* This function is a companion to {@link SeedDMS_Preview_Previewer::createPreview()}.
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @param integer $width desired width of preview image
* @return boolean true if preview exists, otherwise false
*/
public function hasPreview($object, $width=0) { /* {{{ */
if(!$object)
return false;
if($width == 0)
$width = $this->width;
else
$width = intval($width);
if(!$this->previewDir)
return false;
$target = $this->getFileName($object, $width);
if($target !== false && file_exists($target.'.png') && filectime($target.'.png') >= $object->getDate()) {
return true;
}
return false;
} /* }}} */
/**
* Return a preview image.
*
* This function returns the content of a preview image if it exists..
*
* @param string $infile name of input file including full path
* @param string $dir directory relative to $this->previewDir
* @param integer $width desired width of preview image
* @return boolean/string image content if preview exists, otherwise false
*/
public function getRawPreview($infile, $dir, $width=0) { /* {{{ */
if($width == 0)
$width = $this->width;
else
$width = intval($width);
if(!$this->previewDir)
return false;
$target = $this->previewDir.$dir.md5($infile).'-'.$width;
if($target && file_exists($target.'.png')) {
$this->sendFile($target.'.png');
}
} /* }}} */
/**
* Return a preview image.
*
* This function returns the content of a preview image if it exists..
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @param integer $width desired width of preview image
* @return boolean/string image content if preview exists, otherwise false
*/
public function getPreview($object, $width=0) { /* {{{ */
if($width == 0)
$width = $this->width;
else
$width = intval($width);
if(!$this->previewDir)
return false;
$target = $this->getFileName($object, $width);
if($target && file_exists($target.'.png')) {
$this->sendFile($target.'.png');
}
} /* }}} */
/**
* Return file size preview image.
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @param integer $width desired width of preview image
* @return boolean/integer size of preview image or false if image
* does not exist
*/
public function getFilesize($object, $width=0) { /* {{{ */
if($width == 0)
$width = $this->width;
else
$width = intval($width);
$target = $this->getFileName($object, $width);
if($target && file_exists($target.'.png')) {
return(filesize($target.'.png'));
} else {
return false;
}
} /* }}} */
/**
* Delete preview image.
*
* @param object $object instance of SeedDMS_Core_DocumentContent
* or SeedDMS_Core_DocumentFile
* @param integer $width desired width of preview image
* @return boolean true if deletion succeded or false if file does not exist
*/
public function deletePreview($object, $width=0) { /* {{{ */
if($width == 0)
$width = $this->width;
else
$width = intval($width);
if(!$this->previewDir)
return false;
$target = $this->getFileName($object, $width);
if($target && file_exists($target.'.png')) {
return(unlink($target.'.png'));
} else {
return false;
}
} /* }}} */
static function recurseRmdir($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? SeedDMS_Preview_Previewer::recurseRmdir("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}
/**
* Delete all preview images belonging to a document
*
* This function removes the preview images of all versions and
* files of a document including the directory. It actually just
* removes the directory for the document in the cache.
*
* @param object $document instance of SeedDMS_Core_Document
* @return boolean true if deletion succeded or false if file does not exist
*/
public function deleteDocumentPreviews($document) { /* {{{ */
if(!$this->previewDir)
return false;
$dir = $this->previewDir.'/'.$document->getDir();
if(file_exists($dir) && is_dir($dir)) {
return SeedDMS_Preview_Previewer::recurseRmdir($dir);
} else {
return false;
}
} /* }}} */
}
?>

View File

@ -1,457 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.8.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
<name>SeedDMS_Preview</name>
<channel>pear.php.net</channel>
<summary>Create thumbnails from document content for SeedDMS</summary>
<description>SeedDMS is a web based document management system (DMS). These
are the classes to create preview images and pdf file from the document content.</description>
<lead>
<name>Uwe Steinmann</name>
<user>steinm</user>
<email>uwe@steinmann.cx</email>
<active>yes</active>
</lead>
<date>2020-12-23</date>
<time>09:49:39</time>
<version>
<release>1.3.2</release>
<api>1.3.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
set header Content-Length
update package description
</notes>
<contents>
<dir baseinstalldir="SeedDMS" name="/">
<dir name="Preview">
<file name="Base.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="Previewer.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="PdfPreviewer.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
</dir> <!-- /Lucene -->
<dir name="tests">
</dir> <!-- /tests -->
<file name="Preview.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
</dir> <!-- / -->
</contents>
<dependencies>
<required>
<php>
<min>4.3.0</min>
</php>
<pearinstaller>
<min>1.5.4</min>
</pearinstaller>
</required>
</dependencies>
<phprelease />
<changelog>
<release>
<date>2012-11-20</date>
<time>08:05:38</time>
<version>
<release>1.0.0</release>
<api>1.0.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
initial version
</notes>
</release>
<release>
<date>2013-04-29</date>
<time>19:34:07</time>
<version>
<release>1.1.0</release>
<api>1.1.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
preview image can also be created from a document file (SeedDMS_Core_DocumentFile)
</notes>
</release>
<release>
<date>2014-03-18</date>
<time>16:34:59</time>
<version>
<release>1.1.1</release>
<api>1.1.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add converters for .tar.gz, .ps, .txt
</notes>
</release>
<release>
<date>2014-04-10</date>
<time>20:29:39</time>
<version>
<release>1.1.2</release>
<api>1.1.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
create fixed width image with proportional height
</notes>
</release>
<release>
<date>2015-02-13</date>
<time>20:29:39</time>
<version>
<release>1.1.3</release>
<api>1.1.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
preview images will also be recreated if the object this image belongs is of newer date than the image itself. This happens if versions are being deleted and than a new version is uploaded. Because the new version will get the version number of the old version, it will also take over the old preview image.Comparing the creation date of the image with the object detects this case.
</notes>
</release>
<release>
<date>2015-08-08</date>
<time>09:36:57</time>
<version>
<release>1.1.4</release>
<api>1.1.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
command for creating the preview will be called with a given timeout
</notes>
</release>
<release>
<date>2016-02-11</date>
<time>09:36:57</time>
<version>
<release>1.1.5</release>
<api>1.1.5</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add method getFilesize()
timeout for external commands can be passed to contructor of SeedDMS_Preview_Previewer
</notes>
</release>
<release>
<date>2016-03-08</date>
<time>09:36:57</time>
<version>
<release>1.1.6</release>
<api>1.1.6</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
check if object passed to createPreview(), hasPreview() is not null
</notes>
</release>
<release>
<date>2016-03-29</date>
<time>08:07:14</time>
<version>
<release>1.1.7</release>
<api>1.1.7</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
set last parameter of stream_select() to 200000 micro sec. in case the timeout in sec. is set to 0
</notes>
</release>
<release>
<date>2016-04-05</date>
<time>15:17:11</time>
<version>
<release>1.1.8</release>
<api>1.1.8</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
pass variables to stream_select (required by php7)
</notes>
</release>
<release>
<date>2016-04-26</date>
<time>15:17:11</time>
<version>
<release>1.1.9</release>
<api>1.1.9</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add more documentation
finish deletePreview()
add new method deleteDocumentPreviews()
fix calculation of timeout (Bug #269)
check if cache dir exists before deleting it in deleteDocumentPreviews()
</notes>
</release>
<release>
<date>2016-11-07</date>
<time>15:17:11</time>
<version>
<release>1.2.0</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add new previewer which converts document to pdf instead of png
</notes>
</release>
<release>
<date>2016-11-15</date>
<time>21:00:26</time>
<version>
<release>1.2.1</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
setConverters() overrides exiting converters
</notes>
</release>
<release>
<date>2017-03-02</date>
<time>07:14:59</time>
<version>
<release>1.2.2</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
commands can be set for mimetypes 'xxxx/*' and '*'
pass mimetype as parameter '%m' to converter
</notes>
</release>
<release>
<date>2017-09-18</date>
<time>07:14:32</time>
<version>
<release>1.2.3</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
createPreview() returns false if running the converter command fails
</notes>
</release>
<release>
<date>2017-10-11</date>
<time>07:14:32</time>
<version>
<release>1.2.4</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
fix typo in converter for tar.gz files
</notes>
</release>
<release>
<date>2017-10-11</date>
<time>07:14:32</time>
<version>
<release>1.2.5</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
SeedDMS_Preview_Base::hasConverter() returns only try if command is set
</notes>
</release>
<release>
<date>2017-12-04</date>
<time>10:59:39</time>
<version>
<release>1.2.6</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
SeedDMS_Preview_Base::setConverters() overrides existing converters.
New method SeedDMS_Preview_Base::addConverters() merges new converters with old ones.
</notes>
</release>
<release>
<date>2018-01-18</date>
<time>10:59:39</time>
<version>
<release>1.2.7</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add SeedDMS_Preview_Base::sendFile() as a replacement for readfile() which uses
mod_xsendfile if available
execWithTimeout() reads data from stderr and returns it together with stdout in array
</notes>
</release>
<release>
<date>2018-03-08</date>
<time>10:59:39</time>
<version>
<release>1.2.8</release>
<api>1.2.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
preview is also created if SeedDMS_Core_DocumentContent has a child class
</notes>
</release>
<release>
<date>2018-07-13</date>
<time>10:59:39</time>
<version>
<release>1.2.9</release>
<api>1.2.9</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
make sure list of converters is always an array
usage of mod_sendfile can be configured
</notes>
</release>
<release>
<date>2019-02-11</date>
<time>10:59:39</time>
<version>
<release>1.2.10</release>
<api>1.2.10</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
new parameter for enabling/disabling xsendfile
fix creation of pdf preview if document content class is not SeedDMS_Core_DocumentContent
</notes>
</release>
<release>
<date>2020-02-17</date>
<time>09:49:39</time>
<version>
<release>1.3.0</release>
<api>1.3.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add new methode getPreviewFile()
</notes>
</release>
<release>
<date>2020-03-21</date>
<time>09:49:39</time>
<version>
<release>1.3.1</release>
<api>1.3.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add parameter $target to SeedDMS_Preview_pdfPreviewer::hasRawPreview() and SeedDMS_Preview_pdfPreviewer::getRawPreview()
</notes>
</release>
</changelog>
</package>

View File

@ -1,44 +0,0 @@
<?php
// SeedDMS. Document Management System
// Copyright (C) 2011-2015 Uwe Steinmann
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
/**
* @uses SeedDMS_SQLiteFTS_Indexer
*/
require_once('SQLiteFTS/Indexer.php');
/**
* @uses SeedDMS_SQLiteFTS_Search
*/
require_once('SQLiteFTS/Search.php');
/**
* @uses SeedDMS_SQLiteFTS_Term
*/
require_once('SQLiteFTS/Term.php');
/**
* @uses SeedDMS_SQLiteFTS_QueryHit
*/
require_once('SQLiteFTS/QueryHit.php');
/**
* @uses SeedDMS_SQLiteFTS_IndexedDocument
*/
require_once('SQLiteFTS/IndexedDocument.php');
?>

View File

@ -1,66 +0,0 @@
<?php
/**
* Implementation of a document
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing a document.
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_SQLiteFTS_Document {
/**
* @var integer $id id of document
* @access protected
*/
public $id;
/**
* @var array $fields fields
* @access protected
*/
protected $fields;
public function __get($key) { /* {{{ */
if(isset($this->fields[$key]))
return $this->fields[$key];
else
return false;
} /* }}} */
public function addField($key, $value) { /* {{{ */
//if($key == 'document_id') {
if($key == 'docid') {
$this->id = $this->fields[$key] = (int) $value;
} else {
if(isset($this->fields[$key]))
$this->fields[$key] .= ' '.$value;
else
$this->fields[$key] = $value;
}
} /* }}} */
public function getFieldValue($key) { /* {{{ */
if(isset($this->fields[$key]))
return $this->fields[$key];
else
return false;
} /* }}} */
}
?>

View File

@ -1,206 +0,0 @@
<?php
/**
* Implementation of an indexed document
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* @uses SeedDMS_SQLiteFTS_Document
*/
require_once('Document.php');
/**
* Class for managing an indexed document.
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document {
/**
* @var string
*/
protected $errormsg;
/**
* @var string
*/
protected $mimetype;
/**
* @var string
*/
protected $cmd;
static function execWithTimeout($cmd, $timeout=2) { /* {{{ */
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$pipes = array();
$timeout += time();
$process = proc_open($cmd, $descriptorspec, $pipes);
if (!is_resource($process)) {
throw new Exception("proc_open failed on: " . $cmd);
}
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
$output = $error = '';
$timeleft = $timeout - time();
$read = array($pipes[1], $pipes[2]);
$write = NULL;
$exeptions = NULL;
do {
$num_changed_streams = stream_select($read, $write, $exeptions, $timeleft, 200000);
if ($num_changed_streams === false) {
proc_terminate($process);
throw new Exception("stream select failed on: " . $cmd);
} elseif ($num_changed_streams > 0) {
$output .= fread($pipes[1], 8192);
$error .= fread($pipes[2], 8192);
}
$timeleft = $timeout - time();
} while (!feof($pipes[1]) && $timeleft > 0);
if ($timeleft <= 0) {
proc_terminate($process);
throw new Exception("command timeout on: " . $cmd);
} else {
return array('stdout'=>$output, 'stderr'=>$error);
}
} /* }}} */
/**
* Constructor. Creates our indexable document and adds all
* necessary fields to it using the passed in document
*/
public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { /* {{{ */
$this->errormsg = '';
$this->cmd = '';
$this->mimetype = '';
$this->addField('title', $document->getName());
if($acllist = $document->getReadAccessList(1, 1, 1)) {
$allu = [];
foreach($acllist['users'] as $u)
$allu[] = $u->getLogin();
$this->addField('users', implode(' ', $allu));
/*
$allg = [];
foreach($acllist['groups'] as $g)
$allg[] = $g->getName();
$this->addField('groups', implode(' ', $allg));
*/
}
if($attributes = $document->getAttributes()) {
foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition();
if($attrdef->getValueSet() != '')
$this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue());
else
$this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue());
}
}
$owner = $document->getOwner();
$this->addField('owner', $owner->getLogin());
$this->addField('path', str_replace(':', 'x', $document->getFolderList()));
if($comment = $document->getComment()) {
$this->addField('comment', $comment);
}
if($document->isType('document')) {
$this->addField('document_id', 'D'.$document->getID());
$version = $document->getLatestContent();
if($version) {
$this->addField('mimetype', $version->getMimeType());
$this->addField('origfilename', $version->getOriginalFileName());
if(!$nocontent)
$this->addField('created', $version->getDate(), 'unindexed');
if($attributes = $version->getAttributes()) {
foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition();
if($attrdef->getValueSet() != '')
$this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue());
else
$this->addField('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue());
}
}
}
if($categories = $document->getCategories()) {
$names = array();
foreach($categories as $cat) {
$names[] = $cat->getName();
}
$this->addField('category', implode(' ', $names));
}
if($keywords = $document->getKeywords()) {
$this->addField('keywords', $keywords);
}
if($version) {
$status = $version->getStatus();
$this->addField('status', $status['status']+10);
}
if($version && !$nocontent) {
$path = $dms->contentDir . $version->getPath();
if(file_exists($path)) {
$content = '';
$mimetype = $version->getMimeType();
$this->mimetype = $mimetype;
$cmd = '';
$mimeparts = explode('/', $mimetype, 2);
if(isset($convcmd[$mimetype])) {
$cmd = sprintf($convcmd[$mimetype], $path);
} elseif(isset($convcmd[$mimeparts[0].'/*'])) {
$cmd = sprintf($convcmd[$mimetype], $path);
} elseif(isset($convcmd['*'])) {
$cmd = sprintf($convcmd[$mimetype], $path);
}
if($cmd) {
$this->cmd = $cmd;
try {
$content = self::execWithTimeout($cmd, $timeout);
if($content['stdout']) {
$this->addField('content', $content['stdout'], 'unstored');
}
if($content['stderr']) {
$this->errormsg = $content['stderr'];
}
} catch (Exception $e) {
}
}
}
}
} elseif($document->isType('folder')) {
$this->addField('document_id', 'F'.$document->getID());
}
} /* }}} */
public function getErrorMsg() { /* {{{ */
return $this->errormsg;
} /* }}} */
public function getMimeType() { /* {{{ */
return $this->mimetype;
} /* }}} */
public function getCmd() { /* {{{ */
return $this->cmd;
} /* }}} */
}
?>

View File

@ -1,309 +0,0 @@
<?php
/**
* Implementation of SQLiteFTS index
*
* @category DMS
* @package SeedDMS_Lucene
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing a SQLiteFTS index.
*
* @category DMS
* @package SeedDMS_Lucene
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_SQLiteFTS_Indexer {
/**
* @var object $index sqlite index
* @access protected
*/
protected $_conn;
/**
* Constructor
*
*/
function __construct($indexerDir) { /* {{{ */
$this->_conn = new PDO('sqlite:'.$indexerDir.'/index.db');
} /* }}} */
/**
* Open an existing index
*
* @param string $indexerDir directory on disk containing the index
*/
static function open($conf) { /* {{{ */
if(file_exists($conf['indexdir'].'/index.db')) {
return new SeedDMS_SQLiteFTS_Indexer($conf['indexdir']);
} else
return self::create($conf);
} /* }}} */
/**
* Create a new index
*
* @param array $conf $conf['indexdir'] is the directory on disk containing the index
*/
static function create($conf) { /* {{{ */
if(file_exists($conf['indexdir'].'/index.db'))
unlink($conf['indexdir'].'/index.db');
$index = new SeedDMS_SQLiteFTS_Indexer($conf['indexdir']);
/* Make sure the sequence of fields is identical to the field list
* in SeedDMS_SQLiteFTS_Term
*/
$version = SQLite3::version();
if($version['versionNumber'] >= 3008000)
$sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, title, comment, keywords, category, mimetype, origfilename, owner, content, created, users, status, path, notindexed=created, matchinfo=fts3)';
else
$sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, title, comment, keywords, category, mimetype, origfilename, owner, content, created, users, status, path, matchinfo=fts3)';
$res = $index->_conn->exec($sql);
if($res === false) {
return null;
}
$sql = 'CREATE VIRTUAL TABLE docs_terms USING fts4aux(docs);';
$res = $index->_conn->exec($sql);
if($res === false) {
return null;
}
return($index);
} /* }}} */
/**
* Do some initialization
*
*/
static function init($stopWordsFile='') { /* {{{ */
} /* }}} */
/**
* Add document to index
*
* @param object $doc indexed document of class
* SeedDMS_SQLiteFTS_IndexedDocument
* @return boolean false in case of an error, otherwise true
*/
function addDocument($doc) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "INSERT INTO docs (documentid, title, comment, keywords, category, owner, content, mimetype, origfilename, created, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($doc->getFieldValue('comment')).", ".$this->_conn->quote($doc->getFieldValue('keywords')).", ".$this->_conn->quote($doc->getFieldValue('category')).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($doc->getFieldValue('content')).", ".$this->_conn->quote($doc->getFieldValue('mimetype')).", ".$this->_conn->quote($doc->getFieldValue('origfilename')).", ".(int)$doc->getFieldValue('created').", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($doc->getFieldValue('status')).", ".$this->_conn->quote($doc->getFieldValue('path'))/*time()*/.")";
$res = $this->_conn->exec($sql);
if($res === false) {
return false;
var_dump($this->_conn->errorInfo());
}
return $res;
} /* }}} */
/**
* Remove document from index
*
* @param object $doc indexed document of class
* SeedDMS_SQLiteFTS_IndexedDocument
* @return boolean false in case of an error, otherwise true
*/
public function delete($id) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "DELETE FROM docs WHERE docid=".(int) $id;
$res = $this->_conn->exec($sql);
return $res;
} /* }}} */
/**
* Check if document was deleted
*
* Just for compatibility with lucene.
*
* @return boolean always false
*/
public function isDeleted($id) { /* {{{ */
return false;
} /* }}} */
/**
* Find documents in index
*
* @param string $query
* @param array $limit array with elements 'limit' and 'offset'
* @return boolean false in case of an error, otherwise array with elements
* 'count', 'hits', 'facets'
*/
public function find($query, $limit=array()) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "SELECT count(*) AS `c` FROM `docs`";
if($query)
$sql .= " WHERE docs MATCH ".$this->_conn->quote($query);
$res = $this->_conn->query($sql);
$row = $res->fetch();
$sql = "SELECT docid, documentid FROM docs";
if($query)
$sql .= " WHERE docs MATCH ".$this->_conn->quote($query);
$res = $this->_conn->query($sql);
if(!empty($limit['limit']))
$sql .= " LIMIT ".(int) $limit['limit'];
if(!empty($limit['offset']))
$sql .= " OFFSET ".(int) $limit['offset'];
$res = $this->_conn->query($sql);
$hits = array();
if($res) {
foreach($res as $rec) {
$hit = new SeedDMS_SQLiteFTS_QueryHit($this);
$hit->id = $rec['docid'];
$hit->documentid = $rec['documentid'];
$hits[] = $hit;
}
}
return array('count'=>$row['c'], 'hits'=>$hits);
} /* }}} */
/**
* Get a single document from index
*
* @param integer $id id of document
* @return boolean false in case of an error, otherwise true
*/
public function findById($id) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "SELECT docid FROM docs WHERE docid=".(int) $id;
$res = $this->_conn->query($sql);
$hits = array();
if($res) {
while($rec = $res->fetch(PDO::FETCH_ASSOC)) {
$hit = new SeedDMS_SQLiteFTS_QueryHit($this);
$hit->id = $rec['docid'];
$hits[] = $hit;
}
}
return $hits;
} /* }}} */
/**
* Get a single document from index
*
* @param integer $id id of index record
* @return boolean false in case of an error, otherwise true
*/
public function getDocument($id) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "SELECT docid, documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, users, status, path FROM docs WHERE docid=".$id;
$res = $this->_conn->query($sql);
$doc = false;
if($res) {
$rec = $res->fetch(PDO::FETCH_ASSOC);
$doc = new SeedDMS_SQLiteFTS_Document();
$doc->addField('docid', $rec['docid']);
$doc->addField('document_id', $rec['documentid']);
$doc->addField('title', $rec['title']);
$doc->addField('comment', $rec['comment']);
$doc->addField('keywords', $rec['keywords']);
$doc->addField('category', $rec['category']);
$doc->addField('mimetype', $rec['mimetype']);
$doc->addField('origfilename', $rec['origfilename']);
$doc->addField('owner', $rec['owner']);
$doc->addField('created', $rec['created']);
$doc->addField('users', $rec['users']);
$doc->addField('status', $rec['status']);
$doc->addField('path', $rec['path']);
}
return $doc;
} /* }}} */
/**
* Get a single folder from index
*
* @param integer $id id of folder
* @return boolean false in case of an error, otherwise true
*/
public function getFolder($id) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "SELECT docid, documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, users, status, path FROM docs WHERE documentid='F".$id."'";
$res = $this->_conn->query($sql);
$doc = false;
if($res) {
$rec = $res->fetch(PDO::FETCH_ASSOC);
$doc = new SeedDMS_SQLiteFTS_Document();
$doc->addField('docid', $rec['docid']);
$doc->addField('document_id', $rec['documentid']);
$doc->addField('title', $rec['title']);
$doc->addField('comment', $rec['comment']);
$doc->addField('owner', $rec['owner']);
$doc->addField('created', $rec['created']);
$doc->addField('users', $rec['users']);
$doc->addField('path', $rec['path']);
}
return $doc;
} /* }}} */
/**
* Return list of terms in index
*
* This function does nothing!
*/
public function terms() { /* {{{ */
if(!$this->_conn)
return false;
$sql = "SELECT term, col, occurrences FROM docs_terms WHERE col!='*' ORDER BY col";
$res = $this->_conn->query($sql);
$terms = array();
if($res) {
while($rec = $res->fetch(PDO::FETCH_ASSOC)) {
$term = new SeedDMS_SQLiteFTS_Term($rec['term'], $rec['col'], $rec['occurrences']);
$terms[] = $term;
}
}
return $terms;
} /* }}} */
/**
* Return list of documents in index
*
*/
public function count() { /* {{{ */
$sql = "SELECT count(*) c FROM docs";
$res = $this->_conn->query($sql);
if($res) {
$rec = $res->fetch(PDO::FETCH_ASSOC);
return $rec['c'];
}
return 0;
} /* }}} */
/**
* Commit changes
*
* This function does nothing!
*/
function commit() { /* {{{ */
} /* }}} */
/**
* Optimize index
*
* This function does nothing!
*/
function optimize() { /* {{{ */
} /* }}} */
}
?>

View File

@ -1,71 +0,0 @@
<?php
/**
* Implementation of a query hit
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing a query hit.
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_SQLiteFTS_QueryHit {
/**
* @var SeedDMS_SQliteFTS_Indexer $index
* @access protected
*/
protected $_index;
/**
* @var SeedDMS_SQliteFTS_Document $document
* @access protected
*/
protected $_document;
/**
* @var integer $id id of index document
* @access public
*/
public $id;
/**
* @var integer $id id of real document
* @access public
*/
public $documentid;
/**
*
*/
public function __construct(SeedDMS_SQLiteFTS_Indexer $index) { /* {{{ */
$this->_index = $index;
} /* }}} */
/**
* Return the document associated with this hit
*
* @return SeedDMS_SQLiteFTS_Document
*/
public function getDocument() { /* {{{ */
if (!$this->_document instanceof SeedDMS_SQLiteFTS_Document) {
$this->_document = $this->_index->getDocument($this->id);
}
return $this->_document;
} /* }}} */
}
?>

View File

@ -1,140 +0,0 @@
<?php
/**
* Implementation of search in SQlite FTS index
*
* @category DMS
* @package SeedDMS_Lucene
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for searching in a SQlite FTS index.
*
* @category DMS
* @package SeedDMS_Lucene
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_SQliteFTS_Search {
/**
* @var object $index SQlite FTS index
* @access protected
*/
protected $index;
/**
* Create a new instance of the search
*
* @param object $index SQlite FTS index
* @return object instance of SeedDMS_SQliteFTS_Search
*/
function __construct($index) { /* {{{ */
$this->index = $index;
$this->version = '@package_version@';
if($this->version[0] == '@')
$this->version = '3.0.0';
} /* }}} */
/**
* Get document from index
*
* @param int $id real document id
* @return object instance of SeedDMS_SQliteFTS_QueryHit or false
*/
function getDocument($id) { /* {{{ */
$hits = $this->index->find('D'.$id);
return $hits['hits'] ? $hits['hits'][0] : false;
} /* }}} */
/**
* Get folder from index
*
* @param int $id real folder id
* @return object instance of SeedDMS_SQliteFTS_QueryHit or false
*/
function getFolder($id) { /* {{{ */
$hits = $this->index->find('F'.$id);
return $hits['hits'] ? $hits['hits'][0] : false;
} /* }}} */
/**
* Search in index
*
* @param object $index SQlite FTS index
* @return object instance of SeedDMS_Lucene_Search
*/
function search($term, $fields=array(), $limit=array()) { /* {{{ */
$querystr = '';
$term = trim($term);
if($term) {
$querystr = substr($term, -1) != '*' ? $term.'*' : $term;
}
if(!empty($fields['owner'])) {
if(is_string($fields['owner'])) {
if($querystr)
$querystr .= ' ';
$querystr .= 'owner:'.$fields['owner'];
} elseif(is_array($fields['owner'])) {
if($querystr)
$querystr .= ' ';
$querystr .= '(owner:';
$querystr .= implode(' OR owner:', $fields['owner']);
$querystr .= ')';
}
}
if(!empty($fields['category'])) {
if($querystr)
$querystr .= ' ';
$querystr .= '(category:';
$querystr .= implode(' OR category:', $fields['category']);
$querystr .= ')';
}
if(!empty($fields['status'])) {
if($querystr)
$querystr .= ' ';
$status = array_map(function($v){return $v+10;}, $fields['status']);
$querystr .= '(status:';
$querystr .= implode(' OR status:', $status);
$querystr .= ')';
}
if(!empty($fields['user'])) {
if($querystr)
$querystr .= ' ';
$querystr .= '(users:';
$querystr .= implode(' OR users:', $fields['user']);
$querystr .= ')';
}
if(!empty($fields['rootFolder']) && $fields['rootFolder']->getFolderList()) {
if($querystr)
$querystr .= ' ';
$querystr .= '(path:';
$querystr .= str_replace(':', 'x', $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':');
$querystr .= ')';
}
if(!empty($fields['startFolder']) && $fields['startFolder']->getFolderList()) {
if($querystr)
$querystr .= ' ';
$querystr .= '(path:';
$querystr .= str_replace(':', 'x', $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':');
$querystr .= ')';
}
try {
$result = $this->index->find($querystr, $limit);
$recs = array();
foreach($result["hits"] as $hit) {
$recs[] = array('id'=>$hit->id, 'document_id'=>$hit->documentid);
}
return array('count'=>$result['count'], 'hits'=>$recs, 'facets'=>array());
} catch (Exception $e) {
return false;
}
} /* }}} */
}
?>

View File

@ -1,70 +0,0 @@
<?php
/**
* Implementation of a term
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010, Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class for managing a term.
*
* @category DMS
* @package SeedDMS_SQLiteFTS
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2011, Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_SQLiteFTS_Term {
/**
* @var string $text
* @access public
*/
public $text;
/**
* @var string $field
* @access public
*/
public $field;
/**
* @var integer $occurrence
* @access public
*/
public $_occurrence;
/**
*
*/
public function __construct($term, $col, $occurrence) { /* {{{ */
$this->text = $term;
$fields = array(
0 => 'documentid',
1 => 'title',
2 => 'comment',
3 => 'keywords',
4 => 'category',
5 => 'mimetype',
6 => 'origfilename',
7 => 'owner',
8 => 'content',
9 => 'created',
10 => 'user',
11 => 'status',
12 => 'path'
);
$this->field = $fields[$col];
$this->_occurrence = $occurrence;
} /* }}} */
}
?>

View File

@ -1,316 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<package packagerversion="1.8.1" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd">
<name>SeedDMS_SQLiteFTS</name>
<channel>pear.php.net</channel>
<summary>Fulltext search based on sqlite for SeedDMS</summary>
<description>SeedDMS is a web based document management system (DMS). This is
the fulltext search engine for it, based on SQLite FTS.</description>
<lead>
<name>Uwe Steinmann</name>
<user>steinm</user>
<email>uwe@steinmann.cx</email>
<active>yes</active>
</lead>
<date>2020-12-12</date>
<time>08:57:44</time>
<version>
<release>1.0.15</release>
<api>1.0.15</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- add indexing folders
</notes>
<contents>
<dir baseinstalldir="SeedDMS" name="/">
<dir name="SQLiteFTS">
<file name="Indexer.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="IndexedDocument.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="Document.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="QueryHit.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="Search.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="Term.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
</dir> <!-- /SQLiteFTS -->
<dir name="tests">
</dir> <!-- /tests -->
<file name="SQLiteFTS.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
</dir> <!-- / -->
</contents>
<dependencies>
<required>
<php>
<min>4.3.0</min>
</php>
<pearinstaller>
<min>1.5.4</min>
</pearinstaller>
</required>
</dependencies>
<phprelease />
<changelog>
<release>
<date>2015-08-10</date>
<time>21:13:13</time>
<version>
<release>1.0.0</release>
<api>1.0.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
initial release
</notes>
</release>
<release>
<date>2015-11-16</date>
<time>09:07:07</time>
<version>
<release>1.0.1</release>
<api>1.0.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add __get() to SQLiteFTS_Document because class.IndexInfo.php access class variable title which doesn't exists
</notes>
</release>
<release>
<date>2016-01-10</date>
<time>09:07:07</time>
<version>
<release>1.0.2</release>
<api>1.0.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
check if index exists before removing it when creating a new one
</notes>
</release>
<release>
<date>2016-02-01</date>
<time>09:15:01</time>
<version>
<release>1.0.3</release>
<api>1.0.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add command for indexing postѕcript files
</notes>
</release>
<release>
<date>2016-03-15</date>
<time>15:59:07</time>
<version>
<release>1.0.4</release>
<api>1.0.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
make it work with sqlite3 &lt; 3.8.0
</notes>
</release>
<release>
<date>2016-03-29</date>
<time>08:09:48</time>
<version>
<release>1.0.5</release>
<api>1.0.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
set last parameter of stream_select() to 200000 micro sec. in case the timeout in sec. is set to 0
</notes>
</release>
<release>
<date>2016-03-29</date>
<time>08:09:48</time>
<version>
<release>1.0.6</release>
<api>1.0.1</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
fix calculation of timeout (see bug #269)
</notes>
</release>
<release>
<date>2017-03-01</date>
<time>15:53:24</time>
<version>
<release>1.0.7</release>
<api>1.0.7</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
catch exception in execWithTimeout()
</notes>
</release>
<release>
<date>2017-12-04</date>
<time>11:00:40</time>
<version>
<release>1.0.8</release>
<api>1.0.8</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
allow conversion commands for mimetypes with wildcards
</notes>
</release>
<release>
<date>2018-01-30</date>
<time>11:00:40</time>
<version>
<release>1.0.9</release>
<api>1.0.9</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
execWithTimeout() reads data from stderr and saves it into error msg
</notes>
</release>
<release>
<date>2018-04-11</date>
<time>11:00:40</time>
<version>
<release>1.0.10</release>
<api>1.0.10</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
IndexedDocument() remembers cmd and mimetype
</notes>
</release>
<release>
<date>2019-11-28</date>
<time>11:00:40</time>
<version>
<release>1.0.11</release>
<api>1.0.11</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
Set 'created' in index to creation date of indexed content (was set to current
timestamp)
</notes>
</release>
<release>
<date>2020-09-02</date>
<time>08:57:44</time>
<version>
<release>1.0.12</release>
<api>1.0.12</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
Index users with at least read access on a document
</notes>
</release>
<release>
<date>2020-09-02</date>
<time>08:57:44</time>
<version>
<release>1.0.13</release>
<api>1.0.13</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
add user to list of terms
</notes>
</release>
<release>
<date>2020-09-11</date>
<time>08:57:44</time>
<version>
<release>1.0.14</release>
<api>1.0.14</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- add searching for document status
- search even if query is empty (will find all documents)
- parameters for SeedDMS_SQLiteFTS_Search::search() has changed
- SeedDMS_Lucene_Search::search() returns array of hits, count and facets
- pass config array instead of index directory to SeedDMS_Lucene_Indexer::create()
and SeedDMS_Lucene_Indexer::open()
</notes>
</release>
</changelog>
</package>

5
TODO
View File

@ -1,3 +1,6 @@
This list is hopelessly outdated, but some of the issues are
still worth to be implemented!
Update comment and date of a review/approval, if the same status is set
again. Currently setting the same status is turned of, because it didn't
have any effect, which is quite confusing if the user can do an operation
@ -25,8 +28,6 @@ approaches to get the configuration directory.
Show expiration status of documents in document list
Copy folders recursivly
Allow operations like delete, move, approve, etc. on a list of documents
installation script:

216
build.xml Normal file
View File

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="seeddms" basedir="." default="main">
<property name="tmp" value="/tmp" />
<property name="package" value="${phing.project.name}" override="true" />
<property name="seeddmsurl" value="http://localhost/seeddms51x" />
<property name="builddir" value="${tmp}/build/${phing.project.name}" override="true" />
<property name="srcdir" value="${project.basedir}" override="true" />
<property name="datadir" value="" override="true" />
<property name="dbtype" value="sqlite" override="true" />
<property name="dbhost" value="" override="true" />
<property name="dbuser" value="" override="true" />
<property name="dbpass" value="" override="true" />
<property name="dbname" value="" override="true" />
<property name="version" value="-" />
<property name="shortversion" value="${version}" />
<propertyregex property="shortversion" subject="${version} kk" pattern="([56])\.([0-9]).*" replace="seeddms$1$2x" override="true"/>
<property name="majorversion" value="${version}" />
<propertyregex property="majorversion" subject="${version}" pattern="([56])\..*" replace="$1" override="true"/>
<property name="composer_version" value="2.8.5" />
<property name="composer_extra_params" value="" />
<property name="composer_env" value="" />
<property name="mink_driver" value="chrome" />
<property name="snooze_multiplier" value="1" />
<fileset id="distfiles" dir=".">
<include name="languages/**" />
<include name="op/**" />
<include name="out/**" />
<include name="inc/**" />
<include name="controllers/**" />
<include name="styles/**" />
<include name="views/bootstrap*/**" />
<include name="utils/**" />
<include name="doc/**" />
<include name="webdav/**" />
<include name="install/**" />
<include name="restapi/**" />
<include name="pdfviewer/**" />
<include name="index.php" />
<include name="CHANGELOG" />
<include name=".htaccess" />
<include name="LICENSE" />
</fileset>
<target name="main">
<echo>Hello</echo>
</target>
<!-- PHP CodeSniffer -->
<target name="phpcbf">
<exec command="${srcdir}/vendor/bin/phpcbf --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target>
<target name="phpcs">
<exec command="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml --report=checkstyle &gt; ${builddir}/reports/checkstyle.xml" escape="false" />
</target>
<target name="phpcs-console">
<exec command="${srcdir}/vendor/bin/phpcs --standard=${srcdir}/phpcs.xml" escape="false" passthru="true" checkreturn="true" />
</target>
<target name="php-cs-fixer-dryrun">
<exec command="${srcdir}/vendor/bin/php-cs-fixer fix --dry-run -vvv --diff ${srcdir}/inc" passthru="true" escape="false" checkreturn="true" />
</target>
<!-- PHPUnit -->
<target name="phpunitfast" description="Run tests">
<exec dir="${srcdir}/SeedDMS_Core" command="XDEBUG_MODE=coverage SEEDDMS_CORE_SQL=../install/create_tables-sqlite3.sql ${srcdir}/vendor/bin/phpunit --bootstrap ${srcdir}/SeedDMS_Core/bootstrap-${majorversion}.php --coverage-html ${srcdir}/coverage/" passthru="true" checkreturn="true" />
<!-- exec dir="${srcdir}/tests" command="SEEDDMS_URL=${seeddmsurl} SEEDDMS_MINK_DRIVER=${mink_driver} SEEDDMS_SNOOZE_MULTIPLIER=${snooze_multiplier} ${srcdir}/vendor/bin/phpunit" passthru="true" checkreturn="true" / -->
</target>
<target name="composer" description="Install dependencies with Composer">
<if>
<equals arg1="${composer_version}" arg2="latest-2.x" />
<then>
<httpget url="https://getcomposer.org/composer-2.phar" sslVerifyPeer="false" dir="${srcdir}" filename="composer.phar" />
</then>
<else>
<if>
<not><available file="composer.phar" /></not>
<then>
<httpget url="https://getcomposer.org/download/${composer_version}/composer.phar" sslVerifyPeer="false" dir="${srcdir}" />
</then>
</if>
</else>
</if>
<echo message="Installing dependencies..." />
<exec command="${composer_env} php ${srcdir}/composer.phar install ${composer_extra_params}" passthru="true" checkreturn="true" />
</target>
<target name="dist" description="build SeedDMS tar archive">
<if>
<equals arg1="-" arg2="${version}" />
<then><fail msg="Pass version as property 'version'" /></then>
</if>
<echo msg="This is ${shortversion}" />
<delete file="./seeddms-${version}.tar.gz" failonerror="false" />
<tar destfile="./seeddms-${version}.tar.gz" prefix="seeddms-${version}" compression="gzip">
<fileset refid="distfiles" />
</tar>
</target>
<target name="package" description="build SeedDMS quickstart packages for distribution">
<if>
<equals arg1="-" arg2="${version}" />
<then><fail msg="Pass version as property 'version'" /></then>
</if>
<echo msg="This is ${shortversion}" />
<if>
<matches string="${version}" pattern="^6\.0\..*" />
<then><echo msg="This is version 6" /></then>
<else><echo msg="This is version 5" /></else>
</if>
<!-- make sure the work area is empty, then rebuild it -->
<delete dir="${builddir}/packages" includeemptydirs="true" failonerror="false" />
<mkdir dir="${builddir}/packages" />
<delete dir="${builddir}/export" includeemptydirs="true" failonerror="false" />
<mkdir dir="${builddir}/export/${shortversion}" />
<mkdir dir="${builddir}/export/${shortversion}/conf" />
<mkdir dir="${builddir}/export/${shortversion}/data" />
<mkdir dir="${builddir}/export/${shortversion}/data/1048576" />
<mkdir dir="${builddir}/export/${shortversion}/data/log" />
<mkdir dir="${builddir}/export/${shortversion}/data/cache" />
<exec command="echo 'Signature: 8a477f597d28d172789f06886806bc55' &gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
<exec command="echo '# This file is a cache directory tag created by seeddms.' &gt;&gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
<exec command="echo '# For information about cache directory tags, see: http://www.brynosaurus.com/cachedir/' &gt;&gt; ${builddir}/export/${shortversion}/data/cache/CACHEDIR.TAG" />
<mkdir dir="${builddir}/export/${shortversion}/data/backup" />
<mkdir dir="${builddir}/export/${shortversion}/data/lucene" />
<mkdir dir="${builddir}/export/${shortversion}/data/staging" />
<mkdir dir="${builddir}/export/${shortversion}/pear" />
<mkdir dir="${builddir}/export/${shortversion}/www" />
<mkdir dir="${builddir}/export/${shortversion}/www/ext" />
<mkdir dir="${builddir}/export/${shortversion}/seeddms-${version}" />
<copy file="${srcdir}/conf/settings.xml.template" tofile="${builddir}/export/${shortversion}/conf/settings.xml">
<filterchain>
<replaceregexp>
<regexp pattern="_DBC_DBTYPE_" replace="${dbtype}"/>
<regexp pattern="_DBC_DBSERVER_" replace="${dbhost}"/>
<regexp pattern="_DBC_DBNAME_" replace="${dbname}"/>
<regexp pattern="_DBC_DBUSER_" replace="${dbuser}"/>
<regexp pattern="_DBC_DBPASS_" replace="${dbpass}"/>
<regexp pattern="_SHORT_VERSION_" replace="${shortversion}"/>
</replaceregexp>
</filterchain>
</copy>
<copy file="${srcdir}/conf/.htaccess" tofile="${builddir}/export/${shortversion}/conf/.htaccess" />
<copy todir="${builddir}/export/${shortversion}/seeddms-${version}">
<fileset refid="distfiles" />
</copy>
<copy todir="${builddir}/export/${shortversion}/pear/vendor">
<fileset dir="${srcdir}/vendor" defaultexcludes="false" />
</copy>
<copy todir="${builddir}/export/${shortversion}/www/ext/example">
<fileset dir="${srcdir}/ext/example" defaultexcludes="false" />
</copy>
<!-- copy todir="${builddir}/export/${shortversion}/pear/SeedDMS">
<fileset dir="SeedDMS_Core">
<include name="Core/**" />
<include name="Core.php" />
</fileset>
<fileset dir="SeedDMS_Preview">
<include name="Preview/**" />
<include name="Preview.php" />
</fileset>
<fileset dir="SeedDMS_Lucene">
<include name="Lucene/**" />
<include name="Lucene.php" />
</fileset -->
<!-- fileset dir="SeedDMS_SQLiteFTS">
<include name="SQLiteFTS/**" />
<include name="SQLiteFTS.php" />
</fileset>
</copy -->
<!-- copy todir="${builddir}/export/${shortversion}/pear">
<fileset dir="../seeddms-ext/http_webdav_server">
<include name="HTTP/WebDAV/Server/**" />
<include name="HTTP/WebDAV/Server.php" />
</fileset>
</copy>
<copy todir="${builddir}/export/${shortversion}/pear/HTTP/WebDAV">
<fileset dir="../seeddms-ext/http_webdav_server">
<include name="Tools/**" />
</fileset>
</copy -->
<copy tofile="${builddir}/export/${shortversion}/pear/composer.json" file="composer-dist.json">
</copy>
<phingcall target="composer">
<property name="composer_extra_params" value="--working-dir=${builddir}/export/${shortversion}/pear/" />
<property name="composer_envv" value="COMPOSER=${srcdir}/composer-dist.json" />
</phingcall>
<exec command="cd ${builddir}/export/${shortversion} &amp;&amp; ln -s seeddms-${version} seeddms" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/op" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/out" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/inc" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/controllers" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/languages" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/views" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/restapi" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/styles" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/pdfviewer" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/install" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/webdav" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/index.php" />
<exec command="cd ${builddir}/export/${shortversion}/www &amp;&amp; ln -s ../seeddms/.htaccess" />
<exec command="cat ${srcdir}/install/create_tables-sqlite3.sql | sqlite3 ${builddir}/export/${shortversion}/data/content.db" />
<!-- build the standard tar.gz archive -->
<echo message="Building .tar.gz...." />
<exec command="cd ${builddir}/export ; tar czf ${builddir}/packages/seeddms-quickstart-${version}.tar.gz ${shortversion}" checkreturn="true" />
<echo message="Built in ${builddir}/packages/seeddms-quickstart-${version}.tar.gz" />
</target>
</project>

76
composer-dist.json Normal file
View File

@ -0,0 +1,76 @@
{
"config": {
"platform": {
"php": "8.2"
}
},
"require": {
"robthree/twofactorauth": "^1.5",
"slim/slim": "^4.0",
"guzzlehttp/psr7": "*",
"erusev/parsedown": "*",
"erusev/parsedown-extra": "*",
"mibe/feedwriter": "^1.1",
"phpoffice/phpspreadsheet": "*",
"sabre/xml": "*",
"sabre/dav": "^4.",
"pear/log": "*",
"pear/mail": "*",
"pear/mail_mime": "*",
"pear/net_smtp": "*",
"pear/auth_sasl": "*",
"pear/db": "*",
"dragonmantank/cron-expression": "^3.1",
"alecrabbit/php-console-colour": "*",
"dragonmantank/cron-expression": "^3",
"zf1/zend-search-lucene": "*",
"symfony/http-foundation": "^5.4",
"php-di/php-di": "^6.4",
"slim/psr7": "^1.7",
"seeddms/core": "dev-master",
"seeddms/lucene": "dev-master",
"seeddms/preview": "dev-master",
"seeddms/sqlitefts": "dev-master",
"seeddms/http_webdav_server": "dev-master"
},
"require-dev": {
"composer/composer": "dev-main"
},
"repositories": [
{
"type": "path",
"url": "/home/cvs/seeddms-ext/core",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "/home/cvs/seeddms-ext/lucene",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "/home/cvs/seeddms-ext/preview",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "/home/cvs/seeddms-ext/sqlitefts",
"options": {
"symlink": false
}
},
{
"type": "path",
"url": "/home/cvs/seeddms-ext/http_webdav_server",
"options": {
"symlink": false
}
}
]
}

View File

@ -15,14 +15,15 @@
footNote = "SeedDMS free document management system - www.seeddms.org"
printDisclaimer = "true"
language = "en_GB"
theme = "bootstrap"
theme = "bootstrap4"
previewWidthList = "40"
previewWidthDetail = "100"
onePageMode="true"
/>
<!--
- strictFormCheck: Strict form checking. If set to true, then all fields in the form will be checked for a value. If set to false, then (most) comments and keyword fields become optional. Comments are always required when submitting a review or overriding document status.
- viewOnlineFileTypes: files with one of the following endings can be viewed online (USE ONLY LOWER CASE CHARACTERS)
- enableConverting: enable/disable converting of files XXX
- enableConverting: enable/disable converting of files (deprecated)
- enableEmail: enable/disable automatic email notification
- enableUsersView: enable/disable group and user view for all users
- enableFullSearch: false to don't use fulltext search
@ -34,12 +35,14 @@
- 2 to start with tree shown fully expanded
- stopWordsFile: path to stop word file for indexer
- sortUsersInList: how to sort users in lists ('fullname' or '' (default))
- enableDropUpload: XXX
- enableRecursiveCount: XXX
- maxRecursiveCount: XXX
- enableThemeSelector: XXX
- enableDropUpload: enable/disable uploading files by drag&drop
- enableRecursiveCount: enable/disable counting docs and folder recursively
- maxRecursiveCount: after this number of docs/folders precise counting will stop
- enableThemeSelector: enable/disable the theme selector on the login page
- fullSearchEngine: Either "lucene" or "sqlitefts"
- sortFoldersDefault: XXX
- sortFoldersDefault: how to sort forders by default. u=unsorted, s=sequence, n=name
- defaultDocPosition: Default position for a new document. 'start', 'end', or ''
- defaultFolderPosition: Default position for a new folder. 'start', 'end', or ''
-->
<edition
strictFormCheck = "false"
@ -54,12 +57,14 @@
enableLanguageSelector = "true"
stopWordsFile = ""
sortUsersInList = ""
enableDropUpload = "false"
enableDropUpload = "true"
enableRecursiveCount = "false"
maxRecursiveCount = "0"
enableThemeSelector = "false"
fullSearchEngine = "lucene"
enableThemeSelector = "true"
fullSearchEngine = "sqlitefts"
sortFoldersDefault = "u"
defaultDocPosition = "end"
defaultFolderPosition = "end"
/>
<!--
- enableCalendar: enable/disable calendar
@ -96,17 +101,18 @@
-->
<server
rootDir = ""
httpRoot = "/seeddms/"
httpRoot = "/_SHORT_VERSION_/"
contentDir = ""
stagingDir = ""
luceneDir = ""
logFileEnable = "true"
logFileRotation = "d"
enableLargeFileUpload = "true"
enableLargeFileUpload = "false"
partitionSize = "2000000"
dropFolderDir = ""
cacheDir = ""
backupDir = ""
logFileMaxLevel="6"
/>
<!--
- enableGuestLogin: If you want anybody to login as guest, set the following line to true
@ -115,16 +121,17 @@
- restricted: Restricted access: only allow users to log in if they have an entry in the local database (irrespective of successful authentication with LDAP).
- enableUserImage: enable users images
- disableSelfEdit: if true user cannot edit his own profile
- passwordStrength: XXX
- passwordStrengthAlgorithm: XXX
- passwordExpiration: XXX
- passwordHistory: XXX
- loginFailure: XXX
- autoLoginUser: XXX
- quota: XXX
- undelUserIds: XXX
- encryptionKey: XXX
- cookieLifetime: XXX
- disableChangePassword: if true user cannot change the password
- passwordStrength: minimum strength of password, set to 0 to disable
- passwordStrengthAlgorithm: algorithm used to calculate password strenght (simple or advanced)
- passwordExpiration: number of days after password expires
- passwordHistory: number of remembered passwords
- loginFailure: maximum allowed login failures before an account is disabled
- autoLoginUser: id of user used if auto login is turned on
- quota: maximum allowed space on disc for each user
- undelUserIds: ids of users which cannot be deleted
- encryptionKey: arbitrary string used for creating form tokens
- cookieLifetime: lifetime of cookie in seconds, set to 0 for session cookies
-->
<authentication
enableGuestLogin = "false"
@ -132,6 +139,7 @@
restricted = "true"
enableUserImage = "false"
disableSelfEdit = "false"
disableChangePassword = "false"
passwordStrength = "0"
passwordStrengthAlgorithm = "simple"
passwordExpiration = "0"
@ -163,6 +171,7 @@
bindDN = ""
bindPw = ""
filter = ""
groupField = ""
/>
<!-- ***** CONNECTOR Microsoft Active Directory *****
- enable: enable/disable connector
@ -184,11 +193,12 @@
accountDomainName = "example.com"
bindDN = ""
bindPw = ""
filter = ""
groupField = ""
/>
</connectors>
</authentication>
<!--
- ADOdbPath: Path to adodb. This is the directory containing the adodb directory
- dbDriver: DB-Driver used by adodb (see adodb-readme)
- dbHostname: DB-Server
- dbDatabase: database where the tables for seeddms are stored (optional - see adodb-readme)
@ -197,7 +207,6 @@
- doNotCheckVersion: Whether or not to check the database schema for its correct version.
-->
<database
ADOdbPath = ""
dbDriver = "_DBC_DBTYPE_"
dbHostname = "_DBC_DBSERVER_"
dbDatabase = "_DBC_DBNAME_"
@ -209,8 +218,8 @@
- smtpServer: SMTP Server hostname
- smtpPort: SMTP Server port
- smtpSendFrom: Send from
- smtpUser: XXX
- smtpPassword: XXX
- smtpUser: user name used for authenticating against smtp server
- smtpPassword: password used for authenticating against smtp server
-->
<smtp
smtpServer = "localhost"
@ -224,13 +233,11 @@
<!--
-siteDefaultPage: Default page on login. Defaults to out/out.ViewFolder.php
- rootFolderID: ID of root-folder (mostly no need to change)
- titleDisplayHack: Workaround for page titles that go over more than 2 lines.
- showMissingTranslations: XXX
- showMissingTranslations: set true if missing translation shall be listed at end of page
-->
<display
siteDefaultPage = ""
rootFolderID = "1"
titleDisplayHack = "true"
showMissingTranslations = "false"
/>
<!--
@ -249,15 +256,15 @@
- enableVersionModification: allow to modify versions after approval
- enableDuplicateDocNames: allow duplicate names in a folder
- enableDuplicateSubFolderNames: allow duplicate names in a folder
- enableOwnerRevApp: XXX
- enableSelfRevApp: XXX
- presetExpirationDate: XXX
- overrideMimeType: XXX
- enableOwnerRevApp: allow owner of a document to review and approve
- enableSelfRevApp: allow the user current logged in to add herself as a reviewer or approver
- presetExpirationDate: set to time period if each document shall expire
- overrideMimeType: set to true if the mimetype of a document version is determined by the server
-->
<edition
enableAdminRevApp = "false"
versioningFileName = "versioning_info.txt"
workflowMode = "advanced"
workflowMode = "traditional"
enableVersionDeletion = "true"
enableVersionModification = "true"
enableDuplicateDocNames = "true"
@ -277,9 +284,9 @@
- be any number or string that does not already exist within $_contentDir.
- maxDirID: Maximum number of sub-directories per parent directory. Default: 0.
- updateNotifyTime: users are notified about document-changes that took place within the last "updateNotifyTime" seconds
- extraPath: XXX
- maxExecutionTime: XXX
- cmdTimeout: XXX
- extraPath: additional path which is added to php's include path
- maxExecutionTime: maximum script execution time, this cannot be larger than the value set in php.ini
- cmdTimeout: timeout in sec. for external commands
-->
<server
coreDir = ""
@ -292,9 +299,9 @@
cmdTimeout = "10"
/>
<!--
- enableNotificationAppRev: XXX
- enableNotificationAppRev: set to true if reviewers and approvers shall be informed about a pending review/approval
- enableOwnerNotification: XXX
- enableNotificationWorkflow: XXX
- enableNotificationWorkflow: set to true if the users in the workflow shall be informed
-->
<notification
enableNotificationAppRev = "true"
@ -302,22 +309,20 @@
enableNotificationWorkflow = "false"
/>
<converters target="fulltext">
<converter mimeType="application/pdf">pdftotext -nopgbrk %s - | sed -e 's/ [a-zA-Z0-9.]\{1\} / /g' -e 's/[0-9.]//g'</converter>
<converter mimeType="application/pdf">pdftotext -nopgbrk %s -</converter>
<converter mimeType="application/msword">catdoc %s</converter>
<converter mimeType="application/vnd.ms-excel">ssconvert -T Gnumeric_stf:stf_csv -S %s fd://1</converter>
<converter mimeType="audio/mp3">id3 -l -R %s | egrep '(Title|Artist|Album)' | sed 's/^[^:]*: //g'</converter>
<converter mimeType="audio/mpeg">id3 -l -R %s | egrep '(Title|Artist|Album)' | sed 's/^[^:]*: //g'</converter>
<converter mimeType="text/plain">cat %s</converter>
<converter mimeType="text/html">html2text %s</converter>
<converter mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document">docx2txt %s -</converter>
</converters>
<converters target="preview">
<converter mimeType="application/msword">unoconv -d document -e PageRange=1 -f pdf --stdout -v '%f'|gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q - | convert -resize %wx png:- '%o'</converter>
<converter mimeType="image/png">convert -resize %wx '%f' '%o'</converter>
<converter mimeType="image/jpg">convert -resize %wx '%f' '%o'</converter>
<converter mimeType="image/gif">convert -resize %wx '%f' '%o'</converter>
<converter mimeType="text/plain">a2ps -1 -a1 -R -B -o - '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha -dFirstPage=1 -dLastPage=1 -dPDFFitPage -r72x72 -sOutputFile=- -q - | convert -resize %wx png:- '%o'</converter>
</converters>
</advanced>
<extensions/>
<extensions>
<extension name="example" disable="true">
<parameter name="__disable__">1</parameter>
</extension>
</extensions>
</configuration>

View File

@ -56,16 +56,43 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common {
$reqversion = $this->getParam('reqversion');
$version_comment = $this->getParam('versioncomment');
$attributes = $this->getParam('attributes');
foreach($attributes as $attrdefid=>$attribute) {
foreach($attributes as $attrdefid=>&$attribute) {
if($attrdef = $dms->getAttributeDefinition($attrdefid)) {
if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) {
if($attribute) {
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_date:
$attribute = date('Y-m-d', makeTsFromDate($attribute));
if(is_array($attribute))
$attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute);
else
$attribute = date('Y-m-d', makeTsFromDate($attribute));
break;
case SeedDMS_Core_AttributeDefinition::type_folder:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute);
else
$attribute = $dms->getFolder((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_document:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute);
else
$attribute = $dms->getDocument((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_user:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute);
else
$attribute = $dms->getUser((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_group:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute);
else
$attribute = $dms->getGroup((int) $attribute);
break;
}
if(!$attrdef->validate($attribute)) {
if(!$attrdef->validate($attribute, null, true)) {
$this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute);
return false;
}
@ -80,19 +107,49 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common {
}
}
if($attributes_version = $this->getParam('attributesversion')) {
foreach($attributes_version as $attrdefid=>$attribute) {
foreach($attributes_version as $attrdefid=>&$attribute) {
if($attrdef = $dms->getAttributeDefinition($attrdefid)) {
if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) {
if($attribute) {
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_date:
$attribute = date('Y-m-d', makeTsFromDate($attribute));
if(is_array($attribute))
$attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute);
else
$attribute = date('Y-m-d', makeTsFromDate($attribute));
break;
case SeedDMS_Core_AttributeDefinition::type_folder:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute);
else
$attribute = $dms->getFolder((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_document:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute);
else
$attribute = $dms->getDocument((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_user:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute);
else
$attribute = $dms->getUser((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_group:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute);
else
$attribute = $dms->getGroup((int) $attribute);
break;
}
if(!$attrdef->validate($attribute)) {
if(!$attrdef->validate($attribute, null, true)) {
$this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute);
return false;
}
} elseif($attrdef->getMinValues() > 0) {
$this->errormsg = array("attr_min_values", array("attrname"=>$attrdef->getName()));
return false;
}
} else {
if($ret === false)

View File

@ -41,11 +41,43 @@ class SeedDMS_Controller_AddSubFolder extends SeedDMS_Controller_Common {
$comment = $this->getParam('comment');
$sequence = $this->getParam('sequence');
$attributes = $this->getParam('attributes');
foreach($attributes as $attrdefid=>$attribute) {
foreach($attributes as $attrdefid=>&$attribute) {
if($attrdef = $dms->getAttributeDefinition($attrdefid)) {
if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) {
if($attribute) {
if(!$attrdef->validate($attribute)) {
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_date:
if(is_array($attribute))
$attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute);
else
$attribute = date('Y-m-d', makeTsFromDate($attribute));
break;
case SeedDMS_Core_AttributeDefinition::type_folder:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute);
else
$attribute = $dms->getFolder((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_document:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute);
else
$attribute = $dms->getDocument((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_user:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute);
else
$attribute = $dms->getUser((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_group:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute);
else
$attribute = $dms->getGroup((int) $attribute);
break;
}
if(!$attrdef->validate($attribute, null, true)) {
$this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute);
return false;
}

View File

@ -7,36 +7,38 @@
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @copyright Copyright (C) 2010-2023 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class which does the busines logic for downloading a document
* Class which does the busines logic for approving a document
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @copyright Copyright (C) 2010-2023 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_ApproveDocument extends SeedDMS_Controller_Common {
public function run() {
public $oldstatus;
public $newstatus;
public function run() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$settings = $this->params['settings'];
$document = $this->params['document'];
$content = $this->params['content'];
$approvalstatus = $this->params['approvalstatus'];
$approvaltype = $this->params['approvaltype'];
$group = $this->params['group'];
$comment = $this->params['comment'];
$file = $this->params['file'];
/* Get the document id and name before removing the document */
$docname = $document->getName();
$documentid = $document->getID();
$approvaltype = $this->params['type'];
$approvalstatus = $this->params['status'];
$approvalcomment = $this->params['comment'];
$approvalfile = $this->params['file'];
$approvalgroup = $this->params['group'];
$overallStatus = $content->getStatus();
$this->oldstatus = $overallStatus['status'];
$this->newstatus = $this->oldstatus;
if(!$this->callHook('preApproveDocument', $content)) {
}
@ -44,34 +46,35 @@ class SeedDMS_Controller_ApproveDocument extends SeedDMS_Controller_Common {
$result = $this->callHook('approveDocument', $content);
if($result === null) {
if ($approvaltype == "ind") {
if(0 > $content->setApprovalByInd($user, $user, $approvalstatus, $comment, $file)) {
$this->error = 1;
$this->errormsg = "approval_update_failed";
return false;
}
$approvalLogID = $content->setApprovalByInd($user, $user, $approvalstatus, $approvalcomment, $approvalfile);
} elseif ($approvaltype == "grp") {
if(0 > $content->setApprovalByGrp($group, $user, $approvalstatus, $comment, $file)) {
$this->error = 1;
$this->errormsg = "approval_update_failed";
return false;
}
$approvalLogID = $content->setApprovalByGrp($approvalgroup, $user, $approvalstatus, $approvalcomment, $approvalfile);
} else {
$this->errormsg = "approval_wrong_type";
return false;
}
if($approvalLogID === false || 0 > $approvalLogID) {
$this->errormsg = "approval_update_failed";
return false;
}
}
/* Check to see if the overall status for the document version needs to be
* updated.
*/
$result = $this->callHook('approveUpdateDocumentStatus', $content);
if($result === null) {
/* If document was rejected, set the document status to S_REJECTED right away */
if ($approvalstatus == -1){
if($content->setStatus(S_REJECTED,$comment,$user)) {
$this->callHook('postApproveDocument', $content, S_REJECTED);
if($approvalstatus == -1) {
$this->newstatus = S_REJECTED;
if($content->setStatus(S_REJECTED, $approvalcomment, $user)) {
if(isset($GLOBALS['SEEDDMS_HOOKS']['approveDocument'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['approveDocument'] as $hookObj) {
if (method_exists($hookObj, 'postApproveDocument')) {
$hookObj->postApproveDocument(null, $content, S_REJECTED);
}
}
}
}
} else {
$docApprovalStatus = $content->getApprovalStatus();
if (is_bool($docApprovalStatus) && !$docApprovalStatus) {
$this->error = 1;
$this->errormsg = "cannot_retrieve_approval_snapshot";
return false;
}
@ -89,8 +92,15 @@ class SeedDMS_Controller_ApproveDocument extends SeedDMS_Controller_Common {
// count of the approvals required for this document.
if ($approvalCT == $approvalTotal) {
// Change the status to released.
if($content->setStatus(S_RELEASED, getMLText("automatic_status_update"), $user)) {
$this->callHook('postApproveDocument', $content, S_RELEASED);
$this->newstatus=S_RELEASED;
if($content->setStatus($this->newstatus, getMLText("automatic_status_update"), $user)) {
if(isset($GLOBALS['SEEDDMS_HOOKS']['approveDocument'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['approveDocument'] as $hookObj) {
if (method_exists($hookObj, 'postApproveDocument')) {
$hookObj->postApproveDocument(null, $content, S_RELEASED);
}
}
}
}
}
}
@ -100,6 +110,6 @@ class SeedDMS_Controller_ApproveDocument extends SeedDMS_Controller_Common {
}
return true;
}
} /* }}} */
}

View File

@ -78,6 +78,7 @@ class SeedDMS_Controller_AttributeMgr extends SeedDMS_Controller_Common {
return false;
}
if (!$attrdef->setRegex($regex)) {
$this->errormsg = 'attrdef_invalid_regex';
return false;
}

View File

@ -0,0 +1,114 @@
<?php
/**
* Implementation of CheckInDocument controller
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2024 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class which does the busines logic for downloading a document
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2024 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_CheckInDocument extends SeedDMS_Controller_Common {
public function run() { /* {{{ */
$name = $this->getParam('name');
$comment = $this->getParam('comment');
/* Call preCheckInDocument early, because it might need to modify some
* of the parameters.
*/
if(false === $this->callHook('preCheckInDocument', $this->params['document'])) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preCheckInDocument_failed';
return null;
}
$comment = $this->getParam('comment');
$dms = $this->params['dms'];
$user = $this->params['user'];
$document = $this->params['document'];
$settings = $this->params['settings'];
$fulltextservice = $this->params['fulltextservice'];
$folder = $this->params['folder'];
$userfiletmp = $this->getParam('userfiletmp');
$userfilename = $this->getParam('userfilename');
$filetype = $this->getParam('filetype');
$userfiletype = $this->getParam('userfiletype');
$reviewers = $this->getParam('reviewers');
$approvers = $this->getParam('approvers');
$recipients = $this->getParam('recipients');
$reqversion = $this->getParam('reqversion');
$comment = $this->getParam('comment');
$attributes = $this->getParam('attributes');
$workflow = $this->getParam('workflow');
$maxsizeforfulltext = $this->getParam('maxsizeforfulltext');
$initialdocumentstatus = $this->getParam('initialdocumentstatus');
$content = $this->callHook('checkinDocument');
if($content === null) {
if($contentResult=$document->checkIn($comment, $user, $reviewers, $approvers, $version=0, $attributes, $workflow, $initialdocumentstatus)) {
if ($this->hasParam('expires')) {
if($document->setExpires($this->getParam('expires'))) {
} else {
}
}
if(!empty($recipients['i'])) {
foreach($recipients['i'] as $uid) {
if($u = $dms->getUser($uid)) {
$res = $contentResult->getContent()->addIndRecipient($u, $user);
}
}
}
if(!empty($recipients['g'])) {
foreach($recipients['g'] as $gid) {
if($g = $dms->getGroup($gid)) {
$res = $contentResult->getContent()->addGrpRecipient($g, $user);
}
}
}
$content = $contentResult->getContent();
} else {
$this->errormsg = 'error_checkin_document';
$result = false;
}
} elseif($result === false) {
if(empty($this->errormsg))
$this->errormsg = 'hook_checkinDocument_failed';
return false;
}
if($fulltextservice && ($index = $fulltextservice->Indexer()) && $content) {
$idoc = $fulltextservice->IndexedDocument($document);
if(false !== $this->callHook('preIndexDocument', $document, $idoc)) {
$lucenesearch = $fulltextservice->Search();
if($hit = $lucenesearch->getDocument((int) $document->getId())) {
$index->delete($hit->id);
}
$index->addDocument($idoc);
$index->commit();
}
}
if(false === $this->callHook('postCheckInDocument', $document, $content)) {
}
return $content;
} /* }}} */
}

View File

@ -29,14 +29,24 @@ class SeedDMS_Controller_ClearCache extends SeedDMS_Controller_Common {
$post = $this->params['post'];
$ret = '';
if(!empty($post['preview'])) {
$cmd = 'rm -rf '.$settings->_cacheDir.'/[1-9]*';
if(!empty($post['previewpng'])) {
$cmd = 'rm -rf '.addDirSep($settings->_cacheDir).'png'.DIRECTORY_SEPARATOR.'[1-9]*';
system($cmd, $ret);
}
if(!empty($post['previewpdf'])) {
$cmd = 'rm -rf '.addDirSep($settings->_cacheDir).'pdf'.DIRECTORY_SEPARATOR.'[1-9]*';
system($cmd, $ret);
}
if(!empty($post['previewtxt'])) {
$cmd = 'rm -rf '.addDirSep($settings->_cacheDir).'txt'.DIRECTORY_SEPARATOR.'[1-9]*';
system($cmd, $ret);
}
if(!empty($post['js'])) {
$cmd = 'rm -rf '.$settings->_cacheDir.'/js/*';
system($cmd, $ret);
/* system('rm ...') does not work anymore if the number of files is too large */
array_map('unlink', array_filter((array) glob(addDirSep($settings->_cacheDir).'js'.DIRECTORY_SEPARATOR.'*')));
}
if(false === $this->callHook('clear', $post)) {

View File

@ -24,39 +24,85 @@ class SeedDMS_Controller_Cron extends SeedDMS_Controller_Common {
public function run() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$settings = $this->params['settings'];
$mode = 'run'; //$this->params['mode'];
$logger = $this->params['logger'];
$mode = $this->params['mode'];
$seltask = $this->params['task'];
$db = $dms->getDb();
$scheduler = new SeedDMS_Scheduler($db);
$tasks = $scheduler->getTasks();
$jsonarr = [];
foreach($tasks as $task) {
if($seltask && $seltask != $task->getExtension()."::".$task->getTask())
continue;
if(isset($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()]) && is_object($taskobj = resolveTask($GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()]))) {
$arr = array(
'extension'=>$task->getExtension(),
'name'=>$task->getTask(),
'mode'=>$mode,
'disabled' => (bool) $task->getDisabled(),
'isdue' => $task->isDue(),
);
switch($mode) {
case "run":
case "dryrun":
if(method_exists($taskobj, 'execute')) {
if(!$task->getDisabled() && $task->isDue()) {
if($user = $dms->getUserByLogin('cli_scheduler')) {
if($mode == 'run') {
/* Schedule the next run right away to prevent a second execution
* of the task when the cron job of the scheduler is called before
* the last run was finished. The task itself can still be scheduled
* to fast, but this is up to the admin of seeddms.
*/
$task->updateLastNextRun();
if($taskobj->execute($task)) {
add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." successful.");
$task->updateLastNextRun();
$arr['success'] = true;
} else {
add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed, task has been disabled.", PEAR_LOG_ERR);
$arr['success'] = false;
$task->setDisabled(1);
}
} else {
add_log_line("Execution of task ".$task->getExtension()."::".$task->getTask()." failed because of missing user 'cli_scheduler'. Task has been disabled.", PEAR_LOG_ERR);
$task->setDisabled(1);
} elseif($mode == 'dryrun') {
$arr['success'] = true;
}
}
}
break;
case "check":
$arr['error'] = false;
if(!method_exists($taskobj, 'execute')) {
$arr['error'] = true;
$arr['messages'][] = 'Missing method execute()';
}
if(get_parent_class($taskobj) != 'SeedDMS_SchedulerTaskBase') {
$arr['error'] = true;
$arr['error'][] = "Wrong parent class";
}
break;
case "list":
default:
header("Content-Type: application/json");
$arr['nextrun']=$task->getNextRun();
$arr['frequency']=$task->getFrequency();
$arr['params']=array();
if($params = $task->getParameter()) {
foreach($params as $key=>$value) {
$p = $taskobj->getAdditionalParamByName($key);
$arr['params'][$key] = ($p['type'] == 'password') ? '*******' : $value;
}
}
break;
}
$jsonarr[] = $arr;
}
}
echo json_encode($jsonarr);
return true;
return true;
} /* }}} */
}

View File

@ -30,119 +30,180 @@ class SeedDMS_Controller_DocumentAccess extends SeedDMS_Controller_Common {
$settings = $this->params['settings'];
$action = $this->params['action'];
// Change owner -----------------------------------------------------------
if ($action == "setowner") {
if(false === $this->callHook('preSetOwner', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetOwner_failed';
return null;
}
$newowner = $this->params['newowner'];
$oldowner = $document->getOwner();
if($document->setOwner($newowner)) {
if(false === $this->callHook('postSetOwner', $document, $oldowner)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_postSetOwner_failed';
return null;
}
}
} elseif ($action == "notinherit") {
if(false === $this->callHook('preSetNotInherit', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetNotInherit_failed';
return null;
}
return null;
}
/* Get default access before access is not longer inherited. This
* will return the default access from the parent folder.
*/
$defAccess = $document->getDefaultAccess();
if(!$document->setInheritAccess(false)) {
return false;
}
// Change owner -----------------------------------------------------------
public function setowner() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$settings = $this->params['settings'];
if(!$document->setDefaultAccess($defAccess)) {
return false;
}
//copy ACL of parent folder
$mode = $this->params['mode'];
if ($mode == "copy") {
$accessList = $folder->getAccessList();
foreach ($accessList["users"] as $userAccess)
$document->addAccess($userAccess->getMode(), $userAccess->getUserID(), true);
foreach ($accessList["groups"] as $groupAccess)
$document->addAccess($groupAccess->getMode(), $groupAccess->getGroupID(), false);
}
if(false === $this->callHook('postSetNotInherit', $document)) {
if(false === $this->callHook('preSetOwner', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetOwner_failed';
return null;
}
$newowner = $this->params['newowner'];
$oldowner = $document->getOwner();
if($document->setOwner($newowner)) {
if(false === $this->callHook('postSetOwner', $document, $oldowner)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_postSetNotInherit_failed';
$this->errormsg = 'hook_postSetOwner_failed';
return null;
}
} elseif ($action == "inherit") {
if(false === $this->callHook('preSetInherit', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetInherit_failed';
return null;
}
if(!$document->clearAccessList() || !$document->setInheritAccess(true)) {
return false;
}
if(false === $this->callHook('postSetInherit', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_postSetInherit_failed';
return null;
}
} elseif ($action == "setdefault") {
if(false === $this->callHook('preSetDefault', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetDefault_failed';
return null;
}
$mode = $this->params['mode'];
if(!$document->setDefaultAccess($mode)) {
return false;
}
if(false === $this->callHook('postSetDefault', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_postSetDefault_failed';
return null;
}
} elseif ($action == "editaccess") {
$mode = $this->params['mode'];
$userid = $this->params['userid'];
$groupid = $this->params['groupid'];
if ($userid) {
$document->changeAccess($mode, $userid, true);
}
elseif ($groupid) {
$document->changeAccess($mode, $groupid, false);
}
} elseif ($action == "delaccess") {
$userid = $this->params['userid'];
$groupid = $this->params['groupid'];
if ($userid) {
$document->removeAccess($userid, true);
}
elseif ($groupid) {
$document->removeAccess($groupid, false);
}
} elseif ($action == "addaccess") {
$mode = $this->params['mode'];
$userid = $this->params['userid'];
$groupid = $this->params['groupid'];
if ($userid && $userid != -1) {
$document->addAccess($mode, $userid, true);
}
elseif ($groupid && $groupid != -1) {
$document->addAccess($mode, $groupid, false);
}
}
return true;
}
public function notinherit() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$settings = $this->params['settings'];
if(false === $this->callHook('preSetNotInherit', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetNotInherit_failed';
return null;
}
/* Get default access before access is not longer inherited. This
* will return the default access from the parent folder.
*/
$defAccess = $document->getDefaultAccess();
if(!$document->setInheritAccess(false)) {
return false;
}
if(!$document->setDefaultAccess($defAccess)) {
return false;
}
//copy ACL of parent folder
$mode = $this->params['mode'];
if ($mode == "copy") {
$accessList = $folder->getAccessList();
foreach ($accessList["users"] as $userAccess)
$document->addAccess($userAccess->getMode(), $userAccess->getUserID(), true);
foreach ($accessList["groups"] as $groupAccess)
$document->addAccess($groupAccess->getMode(), $groupAccess->getGroupID(), false);
}
if(false === $this->callHook('postSetNotInherit', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_postSetNotInherit_failed';
return null;
}
return true;
}
public function inherit() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$settings = $this->params['settings'];
if(false === $this->callHook('preSetInherit', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetInherit_failed';
return null;
}
if(!$document->clearAccessList() || !$document->setInheritAccess(true)) {
return false;
}
if(false === $this->callHook('postSetInherit', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_postSetInherit_failed';
return null;
}
return true;
}
public function setdefault() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$settings = $this->params['settings'];
if(false === $this->callHook('preSetDefault', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preSetDefault_failed';
return null;
}
$mode = $this->params['mode'];
if(!$document->setDefaultAccess($mode)) {
return false;
}
if(false === $this->callHook('postSetDefault', $document)) {
if(empty($this->errormsg))
$this->errormsg = 'hook_postSetDefault_failed';
return null;
}
return true;
}
public function editaccess() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$settings = $this->params['settings'];
$mode = $this->params['mode'];
$userid = $this->params['userid'];
$groupid = $this->params['groupid'];
if ($userid) {
$document->changeAccess($mode, $userid, true);
}
elseif ($groupid) {
$document->changeAccess($mode, $groupid, false);
}
return true;
}
public function delaccess() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$settings = $this->params['settings'];
$userid = $this->params['userid'];
$groupid = $this->params['groupid'];
if ($userid) {
$document->removeAccess($userid, true);
}
elseif ($groupid) {
$document->removeAccess($groupid, false);
}
return true;
}
public function addaccess() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$folder = $this->params['folder'];
$document = $this->params['document'];
$settings = $this->params['settings'];
$mode = $this->params['mode'];
$userid = $this->params['userid'];
$groupid = $this->params['groupid'];
if ($userid && $userid != -1) {
$document->addAccess($mode, $userid, true);
}
elseif ($groupid && $groupid != -1) {
$document->addAccess($mode, $groupid, false);
}
return true;
}
}

View File

@ -50,6 +50,7 @@ class SeedDMS_Controller_Download extends SeedDMS_Controller_Common {
header("Content-Disposition: attachment; filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
header("Content-Type: " . $content->getMimeType());
header("Cache-Control: must-revalidate");
header("ETag: ".$content->getChecksum());
sendFile($dms->contentDir . $content->getPath());
}

View File

@ -52,7 +52,7 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
$expires = $this->params['expires'];
$oldexpires = $document->getExpires();
if ($expires != $oldexpires) {
if(!$this->callHook('preSetExpires', $document, $expires)) {
if(false === $this->callHook('preSetExpires', $document, $expires)) {
}
if(!$document->setExpires($expires)) {
@ -61,21 +61,21 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
$document->verifyLastestContentExpriry();
if(!$this->callHook('postSetExpires', $document, $expires)) {
if(false === $this->callHook('postSetExpires', $document, $expires)) {
}
}
$keywords = $this->params['keywords'];
$oldkeywords = $document->getKeywords();
if ($oldkeywords != $keywords) {
if(!$this->callHook('preSetKeywords', $document, $keywords, $oldkeywords)) {
if(false === $this->callHook('preSetKeywords', $document, $keywords, $oldkeywords)) {
}
if(!$document->setKeywords($keywords)) {
return false;
}
if(!$this->callHook('postSetKeywords', $document, $keywords, $oldkeywords)) {
if(false === $this->callHook('postSetKeywords', $document, $keywords, $oldkeywords)) {
}
}
@ -95,21 +95,21 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
if (count($categoriesarr) != count($oldcategories) ||
array_diff($categories, $oldcatsids)) {
if(!$this->callHook('preSetCategories', $document, $categoriesarr, $oldcategories)) {
if(false === $this->callHook('preSetCategories', $document, $categoriesarr, $oldcategories)) {
}
if(!$document->setCategories($categoriesarr)) {
return false;
}
if(!$this->callHook('postSetCategories', $document, $categoriesarr, $oldcategories)) {
if(false === $this->callHook('postSetCategories', $document, $categoriesarr, $oldcategories)) {
}
}
} elseif($oldcategories) {
if(!$this->callHook('preSetCategories', $document, array(), $oldcategories)) {
if(false === $this->callHook('preSetCategories', $document, array(), $oldcategories)) {
}
if(!$document->setCategories(array())) {
return false;
}
if(!$this->callHook('postSetCategories', $document, array(), $oldcategories)) {
if(false === $this->callHook('postSetCategories', $document, array(), $oldcategories)) {
}
}
@ -122,10 +122,37 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
if($attribute) {
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_date:
$attribute = date('Y-m-d', makeTsFromDate($attribute));
if(is_array($attribute))
$attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute);
else
$attribute = date('Y-m-d', makeTsFromDate($attribute));
break;
case SeedDMS_Core_AttributeDefinition::type_folder:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute);
else
$attribute = $dms->getFolder((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_document:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute);
else
$attribute = $dms->getDocument((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_user:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute);
else
$attribute = $dms->getUser((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_group:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute);
else
$attribute = $dms->getGroup((int) $attribute);
break;
}
if(!$attrdef->validate($attribute, $document, true)) {
if(!$attrdef->validate($attribute, $document, false)) {
$this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute);
return false;
}
@ -162,6 +189,10 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
}
}
/* There are various hooks in inc/inc.FulltextInit.php which will take
* care of reindexing it. They just delete the indexing date which is
* faster then indexing the folder completely
*
if($fulltextservice && ($index = $fulltextservice->Indexer()) && $document) {
$idoc = $fulltextservice->IndexedDocument($document);
if(false !== $this->callHook('preIndexDocument', $document, $idoc)) {
@ -173,6 +204,7 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
$index->commit();
}
}
*/
} elseif($result === false) {
if(empty($this->errormsg))
@ -180,7 +212,7 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
return false;
}
if(!$this->callHook('postEditDocument')) {
if(false === $this->callHook('postEditDocument')) {
}
return true;

View File

@ -51,27 +51,61 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common {
$oldattributes = $folder->getAttributes();
if($attributes) {
foreach($attributes as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) {
if($attribute) {
if(!$attrdef->validate($attribute, $folder, true)) {
$this->errormsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute);
return false;
}
if($attrdef = $dms->getAttributeDefinition($attrdefid)) {
if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) {
if($attribute) {
switch($attrdef->getType()) {
case SeedDMS_Core_AttributeDefinition::type_date:
if(is_array($attribute))
$attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute);
else
$attribute = date('Y-m-d', makeTsFromDate($attribute));
break;
case SeedDMS_Core_AttributeDefinition::type_folder:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute);
else
$attribute = $dms->getFolder((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_document:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute);
else
$attribute = $dms->getDocument((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_user:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute);
else
$attribute = $dms->getUser((int) $attribute);
break;
case SeedDMS_Core_AttributeDefinition::type_group:
if(is_array($attribute))
$attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute);
else
$attribute = $dms->getGroup((int) $attribute);
break;
}
if(!$attrdef->validate($attribute, $folder, false)) {
$this->errormsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute);
return false;
}
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$folder->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute))
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$folder->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute))
return false;
}
} elseif($attrdef->getMinValues() > 0) {
$this->errormsg = getMLText("attr_min_values", array("attrname"=>$attrdef->getName()));
return false;
} elseif(isset($oldattributes[$attrdefid])) {
if(!$folder->removeAttribute($dms->getAttributeDefinition($attrdefid)))
return false;
}
} else {
if($ret === false)
return false;
}
} elseif($attrdef->getMinValues() > 0) {
$this->errormsg = getMLText("attr_min_values", array("attrname"=>$attrdef->getName()));
} elseif(isset($oldattributes[$attrdefid])) {
if(!$folder->removeAttribute($dms->getAttributeDefinition($attrdefid)))
return false;
}
} else {
if($ret === false)
return false;
}
}
}
@ -90,6 +124,10 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common {
}
}
/* There are various hooks in inc/inc.FulltextInit.php which will take
* care of reindexing it. They just delete the indexing date which is
* faster then indexing the folder completely
*
if($fulltextservice && ($index = $fulltextservice->Indexer()) && $folder) {
$idoc = $fulltextservice->IndexedDocument($folder);
if(false !== $this->callHook('preIndexFolder', $folder, $idoc)) {
@ -101,6 +139,7 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common {
$index->commit();
}
}
*/
} elseif($result === false) {
if(empty($this->errormsg))
@ -108,7 +147,7 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common {
return false;
}
if(!$this->callHook('postEditFolder')) {
if(false === $this->callHook('postEditFolder')) {
}
return true;

View File

@ -22,41 +22,63 @@
*/
class SeedDMS_Controller_EmptyFolder extends SeedDMS_Controller_Common {
public function run() {
/* Register a callback which removes each document/folder from the fulltext index
* The callback must return null otherwise the removal will be canceled.
*/
static function removeFromIndex($arr, $object) { /* {{{ */
$fulltextservice = $arr[0];
$lucenesearch = $fulltextservice->Search();
$hit = null;
if($object->isType('document'))
$hit = $lucenesearch->getDocument($object->getID());
elseif($object->isType('folder'))
$hit = $lucenesearch->getFolder($object->getID());
if($hit) {
$index = $fulltextservice->Indexer();
$index->delete($hit->id);
$index->commit();
}
return null;
} /* }}} */
static function removePreviews($arr, $document) { /* {{{ */
$previewer = $arr[0];
$previewer->deleteDocumentPreviews($document);
return null;
} /* }}} */
public function run() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$settings = $this->params['settings'];
$folder = $this->params['folder'];
$index = $this->params['index'];
$indexconf = $this->params['indexconf'];
$fulltextservice = $this->params['fulltextservice'];
/* Get the document id and name before removing the document */
/* Get the folder id and name before removing the folder */
$foldername = $folder->getName();
$folderid = $folder->getID();
if(false === $this->callHook('preEmptyFolder')) {
if(empty($this->errormsg))
$this->errormsg = 'hook_preEmptyFolder_failed';
return null;
return false;
}
$result = $this->callHook('emptyFolder', $folder);
if($result === null) {
/* Register a callback which removes each document from the fulltext index
* The callback must return null other the removal will be canceled.
*/
function removeFromIndex($arr, $document) {
$index = $arr[0];
$indexconf = $arr[1];
$lucenesearch = new $indexconf['Search']($index);
if($hit = $lucenesearch->getDocument($document->getID())) {
$index->delete($hit->id);
$index->commit();
}
return null;
if($fulltextservice && ($index = $fulltextservice->Indexer())) {
/* Register a callback which is called by SeedDMS_Core when a folder
* or document is removed. The second parameter passed to this callback
* is the document or folder to be removed.
*/
$dms->addCallback('onPreRemoveDocument', 'SeedDMS_Controller_EmptyFolder::removeFromIndex', array($fulltextservice));
$dms->addCallback('onPreRemoveFolder', 'SeedDMS_Controller_EmptyFolder::removeFromIndex', array($fulltextservice));
}
if($index)
$dms->setCallback('onPreEmptyDocument', 'removeFromIndex', array($index, $indexconf));
/* Register another callback which removes the preview images of the document */
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir);
$dms->addCallback('onPreRemoveDocument', 'SeedDMS_Controller_EmptyFolder::removePreviews', array($previewer));
if (!$folder->emptyFolder()) {
$this->errormsg = 'error_occured';
@ -68,9 +90,9 @@ class SeedDMS_Controller_EmptyFolder extends SeedDMS_Controller_Common {
return false;
}
if(!$this->callHook('postEmptyFolder')) {
if(false === $this->callHook('postEmptyFolder')) {
}
return true;
}
} /* }}} */
}

View File

@ -31,97 +31,12 @@ class SeedDMS_Controller_Login extends SeedDMS_Controller_Common {
return self::$user;
} /* }}} */
public function run() { /* {{{ */
$dms = $this->params['dms'];
public function _finalize($user) { /* {{{ */
$settings = $this->params['settings'];
$session = $this->params['session'];
$sesstheme = $this->params['sesstheme'];
$referuri = $this->params['referuri'];
$source = isset($this->params['source']) ? $this->params['source'] : '';
$lang = $this->params['lang'];
$login = $this->params['login'];
$pwd = $this->params['pwd'];
self::$user = null;
/* The preLogin hook may set self::$user which will prevent any further
* authentication process.
*/
if($this->callHook('preLogin')) {
}
$user = self::$user;
/* The password may only be empty if the guest user tries to log in.
* There is just one guest account with id $settings->_guestID which
* is allowed to log in without a password. All other guest accounts
* are treated like regular logins
*/
if(!$user && $settings->_enableGuestLogin && (int) $settings->_guestID) {
$guestUser = $dms->getUser((int) $settings->_guestID);
if(!$guestUser) {
$this->setErrorMsg("login_error_text");
return false;
}
if(($login != $guestUser->getLogin())) {
if ((!isset($pwd) || strlen($pwd)==0)) {
$this->setErrorMsg("login_error_text");
return false;
}
} else {
$user = $guestUser;
}
}
/* Run any additional authentication method. The hook must return a
* valid user, if the authentication succeeded. If it fails, it must
* return false and if the hook doesn't care at all, if must return null.
*/
if(!$user) {
$user = $this->callHook('authenticate');
if(false === $user) {
if(empty($this->errormsg))
$this->setErrorMsg("authentication_failed");
return false;
}
}
/* Deprecated: Run any additional authentication implemented in a hook */
if(!is_object($user) && isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['authentication'] as $authObj) {
if(!$user && method_exists($authObj, 'authenticate')) {
$user = $authObj->authenticate($dms, $settings, $login, $pwd);
if(false === $user) {
if(empty($this->errormsg))
$this->setErrorMsg("authentication_failed");
return false;
}
}
}
}
/* Authenticate against LDAP server {{{ */
if (!is_object($user) && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
require_once("../inc/inc.ClassLdapAuthentication.php");
$authobj = new SeedDMS_LdapAuthentication($dms, $settings);
$user = $authobj->authenticate($login, $pwd);
if(!$user) {
add_log_line('Authentication against LDAP failed for user '.$login);
}
} /* }}} */
/* Authenticate against SeedDMS database {{{ */
if(!is_object($user)) {
require_once("../inc/inc.ClassDbAuthentication.php");
$authobj = new SeedDMS_DbAuthentication($dms, $settings);
$user = $authobj->authenticate($login, $pwd);
} /* }}} */
/* If the user is still not authenticated, then exit with an error */
if(!is_object($user)) {
$this->callHook('loginFailed');
$this->setErrorMsg("login_error_text");
return false;
}
self::$user = $user;
@ -169,73 +84,78 @@ class SeedDMS_Controller_Login extends SeedDMS_Controller_Common {
/* Clear login failures if login was successful */
$user->clearLoginFailures();
// Capture the user's language and theme settings.
if ($lang) {
$user->setLanguage($lang);
} else {
$lang = $user->getLanguage();
if (strlen($lang)==0) {
$lang = $settings->_language;
/* Setting the theme and language and all the cookie handling is
* only done when authentication was requested from a weg page.
*/
if($source == 'web') {
// Capture the user's language and theme settings.
if ($lang) {
$user->setLanguage($lang);
}
}
if ($sesstheme) {
$user->setTheme($sesstheme);
}
else {
$sesstheme = $user->getTheme();
/* Override the theme if the user doesn't have one or the default theme
* shall override it.
*/
if (strlen($sesstheme)==0 || !empty($settings->_overrideTheme)) {
$sesstheme = $settings->_theme;
// $user->setTheme($sesstheme);
}
}
// Delete all sessions that are more than 1 week or the configured
// cookie lifetime old. Probably not the most
// reliable place to put this check -- move to inc.Authentication.php?
if($settings->_cookieLifetime)
$lifetime = intval($settings->_cookieLifetime);
else
$lifetime = 7*86400;
if(!$session->deleteByTime($lifetime)) {
$this->setErrorMsg("error_occured");
return false;
}
if (isset($_COOKIE["mydms_session"])) {
/* This part will never be reached unless the session cookie is kept,
* but op.Logout.php deletes it. Keeping a session could be a good idea
* for retaining the clipboard data, but the user id in the session should
* be set to 0 which is not possible due to foreign key constraints.
* So for now op.Logout.php will delete the cookie as always
*/
/* Load session */
$dms_session = $_COOKIE["mydms_session"];
if(!$resArr = $session->load($dms_session)) {
/* Turn off http only cookies if jumploader is enabled */
setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot, null, false, true); //delete cookie
header("Location: " . $settings->_httpRoot . "out/out.Login.php?referuri=".$referuri);
exit;
} else {
$session->updateAccess($dms_session);
$session->setUser($userid);
$lang = $user->getLanguage();
if (strlen($lang)==0) {
$lang = $settings->_language;
$user->setLanguage($lang);
}
}
} else {
// Create new session in database
if(!$id = $session->create(array('userid'=>$userid, 'theme'=>$sesstheme, 'lang'=>$lang))) {
if ($sesstheme) {
$user->setTheme($sesstheme);
}
else {
$sesstheme = $user->getTheme();
/* Override the theme if the user doesn't have one or the default theme
* shall override it.
*/
if (strlen($sesstheme)==0 || !empty($settings->_overrideTheme)) {
$sesstheme = $settings->_theme;
// $user->setTheme($sesstheme);
}
}
// Delete all sessions that are more than 1 week or the configured
// cookie lifetime old. Probably not the most
// reliable place to put this check -- move to inc.Authentication.php?
if($settings->_cookieLifetime)
$lifetime = intval($settings->_cookieLifetime);
else
$lifetime = 7*86400;
if(!$session->deleteByTime($lifetime)) {
$this->setErrorMsg("error_occured");
return false;
}
// Set the session cookie.
if($settings->_cookieLifetime)
$lifetime = time() + intval($settings->_cookieLifetime);
else
$lifetime = 0;
setcookie("mydms_session", $id, $lifetime, $settings->_httpRoot, null, false, true);
if (isset($_COOKIE["mydms_session"])) {
/* This part will never be reached unless the session cookie is kept,
* but op.Logout.php deletes it. Keeping a session could be a good idea
* for retaining the clipboard data, but the user id in the session should
* be set to 0 which is not possible due to foreign key constraints.
* So for now op.Logout.php will delete the cookie as always
*/
/* Load session */
$dms_session = $_COOKIE["mydms_session"];
if(!$resArr = $session->load($dms_session)) {
/* Turn off http only cookies if jumploader is enabled */
setcookie("mydms_session", $dms_session, time()-3600, $settings->_httpRoot, null, false, true); //delete cookie
header("Location: " . $settings->_httpRoot . "out/out.Login.php?referuri=".$referuri);
exit;
} else {
$session->updateAccess($dms_session);
$session->setUser($userid);
}
} else {
// Create new session in database
if(!$id = $session->create(array('userid'=>$userid, 'theme'=>$sesstheme, 'lang'=>$lang))) {
$this->setErrorMsg("error_occured");
return false;
}
// Set the session cookie.
if($settings->_cookieLifetime)
$lifetime = time() + intval($settings->_cookieLifetime);
else
$lifetime = 0;
setcookie("mydms_session", $id, $lifetime, $settings->_httpRoot, null, false, true);
}
}
if($this->callHook('postLogin', $user)) {
@ -243,4 +163,114 @@ class SeedDMS_Controller_Login extends SeedDMS_Controller_Common {
return true;
} /* }}} */
public function run() { /* {{{ */
$dms = $this->params['dms'];
$settings = $this->params['settings'];
$session = $this->params['session'];
$authenticator = $this->params['authenticator'];
$source = isset($this->params['source']) ? $this->params['source'] : '';
$sesstheme = $this->getParam('sesstheme');
$referuri = $this->getParam('referuri');
$lang = $this->getParam('lang');
$login = $this->params['login'];
$pwd = $this->params['pwd'];
self::$user = null;
/* The preLogin hook may set self::$user which will prevent any further
* authentication process.
*/
if($this->callHook('preLogin')) {
}
$user = self::$user;
/* The password may only be empty if the guest user tries to log in.
* There is just one guest account with id $settings->_guestID which
* is allowed to log in without a password. All other guest accounts
* are treated like regular logins
*/
if(!$user && $settings->_enableGuestLogin && (int) $settings->_guestID) {
$guestUser = $dms->getUser((int) $settings->_guestID);
if($guestUser) {
if(($login != $guestUser->getLogin())) {
if ((!isset($pwd) || strlen($pwd)==0)) {
$this->setErrorMsg("login_error_text");
return false;
}
} else {
$user = $guestUser;
}
}
}
/* Run any additional authentication method. The hook must return a
* valid user, if the authentication succeeded. If it fails, it must
* return false and if the hook doesn't care at all, if must return null.
*/
if(!$user) {
$user = $this->callHook('authenticate', $source);
if(false === $user) {
if(empty($this->errormsg))
$this->setErrorMsg("authentication_failed");
return false;
}
}
/* Deprecated: Run any additional authentication implemented in a hook */
if(!is_object($user) && isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['authentication'] as $authObj) {
if(!$user && method_exists($authObj, 'authenticate')) {
$user = $authObj->authenticate($dms, $settings, $login, $pwd);
if(false === $user) {
if(empty($this->errormsg))
$this->setErrorMsg("authentication_failed");
return false;
}
}
}
}
if(!is_object($user))
$user = $authenticator->authenticate($login, $pwd);
if(0) {
/* Authenticate against LDAP server {{{ */
if (!is_object($user) && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
require_once("../inc/inc.ClassLdapAuthentication.php");
$authobj = new SeedDMS_LdapAuthentication($dms, $settings);
$user = $authobj->authenticate($login, $pwd);
if(!$user) {
add_log_line('Authentication against LDAP failed for user '.$login);
}
} /* }}} */
/* Authenticate against SeedDMS database {{{ */
if(!is_object($user)) {
require_once("../inc/inc.ClassDbAuthentication.php");
$authobj = new SeedDMS_DbAuthentication($dms, $settings);
$user = $authobj->authenticate($login, $pwd);
} /* }}} */
}
/* If the user is still not authenticated, then exit with an error */
if(!is_object($user)) {
/* if counting of login failures is turned on, then increment its value */
if($settings->_loginFailure) {
$user = $dms->getUserByLogin($login);
if($user) {
$failures = $user->addLoginFailure();
if($failures >= $settings->_loginFailure)
$user->setDisabled(true);
}
}
$this->callHook('loginFailed');
$this->setErrorMsg("login_error_text");
return false;
}
return self::_finalize($user);
} /* }}} */
}

View File

@ -27,6 +27,7 @@ class SeedDMS_Controller_PdfPreview extends SeedDMS_Controller_Common {
$dms = $this->params['dms'];
$type = $this->params['type'];
$settings = $this->params['settings'];
$conversionmgr = $this->params['conversionmgr'];
switch($type) {
case "version":
@ -51,7 +52,10 @@ class SeedDMS_Controller_PdfPreview extends SeedDMS_Controller_Common {
$this->params['content'] = $content;
if(null === $this->callHook('version')) {
$previewer = new SeedDMS_Preview_PdfPreviewer($settings->_cacheDir, $settings->_cmdTimeout);
$previewer->setConverters(isset($settings->_converters['pdf']) ? $settings->_converters['pdf'] : array());
if($conversionmgr)
$previewer->setConversionMgr($conversionmgr);
else
$previewer->setConverters(isset($settings->_converters['pdf']) ? $settings->_converters['pdf'] : array());
$previewer->setXsendfile($settings->_enableXsendfile);
if(!$previewer->hasPreview($content)) {
add_log_line("");

View File

@ -22,89 +22,93 @@
*/
class SeedDMS_Controller_Preview extends SeedDMS_Controller_Common {
public function run() {
global $theme;
public function version() { /* {{{ */
$dms = $this->params['dms'];
$type = $this->params['type'];
$settings = $this->params['settings'];
$conversionmgr = $this->params['conversionmgr'];
switch($type) {
case "version":
$version = $this->params['version'];
$document = $this->params['document'];
$width = $this->params['width'];
if($version < 1) {
$content = $this->callHook('documentLatestContent', $document);
if($content === null)
$content = $document->getLatestContent();
} else {
$content = $this->callHook('documentContent', $document, $version);
if($content === null)
$content = $document->getContentByVersion($version);
}
if (!is_object($content)) {
$this->errormsg = 'invalid_version';
return false;
}
/* set params['content'] for compatiblity with older extensions which
* expect the content in the controller
*/
$this->params['content'] = $content;
if(null === $this->callHook('version')) {
if($width)
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width, $settings->_cmdTimeout);
else
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir);
$previewer->setConverters($settings->_converters['preview']);
$previewer->setXsendfile($settings->_enableXsendfile);
if(!$previewer->hasPreview($content)) {
add_log_line("");
if(!$previewer->createPreview($content)) {
add_log_line("", PEAR_LOG_ERR);
}
}
if(!$previewer->hasPreview($content)) {
header('Content-Type: image/svg+xml');
readfile('../views/'.$theme.'/images/empty.svg');
exit;
}
header('Content-Type: image/png');
$previewer->getPreview($content);
}
break;
case "file":
$object = $this->params['object'];
$document = $this->params['document'];
$width = $this->params['width'];
if (!is_object($object)) {
$this->errormsg = 'invalid_version';
return false;
}
if(null === $this->callHook('file')) {
if($width)
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width, $settings->_cmdTimeout);
else
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir);
$previewer->setConverters($settings->_converters['preview']);
$previewer->setXsendfile($settings->_enableXsendfile);
if(!$previewer->hasPreview($object)) {
add_log_line("");
if(!$previewer->createPreview($object)) {
add_log_line("", PEAR_LOG_ERR);
}
}
if(!$previewer->hasPreview($object)) {
header('Content-Type: image/svg+xml');
readfile('../views/'.$theme.'/images/empty.svg');
exit;
}
header('Content-Type: image/png');
$previewer->getPreview($object);
}
break;
$version = $this->params['version'];
$document = $this->params['document'];
$width = $this->params['width'];
if($version < 1) {
$content = $this->callHook('documentLatestContent', $document);
if($content === null)
$content = $document->getLatestContent();
} else {
$content = $this->callHook('documentContent', $document, $version);
if($content === null)
$content = $document->getContentByVersion($version);
}
return true;
}
if (!is_object($content)) {
$this->errormsg = 'invalid_version';
return false;
}
/* set params['content'] for compatiblity with older extensions which
* expect the content in the controller
*/
$this->params['content'] = $content;
if(null === $this->callHook('version')) {
if($width)
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width, $settings->_cmdTimeout);
else
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir);
if($conversionmgr)
$previewer->setConversionMgr($conversionmgr);
else
$previewer->setConverters($settings->_converters['preview']);
$previewer->setXsendfile($settings->_enableXsendfile);
if(!$previewer->hasPreview($content)) {
add_log_line("");
if(!$previewer->createPreview($content)) {
add_log_line("", PEAR_LOG_ERR);
}
}
if(!$previewer->hasPreview($content)) {
return false;
}
header('Content-Type: image/png');
$previewer->getPreview($content);
return true;
}
} /* }}} */
public function file() { /* {{{ */
$dms = $this->params['dms'];
$settings = $this->params['settings'];
$conversionmgr = $this->params['conversionmgr'];
$object = $this->params['object'];
$document = $this->params['document'];
$width = $this->params['width'];
if (!is_object($object)) {
$this->errormsg = 'invalid_version';
return false;
}
if(null === $this->callHook('file')) {
if($width)
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir, $width, $settings->_cmdTimeout);
else
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir);
if($conversionmgr)
$previewer->setConversionMgr($conversionmgr);
else
$previewer->setConverters($settings->_converters['preview']);
$previewer->setXsendfile($settings->_enableXsendfile);
if(!$previewer->hasPreview($object)) {
add_log_line("");
if(!$previewer->createPreview($object)) {
add_log_line("", PEAR_LOG_ERR);
}
}
if(!$previewer->hasPreview($object)) {
return false;
}
header('Content-Type: image/png');
$previewer->getPreview($object);
return true;
}
} /* }}} */
}

View File

@ -43,6 +43,8 @@ class SeedDMS_Controller_RemoveDocument extends SeedDMS_Controller_Common {
$result = $this->callHook('removeDocument', $document);
if($result === null) {
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir);
$previewer->deleteDocumentPreviews($document);
if (!$document->remove()) {
if($dms->lasterror)
$this->errormsg = $dms->lasterror;
@ -65,7 +67,7 @@ class SeedDMS_Controller_RemoveDocument extends SeedDMS_Controller_Common {
}
}
if(!$this->callHook('postRemoveDocument')) {
if(false === $this->callHook('postRemoveDocument')) {
}
return true;

View File

@ -22,14 +22,40 @@
*/
class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common {
public function run() {
/* Register a callback which removes each document/folder from the fulltext index
* The callback must return null otherwise the removal will be canceled.
*/
static function removeFromIndex($arr, $object) { /* {{{ */
$fulltextservice = $arr[0];
$lucenesearch = $fulltextservice->Search();
$hit = null;
if($object->isType('document'))
$hit = $lucenesearch->getDocument($object->getID());
elseif($object->isType('folder'))
$hit = $lucenesearch->getFolder($object->getID());
if($hit) {
$index = $fulltextservice->Indexer();
$index->delete($hit->id);
$index->commit();
}
return null;
} /* }}} */
static function removePreviews($arr, $document) { /* {{{ */
$previewer = $arr[0];
$previewer->deleteDocumentPreviews($document);
return null;
} /* }}} */
public function run() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$settings = $this->params['settings'];
$folder = $this->params['folder'];
$fulltextservice = $this->params['fulltextservice'];
/* Get the document id and name before removing the document */
/* Get the folder id and name before removing the folder */
$foldername = $folder->getName();
$folderid = $folder->getID();
@ -41,38 +67,18 @@ class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common {
$result = $this->callHook('removeFolder', $folder);
if($result === null) {
/* Register a callback which removes each document from the fulltext index
* The callback must return null other the removal will be canceled.
*/
function removeFromIndex($arr, $document) {
$fulltextservice = $arr[0];
$lucenesearch = $fulltextservice->Search();
$hit = null;
if($document->isType('document'))
$hit = $lucenesearch->getDocument($document->getID());
elseif($document->isType('folder'))
$hit = $lucenesearch->getFolder($document->getID());
if($hit) {
$index = $fulltextservice->Indexer();
$index->delete($hit->id);
$index->commit();
}
return null;
}
if($fulltextservice && ($index = $fulltextservice->Indexer())) {
$dms->addCallback('onPreRemoveDocument', 'removeFromIndex', array($fulltextservice));
$dms->addCallback('onPreRemoveFolder', 'removeFromIndex', array($fulltextservice));
/* Register a callback which is called by SeedDMS_Core when a folder
* or document is removed. The second parameter passed to this callback
* is the document or folder to be removed.
*/
$dms->addCallback('onPreRemoveDocument', 'SeedDMS_Controller_RemoveFolder::removeFromIndex', array($fulltextservice));
$dms->addCallback('onPreRemoveFolder', 'SeedDMS_Controller_RemoveFolder::removeFromIndex', array($fulltextservice));
}
function removePreviews($arr, $document) {
$previewer = $arr[0];
$previewer->deleteDocumentPreviews($document);
return null;
}
require_once("SeedDMS/Preview.php");
/* Register another callback which removes the preview images of the document */
$previewer = new SeedDMS_Preview_Previewer($settings->_cacheDir);
$dms->addCallback('onPreRemoveDocument', 'removePreviews', array($previewer));
$dms->addCallback('onPreRemoveDocument', 'SeedDMS_Controller_RemoveFolder::removePreviews', array($previewer));
if (!$folder->remove()) {
$this->errormsg = 'error_occured';
@ -84,9 +90,9 @@ class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common {
return false;
}
if(!$this->callHook('postRemoveFolder')) {
if(false === $this->callHook('postRemoveFolder')) {
}
return true;
}
} /* }}} */
}

View File

@ -7,70 +7,70 @@
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @copyright Copyright (C) 2010-2023 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class which does the busines logic for downloading a document
* Class which does the busines logic for reviewing a document
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @copyright Copyright (C) 2010-2023 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_ReviewDocument extends SeedDMS_Controller_Common {
public function run() {
public function run() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$settings = $this->params['settings'];
$document = $this->params['document'];
$content = $this->params['content'];
$reviewstatus = $this->params['reviewstatus'];
$reviewtype = $this->params['reviewtype'];
$group = $this->params['group'];
$comment = $this->params['comment'];
$file = $this->params['file'];
/* Get the document id and name before removing the document */
$docname = $document->getName();
$documentid = $document->getID();
$reviewtype = $this->params['type'];
$reviewstatus = $this->params['status'];
$reviewcomment = $this->params['comment'];
$reviewfile = $this->params['file'];
$reviewgroup = $this->params['group'];
$overallStatus = $content->getStatus();
$this->oldstatus = $overallStatus['status'];
$this->newstatus = $this->oldstatus;
if(!$this->callHook('preReviewDocument', $content)) {
}
$result = $this->callHook('reviewDocument', $content);
if($result === null) {
if ($reviewtype == "ind") {
if(0 > $content->setReviewByInd($user, $user, $reviewstatus, $comment, $file)) {
$this->error = 1;
$this->errormsg = "review_update_failed";
return false;
}
} elseif ($reviewtype == "grp") {
if(0 > $content->setReviewByGrp($group, $user, $reviewstatus, $comment, $file)) {
$this->error = 1;
$this->errormsg = "review_update_failed";
return false;
}
$reviewLogID = $content->setReviewByInd($user, $user, $reviewstatus, $reviewcomment, $reviewfile);
} elseif($reviewtype == "grp") {
$reviewLogID = $content->setReviewByGrp($reviewgroup, $user, $reviewstatus, $reviewcomment, $reviewfile);
} else {
$this->errormsg = "review_wrong_type";
return false;
}
if($reviewLogID === false || 0 > $reviewLogID) {
$this->errormsg = "review_update_failed";
return false;
}
}
/* Check to see if the overall status for the document version needs to be
* updated.
*/
$result = $this->callHook('reviewUpdateDocumentStatus', $content);
if($result === null) {
if ($reviewstatus == -1){
if($content->setStatus(S_REJECTED,$comment,$user)) {
if($reviewstatus == -1) {
$this->newstatus = S_REJECTED;
if($content->setStatus(S_REJECTED, $reviewcomment, $user)) {
if(isset($GLOBALS['SEEDDMS_HOOKS']['reviewDocument'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['reviewDocument'] as $hookObj) {
if (method_exists($hookObj, 'postReviewDocument')) {
$hookObj->postReviewDocument(null, $content, S_REJECTED);
}
}
}
}
} else {
$docReviewStatus = $content->getReviewStatus();
if (is_bool($docReviewStatus) && !$docReviewStatus) {
$this->error = 1;
$this->errormsg = "cannot_retrieve_review_snapshot";
return false;
}
@ -89,32 +89,35 @@ class SeedDMS_Controller_ReviewDocument extends SeedDMS_Controller_Common {
if ($reviewCT == $reviewTotal) {
$docApprovalStatus = $content->getApprovalStatus();
if (is_bool($docApprovalStatus) && !$docApprovalStatus) {
$this->error = 1;
$this->errormsg = "cannot_retrieve_approval_snapshot";
return false;
}
$approvalCT = 0;
$approvalTotal = 0;
foreach ($docApprovalStatus as $dastat) {
if ($dastat["status"] == 1) {
foreach($docApprovalStatus as $dastat) {
if($dastat["status"] == 1) {
$approvalCT++;
}
if ($dastat["status"] != -2) {
if($dastat["status"] != -2) {
$approvalTotal++;
}
}
// If the approvals received is less than the approvals total, then
// change status to pending approval.
if ($approvalCT<$approvalTotal) {
$newStatus=S_DRAFT_APP;
}
else {
if($approvalCT < $approvalTotal) {
$this->newstatus = S_DRAFT_APP;
} else {
// Otherwise, change the status to released.
$newStatus=S_RELEASED;
$this->newstatus = S_RELEASED;
}
if ($content->setStatus($newStatus, getMLText("automatic_status_update"), $user)) {
// Send notification to subscribers.
if($content->setStatus($this->newstatus, getMLText("automatic_status_update"), $user)) {
if(isset($GLOBALS['SEEDDMS_HOOKS']['reviewDocument'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['reviewDocument'] as $hookObj) {
if (method_exists($hookObj, 'postReviewDocument')) {
$hookObj->postReviewDocument(null, $content, $this->newstatus);
}
}
}
}
}
}
@ -124,6 +127,5 @@ class SeedDMS_Controller_ReviewDocument extends SeedDMS_Controller_Common {
}
return true;
}
} /* }}} */
}

View File

@ -22,6 +22,10 @@
*/
class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common {
public $oldstatus;
public $newstatus;
public function run() {
$dms = $this->params['dms'];
$user = $this->params['user'];
@ -32,6 +36,9 @@ class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common {
$revisiontype = $this->params['revisiontype'];
$group = $this->params['group'];
$comment = $this->params['comment'];
$overallStatus = $content->getStatus();
$this->oldstatus = $overallStatus['status'];
$this->newstatus = $this->oldstatus;
/* if set to true, a single reject will reject the doc. If set to false
* all revisions will be collected first and afterwards the doc is rejected
@ -71,6 +78,7 @@ class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common {
$result = $this->callHook('reviseUpdateDocumentStatus', $content);
if($result === null) {
if ($onevotereject && $revisionstatus == -1){
$this->newstatus = S_NEEDS_CORRECTION;
if(!$content->setStatus(S_NEEDS_CORRECTION,$comment,$user)) {
$this->error = 1;
$this->errormsg = "revision_update_failed";
@ -102,22 +110,22 @@ class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common {
// of them were rejections then documents needs correction.
// Otherwise put it back into revision workflow
if ($revisionok == $revisionTotal) {
$newStatus=S_RELEASED;
if ($content->finishRevision($user, $newStatus, 'Finished revision workflow', getMLText("automatic_status_update"))) {
$this->newstatus=S_RELEASED;
if ($content->finishRevision($user, $this->newstatus, 'Finished revision workflow', getMLText("automatic_status_update"))) {
if(!$this->callHook('finishReviseDocument', $content)) {
}
}
} elseif (($revisionok + $revisionnotok) == $revisionTotal) {
$newStatus=S_NEEDS_CORRECTION;
// if ($content->finishRevision($user, $newStatus, 'Finished revision workflow', getMLText("automatic_status_update"))) {
if(!$content->setStatus($newStatus,$comment,$user)) {
$this->newstatus=S_NEEDS_CORRECTION;
// if ($content->finishRevision($user, $this->newstatus, 'Finished revision workflow', getMLText("automatic_status_update"))) {
if(!$content->setStatus($this->newstatus,$comment,$user)) {
$this->error = 1;
$this->errormsg = "revision_update_failed";
return false;
}
} else {
$newStatus=S_IN_REVISION;
if(!$content->setStatus($newStatus,$comment,$user)) {
$this->newstatus=S_IN_REVISION;
if(!$content->setStatus($this->newstatus,$comment,$user)) {
$this->error = 1;
$this->errormsg = "revision_update_failed";
return false;

View File

@ -42,7 +42,7 @@ class SeedDMS_Controller_TransferDocument extends SeedDMS_Controller_Common {
if (!$document->transferToUser($newuser)) {
return false;
} else {
if(!$this->callHook('postTransferDocument')) {
if(false === $this->callHook('postTransferDocument')) {
}
}
}

View File

@ -39,10 +39,11 @@ class SeedDMS_Controller_TransmittalDownload extends SeedDMS_Controller_Common {
$document = $content->getDocument();
if ($document->getAccessMode($user) >= M_READ) {
$extracols = $this->callHook('extraDownloadColumns', $document);
$filename = $this->callHook('filenameDownloadItem', $content);
if($rawcontent = $this->callHook('rawcontent', $content)) {
$downmgr->addItem($content, $extracols, $rawcontent);
$downmgr->addItem($content, $extracols, $rawcontent, $filename);
} else
$downmgr->addItem($content, $extracols);
$downmgr->addItem($content, $extracols, null, $filename);
}
}

View File

@ -59,7 +59,7 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common {
$content = $this->callHook('updateDocument');
if($content === null) {
$filesize = SeedDMS_Core_File::fileSize($userfiletmp);
if($contentResult=$document->addContent($comment, $user, $userfiletmp, utf8_basename($userfilename), $filetype, $userfiletype, $reviewers, $approvers, $version=0, $attributes, $workflow, $initialdocumentstatus)) {
if($contentResult=$document->addContent($comment, $user, $userfiletmp, utf8_basename($userfilename), $filetype, $userfiletype, $reviewers, $approvers, 0, $attributes, $workflow, $initialdocumentstatus)) {
if ($this->hasParam('expires')) {
if($document->setExpires($this->getParam('expires'))) {
@ -105,7 +105,7 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common {
}
}
if(!$this->callHook('postUpdateDocument', $document, $content)) {
if(false === $this->callHook('postUpdateDocument', $document, $content)) {
}
return $content;

View File

@ -49,16 +49,19 @@ class SeedDMS_Controller_ViewOnline extends SeedDMS_Controller_Common {
*/
$this->params['content'] = $content;
if(null === $this->callHook('version')) {
header("Content-Type: " . $content->getMimeType());
$efilename = rawurlencode($content->getOriginalFileName());
if (!isset($settings->_viewOnlineFileTypes) || !is_array($settings->_viewOnlineFileTypes) || !in_array(strtolower($content->getFileType()), $settings->_viewOnlineFileTypes)) {
header("Content-Disposition: attachment; filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
} else {
header("Content-Disposition: filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
}
header("Cache-Control: must-revalidate");
if(file_exists($dms->contentDir . $content->getPath())) {
header("Content-Type: " . $content->getMimeType());
$efilename = rawurlencode($content->getOriginalFileName());
if (!isset($settings->_viewOnlineFileTypes) || !is_array($settings->_viewOnlineFileTypes) || !in_array(strtolower($content->getFileType()), $settings->_viewOnlineFileTypes)) {
header("Content-Disposition: attachment; filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
} else {
header("Content-Disposition: filename=\"" . $efilename . "\"; filename*=UTF-8''".$efilename);
}
header("Cache-Control: must-revalidate");
header("ETag: ".$content->getChecksum());
sendFile($dms->contentDir.$content->getPath());
sendFile($dms->contentDir.$content->getPath());
}
}
break;
}

View File

@ -1,3 +1,31 @@
Commands for converting documents
----------------------------------
This file contains commands for converting different document types
into
* text (for fulltext search)
* png (for preview images)
* pdf (for pdf documents)
Such conversions may not necessarily output an excact equivalent of
the input file, but outputs a suitable representation, e.g.
converting an mp3 file into text may output the metadata or even the
lyrics of the song. Converting it into a preview image may result
in a picture of the album cover.
Please note, that when ever a command outputs anything to stderr,
this will considered as a failure of the command. Most command line
programs have a parameter (.e.g. `-q`) to suppress such an output.
If you run php-fpm you may encounter problems with charsets based on
UTF-8. Programms like `catdoc` read LANG from the environment to
set the correct encoding of the output. php-fpm often clears the
environment and programms like `catdoc` will not longer output any
UTF-8 chars. In such a case you may want to set `clear_env=no` in
php-fpm's configuration. On Debian this is done in the file
`/etc/php/<php version>/fpm/pool.d/www.conf`. Search for `clear_env`.
Conversion to text for fulltext search
=======================================
@ -7,7 +35,13 @@ application/csv
cat '%s'
application/pdf
pdftotext -nopgbrk %s - | sed -e 's/ [a-zA-Z0-9.]\{1\} / /g' -e 's/[0-9.]//g'
pdftotext -q -nopgbrk %s - | sed -e 's/ [a-zA-Z0-9.]\{1\} / /g' -e 's/[0-9.]//g'
If pdftotext takes too long on large document you may want to pass parameter
-l to specify the last page to be converted. -q is for suppressing error/warnings
send to stderr
mutool draw -F txt -q -N -o - %s
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx2txt '%s' -
@ -15,11 +49,14 @@ application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/msword
catdoc %s
application/vnd.oasis.opendocument.text
odt2txt %s
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx2csv %s
xlsx2csv -d tab %s
application/vnd.ms-excel
xls2csv %s
xls2csv -d tab %s
text/html
html2text %s
@ -27,6 +64,12 @@ text/html
Many office formats
unoconv -d document -f txt --stdout '%s'
Apache Tika is another option for creating plain text from various document
types. Just use curl to send the document to your tika server and get the
plain text in return.
curl -s -T '%s' http://localhost:9998/tika --header 'Accept: text/plain'
Conversion to pdf for pdf preview
==================================
@ -42,7 +85,10 @@ text/rtf
image/png
image/jpg
image/jpeg
convert -f pdf -density 300 '%f' '%o'
convert -density 300 '%f' 'pdf:%o'
image/svg+xml
cairosvg -f pdf -o '%o' '%f'
application/vnd.ms-powerpoint
application/vnd.openxmlformats-officedocument.presentationml.presentation
@ -54,6 +100,26 @@ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.oasis.opendocument.spreadsheet
unoconv -d spreadsheet -f pdf --stdout -v '%f' > '%o'
message/rfc822
java -jar emailconverter-2.5.3-all.jar '%f' -o '%o'
The emailconverter can be obtained from https://github.com/nickrussler/email-to-pdf-converter
It requires wkhtmltopdf which is part of debian.
text/plain
iconv -c -f utf-8 -t latin1 '%f' | a2ps -1 -q -a1 -R -B -o - - | ps2pdf - -
The parameter `-q` is important because a2ps sends some statistical
data to stderr, which makes SeedDMS believe the command has failed.
application/x-xopp
xournalpp -p "%o" "%f"
Converting from application/x-xopp to pdf only works if the xopp file
does not use a pdf document as a background, because this pdf is not
stored in the xopp fіle.
Conversion to png for preview images
=====================================
@ -65,16 +131,44 @@ It basically instructs you to comment out the line
in /etc/ImageMagick-6/policy.xml
convert determines the format of the converted image from the extension of
the output filename. SeedDMS usually sets a propper extension when running
the command, but nevertheless it is good practice to explicitly set the output
format by prefixing the output filename with 'png:'. This is of course always
needed if the output goes to stdout.
image/jpg
image/jpeg
image/png
convert -resize %wx '%f' '%o'
convert -resize %wx '%f' 'png:%o'
image/svg+xml
cairosvg -f png --output-width %w -o '%o' '%f'
text/plain
convert -density 100 -resize %wx 'text:%f[0]' 'png:%o'
application/pdf
gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q '%f' | convert -resize %wx png:- '%o'
convert -density 100 -resize %wx '%f[0]' 'png:%o'
mutool draw -F png -w %w -q -N -o '%o' '%f' 1
pdftocairo '%f' -png -singlefile -scale-to-x %w -scale-to-y -1 - > '%o'
pdftocairo needs to output to stdout because the output file name passed
to pdftocairo will be suffixed with png
application/postscript
convert -density 100 -resize %wx '%f[0]' 'png:%o'
text/plain
a2ps -1 -a1 -R -B -o - '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dFirstPage=1 -dLastPage=1 -dPDFFitPage -r72x72 -sOutputFile=- -q - | convert -resize %wx png:- '%o'
iconv -c -f utf-8 -t latin1 '%f' | a2ps -1 -q -a1 -R -B -o - - | gs -dBATCH -dNOPAUSE -sDEVICE=png16m -dFirstPage=1 -dLastPage=1 -dPDFFitPage -r72x72 -sOutputFile=- -q - | convert -resize %wx png:- 'png:%o'
On Linux systems you will have to set the desired value in /etc/papersize for a2ps
e.g. a4, or letter. Unfortunately, a2ps cannot process utf-8 encoded files. That's
why the input needs to be recoded with iconv or recode.
application/msword
application/vnd.oasis.opendocument.spreadsheet
@ -87,5 +181,26 @@ application/vnd.ms-powerpoint
text/csv
application/csv
application/vnd.wordperfect
unoconv -d document -e PageRange=1 -f pdf --stdout -v '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q - | convert -resize %wx png:- '%o'
unoconv -d document -e PageRange=1 -f pdf --stdout -v '%f' | gs -dBATCH -dNOPAUSE -sDEVICE=pngalpha -dPDFFitPage -r72x72 -sOutputFile=- -dFirstPage=1 -dLastPage=1 -q - | convert -resize %wx png:- 'png:%o'
video/webm
video/mp4
This will take 12th frame of a video and converts into a png. It requires
ffmpeg to be installed.
convert -resize %wx "%f[12]" "png:%o"
You may as well use ffmpeg right away
ffmpeg -i "%f" -ss 00:00:02 -frames:v 1 -loglevel quiet -vf scale=%w:-1 -f apng "%o"
audio/mpeg
sox "%f" -n spectrogram -x 600 -Y 550 -r -l -o - | convert -resize %wx png:- "png:%o"
application/x-xopp
xournalpp -i "%o" --export-png-width=%w "%f"
Converting from application/x-xopp to png only works if the xopp file
does not use a pdf document as a background, because this pdf is not
stored in the xopp fіle.

View File

@ -5,23 +5,23 @@ REQUIREMENTS
============
SeedDMS is a web-based application written in PHP. It uses MySQL,
sqlite3 or postgresql to manage the documents that were uploaded into
the application. Be aware that postgresql is not very well tested.
SQLite3 or PostgreSQL to manage the documents that were uploaded into
the application. Be aware that PostgreSQL is not very well tested.
Make sure you have PHP 7.x and MySQL 5 or higher installed. SeedDMS
Make sure you have PHP >= 8.2 and MySQL 5 or higher installed. SeedDMS
will work with PHP running in CGI-mode as well as running as a module under
apache.
Here is a detailed list of requirements:
1. A web server with at least php 7.0
2. A mysql database, unless you use sqlite
1. A web server with at least php 8.2
2. A mysql database, unless you use SQLite
3. The php installation must have support for `pdo_mysql`, `pdo_pgsql` or `pdo_sqlite`,
`php_gd2`, `php_mbstring`, `php_xml`
4. Depending on the configuration the extensions `php_ldap`, `php_mycrypt`,
`php_gmp`, `php_libsodium`must be installed
`php_gmp`, `php_libsodium`, `php_imagick` must be installed
5. Various command line programms to convert files into text for indexing
pdftotext, catdoc, xls2csv or scconvert, cat, id3 (optional, only needed
pdftotext, catdoc, xls2csv or scconvert, cat, id3 (all optional, only needed
for fulltext search)
6. ImageMagic (the convert program) is needed for creating preview images
7. A bunch of packages from Packagist which all ship with the seeddms-quickstart
@ -29,20 +29,32 @@ Here is a detailed list of requirements:
It is highly recommended to use the quickstart archive
(seeddms-quickstart-x.y.z.tar.gz) because it includes all software packages
(excluding those listing above in item 1. to 6.) for running SeedDMS. Hence,
you still need a working web server with PHP and a mysql or postgres database
unless you intend to use sqlite.
(excluding those listed above in item 1. to 6.) for running SeedDMS. Hence,
you still need a working web server with PHP and in addition a mysql or
PostgreSQL database unless you intend to use SQLite.
QUICKSTART
===========
The fastes way to get SeedDMS running is by unpacking the archive
`seeddms-quickstart-x.y.z.tar.gz` on your webserver.
Let's assume you use seeddms-quickstart-5.1.10.tar.gz.
Let's assume you use seeddms-quickstart-5.1.x.tar.gz.
It will create a new directory `seeddms51x` containing everything you
need to run SeedDMS with sqlite3.
need to run SeedDMS with SQLite3. Even if you intend to use mysql in the
long run it is advisable to first set up SeedDMS with SQLite3 and than
just switch the database.
Setting up the web server
--------------------------
First of all you will need to set up your web server. Here, we will only focus
on apache running on Debian/GNU Linux.
Either let the document root of your web server point to the directory `www`
below `seeddms51x` or add an alias. For apache this could be like
below `seeddms51x`
DocumentRoot /var/www/seeddms51x/www
or add an alias. For apache this could be like
Alias /seeddms51x /<some directory>/seeddms51x/www
@ -52,11 +64,16 @@ Alias /mydms /<some directory>/seeddms51x/www
Do not set the DocumentRoot or Alias to
the `seeddms51x` directory, because this will allow anybody to access
your `data` and `conf` directory. This is a major security risk.
your `data` and `conf` directory if it is not secured by a .htaccess file.
This is a major security risk.
Make sure that the subdirectory `seeddms51x/data` and the configuration file
`seeddms51/conf/settings.xml` is writeable by your web server. All other
directories must just be readable by your web server.
directories can be just readable by your web server, though it is advisable
to even protect them from writing.
Adjusting the configuration of SeedDMS
---------------------------------------
In the next step you need to adjust the configuration file in
`seeddms51x/conf/settings.xml`. Open the file in your favorite text editor
@ -69,9 +86,9 @@ set an alias like described above).
It will first ask to unlock the installer by creating a file
`ENABLE_INSTALL_TOOL` in the diretory `seeddms51x/conf/`. Change all paths by
replacing `/home/wwww-data` with your base directory where you put seeddms51x.
Set httpRoot to '/' (if the document root points to`seeddms51x/www`) or
'/seeddms51x' (if you have set an alias like described above).
replacing `/home/www-data` with your base directory where you put seeddms51x.
Set httpRoot to `/` (if the document root points to `seeddms51x/www`) or
`/seeddms51x` (if you have set an alias `seeddms51x` like described above).
Once your configuration is done,
save it, remove the file `ENABLE_INSTALL_TOOL` and point your browser to
@ -80,11 +97,11 @@ http://your-domain/ or http://your-domain/seeddms51x.
SECURITY CONSIDERATIONS
=======================
First of all you should always access your SeedDMS installation through
a secured https connection, unless you know precisly what are you doing.
SeedDMS ships an .htaccess file which already has some common security
You should always access your SeedDMS installation through
a secured https connection, unless you precisly know what you are doing.
SeedDMS ships an `.htaccess` file which already has some common security
http headers set. In order for them to apply you need to activate the
headers module. On Debian this can be done with
headers module. On Debian/GNU Linux this can be done with
```
a2enmod headers
@ -94,17 +111,13 @@ Protect directories with data or configuration
---------------------------------------------
A crucial point when setting up SeedDMS is the propper placement of the
data directory. Do not place it below your document root as
configured in your web server! If you do so, there is good change that
attackers can easily access your documents with a regular browser.
If you can't place the data directory outside of document root, that either
restrict access to it with an appropriate .htaccess file or/and change
the `contentOffsetDir` in `settings.xml` to something random, but ensure it
is still a valid directory name. If you change contentOffsetDir then
do not forget to move `data/1048576` to `data/<your random name>`.
data directory. Do not place it below your document root of your web server!
If you do so, there is a potential way that
attackers can easily access your documents with a regular web browser.
If you cannot place the data directory outside of document root, then either
restrict access to it with an appropriate `.htaccess` file like the following.
The SeedDMS quickstart archive already includes this `.htaccess` file.
Example for .htaccess file in data directory
----------------------------------------------
```
# line below if for Apache 2.4
<ifModule mod_authz_core.c>
@ -123,6 +136,14 @@ IndexIgnore *
</ifModule>
```
Alternatively or in addition you can change
the `contentOffsetDir` in `settings.xml` to something random, but ensure it
is still a valid directory name. If you change contentOffsetDir, then
do not forget to move `data/1048576` to `data/<your random name>`.
Also turn off directory listings in your apache configuration for the
`data` directory.
Securing the configuration file
---------------------------------
@ -131,29 +152,43 @@ can be crucial for those configuration options where external commands are
being configured, e.g. for the full text engine or creating preview images.
As a hoster you may not want this configuration options being set by a SeedDMS
administrator. For now you need to make the configuration file `settings.xml`
unwritable for the web server.
unwritable for the web server. In that case the SeedDMS administrator can
still see the configuration but will not be able to change it.
Since version 5.1.23 and 6.0.16 of SeedDMS there is some preliminary way to
hide parts of the configuration which makes them unchangeable for the
SeedDMS administrator.
Setting a new encryption key
------------------------------
Though this is not related to setting up the web server environment, it is
important to recreated the encryption key in SeedDMS once SeedDMS is running.
Just open the settings in the admin tools and empty the currently set
encryption key on the tab 'System'. Save the settings and check the key again.
It should be new one. Save the settings again
It should be a new one. Save the settings again. The encryption key is
mainly used for creating tokens in HTML forms to prevent CSRF attacks.
UPGRATING FROM A PREVIOUS VERSION OR SEEDDMS
UPGRADING FROM A PREVIOUS VERSION OF SEEDDMS
=============================================
As SeedDMS is a smooth continuation of LetoDMS there is no difference
in updating from LetoDMS or SeedDMS
in updating from LetoDMS or SeedDMS.
You have basically two choices to update SeedDMS
You have basically two choices to update SeedDMS:
- you install a fresh version of SeedDMS and copy over your data and configuration
- you replace the software in your current installation with a new version
The first option is less interuptive but requires to be able to set up a second
temporary SeedDMS installation.
temporary SeedDMS installation, which may not be possible, e.g. because of storage
limitations. It can be the only option if you change servers.
The first update procedure is only needed if the version changes on the minor
or major version number. Changes in the subminor version number will never
include database changes and consequently it is sufficient to use the existing
data directory and database with the new version. Choose the second update
option in this case.
In both cases make sure to have a backup of your data directory, configuration
and database.
@ -161,56 +196,70 @@ and database.
Fresh installation and take over of data
-----------------------------------------
- just do a fresh installation somewhere on your web server and make sure it
works. It is fine to use
sqlite for it, even if your final installation uses mysql.
- replace the data directory in your new installation with the data directory
from your current installation. Depending on the size of that directory you
may either copy, move or place a symbolic link. The content of the data directory
will not be changed unless you modify your documents. Its perfectly save to
browse through your documents and download them.
- copy over the configuration settings.xml into your new installation
- if you use mysql you could as well make a copy of the database to make sure
your current database remains unchanged. As long as you do not do any modification,
you could even use your current database.
- modify the settings.xml to fit the fresh install. This will mostly be the
httpRoot, the paths to the installation directory and possibly the database
connection.
- create a file `ENABLE_INSTALL_TOOL` in the conf directory and point
your browser at http://hostname/seeddms/install
The install tool will detect the version of your current SeedDMS installation
and run the required database updates.
If you update just within the last version number (e.g. from 5.1.6 to 5.1.9),
this step
will not be required because such a subminor version update will never
contain database updates.
- test your new installation.
The first update option is to set up a new instance of SeedDMS and once
that is running take over the data from your current (old) instance.
1. just do a fresh installation somewhere on your web server and make sure it
works. It is fine to use
SQLite for it, even if your final installation uses MySQL.
2. replace the data directory in your new installation with the data directory
from your current installation. Depending on the size of that directory (and
whether the new installation is on a new server or the old server) you
may either copy, move or place a symbolic link. The content of the data directory
will not be changed during the update. Its even perfectly save to
browse through your documents and download them after finishing the
update. The data directory will not be modified until you actually modify
documents.
3. copy over the configuration `settings.xml` into your new installation. This will
effectively make your new installation use the data from your old installation,
because all paths are still pointing to the old installation.
4. if you use mysql you could as well make a copy of the database to make sure
your current database remains unchanged.
5. modify the `settings.xml` to fit the environment of the new installation.
This will mostly be the
httpRoot, the paths to the installation directory and possibly the database
connection.
6. create a file `ENABLE_INSTALL_TOOL` in the `conf` directory and point
your browser at http://hostname/seeddms/install
The install tool will detect the version of your current SeedDMS installation
and run the required database updates.
If you update just within the last version number (e.g. from 5.1.6 to 5.1.9),
this step
will not be required because such a subminor version update will never
contain database updates.
Upgrading your current installation
-----------------------------------
- make a backup of your data folder and the configuration file settings.xml
- in case you use mysql then dump your current database
- get the SeedDMS archive seeddms-x.y.z.tar.gz and all pear packages
SeedDMS_Core, SeedDMS_Lucene, SeedDMS_Preview and extract them over your
current instalation. As they do not contain a data directory nor a settings.xml
file, you will not overwrite your existing data and configuration.
- you may compare your conf/settings.xml file with the shipped version
conf/settings.xml.template for new parameters. If you don't do it, the next
time you save the configuration the default values will be used.
- create a file `ENABLE_INSTALL_TOOL` in the conf directory and point
your browser at http://hostname/seeddms/install
The install tool will detect the version of your current SeedDMS installation
and run the required database updates.
If you update just within the last version number (e.g. from 5.1.6 to 5.1.9),
this step
will not be required because such a subminor version update will never
contain database updates.
Instead of setting up a new installation, you may as well replace the php files
in your current installation with new versions from the quickstart archive.
1. get the SeedDMS quickstart archive `seeddms-quickstart-x.y.z.tar.gz` and
unpack it somewhere on your disc.
2. copy the directory `seeddms-x.y.z` from the unpacked archive into your
current installation and make the link `seeddms` point to this new directory.
3. copy the directory `pear` from the unpacked archive into your current
installation, replacing the existing directory. Make a backup of `pear` before
the replacement if you want to ensure to be able to go back to your old version.
4. you may compare your `conf/settings.xml` file with the shipped version
`conf/settings.xml.template` for new parameters. If you don't do it, the next
time you save the configuration the default values will be used.
5. create a file `ENABLE_INSTALL_TOOL` in the `conf` directory and point
your browser at http://hostname/seeddms/install
The install tool will detect the version of your current SeedDMS installation
and run the required database updates.
If you update just within the last version number (e.g. from 5.1.6 to 5.1.9),
this step
will not be required because such a subminor version update will never
contain database updates.
THE LONG STORY
================
This section is mostly outdated but may still contain some valueable
information for those trying to understand the installation process.
If you intend to run a single instance of SeedDMS, you are most likely
better off by using the quickstart archive as described above. This
section is mostly for users who wants to know more about the internals
@ -296,12 +345,12 @@ http://localhost/seeddms/
* Point you web browser towards http://hostname/seeddms/install/
* Follow the instructions on the page and create a file `ENABLE_INSTALL_TOOL`
in the conf directory.
in the `conf` directory.
* Create a data directory with the thre sub directories staging, cache
and lucene.
Make sure the data directory is either *not* below your document root
or is protected with a .htaccess file against web access. The data directory
or is protected with a .htaccess file against web access. The data directory
needs to be writable by the web server.
* Clicking on 'Start installation' will show a form with all necessary
@ -322,9 +371,9 @@ full text search engine support, you will also need to unpack
* Unpack all the files in a public web server folder. If you're working on
a host machine your provider will tell you where to upload the files.
If possible, do not unpack the pear packages `SeedDMS_Core-<version>.tgz`,
`SeedDMS_Preview-<version>.tgz` and
`SeedDMS_Preview-<version>.tgz` and
`SeedDMS_Lucene-<version>.tgz` below the document root of your web server.
Choose a temporary folder, as the files will be moved in a second.
Choose a temporary folder, as the files will be moved in a second.
Create a directory e.g. `pear` in the same directory where you unpacked
seeddms and create a sub directory SeedDMS. Move the content except for the
@ -346,36 +395,36 @@ full text search engine support, you will also need to unpack
Since they are pear packages they can also be installed with
> pear install SeedDMS_Core-<version>.tgz
> pear install SeedDMS_Lucene-<version>.tgz
> pear install SeedDMS_Preview-<version>.tgz
> pear install SeedDMS_Core-<version>.tgz
> pear install SeedDMS_Lucene-<version>.tgz
> pear install SeedDMS_Preview-<version>.tgz
* The PEAR packages Log and Mail are also needed. They can be downloaded from
http://pear.php.net/package/Log and http://pear.php.net/package/Mail.
Either install it as a pear package
or place it under your new directory 'pear'
Either install it as a pear package
or place it under your new directory 'pear'
> pear
> Log
> Log.php
> Mail
> Mail.php
> Log
> Log.php
> Mail
> Mail.php
* The package HTTP_WebDAV_Server is also needed. It can be downloaded from
http://pear.php.net/package/HTTP_WebDAV_Server. Either install it as a
pear package or place it under your new directory 'pear'
pear package or place it under your new directory 'pear'
> pear
> HTTP
> WebDAV
> Server
> Server.php
> WebDAV
> Server
> Server.php
If you run PHP in CGI mode, you also need to place a .htaccess file
in the webdav directory with the following content.
in the webdav directory with the following content.
RewriteEngine on
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]
RewriteEngine on
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]
* Create a data folder somewhere on your web server including the subdirectories
staging, cache and lucene and make sure they are writable by your web server,
@ -386,26 +435,26 @@ or should be protected by a .htaccess file. The folder containing the
configuration (settings.xml) must be protected by an .htaccess file like the
following.
> <Files ~ "^settings\.xml">
> Order allow,deny
> Deny from all
> </Files>
> <Files ~ "^settings\.xml">
> Order allow,deny
> Deny from all
> </Files>
If you install SeedDMS for the first time continue with the database setup.
* Create a new database on your web server
e.g. for mysql:
create database seeddms;
create database seeddms;
* Create a new user for the database with all permissions on the new database
e.g. for mysql:
grant all privileges on seeddms.* to seeddms@localhost identified by 'secret';
(replace 'secret' with you own password)
grant all privileges on seeddms.* to seeddms@localhost identified by 'secret';
(replace 'secret' with you own password)
* Optionally import `create_tables-innodb.sql` in the new database
e.g. for mysql:
> cat create_tables-innodb.sql | mysql -useeddms -p seeddms
> cat create_tables-innodb.sql | mysql -useeddms -p seeddms
This step can also be done by the install tool.
* create a file `ENABLE_INSTALL_TOOL` in the conf directory and point
* create a file `ENABLE_INSTALL_TOOL` in the `conf` directory and point
your browser at http://hostname/seeddms/install
@ -549,16 +598,4 @@ LICENSING
SeedDMS is licensed unter GPLv2
Jumploader is licensed as stated by the author on th web site
<http://jumploader.com/>
-- Taken from web site of jumploader ---
You may use this software for free, however, you should not:
- Decompile binaries.
- Alter or replace class and/or resource files.
- Redistribute this software under different name or authority.
If you would like a customized version, I can do this for a fee. Don't hesitate to contact me with questions or comments.
Uwe Steinmann <info@seeddms.org>

66
doc/README.Ldap Normal file
View File

@ -0,0 +1,66 @@
Ldap configuration
===================
The configuration for authentication against an ldap server needs to be done
in the `settings.xml` file using a text editor. It cannot be edited from within the
web gui.
SeedDMS supports ldap authentication using an Active Directory (AD) or a
regular ldap server, e.g. openldap
The location of the ldap server is specified in two parameters: `host` and
`port`. `host` can be either a plain hostname or an ldap URI, including the
protocol, the host and optionally the port, e.g. ldap://localhost:389. In case
of an URI the port in the configuration must remain empty.
The authentication itself is a two step process which differs, depending on how
to bind to the server. If the configuration sets 'bindDN' and 'bindPW', those
values will be used for a initial non anonymous bind to the ldap server
otherwise an anonymous bind is executed.
After the initial bind, a ldap search for either 'uid=<username>' (ldap) or
'sAMAccountName=<username>' (AD) below basedn is done. The purpose of this
search is to retrieve a working bindDN which is then used to actually
authenticate the user. In case of an anonymous first bind the search will
likely fail and the bindDN for the second bind will be either
'uid=<username>,<basedn>' (ldap) or '<username>@<accountDomainName>' (AD). If
the search succeeds the bindDN will be taken from the user's data in the ldap
server. This bindDN will be used for a second bind using the users password.
If the second bind succeeds the user could be successfully authenticated.
The data from the ldap server can be used to create an account in SeedDMS
if the user trying to login does not exist yet, but was able to authenticate.
This will only be done if 'authentication->restricted' in the configuration
is set to false. In that case the common name (cn) and email address is taken
from ldap. An already existing account in SeedDMS will be updated with data from
ldap.
Since version 5.1.35 and 6.0.28 the field name of the email address in ldap
can be set with the attribute `mailField`. If it is not set it defaults to `mail`.
Since version 5.1.34 and 6.0.27 the groups of a user stored in the ldap directory
can be synchronised with the groups in SeedDMS. The ldap field storing
the groups can be configured with the attribute `mailField`. This will add
new groups in SeedDMS and aѕsign them to the user.
Examples
---------
Anonymous bind to openldap on localhost, port 389
- type = "ldap"
- baseDN = "ou=users,dc=mycompany,dc=de"
- host = "ldap://localhost"
During authentication as user 'admin' the following steps are executed
1. connect to ldap server at localhost:389
2. do an anonymous bind
3. search for 'uid=admin' below basedn
4.1. if search succeeds use the dn from the user
4.2. if search fails use 'uid=admin,<basedn>' as dn
5. do a non anonymous bind with dn and password entered by user
6. if step 5. succeeds the use is authenticated
If bindDN and bindPW are specified in the configuration, the second step
will be a non anonymous bind.

29
doc/README.Mail Normal file
View File

@ -0,0 +1,29 @@
Mail configuration
===================
SeedDMS uses email to
* notify users about changes of documents and folders
* send instructions during the password forgotten process
Configuring email in SeedDMS is simple on systems running a
local mail server, because this is the default in SeedDMS and
no additional configuration is needed. On Linux you should
consider running a local mail server, which relais the mails
to your outgoing mail server. If you cannot run a local mail
server, you can still configure SeedDMS to use an outgoing
SMTP server. Below are some examples on how to configure
SeedDMS for different hosters.
1&1
---------
smtp server: ssl://smtp.1und1.de
smtp port: 465
Gmail
---------
smtp server: ssl://smtp.gmail.com
smtp port: 465
note: since June, 2022 you will no longer be able to turn on 'Less secure app access' in your google account. Instead you need to turn on 2-Step Verification first and than
create an App Password (https://support.google.com/accounts/answer/185833)

View File

@ -106,6 +106,11 @@ op/op.ReviewDocument.php
* document was reviewed
subscribers of the document
op/op.SetReviewersApprovers.php
* Reviewers/approvers were added/deleted
subscribers of the document
uploader of version
op/op.RewindWorkflow.php
* Workflow was rewind to beginning
subscribers of the document
@ -121,3 +126,28 @@ op/op.TriggerWorkflow.php
op/op.UpdateDocument.php
* document was updated
subscribers of the document
op/op.ReceiptDocument.php
* document was received
subscribers of the document
op/op.ReviseDocument.php
* document was revised
subscribers of the document
op/op.SetRevisors.php
* Revisors were added/deleted
subscribers of the document
uploader of version
revisor
op/op.ReceiptDocument.php
* document was receipt
subscribers of the document
op/op.SetRecipients.php
* Recipients were added/deleted
subscribers of the document
uploader of version
recipient

55
doc/README.Restapi.md Normal file
View File

@ -0,0 +1,55 @@
# How to access the Rest API
Below are various examples on how to access the Rest API. Some of them
start by calling the `login` endpoint which creates a cookie based
session which is stored in a local file named `cookies.txt`.
The authentication is done with the user `admin`. You may use any other
user as well.
You may as well pass `-H Authorization: <api key>` instead of `-b cookies.txt`
to `curl` after setting the api key in the configuration of your SeedDMS.
Of course, in that case you will not need the initial call of the `login`
endpoint.
The examples often use the `jq` programm for formating the returned
json data.
## Initial test
The `echo` endpoint does not require any authentication.
```
#!/bin/sh
BASEURL="https://your-domain/"
curl --silent -X GET ${BASEURL}restapi/index.php/echo/test | jq '.'
```
## Getting list of users
```
#!/bin/sh
BASEURL="https://your-domain/"
curl --silent -F "user=admin" -F "pass=admin" -b cookies.txt -c cookies.txt ${BASEURL}restapi/index.php/login | jq
curl --silent -b cookies.txt -X GET "${BASEURL}restapi/index.php/users" | jq '.'
```
## Getting meta data of a folder
```
#!/bin/sh
BASEURL="https://your-domain/"
curl --silent -H "Authorization: <api key>" -X GET "${BASEURL}restapi/index.php/folder/1" | jq '.'
```
## Notes
Make sure to encode the data properly when using restapi functions which uses
put. If you use curl with PHP, then encode the data as the following
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

26
doc/README.Scheduler.md Normal file
View File

@ -0,0 +1,26 @@
Scheduler
==========
The scheduler in SeedDMS manages frequently run tasks. It is very similar
to regular unix cron jobs. A task in SeedDMS is an instanciation of a task
class which itself is defined by an extension or SeedDMS itself.
SeedDMS has some predefined classes e.g. core::expireddocs.
In order for tasks to be runnalbe, a user `cli_scheduler` must exists in
SeedDMS.
All tasks are executed by a single cronjob in the directory `utils`
> */5 * * * * /home/www-data/seeddms60x/seeddms/utils/seeddms-schedulercli --mode=run
Please keep in mind, that the php interpreter used for the cronjob may be
different from the php interpreter used für the web application. Hence, two
different php.ini files might be used. php and the php extensions may differ as
well. This can cause some extensions to be disabled and consequently some task
classes are not defined.
`utils/seeddms-schedulercli` can also be run on the command line. If you
do that, run it with the same system user used for the web server. On Debian
this is www-data. Hence run it like
sudo -u www-data utils/seeddms-schedulercli --mode=list

23
doc/README.Swagger Normal file
View File

@ -0,0 +1,23 @@
Swagger
========
Swagger is used to describe a rest api. SeedDMS ships a swagger.yaml file
in the restapi directory. You can load this file into a swagger editor, e.g.
http://petstore.swagger.io/ or http://editor.swagger.io/
You may as well set up your own swagger-ui installation as described at
https://medium.com/@tatianaensslin/how-to-add-swagger-ui-to-php-server-code-f1610c01dc03
Your apache needs to have the module `header` enabled, because some HTTP headers
are set when the file `swagger.yaml` is accessed by the editor.
Currently, the swagger.yaml shipped with SeedDMS uses still swagger 2.0
If you are using php-fpm you will have to ensure that files with
extension .yaml are allowed to be parsed. Extend the
`security.limit_extensions` in the pool configuration by `.yaml`. Also
check the contents of the file `.htaccess` in directory `restapi`. It
by default sets the handler for php to `application/x-httpd-php` which
uses the apache module of php. If you would like to use php-fpm
instead, then set it to
SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/"

View File

@ -1,5 +1,5 @@
WebDAV
-----------------------------------------------
========
SeedDMS has support for WebDAV which allows to easily add, delete,
move, copy and modify documents. All operating systems have support
@ -29,7 +29,7 @@ the content of document or creating a new
version if a document is saved.
Configuring davfs2
===================
-------------------
On Linux it is quite simple to mount the SeedDMS WebDAV server with
davfs2. Just place a line like the following in your /etc/fstab
@ -51,15 +51,14 @@ and possibly add your login data to /etc/davfs2/secrets
/media/webdav admin secret
Making applications work with WebDAV
=====================================
-------------------------------------
Various programms have differnt strategies to save files to disc and
prevent data lost under all circumstances. Those strategies often don't
work very well an a WebDAV-Server. The following will list some of those
strategies.
VIM
=========================
### VIM
vim does a lot more than just reading and writing the file you want
to edit. It creates swap and backup files for data recovery if vim crashes
@ -69,7 +68,7 @@ swap file at all or create it outside the WebDAV server. A second problem
arises from how vim modifіes the file you are editing. Before a file
is saved a backup is created by renaming the file to the same name with a
'~' at the end and writing the file content into a new
file with the name of the original file. Afterwards vim deleteѕ the backup
file with the name of the original file. Afterwards vim deletes the backup
file. On a regular file system you
won't see a difference between the file before and after saving, though
it is actually a new one. In SeedDMS you won't notice a difference either
@ -88,12 +87,17 @@ set nobackup
set nowritebackup
set noswapfile
If you want to restrict the settings to the directory where the dms
is mounted by webdav, e.g. /media/webdav, you can set an auto command
in .vimrc
autocmd BufNewFile,BufRead /media/webdav/* set nobackup nowritebackup noswapfile
Creating the backup file in a directory outside of WebDAV doesn't help in
this case, because it still does the file renaming which is turned of by
this case, because it still does the file renaming which is turned off by
'nowritebackup'.
cdaver
========
### cdaver
cadaver is a webdav client similar to classical command line based ftp clients.
It can be used to browse through the folders, downloads and uploads files, and

59
doc/README.ocr Normal file
View File

@ -0,0 +1,59 @@
OCR
====
SeedDMS itself has no support for optical character recognition (OCR)
because it does not care about the content of file. Though, external
OCR software can be used to convert an image into text and index it
by the full text search engine.
The following script can be use to convert a scanned image into pdf
with a text layer added. The script actually takes this file to
ran it through pdftotext. It was published in the seeddms forum
https://sourceforge.net/p/seeddms/discussion/general/thread/4ec5973d/
#!/bin/bash
inputpdf=$1
temp_folder=/tmp/seedinput/$(date +"%Y_%m_%d_%H%M%S")/
lockfile=/tmp/seed
protokolldatei=./tesser_syslog
cores=2
mkdir -p $lockfile
while [ -e "$lockfile"/"`basename $0`" ];
do
sleep 5
done
if ( set -o noclobber; echo "locked" > "$lockfile"/"`basename $0`"); then
trap 'rm -f "$lockfile"/"`basename $0`"; echo $(date) " Lockdatei wird geloescht: " $lockfile"/"`basename $0` Aufrufparameter: $* >> $protokolldatei ;rm -r $temp_folder; exit $?' INT TERM KILL EXIT
#das Datum mit dem Scriptnamen in die Protokolldatei schreiben
echo $(date) " Lockdatei erstellt: " $lockfile"/"`basename $0` >> $protokolldatei
else
#Script beenden falls Lockdatei nicht erstellt werden konnte
echo $(date) " Programm wird beendet, Lockdatei konnte nicht erstellt werden: $lockfile"/"`basename $0` Aufrufparameter: $* " >> $protokolldatei
exit 1
fi
mkdir -p $temp_folder
$(pdftotext -raw $1 - 1> $temp_folder''tmp.txt )
pdf_contents=`cat $temp_folder''tmp.txt`
pdf_contents=`echo "$pdf_contents" | tr -dc '[:print:]'`
if [ -z "$pdf_contents" ]; then
convert -density 300 -quality 95 $inputpdf +adjoin $temp_folder''image%03d.jpg
find $temp_folder -name '*.jpg'| parallel --gnu -j $cores tesseract -l deu --psm 6 {} {} pdf
num=`find $temp_folder -name '*.pdf'| wc -l`
if [ "$num" -gt "1" ]; then
pdfunite $temp_folder*.pdf $temp_folder''tmp.pdf
else
mv $temp_folder*.pdf $temp_folder''tmp.pdf
fi
pdftotext $temp_folder''tmp.pdf $temp_folder''tmp.txt
mv $temp_folder''tmp.pdf $1
fi
cat $temp_folder''tmp.txt

View File

@ -183,10 +183,13 @@ class SeedDMS_ExtExample_Task extends SeedDMS_SchedulerTaskBase {
* Run the task
*
* @param $task task to be executed
* @param $dms dms
* @return boolean true if task was executed succesfully, otherwise false
*/
public function execute($task, $dms, $user) {
public function execute($task) {
$dms = $this->dms;
$user = $this->user;
$settings = $this->settings;
$logger = $this->logger;
$taskparams = $task->getParameter();
return true;
}

View File

@ -2,7 +2,7 @@
$EXT_CONF['example'] = array(
'title' => 'Example Extension',
'description' => 'This sample extension demonstrates the use of various hooks',
'disable' => false,
'disable' => true,
'version' => '1.0.1',
'releasedate' => '2018-03-21',
'author' => array('name'=>'Uwe Steinmann', 'email'=>'uwe@steinmann.cx', 'company'=>'MMK GmbH'),

View File

@ -12,9 +12,6 @@
* @version Release: @package_version@
*/
require_once("inc.Utils.php");
require_once("inc.ClassNotificationService.php");
require_once("inc.ClassEmailNotify.php");
require_once("inc.ClassSession.php");
require_once("inc.ClassAccessOperation.php");
@ -110,8 +107,6 @@ if($settings->_useHomeAsRootFolder && !$user->isAdmin() && $user->getHomeFolder(
$role = $user->getRole();
$dms->noReadForStatus = $role->getNoAccess();
require_once('inc/inc.Notification.php');
/* Include additional language file for view
* This file must set $LANG[xx][]
*/
@ -127,7 +122,7 @@ if($isajax)
* to be changed redirect to out/out.ForcePasswordChange.php. Do this
* check only if password expiration is turned on, we are not on the
* page to change the password or the page that changes the password, the
* current user is not admin, and no user substiation has occured. */
* current user is not admin, and no user substitution has occured. */
if (!$user->isAdmin() && $origuser == null) {
if($settings->_passwordExpiration > 0) {
@ -158,6 +153,5 @@ if($settings->_enable2FactorAuthentication && $settings->_guestID != $user->getI
/* Update cookie lifetime */
if($settings->_cookieLifetime) {
$lifetime = time() + intval($settings->_cookieLifetime);
/* Turn off http only cookies if jumploader is enabled */
setcookie("mydms_session", $dms_session, $lifetime, $settings->_httpRoot, null, null, !$settings->_enableLargeFileUpload);
setcookie("mydms_session", $dms_session, $lifetime, $settings->_httpRoot, null, false, true);
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Create authentication service
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Markus Westphal, Malcolm Cowe, Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2002-2005 Markus Westphal,
* 2006-2008 Malcolm Cowe, 2010-2022 Uwe Steinmann
* @version Release: @package_version@
*/
require_once('inc.ClassAuthenticationService.php');
require_once('inc.ClassDbAuthentication.php');
require_once('inc.ClassLdapAuthentication.php');
global $logger;
$authenticator = new SeedDMS_AuthenticationService($logger, $settings);
if(isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['authentication'] as $authenticationObj) {
if(method_exists($authenticationObj, 'preAddService')) {
$authenticationObj->preAddService($dms, $authenticator);
}
}
}
$authenticator->addService(new SeedDMS_DbAuthentication($dms, $settings), 'db');
if(isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
$authenticator->addService(new SeedDMS_LdapAuthentication($dms, $settings), 'ldap');
}
if(isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) {
foreach($GLOBALS['SEEDDMS_HOOKS']['authentication'] as $authenticationObj) {
if(method_exists($authenticationObj, 'postAddService')) {
$authenticationObj->postAddService($dms, $authenticator);
}
}
}

View File

@ -18,53 +18,13 @@ require_once("inc.ClassEmailNotify.php");
require_once("inc.ClassSession.php");
require_once("inc.ClassAccessOperation.php");
function __authenticate($username, $password) { /* {{{ */
global $dms, $settings;
$user = false;
/* Authenticate against LDAP server {{{ */
if (!$user && isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) {
require_once("../inc/inc.ClassLdapAuthentication.php");
$authobj = new SeedDMS_LdapAuthentication($dms, $settings);
$user = $authobj->authenticate($username, $password);
} /* }}} */
/* Authenticate against SeedDMS database {{{ */
else {
require_once("../inc/inc.ClassDbAuthentication.php");
$authobj = new SeedDMS_DbAuthentication($dms, $settings);
$user = $authobj->authenticate($username, $password);
} /* }}} */
if (!$user) {
return false;
}
if (($user->getID() == $settings->_guestID) && (!$settings->_enableGuestLogin)) {
return false;
}
// Check if account is disabled
if($user->isDisabled()) {
return false;
}
// control admin IP address if required
if ($user->isAdmin() && ($_SERVER['REMOTE_ADDR'] != $settings->_adminIP ) && ( $settings->_adminIP != "") ){
return false;
}
return $user;
} /* }}} */
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="'.$settings->_siteName.'"');
header('HTTP/1.0 401 Unauthorized');
echo getMLText('cancel_basic_authentication');
exit;
} else {
if(!($user = __authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))) {
if(!($user = $authenticator->authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']))) {
header('WWW-Authenticate: Basic realm="'.$settings->_siteName.'"');
header('HTTP/1.0 401 Unauthorized');
echo getMLText('cancel_basic_authentication');
@ -76,8 +36,6 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {
$user->clearLoginFailures();
$dms->setUser($user);
$notifier = new SeedDMS_NotificationService();
if($settings->_enableEmail) {
$notifier->addService(new SeedDMS_EmailNotify($dms));
}
require_once('inc/inc.Notification.php');

View File

@ -47,10 +47,113 @@ class SeedDMS_AccessOperation {
*/
private $_aro;
/**
* @var array $legacy_access list of objects with access use for view and controller
* @access protected
*/
private $legacy_access;
function __construct($dms, $user, $settings) { /* {{{ */
$this->dms = $dms;
$this->user = $user;
$this->settings = $settings;
$this->legacy_access['guest'] = array(
'Calendar',
'Download',
'ErrorDlg',
'Help',
'Login',
'Search',
'ViewDocument',
'ViewFolder',
'ViewOnline',
);
$this->legacy_access['user'] = array(
'AddDocument',
'AddDocumentLink',
'AddEvent',
'AddFile',
'AddSubFolder',
'AddToTransmittal',
'ApprovalSummary',
'ApproveDocument',
'Calendar',
'CategoryChooser',
'ChangePassword',
'CheckInDocument',
'CheckOutDocument',
'Clipboard',
'Dashboard',
'DocumentAccess',
'DocumentChooser',
'DocumentNotify',
'DocumentVersionDetail',
'Download',
'DropFolderChooser',
'EditAttributes',
'EditComment',
'EditDocumentFile',
'EditDocument',
'EditEvent',
'EditFolder',
'EditOnline',
'EditUserData',
'ErrorDlg',
'FolderAccess',
'FolderChooser',
'FolderNotify',
'ForcePasswordChange',
'GroupView',
'Help',
'KeywordChooser',
'Login',
'ManageNotify',
'MoveDocument',
'MoveFolder',
'MyAccount',
'MyDocuments',
'OpensearchDesc',
'OverrideContentStatus',
'PasswordForgotten',
'PasswordSend',
'ReceiptDocument',
'ReceiptSummary',
'RemoveDocumentFile',
'RemoveDocument',
'RemoveEvent',
'RemoveFolderFiles',
'RemoveFolder',
'RemoveTransmittal',
'RemoveVersion',
'RemoveWorkflowFromDocument',
'ReturnFromSubWorkflow',
'ReviewDocument',
'ReviewSummary',
'ReviseDocument',
'RevisionSummary',
'RewindWorkflow',
'RunSubWorkflow',
'Search',
'Session',
'SetExpires',
'SetRecipients',
'SetReviewersApprovers',
'SetRevisors',
'SetWorkflow',
'SubstituteUser',
'Tasks',
'TransmittalMgr',
'TriggerWorkflow',
'UpdateDocument',
'UserDefaultKeywords',
'UserImage',
'UsrView',
'ViewDocument',
'ViewEvent',
'ViewFolder',
'ViewOnline',
'WorkflowGraph',
'WorkflowSummary');
} /* }}} */
/**
@ -89,7 +192,7 @@ class SeedDMS_AccessOperation {
function mayRemoveVersion($document) { /* {{{ */
if($document->isType('document')) {
$versions = $document->getContent();
if ((($this->settings->_enableVersionDeletion && ($document->getAccessMode($this->user) == M_ALL)) || $this->user->isAdmin() ) && (count($versions) > 1)) {
if ((($this->settings->_enableVersionDeletion && ($document->getAccessMode($this->user, 'removeVersion') == M_ALL)) || $this->user->isAdmin() ) && (count($versions) > 1)) {
return true;
}
}
@ -208,7 +311,8 @@ class SeedDMS_AccessOperation {
if($document->isType('document')) {
if($latestContent = $document->getLatestContent()) {
$workflow = $latestContent->getWorkflow();
if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) == M_ALL)) || $this->user->isAdmin()) && (!$workflow || ($workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()))) {
$workflowstate = $latestContent->getWorkflowState();
if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) == M_ALL)) || $this->user->isAdmin()) && (!$workflow || ($workflowstate && ($workflow->getInitState()->getID() == $workflowstate->getID())))) {
return true;
}
}
@ -239,12 +343,14 @@ class SeedDMS_AccessOperation {
*
* This check can only be done for documents. Setting the documents
* comment date is only allowed if version modification is turned on in
* the settings and the document has not been obsoleted.
* the settings and the document has not been obsoleted or expired.
* The admin may set the comment even if is
* disallowed in the settings.
*/
function mayEditComment($document) { /* {{{ */
if($document->isType('document')) {
if($document->getAccessMode($this->user) < M_READWRITE)
return false;
if($document->isLocked()) {
$lockingUser = $document->getLockingUser();
if (($lockingUser->getID() != $this->user->getID()) && ($document->getAccessMode($this->user) != M_ALL)) {
@ -253,7 +359,7 @@ class SeedDMS_AccessOperation {
}
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) >= M_READWRITE)) || $this->user->isAdmin()) && ($status["status"]!=S_OBSOLETE)) {
if (($this->settings->_enableVersionModification || $this->user->isAdmin()) && !in_array($status["status"], array(S_OBSOLETE, S_EXPIRED))) {
return true;
}
}
@ -266,16 +372,18 @@ class SeedDMS_AccessOperation {
*
* Setting the object attributes
* is only allowed if version modification is turned on in
* the settings and the document has not been obsoleted.
* The admin may set the comment even if is
* disallowed in the settings.
* the settings or the document is still in an approval/review
* or intial workflow step.
*/
function mayEditAttributes($document) { /* {{{ */
if($document->isType('document')) {
if($latestContent = $document->getLatestContent()) {
$status = $latestContent->getStatus();
$workflow = $latestContent->getWorkflow();
if ((($this->settings->_enableVersionModification && ($document->getAccessMode($this->user) >= M_READWRITE)) || $this->user->isAdmin()) && (in_array($status["status"], array(S_DRAFT_REV, S_DRAFT_APP, S_IN_REVISION)) || ($workflow && $workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()))) {
$workflowstate = $latestContent->getWorkflowState();
if($document->getAccessMode($this->user) < M_READWRITE)
return false;
if ($this->settings->_enableVersionModification || in_array($status["status"], array(S_DRAFT_REV, S_DRAFT_APP, S_IN_REVISION)) || ($workflow && $workflowstate && $workflow->getInitState()->getID() == $workflowstate->getID())) {
return true;
}
}
@ -406,6 +514,30 @@ class SeedDMS_AccessOperation {
return false;
} /* }}} */
/**
* Check if document content may be checked in
*
*
*/
function mayCheckIn($document) { /* {{{ */
if($document->isType('document')) {
$checkoutinfo = $document->getCheckOutInfo();
if(!$checkoutinfo)
return false;
$info = $checkoutinfo[0];
if($this->user->getID() == $info['userID'] || $document->getAccessMode($this->user) == M_ALL) {
return true;
}
}
return false;
} /* }}} */
public function allowLegacyAccess($access, $role) { /* {{{ */
if($role == 'user' || $role == 'guest') {
$this->legacy_access[$role][] = $access;
}
} /* }}} */
protected function check_view_legacy_access($view, $get=array()) { /* {{{ */
if($this->user->isAdmin())
return true;
@ -421,98 +553,35 @@ class SeedDMS_AccessOperation {
}
if($this->user->isGuest()) {
$user_allowed = array(
'Calendar',
'ErrorDlg',
'Help',
'Login',
'Search',
'ViewDocument',
'ViewFolder',
);
$user_allowed = $this->legacy_access['guest'];
} else {
$user_allowed = array(
'AddDocument',
'AddDocumentLink',
'AddEvent',
'AddFile',
'AddSubFolder',
'AddToTransmittal',
'ApprovalSummary',
'ApproveDocument',
'Calendar',
'CategoryChooser',
'ChangePassword',
'CheckInDocument',
'Clipboard',
'DocumentAccess',
'DocumentChooser',
'DocumentNotify',
'DocumentVersionDetail',
'DropFolderChooser',
'EditAttributes',
'EditComment',
'EditDocumentFile',
'EditDocument',
'EditEvent',
'EditFolder',
'EditOnline',
'EditUserData',
'ErrorDlg',
'FolderAccess',
'FolderChooser',
'FolderNotify',
'ForcePasswordChange',
'GroupView',
'Help',
'KeywordChooser',
'Login',
'ManageNotify',
'MoveDocument',
'MoveFolder',
'MyAccount',
'MyDocuments',
'OpensearchDesc',
'OverrideContentStatus',
'PasswordForgotten',
'PasswordSend',
'ReceiptDocument',
'ReceiptSummary',
'RemoveDocumentFile',
'RemoveDocument',
'RemoveEvent',
'RemoveFolderFiles',
'RemoveFolder',
'RemoveTransmittal',
'RemoveVersion',
'RemoveWorkflowFromDocument',
'ReturnFromSubWorkflow',
'ReviewDocument',
'ReviewSummary',
'ReviseDocument',
'RevisionSummary',
'RewindWorkflow',
'RunSubWorkflow',
'Search',
'Session',
'SetExpires',
'SetRecipients',
'SetReviewersApprovers',
'SetRevisors',
'SetWorkflow',
'SubstituteUser',
'Tasks',
'TransmittalMgr',
'TriggerWorkflow',
'UpdateDocument',
'UserDefaultKeywords',
'UserImage',
'UsrView',
'ViewDocument',
'ViewEvent',
'ViewFolder',
'WorkflowGraph',
'WorkflowSummary');
$user_allowed = $this->legacy_access['user'];
}
if(array_intersect($scripts, $user_allowed))
return true;
return false;
} /* }}} */
protected function check_controller_legacy_access($controller, $get=array()) { /* {{{ */
if($this->user->isAdmin())
return true;
if(is_string($controller)) {
$scripts = array($controller);
} elseif(is_array($controller)) {
$scripts = $controller;
} elseif(is_subclass_of($controller, 'SeedDMS_Controller_Common')) {
$scripts = array($controller->getParam('class'));
} else {
return false;
}
if($this->user->isGuest()) {
$user_allowed = $this->legacy_access['guest'];
} else {
$user_allowed = $this->legacy_access['user'];
}
if(array_intersect($scripts, $user_allowed))
@ -580,6 +649,8 @@ class SeedDMS_AccessOperation {
*/
function check_controller_access($controller, $get=array()) { /* {{{ */
if(!$this->settings->_advancedAcl) {
return $this->check_controller_legacy_access($controller, $get);
/*
if($this->user->isGuest())
return false;
elseif($this->user->isAdmin())
@ -589,6 +660,7 @@ class SeedDMS_AccessOperation {
return false;
return true;
}
*/
}
if(is_string($controller)) {
$scripts = array($controller);

View File

@ -163,7 +163,7 @@ class SeedDMS_AroAco { /* {{{ */
* @return object instance of SeedDMS_Aco
*/
function __construct($dms, $id, $parent, $object, $alias) { /* {{{ */
$this->_dmѕ = $dms;
$this->_dms = $dms;
$this->_id = $id;
$this->_parent = $parent;
$this->_object = $object;

View File

@ -2,42 +2,28 @@
/**
* Implementation of user authentication
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2010-2016 Uwe Steinmann
* @license GPL 2
* @version @package_version@
* @link https://www.seeddms.org
*/
/**
* Abstract class to authenticate user
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2016 Uwe Steinmann
* @version Release: @package_version@
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2010-2016 Uwe Steinmann
* @license GPL 2
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
abstract class SeedDMS_Authentication {
/**
* @var object $dms object of dms
* @access protected
*/
private $dms;
/**
* @var object $settings SeedDMS Settings
* @access protected
*/
private $settings;
function __construct($dms, $settings) { /* {{{ */
$this->dms = $dms;
$this->settings = $settings;
} /* }}} */
abstract class SeedDMS_Authentication
{
/**
* Do Authentication
*
@ -45,9 +31,11 @@ abstract class SeedDMS_Authentication {
* the user object otherwise false must be returned. If authentication fails
* the number of failed logins should be incremented and account disabled.
*
* @param string $username
* @param string $password
* @return object|boolean user object if authentication was successful otherwise false
* @param string $username name of user to authenticate
* @param string $password password of user to authenticate
*
* @return object|false user object if authentication was successful
* otherwise false
*/
abstract function authenticate($username, $password);
}

View File

@ -0,0 +1,108 @@
<?php
/**
* MyDMS. Document Management System
* Copyright (C) 2002-2005 Markus Westphal
* Copyright (C) 2006-2008 Malcolm Cowe
* Copyright (C) 2010 Matteo Lucarelli
* Copyright (C) 2010-2024 Uwe Steinmann
*
* PHP version 8
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* @category SeedDMS
* @package SeedDMS
* @author Uwe Steinmann <info@seeddms.org>
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @link https://www.seeddms.org Main Site
*/
/* Middleware for authentication based on session */
class SeedDMS_Auth_Middleware_Session { /* {{{ */
private $container;
public function __construct($container) {
$this->container = $container;
}
/**
* Example middleware invokable class
*
* @param \Psr\Http\Message\ServerRequestInterface $request PSR7 request
* @param \Psr\Http\Message\ResponseInterface $response PSR7 response
* @param callable $next Next middleware
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke($request, $handler) {
// $this->container has the DI
$dms = $this->container->get('dms');
$settings = $this->container->get('config');
$logger = $this->container->get('logger');
$userobj = null;
if ($this->container->has('userobj')) {
$userobj = $this->container->get('userobj');
}
if ($userobj) {
$response = $handler->handle($request);
return $response;
}
$logger->log("Invoke middleware for method " . $request->getMethod() . " on '" . $request->getUri()->getPath() . "'", PEAR_LOG_INFO);
require_once("inc/inc.ClassSession.php");
$session = new SeedDMS_Session($dms->getDb());
if (isset($_COOKIE["mydms_session"])) {
$dms_session = $_COOKIE["mydms_session"];
$logger->log("Session key: " . $dms_session, PEAR_LOG_DEBUG);
if (!$resArr = $session->load($dms_session)) {
/* Delete Cookie */
setcookie("mydms_session", $dms_session, time() - 3600, $settings->_httpRoot);
$logger->log("Session for id '" . $dms_session . "' has gone", PEAR_LOG_ERR);
return $response->withStatus(403);
}
/* Load user data */
$userobj = $dms->getUser($resArr["userID"]);
if (!is_object($userobj)) {
/* Delete Cookie */
setcookie("mydms_session", $dms_session, time() - 3600, $settings->_httpRoot);
if ($settings->_enableGuestLogin) {
if (!($userobj = $dms->getUser($settings->_guestID))) {
return $response->withStatus(403);
}
} else {
return $response->withStatus(403);
}
}
if ($userobj->isAdmin()) {
if ($resArr["su"]) {
if (!($userobj = $dms->getUser($resArr["su"]))) {
return $response->withStatus(403);
}
}
}
$dms->setUser($userobj);
} else {
return $response->withStatus(403);
}
$this->container->set('userobj', $userobj);
$response = $handler->handle($request);
return $response;
}
} /* }}} */

View File

@ -0,0 +1,102 @@
<?php
/**
* Implementation of authentication service
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2016 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Implementation of authentication service
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2016 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_AuthenticationService {
/**
* List of services for authenticating user
*/
protected $services;
/*
* List of servives with errors
*/
protected $errors;
/*
* Service for logging
*/
protected $logger;
/*
* Configuration
*/
protected $settings;
public function __construct($logger = null, $settings = null) { /* {{{ */
$this->services = array();
$this->errors = array();
$this->logger = $logger;
$this->settings = $settings;
} /* }}} */
public function addService($service, $name='') { /* {{{ */
if(!$name)
$name = md5(uniqid());
$this->services[$name] = $service;
$this->errors[$name] = true;
} /* }}} */
public function getServices() { /* {{{ */
return $this->services;
} /* }}} */
public function getErrors() { /* {{{ */
return $this->errors;
} /* }}} */
/**
* Run each authentication service
*
* This method calls authenticate() of each authentication service and
* evaluates the returned value.
* If the authentication method returns false (some internal error which
* prevented to check authentication at all), this method will return
* false imediately, in case of null (no valid authentication) the next
* service will be tried and in all other cases the value will be returned.
*
* @param string $username name of user
* @param string $password password of user
*/
public function authenticate($username, $password) { /* {{{ */
$user = null;
foreach($this->services as $name => $service) {
if($this->logger)
$this->logger->log('Authentication service \''.$name.'\'', PEAR_LOG_INFO);
$user = $service->authenticate($username, $password);
if($user === false) {
$this->errors[$name] = false;
if($this->logger)
$this->logger->log('Authentication service \''.$name.'\': Authentication of user \''.$username.'\' failed.', PEAR_LOG_ERR);
return false;
} elseif($user === null) {
if($this->logger)
$this->logger->log('Authentication service \''.$name.'\': Authentication of user \''.$username.'\' disregarded.', PEAR_LOG_ERR);
} else {
if($this->logger)
$this->logger->log('Authentication service \''.$name.'\': Authentication of user \''.$username.'\' successful.', PEAR_LOG_INFO);
$this->errors[$name] = true;
return $user;
}
}
return $user;
} /* }}} */
}

View File

@ -33,36 +33,60 @@ class SeedDMS_Calendar {
*/
protected $db;
function __construct($db, $user) {
/**
* Instanz of user
*/
protected $user;
public function __construct($db, $user) { /* {{{ */
$this->db = $db;
$this->user = $user;
}
} /* }}} */
function getEvents($day, $month, $year) { /* {{{ */
public function setUser($user) { /* {{{ */
$this->user = $user;
} /* }}} */
public function getUser() { /* {{{ */
return $this->user;
} /* }}} */
public function getEvents($day, $month, $year) { /* {{{ */
$date = mktime(12,0,0, $month, $day, $year);
$queryStr = "SELECT * FROM `tblEvents` WHERE `start` <= " . $date . " AND `stop` >= " . $date;
if(!$this->user->isAdmin()) {
$queryStr .= " AND `userID`=".$this->user->getID();
}
$ret = $this->db->getResultArray($queryStr);
return $ret;
} /* }}} */
function getEventsInInterval($start, $stop) { /* {{{ */
$queryStr = "SELECT * FROM `tblEvents` WHERE ( `start` <= " . (int) $start . " AND `stop` >= " . (int) $start . " ) ".
public function getEventsInInterval($start, $stop) { /* {{{ */
$queryStr = "SELECT * FROM `tblEvents` WHERE (( `start` <= " . (int) $start . " AND `stop` >= " . (int) $start . " ) ".
"OR ( `start` <= " . (int) $stop . " AND `stop` >= " . (int) $stop . " ) ".
"OR ( `start` >= " . (int) $start . " AND `stop` <= " . (int) $stop . " )";
"OR ( `start` >= " . (int) $start . " AND `stop` <= " . (int) $stop . " ))";
if(!$this->user->isAdmin()) {
$queryStr .= " AND `userID`=".$this->user->getID();
}
$ret = $this->db->getResultArray($queryStr);
return $ret;
} /* }}} */
function addEvent($from, $to, $name, $comment ) { /* {{{ */
public function addEvent($from, $to, $name, $comment ) { /* {{{ */
$queryStr = "INSERT INTO `tblEvents` (`name`, `comment`, `start`, `stop`, `date`, `userID`) VALUES ".
"(".$this->db->qstr($name).", ".$this->db->qstr($comment).", ".(int) $from.", ".(int) $to.", ".$this->db->getCurrentTimestamp().", ".$this->user->getID().")";
$ret = $this->db->getResult($queryStr);
return $ret;
if (!$ret)
return false;
$event = $this->getEvent((int) $this->db->getInsertID('tblEvents'));
return $event;
} /* }}} */
function getEvent($id) { /* {{{ */
public function getEvent($id) { /* {{{ */
if (!is_numeric($id)) return false;
$queryStr = "SELECT * FROM `tblEvents` WHERE `id` = " . (int) $id;
@ -74,7 +98,7 @@ class SeedDMS_Calendar {
return $ret[0];
} /* }}} */
function editEvent($id, $from, $to=null, $name=null, $comment=null) { /* {{{ */
public function editEvent($id, $from, $to=null, $name=null, $comment=null) { /* {{{ */
if (!is_numeric($id)) return false;
$queryStr = "UPDATE `tblEvents` SET `start` = " . (int) $from . ($to !== null ? ", `stop` = " . (int) $to : '') . ($name !== null ? ", `name` = " . $this->db->qstr($name) : '') . ($comment !== null ? ", `comment` = " . $this->db->qstr($comment) : '') . ", `date` = " . $this->db->getCurrentTimestamp() . " WHERE `id` = ". (int) $id;
@ -82,7 +106,7 @@ class SeedDMS_Calendar {
return $ret;
} /* }}} */
function delEvent($id) { /* {{{ */
public function delEvent($id) { /* {{{ */
if (!is_numeric($id)) return false;
$queryStr = "DELETE FROM `tblEvents` WHERE `id` = " . (int) $id;

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