Compare commits

...

3729 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
4f00481f1e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-18 09:38:35 +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
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
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
2bb27b5b8e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-09-06 18:56:09 +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
e5390d0dbe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-30 19:39:28 +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
4a1a3c6bfe fix typo in class var _dms 2023-08-28 12:09:33 +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
ef42fcac07 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-25 12:43:56 +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
1d74863f81 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-24 13:22:49 +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
52b43ba8c6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-22 11:24:34 +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
5f00ebd852 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-08-18 08:00:12 +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
54bdbfdc56 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-07-20 11:21:09 +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
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
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
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
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
eebe9d48d3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-09 08:48:00 +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
d4add8b343 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-08 18:00:20 +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
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
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
bb2ccf05a0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-05-03 18:30:03 +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
424d279c7f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-30 07:24:34 +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
1e699147ff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-28 17:13:50 +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
497d1e1ca3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-25 17:11:27 +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
f97124d694 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-25 13:05:15 +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
f42d4d38b1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-24 07:31:56 +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
337c0ed41f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-23 19:11: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
fde112e2d9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-21 18:01:53 +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
de53c5159c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-20 13:30:03 +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
80ecac5710 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-19 14:00:41 +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
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
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
e14bfd9326 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-15 13:24:38 +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
6e489dc80a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-13 15:05:11 +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
3fce0d58b6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-12 16:35:04 +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
835b330331 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-11 12:38:03 +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
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
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
2b2d9ef7de Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-05 14:55:40 +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
1f92a47c30 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-04 12:33:03 +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
c83bcf9877 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-04-03 15:51:05 +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
173ecb00b3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-31 12:01: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
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
7fb0acb562 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-29 20:50:19 +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
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
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
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
b7b9acbe7e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-19 09:17:54 +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
c383ca0625 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-15 11:09:18 +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
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
658351a4d3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-11 21:14:55 +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
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
5d2ace6a14 take over attribute validation from op.UpdateDocument.php 2023-03-09 08:10:12 +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
102a5603c0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-03-03 16:14:31 +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
61b7620ab0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-28 14:21:46 +01:00
Uwe Steinmann
737e69876d fix nasty php error 2023-02-28 10:44:25 +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
e88aa870db Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-23 08:24:49 +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
cb1cb46cfe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-22 10:11:37 +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
0ffc8c78f7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-21 14:21:13 +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
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
d86b2cc883 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-02-12 14:36:17 +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
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
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
458252f531 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-26 21:06:16 +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
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
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
57bbc06577 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-25 10:12:23 +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
77ce7554a8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-21 13:58:14 +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
97feb24466 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-21 09:10:29 +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
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
c3e415ff7a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 12:22:22 +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
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
ef61f16f95 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-20 10:52:04 +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
f0a3d7d60c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-19 09:37:30 +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
83d11651b3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-17 13:04:24 +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
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
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
b351a05aba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-10 16:57:41 +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
1374c7fda3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-09 16:58:39 +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
8f07c2fd1f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-06 18:55:13 +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
12ffb0174e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-05 08:39: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
2f868c4f44 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2023-01-03 16:38:57 +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
de7d1c005e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-12-13 17:48:54 +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
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
8a01102cf5 add documentation on how to use the scheduler 2022-11-29 10:49:37 +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
53f350c2fa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-24 11:03:56 +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
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
9dbe4e25aa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-17 17:44:05 +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
4888082cda Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-15 17:16:46 +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
9850b2d8f9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-14 17:40:41 +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
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
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
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
3b74689c9c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-10 08:29:17 +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
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
dc6b153df8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-11-02 09:00:43 +01: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
6bb4eeb926 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-10-20 14:44:25 +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
97c6b19c1f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-10-11 12:33:09 +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
df659c52d9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-25 13:49:35 +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
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
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
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
a453c0e6ef Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-15 20:06:21 +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
c4d5ebd24d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-14 10:48:57 +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
ea2173b4ed set 'All' in paginator active if selected 2022-09-13 20:02:14 +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
620a5ff99d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-12 09:40:30 +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
57a90d93a6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-09 09:29:37 +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
fdf7126a68 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-09 06:57:17 +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
3ccdf862bf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-07 17:12:08 +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
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
446f04c775 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-06 10:42:09 +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
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
da3946adc6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-09-01 07:49:36 +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
80067393f1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-31 20:39:43 +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
dc7cf3ce86 remove duplicate export form 2022-08-23 08:30:27 +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
fe419f4857 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-19 08:40: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
751918ef17 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-18 13:21:53 +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
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
6d9cc4039b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-18 09:25:13 +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
365661afb8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-16 17:06:45 +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
a0db4bcc6d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-08-12 10:53:32 +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
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
6557d2edc9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-15 15:31:52 +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
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
16cdb8a323 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-07-06 14:01:30 +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
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
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
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
8bc93eac03 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-10 08:53:18 +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
6af82069e8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-09 09:04:17 +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
38dd38d7c6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-06-02 17:37:21 +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
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
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
d641a8d2ed Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-23 09:34:55 +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
332a7b2f3d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-21 19:11:11 +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
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
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
af93db836e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-20 12:31:25 +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
ecc70bc99a make progress bar a block for better positioning of popup box 2022-05-19 08:07:32 +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
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
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
dfedd201dd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-10 18:33:41 +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
c9e93c329c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-06 16:39:02 +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
21989fadbb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-05-03 18:19:51 +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
939a7dbce2 use require_once instead of include 2022-05-02 22:11:29 +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
7370eebba7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-30 15:52:31 +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
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
16c560d549 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-30 14:11: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
e383434a3d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-29 07:06:58 +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
34c7132847 translate '2_factor_auth' 2022-04-27 21:35:45 +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
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
7c29d1d4e8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-19 18:12:38 +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
eca2701da1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-14 17:01:34 +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
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
b48318d1da Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-04-07 14:39:21 +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
d90b01111e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-31 06:53:21 +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
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
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
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
48613b5897 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-23 11:27:53 +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
a4f96c76d6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-07 15:20:24 +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
a156932843 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-03-03 09:04:47 +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
eca5f3608f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-25 18:38:09 +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
b64ee6012c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-24 08:18:58 +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
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
aa61028f08 set default value of checkbox with hidden input field 2022-02-22 17:53:17 +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
275e81874a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-21 11:10:56 +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
659cdb4e6c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2022-02-21 07:15: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
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
9889bbe639 make role id an integer 2022-01-20 07:44:31 +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
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
5ec5bab294 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-15 08:40:37 +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
6fbc6043eb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-10 15:13:42 +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
d4f4d5cfcd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-04 17:51:33 +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
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
fa946be140 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-03 20:39:13 +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
050aff4798 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-02 22:10:09 +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
6e124f73f1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-12-01 11:14:22 +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
684c316f86 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-29 11:31:26 +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
f635d0e546 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-27 13:51:15 +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
45d0d0b9d7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-26 12:30:41 +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
611be01cce Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-17 20:58:16 +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
efdb37399d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-09 09:34:34 +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
f727843720 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-04 17:44:14 +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
ea5a9f499f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-11-03 16:18:06 +01: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
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
da1bf3fb97 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-26 06:57:49 +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
4c8a2496b6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-16 17:46:34 +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
3cd4763c0e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-15 13:53:55 +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
a830b18fc3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-10-06 15:19:14 +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
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
cce3899688 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-28 16:22:56 +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
0c1a795113 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-28 10:33:44 +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
24ae96b9fa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-09 12:07:17 +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
a343c4cc1c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-09-06 16:33:26 +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
5cf3b5fc3e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-27 09:56:43 +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
43c1385e0f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-20 11:16:21 +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
ef551e6923 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-20 11:01:13 +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
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
ef1113490d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-18 10:57:51 +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
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
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
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
9f20268d3b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-08-04 14:20:07 +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
58a46497f0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-21 16:11:33 +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
d7a936f6f1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-20 07:59:16 +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
75d716db26 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-14 21:10:57 +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
3cfa3d2d7b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-14 15:27:48 +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
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
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
0bd2e2d83d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-11 20:42:56 +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
c91476fe80 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-10 22:28:35 +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
e2960219c8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-09 14:53:16 +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
f5068fa30f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-07 08:28:56 +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
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
a289c8bbf6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-05 17:22:04 +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
5cbf98e832 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-01 12:45:53 +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
2a23dbb0ef Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-07-01 12:25:19 +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
8c4e20e649 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-29 11:27:25 +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
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
38993eced2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-28 12:04:58 +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
34a02f77d7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-28 09:26:22 +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
39fc81b64b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-25 09:35:35 +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
371f348d88 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-25 08:59:18 +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
f443f6544a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-24 14:37:50 +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
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
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
8cbf9c803f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-23 17:18:21 +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
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
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
e91a66af21 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-16 14:28:33 +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
eeb3422e8a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-14 17:20:39 +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
514249a132 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-09 13:01:45 +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
047b5bb3b0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-08 07:09:04 +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
7c818d0913 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-06-01 11:02:45 +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
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
64658c06cd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-31 21:53:08 +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
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
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
88ace95baa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-21 10:40:25 +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
960edf45ea Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-17 13:34:08 +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
447c035065 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-17 06:59:44 +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
a024cc19d3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-13 17:02:52 +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
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
21b590d547 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-12 10:57:17 +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
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
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
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
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
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
3cee482b1c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 17:51:17 +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
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
3205f6ad82 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 09:34:09 +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
1d4e7364ec Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 08:27:05 +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
aece6cbaaa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-07 07:33:43 +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
065244c128 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 21:24:54 +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
faa47a9d2e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 20:54:17 +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
c640ece18b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 15:12:35 +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
9c9de6d0a1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 14:49:32 +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
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
791872adee Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-06 13:09:45 +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
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
e557811acf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-05 15:31:20 +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
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
12a44b75a3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-05 14:12:09 +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
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
0acfb9a265 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 17:30:23 +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
4cb4cce922 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 13:53:29 +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
b03e759053 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-04 09:04:25 +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
34b1d792ec Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-03 15:17:43 +02:00
Uwe Steinmann
bc1faf4d2e set initial document status from settings 2021-05-03 13:44:38 +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
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
5e18a0b5b4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-02 13:06:29 +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
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
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
ded86a39f2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-01 14:09:28 +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
025e293f80 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-05-01 13:21:12 +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
4a23c1df86 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-30 16:13:30 +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
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
ed12ddb573 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-30 07:57:57 +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
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
86fa6269b4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-27 20:57:54 +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
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
4c47d69a88 remove old html code 2021-04-23 12:51:31 +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
54dabfed93 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-23 10:01:03 +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
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
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
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
606f8d8df8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-21 12:39:54 +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
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
d994232cc4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-19 08:38:41 +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
d8c534dff4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-18 20:16:22 +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
f3fb09762f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-18 08:45:23 +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
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
8fcfd70bd6 Merge branch 'seeddms-5.1.x' 2021-04-13 07:43:43 +02:00
Uwe Steinmann
7c2ac0e6ad Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-12 17:54:25 +02:00
Uwe Steinmann
7aba671ade Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-08 10:56:51 +02:00
Uwe Steinmann
59e92a836f minor formating change 2021-04-08 10:55:33 +02:00
Uwe Steinmann
e10b7ff3e3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-06 22:04:43 +02:00
Uwe Steinmann
5dc5400e04 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-06 18:57:02 +02:00
Uwe Steinmann
e8d1369fad Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-06 11:18:11 +02:00
Uwe Steinmann
397081bdeb replace plain html with formField(), add help to task params 2021-04-06 07:56:47 +02:00
Uwe Steinmann
ceeedcdd92 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-04-05 10:24:28 +02:00
Uwe Steinmann
aa045478dd pass number of days to getDocumentList('DueRevisions') 2021-04-03 07:53:12 +02:00
Uwe Steinmann
c9faef81f7 use formField() instead of plain html, scroll to top for editing a task 2021-04-03 07:50:47 +02:00
Uwe Steinmann
6b0b517bed Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-30 13:03:50 +02:00
Uwe Steinmann
9bb2943719 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-29 13:48:39 +02:00
Uwe Steinmann
ee727c12ba Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-29 07:37:00 +02:00
Uwe Steinmann
8fbb5fe24c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-26 07:51:19 +01:00
Uwe Steinmann
67d8cf39fb regular users can no longer set owner of document while uploading 2021-03-25 16:37:56 +01:00
Uwe Steinmann
6defb81dd8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-23 17:43:58 +01:00
Uwe Steinmann
ffc259c680 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-22 06:40:03 +01:00
Uwe Steinmann
bbc4943973 pass 3rd parameter to formField() if returned by hook 2021-03-19 10:52:39 +01:00
Uwe Steinmann
a9a68d9d7b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-19 10:51:02 +01:00
Uwe Steinmann
64e6e8f1c4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-17 08:09:13 +01:00
Uwe Steinmann
18cfdb3efe Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-16 19:15:23 +01:00
Uwe Steinmann
e728633349 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-15 16:45:51 +01:00
Uwe Steinmann
1710e5278b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-15 16:37:07 +01:00
Uwe Steinmann
fd23364bde Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-15 12:24:27 +01:00
Uwe Steinmann
c7f8c157c6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-14 14:14:37 +01:00
Uwe Steinmann
70b2fa45e4 check if $recipients['i'] and ['g'] are set instead of $recipients 2021-03-12 21:54:52 +01:00
Uwe Steinmann
05e1f04773 fix merge error 2021-03-12 10:13:57 +01:00
Uwe Steinmann
c39fbcb70d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-12 10:12:30 +01:00
Uwe Steinmann
c8aca99462 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-10 15:59:25 +01:00
Uwe Steinmann
0c08af7246 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-10 12:22:19 +01:00
Uwe Steinmann
58f349e295 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-10 09:15:57 +01:00
Uwe Steinmann
c494afa49c wrong ticket number, must be #503 not #504 2021-03-08 08:04:53 +01:00
Uwe Steinmann
7f0ed73f74 close Ticket #504 2021-03-08 08:03:23 +01:00
Uwe Steinmann
1df630a28e fix downloading approval file 2021-03-08 08:02:11 +01:00
Uwe Steinmann
347c740f1f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-06 16:27:48 +01:00
Uwe Steinmann
5e3f5fc8f0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-05 07:24:26 +01:00
Uwe Steinmann
7574615b3c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-02 11:57:49 +01:00
Uwe Steinmann
664b881eb7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-03-01 18:38:13 +01:00
Uwe Steinmann
b9e12a82ae remove old table layout and use formField() 2021-03-01 09:26:37 +01:00
Uwe Steinmann
7292ceb83c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-25 17:06:47 +01:00
Uwe Steinmann
ad49c78302 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-25 12:06:08 +01:00
Uwe Steinmann
ff5580fa7e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-24 18:56:52 +01:00
Uwe Steinmann
5b9df18756 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-24 18:24:23 +01:00
Uwe Steinmann
53ee447d84 get logger in execute() 2021-02-24 15:11:20 +01:00
Uwe Steinmann
a0ef972028 send expired docs mail as html, log sending mail 2021-02-24 15:01:13 +01:00
Uwe Steinmann
47b3416b5b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-24 13:45:40 +01:00
Uwe Steinmann
4f650f3d2b use new methods getMandatoryReviewers and getMandatoryApprovers 2021-02-24 13:33:53 +01:00
Uwe Steinmann
bb779c678c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-24 13:29:35 +01:00
Uwe Steinmann
8e78a217fc add advanced access control for folder, do not show delete doc/folder button without access 2021-02-24 10:23:51 +01:00
Uwe Steinmann
826a6ae109 add check_view_access 2021-02-24 10:23:01 +01:00
Uwe Steinmann
2fd21b9792 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-24 06:16:34 +01:00
Uwe Steinmann
58e1abe568 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-23 21:05:38 +01:00
Uwe Steinmann
41e2d7b3be Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-23 20:49:59 +01:00
Uwe Steinmann
2650ff4d7f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-23 20:37:38 +01:00
Uwe Steinmann
bc06fd60f0 include Utils.php 2021-02-23 20:16:26 +01:00
Uwe Steinmann
2850298297 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-23 12:22:29 +01:00
Uwe Steinmann
b0868e9726 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-23 11:50:13 +01:00
Uwe Steinmann
a018a1602a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-23 08:43:31 +01:00
Uwe Steinmann
ec8d2ab8b3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-23 07:15:29 +01:00
Uwe Steinmann
d22d21d157 cancel checkout if versions mismatch 2021-02-18 16:32:32 +01:00
Uwe Steinmann
d82bd687aa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-16 21:47:46 +01:00
Uwe Steinmann
02a830e74c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-16 14:42:09 +01:00
Uwe Steinmann
16c8102392 send list of expired docs to configured email address 2021-02-15 19:04:23 +01:00
Uwe Steinmann
5ac51f3c89 getDocumentList() can return sleeping revision 2021-02-11 12:24:07 +01:00
Uwe Steinmann
0d43c618cd getCurrentDatetime() takes parameter for day offset 2021-02-11 12:23:35 +01:00
Uwe Steinmann
68a16ce372 SeedDMS_Core_DMS::getDocumentList() uses ambiguous column name when sorting by status 2021-02-11 08:36:07 +01:00
Uwe Steinmann
3931227789 set new/old status code in notification mail, fix sending mail 2021-02-10 15:36:52 +01:00
Uwe Steinmann
6fa0849924 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-09 11:16:55 +01:00
Uwe Steinmann
7d93bccee6 replace old table layout 2021-02-09 11:09:02 +01:00
Uwe Steinmann
e68608bf04 check for tasks in all possible lists 2021-02-09 09:18:38 +01:00
Uwe Steinmann
7696dc66b8 no need to init task lists 2021-02-09 09:18:21 +01:00
Uwe Steinmann
d53318b917 set recvtyp to NOTIFICATION approval_submit notification 2021-02-08 18:55:18 +01:00
Uwe Steinmann
aaec9a5410 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-06 18:02:04 +01:00
Uwe Steinmann
531e11ce57 pass document status to notification 2021-02-05 14:22:04 +01:00
Uwe Steinmann
c524add775 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-05 13:28:34 +01:00
Uwe Steinmann
92949d8887 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-05 10:56:27 +01:00
Uwe Steinmann
2f23a09f24 update changes for 6.0.15 2021-02-05 07:31:47 +01:00
Uwe Steinmann
445664ed53 do not count expired documents in task list anymore 2021-02-05 07:30:00 +01:00
Uwe Steinmann
9186cf66c3 expired documents can be skipped from counting in countTasks() 2021-02-05 07:28:46 +01:00
Uwe Steinmann
3ac58509cc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-04 12:26:59 +01:00
Uwe Steinmann
d5cef4fabf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-04 11:15:03 +01:00
Uwe Steinmann
4bfb3795bd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-02 22:03:54 +01:00
Uwe Steinmann
8197f37117 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-02 14:56:53 +01:00
Uwe Steinmann
73b1051d82 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-02 13:10:37 +01:00
Uwe Steinmann
6025092793 set url of notification mail 2021-02-02 13:07:57 +01:00
Uwe Steinmann
93f0faa145 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-02 10:21:35 +01:00
Uwe Steinmann
b971932c88 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-01 13:42:35 +01:00
Uwe Steinmann
2fe261492c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-02-01 13:15:40 +01:00
Uwe Steinmann
aaa40c6075 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-31 13:48:42 +01:00
Uwe Steinmann
82784f4aed set guid to whole url 2021-01-30 15:40:19 +01:00
Uwe Steinmann
dc18b39305 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-30 15:09:04 +01:00
Uwe Steinmann
c5247b8abf escape owner name and email 2021-01-30 15:04:12 +01:00
Uwe Steinmann
f32f39bb6a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-29 14:22:12 +01:00
Uwe Steinmann
f1f574c412 add changes for 6.0.15 2021-01-29 14:20:36 +01:00
Uwe Steinmann
780be78d36 add searching for revision date 2021-01-29 14:20:05 +01:00
Uwe Steinmann
aa8290e03b add searching fro revision date 2021-01-29 14:19:44 +01:00
Uwe Steinmann
935d8a7b68 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-29 10:51:19 +01:00
Uwe Steinmann
768345a2ef Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-29 10:35:45 +01:00
Uwe Steinmann
6a3939158b add new notification receiver types, pass recv type to notif. service 2021-01-29 10:12:42 +01:00
Uwe Steinmann
8c2aac4d98 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-29 10:02:45 +01:00
Uwe Steinmann
8129221b57 escape email address, use translated phrase 2021-01-28 12:02:22 +01:00
Uwe Steinmann
788b5b0014 escape email address 2021-01-28 12:01:59 +01:00
Uwe Steinmann
768c02866c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-27 16:30:10 +01:00
Uwe Steinmann
2d4c7b7581 fix calculation of checksum 2021-01-26 18:06:17 +01:00
Uwe Steinmann
d6e652ec45 add changeds for 6.0.15 2021-01-26 15:44:02 +01:00
Uwe Steinmann
a7286be63a add a new task for checking the checksum of all versions 2021-01-26 15:42:45 +01:00
Uwe Steinmann
599786bcb0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-26 13:31:02 +01:00
Uwe Steinmann
363fdf7a1a list docs and folder that fail the general object check 2021-01-26 12:03:34 +01:00
Uwe Steinmann
590a93525c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-25 10:09:47 +01:00
Uwe Steinmann
518eecde18 fix syntax error 2021-01-18 08:45:21 +01:00
Uwe Steinmann
59c59f136a fix typo in comment 2021-01-18 07:16:21 +01:00
Uwe Steinmann
b18fb02303 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-15 10:16:33 +01:00
Uwe Steinmann
a2c82409c9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-15 09:48:36 +01:00
Uwe Steinmann
663d660e29 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-14 22:35:31 +01:00
Uwe Steinmann
ec41921691 use phrase select_attr instead of select_attribute_value 2021-01-14 13:59:20 +01:00
Uwe Steinmann
20bc412a17 check if document exists 2021-01-14 09:46:34 +01:00
Uwe Steinmann
feec95eff7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-13 13:18:47 +01:00
Uwe Steinmann
df76dbf35a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-13 09:05:39 +01:00
Uwe Steinmann
e847ff2647 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-11 09:07:06 +01:00
Uwe Steinmann
5a30032375 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2021-01-08 12:00:36 +01:00
Uwe Steinmann
6f0803e698 Merge branch 'seeddms-5.1.x' 2020-12-29 09:15:13 +01:00
Uwe Steinmann
3ddd18eb84 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-29 08:27:43 +01:00
Uwe Steinmann
31ac06cfa8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-23 06:25:46 +01:00
Uwe Steinmann
1f40945218 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-21 15:51:19 +01:00
Uwe Steinmann
8d38bb7669 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-18 14:58:11 +01:00
Uwe Steinmann
649a2d280d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-18 14:37:15 +01:00
Uwe Steinmann
d6106c0673 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-18 12:45:56 +01:00
Uwe Steinmann
b93e6768c4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-18 10:55:18 +01:00
Uwe Steinmann
f80cb6c24f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-18 10:44:33 +01:00
Uwe Steinmann
1c1d547e92 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-17 18:38:04 +01:00
Uwe Steinmann
77a59e008b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-17 13:43:22 +01:00
Uwe Steinmann
2c008bafee allow editAttributes in S_IN_REVISION and S_DRAFT_APP 2020-12-17 09:37:50 +01:00
Uwe Steinmann
8e1e94e01a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-16 16:51:00 +01:00
Uwe Steinmann
5323feca9b add hook preRecipientsTab 2020-12-16 10:41:52 +01:00
Uwe Steinmann
0ac709b3c8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-15 21:39:37 +01:00
Uwe Steinmann
1d72fea524 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-15 20:21:24 +01:00
Uwe Steinmann
f7a96e6888 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-15 17:42:32 +01:00
Uwe Steinmann
2d4007d62f fix comment 2020-12-15 17:05:04 +01:00
Uwe Steinmann
e25fda8e9b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-15 10:03:45 +01:00
Uwe Steinmann
faf45dc253 searchdocs returns only docs with at least read access 2020-12-15 10:02:30 +01:00
Uwe Steinmann
0c399ced95 fix call of getDocumentChooserHtml() 2020-12-15 10:02:18 +01:00
Uwe Steinmann
6e2133747d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-14 18:47:11 +01:00
Uwe Steinmann
f7bedcdbd8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-14 18:18:40 +01:00
Uwe Steinmann
f3cc82a780 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-14 17:20:37 +01:00
Uwe Steinmann
a80f177691 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-14 15:00:31 +01:00
Uwe Steinmann
63c0804e07 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-14 10:52:10 +01:00
Uwe Steinmann
c369950458 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-13 09:11:40 +01:00
Uwe Steinmann
b65c62e370 fix error when checking for manager 2020-12-12 15:57:14 +01:00
Uwe Steinmann
d46d6821fc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-11 09:28:10 +01:00
Uwe Steinmann
410eeecd7f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-11 09:17:20 +01:00
Uwe Steinmann
e3d7a6f464 show path and name of selected doc/folder in doc/folder chooser as title 2020-12-11 09:13:04 +01:00
Uwe Steinmann
0d9cdf7dcd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-10 13:54:21 +01:00
Uwe Steinmann
52f5dbdcfa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-09 19:55:29 +01:00
Uwe Steinmann
6dd96137bf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-07 20:45:32 +01:00
Uwe Steinmann
020dfb00d2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-01 22:05:28 +01:00
Uwe Steinmann
fcab6f5a09 format date with getLongReadableDate() 2020-12-01 21:59:02 +01:00
Uwe Steinmann
bf22fe7e6a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-01 21:48:21 +01:00
Uwe Steinmann
3e0e8a1b8d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-01 18:38:22 +01:00
Uwe Steinmann
104952d644 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-12-01 12:42:48 +01:00
Uwe Steinmann
2158225795 put revision date into log messages 2020-12-01 12:37:13 +01:00
Uwe Steinmann
8b796353a5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-26 10:56:56 +01:00
Uwe Steinmann
67a8d10797 add discarding of checked out document 2020-11-26 09:14:03 +01:00
Uwe Steinmann
c9a2aaca9c add notes for 6.0.14 2020-11-26 09:13:37 +01:00
Uwe Steinmann
5e8de41b2e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-24 17:48:37 +01:00
Uwe Steinmann
a182717d4a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-24 09:28:21 +01:00
Uwe Steinmann
152c943d5a SeedDMS_Core_Document::getCheckOutInfo() returns all checkout versions 2020-11-24 08:04:44 +01:00
Uwe Steinmann
858c449489 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-22 12:53:23 +01:00
Uwe Steinmann
ab438f18d9 issue warning when deleting a checked out document 2020-11-22 11:39:57 +01:00
Uwe Steinmann
ffef8d2417 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-16 16:56:21 +01:00
Uwe Steinmann
78aab08ebd do not show the task menu at all, if there are no tasks 2020-11-16 16:50:37 +01:00
Uwe Steinmann
f440d8bf54 call hook filterList 2020-11-15 07:44:09 +01:00
Uwe Steinmann
15d05d6ace Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-13 11:24:43 +01:00
Uwe Steinmann
f47ad55223 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-11 17:42:21 +01:00
Uwe Steinmann
a80f710317 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-11 17:35:57 +01:00
Uwe Steinmann
6f2581bba2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-09 16:04:03 +01:00
Uwe Steinmann
ab5e96a5ca Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-09 15:14:36 +01:00
Uwe Steinmann
f1aed51047 add method callHook() to class SeedDMS_SchedulerTaskBase 2020-11-09 15:03:06 +01:00
Uwe Steinmann
715f6ec04e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-11-05 08:41:45 +01:00
Uwe Steinmann
65a1b64db9 remove old code which was already removed in 5.1.x 2020-10-28 14:37:32 +01:00
Uwe Steinmann
3014b94111 fix syntax error 2020-10-28 14:35:05 +01:00
Uwe Steinmann
6ed79ac5dc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-28 13:57:05 +01:00
Uwe Steinmann
598529da7a add item for 6.0.14 2020-10-23 18:48:32 +02:00
Uwe Steinmann
88155c8cbf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-23 18:47:59 +02:00
Uwe Steinmann
5a166d6a2b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-23 17:56:11 +02:00
Uwe Steinmann
40f410a762 check for workflow and workflowstate 2020-10-23 16:27:06 +02:00
Uwe Steinmann
0cc4fccd7f show list of recject and docs that need attention if for traditional_only_approval 2020-10-23 16:26:30 +02:00
Uwe Steinmann
d627aff69c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-23 13:31:26 +02:00
Uwe Steinmann
18c7a910bb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-22 13:14:29 +02:00
Uwe Steinmann
024a61319e fix typo in printDocumentChooserHtml() 2020-10-22 12:40:35 +02:00
Uwe Steinmann
867d676ef2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-22 12:31:22 +02:00
Uwe Steinmann
5bfc79ceff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-22 07:39:56 +02:00
Uwe Steinmann
1617518282 show debug menu only if debug mode is on 2020-10-21 21:49:48 +02:00
Uwe Steinmann
71d9e14d69 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-21 09:37:46 +02:00
Uwe Steinmann
831dff03db Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-16 16:01:54 +02:00
Uwe Steinmann
3b0ee6c3e3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-08 09:36:41 +02:00
Uwe Steinmann
3f74df0ae4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-07 15:21:01 +02:00
Uwe Steinmann
dc8c8670db Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-06 14:24:57 +02:00
Uwe Steinmann
eb0367bd7c document links can be added by regular users again 2020-10-06 06:37:07 +02:00
Uwe Steinmann
73fe0e37ff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-10-05 17:15:09 +02:00
Uwe Steinmann
16e4437032 more packages 2020-10-01 10:52:49 +02:00
Uwe Steinmann
c81a2554aa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-30 11:04:52 +02:00
Uwe Steinmann
8d2de27828 add indexing task 2020-09-30 09:11:13 +02:00
Uwe Steinmann
9b357ec3d9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-29 17:17:23 +02:00
Uwe Steinmann
b8652ec951 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-29 17:02:26 +02:00
Uwe Steinmann
94e57c6a5b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-29 16:40:03 +02:00
Uwe Steinmann
5d28744758 Merge branch 'seeddms-5.1.x' into master 2020-09-29 14:25:14 +02:00
Uwe Steinmann
237fb9af42 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-29 13:53:41 +02:00
Uwe Steinmann
4c1acfe6dd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-29 09:57:21 +02:00
Uwe Steinmann
a71da52667 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-28 19:21:54 +02:00
Uwe Steinmann
12e85f66c3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-27 10:34:52 +02:00
Uwe Steinmann
c2df7a2421 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-25 09:24:44 +02:00
Uwe Steinmann
e38e16bf69 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-25 08:53:55 +02:00
Uwe Steinmann
78948a3f51 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-24 11:56:29 +02:00
Uwe Steinmann
5148f27a01 set propper id of input field for library document to fix validation 2020-09-24 11:42:54 +02:00
Uwe Steinmann
d9c1d2f5af add item for 6.0.13 2020-09-24 08:56:58 +02:00
Uwe Steinmann
76f6500fd4 sync checkin code with update document code 2020-09-24 08:55:30 +02:00
Uwe Steinmann
5e1bb70d9b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-24 08:32:41 +02:00
Uwe Steinmann
c0b7f1a395 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-23 15:56:54 +02:00
Uwe Steinmann
b8b88b1ba3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-23 13:12:41 +02:00
Uwe Steinmann
fdfad60c97 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-23 08:55:44 +02:00
Uwe Steinmann
0b5ced7efb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-23 08:47:06 +02:00
Uwe Steinmann
36215f676a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-23 08:41:44 +02:00
Uwe Steinmann
dfad2e581b nicer layout for list of revisors and recepients 2020-09-23 07:25:31 +02:00
Uwe Steinmann
467e76b5b0 make button primary 2020-09-22 11:26:21 +02:00
Uwe Steinmann
28d45c0270 use 'text-xxx' class from bootstrap instead of own classes 2020-09-22 11:25:44 +02:00
Uwe Steinmann
f0bdb0fda3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-22 10:24:19 +02:00
Uwe Steinmann
505f0f97b7 check for access on view FolderAccess 2020-09-22 06:59:20 +02:00
Uwe Steinmann
62cf4f3fba add missing access check for FolderNotify 2020-09-21 18:00:34 +02:00
Uwe Steinmann
1de3bf1d41 init $menuitems for menu earlier 2020-09-21 11:03:19 +02:00
Uwe Steinmann
52e336ea4b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-18 19:24:59 +02:00
Uwe Steinmann
9a1d92d250 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-18 19:16:58 +02:00
Uwe Steinmann
71134eb29c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-18 07:48:41 +02:00
Uwe Steinmann
2c43ef2c96 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-17 15:57:41 +02:00
Uwe Steinmann
d06e5fa3fb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-17 09:27:08 +02:00
Uwe Steinmann
630fefa3a8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-15 12:14:56 +02:00
Uwe Steinmann
5a32f4b7c5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-07 16:21:15 +02:00
Uwe Steinmann
94b8690266 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-06 07:46:51 +02:00
Uwe Steinmann
45f1184696 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-06 07:32:40 +02:00
Uwe Steinmann
4770364c45 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-06 07:27:15 +02:00
Uwe Steinmann
8ec772c504 check if download file can be created 2020-09-04 14:10:24 +02:00
Uwe Steinmann
a736d60df5 fix creation of zip files, create temp file in sys_get_temp_dir() 2020-09-04 14:09:53 +02:00
Uwe Steinmann
faecb589cb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-04 13:23:35 +02:00
Uwe Steinmann
131d2b4645 close bug #487 in 6.0.13 2020-09-04 09:44:49 +02:00
Uwe Steinmann
4c64b316db create download file in system tmp, better error checking (Closes: #487) 2020-09-04 09:43:18 +02:00
Uwe Steinmann
01062a16a5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-04 09:38:32 +02:00
Uwe Steinmann
52dfa8f401 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-04 09:31:30 +02:00
Uwe Steinmann
3d40b14691 read env var SEEDDMS_CONFIG_FILE 2020-09-03 16:04:57 +02:00
Uwe Steinmann
480a130180 fix import of role 2020-09-03 14:22:11 +02:00
Uwe Steinmann
a78800e036 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-03 14:21:30 +02:00
Uwe Steinmann
a17220d373 Merge branch 'seeddms-5.1.x' into master 2020-09-02 21:25:53 +02:00
Uwe Steinmann
ce2e6c61d2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-02 09:01:18 +02:00
Uwe Steinmann
a5994e3011 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-01 15:15:07 +02:00
Uwe Steinmann
1a9e7bde1b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-09-01 11:17:02 +02:00
Uwe Steinmann
ac81ce4335 add changes for 6.0.12 2020-08-31 15:41:24 +02:00
Uwe Steinmann
8865f61a54 show menu tasks in legacy mode (Closes #485) 2020-08-31 15:35:54 +02:00
Uwe Steinmann
012dbeaf27 fix access on workflow object 2020-08-31 15:31:29 +02:00
Uwe Steinmann
ee656527c2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-31 14:47:09 +02:00
Uwe Steinmann
10ecff6142 better check fro repair parameter 2020-08-31 13:18:05 +02:00
Uwe Steinmann
9e5224a661 fix typo in var name 2020-08-31 13:01:40 +02:00
Uwe Steinmann
d1ad6383d2 update notes for 5.1.19 2020-08-28 15:37:02 +02:00
Uwe Steinmann
031408fdae remove duplicate release 5.1.17 2020-08-28 15:33:59 +02:00
Uwe Steinmann
29471ea6b3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-28 13:11:40 +02:00
Uwe Steinmann
9f491dce6d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-28 12:34:26 +02:00
Uwe Steinmann
67cb38bd54 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-27 08:52:58 +02:00
Uwe Steinmann
aa3384f28b update icons from font-awesome 3.2.x to 4.7.x 2020-08-27 08:48:43 +02:00
Uwe Steinmann
600d14ed88 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-27 08:27:19 +02:00
Uwe Steinmann
19502debea Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-21 14:06:21 +02:00
Uwe Steinmann
7b78a1ac69 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-20 19:59:26 +02:00
Uwe Steinmann
276b62082b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-14 11:12:07 +02:00
Uwe Steinmann
caea759aa9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-12 09:19:09 +02:00
Uwe Steinmann
db6456d698 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-12 07:27:01 +02:00
Uwe Steinmann
e3bb44d504 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-10 07:34:14 +02:00
Uwe Steinmann
4828c5ba63 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-05 18:53:08 +02:00
Uwe Steinmann
b89b2a9254 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-05 18:45:09 +02:00
Uwe Steinmann
6c84cab7d4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-05 06:45:51 +02:00
Uwe Steinmann
ca5457141d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-03 12:52:02 +02:00
Uwe Steinmann
446472c3b1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-08-01 13:50:43 +02:00
Uwe Steinmann
709d362b02 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-30 11:06:28 +02:00
Uwe Steinmann
54dea818f7 Merge branch 'seeddms-5.1.x' into master 2020-07-27 20:29:54 +02:00
Uwe Steinmann
08d2cc389e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-27 20:06:38 +02:00
Uwe Steinmann
680818a760 changes for 6.0.11 2020-07-27 18:43:27 +02:00
Uwe Steinmann
096f9773dc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-27 15:33:40 +02:00
Uwe Steinmann
ab8b42f960 add Content-Type to javascript file 2020-07-27 15:33:24 +02:00
Uwe Steinmann
53d33f0d7a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-22 15:10:45 +02:00
Uwe Steinmann
2edf1251c7 fix select menu for owner 2020-07-22 15:09:25 +02:00
Uwe Steinmann
d664e166b6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-22 14:57:07 +02:00
Uwe Steinmann
9f49460ee9 show container around add attachment button only if button is visible 2020-07-21 16:07:51 +02:00
Uwe Steinmann
508e1b74d3 fixed name of view parameter previewConverters 2020-07-21 09:26:17 +02:00
Uwe Steinmann
5ba96000c1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-21 07:30:23 +02:00
Uwe Steinmann
0d4cd6a0be check if converters['preview'] exists 2020-07-21 07:17:19 +02:00
Uwe Steinmann
9c8f737dcd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-21 07:08:57 +02:00
Uwe Steinmann
a34cd8b4ee add new revisor when transfering processes even in status 'sleeping' 2020-07-20 19:31:47 +02:00
Uwe Steinmann
8eec73b4be add more documentation is addRevisor() 2020-07-20 19:30:36 +02:00
Uwe Steinmann
77c2841d40 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-03 06:48:35 +02:00
Uwe Steinmann
00d9a8c239 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-07-02 17:42:33 +02:00
Uwe Steinmann
4bd68ac535 keep documents from being index again unless they have really changed 2020-07-02 17:41:09 +02:00
Uwe Steinmann
38d8aebb49 allow select menu for task parameters 2020-07-02 17:19:07 +02:00
Uwe Steinmann
fd0a362578 allow to disable task when creating 2020-07-01 15:52:12 +02:00
Uwe Steinmann
28aed4d11a fix error msg when user cli_scheduler does not exists 2020-07-01 09:05:18 +02:00
Uwe Steinmann
e64ef5fae3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-29 08:23:06 +02:00
Uwe Steinmann
fbfd3644c7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-29 07:33:49 +02:00
Uwe Steinmann
e440985fb9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-28 19:54:39 +02:00
Uwe Steinmann
db668791d1 check for user cli_scheduler before running any tasks 2020-06-28 19:24:12 +02:00
Uwe Steinmann
9a8b13a1cc check if $recipients is set 2020-06-28 19:23:38 +02:00
Uwe Steinmann
b44a368d6d use new method resolveTask() 2020-06-28 13:59:54 +02:00
Uwe Steinmann
af9dc81ba4 add method resolveTask() 2020-06-28 13:58:32 +02:00
Uwe Steinmann
cd3026a88a remove spaces 2020-06-28 13:57:34 +02:00
Uwe Steinmann
b14326e1ad more precise check for available task 2020-06-27 12:27:59 +02:00
Uwe Steinmann
9eae07fae9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-25 08:57:02 +02:00
Uwe Steinmann
cfc2ca1e24 support for additional parameters of type 'password' 2020-06-25 08:54:37 +02:00
Uwe Steinmann
619e8a8d30 do not output passwords as clear text 2020-06-25 08:54:10 +02:00
Uwe Steinmann
31720be0fe add prototype functions, add getAdditionalParametersByName() 2020-06-25 08:53:34 +02:00
Uwe Steinmann
395d71b705 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-24 21:23:08 +02:00
Uwe Steinmann
505bf27d52 include ClassNotificationService and ClassEmailNotify 2020-06-24 21:13:22 +02:00
Uwe Steinmann
d56812f66d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-19 08:09:30 +02:00
Uwe Steinmann
d9143ff271 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-16 12:14:03 +02:00
Uwe Steinmann
5bb78b6468 fix sorting by name in getInstanceBy(), init _dms to null 2020-06-16 08:29:33 +02:00
Uwe Steinmann
550f0ee1f1 fix typo in comments 2020-06-16 07:20:57 +02:00
Uwe Steinmann
bf1d8482d4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-09 21:36:48 +02:00
Uwe Steinmann
1c8452ecea docs in S_IN_REVISION are in list AppRev (had been removed after merge) 2020-06-06 16:15:32 +02:00
Uwe Steinmann
50fb928988 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-06-05 18:10:23 +02:00
Uwe Steinmann
98734e8ef9 add entry for 6.0.11 2020-06-05 17:50:26 +02:00
Uwe Steinmann
b974f4c4e9 filterAccess() propperly checks for documents 2020-06-05 17:45:31 +02:00
Uwe Steinmann
cc6fd60168 start new version 6.0.11 2020-06-05 17:45:17 +02:00
Uwe Steinmann
b2c606f37f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-28 11:54:09 +02:00
Uwe Steinmann
a446f45e43 Merge branch 'seeddms-5.1.x' 2020-05-28 11:37:04 +02:00
Uwe Steinmann
db3a372e94 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-28 11:25:22 +02:00
Uwe Steinmann
6f0b8806a1 include inc.ClassSchedulerTaskBase.php 2020-05-28 08:10:39 +02:00
Uwe Steinmann
b1c433e594 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-28 08:01:47 +02:00
Uwe Steinmann
3a913aaaa9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-28 07:38:09 +02:00
Uwe Steinmann
3a29edff89 some info on how to set up the cronjob 2020-05-27 22:13:47 +02:00
Uwe Steinmann
c59a112917 add entry for 6.0.10 (adding op.Cron.php) 2020-05-27 22:08:18 +02:00
Uwe Steinmann
579b561d9d add script to run scheduled tasks 2020-05-27 22:07:13 +02:00
Uwe Steinmann
f4a9182ead fix getting document id for image preview 2020-05-27 16:35:11 +02:00
Uwe Steinmann
4f014a51e4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-27 16:34:07 +02:00
Uwe Steinmann
6773f93e11 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-27 16:24:43 +02:00
Uwe Steinmann
376df1cb20 include new task for checking for expired documents 2020-05-27 15:12:03 +02:00
Uwe Steinmann
fc5ad6e5e5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-27 12:07:03 +02:00
Uwe Steinmann
d497eebc01 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-27 12:05:39 +02:00
Uwe Steinmann
88a3359a9e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-26 14:53:41 +02:00
Uwe Steinmann
90cf72367d put name and description in one column 2020-05-26 14:12:58 +02:00
Uwe Steinmann
e5477708ad ??? 2020-05-25 17:09:15 +02:00
Uwe Steinmann
3e45348b31 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-25 15:57:49 +02:00
Uwe Steinmann
c645bc3782 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-22 16:36:10 +02:00
Uwe Steinmann
f3b7a979ff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-22 16:30:44 +02:00
Uwe Steinmann
496020ca59 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-22 16:30:05 +02:00
Uwe Steinmann
16f8333e89 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-22 14:25:30 +02:00
Uwe Steinmann
2d97c204a8 determine SEEDDMS_HOME if not explicitly set 2020-05-20 20:54:34 +02:00
Uwe Steinmann
1b8e7883d1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-20 11:14:37 +02:00
Uwe Steinmann
fd668ce709 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-20 06:26:07 +02:00
Uwe Steinmann
2bd75c6d1f add mode 'dryrun', actually check if a task is due 2020-05-19 17:49:32 +02:00
Uwe Steinmann
98374b513d fix syntax error 2020-05-19 11:54:39 +02:00
Uwe Steinmann
c946126e53 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-19 11:05:22 +02:00
Uwe Steinmann
22d314b87a add entries of 6.0.10 and 6.0.9 2020-05-19 08:07:38 +02:00
Uwe Steinmann
c0f4ea859b add removal of task 2020-05-19 08:07:21 +02:00
Uwe Steinmann
df02d76e56 add removal of task 2020-05-19 08:06:42 +02:00
Uwe Steinmann
92bf2e1d69 add method remove(), add optional parameter to getParameter() 2020-05-19 08:06:09 +02:00
Uwe Steinmann
204387237f add changelog for 5.1.17 2020-05-19 06:15:13 +02:00
Uwe Steinmann
30ae0ffc30 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-18 18:44:54 +02:00
Uwe Steinmann
e4ac7a9275 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-18 18:31:46 +02:00
Uwe Steinmann
57830a60d1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-18 16:25:52 +02:00
Uwe Steinmann
537327e41d pass $user to execute() method of task 2020-05-18 16:24:19 +02:00
Uwe Steinmann
ff69d6e08e allow checkboxes for task parameters 2020-05-18 16:23:57 +02:00
Uwe Steinmann
317f10b5d1 fix saving parameters 2020-05-18 16:21:54 +02:00
Uwe Steinmann
cdf29f754d remove spaces in empty line 2020-05-18 16:21:24 +02:00
Uwe Steinmann
3776d2037d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-18 07:24:14 +02:00
Uwe Steinmann
d524c5f48c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-18 07:07:18 +02:00
Uwe Steinmann
7ed2660453 check if extension is enabled 2020-05-15 17:25:22 +02:00
Uwe Steinmann
2e31004982 pass updating user to callback onSetStatus, finish revision when document status changes form inrevision to released 2020-05-15 17:24:04 +02:00
Uwe Steinmann
6319318773 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-15 08:21:33 +02:00
Uwe Steinmann
06de96a552 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-15 08:17:12 +02:00
Uwe Steinmann
a31524df09 delRevisor() returns -4 if user has placed revision already 2020-05-15 08:05:46 +02:00
Uwe Steinmann
bf11f7cc87 clear revision date when all revisors have been deleted 2020-05-15 08:05:04 +02:00
Uwe Steinmann
d1e79d1afc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-14 14:46:56 +02:00
Uwe Steinmann
4a88ff342f include bootbox 2020-05-13 15:29:14 +02:00
Uwe Steinmann
a8af1a148b pass showtree to view 2020-05-13 15:25:43 +02:00
Uwe Steinmann
ae9be17b4d support onepage mode, update url after selecting a document list 2020-05-13 14:51:52 +02:00
Uwe Steinmann
521e3b3380 propperly include bootbox 2020-05-13 14:38:03 +02:00
Uwe Steinmann
1bf0529a68 add javascript translations 2020-05-13 14:33:26 +02:00
Uwe Steinmann
8884b1b54d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-13 13:53:37 +02:00
Uwe Steinmann
1ebe7332d1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-12 16:23:04 +02:00
Uwe Steinmann
84aa83d1d9 rework countDocuments()
check if user is actually set, 'WorkflowByMe' now uses a single sql
statement
2020-05-08 12:42:44 +02:00
Uwe Steinmann
8ae40fbc9e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-08 07:44:49 +02:00
Uwe Steinmann
6dddef6efa fix uploading files with fine uploader (Closes: #472) 2020-05-07 09:11:56 +02:00
Uwe Steinmann
000a8e7710 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-07 07:15:42 +02:00
Uwe Steinmann
48353cfa81 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-05-05 16:36:55 +02:00
Uwe Steinmann
dc661029af Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-23 21:47:30 +02:00
Uwe Steinmann
d1f47f9320 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-22 17:22:24 +02:00
Uwe Steinmann
1aefc633f9 fix adding new calendar event 2020-04-20 07:23:17 +02:00
Uwe Steinmann
20e3826316 add dummy note in 6.0.9 2020-04-17 14:09:56 +02:00
Uwe Steinmann
4d27f98c1b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-17 14:06:52 +02:00
Uwe Steinmann
00cd7fc700 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-16 17:21:10 +02:00
Uwe Steinmann
7485e0b57a fix notes 2020-04-14 18:04:08 +02:00
Uwe Steinmann
7cc6ed952e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-14 18:02:35 +02:00
Uwe Steinmann
16613a1e27 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-14 17:44:27 +02:00
Uwe Steinmann
6e89a180b1 fix upload from dropfolder 2020-04-14 17:13:32 +02:00
Uwe Steinmann
5d1d406cc1 take out empty opition for owner in fulltext search form 2020-04-02 08:46:00 +02:00
Uwe Steinmann
4538858561 new entry for 6.0.9 2020-04-02 08:25:50 +02:00
Uwe Steinmann
2e58a9324f fix arcordeon for folder parameters 2020-04-02 08:25:00 +02:00
Uwe Steinmann
ede1cf3fbc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-02 07:44:39 +02:00
Uwe Steinmann
9f0bc73372 add item for 6.0.9 2020-04-01 18:36:24 +02:00
Uwe Steinmann
48cc8d80e8 use SeedDMS_Core_Document::isType() to check for documents 2020-04-01 18:29:48 +02:00
Uwe Steinmann
c69490daba translate headers, use DateTime for Excel dates 2020-04-01 18:29:11 +02:00
Uwe Steinmann
0fac1646d4 set $docAccess before checking the workflow mode 2020-04-01 16:56:20 +02:00
Uwe Steinmann
9b30289b32 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-04-01 14:38:12 +02:00
Uwe Steinmann
97f5f73730 process of user can be deleted again, instead of transfered to another user 2020-03-27 08:16:12 +01:00
Uwe Steinmann
297bdcb3a0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-26 08:04:33 +01:00
Uwe Steinmann
26ff848f9c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-26 07:55:54 +01:00
Uwe Steinmann
509d23715a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-25 09:26:58 +01:00
Uwe Steinmann
7a8fffadfc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-25 09:19:54 +01:00
Uwe Steinmann
14123cd604 add entry for 6.0.9 2020-03-24 09:31:16 +01:00
Uwe Steinmann
48ee318921 fix setting and retrieving role of user 2020-03-24 09:30:26 +01:00
Uwe Steinmann
36b5fec504 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-24 08:29:00 +01:00
Uwe Steinmann
4ad398a01e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-23 06:47:48 +01:00
Uwe Steinmann
839607e1ca Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-23 06:41:15 +01:00
Uwe Steinmann
feda33c2c8 add some more fold marks 2020-03-19 11:05:40 +01:00
Uwe Steinmann
bf9a409a71 add new method printVersionAttributes() 2020-03-19 10:13:12 +01:00
Uwe Steinmann
cce4be822c use parent::printAttribute() 2020-03-19 09:48:19 +01:00
Uwe Steinmann
9c3b34b41e move printAttribute() into parent class 2020-03-19 09:47:35 +01:00
Uwe Steinmann
2c53286943 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-18 18:17:33 +01:00
Uwe Steinmann
f21ce1f2ed add entries for 6.0.9, set cmdTimeout to 10 2020-03-13 12:22:12 +01:00
Uwe Steinmann
2324a67da4 make it work in 6.0.x 2020-03-13 12:21:44 +01:00
Uwe Steinmann
626d9d69c8 fix to be working in 6.0.x 2020-03-13 12:18:01 +01:00
Uwe Steinmann
c6cd1b6900 place delete button below selection menu 2020-03-13 09:20:12 +01:00
Uwe Steinmann
835ab33fcd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-13 08:22:45 +01:00
Uwe Steinmann
3b4cecabcc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-10 14:32:18 +01:00
Uwe Steinmann
30112e4b21 use __construct for constructors instead of class name 2020-03-10 09:43:04 +01:00
Uwe Steinmann
3d5f321713 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-05 08:05:38 +01:00
Uwe Steinmann
ef06f2909f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-04 20:39:11 +01:00
Uwe Steinmann
0ed11fcb36 fix bug #458 2020-03-04 18:27:24 +01:00
Uwe Steinmann
d928c43981 fix bug #465 2020-03-04 18:27:10 +01:00
Uwe Steinmann
6950f7777e fix bug #465 2020-03-04 18:23:11 +01:00
Uwe Steinmann
b5eddc2296 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-04 18:19:43 +01:00
Uwe Steinmann
45acd496d6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-04 17:58:01 +01:00
Uwe Steinmann
6139c781d0 Merge branch 'seeddms-5.1.x' 2020-03-02 12:03:38 +01:00
Uwe Steinmann
67e5eb5efe set notes for 5.1.15 2020-03-02 11:50:55 +01:00
Uwe Steinmann
a41e03425b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-02 11:50:03 +01:00
Uwe Steinmann
0e7b23ff4c fix error when getting version of document 2020-03-02 09:29:53 +01:00
Uwe Steinmann
756a86abe5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-03-02 09:26:41 +01:00
Uwe Steinmann
479214118e add entry for 6.0.8 2020-02-29 15:20:09 +01:00
Uwe Steinmann
13e27496e0 fix getting workflow log when triggering a transition 2020-02-29 15:19:11 +01:00
Uwe Steinmann
111d433c8a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-28 18:21:33 +01:00
Uwe Steinmann
23a456e730 fix various js errors
probably due to new cytoscape version
2020-02-28 18:12:53 +01:00
Uwe Steinmann
c8df1533e6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-28 11:18:09 +01:00
Uwe Steinmann
2eda020373 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-27 18:01:14 +01:00
Uwe Steinmann
9e5f005f05 do not check checkboxes by default 2020-02-27 17:45:54 +01:00
Uwe Steinmann
5f71f51644 add entries for 6.0.8 2020-02-26 21:14:35 +01:00
Uwe Steinmann
08c0507de2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-26 21:11:20 +01:00
Uwe Steinmann
9733c44ef3 do not access SeedDMD_Document_Content::_version anymore
use SeedDMD_Document_Content::getVersion() instead
2020-02-26 20:59:26 +01:00
Uwe Steinmann
7761f5d77b get root folder in printTreeNavigationJs() only if partialtree is not set 2020-02-26 20:58:54 +01:00
Uwe Steinmann
3d33c1d49c get rid of git merge errors 2020-02-26 20:57:40 +01:00
Uwe Steinmann
33c4f88636 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-25 17:14:36 +01:00
Uwe Steinmann
5f900b7ab1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-17 10:22:23 +01:00
Uwe Steinmann
0602fad397 Merge branch 'seeddms-5.1.x' 2020-02-17 10:21:29 +01:00
Uwe Steinmann
dc5d742c45 get docs with wrong file type in view, update page title when choosing list 2020-02-13 17:42:53 +01:00
Uwe Steinmann
1ad2976f0d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-13 16:14:37 +01:00
Uwe Steinmann
ac1c2a55e2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-13 13:25:59 +01:00
Uwe Steinmann
a6a7ede3f8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-13 12:39:08 +01:00
Uwe Steinmann
450bdc0b7f add check for wrong file type, fix repairing of checksum and filesize 2020-02-13 12:20:16 +01:00
Uwe Steinmann
9b24827598 add new method setFileType() 2020-02-13 12:19:43 +01:00
Uwe Steinmann
efec0c36bf add method getWrongFiletypeDocumentContent() 2020-02-13 12:19:16 +01:00
Uwe Steinmann
901fcaef5e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-13 08:24:25 +01:00
Uwe Steinmann
5ff1333c9f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-12 17:29:52 +01:00
Uwe Steinmann
a97114b77d fix update 2020-02-06 19:01:46 +01:00
Uwe Steinmann
7f5908bcf8 add missing ` around names 2020-02-06 19:01:25 +01:00
Uwe Steinmann
60b65aad13 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-06 18:40:45 +01:00
Uwe Steinmann
9672f19bc4 call new hook checkOutInfo 2020-02-06 17:01:26 +01:00
Uwe Steinmann
3e9d2dc695 get read access list for receipt workflow 2020-02-06 17:01:00 +01:00
Uwe Steinmann
01813f19f8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-06 12:03:14 +01:00
Uwe Steinmann
c3ef148ca6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-02-06 11:35:55 +01:00
Uwe Steinmann
58412c8179 use getDMS() instead of access varialbe _dms in folder or document 2020-01-24 08:53:04 +01:00
Uwe Steinmann
eba7f208d5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-01-24 08:49:21 +01:00
Uwe Steinmann
11a8a8087f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-01-21 17:32:24 +01:00
Uwe Steinmann
8362796339 fix sql statement for adding a new primary key 2020-01-20 11:26:44 +01:00
Uwe Steinmann
4d43097961 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-01-20 11:13:48 +01:00
Uwe Steinmann
0643a3dc87 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-01-14 13:21:44 +01:00
Uwe Steinmann
cfdd951369 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-01-13 09:45:05 +01:00
Uwe Steinmann
481d01977b fix typo 2020-01-06 13:34:38 +01:00
Uwe Steinmann
dee275397a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-01-06 12:54:31 +01:00
Uwe Steinmann
e7a50bfb91 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2020-01-01 09:25:19 +01:00
Uwe Steinmann
36231f8cf3 do not include GoogleQRCodeProvider.php anymore 2020-01-01 09:17:45 +01:00
Uwe Steinmann
6fc73a9a77 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-12-31 15:51:33 +01:00
Uwe Steinmann
7b1835774d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-12-15 08:03:36 +01:00
Uwe Steinmann
cbaa038c55 use formField() instead of plain html 2019-11-28 15:01:36 +01:00
Uwe Steinmann
dcc64bc539 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-28 14:27:52 +01:00
Uwe Steinmann
769b9e5beb add changes for 6.0.7 2019-11-28 14:07:19 +01:00
Uwe Steinmann
1593ca5f34 removeFromProcess() can transfer to new user for all processes 2019-11-28 13:48:50 +01:00
Uwe Steinmann
e14e14ddb4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-28 10:23:10 +01:00
Uwe Steinmann
df095c63a3 use getBaseUrl() 2019-11-28 10:06:48 +01:00
Uwe Steinmann
e9827b8701 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-28 10:05:12 +01:00
Uwe Steinmann
809f224e7d processes can be transfered to a new user
currently only for reviews
2019-11-28 09:18:42 +01:00
Uwe Steinmann
dabf821b6a do not run documentListRow(Start|End) if lastContent is null 2019-11-28 09:18:01 +01:00
Uwe Steinmann
babba864a1 fix error msg 2019-11-28 09:17:32 +01:00
Uwe Steinmann
3011f96372 add optional parameter $newuser to removeFromProcesses()
if set, the process will be transfered to a new user
2019-11-28 09:16:23 +01:00
Uwe Steinmann
2ec6534079 fix documentation for rewriteRevisionLog() 2019-11-28 09:15:26 +01:00
Uwe Steinmann
d82b59f173 add filter field, placeholder in input filter field 2019-11-26 17:49:27 +01:00
Uwe Steinmann
a75d337912 fix menu item for 2 factor auth 2019-11-26 17:48:54 +01:00
Uwe Steinmann
4dbec073cc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-26 17:08:10 +01:00
Uwe Steinmann
293e26c747 add access checks for summaries, add Revision summary 2019-11-25 20:48:11 +01:00
Uwe Steinmann
ac570b09e9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-25 11:52:39 +01:00
Uwe Steinmann
e4b934ea76 add js code for one page mode 2019-11-25 11:51:08 +01:00
Uwe Steinmann
10f6606efa add RevisionSummary to list of lecacy access rights 2019-11-25 11:50:11 +01:00
Uwe Steinmann
dc770f3c17 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-25 09:53:22 +01:00
Uwe Steinmann
cbac16773d more checking for access rights 2019-11-25 09:36:32 +01:00
Uwe Steinmann
0d4c970029 replace check for guest by generic acl check 2019-11-25 09:35:59 +01:00
Uwe Steinmann
79aa6c079c replace check for guest by generic acl check 2019-11-25 09:35:05 +01:00
Uwe Steinmann
684f27ef87 fix output of group name 2019-11-25 09:34:12 +01:00
Uwe Steinmann
b3cc272941 check access 2019-11-25 09:33:13 +01:00
Uwe Steinmann
893a8d6d8d return json even in case of an error 2019-11-25 09:32:32 +01:00
Uwe Steinmann
7d9de047bd add legacy access rights for groups 2019-11-25 09:31:56 +01:00
Uwe Steinmann
83e42948ee Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-21 10:55:22 +01:00
Uwe Steinmann
04f9edbb39 make download button primary 2019-11-20 19:39:47 +01:00
Uwe Steinmann
51943050c2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-20 19:23:48 +01:00
Uwe Steinmann
89d5c98818 set onepage for view 2019-11-20 18:15:10 +01:00
Uwe Steinmann
4b55bc4fd8 allow add to transmittals with only read access on document 2019-11-20 18:14:43 +01:00
Uwe Steinmann
85157a8bfe no access on some more scripts 2019-11-20 18:12:26 +01:00
Uwe Steinmann
3012fc52e5 include "inc/inc.ClassAccessOperation.php" 2019-11-20 15:09:40 +01:00
Uwe Steinmann
55727bd1a2 do not use $this->check_access() anymore 2019-11-20 13:47:57 +01:00
Uwe Steinmann
d2382f437c set 'onepage' for view 2019-11-20 13:37:52 +01:00
Uwe Steinmann
b123cd29ca Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-20 13:17:18 +01:00
Uwe Steinmann
5d9b94de6b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-20 13:14:58 +01:00
Uwe Steinmann
ed32e8e2b2 call $accessobject->check_view_access() instead of $this->check_access() 2019-11-20 13:13:51 +01:00
Uwe Steinmann
1b6a07b73e more documentation 2019-11-20 13:13:28 +01:00
Uwe Steinmann
a493e7645d set accessobject already in factory 2019-11-20 13:13:07 +01:00
Uwe Steinmann
43f57637e7 add method check_view_lecacy_access()
which does the legacy access checking if advanded acl is turned off
2019-11-20 13:12:11 +01:00
Uwe Steinmann
270770782f verifyStatus() handles status change when S_EXPIRED is set 2019-11-20 13:11:24 +01:00
Uwe Steinmann
d9a4305fd7 remove second instance of SeedDMS_AccessOperation 2019-11-19 21:03:44 +01:00
Uwe Steinmann
d96b3b84a2 add scheduler to menu 2019-11-19 21:03:19 +01:00
Uwe Steinmann
e873ba999b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-19 18:45:43 +01:00
Uwe Steinmann
ac0824ae37 set access object 2019-11-19 16:07:27 +01:00
Uwe Steinmann
400755a0e0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-19 10:30:46 +01:00
Uwe Steinmann
4a06e54f89 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-19 10:05:18 +01:00
Uwe Steinmann
e20d4e492f output processes in old versions 2019-11-19 10:03:55 +01:00
Uwe Steinmann
1d521fd97e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-19 09:35:33 +01:00
Uwe Steinmann
096b117e34 create access object 2019-11-19 08:46:43 +01:00
Uwe Steinmann
6f06faabc0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-19 07:28:13 +01:00
Uwe Steinmann
b3e7b9a2dd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-11-08 08:03:30 +01:00
Uwe Steinmann
7362bf192b add method check_access()
just like in SeedDMS_View_Common
2019-11-08 08:03:02 +01:00
Uwe Steinmann
1c08d83704 need M_ALL to set revisor 2019-11-07 21:59:02 +01:00
Uwe Steinmann
572d776e55 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-10-28 12:08:43 +01:00
Uwe Steinmann
bd56ca76c3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-10-28 09:27:14 +01:00
Uwe Steinmann
a09a023d42 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-10-28 09:16:06 +01:00
Uwe Steinmann
65212329a7 fix invaled xml 2019-10-28 08:23:27 +01:00
Uwe Steinmann
511152be68 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-10-28 08:15:20 +01:00
Uwe Steinmann
ffcc53408f fix typo in enableRevisionOnVoteReject (must be 'One') 2019-10-18 07:24:58 +02:00
Uwe Steinmann
40ddfd3ea6 allow to set status S_NEEDS_CORRECTION 2019-10-18 07:24:33 +02:00
Uwe Steinmann
7e3f490b57 fix getting view parameter 'onevotereject' 2019-10-18 07:23:20 +02:00
Uwe Steinmann
95aede5c2b fix SeedDMS_Core_DocumentContent::verifyЅtatus()
the method can now handle revisions with status==-1. Status will not
change if status is already S_NEEDS_CORRECTION
2019-10-18 07:19:51 +02:00
Uwe Steinmann
065bf4eb26 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-10-17 07:41:17 +02:00
Uwe Steinmann
a870602324 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-10-17 07:22:16 +02:00
Uwe Steinmann
9bc5b73771 do not access SeedDMS_Core_DocumentContent::_version anymore 2019-09-10 17:15:27 +02:00
Uwe Steinmann
68e97f81ce add selection for partial tree 2019-09-10 17:15:11 +02:00
Uwe Steinmann
4b5c5ab00f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-09-06 14:56:14 +02:00
Uwe Steinmann
670597ea5f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-09-06 14:51:21 +02:00
Uwe Steinmann
88168d005e take over some changes from 5.1.x 2019-09-06 14:32:14 +02:00
Uwe Steinmann
37db957c41 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-07-19 15:41:05 +02:00
Uwe Steinmann
44bf03c557 Merge branch 'seeddms-5.1.x' 2019-07-19 15:29:20 +02:00
Uwe Steinmann
801f0f0ed2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-07-05 08:10:42 +02:00
Uwe Steinmann
768ff5acb1 update entry for 5.1.12 2019-07-01 21:36:22 +02:00
Uwe Steinmann
fa64bb3200 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-07-01 21:34:08 +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
5e8c34ad54 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-05-14 20:44:47 +02:00
Uwe Steinmann
7ceb0e9718 may not edit reception if rejecting a reception is turned off 2019-04-12 08:54:25 +02:00
Uwe Steinmann
4f4160c1a5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-04-12 08:33:04 +02:00
Uwe Steinmann
570dc9ca71 new items for 6.0.7 2019-04-09 11:20:00 +02:00
Uwe Steinmann
5c59a92624 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-04-09 10:54:42 +02:00
Uwe Steinmann
469370cb42 new config option enableReceiptReject
enables rejection of receipts
2019-04-09 10:51:51 +02:00
Uwe Steinmann
f5505e85b2 order documents in tree by name 2019-04-09 10:51:31 +02:00
Uwe Steinmann
e2c3cbe3cf do not show update user for revisions in status 0 2019-04-05 13:23:38 +02:00
Uwe Steinmann
1a002c9d18 Merge branch 'seeddms-5.1.x' 2019-04-04 19:18:44 +02:00
Uwe Steinmann
d0cf90032f a revision call also be started if some of the revisors have already reviewed the document 2019-04-04 14:02:46 +02:00
Uwe Steinmann
d8fb4fa4b0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-04-04 11:41:45 +02:00
Uwe Steinmann
d2c55cd685 fix translation string 2019-04-03 10:13:19 +02:00
Uwe Steinmann
cd4eb3d115 move code for getting version into method version() 2019-03-27 15:30:11 +01:00
Uwe Steinmann
f97af846e6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-03-18 07:37:17 +01:00
Uwe Steinmann
b953ead796 fix merge errors 2019-03-18 06:55:02 +01:00
Uwe Steinmann
d5109326f2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-03-18 06:53:11 +01:00
Uwe Steinmann
fd5bfe246f various minor corrections of sql statements
improves compatibility with postgres
2019-03-14 09:37:21 +01:00
Uwe Steinmann
a2fbb7cca0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-03-14 09:08:07 +01:00
Uwe Steinmann
83e8f900e5 fix setting role 2019-03-11 18:27:20 +01:00
Uwe Steinmann
00d6b7e150 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-03-11 18:27:09 +01:00
Uwe Steinmann
7860cdc769 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-27 15:40:34 +01:00
Uwe Steinmann
ce3bb7d8ca fix typo in variable name 2019-02-27 15:40:21 +01:00
Uwe Steinmann
add79b47d1 fix syntax error, run update of index even if update hook was called before 2019-02-27 11:56:33 +01:00
Uwe Steinmann
a3fcfcb6d9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-22 17:27:06 +01:00
Uwe Steinmann
d721ee374a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-22 07:56:05 +01:00
Uwe Steinmann
4eec4b6977 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-19 07:57:49 +01:00
Uwe Steinmann
695c7c7c44 pass initial document status to verifyStatus() 2019-02-14 12:47:03 +01:00
Uwe Steinmann
3ccc9f5176 add more notes for 6.0.7 2019-02-14 12:46:11 +01:00
Uwe Steinmann
6d5ce06c9f add_log_line() be used from command line scripts without errors 2019-02-14 12:45:39 +01:00
Uwe Steinmann
4b7e9d9c75 log run of execution 2019-02-14 12:35:57 +01:00
Uwe Steinmann
ee88020054 check frequency 2019-02-14 12:35:18 +01:00
Uwe Steinmann
08fac559c9 add new list type 'DueRevision' in getDocumentList 2019-02-14 12:33:50 +01:00
Uwe Steinmann
feee5600c4 add new list type ´DueRevision' in getDocumentList() 2019-02-14 12:33:11 +01:00
Uwe Steinmann
fa96dca929 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-13 06:50:36 +01:00
Uwe Steinmann
8c826a0c0d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-12 12:16:13 +01:00
Uwe Steinmann
b2fa733a0d new note for 6.0.7 2019-02-12 08:18:16 +01:00
Uwe Steinmann
770daa330c SeedDMS_Core_Document::getTimeline() returns revision only for latest content 2019-02-12 08:18:10 +01:00
Uwe Steinmann
963f2b9b78 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-11 22:00:31 +01:00
Uwe Steinmann
07d7bb0834 return true if operation was succesful 2019-02-11 19:20:07 +01:00
Uwe Steinmann
90f4c17533 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-11 15:45:24 +01:00
Uwe Steinmann
b27895e4ea Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-07 15:03:43 +01:00
Uwe Steinmann
d4ca66706d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-05 07:36:09 +01:00
Uwe Steinmann
d7515b3084 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-04 15:17:42 +01:00
Uwe Steinmann
6d09865bae call hook to filter docs in tree, add data-url to jqtree div 2019-02-04 14:51:52 +01:00
Uwe Steinmann
6880901b4a subtree command isn't deprecated 2019-02-04 14:51:19 +01:00
Uwe Steinmann
6776f0c93d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-04 14:45:12 +01:00
Uwe Steinmann
7adefd2d8d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-04 14:30:07 +01:00
Uwe Steinmann
6e5634cf62 path current class to jqtree 2019-02-04 11:19:04 +01:00
Uwe Steinmann
621dc6fd98 fix filtering approval tasks 2019-02-04 11:18:44 +01:00
Uwe Steinmann
cad94cd18b call hook to filter documents in folder tree
can be used to show only certain documents, e.g. those which are
released
2019-02-04 08:46:03 +01:00
Uwe Steinmann
64e517a02e change name of form from 'form1' to 'adddocform'
needed for hooks, to tell which form is currently shown
2019-02-04 08:44:13 +01:00
Uwe Steinmann
1db49ff214 add counter for needscorrection 2019-02-04 08:42:49 +01:00
Uwe Steinmann
22a4160a58 add comment that 'subtree' is deprecated 2019-02-04 08:42:06 +01:00
Uwe Steinmann
4b76b5e6ae Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-02-01 09:30:32 +01:00
Uwe Steinmann
8fcfadf5a8 fix typo in key for translation 2019-02-01 09:01:18 +01:00
Uwe Steinmann
9e1dff071a admis are allowed to change approver/reviewer after first approval/review 2019-02-01 09:00:16 +01:00
Uwe Steinmann
4b1e933c76 add new config option $_allowChangeRevAppInProcess 2019-02-01 08:59:43 +01:00
Uwe Steinmann
fc688441ad recipients can be set, even if document was not released 2019-01-31 15:06:45 +01:00
Uwe Steinmann
0a256bde29 fix typo in translation key 2019-01-31 15:06:22 +01:00
Uwe Steinmann
d5ae314dec fix document chooser, which did not open anymore 2019-01-26 15:06:04 +01:00
Uwe Steinmann
d79b41c925 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-01-16 19:21:38 +01:00
Uwe Steinmann
f4a638ce14 new version 6.0.7 2019-01-16 17:57:13 +01:00
Uwe Steinmann
d33564ce88 fix opened and closed icon of tree 2019-01-15 18:24:11 +01:00
Uwe Steinmann
e79cba72a8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-01-15 18:21:54 +01:00
Uwe Steinmann
56ecf9d99e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-01-15 18:19:39 +01:00
Uwe Steinmann
37c7eed2bb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-01-15 18:16:46 +01:00
Uwe Steinmann
2709231dfc add dummy notes 2019-01-15 18:15:45 +01:00
Uwe Steinmann
3e12261637 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-01-15 13:59:24 +01:00
Uwe Steinmann
770d9223af fix syntax error after merge 2019-01-15 11:54:06 +01:00
Uwe Steinmann
48cf4b2ff3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2019-01-15 09:13:23 +01:00
Uwe Steinmann
e252af2df4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-12-18 06:19:18 +01:00
Uwe Steinmann
23bec2fe96 field parentworkflow in tblWorkflowDocumentContent is obsolete 2018-11-16 20:18:52 +01:00
Uwe Steinmann
0f39ccc7c3 fix merge errors 2018-11-16 20:18:27 +01:00
Uwe Steinmann
046d07bbf1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-11-16 19:17:19 +01:00
Uwe Steinmann
70b45bcd24 new field in tblWorkflowDocumentContent must be a primary key 2018-11-16 15:49:32 +01:00
Uwe Steinmann
39a7c26977 place tblWorkflowLog after tblWorkflowDocumentContent 2018-11-16 15:41:26 +01:00
Uwe Steinmann
4e0a34966c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-11-13 08:59:02 +01:00
Uwe Steinmann
3321b097e6 Merge branch 'seeddms-5.1.x' 2018-11-13 08:55:38 +01:00
Uwe Steinmann
a4ddbd6605 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-11-12 13:33:56 +01:00
Uwe Steinmann
93b8ee1750 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-08-08 07:28:22 +02:00
Uwe Steinmann
6553f7a379 call hook showVersionComment() for previous versions, check if comment is set at all 2018-07-13 12:27:30 +02:00
Uwe Steinmann
7ec84597eb update 2018-07-13 11:09:08 +02:00
Uwe Steinmann
4081173442 place in two columns and color table rows 2018-07-13 11:07:05 +02:00
Uwe Steinmann
3958714bff Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-07-13 11:01:36 +02:00
Uwe Steinmann
620dfa6a29 make executable 2018-07-12 20:50:26 +02:00
Uwe Steinmann
31e1e48dea list frequency and all parameters of task 2018-07-12 13:56:22 +02:00
Uwe Steinmann
aa7daffe46 fix translation for button 2018-07-12 13:56:00 +02:00
Uwe Steinmann
ded0c29b24 add documentation, get parameter in execute() 2018-07-12 13:55:36 +02:00
Uwe Steinmann
5df058415d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-07-11 20:41:22 +02:00
Uwe Steinmann
dc2cadc6d8 Merge branch 'seeddms-5.1.x' 2018-07-03 11:42:39 +02:00
Uwe Steinmann
ec80f5aa0e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-07-03 10:54:26 +02:00
Uwe Steinmann
9902445ff1 copy inc/inc.ClassExtensionMgr.php into repository dist 2018-05-23 20:34:37 +02:00
Uwe Steinmann
c9cf0139ee Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-23 15:59:55 +02:00
Uwe Steinmann
5c2e3edee7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-19 13:54:04 +02:00
Uwe Steinmann
dc35f2d9dd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-17 21:04:06 +02:00
Uwe Steinmann
af004146e9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-17 21:02:49 +02:00
Uwe Steinmann
0398229bca Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-13 19:15:20 +02:00
Uwe Steinmann
0ce5143532 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-12 17:20:18 +02:00
Uwe Steinmann
18bd1fdf55 sync with package file from 5.1.7 2018-04-12 16:02:40 +02:00
Uwe Steinmann
0199019ee6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-12 15:57:21 +02:00
Uwe Steinmann
d8daa1dd3d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-11 17:36:43 +02:00
Uwe Steinmann
3bc9e9c5ce Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-11 15:32:47 +02:00
Uwe Steinmann
0d3596d237 better error reporting when indexing fails 2018-04-11 15:31:35 +02:00
Uwe Steinmann
5064c24388 show noty message longer in case of an error 2018-04-11 10:20:27 +02:00
Uwe Steinmann
e592d0e3d0 remove list of documents 2018-04-11 09:44:45 +02:00
Uwe Steinmann
2cc48d491e fix output of review/approval log if updating user doesn't exist anymore 2018-04-11 08:39:01 +02:00
Uwe Steinmann
295a6d0fe7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-06 16:38:09 +02:00
Uwe Steinmann
9ea9289fdf fix editing of document attachments 2018-04-06 09:32:16 +02:00
Uwe Steinmann
ba98736dfb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-06 09:29:09 +02:00
Uwe Steinmann
00dd7ee2df Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-06 08:33:26 +02:00
Uwe Steinmann
2e647fb4ec fix update of tblWorkflowLog
foreign key must be removed before droping field
2018-04-06 08:13:06 +02:00
Uwe Steinmann
801bda3560 fix typo 2018-04-06 06:40:29 +02:00
Uwe Steinmann
659a62e133 Merge branch 'seeddms-6.0.x-workflow' into seeddms-6.0.x 2018-04-06 06:39:29 +02:00
Uwe Steinmann
0cdba79f59 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-05 17:30:41 +02:00
Uwe Steinmann
f1fb23c7e7 fix sql statement to retrieve workflow log 2018-04-05 12:21:09 +02:00
Uwe Steinmann
8ea8c0086e set references to right table name
a reference to a temp. table will not be changed when the table name
is changed. Hence, use the right table name from the beginning and
make sure foreign keys are not checked
2018-04-05 12:04:37 +02:00
Uwe Steinmann
63a1ae0c13 add sql statements for workflow 2018-04-05 12:04:37 +02:00
Uwe Steinmann
7c9f5d3819 some infos about the update 2018-04-05 12:04:37 +02:00
Uwe Steinmann
e5376d144d add changelog for 6.0.6 2018-04-05 12:04:37 +02:00
Uwe Steinmann
90762b9e13 drop tables after commit 2018-04-05 12:04:37 +02:00
Uwe Steinmann
54ce5a7e16 adding sql statements for updating to new workflow layout 2018-04-05 12:04:37 +02:00
Uwe Steinmann
5882fc10a9 major change of workflow/document management 2018-04-05 12:04:37 +02:00
Uwe Steinmann
3379a2510c take out reconnect code
not needed anymore
2018-04-05 12:04:07 +02:00
Uwe Steinmann
9ba070da7c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-05 12:02:20 +02:00
Uwe Steinmann
d47f4c5ca9 reopen database after COMMIT 2018-04-05 11:24:23 +02:00
Uwe Steinmann
276245a395 do not show table of scheduler classes if none exists 2018-04-05 08:54:55 +02:00
Uwe Steinmann
718ac96777 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-05 08:24:30 +02:00
Uwe Steinmann
a54f6f416b minor fixes in translation phrases 2018-04-05 08:16:28 +02:00
Uwe Steinmann
1ba06eeb27 new icon for timeline 2018-04-05 07:48:22 +02:00
Uwe Steinmann
21b703725b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-05 07:44:41 +02:00
Uwe Steinmann
f9a00de8ee add SchedulerTaskMgr to list 2018-04-05 07:39:27 +02:00
Uwe Steinmann
c9d0ac3e73 better error handling for extension list from repository 2018-04-05 07:27:30 +02:00
Uwe Steinmann
867a5b8d7c add entries for 6.0.6 2018-04-04 21:49:48 +02:00
Uwe Steinmann
ed48285da5 pass extension config to init() of extension 2018-04-04 21:48:25 +02:00
Uwe Steinmann
2b62fbcc1b set styles for div.popupbox dt and div.popupbox dd 2018-04-04 21:47:56 +02:00
Uwe Steinmann
86e7b0a13f add hook showVersionComment 2018-04-04 21:47:40 +02:00
Uwe Steinmann
6fb4b9b545 switch list AppRevOwner and DraftOwner 2018-04-04 21:47:14 +02:00
Uwe Steinmann
7dc6cba8f2 make printPopupBox() public 2018-04-04 21:46:45 +02:00
Uwe Steinmann
e610d4d855 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-04 17:48:14 +02:00
Uwe Steinmann
eadce9145d do now allow to set disabled users as owner 2018-04-04 17:46:44 +02:00
Uwe Steinmann
9711cee70a add example for scheduler 2018-04-04 15:31:57 +02:00
Uwe Steinmann
9ae591bae7 add scheduler 2018-04-04 15:31:43 +02:00
Uwe Steinmann
52f58727ca add sql statements for scheduler 2018-04-04 15:29:32 +02:00
Uwe Steinmann
8d0e7e2b42 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-03 14:34:16 +02:00
Uwe Steinmann
57dc5fa31a do not set the uploader of a document to the owner
use the currently logged in user instead
2018-04-03 11:27:12 +02:00
Uwe Steinmann
8ecc721f3c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-03 11:00:08 +02:00
Uwe Steinmann
fd5920fc8d take enable[Revision|Receipt]Workflow into account 2018-04-03 09:32:36 +02:00
Uwe Steinmann
28e65a1520 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-04-03 06:17:42 +02:00
Uwe Steinmann
ab3fc8ec7c do not pass status to revision entry 2018-04-02 19:47:52 +02:00
Uwe Steinmann
20a798d9f1 add some mor documentation 2018-03-31 14:40:05 +02:00
Uwe Steinmann
c2ecc4adbb check_controller_access() returns true if !guest and adv access controll is off 2018-03-31 14:28:57 +02:00
Uwe Steinmann
666ced5fea usage of sendfile can be configured 2018-03-29 17:15:17 +02:00
Uwe Steinmann
28c2323744 add workflow to list of tasks in menu 2018-03-29 16:45:39 +02:00
Uwe Steinmann
c0c9f755a8 countTasks takes workflow mode and tasksinmenu into account 2018-03-29 16:30:46 +02:00
Uwe Steinmann
2259acc3f2 add counting documents in workflow and need correction in countTasks() 2018-03-29 16:30:02 +02:00
Uwe Steinmann
05626a4759 use GET instead of POST 2018-03-29 15:39:39 +02:00
Uwe Steinmann
d1ee800423 remove formtoken from link to javascript files 2018-03-29 15:39:10 +02:00
Uwe Steinmann
8447c87ab0 remove empty script tag 2018-03-29 15:16:39 +02:00
Uwe Steinmann
d7e22068af add item for 6.0.6 2018-03-29 15:12:52 +02:00
Uwe Steinmann
3976657a66 remove unneeded code, check if reception of document is allowed 2018-03-29 15:10:18 +02:00
Uwe Steinmann
bf1473fbb1 fix various errors when intializing the view 2018-03-28 17:06:49 +02:00
Uwe Steinmann
9f211d1fda init $positions early 2018-03-28 17:06:25 +02:00
Uwe Steinmann
3e2931068e allow CSP worker-src blob: 2018-03-28 17:06:10 +02:00
Uwe Steinmann
820b88c9cf revision and receipt is also availabe in advanced workflow mode 2018-03-27 18:23:00 +02:00
Uwe Steinmann
c0215ffef3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-27 18:07:08 +02:00
Uwe Steinmann
f6a506ff92 new method getRepositoryUrl() 2018-03-27 14:05:22 +02:00
Uwe Steinmann
7be573cac9 format error message 2018-03-27 14:05:04 +02:00
Uwe Steinmann
ad5c4fc332 check if repository url is set 2018-03-27 14:04:45 +02:00
Uwe Steinmann
1a8a0c3621 add item for 6.0.6 2018-03-27 13:46:03 +02:00
Uwe Steinmann
ab3475f512 do not set user for controller, because it is not set at that time 2018-03-27 13:44:48 +02:00
Uwe Steinmann
aa416f90ec do not enforce 2facto auth for guest and when secret is set 2018-03-27 13:43:56 +02:00
Uwe Steinmann
5506c0ed69 add entry for 6.0.6 2018-03-26 13:22:39 +02:00
Uwe Steinmann
4a76a144ee Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-26 13:21:48 +02:00
Uwe Steinmann
d40dc681dc add list of documents which need correction in menu 2018-03-26 13:09:36 +02:00
Uwe Steinmann
3514b0db89 check if $_POST["tasksInMenu"] is set 2018-03-26 13:09:13 +02:00
Uwe Steinmann
0c0472ae3c minor adoption because directory ext has to stay in www directory 2018-03-26 12:46:50 +02:00
Uwe Steinmann
c739d37bf5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-26 10:19:54 +02:00
Uwe Steinmann
c3e5909411 add item for 6.0.6 2018-03-26 10:16:07 +02:00
Uwe Steinmann
c4113c1abb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-26 10:14:55 +02:00
Uwe Steinmann
90bf0f13f4 show counter for tasks only for selected tasks in configuration 2018-03-26 10:04:05 +02:00
Uwe Steinmann
db66dff191 reorder lists of documents 2018-03-26 10:02:58 +02:00
Uwe Steinmann
fb9d04a3a9 pass _tasksInMenu to view 2018-03-26 10:00:53 +02:00
Uwe Steinmann
939cbd7a56 make counted task in menu selectable 2018-03-26 10:00:20 +02:00
Uwe Steinmann
8d7e6715fa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-23 19:30:59 +01:00
Uwe Steinmann
40ec1447d5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-23 10:16:44 +01:00
Uwe Steinmann
095e471f8b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-21 15:30:32 +01:00
Uwe Steinmann
08e3a5aca3 check if group recipient is already in list of ind. recipients, check for reviewer only 2018-03-20 12:16:51 +01:00
Uwe Steinmann
77c5645ccc check if group recipient is already in list of ind. recipients 2018-03-20 12:16:01 +01:00
Uwe Steinmann
90affe7db1 pass $dms and $user to Controller::factory() 2018-03-20 11:16:13 +01:00
Uwe Steinmann
49af6ab171 make sure list of converters is an array, start new version 1.2.9 2018-03-20 11:08:08 +01:00
Uwe Steinmann
26d3c7a504 do not set status for scheduled_revision in timeline data 2018-03-20 11:06:38 +01:00
Uwe Steinmann
20d1a2695b check if _converters['pdf'] is set, before passing to view 2018-03-20 11:06:11 +01:00
Uwe Steinmann
6211014896 new version 6.0.6 2018-03-20 10:09:23 +01:00
Uwe Steinmann
f6ba941e68 do not show groups as reviewer/approver without members 2018-03-20 07:25:22 +01:00
Uwe Steinmann
dffdc46568 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-20 07:22:23 +01:00
Uwe Steinmann
0c0669fbbd do not release a document in verifyStatus() if in draft status 2018-03-14 17:05:27 +01:00
Uwe Steinmann
66f478b36a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-13 18:01:42 +01:00
Uwe Steinmann
edffd85f94 add entry for 6.0.6 2018-03-13 17:54:13 +01:00
Uwe Steinmann
9b2eecca0e rejecting a revision will neccesarily put document in need correction status 2018-03-13 17:51:44 +01:00
Uwe Steinmann
31d3d491b5 add changelog entry for 6.0.6 2018-03-09 13:39:08 +01:00
Uwe Steinmann
953e94cd8e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-09 13:11:11 +01:00
Uwe Steinmann
9605989054 start version 6.0.6 2018-03-07 20:08:04 +01:00
Uwe Steinmann
dda5ec7d13 fix comment 2018-03-07 17:26:11 +01:00
Uwe Steinmann
841cd2cfaf fix setting attributes
used the wrong field name
2018-03-07 17:16:02 +01:00
Uwe Steinmann
b553263f11 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-03-02 06:22:02 +01:00
Uwe Steinmann
7fe44b6644 add newline to last line 2018-03-01 21:30:30 +01:00
Uwe Steinmann
d78b165322 add item for 6.0.5 2018-03-01 21:30:14 +01:00
Uwe Steinmann
7008b11f64 add list for documents that need correction 2018-03-01 21:29:53 +01:00
Uwe Steinmann
0066d29650 add listNeedsCorrection 2018-03-01 21:29:12 +01:00
Uwe Steinmann
eda033babe start changelog for 6.0.5 2018-02-27 18:16:42 +01:00
Uwe Steinmann
40dda18f5a propperly pass enabelSelfReceipt to view 2018-02-27 18:16:22 +01:00
Uwe Steinmann
1ea5575fa8 fix output of extra actions for previous versions 2018-02-27 18:12:59 +01:00
Uwe Steinmann
2a234307a3 fix setting of expiration date 2018-02-27 18:11:32 +01:00
Uwe Steinmann
0bb1035261 sync with UpdateDocument
use same way to select expiration date, call hook
editDocumentContenAttributes, fix checking form
2018-02-27 16:12:36 +01:00
Uwe Steinmann
9ff60e8a35 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-27 14:41:47 +01:00
Uwe Steinmann
66aa7edbf5 filter out reviewer and uploader from recipients 2018-02-27 14:40:19 +01:00
Uwe Steinmann
e3664780e9 started new version 6.0.5 2018-02-27 07:42:11 +01:00
Uwe Steinmann
a87d493cb3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-27 07:40:01 +01:00
Uwe Steinmann
836bff3ea0 add item for 6.0.4 2018-02-23 17:20:47 +01:00
Uwe Steinmann
8528cd12ef fix filtering of uploader and reviewers 2018-02-23 17:19:49 +01:00
Uwe Steinmann
e913be8add Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-23 17:00:34 +01:00
Uwe Steinmann
a575714218 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-23 09:06:03 +01:00
Uwe Steinmann
656c4b0b7f optimize query for searching documents 2018-02-21 15:28:27 +01:00
Uwe Steinmann
a6d16911e8 fix xml error 2018-02-21 12:40:45 +01:00
Uwe Steinmann
6548776cb3 new version 6.0.4 2018-02-21 12:39:51 +01:00
Uwe Steinmann
cb287741d0 add and use SeedDMS_Core_DocumentContent::getInstance() 2018-02-21 12:34:51 +01:00
Uwe Steinmann
414532db25 hook extraVersionItem() may return an array or a string 2018-02-20 17:30:29 +01:00
Uwe Steinmann
87519d6d08 do not add uploader and reviewer as recipient 2018-02-20 17:29:49 +01:00
Uwe Steinmann
af066bb15b take out reviewers and uploaders from recipients 2018-02-20 17:29:16 +01:00
Uwe Steinmann
5e478d749d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-20 07:14:50 +01:00
Uwe Steinmann
981bcaf7d7 override status may be called on 'needs correction' status 2018-02-20 06:15:15 +01:00
Uwe Steinmann
1640682a10 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-14 22:00:34 +01:00
Uwe Steinmann
03b3bfa4e4 use upper case for sql keywords 2018-02-14 21:50:59 +01:00
Uwe Steinmann
ffbc685752 add missing indexes 2018-02-14 21:49:37 +01:00
Uwe Steinmann
91b163a825 fix typo in index name 2018-02-14 10:45:31 +01:00
Uwe Steinmann
aa4804cf56 add missing keys 2018-02-14 10:45:14 +01:00
Uwe Steinmann
795ca98b8f create temp table ttreceiptid before using it 2018-02-13 18:32:01 +01:00
Uwe Steinmann
6ad630edf4 turn of views as default 2018-02-13 17:07:45 +01:00
Uwe Steinmann
52ceaaf98e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-08 14:31:43 +01:00
Uwe Steinmann
5d51f18c5b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-08 14:26:36 +01:00
Uwe Steinmann
663cbab2c6 add item for 6.0.4 2018-02-08 07:24:07 +01:00
Uwe Steinmann
57839377f8 remove duplicate code 2018-02-07 22:36:26 +01:00
Uwe Steinmann
ab7776bdb9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-07 22:32:18 +01:00
Uwe Steinmann
7e0b1b6907 start new version 6.0.4 2018-02-05 15:19:59 +01:00
Uwe Steinmann
7bc2c0813d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-05 15:18:33 +01:00
Uwe Steinmann
a1a8abceea add entry for 6.0.3 2018-02-05 15:17:39 +01:00
Uwe Steinmann
dacacde524 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-05 15:14:45 +01:00
Uwe Steinmann
233cf9b1f1 fix error in listing approvers 2018-02-05 14:10:18 +01:00
Uwe Steinmann
ceb7d65913 add additional view access checks
DocumentAccess, UsrView, GroupView, ReviewSummary, ApprovalSummary, WorkflowSummary, ReceiptSummary
2018-02-05 10:31:07 +01:00
Uwe Steinmann
2641478216 move around code to create view and access object 2018-02-05 10:29:53 +01:00
Uwe Steinmann
2c3dff2a24 add check view access 2018-02-05 10:28:32 +01:00
Uwe Steinmann
28a0860824 check view access 2018-02-05 10:28:06 +01:00
Uwe Steinmann
51f3416c70 include LogInit, move incluѕion of Preview.php into view 2018-02-05 08:57:05 +01:00
Uwe Steinmann
2ad6a04965 move some code at beginning of file 2018-02-05 08:50:39 +01:00
Uwe Steinmann
16e70a0cdd recipients may be set with read/write access 2018-02-05 08:50:15 +01:00
Uwe Steinmann
d824ca30fb may[Receipt|Review|Approve|Revise] also checks for document access 2018-02-05 08:48:53 +01:00
Uwe Steinmann
c7dbe7d16f not needed anymore 2018-02-01 18:00:05 +01:00
Uwe Steinmann
8c4dc337c5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-01 14:56:42 +01:00
Uwe Steinmann
d89cfc3f1a fix access check 2018-02-01 14:38:57 +01:00
Uwe Steinmann
b3c372e270 show only released documents in ReceiveOwner list 2018-02-01 12:05:48 +01:00
Uwe Steinmann
b1ac7d94ac Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-02-01 08:32:53 +01:00
Uwe Steinmann
13119773bf update release date and notes for 6.0.3 2018-02-01 08:29:27 +01:00
Uwe Steinmann
3ad9fe9743 do not add uploader and reviewer to recipients when added by group 2018-02-01 08:28:56 +01:00
Uwe Steinmann
e7bec65b89 document status may be overriden if document is rejected 2018-02-01 08:28:24 +01:00
Uwe Steinmann
03e227af4c add all remaining changes in 6.0.3 2018-02-01 08:28:00 +01:00
Uwe Steinmann
4268e1874a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-31 21:20:47 +01:00
Uwe Steinmann
17478a52ef add note for 6.0.4 2018-01-31 20:05:34 +01:00
Uwe Steinmann
de689727b0 remove ';' in string 2018-01-31 20:04:42 +01:00
Uwe Steinmann
18191000ea add indexes on Log tables 2018-01-31 20:04:14 +01:00
Uwe Steinmann
39b94d4c75 add fast sql statement to getReceiptStatus() if limit=1 2018-01-31 20:03:22 +01:00
Uwe Steinmann
f3e1c56d5d add S_NEED_CORRECTION as doc status 2018-01-30 19:21:57 +01:00
Uwe Steinmann
e47ff72ec3 allow to select doc status S_NEED_CORRECTION 2018-01-30 19:21:21 +01:00
Uwe Steinmann
9d7b735ff4 use same form ind and grp revision 2018-01-30 19:20:51 +01:00
Uwe Steinmann
d84d4cfcdb allow to override with S_NEED_CORRECTION 2018-01-30 19:20:19 +01:00
Uwe Steinmann
0cc14e937d set doc status S_NEED_CORRECTION when revision status -1 is set 2018-01-30 19:19:40 +01:00
Uwe Steinmann
7f1f551334 allow to filter by status S_NEED_CORRECTION 2018-01-30 19:19:07 +01:00
Uwe Steinmann
bf2ced4c6e status -1 for revision is text status_need_correction 2018-01-30 19:18:35 +01:00
Uwe Steinmann
231af615af status may be S_NEED_CORRECTiON in setStatus() 2018-01-30 19:17:44 +01:00
Uwe Steinmann
4fa0efa07d use one form for ind and grp recipients 2018-01-30 19:16:34 +01:00
Uwe Steinmann
83e960fe03 check if file is actually accessible 2018-01-30 19:16:05 +01:00
Uwe Steinmann
7eb76b4c99 fix syntax error introduced by merging 2018-01-30 08:08:21 +01:00
Uwe Steinmann
89ad08a537 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-30 08:05:00 +01:00
Uwe Steinmann
408c60bc15 minor corrections of form 2018-01-30 07:20:23 +01:00
Uwe Steinmann
dc198e383b fix typo3 in translation key 2018-01-30 06:39:38 +01:00
Uwe Steinmann
593ba16c2d status may also be 6 (needs correction) 2018-01-29 11:41:40 +01:00
Uwe Steinmann
da82cbe8da status can also be set to 6 (needs correction) 2018-01-29 11:41:00 +01:00
Uwe Steinmann
8931759f84 new status S_NEEDS_CORRECTION 2018-01-29 11:40:25 +01:00
Uwe Steinmann
093a1fa844 get text for new staus S_NEEDS_KORRECTION 2018-01-29 11:39:53 +01:00
Uwe Steinmann
a8fad905a0 add note for 6.0.3 2018-01-28 07:54:36 +01:00
Uwe Steinmann
c768a9150b add lists of draft and obsolete documents 2018-01-28 07:50:38 +01:00
Uwe Steinmann
d2a0c08633 allow to set revisors and recipients with M_READWRITE access
previously M_ALL was needed
2018-01-28 07:49:46 +01:00
Uwe Steinmann
85a3041b9b add lists of drafts and obsolete docs in getDocumentList() 2018-01-28 07:48:29 +01:00
Uwe Steinmann
cbf7f1a161 list of documents without receivers on lists released documents 2018-01-24 09:01:35 +01:00
Uwe Steinmann
4dfade96f7 check if $files are given to filterFiles() 2018-01-23 20:50:44 +01:00
Uwe Steinmann
b9622ad165 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-23 20:21:39 +01:00
Uwe Steinmann
e35b732d80 add items for 6.0.4 2018-01-23 16:47:04 +01:00
Uwe Steinmann
cde0f066ad slice entries before view 2018-01-23 16:46:10 +01:00
Uwe Steinmann
81b8d2ae1b export always returns all items, fix display of 2nd, 3rd, ... page 2018-01-23 16:42:25 +01:00
Uwe Steinmann
5b5e9af891 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-23 10:45:30 +01:00
Uwe Steinmann
b8632046b7 fix some phrases 2018-01-21 13:58:49 +01:00
Uwe Steinmann
7e0cae0590 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-18 17:38:38 +01:00
Uwe Steinmann
3dda280ef8 add scheduled revision to skip list 2018-01-18 17:32:38 +01:00
Uwe Steinmann
3502ce5de7 show scheduled revisions in timeline 2018-01-18 17:29:10 +01:00
Uwe Steinmann
b3c000de45 use sendfile() instead of readfile() 2018-01-18 17:28:30 +01:00
Uwe Steinmann
4b8fad4605 set propper date in timeline for scheduled revisions 2018-01-18 17:27:31 +01:00
Uwe Steinmann
b803c1d448 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-18 10:53:58 +01:00
Uwe Steinmann
e97c3a4b25 allow to set receiver when uploading a document 2018-01-16 18:15:05 +01:00
Uwe Steinmann
d547fdd05b add changes for 6.0.3 2018-01-16 18:14:51 +01:00
Uwe Steinmann
c3e413c476 move many access checks from view into controller
issue message on receive tab if document isn't released yet, but there
are already receivers
2018-01-16 18:13:41 +01:00
Uwe Steinmann
48141e1116 out list of documents without a receiver 2018-01-16 18:12:47 +01:00
Uwe Steinmann
fd770b5264 check access 2018-01-16 18:11:50 +01:00
Uwe Steinmann
065fa49cc4 mayReceive() requires a released document 2018-01-16 18:07:20 +01:00
Uwe Steinmann
2b5f9ab3b3 add callback to SeedDMS_Core_Document::getAccessMode() 2018-01-16 18:06:19 +01:00
Uwe Steinmann
03690b9f1e add notes for 6.0.3 2018-01-16 18:05:54 +01:00
Uwe Steinmann
903a491016 getDocumentList() returns list of documents without a receiver 2018-01-16 18:04:53 +01:00
Uwe Steinmann
544e151135 getStatistics() returns propper values for each single value in a valueset 2018-01-16 18:03:05 +01:00
Uwe Steinmann
b51b3bb9f3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-09 15:37:40 +01:00
Uwe Steinmann
eed90367da add note for 6.0.3 2018-01-09 15:30:47 +01:00
Uwe Steinmann
0b8c6692ae add hook for modifying action menu of selected user 2018-01-09 15:30:21 +01:00
Uwe Steinmann
62f5dd1a9f pass 0 as default to getObjects() 2018-01-09 15:29:31 +01:00
Uwe Steinmann
6e75dd9c44 reviewers/approvers may be set in draft status 2018-01-08 14:38:03 +01:00
Uwe Steinmann
3244f20dcc Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-03 09:41:03 +01:00
Uwe Steinmann
9d575d6371 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-03 09:23:39 +01:00
Uwe Steinmann
20e9157d01 Merge branch 'seeddms-5.1.x' 2018-01-03 09:23:05 +01:00
Uwe Steinmann
d5b4553c90 add methods for deleting users and to get a single category 2018-01-03 08:07:42 +01:00
Uwe Steinmann
3c4be73678 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2018-01-01 09:17:24 +01:00
Uwe Steinmann
3cd766468d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-21 15:27:33 +01:00
Sebastian Bartus-Kunz
02e7066749 Fixed wrong return object in getDocumentLink() 2017-12-20 15:40:20 +01:00
Uwe Steinmann
52fbb45df4 fix html error 2017-12-19 11:51:03 +01:00
Uwe Steinmann
367039f8b1 set timeout to 10sec and timer to 60sec 2017-12-19 11:50:38 +01:00
Uwe Steinmann
ad336cdd9f fix html error 2017-12-19 11:39:18 +01:00
Uwe Steinmann
70ea4c2314 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-19 11:33:00 +01:00
Uwe Steinmann
2f7a91d785 add entry for 6.0.2 2017-12-19 08:27:52 +01:00
Uwe Steinmann
d1a6651fa5 check if flag 'allday' is set 2017-12-19 08:27:10 +01:00
Uwe Steinmann
228bfffba1 set allday flag for scheduled revision 2017-12-19 08:26:46 +01:00
Uwe Steinmann
3b3b5efafe getTimeline() returns documents with a scheduled revision 2017-12-19 08:19:48 +01:00
Uwe Steinmann
7129b9737c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-19 07:10:07 +01:00
Uwe Steinmann
ac09ee3773 new version 6.0.2 2017-12-18 14:43:22 +01:00
Uwe Steinmann
529e546600 add entry for 6.0.1 2017-12-18 13:21:04 +01:00
Uwe Steinmann
a42c42f335 do not show users removed from process unless admin 2017-12-18 13:20:33 +01:00
Uwe Steinmann
6f4577d7b2 fix call of SeedDMS_AccessOperation() 2017-12-18 13:20:12 +01:00
Uwe Steinmann
1538171d31 use countTasks instead of myTasks for counting open tasks 2017-12-18 12:41:45 +01:00
Uwe Steinmann
31853c5586 fix documentation, minor code cleanups 2017-12-18 12:41:18 +01:00
Uwe Steinmann
326a4eda2f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-18 12:21:57 +01:00
Uwe Steinmann
2364d0505b add entry for 6.0.1 2017-12-18 12:02:25 +01:00
Uwe Steinmann
6e58e2bb33 fix typo 2017-12-18 11:47:24 +01:00
Uwe Steinmann
e36fbd87d8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-18 11:10:14 +01:00
Uwe Steinmann
10cb3e1cb3 add various indexes 2017-12-18 08:57:38 +01:00
Uwe Steinmann
1048e3d181 add new method countTasks() 2017-12-18 08:45:31 +01:00
Uwe Steinmann
8784b1224b set ind. revisors by group 2017-12-18 08:42:13 +01:00
Uwe Steinmann
a320b3cc39 set ind. revisors by selecting a group 2017-12-18 08:41:31 +01:00
Uwe Steinmann
fe6d00b6e1 add new function countTasks() 2017-12-15 13:53:33 +01:00
Uwe Steinmann
a4a1100abe add preview image only if version is set 2017-12-15 13:52:24 +01:00
Uwe Steinmann
a1f98902a5 propperly set version in notification mail 2017-12-15 13:51:53 +01:00
Uwe Steinmann
6b7eb1cf3e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-12 22:12:17 +01:00
Uwe Steinmann
b63ffa490b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-12 09:35:00 +01:00
Uwe Steinmann
2a3b61aada do not set revision date if it is '0000' 2017-12-12 07:26:24 +01:00
Uwe Steinmann
6d8652f393 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-12-09 07:28:18 +01:00
Uwe Steinmann
f4c25576bc addRevisor() puts recheck into waiting if recheck has already begun
previously it was put into sleeping, which didn't the user/group
to do the recheck.
2017-12-08 10:52:23 +01:00
Uwe Steinmann
0a38435a2d remove wrong init of $accessop 2017-12-08 10:51:34 +01:00
Uwe Steinmann
87308a3c21 fix icon for revision by group 2017-12-06 13:01:35 +01:00
Uwe Steinmann
92d01dcbd3 fix php error 2017-11-27 12:06:05 +01:00
Uwe Steinmann
c657dabcda Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-11-24 09:30:22 +01:00
Uwe Steinmann
37a3661698 fix some indenting of lines 2017-11-21 17:26:11 +01:00
Uwe Steinmann
ed5f5bd169 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-11-21 13:40:13 +01:00
Uwe Steinmann
68a69c7531 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-11-21 10:35:43 +01:00
Uwe Steinmann
60d0a6cae4 remove duplicat call of $this->printDropFolderChooserJs() 2017-11-21 10:24:27 +01:00
Uwe Steinmann
909bfc4a30 remove old code, empty lines 2017-11-21 08:47:49 +01:00
Uwe Steinmann
c6e3aebc48 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-11-21 08:47:13 +01:00
Uwe Steinmann
ed6b678b5f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-11-21 08:36:21 +01:00
Uwe Steinmann
f5a06f8e69 remove empty line 2017-11-21 08:35:30 +01:00
Uwe Steinmann
4658db9c21 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-11-21 07:16:10 +01:00
Uwe Steinmann
18c34ce29d Merge branch 'seeddms-5.1.x' 2017-11-02 08:53:59 +01:00
Uwe Steinmann
bae2baf3f5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-10-27 19:44:07 +02:00
Uwe Steinmann
5895a6685a check access 2017-10-27 19:41:05 +02:00
Uwe Steinmann
36b51b64b1 add listExpiredOwner() 2017-10-27 16:48:18 +02:00
Uwe Steinmann
3d6dcbd181 take out duplicate getLatestContent() 2017-10-27 16:47:50 +02:00
Uwe Steinmann
68ccb13a72 add 'ExpiredOwner' to getDocumentList() 2017-10-27 16:47:09 +02:00
Uwe Steinmann
5149511aaa Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-10-27 15:01:18 +02:00
Uwe Steinmann
f3d4b86bae remove unused revisionDate in SeedDMS_Core_DocumentFile 2017-09-28 07:27:43 +02:00
Uwe Steinmann
22dce2fdf1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-09-28 07:26:49 +02:00
Uwe Steinmann
c54e16c3b4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-09-27 18:42:54 +02:00
Uwe Steinmann
5b2da28edd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-09-27 07:02:38 +02:00
Uwe Steinmann
d152d9f3af Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-09-05 18:22:25 +02:00
Uwe Steinmann
b7014a6b21 Merge branch 'seeddms-5.1.x' 2017-09-05 09:02:05 +02:00
Uwe Steinmann
04346aa4b8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-09-05 06:30:17 +02:00
Uwe Steinmann
d73071b38e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-29 17:00:14 +02:00
Uwe Steinmann
58bd26966d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-29 09:22:33 +02:00
Uwe Steinmann
79dd5a2f42 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-29 07:41:41 +02:00
Uwe Steinmann
f1b502b2f2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-29 06:21:53 +02:00
Uwe Steinmann
38f90b400d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-24 08:35:19 +02:00
Uwe Steinmann
94b79fcd09 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-23 13:47:18 +02:00
Uwe Steinmann
e67e830946 add links to remove process without a user/group 2017-08-22 18:01:23 +02:00
Uwe Steinmann
2de2fc00fc add removal of users/groups which has been deleted 2017-08-22 18:00:50 +02:00
Uwe Steinmann
81b153ccd5 add removal of receipts and revisions for users/group no longer available 2017-08-22 18:00:06 +02:00
Uwe Steinmann
716cbfa090 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-22 11:34:48 +02:00
Uwe Steinmann
1c4944b166 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-22 07:18:32 +02:00
Uwe Steinmann
eba5645281 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-22 07:15:46 +02:00
Uwe Steinmann
01fb6feeca Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-22 06:24:59 +02:00
Uwe Steinmann
0b8666629b minor fix when dropping a key 2017-08-22 06:20:38 +02:00
Uwe Steinmann
c86525e383 add entry to 6.0.1 2017-08-21 13:44:32 +02:00
Uwe Steinmann
0c8daca856 fix wrong check for extings approval/review file 2017-08-21 13:43:36 +02:00
Uwe Steinmann
7d0a18861b add note for 6.0.1 2017-08-03 12:43:25 +02:00
Uwe Steinmann
f181ca044d ReceiveOwner list does not contain old versions anymore 2017-08-03 12:42:56 +02:00
Uwe Steinmann
f54ed82496 put '()' around last access 2017-08-03 08:12:13 +02:00
Uwe Steinmann
ccc6112714 fix columns of listProcessesWithoutUserGroup 2017-08-03 07:44:26 +02:00
Uwe Steinmann
7c363ff4ef init $processwithoutusergroup 2017-08-03 07:40:42 +02:00
Uwe Steinmann
4e55911213 fix syntax errors 2017-08-03 07:39:22 +02:00
Uwe Steinmann
52a9e37729 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-03 07:38:05 +02:00
Uwe Steinmann
1886b160b9 add single checks for process without user/group 2017-08-03 07:12:46 +02:00
Uwe Steinmann
94a4844616 run check only if required
speeds up calling a single check
2017-08-03 07:12:03 +02:00
Uwe Steinmann
d82f8c44d1 add receipts and revisions in getProcessWithoutUserGroup() 2017-08-03 07:11:25 +02:00
Uwe Steinmann
e878f438fd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-02 18:03:44 +02:00
Uwe Steinmann
658a666f15 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-02 16:05:42 +02:00
Uwe Steinmann
ed1f74baca fix merge error 2017-08-02 12:15:13 +02:00
Uwe Steinmann
9e4b80e25b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-02 12:14:14 +02:00
Uwe Steinmann
9fe0a39321 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-01 11:33:35 +02:00
Uwe Steinmann
df193261b3 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-01 09:11:20 +02:00
Uwe Steinmann
52395af0ce add entry for 6.0.1 2017-08-01 08:46:34 +02:00
Uwe Steinmann
8f59babaad Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-08-01 08:37:31 +02:00
Uwe Steinmann
85cc7c017f send mails to reviewer and approver 2017-08-01 08:36:17 +02:00
Uwe Steinmann
e8b09b3f03 do not send notification to owner anymore
was sent when current user != owner
2017-08-01 08:04:46 +02:00
Uwe Steinmann
887612ddf9 add entry for 6.0.1 2017-07-31 15:37:20 +02:00
Uwe Steinmann
547eb06725 show logs to owner of document 2017-07-31 15:37:05 +02:00
Uwe Steinmann
b5a7f41a8e show logs to owner of document 2017-07-31 15:36:34 +02:00
Uwe Steinmann
b0dfeca98b show progress of receptions also to owner of document, show numbers 2017-07-31 15:12:12 +02:00
Uwe Steinmann
3074e2f530 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-31 14:49:36 +02:00
Uwe Steinmann
b0013b9304 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-31 14:23:30 +02:00
Uwe Steinmann
2de7d8931a set status[receipt] and status[revision] to empty array if not set 2017-07-31 14:22:12 +02:00
Uwe Steinmann
7b5412ff36 remove from process only if status[receipt], status[revision] is not set 2017-07-31 14:21:24 +02:00
Uwe Steinmann
596cb2afd6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-31 14:18:18 +02:00
Uwe Steinmann
cda9f99f9e show right values for receipts and revisions 2017-07-31 14:13:27 +02:00
Uwe Steinmann
07d760d7d8 fix remove from process for receipts and revisions 2017-07-31 14:13:02 +02:00
Uwe Steinmann
014b7ac201 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-31 13:22:28 +02:00
Uwe Steinmann
4c60fbde5d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-31 12:52:53 +02:00
Uwe Steinmann
88585418f8 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-31 12:43:05 +02:00
Uwe Steinmann
acb6337503 remove receipts and revisions 2017-07-31 12:41:28 +02:00
Uwe Steinmann
114a8a3ac1 move code in remove() into __removeFromProcesses() 2017-07-31 11:54:24 +02:00
Uwe Steinmann
afefe1d66c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-31 11:49:43 +02:00
Uwe Steinmann
a2802f124d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-28 18:25:49 +02:00
Uwe Steinmann
e953d9dcbb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-28 15:12:00 +02:00
Uwe Steinmann
4d178a225d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-28 11:24:09 +02:00
Uwe Steinmann
7f76864f41 take out entry from 6.0.1 because feature was added in 5.1.3 2017-07-28 11:22:31 +02:00
Uwe Steinmann
6cebc644c2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-28 11:21:58 +02:00
Uwe Steinmann
2c41c57a13 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-28 10:32:10 +02:00
Uwe Steinmann
8b9875a771 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-28 10:30:31 +02:00
Uwe Steinmann
378e071232 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-28 10:25:54 +02:00
Uwe Steinmann
bfd8184648 notes for 6.0.1 2017-07-27 22:11:42 +02:00
Uwe Steinmann
e851c7967a list number of all open tasks in user info 2017-07-27 22:11:17 +02:00
Uwe Steinmann
29bc0c1fda getNotifyList() returns only users which are not disabled 2017-07-27 22:10:44 +02:00
Uwe Steinmann
268d844b43 fix some comments 2017-07-27 21:17:58 +02:00
Uwe Steinmann
ab141b84df show last access in online users only to admins 2017-07-27 21:17:31 +02:00
Uwe Steinmann
dd94898b19 import revisions 2017-07-27 21:17:11 +02:00
Uwe Steinmann
88d89c206d export revision date 2017-07-27 21:16:38 +02:00
Uwe Steinmann
1f701a84e4 group last access sessions by userid 2017-07-27 13:42:12 +02:00
Uwe Steinmann
ffc00a6beb add entry for 6.0.1 2017-07-27 13:27:37 +02:00
Uwe Steinmann
aabbb5c254 add notes for 6.0.1 2017-07-27 13:27:25 +02:00
Uwe Steinmann
9f2fd0e2ec check for int -1 and 1 instead of string "-1" and "1"
SeedDMS_Acl_Aro::getPermission() returns int anyway
2017-07-27 12:36:42 +02:00
Uwe Steinmann
05489891f7 getPermission() returns always an int 2017-07-27 12:36:20 +02:00
Uwe Steinmann
c953d02604 views instead of temp. tables can be used
This speeds up many sql statements for mysql and pgsql
2017-07-27 12:34:46 +02:00
Uwe Steinmann
f5333e7c8d fix field name in getDocumentList(), 'maxLogId' must be 'maxLogID'
otherwise the statement fails for pgsql
2017-07-27 12:32:27 +02:00
Uwe Steinmann
752f4e8760 take out order by in temp. tables 2017-07-26 12:14:56 +02:00
Uwe Steinmann
b5ae39836c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-26 07:56:05 +02:00
Uwe Steinmann
8b848cc05a set 'showtree' for view 2017-07-26 07:55:49 +02:00
Uwe Steinmann
ee13f8d084 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-21 16:56:33 +02:00
Uwe Steinmann
29ec098798 correct entry for 6.0.1 2017-07-21 16:08:04 +02:00
Uwe Steinmann
62878f29e0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-21 16:07:43 +02:00
Uwe Steinmann
0483e44ddc new note for 6.0.1 2017-07-21 14:43:02 +02:00
Uwe Steinmann
d954b4df1d getReverseSubstitutes() works with roles 2017-07-21 14:41:39 +02:00
Uwe Steinmann
66044f8b4a add entry for 6.0.1 2017-07-21 13:56:59 +02:00
Uwe Steinmann
6847e1b6db check if user has access and is not disabled іf reviewer, approver, etc.
also check if group has members if set as reviewer, approver, etc.
2017-07-21 13:52:57 +02:00
Uwe Steinmann
aa162b6601 add note for 6.0.1 2017-07-21 11:48:52 +02:00
Uwe Steinmann
26cb15fe21 verify status after setting revisors 2017-07-21 11:48:32 +02:00
Uwe Steinmann
37e03e2e9e SeedDMS_Core_Document::checkForDueRevisionWorkflow() also checks if there are any waiting or pending revisions at all 2017-07-21 11:48:01 +02:00
Uwe Steinmann
6aee48fc08 do not try to get orderby and orderdir from view, because it is not set 2017-07-20 18:22:58 +02:00
Uwe Steinmann
09dd448b40 set right message when removing revisor 2017-07-20 18:22:33 +02:00
Uwe Steinmann
a846bcf633 replace sql statement by function in SeedDMS_Core_Document 2017-07-20 18:21:24 +02:00
Uwe Steinmann
bbad479580 use define S_LOG_USER_REMOVED 2017-07-20 18:21:05 +02:00
Uwe Steinmann
7c01cadb2f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-20 17:05:25 +02:00
Uwe Steinmann
58a90d595f get setfilesize from view 2017-07-20 17:02:37 +02:00
Uwe Steinmann
cfc73b1183 check if user is disabled in list of receiver, revisors 2017-07-20 17:02:09 +02:00
Uwe Steinmann
28e84443d8 check if comment has been set already in list of receiption comments 2017-07-20 17:01:25 +02:00
Uwe Steinmann
c03566336a skip user if disabled 2017-07-20 17:00:41 +02:00
Uwe Steinmann
9e87300567 also check if user is disabled 2017-07-20 17:00:19 +02:00
Uwe Steinmann
7259c668c4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-20 15:09:39 +02:00
Uwe Steinmann
5d6a56d95c add missing engl. translations 2017-07-20 15:00:42 +02:00
Uwe Steinmann
6ee9288cb0 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-19 17:24:33 +02:00
Uwe Steinmann
fdf14b2a1f Merge branch 'seeddms-5.1.x' 2017-07-19 08:30:53 +02:00
Uwe Steinmann
0b88f3b30b add script for checking for open tasks of each or individual users 2017-07-19 08:26:03 +02:00
Uwe Steinmann
7601e62504 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-18 13:38:36 +02:00
Uwe Steinmann
78e1ac7572 add filter for doc status 4 and 5 2017-07-18 13:37:09 +02:00
Uwe Steinmann
d879cc6114 group recepition comments in documentListRow() 2017-07-18 13:36:28 +02:00
Uwe Steinmann
00b4817bc7 add formatComment()
used to group comments entered for receiption of document
2017-07-18 13:35:35 +02:00
Uwe Steinmann
a5688a7c3b turn on new sql statements in getDocumentList() 2017-07-18 13:35:01 +02:00
Uwe Steinmann
5c882bdbb2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-17 18:00:09 +02:00
Uwe Steinmann
3fd1dfe87a fix sql for creating temp table ttreviewid and ttapproveid 2017-07-17 17:52:19 +02:00
Uwe Steinmann
3213aa168f more efficient sql code in getDocumentList() 2017-07-17 17:51:38 +02:00
Uwe Steinmann
b855389965 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-13 18:08:56 +02:00
Uwe Steinmann
d7f679428d add entry for 6.0.1 2017-07-13 14:58:47 +02:00
Uwe Steinmann
d6e10dddd6 pass $content to controller, not $latestContent
$latestContent and $content are different objects. If $latestContent
is passed to the controller, its status will be updated in the object
but $content has still the old status. Getting the status later on
from $content, still returns the old content.
2017-07-13 14:55:51 +02:00
Uwe Steinmann
6e37e1ded6 fix check for new content status 2017-07-13 14:11:04 +02:00
Uwe Steinmann
e79a0015f9 Merge tag '5.1.2' 2017-07-11 18:05:39 +02:00
Uwe Steinmann
8e3919ae09 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-11 11:23:08 +02:00
Uwe Steinmann
7f1766ba94 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-10 15:12:19 +02:00
Uwe Steinmann
efd8273901 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-10 15:06:33 +02:00
Uwe Steinmann
18b7df494e Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-10 11:14:20 +02:00
Uwe Steinmann
c26d13484f fix regex expression 2017-07-10 10:32:21 +02:00
Uwe Steinmann
99682a11d1 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-07-10 07:50:33 +02:00
Uwe Steinmann
410654cb19 add more entries for 6.0.1 2017-07-05 14:40:57 +02:00
Uwe Steinmann
bb4c6fe83b show if user has no access on document he/she has to receipt 2017-07-05 10:49:39 +02:00
Uwe Steinmann
310fa41bc2 return more entries in printProtocol() for receipt list 2017-07-05 10:48:56 +02:00
Uwe Steinmann
c6f7b03700 also check for access on document content 2017-07-05 10:48:24 +02:00
Uwe Steinmann
bdcf9d8e93 add notes for 6.0.1 2017-07-05 10:48:03 +02:00
Uwe Steinmann
1249d069c7 add note on deprecated $noReadForStatus 2017-07-05 10:47:23 +02:00
Uwe Steinmann
0e2b8df36b fix sql statement to create temp table ttrevisionid and ttreceiptid 2017-07-05 10:45:12 +02:00
Uwe Steinmann
1326f825d3 $dms->noReadForStatus no longer needed
SeedDMS_Core_DocumentContent::getAccessMode() retrieves the role based
access restrictions from the role of the given user
2017-07-05 10:43:14 +02:00
Uwe Steinmann
2a38d713b8 get approval status before sending notification mails
the approval status was simply not known because part of the code
went into the controller
2017-06-29 15:34:32 +02:00
Uwe Steinmann
7372ccfe11 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-06-26 10:26:17 +02:00
Uwe Steinmann
919f4cb39c Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-06-26 10:20:48 +02:00
Uwe Steinmann
e7b0e7bdde Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-06-19 12:52:12 +02:00
Uwe Steinmann
977f28c30c fix merge errors 2017-06-14 16:26:01 +02:00
Uwe Steinmann
b59b6a0cfb pass initial status from settings to updateDocument 2017-06-14 14:04:38 +02:00
Uwe Steinmann
652e7a82af Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-06-13 14:48:55 +02:00
Uwe Steinmann
98e7615c5b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-05-12 18:46:25 +02:00
Uwe Steinmann
72aa0375b7 take out old method menuTask() 2017-05-12 14:19:10 +02:00
Uwe Steinmann
092967004a Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-05-12 08:23:42 +02:00
Uwe Steinmann
3cc572a1cd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-05-02 06:47:42 +02:00
Uwe Steinmann
c9bdac8d33 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-04-11 17:37:04 +02:00
Uwe Steinmann
62a1d2d7ec do not include ClassAccessOperation 2017-04-11 17:35:17 +02:00
Uwe Steinmann
c1b6fbf11a remove duplicate method getUser() 2017-04-11 17:10:32 +02:00
Uwe Steinmann
a548710a55 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-04-11 17:08:59 +02:00
Uwe Steinmann
510067a714 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-04-11 06:42:27 +02:00
Uwe Steinmann
ffb4f3179d add changes for 6.0.1 2017-04-04 07:33:58 +02:00
Uwe Steinmann
dde99fa150 call hook 'rawcontent' when downloading search result with content 2017-04-04 07:12:13 +02:00
Uwe Steinmann
10b62bc7fb call hook 'rawcontent' 2017-04-04 07:11:51 +02:00
Uwe Steinmann
d7af33f579 raw content can be set for files added to archive
Setting the raw content will take the meta data from the document
content but use the file content as passed by the third optional
parameter of addItem()
2017-04-04 07:09:56 +02:00
Uwe Steinmann
3a615b6e06 optimize sql code to get locked documents 2017-03-24 13:29:00 +01:00
Uwe Steinmann
da5dc944e7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-24 09:18:11 +01:00
Uwe Steinmann
923df99443 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-24 08:29:28 +01:00
Uwe Steinmann
72c5bd237b Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-23 18:48:45 +01:00
Uwe Steinmann
c18f09d344 start new version 6.0.1 2017-03-23 15:22:55 +01:00
Uwe Steinmann
470e946ec2 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-23 15:19:53 +01:00
Uwe Steinmann
050a2e60df remove some debug echos 2017-03-23 07:07:57 +01:00
Uwe Steinmann
7e306054a7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-20 21:38:01 +01:00
Uwe Steinmann
0c4103ce34 Merge branch 'seeddms-5.0.x' 2017-03-20 15:46:04 +01:00
Uwe Steinmann
c01c59e2e5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-20 12:44:49 +01:00
Uwe Steinmann
a65315c537 move all task output into own view 2017-03-20 12:41:21 +01:00
Uwe Steinmann
df27dcf878 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-20 11:54:55 +01:00
Uwe Steinmann
43b613c210 add method rewriteRevisionLog() 2017-03-09 11:33:09 +01:00
Uwe Steinmann
ee4215f89e rewriteReceiptLog() can handle none exiting users 2017-03-09 11:14:31 +01:00
Uwe Steinmann
0cfd663275 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-09 11:09:49 +01:00
Uwe Steinmann
9905a1ed75 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-09 10:22:58 +01:00
Uwe Steinmann
d2bf22994d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-09 09:34:32 +01:00
Uwe Steinmann
e70cadf5dd Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-09 07:58:07 +01:00
Uwe Steinmann
caf35ad868 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-09 07:40:39 +01:00
Uwe Steinmann
3ac9bcafc7 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-09 07:16:24 +01:00
Uwe Steinmann
d95943a365 enlarge interval for checkTask() and timeout of ajax call 2017-03-08 21:57:02 +01:00
Uwe Steinmann
3853f0010f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-08 13:17:29 +01:00
Uwe Steinmann
e5326430cb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-06 11:42:56 +01:00
Uwe Steinmann
322bef00a2 include inc/inc.ClassAcl.php 2017-03-06 10:56:16 +01:00
Uwe Steinmann
858b9b4b38 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-06 10:54:16 +01:00
Uwe Steinmann
132f146a9f Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-06 10:52:36 +01:00
Uwe Steinmann
469270882c add receiptlog 2017-03-03 22:09:42 +01:00
Uwe Steinmann
b05a7f2ba5 add method rewriteReceiptLog() 2017-03-03 22:07:15 +01:00
Uwe Steinmann
5bdf7868d5 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-03 15:00:04 +01:00
Uwe Steinmann
390a653b94 do not show 'AddFile' link if access is not allowed 2017-03-03 14:10:03 +01:00
Uwe Steinmann
4fe435f450 fix error msg when access is not allowed 2017-03-03 14:09:25 +01:00
Uwe Steinmann
0a8261fdcb Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-03 12:08:05 +01:00
Uwe Steinmann
012d4d9f8d Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-03-03 09:43:45 +01:00
Uwe Steinmann
e9c029e8fc fix syntax error 2017-02-28 17:12:27 +01:00
Uwe Steinmann
6e9b840e45 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-28 17:06:58 +01:00
Uwe Steinmann
ff3dd800e4 Merge branch 'seeddms-5.0.x' 2017-02-27 20:18:46 +01:00
Uwe Steinmann
35594e23f9 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-27 18:04:04 +01:00
Uwe Steinmann
fea676c1d4 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-24 19:07:23 +01:00
Uwe Steinmann
8d7c8a0bdf Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-22 13:22:51 +01:00
Uwe Steinmann
293091d13d fix includes 2017-02-22 09:44:47 +01:00
Uwe Steinmann
ce3c2d4f80 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-22 09:41:54 +01:00
Uwe Steinmann
e102f5d6bc include PHPExcel from vendor directory 2017-02-22 09:30:10 +01:00
Uwe Steinmann
32241d1403 include feedwriter from vendor 2017-02-22 09:22:06 +01:00
Uwe Steinmann
37fb2e2c47 pass access object to view, don't use mode anymore 2017-02-21 15:37:29 +01:00
Uwe Steinmann
7f28008d5d get and set secret of user 2017-02-21 08:16:22 +01:00
Uwe Steinmann
f6786406ef Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-21 07:31:33 +01:00
Uwe Steinmann
6006dd3944 fix all sql errors 2017-02-21 07:23:02 +01:00
Uwe Steinmann
9aadb7f471 fix merge errors 2017-02-21 07:04:49 +01:00
Uwe Steinmann
4b1b702fc5 add update for postgresql 2017-02-21 06:54:53 +01:00
Uwe Steinmann
63920fdce8 set ENGINE for tblUserSubstitutes 2017-02-21 06:54:06 +01:00
Uwe Steinmann
08e9f14e9d fix merge error 2017-02-21 06:53:43 +01:00
Uwe Steinmann
6b8b099339 set propper version in tblVersion 2017-02-21 06:34:22 +01:00
Uwe Steinmann
b03fcc5b6a fix versions 2017-02-21 06:20:03 +01:00
Uwe Steinmann
7fc7ffd708 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-21 06:16:32 +01:00
Uwe Steinmann
fa5721c2cb Merge branch 'seeddms-6.0.x-postgres' into seeddms-6.0.x 2017-02-20 17:38:35 +01:00
Uwe Steinmann
4c794381e6 Merge branch 'seeddms-5.1.x' into seeddms-6.0.x 2017-02-20 17:34:43 +01:00
Uwe Steinmann
283c51b193 print_r detailed error msg 2017-02-20 17:11:37 +01:00
Uwe Steinmann
d7403d3745 set sequence after insert 2017-02-20 17:11:37 +01:00
Uwe Steinmann
a761b0b417 set pwdexpiration to '' if it is '0000-00-00' 2017-02-20 17:11:37 +01:00
Uwe Steinmann
8988bc0098 make mimeType varchar(100) in tblDocumentContents and tblDocumentFiles 2017-02-20 17:11:37 +01:00
Uwe Steinmann
a18b3c6879 add sql statement for pgsql in TableList() 2017-02-20 17:11:37 +01:00
Uwe Steinmann
bfbd845bab add sql code for creating temp tables ttreceiptid and ttrevisionid 2017-02-20 17:11:37 +01:00
Uwe Steinmann
50919f40c1 add sql for creating temp tables ttreviewid and ttapproveid 2017-02-20 17:11:37 +01:00
Uwe Steinmann
1a03adebbd add create of temp table ttstatid 2017-02-20 17:11:37 +01:00
Uwe Steinmann
2c775b560f add creation of temp table ttcontentid 2017-02-20 17:11:37 +01:00
Uwe Steinmann
b1bd666386 update to 5.1.x 2017-02-20 17:11:37 +01:00
Uwe Steinmann
e0f7c16a10 add database layout for postgres 2017-02-20 17:11:37 +01:00
Uwe Steinmann
7467df155d fix getInsertID() for identifier in upper/lower case 2017-02-20 17:11:37 +01:00
Uwe Steinmann
cafdd457c8 pass tablename to getInsertID() 2017-02-20 17:11:37 +01:00
Uwe Steinmann
0239edd4ee adjust date function to postgresql 2017-02-20 17:11:37 +01:00
Uwe Steinmann
c55b595ae9 pass tablename to getInsertID(), add pgsql as new db driver 2017-02-20 17:11:37 +01:00
Uwe Steinmann
e1fdfdbef6 set version to 6.0.0 2017-02-20 17:10:47 +01:00
Uwe Steinmann
89b0861f9e move db changes back into version 5.1.0 2017-02-20 09:11:27 +01:00
Uwe Steinmann
455014b2c1 fix dir name 2017-02-20 09:05:19 +01:00
Uwe Steinmann
38740e3a8b move update dir to new version 2017-02-20 08:59:02 +01:00
Uwe Steinmann
784505ce4c change version from 5.1.x to 6.0.x 2017-02-20 08:48:40 +01:00
Uwe Steinmann
be16e7edce Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-15 08:24:23 +01:00
Uwe Steinmann
4aaf7f78e8 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-14 21:13:10 +01:00
Uwe Steinmann
b310d3065d Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-14 21:08:56 +01:00
Uwe Steinmann
c1727652a8 make mimeType in tblDocumentContent and tblDocumentFiles varchar(100) 2017-02-14 17:59:20 +01:00
Uwe Steinmann
7dfbad5451 add missing backticks around identifier in sql statement 2017-02-14 16:59:52 +01:00
Uwe Steinmann
05cf0b83f4 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-14 14:58:41 +01:00
Uwe Steinmann
7f1dc2dfe1 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-14 11:43:17 +01:00
Uwe Steinmann
e58f0888b5 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-14 09:06:23 +01:00
Uwe Steinmann
c785906ffb Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-13 18:23:46 +01:00
Uwe Steinmann
27a323a38f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-13 18:20:49 +01:00
Uwe Steinmann
602903de46 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-13 18:16:50 +01:00
Uwe Steinmann
e74a9a4295 add missing backticks around identifier 2017-02-13 17:32:22 +01:00
Uwe Steinmann
2b91fb06bc put backticks around identifier 2017-02-13 16:51:57 +01:00
Uwe Steinmann
89811361bb Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-13 12:49:09 +01:00
Uwe Steinmann
42c050588b Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-13 12:48:20 +01:00
Uwe Steinmann
f6aded2428 put backticks around identifiers in sql statements 2017-02-13 12:37:26 +01:00
Uwe Steinmann
7d82b73208 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-02-13 12:12:07 +01:00
Uwe Steinmann
7401330e81 do not set date to 0000:00:00 ... use NULL instead 2017-01-27 08:11:04 +01:00
Uwe Steinmann
211a3bc6bc Merge branch 'seeddms-5.0.x' 2017-01-26 15:51:47 +01:00
Uwe Steinmann
eb82f8cc19 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-26 14:44:47 +01:00
Uwe Steinmann
94cf017102 add entry to 5.1.2 2017-01-25 15:11:12 +01:00
Uwe Steinmann
efa316dbf8 propperly set defaultaccess 2017-01-25 15:09:51 +01:00
Uwe Steinmann
247f27fa54 add more notes to 5.1.2 2017-01-25 14:58:41 +01:00
Uwe Steinmann
a7ea074328 set formtoken in button to sustitute user 2017-01-25 14:53:23 +01:00
Uwe Steinmann
b90d1a6be5 pass comment to finishRevision() 2017-01-25 14:51:38 +01:00
Uwe Steinmann
0d5f7a607a finishRevision() puts document version in to 'waiting'
need to be able to start a new revision
2017-01-25 14:49:37 +01:00
Uwe Steinmann
c98ff36977 minor uncrucial corrections 2017-01-25 14:49:05 +01:00
Uwe Steinmann
b07cd2d442 fix getRevisionStatus()
it didn't always return the last entry of the revision log
2017-01-25 14:48:12 +01:00
Uwe Steinmann
40956e9501 paѕs owner to controller 2017-01-25 12:24:47 +01:00
Uwe Steinmann
f4648a7023 take out old function tree(), fix listing missing checksums 2017-01-25 11:56:01 +01:00
Uwe Steinmann
cf3dba89e0 add note to 5.1.2 2017-01-25 11:55:33 +01:00
Uwe Steinmann
ec4712b5bf limit sql statement in getDuplicateDocumentContent() to 1000 hits 2017-01-25 11:54:36 +01:00
Uwe Steinmann
99a83c0d97 set showtree in view 2017-01-25 10:43:43 +01:00
Uwe Steinmann
475239e1ba turn of sorting in lists 2017-01-25 10:43:21 +01:00
Uwe Steinmann
d200070c16 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-25 10:00:56 +01:00
Uwe Steinmann
2077cd6bcb add items to 5.1.2 2017-01-25 09:56:52 +01:00
Uwe Steinmann
86530371f4 add changes to 5.1.2 2017-01-25 09:55:15 +01:00
Uwe Steinmann
69e1bb66ad list documents in revision/reception without access 2017-01-25 09:53:18 +01:00
Uwe Steinmann
761247fe0d add new methods getDocumentsInReception() and getDocumentsInRevision() 2017-01-25 09:52:48 +01:00
Uwe Steinmann
bbcff75b00 create temp table for document revisions 2017-01-25 09:52:16 +01:00
Uwe Steinmann
8c63cc607b Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-24 14:23:48 +01:00
Uwe Steinmann
b814b07e2a reorganize page like MyDocuments page 2017-01-24 14:20:43 +01:00
Uwe Steinmann
27247438f5 call new hook finishReviseDocument 2017-01-24 14:20:10 +01:00
Uwe Steinmann
c6d69bdb75 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-23 08:57:16 +01:00
Uwe Steinmann
b1fa737b56 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-23 07:58:23 +01:00
Uwe Steinmann
4108cf1696 add saving list of users and groupѕ 2017-01-23 07:53:01 +01:00
Uwe Steinmann
3c05f5f5cb save array in ext configuration as comma separated list 2017-01-23 07:52:19 +01:00
Uwe Steinmann
e280a6afa9 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-20 15:02:27 +01:00
Uwe Steinmann
c1e38ec059 add note to 5.1.2 2017-01-20 14:30:26 +01:00
Uwe Steinmann
4191a8feb7 list protocol of receipts and revisions 2017-01-20 14:28:30 +01:00
Uwe Steinmann
db22c3f348 getReviewersStatus() and getReceiptStatus() only return last version
the return lists will no longer include a revision, receipt for version
of a document not being the last version
2017-01-20 14:26:55 +01:00
Uwe Steinmann
c63f994a5f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-18 15:13:18 +01:00
Uwe Steinmann
39bebbdcf6 switch to new access restrictions 2017-01-18 15:08:25 +01:00
Uwe Steinmann
6513642efb change order of lists in section 'tasks'
has now same order like tasks in the header menu
2017-01-18 11:39:29 +01:00
Uwe Steinmann
825c4378a0 add latest version 5.1.2 which somehow got lost 2017-01-18 11:08:17 +01:00
Uwe Steinmann
16342981eb output progressbar only if receipts are available 2017-01-18 11:00:38 +01:00
Uwe Steinmann
17b72a9d0c add entry to 5.1.2 2017-01-18 08:46:43 +01:00
Uwe Steinmann
e6e14fb37a show comments of reception seperated by decline/aknowledge 2017-01-18 08:45:27 +01:00
Uwe Steinmann
f3b5af1c43 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-18 08:32:48 +01:00
Uwe Steinmann
4baa37b2d9 use translated text for comments popupbox 2017-01-18 08:30:11 +01:00
Uwe Steinmann
d3c7ef3088 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-18 08:11:12 +01:00
Uwe Steinmann
b769ae3805 use popupbox to show comments of document reception 2017-01-17 20:40:42 +01:00
Uwe Steinmann
9a675bafb4 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-17 18:36:17 +01:00
Uwe Steinmann
1c281b98e8 replace table layout by form controll 2017-01-17 18:32:17 +01:00
Uwe Steinmann
5e93bea2fd show status of reception if document is owned by current user 2017-01-17 18:31:44 +01:00
Uwe Steinmann
14d2a7263b pass all parameters to hook documentListItem, remove old code 2017-01-17 18:31:06 +01:00
Uwe Steinmann
eefdfb676a Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-17 17:43:55 +01:00
Uwe Steinmann
600cd490a4 first check if document is accessible before calling hook documentListRow() 2017-01-17 17:31:44 +01:00
Uwe Steinmann
24624f6136 split printList() in printListHeader(), printListFooter() and printList() 2017-01-17 15:15:40 +01:00
Uwe Steinmann
56e7f567c7 enable turn off of updating document reception 2017-01-17 14:20:33 +01:00
Uwe Steinmann
3fee35fd3a fix typo 2017-01-17 13:54:26 +01:00
Uwe Steinmann
e0ac6e0349 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-17 13:52:08 +01:00
Uwe Steinmann
c12eed91b3 add items for 5.1.2 2017-01-17 13:45:16 +01:00
Uwe Steinmann
520a783407 add list listReceiveOwner(), group lists in sections 2017-01-17 13:44:57 +01:00
Uwe Steinmann
ba4a6558b4 add new document list ReceiveOwner, list docs with revision in AppRevOwner 2017-01-17 13:44:19 +01:00
Uwe Steinmann
e562ad14cd take out link to network drive
The URL doesn't contain the username anymore
2017-01-17 10:16:23 +01:00
Uwe Steinmann
9d2ed9dc97 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-17 08:59:05 +01:00
Uwe Steinmann
f6d3e9785f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-16 15:52:19 +01:00
Uwe Steinmann
c09146796f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-12 21:06:54 +01:00
Uwe Steinmann
b832ace635 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-12 18:22:21 +01:00
Uwe Steinmann
d0662a6132 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-12 18:08:24 +01:00
Uwe Steinmann
ba621af162 update tasks in menu only if logged in 2017-01-11 18:17:52 +01:00
Uwe Steinmann
32da91d145 add item to 5.1.2 2017-01-11 18:08:16 +01:00
Uwe Steinmann
66e6cec446 add filter for status 'S_DRAFT' 2017-01-11 17:49:21 +01:00
Uwe Steinmann
7a721ee84f make all list sortable by fields in header 2017-01-10 21:25:45 +01:00
Uwe Steinmann
2d2ebdc887 add ordering to all list in getDocumentList() 2017-01-10 21:25:15 +01:00
Uwe Steinmann
47f43a47ba fix validation of alternative file upload/import fields 2017-01-10 09:23:27 +01:00
Uwe Steinmann
95cdf17527 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-10 09:13:38 +01:00
Uwe Steinmann
e49f675cfc Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-10 08:48:18 +01:00
Uwe Steinmann
05f1919e3c set Content-Disposition even if file type not in list of online file types 2017-01-10 08:45:21 +01:00
Uwe Steinmann
8375b66cbe Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-10 07:41:58 +01:00
Uwe Steinmann
d659627959 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-10 07:08:18 +01:00
Uwe Steinmann
b27b8ba7fd check access rights in controller, not before 2017-01-10 06:58:07 +01:00
Uwe Steinmann
5584cedce3 fix validation if just file from library is given 2017-01-10 06:36:45 +01:00
Uwe Steinmann
fae159a5f3 set name of file in zip file to 'docid'-'version'-'docname' (Closes #95) 2017-01-09 21:33:45 +01:00
Uwe Steinmann
95ebfe1657 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-09 21:13:42 +01:00
Uwe Steinmann
72535081d6 check for return value of mytasks api call
do nothing if data is null
2017-01-09 08:58:37 +01:00
Uwe Steinmann
fbb91c9c30 use form controls 2017-01-04 18:08:18 +01:00
Uwe Steinmann
9f0e5c4f3e Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-04 17:54:07 +01:00
Uwe Steinmann
b5f8e9efcc readd [post|pre]PreviewDocument hooks 2017-01-04 17:23:59 +01:00
Uwe Steinmann
8b1b9fdb2a set $dms in preview() 2017-01-04 17:14:45 +01:00
Uwe Steinmann
7d8f4f54c0 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2017-01-04 17:11:39 +01:00
Uwe Steinmann
c6d26ec3fa Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-12-15 06:42:15 +01:00
Uwe Steinmann
e49c9e1c98 Merge branch 'seeddms-5.0.x' 2016-12-12 10:32:27 +01:00
Uwe Steinmann
e21e897468 use keywords for different searches for document reception 2016-11-22 17:58:59 +01:00
Uwe Steinmann
6cb5dec1a9 fix search for documents with reception acknowledgement 2016-11-22 17:58:28 +01:00
Uwe Steinmann
662d9d0d85 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-22 10:34:15 +01:00
Uwe Steinmann
2c498613b6 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-17 16:02:42 +01:00
Uwe Steinmann
7db1703477 forget to create field secret when change table tblUsers 2016-11-16 11:39:13 +01:00
Uwe Steinmann
c5a67874cf Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-14 11:27:18 +01:00
Uwe Steinmann
a8f5892562 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-14 11:11:11 +01:00
Uwe Steinmann
718762d284 check for access on document in mytasks and view->menutasks (Ticket #88)
previously documents where listed, even if the user had no access
2016-11-14 08:38:12 +01:00
Uwe Steinmann
a560035482 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-11 16:30:23 +01:00
Uwe Steinmann
106f849e82 minor documentation fix 2016-11-11 16:20:10 +01:00
Uwe Steinmann
3ddd24c7cd add expired status to list of status without access 2016-11-11 16:19:42 +01:00
Uwe Steinmann
87bbb6bf44 use orig file, set filename in utf-8 2016-11-09 19:54:53 +01:00
Uwe Steinmann
1df09242a0 don't show preview if ViewOnline isn't allowed, more access checks 2016-11-09 19:54:00 +01:00
Uwe Steinmann
ba338191cb new version 5.1.2 2016-11-08 14:06:37 +01:00
Uwe Steinmann
ca76b64ba8 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-08 12:00:44 +01:00
Uwe Steinmann
20f2d68e05 take out some old code 2016-11-05 12:28:25 +01:00
Uwe Steinmann
10a8b14eff take out search for reception 2016-11-04 20:28:22 +01:00
Uwe Steinmann
42bb8b4bf6 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-04 15:43:00 +01:00
Uwe Steinmann
d05962c58b Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-04 08:32:29 +01:00
Uwe Steinmann
4e79899323 fix copy&paste error 2016-11-03 21:44:49 +01:00
Uwe Steinmann
86ba717c83 use bootstrap tags for selection form 2016-11-03 20:29:45 +01:00
Uwe Steinmann
44bc96835a Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-03 20:25:04 +01:00
Uwe Steinmann
c2446c48f5 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-03 20:20:33 +01:00
Uwe Steinmann
e5016cf4f1 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-11-03 19:46:07 +01:00
Uwe Steinmann
e8ec31e293 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-27 17:07:34 +02:00
Uwe Steinmann
408cd5a3eb fix fatal error when recipients were removed from list 2016-10-27 14:35:04 +02:00
Uwe Steinmann
f9d2d9dc48 make sure only users allowed to be a revcipient are saved 2016-10-27 14:28:54 +02:00
Uwe Steinmann
94dbc6b240 do not take enableOwnerRe[vApp|cipt] into account
if a user has been assigen as Reviewer/Approver/Revisor and became
the owner of the document in the mean timer or the configuration has
change he/she should still be able to do the review/approval/revision
2016-10-27 14:23:26 +02:00
Uwe Steinmann
2bc839918a take enableXxxxRevApp into account 2016-10-27 14:22:49 +02:00
Uwe Steinmann
ef4b6578cc check if setting revisor is allowed, pass enableXXXRevApp to view 2016-10-27 14:21:57 +02:00
Uwe Steinmann
9ac66febee add config paramter enableAdminReceipt
allows admins in list of possible recipients of documents
2016-10-27 14:11:18 +02:00
Uwe Steinmann
e10b6974ae add new config flag which allows doc reception by owner 2016-10-27 12:17:04 +02:00
Uwe Steinmann
ba5a73df45 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-27 11:19:45 +02:00
Uwe Steinmann
cc387a1f52 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-27 09:39:08 +02:00
Uwe Steinmann
04cb20a814 define and initialize $_ttreceiptid 2016-10-26 19:25:35 +02:00
Uwe Steinmann
d3c12a84fd Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-25 10:02:09 +02:00
Uwe Steinmann
8592554ad7 set showtree in view 2016-10-16 09:56:19 +02:00
Uwe Steinmann
622c6e134e Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-16 08:29:58 +02:00
Uwe Steinmann
bf2ebc561c start new version 5.1.2 2016-10-06 15:30:58 +02:00
Uwe Steinmann
3d1e6eede0 role has now id 3 instead of 0 2016-10-06 15:30:02 +02:00
Uwe Steinmann
2cc90ccbaf Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-06 15:29:11 +02:00
Uwe Steinmann
500bbb552b Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-05 16:09:53 +02:00
Uwe Steinmann
489654c622 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-05 13:35:23 +02:00
Uwe Steinmann
bbc6376bcf fix setReceiptByGrp() 2016-10-05 12:39:16 +02:00
Uwe Steinmann
7597cb1c74 set recipient in notification mails 2016-10-05 12:17:20 +02:00
Uwe Steinmann
efc11d4236 do not show users in list of recipients if they were deleted
only admin will see them
2016-10-05 12:05:19 +02:00
Uwe Steinmann
35e6625601 fix calculation of already receipt documents 2016-10-05 11:16:26 +02:00
Uwe Steinmann
42de7bb0c9 fix html 2016-10-05 11:16:16 +02:00
Uwe Steinmann
f5dc479714 fix error in addIndReceipt 2016-10-05 11:15:50 +02:00
Uwe Steinmann
70db94f83c allow revision only for users allowed by settings, fix html 2016-10-05 11:15:06 +02:00
Uwe Steinmann
736b916286 allow all users to receipt a document 2016-10-05 11:14:47 +02:00
Uwe Steinmann
1c7bc39c80 fix typo, minor updates 2016-10-05 07:42:24 +02:00
Uwe Steinmann
7710f8e307 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-04 21:42:51 +02:00
Uwe Steinmann
8f851e1a3a search if only reception status is given 2016-10-04 21:28:53 +02:00
Uwe Steinmann
9d1f3b867f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-04 20:55:33 +02:00
Uwe Steinmann
b869c4253c Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-10-04 16:36:00 +02:00
Uwe Steinmann
919543bf82 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-28 21:37:59 +02:00
Uwe Steinmann
94c3ba51d1 search for each status of reception 2016-09-28 21:29:36 +02:00
Uwe Steinmann
1989657c9a search for each status of reception 2016-09-28 21:29:16 +02:00
Uwe Steinmann
88d7f252b6 create temp table ttreceiptid 2016-09-28 21:28:51 +02:00
Uwe Steinmann
3e777f987d search for each reception status (no action, rejected, acknowledged) 2016-09-28 21:28:01 +02:00
Uwe Steinmann
9746c85ce5 add search paramter for documents with missing reception 2016-09-28 20:22:59 +02:00
Uwe Steinmann
7937f73031 pass $missingreception to view 2016-09-28 20:22:42 +02:00
Uwe Steinmann
be9f987342 search for documents with missing receptions 2016-09-28 20:22:16 +02:00
Uwe Steinmann
b8e3e2d092 add $norequire as optional parameter to printAttributeEditField()
needed for search for, where fields are not required
2016-09-28 20:20:38 +02:00
Uwe Steinmann
20c3ddfd1e Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-28 14:20:41 +02:00
Uwe Steinmann
4219559450 get doc list ReviewByMe and ApproveByMe instead of AppRevByMe 2016-09-28 14:09:03 +02:00
Uwe Steinmann
e932c3efd5 allow admins and owner as revisor and reciepent 2016-09-27 17:50:30 +02:00
Uwe Steinmann
e3002fce0b Merge branch 'seeddms-5.0.x' 2016-09-23 09:07:18 +02:00
Uwe Steinmann
d3eefc41bc Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-22 18:24:32 +02:00
Uwe Steinmann
df63e1bb7e insert acos and aros 2016-09-22 08:48:28 +02:00
Uwe Steinmann
159aa09636 dump acos, aros 2016-09-22 08:48:09 +02:00
Uwe Steinmann
19d4d84e58 set model in tblAcos because it may not be null 2016-09-22 08:47:20 +02:00
Uwe Steinmann
556626501c Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-16 17:26:12 +02:00
Uwe Steinmann
839b5f72f6 fix import of transmittal items 2016-09-16 12:48:43 +02:00
Uwe Steinmann
5c558601c7 set same date fields to default null 2016-09-16 12:48:20 +02:00
Uwe Steinmann
10f01c0fc6 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-16 11:29:06 +02:00
Uwe Steinmann
da616fd4ed take out print_r 2016-09-16 06:37:30 +02:00
Uwe Steinmann
7bb3726f5b Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-15 21:44:57 +02:00
Uwe Steinmann
42ac18d962 import roles 2016-09-15 21:40:38 +02:00
Uwe Steinmann
6ba36e2cae dump roles 2016-09-15 21:40:19 +02:00
Uwe Steinmann
86b1a562c1 set text fields to default null 2016-09-15 21:39:38 +02:00
Uwe Steinmann
40e97f7363 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-15 17:04:28 +02:00
Uwe Steinmann
167e21abf7 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-06 14:50:06 +02:00
Uwe Steinmann
93f3153903 fix entry for 5.1.1 2016-09-06 12:30:39 +02:00
Uwe Steinmann
2fee305eb2 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-06 11:51:39 +02:00
Uwe Steinmann
813b265f6c Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-06 10:10:17 +02:00
Uwe Steinmann
42c20082eb Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-06 08:43:52 +02:00
Uwe Steinmann
1fb6305380 use translation for 'Save layout' 2016-09-06 07:49:16 +02:00
Uwe Steinmann
75ce06c128 check if workflow graph may be shown 2016-09-05 10:05:54 +02:00
Uwe Steinmann
f768ad63f0 pass accessobj to view 2016-09-05 10:05:37 +02:00
Uwe Steinmann
e272d26f30 add access check 2016-09-05 10:05:16 +02:00
Uwe Steinmann
a1ccc60729 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-05 08:57:18 +02:00
Uwe Steinmann
3249a8f889 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-02 08:41:28 +02:00
Uwe Steinmann
926087a448 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-09-01 22:25:56 +02:00
Uwe Steinmann
bf25274fc0 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-31 16:13:31 +02:00
Uwe Steinmann
89334c25d6 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-31 15:43:31 +02:00
Uwe Steinmann
bdee3da08e Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-31 15:39:03 +02:00
Uwe Steinmann
10dfc4d7b8 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-31 15:26:52 +02:00
Uwe Steinmann
bdd0dd6582 add saving and reloading layout data 2016-08-31 11:54:51 +02:00
Uwe Steinmann
84a65f0f32 implemented saving of layout data for workflows 2016-08-31 11:54:15 +02:00
Uwe Steinmann
2418675822 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-31 10:35:14 +02:00
Uwe Steinmann
d64747ddef add code for saving and redrawing layout 2016-08-31 10:11:46 +02:00
Uwe Steinmann
4d6ce5114a add operation for saving workflow layout (not ready yet) 2016-08-31 10:11:18 +02:00
Uwe Steinmann
9604a4548d add field layoutdata to tblWorkflows
will store the layout of a workflow for rendering a graph
2016-08-31 08:54:04 +02:00
Uwe Steinmann
c92a6fb413 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-31 08:46:30 +02:00
Uwe Steinmann
b646e4f9cf Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-30 13:36:09 +02:00
Uwe Steinmann
2a45854818 Merge tag '5.0.5' 2016-08-29 09:56:36 +02:00
Uwe Steinmann
a8fd2da7ea Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-25 17:10:01 +02:00
Uwe Steinmann
d4e6732eeb add entry for 5.1.1 2016-08-22 17:17:43 +02:00
Uwe Steinmann
169204173f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-22 17:16:41 +02:00
Uwe Steinmann
8b9d4b98d5 set parameter $plain for exitError() in case of an ajax call 2016-08-22 17:03:29 +02:00
Uwe Steinmann
58e52856b2 remove removeitem(), get $timeout from view in items() 2016-08-22 17:02:56 +02:00
Uwe Steinmann
3fbfadeebd add optional parameter $plain to exitError()
if set, the resulting html will only be a html fragment to be embedded
in a page
2016-08-22 17:01:53 +02:00
Uwe Steinmann
34ce80eb3d do not redirect if session ended and it is an ajax call 2016-08-22 17:00:52 +02:00
Uwe Steinmann
c8121afed1 make transmittal,document,version unique in tblTransmittalItem 2016-08-22 06:30:38 +02:00
Uwe Steinmann
a2bde8fd6b access check for AddToTransmittal 2016-08-22 06:29:50 +02:00
Uwe Steinmann
2d199cae8d use ajax for loading parts of page 2016-08-22 06:28:29 +02:00
Uwe Steinmann
cf6f8b952d add access check for MyDocuments, MyAccount, MyTransmittals 2016-08-22 06:26:34 +02:00
Uwe Steinmann
3e45e8cb10 add actions '[update|remove]transmittalitem' 2016-08-22 06:25:17 +02:00
Uwe Steinmann
b6907c6bc2 pass accessop to 'view', remove '[update|remove]transmittalitem'
'[update|remove]transmittalitem' is now in op/op.TransmittalMgr.php
2016-08-22 06:23:22 +02:00
Uwe Steinmann
38e75cf422 don't need accessop in show_form() 2016-08-16 07:08:31 +02:00
Uwe Steinmann
879ecea1e5 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-12 18:22:02 +02:00
Uwe Steinmann
3112078041 replace phrase when no review is needed 2016-08-12 18:16:19 +02:00
Uwe Steinmann
74f9a0209b add more access checks 2016-08-12 18:08:30 +02:00
Uwe Steinmann
224172f785 add access check 2016-08-12 15:57:47 +02:00
Uwe Steinmann
c56d026679 never needed 2016-08-12 15:01:10 +02:00
Uwe Steinmann
f2ffca8096 add role based access check 2016-08-12 15:00:12 +02:00
Uwe Steinmann
9a20306399 add access check for download of approval/review files 2016-08-12 14:59:46 +02:00
Uwe Steinmann
b90c9a379a major overhaul
do not show backup space required, if backup is stored in content
direcotry. Add various role based access checks.
2016-08-12 13:14:34 +02:00
Uwe Steinmann
bf7a63bf5a add more role based access checks 2016-08-12 12:43:21 +02:00
Uwe Steinmann
504cfe6d3e output a message if access to form() action was prohibited 2016-08-12 12:42:25 +02:00
Uwe Steinmann
4fa95bcd48 major overhaul, replace inProcess paramter by listtype
most list where not correct and the code was way to complicated
2016-08-12 12:41:07 +02:00
Uwe Steinmann
8126d6d3fe clean up parameters passed to getDocumentList() 2016-08-12 12:40:23 +02:00
Uwe Steinmann
d9d5c98c5f use documentListRow() for output 2016-08-11 22:57:53 +02:00
Uwe Steinmann
4266e426db add access check for download in documentListRow() 2016-08-11 22:56:56 +02:00
Uwe Steinmann
dc2edaca25 move more code into controller class 2016-08-11 22:56:12 +02:00
Uwe Steinmann
861776f9f0 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-11 16:42:00 +02:00
Uwe Steinmann
20f5bd6489 check for access on Download and ViewOnline 2016-08-11 13:25:27 +02:00
Uwe Steinmann
8916c83a8e check for access on op/op.Download.php in documentListRow() 2016-08-11 13:25:01 +02:00
Uwe Steinmann
17c9556337 remove left over from git merge conflict 2016-08-11 12:11:09 +02:00
Uwe Steinmann
c4401a45df don't show any links to op/op.Download.php and op/op.ViewOnline.php if access is prohibited 2016-08-11 12:05:36 +02:00
Uwe Steinmann
2e19ad3dcb check for access 2016-08-11 12:05:26 +02:00
Uwe Steinmann
40b84b89bd Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-10 22:26:24 +02:00
Uwe Steinmann
0cc0d0795e add link to timeline rss feed 2016-08-10 18:23:05 +02:00
Uwe Steinmann
889c82652b add entry for 5.1.1 2016-08-10 18:20:39 +02:00
Uwe Steinmann
073bdf24bb add rss feed of timeline 2016-08-10 18:16:39 +02:00
Uwe Steinmann
eebb3e996d Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-10 17:53:12 +02:00
Uwe Steinmann
739b6fb9a9 use documentListRow() in all lists 2016-08-09 17:16:04 +02:00
Uwe Steinmann
f397558f75 set proper default value for orderdir 2016-08-09 17:15:41 +02:00
Uwe Steinmann
31fd01cc71 pass timeout to view 2016-08-09 17:15:26 +02:00
Uwe Steinmann
eb2f3c7148 AppRevOwner list can ordered by passed parameter 2016-08-09 17:14:57 +02:00
Uwe Steinmann
71e0fd36ad take out links to different doc lists in mydocument menu
all lists are now on the start page of MyDocuments
2016-08-09 15:16:20 +02:00
Uwe Steinmann
a87ae68c24 put list of all documents onto page with all other doc lists 2016-08-09 15:15:47 +02:00
Uwe Steinmann
8165ee4776 remove opacity for badge 2016-08-09 15:15:00 +02:00
Uwe Steinmann
eef3b28270 getDocumentList() accepts parameter for direction of order 2016-08-09 15:14:17 +02:00
Uwe Steinmann
148088f42a Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-09 07:55:52 +02:00
Uwe Steinmann
71e7d6f3e6 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-09 06:31:50 +02:00
Uwe Steinmann
43016dcbc1 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-08 20:31:01 +02:00
Uwe Steinmann
d2e959e32e add command to set sql_mode as default by Ubuntu 16.04 (not active) 2016-08-08 20:28:35 +02:00
Uwe Steinmann
229b7e874f set pwdExpiration to 'keep' instead of ''
set '' as value for never
2016-08-08 20:21:30 +02:00
Uwe Steinmann
dac9c7b37f check also for '' in pwdExpiration 2016-08-08 12:57:07 +02:00
Uwe Steinmann
83dcd9da7b do not use '0000-00-00 00:00:00' as date anymore
use NULL instead because '0000-00-00 00:00:00' in certain sql_modes
2016-08-08 12:49:59 +02:00
Uwe Steinmann
b3ec207213 do not set datetime to '0000-00-00 00:00:00' by default
depending in the sql mode in mysql this is is not allowed
2016-08-08 12:43:06 +02:00
Uwe Steinmann
9f79586017 add entry for 5.1.1 2016-08-03 14:49:22 +02:00
Uwe Steinmann
0fb14d4c6a more similar look of documents list 2016-08-03 14:47:06 +02:00
Uwe Steinmann
624a96ddde Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-03 12:33:19 +02:00
Uwe Steinmann
138a6ce408 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-03 09:30:53 +02:00
Uwe Steinmann
3c6bd6bf6f check for su by regular user, call service hooks 2016-08-02 13:37:04 +02:00
Uwe Steinmann
1cf7516cc3 add entry for 5.1.1 2016-08-02 11:52:14 +02:00
Uwe Steinmann
45fd0bf934 set timeout of mytasks ajax call to 1000ms 2016-08-02 11:49:52 +02:00
Uwe Steinmann
5adaf41288 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-08-02 11:34:17 +02:00
Uwe Steinmann
6097b7b9a9 add dummy note 2016-08-02 11:29:48 +02:00
Uwe Steinmann
f7e6a25a50 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-29 08:01:19 +02:00
Uwe Steinmann
dd1310871f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-28 08:07:10 +02:00
Uwe Steinmann
d5360b9342 add changelog for 5.1.0 and 5.1.1 2016-07-28 06:48:55 +02:00
Uwe Steinmann
13c3e15b4f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-27 21:10:42 +02:00
Uwe Steinmann
8410ca9273 add spinner when initially loading content by ajax call 2016-07-27 21:02:49 +02:00
Uwe Steinmann
76e8d25f87 add style for sidebar 2016-07-27 21:02:30 +02:00
Uwe Steinmann
0434caa89a add side menu for selecting list 2016-07-27 21:02:02 +02:00
Uwe Steinmann
8a50145932 should not be in branch 5.1.x 2016-07-27 08:00:58 +02:00
Uwe Steinmann
53296bb330 add database changes for 5.2.0 2016-07-26 18:46:47 +02:00
Uwe Steinmann
b717e0bafd set version to 5.1.0 2016-07-19 11:08:03 +02:00
Uwe Steinmann
5f76b170b5 add '' as secret to insert into tblUsers statement 2016-07-19 08:01:14 +02:00
Uwe Steinmann
e384966172 fix errors in sql statements 2016-07-19 08:00:54 +02:00
Uwe Steinmann
b49790f48a Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-14 07:02:07 +02:00
Uwe Steinmann
9eb10d06b8 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-12 17:49:44 +02:00
Uwe Steinmann
65ec97c2ac show 2-fact-auth qrcode 2016-07-12 17:46:08 +02:00
Uwe Steinmann
4230df3c88 add input field for 2-fact-auth code 2016-07-12 17:44:56 +02:00
Uwe Steinmann
420586ea0a add out/out.Setup2Factor.php to menu 2016-07-12 17:43:51 +02:00
Uwe Steinmann
e68a7b82b3 pass enable2fact to view 2016-07-12 17:43:27 +02:00
Uwe Steinmann
b5b9a5eac3 check code from google authenticator 2016-07-12 17:42:39 +02:00
Uwe Steinmann
b8b1996fb4 redirekt to out/out.Setup2Auth.php if 2-fact-auth isn't setup
make sure user has not been substituted for setting up 2-fact-auth
or password change
2016-07-12 17:40:54 +02:00
Uwe Steinmann
2bc217b156 add files for 2 factor authentication 2016-07-12 17:39:10 +02:00
Uwe Steinmann
5e5951880f Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-06 22:27:34 +02:00
Uwe Steinmann
7f9f118fba add qrcode and secret for 2-factor auth 2016-07-06 22:26:23 +02:00
Uwe Steinmann
4d7f228a4c add field secret to tblUsers 2016-07-06 22:25:59 +02:00
Uwe Steinmann
825ef2898b add enable2FactorAuthentication 2016-07-06 22:25:43 +02:00
Uwe Steinmann
303a114178 add field 'secret' for secret of 2-factor auth 2016-07-06 22:24:50 +02:00
Uwe Steinmann
3922d1706a Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-06 13:35:31 +02:00
Uwe Steinmann
d064d24903 include ../inc/inc.ClassAccessOperation.php 2016-07-06 13:00:30 +02:00
Uwe Steinmann
a8c8dbf535 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-07-06 12:57:13 +02:00
Uwe Steinmann
cb059d53eb Merge branch 'seeddms-5.0.x' 2016-07-06 12:52:35 +02:00
Uwe Steinmann
97d471bce1 Merge branch 'seeddms-5.0.x' into develop 2016-05-30 20:45:00 +02:00
Uwe Steinmann
1544912dbc fix access checking 2016-05-30 20:41:36 +02:00
Uwe Steinmann
21b053cd0d propperly get enableAcknowledgeWorkflow and enableRevisionWorkflow 2016-05-30 20:34:29 +02:00
Uwe Steinmann
50a837a05d check if $settings->_converters['preview'] is set 2016-05-30 20:34:14 +02:00
Uwe Steinmann
95b332586c add initial roles 2016-05-30 20:24:49 +02:00
Uwe Steinmann
86d775ff84 Merge branch 'develop' into seeddms-5.1.x 2016-05-30 19:30:57 +02:00
Uwe Steinmann
de793abb7b use SeedDMS_Core_Attribute->validate() 2016-05-30 19:26:19 +02:00
Uwe Steinmann
21c1d1b7b9 check for min values of attribute 2016-05-30 19:25:55 +02:00
Uwe Steinmann
4fe01ebbfd take out old code 2016-05-30 19:25:27 +02:00
Uwe Steinmann
a32a5c929a treat empty attribute value as no value in validate() 2016-05-30 19:24:43 +02:00
Uwe Steinmann
62695fba33 Merge branch 'develop' into seeddms-5.1.x 2016-05-30 11:21:00 +02:00
Uwe Steinmann
44dbf74c57 Merge branch 'seeddms-5.0.x' into develop 2016-05-30 11:20:47 +02:00
Uwe Steinmann
6ab00875a9 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-05-23 14:05:44 +02:00
Uwe Steinmann
b7a6bb2201 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-05-23 13:59:16 +02:00
Uwe Steinmann
e7b307f6fd Merge branch 'seeddms-5.0.x' into develop 2016-05-23 13:59:09 +02:00
Uwe Steinmann
1b0a972cdd set notes for 5.1.1 2016-05-23 13:43:18 +02:00
Uwe Steinmann
d159432181 Merge branch 'develop' into seeddms-5.1.x 2016-05-23 12:33:40 +02:00
Uwe Steinmann
20476876ac Merge branch 'seeddms-5.0.x' into develop 2016-05-23 12:32:18 +02:00
Uwe Steinmann
6380e028fa Merge branch 'seeddms-5.0.x' into develop 2016-05-03 07:09:26 +02:00
Uwe Steinmann
38f02a149e Merge branch 'seeddms-5.0.x' into develop 2016-05-03 06:40:50 +02:00
Uwe Steinmann
979b15a8fa set $accessop from view 2016-05-02 07:47:29 +02:00
Uwe Steinmann
8a4948085a Merge branch 'seeddms-5.0.x' into develop 2016-04-28 12:24:47 +02:00
Uwe Steinmann
51ca23085a fix some html markup 2016-04-26 18:16:24 +02:00
Uwe Steinmann
99e52d68f4 check if version is accessible
don't use the latest version but the version that needs to be reviewed,
approved, revised, ...
2016-04-26 18:15:06 +02:00
Uwe Steinmann
6b2d4a4b75 set dms in view early, check for access on latest content 2016-04-26 18:14:38 +02:00
Uwe Steinmann
f87a3ce570 fix line indenting 2016-04-26 18:14:12 +02:00
Uwe Steinmann
ad95fdecd9 add comment the getAccessMode() doesn't work in any case 2016-04-26 18:12:36 +02:00
Uwe Steinmann
44bd7fda79 Merge branch 'seeddms-5.0.x' 2016-04-22 17:24:34 +02:00
Uwe Steinmann
6930202349 Merge branch 'develop' into seeddms-5.1.x 2016-04-22 12:59:04 +02:00
Uwe Steinmann
92ab26d547 call hook extraDownloadHeader 2016-04-22 12:58:28 +02:00
Uwe Steinmann
35d7a70ade header for additional columns can be set 2016-04-22 12:57:39 +02:00
Uwe Steinmann
b4e2224c3e Merge branch 'seeddms-5.0.x' into develop 2016-04-22 12:39:41 +02:00
Uwe Steinmann
281c4baeb3 some reorganization of code 2016-04-22 12:30:02 +02:00
Uwe Steinmann
e97b94d393 Merge branch 'seeddms-5.0.x' into develop 2016-04-22 12:28:57 +02:00
Uwe Steinmann
c6121ff201 do not issue an error if access on library folder is forbitten
just disable the upload from the library folder
2016-04-22 12:25:26 +02:00
Uwe Steinmann
1d01338e49 Merge branch 'develop' into seeddms-5.1.x 2016-04-22 09:06:01 +02:00
Uwe Steinmann
8a47cdd1da Merge branch 'seeddms-5.0.x' into develop 2016-04-22 08:31:57 +02:00
Uwe Steinmann
0d3ff8a2d4 add access check for action 'form', no need to check for admin 2016-04-22 08:23:37 +02:00
Uwe Steinmann
7e3535ad1a add more access checks for actions 'info' and 'form' 2016-04-22 08:23:15 +02:00
Uwe Steinmann
088a146888 add more access checks, fixed html 2016-04-22 08:22:50 +02:00
Uwe Steinmann
bc6f641eb3 add more access checks for action 'info' and 'form' 2016-04-22 08:22:19 +02:00
Uwe Steinmann
d63b36f3bf no need to check explicitly for admin, check_view_access() is enough 2016-04-22 08:21:44 +02:00
Uwe Steinmann
e1926ed217 add more documentation 2016-04-22 08:21:18 +02:00
Uwe Steinmann
823e7bf76e better handling of access rights if advanced access rights are turn off
check_view_access() returns true for admins and false otherwise
2016-04-21 17:19:58 +02:00
Uwe Steinmann
cc685141e9 fix wrong variable name 2016-04-21 17:19:28 +02:00
Uwe Steinmann
b28153d8f9 Merge branch 'develop' into seeddms-5.1.x 2016-04-21 16:02:07 +02:00
Uwe Steinmann
d0ef7f4238 convert to bootstrap 2016-04-21 16:01:38 +02:00
Uwe Steinmann
35c8e57633 don't drop old table tblUsers, just rename it
dropping it, always issues an error 'database locked'
2016-04-21 16:00:46 +02:00
Uwe Steinmann
037646537b set version to 5.1.0, use btn instead of plain link 2016-04-21 16:00:16 +02:00
Uwe Steinmann
20c0abf69d add missing attribute 'target' to converters
this needs to be done when updating from 5.0.x to 5.1.x
2016-04-21 15:33:57 +02:00
Uwe Steinmann
358b0701a4 Merge branch 'develop' into seeddms-5.1.x 2016-04-21 14:22:55 +02:00
Uwe Steinmann
a18fd1d5c9 Merge branch 'seeddms-5.0.x' into develop 2016-04-21 14:22:47 +02:00
Uwe Steinmann
24c7c0a076 Merge branch 'develop' into seeddms-5.1.x 2016-04-21 13:48:20 +02:00
Uwe Steinmann
531cfbea29 Merge branch 'seeddms-5.0.x' into develop 2016-04-21 13:48:03 +02:00
Uwe Steinmann
aee1ff2fcb inform notifier of new document too 2016-04-21 13:32:37 +02:00
Uwe Steinmann
c137d28da5 Merge branch 'seeddms-5.0.x' into develop 2016-04-20 18:12:37 +02:00
Uwe Steinmann
e22f0e2065 use html_link() instead of plain html 2016-04-20 18:09:36 +02:00
Uwe Steinmann
8a08cc3bff check_view_access() returns true if advanced access is turned off 2016-04-20 18:09:05 +02:00
Uwe Steinmann
ea4d3d782c add parameter to html_link() for turning access check off 2016-04-20 18:08:24 +02:00
Uwe Steinmann
ae1bbffc64 fix link to out.EditOnline.php and out.RemoveVersion.php 2016-04-20 15:46:36 +02:00
Uwe Steinmann
9999f6d57c include missing files, set accessobject for view 2016-04-20 15:45:53 +02:00
Uwe Steinmann
c14aaf02a6 Merge branch 'develop' into seeddms-5.1.x 2016-04-20 09:05:13 +02:00
Uwe Steinmann
dccb4c476a use html_url() for image 2016-04-20 09:03:15 +02:00
Uwe Steinmann
7ed8801f46 user html_url() and html_link() 2016-04-20 09:02:57 +02:00
Uwe Steinmann
ae3c5faef5 use html_link() 2016-04-20 09:02:30 +02:00
Uwe Steinmann
5912354f09 set accessobject in view 2016-04-20 09:01:59 +02:00
Uwe Steinmann
4590a14de1 fix html_link(), link attributes can't be added 2016-04-20 09:01:20 +02:00
Uwe Steinmann
6ad8c5a10f Merge branch 'develop' into seeddms-5.1.x 2016-04-18 20:56:09 +02:00
Uwe Steinmann
8d8f3e51fb move excel export into view 2016-04-18 20:53:00 +02:00
Uwe Steinmann
8c77b0734c add hook to set extra columns, fix column counting if approval or review does not exists 2016-04-18 20:51:32 +02:00
Uwe Steinmann
2188babab8 move js from html into dynamic js file 2016-04-18 13:21:56 +02:00
Uwe Steinmann
4e2313d387 pass instance of Access Operation to view 2016-04-18 13:13:16 +02:00
Uwe Steinmann
4f70b6822b fix typo 2016-04-15 15:16:07 +02:00
Uwe Steinmann
9a44f8439e Merge branch 'develop' into seeddms-5.1.x 2016-04-15 13:22:33 +02:00
Uwe Steinmann
f8adb0cecf show previews were possible, pass accessobject to view 2016-04-15 13:20:56 +02:00
Uwe Steinmann
fcfce2d68d Merge branch 'develop' into seeddms-5.1.x 2016-04-13 18:43:25 +02:00
Uwe Steinmann
28dc4d32ad check access rights 2016-04-13 18:42:58 +02:00
Uwe Steinmann
b30aee4314 Merge branch 'develop' into seeddms-5.1.x 2016-04-13 18:32:27 +02:00
Uwe Steinmann
8723151361 check for access rights on controller actions 2016-04-13 18:31:42 +02:00
Uwe Steinmann
7e24402671 place code into controller 2016-04-13 18:31:28 +02:00
Uwe Steinmann
caf1501c89 add mehtod __invoke() 2016-04-13 18:30:54 +02:00
Uwe Steinmann
94682fb0ff copy code from check_view_access() to check_controller_access() 2016-04-13 18:29:58 +02:00
Uwe Steinmann
b80cb91d54 check if parameter of setNoAccess() is set before using it 2016-04-13 18:29:21 +02:00
Uwe Steinmann
76beca23c6 Merge branch 'seeddms-5.0.x' into develop 2016-04-13 10:55:38 +02:00
Uwe Steinmann
e96e94d471 use translated strings 2016-04-13 10:54:12 +02:00
Uwe Steinmann
64470891ba set accessobject for view 2016-04-13 10:53:57 +02:00
Uwe Steinmann
a3e0f6eb7d fix inclusion of files 2016-04-13 08:56:51 +02:00
Uwe Steinmann
0dba3d5300 Merge branch 'seeddms-5.0.x' into develop 2016-04-13 08:53:12 +02:00
Uwe Steinmann
46b36ba7e5 check for access on RemoveUser 2016-04-13 08:51:57 +02:00
Uwe Steinmann
46602c744b check for access on RemoveGroup 2016-04-13 08:51:34 +02:00
Uwe Steinmann
e527a6d176 fix access check and add new debug menu item 2016-04-13 08:51:03 +02:00
Uwe Steinmann
23e3011d82 use access check 2016-04-13 08:50:27 +02:00
Uwe Steinmann
4c15aa7c49 check_access() doesn't check for admin anymore
check_view_access() does it now
2016-04-13 08:49:32 +02:00
Uwe Steinmann
e22ca653ed check_view_access() returns true/false and also takes admin role into account 2016-04-13 08:48:23 +02:00
Uwe Steinmann
d2b2bd0226 check() returns true/false again 2016-04-13 08:47:33 +02:00
Uwe Steinmann
daa4066c04 show access restrictions for all role types except admin 2016-04-12 17:22:04 +02:00
Uwe Steinmann
bb25509fd6 Merge branch 'develop' into seeddms-5.1.x 2016-04-12 15:30:41 +02:00
Uwe Steinmann
f7118a6ac3 fix notes of 1.1.8 2016-04-12 15:30:19 +02:00
Uwe Steinmann
1a35ef9cc3 Merge branch 'develop' into seeddms-5.1.x 2016-04-12 15:27:51 +02:00
Uwe Steinmann
ece56944d8 add new field noAccess in tblRoles 2016-04-12 12:23:57 +02:00
Uwe Steinmann
5bdc6fe3cc filter result by new access restrictions derived from status 2016-04-12 12:23:26 +02:00
Uwe Steinmann
795eb1e028 manage access restrictions 2016-04-12 12:23:04 +02:00
Uwe Steinmann
6278dd8df3 set access restrictions by role 2016-04-12 12:22:36 +02:00
Uwe Steinmann
0511d06d63 add field for access restrictions by document status 2016-04-12 12:21:55 +02:00
Uwe Steinmann
7a84ffee5e fix typo in description of extension 2016-04-12 09:17:35 +02:00
Uwe Steinmann
cdf78c0f4c Merge branch 'develop' into seeddms-5.1.x 2016-04-12 08:52:33 +02:00
Uwe Steinmann
41fa410010 Merge branch 'seeddms-5.0.x' into develop 2016-04-12 08:52:17 +02:00
Uwe Steinmann
50cf128471 replace phrase 'type' with 'role_type' 2016-04-12 08:48:12 +02:00
Uwe Steinmann
4ea8b141da Merge branch 'seeddms-5.0.x' into develop 2016-04-12 08:30:45 +02:00
Uwe Steinmann
3654906e9a set $dms->noReadForStatus (still commented out) 2016-04-12 07:56:53 +02:00
Uwe Steinmann
fb73b9c922 get $user from view in mainMenu() 2016-04-12 07:55:15 +02:00
Uwe Steinmann
be8be01ed5 check if getLatestContent() returns a version 2016-04-12 07:54:22 +02:00
Uwe Steinmann
130c894a35 check if version is accessible
all functions which return a document version (e.g. getLatestVersion())
will check if access has been restricted by setting
SeedDMS_Core_DMS::noReadForStatus
2016-04-12 07:46:37 +02:00
Uwe Steinmann
9786a51822 add variable noReadForStatus, method getLoggedInUser
setting noReadForStatus will allow to check if a version may
be accessible in its status
2016-04-12 07:44:48 +02:00
Uwe Steinmann
5224cbb9c6 Merge branch 'seeddms-5.0.x' into develop 2016-04-08 15:59:10 +02:00
Uwe Steinmann
0a87820f9a SeedDMS_Core_DocumentContent::getAccessMode() takes status into account 2016-04-08 15:10:43 +02:00
Uwe Steinmann
2caa65add6 replace phrase 'role' by 'type' 2016-04-08 12:54:25 +02:00
Uwe Steinmann
3a0d9526f7 Merge branch 'develop' into seeddms-5.1.x 2016-04-07 19:36:32 +02:00
Uwe Steinmann
cac1387d24 Merge branch 'seeddms-5.0.x' into develop 2016-04-07 19:36:23 +02:00
Uwe Steinmann
e3bc75da15 check for $_POST["grpIndApprovers"] and $_POST["grpIndReviewers"] 2016-04-07 19:34:42 +02:00
Uwe Steinmann
ba23fa9073 fix take over reviewers/approvers from last version, add field for members of a group 2016-04-07 19:33:49 +02:00
Uwe Steinmann
8722b87727 Merge branch 'develop' into seeddms-5.1.x 2016-04-07 08:38:27 +02:00
Uwe Steinmann
c86616b971 Merge branch 'seeddms-5.0.x' into develop 2016-04-07 08:38:05 +02:00
Uwe Steinmann
552c3b4d98 Merge branch 'seeddms-5.0.x' into develop 2016-04-05 10:05:05 +02:00
Uwe Steinmann
688244c87b Merge branch 'develop' into seeddms-5.1.x 2016-04-04 15:09:59 +02:00
Uwe Steinmann
ce905f3144 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-04-04 14:32:02 +02:00
Uwe Steinmann
b2b3975b70 Merge branch 'seeddms-5.0.x' into develop 2016-04-04 12:21:19 +02:00
Uwe Steinmann
8139bebb6a add new tables Aros, Acos, ArosAcos to update script 2016-03-31 11:34:00 +02:00
Uwe Steinmann
263ec73451 Merge branch 'develop' into seeddms-5.1.x 2016-03-31 11:19:49 +02:00
Uwe Steinmann
7d50c6e69d Merge branch 'seeddms-5.0.x' into develop 2016-03-31 11:19:36 +02:00
Uwe Steinmann
8b04957820 Merge branch 'seeddms-5.0.x' into seeddms-5.1.x 2016-03-31 11:19:08 +02:00
Uwe Steinmann
5f54964d69 Merge branch 'seeddms-5.0.x' 2016-03-25 17:13:27 +01:00
Uwe Steinmann
267734e866 set missing variable from view 2016-03-24 15:59:24 +01:00
Uwe Steinmann
9fec5fd1c0 use right translation phrase 2016-03-24 15:57:10 +01:00
Uwe Steinmann
50490ce808 Merge branch 'seeddms-5.0.x' into develop 2016-03-24 15:48:53 +01:00
Uwe Steinmann
cc1c4081bc select user even in status S_LOG_ACCEPTED or S_LOG_REJECTED 2016-03-24 15:43:00 +01:00
Uwe Steinmann
ced19968aa output progressbar for receipt status 2016-03-24 15:42:18 +01:00
Uwe Steinmann
5a43b8f9f4 fix header 2016-03-24 15:41:54 +01:00
Uwe Steinmann
fe8e1d2b52 proper check of return value of setStatus() 2016-03-24 15:41:23 +01:00
Uwe Steinmann
f5db1b66cb setStatus will not fail if status is unchanged, finishRevision() will no longer set state waіting 2016-03-24 15:40:25 +01:00
Uwe Steinmann
50a39d439a revisors may not be set unless document is release or in revision 2016-03-23 17:56:34 +01:00
Uwe Steinmann
6deefda545 use $newdocstatus instead of $newStatus 2016-03-23 17:33:04 +01:00
Uwe Steinmann
3e05cfe24f fix call of SeedDMS_AccessOperation() 2016-03-23 16:54:25 +01:00
Uwe Steinmann
353be72dc9 pass $document to mayApprove() 2016-03-23 16:54:03 +01:00
Uwe Steinmann
50cfb869e2 pass $document to mayEditVersion() 2016-03-23 16:53:32 +01:00
Uwe Steinmann
a693233150 make mayEditVersion() work again 2016-03-23 16:53:01 +01:00
Uwe Steinmann
c7836aabfe check if $selrole is set 2016-03-23 16:27:56 +01:00
Uwe Steinmann
8d5e6d9d14 fix propper div wrapping 2016-03-23 15:47:53 +01:00
Uwe Steinmann
c947f92a73 check for guest based on role 2016-03-23 12:40:09 +01:00
Uwe Steinmann
8b1effc2f3 Merge branch 'seeddms-5.0.x' into develop 2016-03-23 12:36:47 +01:00
Uwe Steinmann
e72e7f3f15 Merge branch 'seeddms-5.0.x' into develop 2016-03-22 15:22:19 +01:00
Uwe Steinmann
3ed43f3f09 Merge branch 'seeddms-5.0.x' into develop 2016-03-21 08:34:20 +01:00
Uwe Steinmann
14b30ce48f do not call checkForm() if document wasn't modified 2016-03-21 07:46:55 +01:00
Uwe Steinmann
f2b091cb83 Merge branch 'seeddms-5.0.x' into develop 2016-03-21 07:41:30 +01:00
Uwe Steinmann
ba47fededd Merge branch 'seeddms-5.0.x' into develop 2016-03-21 06:43:17 +01:00
Uwe Steinmann
84e010bdf7 add missing contentEnd() 2016-03-21 06:42:27 +01:00
Uwe Steinmann
2fa5946bc5 fix syntax error 2016-03-21 06:40:40 +01:00
Uwe Steinmann
f2c239f67c place all javascript into function js() 2016-03-21 06:22:01 +01:00
Uwe Steinmann
59786c7bb0 add missing contendEnd() 2016-03-21 06:20:19 +01:00
Uwe Steinmann
1cd5622ca0 add missing space 2016-03-18 22:48:45 +01:00
Uwe Steinmann
b8fc40f60f fix access check 2016-03-18 22:48:13 +01:00
Uwe Steinmann
d8e0ba840d fix syntax error 2016-03-18 22:47:51 +01:00
Uwe Steinmann
66da520835 add removal of transmittal 2016-03-18 22:47:28 +01:00
Uwe Steinmann
19793e41b9 add remove() 2016-03-18 22:47:15 +01:00
Uwe Steinmann
00ed4c5743 Merge branch 'seeddms-5.0.x' into develop 2016-03-18 17:13:27 +01:00
Uwe Steinmann
c3f9abea0e Merge branch 'seeddms-5.0.x' into develop 2016-03-18 17:05:58 +01:00
Uwe Steinmann
4dcd92b528 convert to new method of view invocation 2016-03-18 16:52:04 +01:00
Uwe Steinmann
601f32fc00 Merge branch 'seeddms-5.0.x' into develop 2016-03-18 16:40:46 +01:00
Uwe Steinmann
a7a9bc72a2 get $libraryfolder from view in js() 2016-03-18 16:38:36 +01:00
Uwe Steinmann
4a85977874 separate js from html for document chooser 2016-03-18 16:25:07 +01:00
Uwe Steinmann
361b63256f Merge branch 'seeddms-5.0.x' into develop 2016-03-18 16:17:17 +01:00
Uwe Steinmann
7bd77ba43e Merge branch 'seeddms-5.0.x' into develop 2016-03-15 08:50:32 +01:00
Uwe Steinmann
c5435e0a27 add acl check 2016-03-15 06:22:48 +01:00
Uwe Steinmann
3f6420a6d4 Merge branch 'seeddms-5.0.x' into develop 2016-03-14 18:20:03 +01:00
Uwe Steinmann
d317388d18 Merge branch 'seeddms-5.0.x' into develop 2016-03-09 08:10:15 +01:00
Uwe Steinmann
5139efd4d7 Merge branch 'develop' into seeddms-5.1.x 2016-03-09 06:46:55 +01:00
Uwe Steinmann
f859b48a57 Merge branch 'seeddms-5.0.x' into develop 2016-03-09 06:42:30 +01:00
Uwe Steinmann
4e32ce086e Merge branch 'develop' into seeddms-5.1.x 2016-03-08 10:46:34 +01:00
Uwe Steinmann
aca3db06c2 Merge branch 'seeddms-5.0.x' into develop 2016-03-08 10:46:16 +01:00
Uwe Steinmann
4bd2a9f766 Merge branch 'seeddms-5.0.x' into develop 2016-03-08 07:00:09 +01:00
Uwe Steinmann
51d0078e26 Merge branch 'seeddms-5.0.x' into develop 2016-03-07 08:16:40 +01:00
Uwe Steinmann
1578b12cf9 add access check (still commented out) 2016-03-04 16:02:59 +01:00
Uwe Steinmann
64c0b37726 add access check 2016-03-04 16:02:03 +01:00
Uwe Steinmann
535012f844 add column with role 2016-03-04 16:01:40 +01:00
Uwe Steinmann
85ac4314f5 check if SeedDMS_Aco::getRoot() returns objects 2016-03-04 15:45:59 +01:00
Uwe Steinmann
1f9aa108a4 set parameter class 2016-03-04 15:45:28 +01:00
Uwe Steinmann
8e606dac8b order objects by alias 2016-03-04 15:45:10 +01:00
Uwe Steinmann
04eadaad67 add check_controller_access() 2016-03-04 15:44:11 +01:00
Uwe Steinmann
dcc3d9e74c take out debug output 2016-03-04 12:59:56 +01:00
Uwe Steinmann
4770608d8f include inc.ClassAccessOperation.php 2016-03-04 09:40:49 +01:00
Uwe Steinmann
82ac006a13 add many access checks before showing a link 2016-03-04 09:40:08 +01:00
Uwe Steinmann
06346b956c check access for action info 2016-03-04 09:39:22 +01:00
Uwe Steinmann
795f03f8b8 add column with role 2016-03-04 09:38:37 +01:00
Uwe Steinmann
304a5d804e use same user list as for Acl manager 2016-03-04 09:38:01 +01:00
Uwe Steinmann
1175f6f9c5 list all users with the selected role 2016-03-04 09:36:44 +01:00
Uwe Steinmann
e4bc8d2180 add advanced access check 2016-03-04 09:36:08 +01:00
Uwe Steinmann
a3df77e713 take out access check 2016-03-04 09:35:27 +01:00
Uwe Steinmann
0909d43bcf minor code cleanup 2016-03-04 09:34:47 +01:00
Uwe Steinmann
31017fee9d fix php error 2016-03-04 09:33:15 +01:00
Uwe Steinmann
6826e69795 add function for creating links, urls, and check access 2016-03-04 09:28:37 +01:00
Uwe Steinmann
bd3fbd5cf7 cache aro, first param of check_view_access() can be string, array, object 2016-03-04 09:27:29 +01:00
Uwe Steinmann
1fe2b3bdc2 some code clean up, change varialbe dms to _dms 2016-03-04 09:26:27 +01:00
Uwe Steinmann
f84c8eedd2 add parameter to turn off/on advanced acl 2016-03-04 09:25:18 +01:00
Uwe Steinmann
42e168a1fc pass object of role to constructor in getAllInstances() 2016-03-04 09:23:55 +01:00
Uwe Steinmann
51fa5d18e6 enhance AccessOperation by check_view_access()
all methods in SeedDMS_AccessOperation take the object to be checked
as the first parameter. Add new method check_view_access() which
checks if a view may be accessed based on the tables tblAros, tblAcos,
tblArosAcos
2016-03-03 07:39:04 +01:00
Uwe Steinmann
8985748f8a use new instanciation of view 2016-03-03 07:37:26 +01:00
Uwe Steinmann
e089cc898c add button for adding missing aro 2016-03-03 07:08:42 +01:00
Uwe Steinmann
c987412482 set propper messages, add missing commands 2016-03-03 07:06:10 +01:00
Uwe Steinmann
bae1386c58 add phrases for new access control 2016-03-03 07:05:09 +01:00
Uwe Steinmann
839ae0b1df many improvements 2016-03-03 07:04:36 +01:00
Uwe Steinmann
e6966ae841 controller for setting permissions 2016-02-29 16:32:32 +01:00
Uwe Steinmann
8f7a84e495 complete acos and aros 2016-02-29 16:24:55 +01:00
Uwe Steinmann
a8d615071e minor style changes, set propper url to modify permissions 2016-02-29 14:07:44 +01:00
Uwe Steinmann
b19f306bbf add more methods 2016-02-29 14:07:20 +01:00
Uwe Steinmann
677534c8ec add files for managing access control lists 2016-02-29 11:18:55 +01:00
Uwe Steinmann
ce57466695 Merge branch 'seeddms-5.0.x' into develop 2016-02-29 08:43:31 +01:00
Uwe Steinmann
a213a6a0cd various new methods 2016-02-29 08:31:19 +01:00
Uwe Steinmann
920d850915 set format of date fields 2016-02-27 08:44:20 +01:00
Uwe Steinmann
2a727b6204 Merge branch 'develop' into seeddms-5.1.x 2016-02-26 09:22:49 +01:00
Uwe Steinmann
5f610c4049 Merge branch 'seeddms-5.0.x' into develop 2016-02-26 09:22:25 +01:00
Uwe Steinmann
8d1dc66c59 Merge branch 'develop' into seeddms-5.1.x 2016-02-26 09:08:32 +01:00
Uwe Steinmann
206983cffd Merge branch 'seeddms-5.0.x' into develop 2016-02-26 09:08:17 +01:00
Uwe Steinmann
21c7068341 Merge branch 'seeddms-5.0.x' into develop 2016-02-25 10:57:27 +01:00
Uwe Steinmann
b3426ec6eb Merge branch 'develop' into seeddms-5.1.x 2016-02-25 10:43:51 +01:00
Uwe Steinmann
7099dc6d73 set $openfilterdlg before accordion for export 2016-02-25 10:43:14 +01:00
Uwe Steinmann
3b18b4398c fix name of view parameter previewwidthdetail 2016-02-25 10:33:41 +01:00
Uwe Steinmann
72ce140895 fix creation of aro 2016-02-25 10:16:40 +01:00
Uwe Steinmann
fcd4b23710 add button for role management 2016-02-24 14:58:27 +01:00
Uwe Steinmann
489f464163 add link to role management in menu 2016-02-24 14:44:58 +01:00
Uwe Steinmann
2721a43dde Merge branch 'develop' into seeddms-5.1.x 2016-02-24 14:43:10 +01:00
Uwe Steinmann
724dfd45e6 Merge branch 'seeddms-5.0.x' into develop 2016-02-24 14:40:41 +01:00
Uwe Steinmann
e759b44d37 include inc.ClassAcl.php 2016-02-24 14:38:28 +01:00
Uwe Steinmann
fb95d8f5ed add class to handle access controll 2016-02-24 14:37:49 +01:00
Uwe Steinmann
3d76792239 add management of roles 2016-02-24 14:36:59 +01:00
Uwe Steinmann
49be0485c5 role is now an instance of SeedDMD_Core_Role 2016-02-24 14:35:37 +01:00
Uwe Steinmann
ee7180ccd3 role is now an object of class SeedDMD_Core_Role 2016-02-24 14:34:58 +01:00
Uwe Steinmann
4c3e45ee02 add tables and updates for roles 2016-02-24 14:34:30 +01:00
Uwe Steinmann
480aca1c80 add roles 2016-02-24 14:32:55 +01:00
Uwe Steinmann
3dc3b6f0d2 Merge branch 'seeddms-5.0.x' 2016-02-22 15:20:24 +01:00
Uwe Steinmann
f41210f2d7 new version 5.1.0 2016-02-22 14:18:42 +01:00
Uwe Steinmann
91db603a89 next version will be 5.1.0 2016-02-22 14:03:23 +01:00
Uwe Steinmann
7b251fb419 Merge branch 'seeddms-5.0.x' into develop 2016-02-22 11:49:08 +01:00
Uwe Steinmann
0e5e09dbbf fix logout if not admin 2016-02-19 08:21:22 +01:00
Uwe Steinmann
d4e28ec735 get timeout from view 2016-02-19 08:04:45 +01:00
Uwe Steinmann
aa836a8954 fix syntax error 2016-02-18 20:35:56 +01:00
Uwe Steinmann
bd7868cfc7 Merge branch 'seeddms-5.0.x' into develop 2016-02-18 20:35:11 +01:00
Uwe Steinmann
314906adf3 fix document chooser 2016-02-17 11:56:00 +01:00
Uwe Steinmann
067890345e Merge branch 'seeddms-5.0.x' into develop 2016-02-17 11:44:25 +01:00
Uwe Steinmann
3907431369 split printFolderChooser() for library folder into js and html part 2016-02-17 11:35:42 +01:00
Uwe Steinmann
179af06438 split printFolderChooser() for home folder into js and html 2016-02-17 11:35:01 +01:00
Uwe Steinmann
ee613233db add missing arguments to printDocumentChooser() 2016-02-17 11:12:19 +01:00
Uwe Steinmann
01c03f33f9 Merge branch 'seeddms-5.0.x' into develop 2016-02-16 12:19:26 +01:00
Uwe Steinmann
bc608eff07 Merge branch 'seeddms-5.0.x' into develop 2016-02-15 20:45:05 +01:00
Uwe Steinmann
6c7648b75a use getDocumentList() instead of plain sql 2016-02-10 13:34:25 +01:00
Uwe Steinmann
db8b5cc033 add 'WorkflowOwner' list to getDocumentList() 2016-02-10 13:33:56 +01:00
Uwe Steinmann
d62d6f5662 do not use sql but call getDocumentList() 2016-02-10 12:31:17 +01:00
Uwe Steinmann
14f600da35 add 'WorkflowByMe' list in getDocumentList() 2016-02-10 12:30:51 +01:00
Uwe Steinmann
2a5a2cd61d Merge branch 'seeddms-5.0.x' into develop 2016-02-10 11:49:15 +01:00
Uwe Steinmann
2da2f0af9a Merge branch 'seeddms-5.0.x' into develop 2016-02-08 13:24:40 +01:00
Uwe Steinmann
3b8d7a5271 Merge branch 'seeddms-5.0.x' into develop 2016-02-04 19:22:59 +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
ad41fd2571 fix calling checkTasks() 2016-01-19 10:10:38 +01:00
Uwe Steinmann
f71ea7eddc do not add js function checkTasks() to footer anymore 2016-01-19 10:10:15 +01:00
Uwe Steinmann
860f9b0854 Merge branch 'seeddms-5.0.x' into develop 2016-01-18 13:29:06 +01:00
Uwe Steinmann
3bd4605c1f Merge branch 'seeddms-5.0.x' into develop 2016-01-18 12:17:35 +01:00
Uwe Steinmann
5863d962ac Merge branch 'seeddms-5.0.x' into develop 2015-12-16 09:30:16 +01:00
Uwe Steinmann
569fa62737 fix link to receipt or revise a document 2015-12-10 10:30:50 +01:00
Uwe Steinmann
65a1ba9102 fix links in task menu 2015-12-10 09:24:46 +01:00
Uwe Steinmann
9e09e5db5a Merge branch 'seeddms-5.0.x' into develop 2015-12-10 07:57:20 +01:00
Uwe Steinmann
6b95229ff7 Merge branch 'seeddms-5.0.x' into develop 2015-12-09 21:54:02 +01:00
Uwe Steinmann
6ae70ce7f6 use constant S_LOG_USER_REMOVE 2015-12-08 18:19:33 +01:00
Uwe Steinmann
4a5d084ddd remove old sql code, use constant S_LOG_USER_REMOVED 2015-12-08 18:16:25 +01:00
Uwe Steinmann
502e9b6271 remove old sql code, use constant S_LOG_USER_REMOVED 2015-12-08 18:15:44 +01:00
Uwe Steinmann
ffc709c557 set individual recipients from group 2015-12-08 09:00:42 +01:00
Uwe Steinmann
52b64822c5 show name of volume for checkout 2015-12-08 09:00:04 +01:00
Uwe Steinmann
20e7b873a5 get classname of SeedDMS Document from dms instance
don't use hard coded SeedDMS_Core_Document anymore
2015-12-04 08:34:32 +01:00
Uwe Steinmann
7d88617964 individual approver/reviewer can be take from group 2015-12-04 08:00:50 +01:00
Uwe Steinmann
574cc53075 Merge branch 'seeddms-5.0.x' into develop 2015-12-03 15:24:41 +01:00
Uwe Steinmann
3e4e27f236 Merge branch 'seeddms-5.0.x' into develop 2015-12-03 15:10:34 +01:00
Uwe Steinmann
f7b2d5b6d6 use the checkout space of the logged in user not the substituted user 2015-12-01 18:06:41 +01:00
Uwe Steinmann
eee4e2f0eb add getUser() 2015-12-01 18:06:15 +01:00
Uwe Steinmann
0fc1806ca4 do not include ../inc/inc.ClassEmail.php 2015-12-01 09:23:41 +01:00
Uwe Steinmann
5351bd9596 create checkout filename from id, version and name 2015-11-30 20:47:19 +01:00
Uwe Steinmann
348d40ad22 show filename as saved in database table 2015-11-30 20:47:07 +01:00
Uwe Steinmann
10cbf3b3b3 add pptx to getMimeType() 2015-11-30 20:46:55 +01:00
Uwe Steinmann
1f77a749be Merge branch 'seeddms-5.0.x' into develop 2015-11-27 16:09:11 +01:00
Uwe Steinmann
3d0e970760 Merge branch 'seeddms-5.0.x' into develop 2015-11-23 21:58:21 +01:00
Uwe Steinmann
a55662ea1b Merge branch 'seeddms-4.3.x' 2015-11-19 17:43:24 +01:00
Uwe Steinmann
d04e65108d Merge branch 'seeddms-5.0.x' into develop 2015-11-19 08:00:10 +01:00
Uwe Steinmann
f33f7ab41a Merge branch 'seeddms-5.0.x' into develop 2015-11-16 21:58:04 +01:00
Uwe Steinmann
c22b22f49a Merge branch 'seeddms-5.0.x' into develop 2015-11-15 17:36:45 +01:00
Uwe Steinmann
19c195a357 Merge branch 'seeddms-5.0.x' into develop 2015-11-11 06:52:36 +01:00
Uwe Steinmann
ecf8f311d9 set propper Content-Type 2015-11-05 13:43:49 +01:00
Uwe Steinmann
14d79338de Merge branch 'seeddms-5.0.x' into develop 2015-10-30 16:16:24 +01:00
Uwe Steinmann
5dc4bf258b Merge branch 'seeddms-5.0.x' into develop 2015-10-30 13:26:01 +01:00
Uwe Steinmann
a30b3b9505 Merge branch 'seeddms-5.0.x' into develop 2015-10-30 13:09:25 +01:00
Uwe Steinmann
f78e02e7e8 Merge branch 'seeddms-5.0.x' into develop 2015-10-27 11:43:40 +01:00
Uwe Steinmann
50ef190ae7 Merge branch 'seeddms-5.0.x' into develop 2015-10-27 09:03:45 +01:00
Uwe Steinmann
031129a31c Merge branch 'seeddms-5.0.x' into develop 2015-10-20 18:21:47 +02:00
Uwe Steinmann
dc66a5959d use converters 2015-09-30 13:22:25 +02:00
Uwe Steinmann
7ba956d760 Merge branch 'seeddms-5.0.x' into develop 2015-09-30 12:10:39 +02:00
Uwe Steinmann
15bedc303e Merge branch 'seeddms-5.0.x' into develop 2015-09-28 14:54:03 +02:00
Uwe Steinmann
8d35bb6a9b Merge branch 'seeddms-4.3.x' 2015-09-28 14:47:29 +02:00
Uwe Steinmann
ddfea8f3cb Merge branch 'seeddms-5.0.x' into develop 2015-09-28 12:35:18 +02:00
Uwe Steinmann
fd92628c30 Merge branch 'seeddms-5.0.x' into develop 2015-09-23 18:11:17 +02:00
Uwe Steinmann
37f9771b97 Merge branch 'seeddms-5.0.x' into develop 2015-09-23 17:21:26 +02:00
Uwe Steinmann
42b5162ca4 Merge branch 'seeddms-5.0.x' into develop 2015-09-23 14:43:13 +02:00
Uwe Steinmann
b0edf297a2 Merge branch 'seeddms-5.0.x' into develop 2015-09-22 16:01:09 +02:00
Uwe Steinmann
e8b99cea70 replace all CURRENT_TIMESTAMP by $db->getCurrentTimestamp() 2015-09-22 09:01:18 +02:00
Uwe Steinmann
fcbb5f68fe Merge branch 'seeddms-5.0.x' into develop 2015-09-22 08:51:59 +02:00
Uwe Steinmann
6be0d179fc Merge branch 'seeddms-5.0.x' into develop 2015-09-21 16:58:25 +02:00
Uwe Steinmann
d54172d366 Merge branch 'seeddms-5.0.x' into develop 2015-09-18 08:00:06 +02:00
Uwe Steinmann
ab35650f0b check if settings->_libraryFolder is set before using it 2015-09-16 11:25:59 +02:00
Uwe Steinmann
850bb05481 add superfluous code 2015-09-16 11:10:11 +02:00
Uwe Steinmann
7826d487cc Merge branch 'seeddms-4.3.x' 2015-08-25 21:31:53 +02:00
Uwe Steinmann
07053ca7e9 check for includecontent checkbox and pass it to url 2015-08-25 16:44:07 +02:00
Uwe Steinmann
022490e461 set propper content type for excel documents 2015-08-25 16:43:27 +02:00
Uwe Steinmann
397c5ee9d8 Merge branch 'seeddms-5.0.x' into develop 2015-08-25 14:58:49 +02:00
Uwe Steinmann
8c0377aa39 Merge branch 'seeddms-5.0.x' into develop 2015-08-21 11:10:23 +02:00
Uwe Steinmann
b7de0f61c7 Merge branch 'seeddms-5.0.x' into develop 2015-08-20 22:38:08 +02:00
Uwe Steinmann
e97de9c6df Merge branch 'seeddms-5.0.x' into develop 2015-08-19 20:16:40 +02:00
Uwe Steinmann
58413e5218 Merge branch 'seeddms-5.0.x' into develop 2015-08-19 09:24:20 +02:00
Uwe Steinmann
4c6eb18528 Merge branch 'seeddms-5.0.x' into develop 2015-08-19 06:09:20 +02:00
Uwe Steinmann
92c24739bf Merge branch 'seeddms-5.0.x' into develop 2015-08-18 16:22:23 +02:00
Uwe Steinmann
263d4b7caf fix input field name for new mimetype 2015-08-13 18:02:37 +02:00
Uwe Steinmann
9aa2637a71 user showTextField() 2015-08-13 18:00:48 +02:00
Uwe Steinmann
ad1d9f556f Merge branch 'seeddms-5.0.x' into develop 2015-08-13 17:56:15 +02:00
Uwe Steinmann
f53413006b Merge branch 'seeddms-5.0.x' into develop 2015-08-13 11:55:19 +02:00
Uwe Steinmann
de79e6c496 Merge branch 'seeddms-5.0.x' into develop 2015-08-13 09:53:53 +02:00
Uwe Steinmann
7e30ec4459 Merge branch 'seeddms-5.0.x' into develop 2015-08-13 08:18:57 +02:00
Uwe Steinmann
d8b42af4b1 Merge branch 'seeddms-5.0.x' into develop 2015-08-11 14:11:14 +02:00
Uwe Steinmann
aa49c5b0b1 Merge branch 'seeddms-5.0.x' into develop 2015-08-10 21:58:16 +02:00
Uwe Steinmann
1b0eb64698 Merge branch 'seeddms-5.0.x' into develop 2015-08-09 07:26:07 +02:00
Uwe Steinmann
3ef5dbd2ae use dumplog() from revisionlog and receiptlog 2015-08-09 07:24:42 +02:00
Uwe Steinmann
ec244587eb fix merge error 2015-08-09 07:19:53 +02:00
Uwe Steinmann
0ba67b2634 Merge branch 'seeddms-5.0.x' into develop 2015-08-09 07:19:27 +02:00
Uwe Steinmann
a20c6f23e2 Merge branch 'seeddms-5.0.x' into develop 2015-08-08 09:40:15 +02:00
Uwe Steinmann
1bc65c0eef add update script for 6.0.0 2015-08-07 20:09:45 +02:00
Uwe Steinmann
4c907dbf9e Merge branch 'seeddms-5.0.x' into develop 2015-08-07 20:08:29 +02:00
Uwe Steinmann
92f66f4b4a Merge branch 'seeddms-5.0.x' into develop 2015-08-07 13:37:30 +02:00
Uwe Steinmann
70e504ecef Merge branch 'seeddms-5.0.x' into develop 2015-08-07 13:20:10 +02:00
Uwe Steinmann
eeff55eb7d pass $dms to constructor of SeedDMS_AccessOperation 2015-08-07 13:15:13 +02:00
Uwe Steinmann
c4f7223293 Merge branch 'seeddms-5.0.x' into develop 2015-08-07 13:13:14 +02:00
Uwe Steinmann
e8456dec57 Merge branch 'seeddms-5.0.x' into develop 2015-08-07 07:51:15 +02:00
Uwe Steinmann
06c89b0cc5 add statistic for transmittals 2015-08-06 22:21:28 +02:00
Uwe Steinmann
cca8221f28 fix export of substitutes 2015-08-06 18:26:47 +02:00
Uwe Steinmann
c8d7bdca8b Merge branch 'seeddms-5.0.x' into develop 2015-08-06 18:22:24 +02:00
Uwe Steinmann
e1f8a1abbb export user substitutes 2015-08-06 17:55:42 +02:00
Uwe Steinmann
51a06c4ab6 Merge branch 'seeddms-5.0.x' into develop 2015-08-06 13:42:39 +02:00
Uwe Steinmann
16abca2913 Merge branch 'seeddms-5.0.x' into develop 2015-08-06 06:46:27 +02:00
Uwe Steinmann
6c74206544 add transmittals to $objmap 2015-08-06 06:25:06 +02:00
Uwe Steinmann
68a695d58c dump revision and receiption log 2015-08-06 06:24:37 +02:00
Uwe Steinmann
972b8972be Merge branch 'seeddms-5.0.x' into develop 2015-08-05 22:48:03 +02:00
Uwe Steinmann
ed32bcfb70 import transmittals 2015-08-05 22:46:30 +02:00
Uwe Steinmann
91086c594e export transmittals 2015-08-05 22:46:15 +02:00
Uwe Steinmann
215380b806 remove echo statement 2015-08-05 22:45:57 +02:00
Uwe Steinmann
170f70d005 Merge branch 'seeddms-5.0.x' into develop 2015-08-05 21:32:53 +02:00
Uwe Steinmann
55ccf3e987 Merge branch 'seeddms-5.0.x' into develop 2015-08-05 21:14:35 +02:00
Uwe Steinmann
0d4a2164f3 Merge branch 'seeddms-5.0.x' into develop 2015-08-05 18:20:43 +02:00
Uwe Steinmann
46bbf2234a tblDocumentCheckOuts is not created in version 5.0.x 2015-08-05 18:00:17 +02:00
Uwe Steinmann
3478d4e86c fix field name revisiondate in tblDocumentContent 2015-08-05 17:53:57 +02:00
Uwe Steinmann
c7f5f77925 sync with mysql statements, fix errors 2015-08-05 17:30:41 +02:00
Uwe Steinmann
8a3aebf3cc Merge branch 'seeddms-5.0.x' into develop 2015-08-05 17:02:13 +02:00
Uwe Steinmann
f1ed611aa9 Merge branch 'seeddms-5.0.x' into develop 2015-07-31 08:01:35 +02:00
Uwe Steinmann
7fcfe644da Merge branch 'seeddms-5.0.x' into develop 2015-07-30 21:08:50 +02:00
Uwe Steinmann
6c7ff86a09 Merge branch 'seeddms-5.0.x' into develop 2015-07-30 11:25:56 +02:00
Uwe Steinmann
3d4f64a4e6 dangling links not needed anymore 2015-07-28 15:20:35 +02:00
Uwe Steinmann
0c6515b4c7 Merge branch 'seeddms-5.0.x' into develop 2015-07-28 10:24:06 +02:00
Uwe Steinmann
de8726cccf Merge branch 'seeddms-5.0.x' into develop 2015-07-28 09:01:02 +02:00
Uwe Steinmann
0c48b342a5 dskspace() checks if directory could be opened 2015-07-28 07:50:37 +02:00
Uwe Steinmann
d653c516ea pass backup dir to view 2015-07-28 07:50:02 +02:00
Uwe Steinmann
30ccf4f8f6 use backup dir if set 2015-07-28 07:49:35 +02:00
Uwe Steinmann
c1b28071df addSepDir() doesn't add dir separator to empty string
also remove space from string
2015-07-28 07:32:29 +02:00
Uwe Steinmann
2bf7bd0a4e use backup dir if set 2015-07-28 07:30:24 +02:00
Uwe Steinmann
ff53a3e3e5 backup dir can be set 2015-07-28 07:29:08 +02:00
Uwe Steinmann
b520bfece0 add method addDirSep() 2015-07-28 07:28:34 +02:00
Uwe Steinmann
9a228017c1 take duplicate declaration of doNotCheckDBVersion 2015-07-28 06:45:43 +02:00
Uwe Steinmann
572927668a remove space in content type for excel sheet 2015-07-27 20:54:21 +02:00
Uwe Steinmann
5f8cc5f460 add class variable _doNotCheckDBVersion 2015-07-24 16:05:47 +02:00
Uwe Steinmann
43341c802f add keys settings_enableMenuTasks and settings_enableMenuTasks_desc 2015-07-22 09:19:55 +02:00
Uwe Steinmann
75fbf8d1f4 add keys settings_autoLoginUser and settings_autoLoginUser_desc 2015-07-22 09:13:06 +02:00
Uwe Steinmann
368ef8478c use view classes from extension only if enabled 2015-07-22 07:08:22 +02:00
Uwe Steinmann
8ed3264ae6 run hook folderNavigationMenu 2015-07-15 22:08:59 +02:00
Uwe Steinmann
a6d8ed829f add new parameter $base to htmlStartPage(), call hook for documentMenu propperly 2015-07-15 17:00:23 +02:00
Uwe Steinmann
4e9cadeca6 add new method getHookObjects() which returns all registered hook objects 2015-07-15 16:59:36 +02:00
Uwe Steinmann
ce79c8e8cd check for files relative to $settings->_rootDir instead of '../' 2015-07-15 16:58:53 +02:00
Uwe Steinmann
bd7a11f0b1 use configured classname in getInstance()
this will make sure that even getInstance in child classes defined
by an extension will return objects of the right class
2015-07-15 16:57:26 +02:00
Uwe Steinmann
889779113d first check if user is an object before using it 2015-07-14 21:35:53 +02:00
Uwe Steinmann
9604076555 printAttributeEditField() can be passed a default value
document menu can be extended by a hook
2015-07-14 21:27:41 +02:00
Uwe Steinmann
d09605c6b9 pass null to printAttributeEditField if attribute is not set 2015-07-14 21:26:40 +02:00
Uwe Steinmann
f187dff23a auto login user if not already logged in
the user won't have a session, but will be granted access for the
http request
2015-07-14 21:23:54 +02:00
Uwe Steinmann
a2179ca53e add new paramter autoLoginUser 2015-07-14 21:23:33 +02:00
Uwe Steinmann
d0760b2925 place comment in left column on previous versions tab 2015-07-14 10:08:04 +02:00
Uwe Steinmann
5a3dec7c2e some reorganization of docinfo tab
make some more room
2015-07-14 10:00:39 +02:00
Uwe Steinmann
e17bcc714a initialize all arrays for return value in menutasks 2015-07-10 10:51:56 +02:00
Uwe Steinmann
4f2392e492 set timeout for checkTask() function 2015-07-10 08:28:19 +02:00
Uwe Steinmann
a6541296a1 list documents to receipt and revise in menu task list 2015-07-09 18:29:34 +02:00
Uwe Steinmann
7a601a1cd0 checkTasks() also checks documents to receipt and revise 2015-07-09 18:29:08 +02:00
Uwe Steinmann
f25c090039 command mytasks also returns documents to receipt and revise 2015-07-09 18:28:08 +02:00
Uwe Steinmann
9bc675873d getDocumentList() returns only documents I haven't touched
The lists AppRevByMe, ReviseByMe and ReceiptByMe will only return
those documents in its initial review/approval/receipt/revision
status (0).
2015-07-09 18:25:55 +02:00
Uwe Steinmann
59fd3c7170 add missing space between tag attributes 2015-07-09 08:01:21 +02:00
Uwe Steinmann
4290e705cf add tasks to menu if configured 2015-07-09 07:59:54 +02:00
Uwe Steinmann
863d203133 add command 'mytasks' 2015-07-09 07:59:30 +02:00
Uwe Steinmann
f35573611d set param enablemenutasks for view 2015-07-09 07:59:02 +02:00
Uwe Steinmann
cd3a239482 add new config parameter enableMenuTasks 2015-07-09 07:58:34 +02:00
Uwe Steinmann
9682b02b8e define function which updates the tasks in the menu 2015-07-09 07:57:46 +02:00
Uwe Steinmann
bf95beb536 put tasks into submenus 2015-07-08 19:48:18 +02:00
Uwe Steinmann
ae288c83f2 add javascript for continuosily upating task list 2015-07-08 18:59:28 +02:00
Uwe Steinmann
a76e1de49e reorder lists 2015-07-08 18:59:14 +02:00
Uwe Steinmann
3583962085 new task menutask in op/op.Ajax.php which calls menuTask() 2015-07-08 18:58:38 +02:00
Uwe Steinmann
6b2f528624 getDocumentList(AppRev) returns only untouched documents 2015-07-08 18:57:53 +02:00
Uwe Steinmann
e4a568e6b9 various updates and new phrases 2015-07-08 18:53:07 +02:00
Uwe Steinmann
d146e04a13 some ul list for attributes of older versions 2015-07-08 15:37:37 +02:00
Uwe Steinmann
284f987783 build tbs_template extension 2015-07-08 15:36:05 +02:00
Uwe Steinmann
8e5daeb960 add item for 4.3.20 2015-07-08 07:26:26 +02:00
Uwe Steinmann
26982d1da0 show preview image in list 2015-07-08 07:26:16 +02:00
Uwe Steinmann
bab558cd5c add entry for 4.3.20
Conflicts:
	CHANGELOG
2015-07-08 06:55:27 +02:00
Uwe Steinmann
9ce168b4b6 list only documents to approve which have passed review
previously all documents that need to be approved some time were
listed. Even those documents which haven't passed review and cannot
be approved currently.
2015-07-08 06:54:45 +02:00
Uwe Steinmann
4ae913e307 make field for expired date larger 2015-07-06 22:18:11 +02:00
Uwe Steinmann
51cae12fab fix setting expire date (Closes: #225) 2015-07-06 22:18:06 +02:00
Uwe Steinmann
6b1124c23f pass folder object and not id to printDocumentChooser() 2015-07-06 16:09:25 +02:00
Uwe Steinmann
85174c6f45 create list of rejected documents 2015-07-03 20:52:55 +02:00
Uwe Steinmann
4ac3ea014c set heading to add_approval 2015-07-03 16:57:37 +02:00
Uwe Steinmann
f98aecaa59 add configuration parameter to turn of database version check 2015-06-30 07:53:36 +02:00
Uwe Steinmann
88739db6e7 check if SeedDMS_Core_DMS::inList() returns boolean false
inList() used to return true of false. It returns the index in the
array insteaf of true
2015-06-29 10:28:52 +02:00
Uwe Steinmann
f7d695c015 some initial code to recursively merge access list (not used yet) 2015-06-29 10:28:10 +02:00
Uwe Steinmann
3a531462d9 add static method mergeAccessLists() 2015-06-29 10:27:23 +02:00
Uwe Steinmann
ddbc3839a5 Merge branch 'seeddms-4.3.x' 2015-06-26 16:51:06 +02:00
Uwe Steinmann
ad1edc8281 actually use username from command line 2015-06-26 16:42:12 +02:00
Uwe Steinmann
5f46f97298 new option -c to force recreation of index 2015-06-26 16:22:35 +02:00
Uwe Steinmann
d070f6da85 use access operations to check if operation is allowed
before, this was some own code which did not same the same
check as maySetReviewerApprover()
2015-06-26 12:23:09 +02:00
Uwe Steinmann
401e995df6 removing a version will also remove all references
references in tblTransmittalItems, tblDocumentRevisions and
tblDocumentRecievers were not removed
2015-06-26 12:21:48 +02:00
Uwe Steinmann
370bef25ff some new keys
Conflicts:
	languages/de_DE/lang.inc
	languages/en_GB/lang.inc
2015-06-25 21:51:48 +02:00
Uwe Steinmann
2c63ab3caf add ukrainian 2015-06-25 21:51:17 +02:00
Uwe Steinmann
9841c571b6 new version 1.1.4 2015-06-25 19:54:44 +02:00
Uwe Steinmann
52559730d9 use new customizable preview converters 2015-06-25 19:52:02 +02:00
Uwe Steinmann
9269a74092 make preview converters customizalbe 2015-06-25 19:50:47 +02:00
Uwe Steinmann
5348905c23 check if content is still there when calculating size 2015-06-25 19:50:10 +02:00
Uwe Steinmann
6b816f4d44 better handling of converters, added converters for preview
commands can also be deleted
2015-06-24 21:25:53 +02:00
Uwe Steinmann
2feeb560d1 pass $settings->_initialDocumentStatus to addContent() 2015-06-24 21:25:24 +02:00
Uwe Steinmann
3c2980dfdf pass $settings->_initialDocumentStatus to checkIn() 2015-06-24 20:35:42 +02:00
Uwe Steinmann
871ed870cc add optional parameter $initstate to checkIn() 2015-06-24 20:34:40 +02:00
Uwe Steinmann
ac550a1ec1 ållow to set review/approver in status draft 2015-06-24 17:28:55 +02:00
Uwe Steinmann
7ed7ae01ca set width of column for preview image to width of preview 2015-06-24 17:28:17 +02:00
Uwe Steinmann
e158a873f5 add target apidoc 2015-06-24 12:41:55 +02:00
Uwe Steinmann
f78af97b4a check if library folder is readable, pass folder to view 2015-06-24 12:26:08 +02:00
Uwe Steinmann
7f2bb15d49 remove some superflous chars 2015-06-23 19:10:14 +02:00
Uwe Steinmann
6487db064a use same icons and output for version information
Conflicts:
	views/bootstrap/class.ViewDocument.php
2015-06-23 10:16:16 +02:00
Uwe Steinmann
fd55efb3b9 show review/approval protocol 2015-06-23 10:03:15 +02:00
Uwe Steinmann
88df1cee82 move printProtocol() into class.Bootstrap.php 2015-06-23 09:53:14 +02:00
Uwe Steinmann
7cc3a0cf86 put icon before link to change status 2015-06-23 08:01:55 +02:00
Uwe Steinmann
6fde8fe200 take out review and approval status
currently not needed
2015-06-23 08:01:52 +02:00
Uwe Steinmann
db3d563e3f do not use mimetype delivered by server if overrideMimeType is set 2015-06-23 07:47:03 +02:00
Uwe Steinmann
b95f7ed91a new parameter overrideMimeType 2015-06-23 07:47:00 +02:00
Uwe Steinmann
28c39791dc finfo returns only mimetype 2015-06-23 07:03:11 +02:00
Uwe Steinmann
905bc9c140 add optional parameter cleasAccessList()
will turn off removal of notification
2015-06-19 15:25:25 +02:00
Uwe Steinmann
9643c12429 log id and name of folder 2015-06-19 15:05:04 +02:00
Uwe Steinmann
75c8129185 add cleanNotifyList() which removes users/groups with read access
also adds an optional parameter $noclean to setDefaultAccess and
setInheritAccess which keeps the methods from cleaning up the
notifier list
2015-06-19 15:05:01 +02:00
Uwe Steinmann
ee8ad500ce setDefaultAccess() propperly removes notifier without read access 2015-06-19 12:55:57 +02:00
Uwe Steinmann
5a0a034be3 setDefaultAccess() cleanly removes als notifiers without read access
This failed because the first call of removeNotify() has invalidated
the list of notifiers
2015-06-19 12:54:49 +02:00
Uwe Steinmann
8ee6d74613 setDefaultAccess() cleanly removes als notifiers without read access
This failed because the first call of removeNotify() has invalidated
the list of notifiers
2015-06-19 12:54:43 +02:00
Uwe Steinmann
a0d0790a34 initialize return array 2015-06-18 17:36:47 +02:00
Uwe Steinmann
b96d75b97d check if expires and sequence is set 2015-06-18 17:32:24 +02:00
Uwe Steinmann
ab72bb9f8c check if keywords, name, comment was posted 2015-06-18 17:29:05 +02:00
Uwe Steinmann
e513731455 subfolders and documents can be order by date and direction can be set 2015-06-18 13:50:34 +02:00
Uwe Steinmann
3ed43b0a85 fix take over of reviewer/approver from previous version 2015-06-17 12:21:25 +02:00
Uwe Steinmann
42ce9fa21b add value to checkbox for exporting content 2015-06-17 11:32:46 +02:00
Uwe Steinmann
b981f87d38 add new phrases 2015-06-17 11:17:27 +02:00
Uwe Steinmann
dbf31053c9 put export button into arcodion 2015-06-17 08:35:10 +02:00
Uwe Steinmann
1a179c7dca check if includecontent is set
if not set only the excel file is delivered
2015-06-17 08:34:15 +02:00
Uwe Steinmann
5d5d954077 createToc() uses self::items, use counter for columns 2015-06-17 07:59:06 +02:00
Uwe Steinmann
5b03c3dcc3 show link to Indexer only if fulltext is enabled 2015-06-15 15:29:07 +02:00
Uwe Steinmann
9eb9114ece receipt protocol just contains last entry, propperly check for access on
receiping  a version
2015-06-15 14:15:04 +02:00
Uwe Steinmann
80a49262f4 propperly check for sufficient access rights 2015-06-15 14:14:31 +02:00
Uwe Steinmann
d12f9993dd add mayReceipt() 2015-06-15 14:13:38 +02:00
Uwe Steinmann
d8df113676 add class 'help' 2015-06-15 09:24:56 +02:00
Uwe Steinmann
e7ed3f7789 add optional parameter class to contentContainerStart() 2015-06-15 09:21:20 +02:00
Uwe Steinmann
67d10d10ae use access operation to check if document may be reviewed 2015-06-15 09:05:20 +02:00
Uwe Steinmann
03d8d6c247 mayApprove() checks if document is in review 2015-06-15 09:03:22 +02:00
Uwe Steinmann
15a708fbf2 use access operation to check if approval is allowed
Conflicts:
	op/op.ApproveDocument.php

Conflicts:
	op/op.ApproveDocument.php
2015-06-15 09:02:45 +02:00
Uwe Steinmann
ecafa39d1e mayApprove() checks if document is in review 2015-06-15 09:01:16 +02:00
Uwe Steinmann
da7c04d250 actually use uploaded file 2015-06-12 12:56:17 +02:00
Uwe Steinmann
34a7df9180 rename approveLogId to approveLogID
Conflicts:
	views/bootstrap/class.ViewDocument.php
2015-06-12 12:46:03 +02:00
Uwe Steinmann
42d822a48d output link to approval/review file 2015-06-12 11:23:44 +02:00
Uwe Steinmann
77794294b1 download review/approval files 2015-06-12 09:01:57 +02:00
Uwe Steinmann
b3c9cb2728 add function get_extension()
returns file extension by mimetype

Conflicts:
	inc/inc.Utils.php
2015-06-12 09:01:41 +02:00
Uwe Steinmann
fcddfb0162 allow to upload a file with each review/approval
Conflicts:
	op/op.ApproveDocument.php
	op/op.ReviewDocument.php
2015-06-11 21:37:41 +02:00
Uwe Steinmann
5bac2e9a4e manage file uploaded with review or approval 2015-06-11 21:32:45 +02:00
Uwe Steinmann
01ce03ca5c redirect relative to http_root 2015-06-11 14:10:12 +02:00
Uwe Steinmann
2fceade3a2 show docs in root folder of document chooser 2015-06-11 11:27:14 +02:00
Uwe Steinmann
5bc915f487 add directory for help files 2015-06-11 06:55:28 +02:00
Uwe Steinmann
0e8a385b6d allow context sensitive help files 2015-06-11 06:42:33 +02:00
Uwe Steinmann
2cd37d90b1 send end date to end of day 2015-06-10 19:14:28 +02:00
Uwe Steinmann
f2a7811f0c use SeedDMS_Core_DMS::getClassname() to check for propper class 2015-06-09 21:51:09 +02:00
Uwe Steinmann
4cc1704915 add table tblCachedAccess (not used) 2015-06-09 21:36:06 +02:00
Uwe Steinmann
6809645256 take out download of version info, take out next revision unless
document is released
2015-06-09 21:35:10 +02:00
Uwe Steinmann
0c053d410c put creation of excel file into its own method 2015-06-09 21:34:07 +02:00
Uwe Steinmann
6a7b9c8a65 mayRecipients() and mayRevision() return only true if document ist
released
2015-06-09 21:33:08 +02:00
Uwe Steinmann
394a23fa57 add download of documents 2015-06-09 21:31:13 +02:00
Uwe Steinmann
a178ab9bc0 add missing translations 2015-06-09 13:53:16 +02:00
Uwe Steinmann
d7f7a40f06 add phrases for initial document status and new document status 2015-06-09 13:50:00 +02:00
Uwe Steinmann
7791ae1b0d open the right tab when jumping to ViewDocument 2015-06-09 11:19:16 +02:00
Uwe Steinmann
82190c7d0e check for current tab 2015-06-09 09:00:22 +02:00
Uwe Steinmann
380ac2f1bd add currenttab to link when redirecting to out/out.ViewDocument.php 2015-06-09 08:59:25 +02:00
Uwe Steinmann
bd85c0c25a set missing parameter [url] in email notification 2015-06-09 07:16:34 +02:00
Uwe Steinmann
15bb6177d8 pass version to url checking for new versions 2015-06-09 07:03:03 +02:00
Uwe Steinmann
fb2e7dfe12 utf8_decode file name in zip file 2015-06-08 22:03:08 +02:00
Uwe Steinmann
20f28bb7df use /tmp for tempnam() 2015-06-08 22:00:27 +02:00
Uwe Steinmann
46dc4ea6e3 add code for downloading file into contoller 2015-06-08 21:59:56 +02:00
Uwe Steinmann
da0b3e71b3 approval can be added again 2015-06-08 21:58:17 +02:00
Uwe Steinmann
c2e2b1e9be take resultmode from view parameters 2015-06-08 09:10:34 +02:00
Uwe Steinmann
4b23765042 show button to approve document if status is null
was only shown if the status of the document was S_APP_DRAFT
2015-06-08 09:09:03 +02:00
Uwe Steinmann
f7c8d39b5d pass resultmode to view 2015-06-08 09:08:32 +02:00
Uwe Steinmann
94744862a5 create excel file with meta data for for files in zip archive 2015-06-08 09:06:59 +02:00
Uwe Steinmann
13a977f84f add export button if search returned documents 2015-06-02 17:29:33 +02:00
Uwe Steinmann
11bac92d2f if $_GE['export'] is set the search result will be downloaded as a
zipfile
2015-06-02 17:28:09 +02:00
Uwe Steinmann
a6085279c9 add class for downloading a bunch of document versions 2015-06-02 17:27:35 +02:00
Uwe Steinmann
dea874de02 set $_initialDocumentStatus to 2 instead of S_RELEASED
the constant S_RELEASED isn't know at that time
2015-06-02 17:26:41 +02:00
Uwe Steinmann
ec78639d94 do not hide review if workflow mode is traditional_only_approve
otherwise old documents which are still in review can't be reviewed
anymore
2015-06-02 10:18:37 +02:00
Uwe Steinmann
1123611371 rename mayOverwriteStatus() to mayOverrideStatus() 2015-06-02 10:04:35 +02:00
Uwe Steinmann
1bc5e6116c document status S_DRAFT can be set 2015-06-02 10:04:01 +02:00
Uwe Steinmann
5a29cde314 set initial document status 2015-06-02 10:03:34 +02:00
Uwe Steinmann
944b059abe set initial document status 2015-06-02 10:03:09 +02:00
Uwe Steinmann
d9d4d89a27 set initial document status 2015-06-02 10:02:46 +02:00
Uwe Steinmann
86f641c3b0 new status in getOverallStatusText() 2015-06-02 10:02:02 +02:00
Uwe Steinmann
3a99d005b1 new parameter initialstate for addDocument() 2015-06-02 10:01:08 +02:00
Uwe Steinmann
325b91933d new document status S_DRAFT, initial doc status can set 2015-06-02 10:00:15 +02:00
Uwe Steinmann
bd08e9b125 search for documents/folders only 2015-06-02 08:52:36 +02:00
Uwe Steinmann
9de1ff7cf4 add translations for search form 2015-06-02 08:52:03 +02:00
Uwe Steinmann
142af5c218 add several new phrases, some cleanup 2015-06-01 22:32:15 +02:00
Uwe Steinmann
596a577529 show link to revise document even if still in workflow 2015-06-01 17:35:25 +02:00
Uwe Steinmann
c460c9e674 pass content not document to hooks 2015-06-01 17:34:52 +02:00
Uwe Steinmann
312e619fa6 take out echo, remove $limit parameter from getStatus()
The $limit parameter has not been used and if if was used, the
method would have returned false in many cases because the number
records would have been > 1
2015-06-01 17:33:12 +02:00
Uwe Steinmann
45d3ebab3d place business login into controller class 2015-06-01 16:05:03 +02:00
Uwe Steinmann
34bd22f40e separate busines logic into controller 2015-06-01 14:01:56 +02:00
Uwe Steinmann
ed5a5bb069 fix typo in variable name 2015-06-01 14:01:23 +02:00
Uwe Steinmann
4e15fee3fb set url for notifaction mail 2015-06-01 14:01:02 +02:00
Uwe Steinmann
68e3045da2 make table condensed to save some space 2015-06-01 08:40:03 +02:00
Uwe Steinmann
87eb1e0dc9 turn off by default 2015-06-01 08:39:44 +02:00
Uwe Steinmann
175485284d take out old blue theme 2015-06-01 07:41:46 +02:00
Uwe Steinmann
c2e49aa2d7 take out old code 2015-06-01 07:40:02 +02:00
Uwe Steinmann
bcff843186 set comment in notification mail 2015-06-01 07:36:14 +02:00
Uwe Steinmann
5246c3a329 place code for updating document content into controller 2015-06-01 07:21:16 +02:00
Uwe Steinmann
19b9888d34 place business logic into controller 2015-06-01 07:16:21 +02:00
Uwe Steinmann
bcebca9c97 unset $this->_status in SeedDMS_Core_DocumentContent::setStatus() 2015-05-30 07:33:28 +02:00
Uwe Steinmann
570e0fa782 some code reorganisation 2015-05-30 07:32:36 +02:00
Uwe Steinmann
d5e9c7532a fix error in calling hook showDocumentContentAttribute, show if document was checked out 2015-05-29 20:48:27 +02:00
Uwe Steinmann
5c94655bd7 allow to show partial trees 2015-05-29 20:47:46 +02:00
Uwe Steinmann
c48030d54e add more parameter to printDocumentChooser() 2015-05-29 20:47:03 +02:00
Uwe Steinmann
13babfa3f9 add field for selecting a document from the library 2015-05-29 20:46:25 +02:00
Uwe Steinmann
ed1db45990 pass checkoutDir to view 2015-05-29 20:45:57 +02:00
Uwe Steinmann
4e6081bacc fix wrong access on $settings 2015-05-29 20:45:34 +02:00
Uwe Steinmann
062097a438 pass libraryfolder to view 2015-05-29 20:44:52 +02:00
Uwe Steinmann
220fa8a8fc split file into stub and controller 2015-05-29 20:44:16 +02:00
Uwe Steinmann
5b931afefb split AddDocument into stub and controller 2015-05-29 20:43:37 +02:00
Uwe Steinmann
6678928301 some spanish updates 2015-05-29 20:42:50 +02:00
Uwe Steinmann
b8d06babee add setting for library folder 2015-05-29 20:42:37 +02:00
Uwe Steinmann
38b7a7c660 callHook() returns null if no method was found 2015-05-29 20:41:52 +02:00
Uwe Steinmann
3bc72a46df do not include jquery-cookie/jquery.cookie.js
it's currently not needed and not available
2015-05-21 22:10:06 +02:00
Uwe Steinmann
e65c266831 add SeedDMS_Core_AddContentResultSet::setDMS(), fixed typo 2015-05-21 22:09:33 +02:00
Uwe Steinmann
5e846059f7 replace '/' by ', ' for better line break in header 2015-05-21 15:58:10 +02:00
Uwe Steinmann
f76536b0a4 set some new icons 2015-05-20 13:21:05 +02:00
Uwe Steinmann
536ead64ac allow to substitute user for regular users 2015-05-19 19:44:18 +02:00
Uwe Steinmann
6c1ac6f038 set width of .chzn-select-deselect to 95% 2015-05-19 19:43:57 +02:00
Uwe Steinmann
207f0b255f add method maySwitchToUser(), fix getReverseSubstitutes() 2015-05-19 19:42:29 +02:00
Uwe Steinmann
a80f4090af add filter for documents in revision 2015-05-19 19:41:40 +02:00
Uwe Steinmann
395f742bce various new phrases 2015-05-19 19:40:43 +02:00
Uwe Steinmann
20a695f571 minor html fixes 2015-05-19 13:26:10 +02:00
Uwe Steinmann
06c71cc332 add handling of substitutes 2015-05-19 08:06:24 +02:00
Uwe Steinmann
fedcdb1b99 add table for user substitutes and not yet implemented acls 2015-05-19 08:05:15 +02:00
Uwe Steinmann
d4652a614c add functions for handling substitutes 2015-05-19 08:03:12 +02:00
Uwe Steinmann
b374e8e962 fix output of message when item was deleted 2015-05-16 19:42:07 +02:00
Uwe Steinmann
277fe6d5ad lots of new phrases 2015-05-16 19:41:43 +02:00
Uwe Steinmann
54525d60ef make revsiondate default to NULL 2015-05-15 14:22:16 +02:00
Uwe Steinmann
ce572f82cb add option -u to set the user doing the upload (Bug #214) 2015-05-15 07:17:52 +02:00
Uwe Steinmann
eb7f3613ca add scripts for adding content to a transmittal 2015-05-13 18:43:28 +02:00
Uwe Steinmann
fe9229c8bc add link for addind content to transmittal 2015-05-13 18:42:03 +02:00
Uwe Steinmann
2d967f8741 replace # in table header 2015-05-13 18:41:27 +02:00
Uwe Steinmann
bdd75ecfee fix addContent() 2015-05-13 18:41:10 +02:00
Uwe Steinmann
37fe7925a4 add checking for duplicates 2015-05-13 17:37:53 +02:00
Uwe Steinmann
3aa22eccbd add icon from removing and updating transmittal item 2015-05-13 17:35:36 +02:00
Uwe Steinmann
6f3594d294 add cmd [remove|update]transmittalitem 2015-05-13 17:34:50 +02:00
Uwe Steinmann
d7232aa8cd fix key of phrase 2015-05-13 17:34:23 +02:00
Uwe Steinmann
359f030ddb make it work again with new language dirs 2015-05-13 17:32:44 +02:00
Uwe Steinmann
540b1ece0a add getSize(), updateContent() etc. 2015-05-13 17:32:10 +02:00
Uwe Steinmann
3efa77e78f add generic function for printing a workflow protocol 2015-05-12 19:14:25 +02:00
Uwe Steinmann
d446034193 nicer output of item list 2015-05-12 19:13:55 +02:00
Uwe Steinmann
20227a44a4 take out debug code 2015-05-12 19:13:34 +02:00
Uwe Steinmann
d538bde579 add more lists of documents 2015-05-12 19:13:08 +02:00
Uwe Steinmann
bc7407ad85 add transmittal mgr to user menu, some code cleanup 2015-05-12 19:12:22 +02:00
Uwe Steinmann
f083b6fd7a check for due revision workflow 2015-05-12 19:11:38 +02:00
Uwe Steinmann
4101a83639 better error checking 2015-05-12 19:11:17 +02:00
Uwe Steinmann
5296edb8d2 more updates and new phrases 2015-05-12 19:10:40 +02:00
Uwe Steinmann
6cfdea17b3 add function to return revision status 2015-05-12 19:10:02 +02:00
Uwe Steinmann
309be28256 add getUser() 2015-05-12 19:08:55 +02:00
Uwe Steinmann
448dc172d0 add functions to manage revising documents 2015-05-12 19:07:59 +02:00
Uwe Steinmann
a5d77d7cbb add more document lists 2015-05-12 19:07:26 +02:00
Uwe Steinmann
4c74bda247 add files to download content of transmittal 2015-05-12 19:06:23 +02:00
Uwe Steinmann
22c5470b9b add missing file to revise document 2015-05-12 19:05:47 +02:00
Uwe Steinmann
71da44c618 add missing files for revising documents 2015-05-12 19:05:02 +02:00
Uwe Steinmann
9859737668 fix typo in file 2015-05-11 09:32:10 +02:00
Uwe Steinmann
608a86d45c rename reviser to revisor, added revision workflow to document page 2015-05-11 09:30:13 +02:00
Uwe Steinmann
0fab2df676 many changes on revision workflow 2015-05-11 09:29:34 +02:00
Uwe Steinmann
7b41fa961c lots of key corrections 2015-05-11 09:29:00 +02:00
Uwe Steinmann
9955a0e07b rename tblDocumentRevisers to tblDocumentRevisors 2015-05-11 09:28:31 +02:00
Uwe Steinmann
cf2160993f correct wrong phrase if there are no group approvals/reviews 2015-05-08 08:32:47 +02:00
Uwe Steinmann
7d664ac105 correct wrong phrase if there are no group receipts 2015-05-08 08:30:35 +02:00
Uwe Steinmann
2ddd6aa468 various updates 2015-05-08 08:25:29 +02:00
Uwe Steinmann
ed0b1f28cb do not show items if no transmittal is selected 2015-05-08 08:23:33 +02:00
Uwe Steinmann
a6a335d481 add inc.ClassTransmittal.php 2015-05-08 07:55:07 +02:00
Uwe Steinmann
b2027eb2d7 pass on msg to setStatus() in verifyStatus() 2015-05-04 08:39:18 +02:00
Uwe Steinmann
af177f5249 include all needed files 2015-05-04 08:35:05 +02:00
Uwe Steinmann
6c35f106a4 add optional parameter $msg to
SeedDMS_Core_DocumentContent::verifyStatus()

set when method is called in removeWorkflow
2015-05-04 08:29:16 +02:00
Uwe Steinmann
9b643fa700 check for extension dir before reading contents 2015-05-04 07:15:00 +02:00
Uwe Steinmann
a5c27190c1 no need to pass document status to addWorkflowAction() 2015-05-04 07:02:51 +02:00
Uwe Steinmann
b872318350 output list of documents receipt by me 2015-05-04 06:12:30 +02:00
Uwe Steinmann
a16a57a1f9 new documentList for 'ReceiptByMe' 2015-05-04 06:11:35 +02:00
Uwe Steinmann
3d10f91026 use FILEINFO_MIME_TYPE instead of FILEINFO_MIME (Closes Bug #209) 2015-05-02 08:35:26 +02:00
Uwe Steinmann
fa43001824 use propper name of converters array in settings 2015-05-02 08:05:51 +02:00
Uwe Steinmann
f32dbe5ef8 escape html code before output 2015-04-30 14:05:28 +02:00
Uwe Steinmann
47d97e77d8 add files for transmittal management and receptions 2015-04-30 07:09:21 +02:00
Uwe Steinmann
eefc346312 include correct files in right direction 2015-04-29 20:08:10 +02:00
Uwe Steinmann
31ebf1807f various new phrases 2015-04-28 14:29:25 +02:00
Uwe Steinmann
b4e8c39158 add tab for document reception 2015-04-28 12:18:35 +02:00
Uwe Steinmann
2a1ce40a9c add functions getReceiptStatusText() and printReceiptStatusText() 2015-04-28 12:18:01 +02:00
Uwe Steinmann
2d5827a1b9 add notes for 4.3.17
Conflicts:
	CHANGELOG
2015-04-27 21:33:07 +02:00
Uwe Steinmann
c3d9efc691 fix calculated used disk space in percent 2015-04-27 21:29:35 +02:00
Uwe Steinmann
304e54f009 list only users in select box which are not hidden 2015-04-27 21:29:35 +02:00
Uwe Steinmann
4e682ecbe2 add more hooks for showing/editing attributes 2015-04-27 08:27:19 +02:00
Uwe Steinmann
877f937413 return value of hook will be passed on even if not a string 2015-04-27 08:26:51 +02:00
Uwe Steinmann
962e0f8523 include Core/inc.ClassTransmittal.php 2015-04-27 08:24:59 +02:00
Uwe Steinmann
01b55843d2 add class for handling transmittals 2015-04-27 08:24:26 +02:00
Uwe Steinmann
7338ddaadd fix typo in comment 2015-04-27 08:17:27 +02:00
Uwe Steinmann
d04786884b add tables for tranmittals 2015-04-27 08:16:50 +02:00
Uwe Steinmann
654d8ac75a add parameter $version to documentListRow()
in order to show a specific version
2015-04-25 20:49:47 +02:00
Uwe Steinmann
3d3025c2cd no need to create temp table ttstatid anymore 2015-04-25 20:49:13 +02:00
Uwe Steinmann
0b57325c04 fix take over of approvers/reviewers from previous version 2015-04-23 17:12:57 +02:00
Uwe Steinmann
91f7d8dfc3 show warning if document is checked out 2015-04-23 16:45:19 +02:00
Uwe Steinmann
5952d49711 add list of documents check out by me 2015-04-23 16:44:55 +02:00
Uwe Steinmann
0bac3deabb show message and hide form if document cannot be checked in 2015-04-23 16:44:16 +02:00
Uwe Steinmann
4b6eeba319 add list of documents checked out by me in getDocumentList() 2015-04-23 16:43:19 +02:00
Uwe Steinmann
c0ba8a6711 create checkout dir if required and allowed in the settings 2015-04-23 11:49:05 +02:00
Uwe Steinmann
8b065cf7ac propperly clean checked out file in possible cases
previously the checked out file was not remove from the checkout area
if it was unchanged and checked in
2015-04-23 11:48:01 +02:00
Uwe Steinmann
505763e0be use new SeedDMS_Core_DMS::getDocumentList() method 2015-04-23 11:26:25 +02:00
Uwe Steinmann
1afd3102ab fix parameter definition in comment 2015-04-23 11:26:00 +02:00
Uwe Steinmann
107f96e921 add method getDocumentList()
it returns a list of database records with all the information
currently needed on the MyDocuments page.
2015-04-23 11:24:42 +02:00
Uwe Steinmann
61294336b5 add missing files for listing of documents need to be watch at 2015-04-22 17:24:58 +02:00
Uwe Steinmann
08e768fc52 add missing files for document check out/іn 2015-04-22 17:23:54 +02:00
Uwe Steinmann
87b3c37cb0 use $_REQUEST instead of $_GET when getting currenttab 2015-04-22 17:22:30 +02:00
Uwe Steinmann
4f3c6ed090 add checkbox for creating checkout dir if it doesn't exists 2015-04-22 17:21:57 +02:00
Uwe Steinmann
d7d4ab6390 use classnames in SeedDMS_Core_DMS when instanciating, new method
getDocumentCheckOuts()
2015-04-22 17:20:57 +02:00
Uwe Steinmann
12b0eadc66 use classnames in SeedDMS_Core_DMS when instanciating users 2015-04-22 17:19:53 +02:00
Uwe Steinmann
5702708643 add link to out/out.ReceiptSummary.php in MyDocuments menu 2015-04-22 14:57:36 +02:00
Uwe Steinmann
1ab9fdb229 add field startdate to talbe tblDocumentRevisers 2015-04-22 14:57:07 +02:00
Uwe Steinmann
9c64566386 even more phrases 2015-04-22 13:46:33 +02:00
Uwe Steinmann
4a413cf72b add some more missing phrases 2015-04-22 13:42:05 +02:00
Uwe Steinmann
69e56a5087 various small updates 2015-04-22 13:38:23 +02:00
Uwe Steinmann
2d3277a7ea add link to out/out.SetRevisers.php 2015-04-22 11:42:20 +02:00
Uwe Steinmann
df75ae5c8c add method maySetReviser 2015-04-22 11:41:39 +02:00
Uwe Steinmann
0addaf56d3 add missing files for revision workflow and document reception 2015-04-22 10:33:49 +02:00
Uwe Steinmann
040839714d init datepicker for #revisionstartdate 2015-04-22 10:32:25 +02:00
Uwe Steinmann
ebdfc45b69 add tables for revision workflow 2015-04-22 10:31:56 +02:00
Uwe Steinmann
a590fec967 add revision workflow 2015-04-22 10:31:36 +02:00
Uwe Steinmann
68be1ad42e fix lots of error for managing receiveLog 2015-04-20 18:33:42 +02:00
Uwe Steinmann
ca9715c3bc various error fixes in sql statements for ReceiptLog 2015-04-20 18:32:56 +02:00
Uwe Steinmann
a3b6ed8fb3 add method getReceiptStatus 2015-04-20 18:32:11 +02:00
Uwe Steinmann
4bd0e3efe0 show link to out/out.SetRecipients.php if allowed 2015-04-20 13:46:59 +02:00
Uwe Steinmann
274c020148 add table for acknowledge workflow 2015-04-20 13:46:26 +02:00
Uwe Steinmann
387f67dad4 enable/disable Acknowledge and Revision workflow 2015-04-20 13:44:45 +02:00
Uwe Steinmann
ff9b3486c5 add maySetRecipients() 2015-04-20 13:44:13 +02:00
Uwe Steinmann
8824aa4624 add administration of recipients of documents 2015-04-20 13:43:40 +02:00
Uwe Steinmann
03bfa5f972 get read access list for document not folder 2015-04-20 13:42:38 +02:00
Uwe Steinmann
0e1571c6c8 check if version modification is allowed 2015-04-20 13:41:35 +02:00
Uwe Steinmann
4e5bf5912f set proper msg when approver was deleted or already assigned 2015-04-20 13:40:10 +02:00
Uwe Steinmann
90cbbe7d3c some new phrases 2015-04-17 20:13:34 +02:00
Uwe Steinmann
e00f440717 set checkout dir 2015-04-17 20:12:29 +02:00
Uwe Steinmann
696b5f0996 add checkout item to document menu 2015-04-17 20:11:51 +02:00
Uwe Steinmann
bcb34f1e51 set parameter checkoutdir in view 2015-04-17 20:11:09 +02:00
Uwe Steinmann
dc08f8df1b add configuration of checkout dir 2015-04-17 20:10:36 +02:00
Uwe Steinmann
a796c85e01 add validation of attributes 2015-04-17 20:09:20 +02:00
Uwe Steinmann
3dae5ec57a add all methods to handle document checkout and checkin 2015-04-17 20:08:06 +02:00
Uwe Steinmann
7bc0b8947f add sql statements to setOwner() for moving locks and checkouts
still commented out, but the idea is, that the user of a lock and checkout
of a document should also be changed if the document owner changes
2015-04-17 20:05:34 +02:00
Uwe Steinmann
2d7e511bb8 add table tblDocumentCheckOuts 2015-04-17 19:50:55 +02:00
479 changed files with 31687 additions and 47625 deletions

View File

@ -6,6 +6,7 @@ Header set X-Content-Type-Options: "nosniff"
</IfModule>
RewriteEngine On
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]
@ -32,7 +33,7 @@ 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) - [F]
RewriteRule !^ext/[^/]+/res/.*\.(?:css|js|png|gif|svg|ico|html|woff|ttf) - [F]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ext/.*$ - [L]

450
CHANGELOG
View File

@ -1,3 +1,453 @@
--------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------
- merge changes up to 5.1.22
- add a new task for checking the checksum of all document versions
- add searching for revision date
- list of open tasks will no longer contain expired documents but MyDocuments
page still list them
- fixed downloading approval file (Closes: #503)
- regular users can no longer set owner of document while uploading
--------------------------------------------------------------------------------
Changes in version 6.0.14
--------------------------------------------------------------------------------
- show debug menu only if debug mode is on
- merge changes up to 5.1.21
- document links can be added by regular users again
- add list of checked out documents to tasks
- issue a warning when removing a document which is checked out
- checked out can be discarded if it was changed
--------------------------------------------------------------------------------
Changes in version 6.0.13
--------------------------------------------------------------------------------
- merge changes up to 5.1.20
- create download file for transmittal in system tmp (Closes: #478)
- sync source code of checkin with update document
--------------------------------------------------------------------------------
Changes in version 6.0.12
--------------------------------------------------------------------------------
- merge changes up to 5.1.19
- fix various errors concerning workflows
- show menu tasks even if not admin (Closes: #485)
--------------------------------------------------------------------------------
Changes in version 6.0.11
--------------------------------------------------------------------------------
- merge changes up to 5.1.18
- fix access restriction for roles (content of documents was visible even if the
role and status didn't allow it)
- fix missing Content-Type in UserList (Closes: #480)
--------------------------------------------------------------------------------
Changes in version 6.0.10
--------------------------------------------------------------------------------
- merge changes up to 5.1.17
- fix list of previous document versions (Closes: #471)
- fix uploading files with fine uploader (Closes: #472)
- clear revision date when all revisors have been deleted
- improve scheduler task management, tasks can be deleted, fix setting parameters
- add op.Cron.php for running all scheduled tasks
--------------------------------------------------------------------------------
Changes in version 6.0.9
--------------------------------------------------------------------------------
- merge changes up to 5.1.16
- fix removal of roles (Closes: #465)
- fix password forgotten process
- fix setting role of new user and retrieving role of existing user
- processes of users can be deleted again, instead of only transfered to
another user
- fix export of search results, headers of excel file can be translated
- fix arcordeon for folder filters on search page
- fix upload from dropfolder
- fix adding new calendar event
--------------------------------------------------------------------------------
Changes in version 6.0.8
--------------------------------------------------------------------------------
- merge changes up to 5.1.15
- fix syntax error in op/op.EditComment.php
- fix use of private variable in op/op.SetRecipients.php and op/op.SetRevisors.php
- fix triggering a transition in advanced workflow mode
--------------------------------------------------------------------------------
Changes in version 6.0.7
--------------------------------------------------------------------------------
- fix editing of document attachments
- make receipt summary look like approval/review summary
- merge changes up to 5.1.14
- do not show the updating user in a revision workflow if the status is 0
this is misleading because the user starting the revision workflow is the one
first accessing the document
- rejection of document receipts are turned off by default, but can be turned
on in the settings
- documents in DocumentChooser are sorted by name
- instead of just removing a user from all processes it can be replaced by a new user
--------------------------------------------------------------------------------
Changes in version 6.0.6
--------------------------------------------------------------------------------
- fix setting attributes when checking in a new document version
- setting a document revision to 'needs correction' will no longer set the
documents status to 'needѕ correction' if this was turned off in the settings
- a document will not leave draft status when setting the approver/reviewer
without setting a reviewer/approver
- tasks to be counted in menu can be configured
- add number of documents which need correction to menu
- minor 2 factor auth. fixes when initially setting the secret
- remove ѕome unneeded code from AddDocument which just caused php warnings
- do not set the uploader of new documents to owner if the owner is different from
the uploader
- add scheduler
- add hook showVersionComment in out.ViewDocument.php
- Various minor corrections of database tables tblWorkflowLog and
tblWorkflowDocumentContent
- merge changes up to 5.1.7
--------------------------------------------------------------------------------
Changes in version 6.0.5
--------------------------------------------------------------------------------
- sync form for updating document by upload and checkin
- add list of documents which need correction on MyDocuments page
--------------------------------------------------------------------------------
Changes in version 6.0.4
--------------------------------------------------------------------------------
- merge changes up to 5.1.5
--------------------------------------------------------------------------------
Changes in version 6.0.3
--------------------------------------------------------------------------------
- add list of documents without a receiver on MyDocuments page
- propperly calculate number of documents for each value of value set in attribute mgr
- output of progress bar for reception of a document can be controlled by access list
- recipientof a document version can be set when uploading the file
- fix export of search and display of 2nd, 3rd, ... search page
- speed up creation of document lists if reception progress bar is shown
- status of rejected documents can be overriden
- do not add users from group as recipients if they are the uploader or reviewer
of a document
- add list of documents without a receiver, list of drafts, and list of absolete
documents on MyDocuments page
- add callback onCheckAccessDocument to SeedDMS_Core_Document
- add new document status 'needs correction', revised documents which do not pass
will no longer be in status 'rejected' but 'needs correction'
- better error handling when indexing documents fails
- apache xsendfile module is used for downloading documents when installed
- add view access check for ApprovalSummary, ReviewSummary, ReceiptSummary,
WorkflowSummary, DocumentAccess, GroupView, UsrView, WorkflowSummary
- filter out reviewers and uploader of a document version when setting recipients
by user group
--------------------------------------------------------------------------------
Changes in version 6.0.2
--------------------------------------------------------------------------------
- check if user has access on document and is not disabled if set as
receiver, revisor
- check if group has members if set as reviewer, approver, receiver, revisor
- fix bug in notification of approver after successful review
- add document check for docs in revision and missing access rights of revisor
- add document check for docs requiring receptions but user lacks access right
- fix Acl manager when using pgsql
- list all open tasks of user in user info of user manager
- owner of document may see review/approval/receipt/revision log
- fix sending mails to reviewer/approvers after check in
- downloading of review/approval files works again
- optimizing retrieval of open tasks
- do not show user which has been removed from a process except for admins
- show scheduled revisions in calendar
- merge changes up to 5.1.5
--------------------------------------------------------------------------------
Changes in version 6.0.1
--------------------------------------------------------------------------------
- call hook 'rawcontent' when downloading transmittal list or search content
- speed up list of locked documents on MyDocuments page
- sql queries and execution times can be written to file in database layer
--------------------------------------------------------------------------------
Changes in version 6.0.0
--------------------------------------------------------------------------------
- merge changes up to 5.0.10
- filter documents by status 'draft' on search page
- list of documents to look at now contains documents in revision
- add list of documents waiting for reception on MyDocuments page
- group document lists on MyDocuments page into three sections
- show progressbar and comments for reception of document in documentlist
- restructure page for document/folder check, add check for missing access
on documents by recipient or revisor
- overhaul revision workflow, add hook after revision workflow was finished
- add two factor authentication based on google authenticator
- set timeout for ajax call 'mytasks' from 200ms to 1000ms
- use a similar layout for document list on the ViewDocument page
- add RSS feed of timeline
- put more operations under access control
- add receipent list for documents
- add revision of documents
- add substitute user command for regular users
- add access controll list for many functions
- 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
--------------------------------------------------------------------------------

View File

@ -74,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: [
@ -206,6 +213,14 @@ module.exports = function (grunt) {
],
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,639 +0,0 @@
5.1.29 (2022-11-21)
---------------------
- SeedDMS_Core_Folder::addDocument() does rollback transaction propperly when setting document categories fail
- add $skiproot and $sep parameter to SeedDMS_Core_Folder::getFolderPathPlain()
- add class name for 'documentfile'
- add method SeedDMS_Core_KeywordCategory::countKeywordLists()
5.1.28 (2022-11-07)
---------------------
- fix SeedDMS_Core_User::getDocumentContents()
- fix SeedDMS_Core_File::fileExtension()
- SeedDMS_Core_DMS::createPasswordRequest() creates a cryptographically secure hash
- fix sql error when deleting a folder attribute
- add SeedDMS_Core_Attribute::getParsedValue() and use it in SeedDMS_Core_Object::getAttributeValue()
- add SeedDMS_Core_DMS::getDuplicateSequenceNo() and SeedDMS_Core_Folder::reorderDocuments()
- add SeedDMS_Core_File::mimetype(), fix SeedDMS_Core_File::moveDir()
- all file operations use methods of SeedDMS_Core_File
- change namespace of iterators from SeedDMS to SeedDMS\Core
5.1.27 (2022-08-31)
---------------------
- fix SeedDMS_Core_DMS::addAttributeDefinition() when objtype is 0
- sort search result even if sortorder is 'i' or 'n'
- pass an array as an attribute to search() will OR each element
5.1.26 (2022-05-20)
---------------------
- fix validating multi value attributes
- SeedDMS_Core_User::removeFromProcesses() can be limited to a list of documents. In that case only the last version will be modified.
- add more types to getStatisticalData()
- add optional parameter $op to SeedDMS_Core_AttributeDefinition::getObjects()
- SeedDMS_Core_AttributeDefinition::getObjects() will not filter by value if null is passed
- SeedDMS_Core_DMS::getAllAttributeDefinitions() has second parameter to filter attributes by type
5.1.25 (2022-04-22)
---------------------
- rename getLastWorkflowTransition() to getLastWorkflowLog()
- getLastWorkflowLog() returns a workflow entry even if the workflow has ended
- backport setFileType() from 6.0.x
- add SeedDMS_Core_File::fileExtension()
- add callbacks on onPostUpdateAttribute, onPostRemoveAttribute, onPostAddAttribute
- fix searching for document content with a custom attribute having a value set
5.1.24 (2021-12-11)
---------------------
- in SeedDMS_Core_DocumentContent::removeWorkflow() remove records from tblWorklflowLog before tblDWorkflowDocumentContent
- make all class variables of SeedDMS_Core_User protected
- fix various errors in SeedDMS_Core_AttributeDefinition::validate()
- add lots of unit tests
- replace incorrect use of array_search() by in_array()
- move method SeedDMS_Core_DMS::createDump() into SeedDMS_Core_DatabaseAccess
- lots of parameter checking when calling methods()
- make sure callbacks are callable
- SeedDMS_Core_Folder::getParent() returns null if there is no parent (used to be false)
- SeedDMS_Core_DMS::search() will not find document without an expiration date anymore, if the search is limited by an expiration end date but no start date
- add method SeedDMS_Core_Folder::getFoldersMinMax()
- init internal cache variables of SeedDMS_Core_Folder/SeedDMS_Core_Document and add method clearCache()
- SeedDMS_Core_Folder::hasDocuments() does not use the interal document cache anymore
- SeedDMS_Core_Document::addDocumentLink() returns an object of type SeedDMS_Core_DocumentLink in case of success
- trim email, comment, language, theme when setting data of user
- more checks whether an id > 0 when getting a database record
5.1.23 (2021-08-19)
---------------------
- SeedDMS_Core_DMS::getTimeline() uses status log instead of document content
- add methods SeedDMS_Core_DocumentContent::getReviewers() and SeedDMS_Core_DocumentContent::getApprovers()
- add methods SeedDMS_Core_DocumentContent::getApproveLog() and SeedDMS_Core_DocumentContent::getReviewLog()
- better handling of document with an empty workflow state
- fix checking of email addresses by using filter_var instead of regex
- add new method SeedDMS_Core_Document::hasCategory()
- add new method SeedDMS_Core_DocumentContent::removeReview()
- add new method SeedDMS_Core_DocumentContent::removeApproval()
- add new method SeedDMS_Core_User::getFolders()
- add new method SeedDMS_Core_User::getDocumentContents()
- add new method SeedDMS_Core_User::getDocumentFiles()
- add new method SeedDMS_Core_User::getDocumentLinks()
- add new type 'foldersperuser' to method SeedDMS_Core_DMS::getStatisticalData()
5.1.22 (2021-03-15)
---------------------
- add SeedDMS_Core_DatabaseAccess::hasTable()
- add SeedDMS_Core_User->isType() and SeedDMS_Core_Group->isType()
- add SeedDMS_Core_User->getDMS() and SeedDMS_Core_Group->getDMS()
- add new parameter to SeedDMS_Core_DMS->getDocumentList() for skipping expired documents
- add parameter $incdisabled to SeedDMS_Core_Folder::getNotifyList()
- do not validate value in SeedDMS_Core_Attribute::setValue(), it should have been done before
- SeedDMS_Core_DMS::search() can search for last date of document status change
- smarter caching in SeedDMS_Core_Document::getDocumentFiles() which fixes a potential
problem when removing a document
5.1.21 (2020-09-29)
---------------------
- SeedDMS_Folder_DMS::getAccessList() and getDefaultAccess() do not return fals anymore if the parent does not exists. They just stop inheritance.
- pass attribute value to callback 'onAttributeValidate'
- new paramter 'new' of methode SeedDMЅ_Core_AttributeDefinition::validate()
- check if folder/document is below rootDir can be turned on (default off)
- SeedDMS_Core_User::setHomeFolder() can be used to unset the home folder
- check if attribute definition exists when setting attributes of folders and documents
5.1.20 (2020-09-29)
---------------------
- SeedDMS_Core_DMS::getDocumentList() returns false, if an unknown list is passed
- SeedDMS_Core_Document::getDocumentFiles() has new parameter to select only those files attached to a specific version of the document
- removing a document version will not remove attachments of the document anymore
- set dms of new user instances in SeedDMS_Core_Group
5.1.19 (2020-07-30)
---------------------
- add method SeedDMS_Core_Document::setParent() as an alias for setFolder()
- clear the save content list and latest content in SeedDMS_Core_Document after
a version has been deleted.
- new method SeedDMS_Core_Document::isLatestVersion()
- add new attribute types 'document', 'folder', 'user', 'group'
5.1.18 (2020-05-28)
---------------------
- fixed remaining todos
- fixed parsing of file size in SeedDMS_Core_File::parse_filesize()
- fix SeedDMS_Core_DMS::getDocumentByOriginalFilename()
5.1.17 (2020-05-22)
---------------------
- add new callback onSetStatus
- fix SeedDMS_Core_DMS::getExpiredDocuments(), sql statement failed because temp. tables were not created
- add parameters $orderdir, $orderby, $update to SeedDMS_Core::getExpiredDocuments()
5.1.16 (2020-04-14)
---------------------
- fix call of hooks in SeedDMS_Core
- add variable lasterror in SeedDMS_Core_DMS which can be set by hooks to pass an
error msg to the calling application
- better error checking in SeedDMS_Core_Document::addDocumentFile()
5.1.15 (2020-03-02)
---------------------
- no changes, just keep same version as seeddms application
5.1.14 (2020-02-17)
---------------------
- speed up SeedDMS_Core_Folder::getSubFolders() SeedDMS_Core_Folder::getDocuments() by minimizing the number of sql queries.
5.1.13 (2019-09-06)
---------------------
- add decorators
- add new methods SeedDMS_Core_Document::isType(), SeedDMS_Core_Folder::isType(), SeedDMS_Core_DocumentContent::isType(). Use them instead of checking the class name.
- skip a fileType with just a '.'
5.1.12 (2019-07-01)
---------------------
- parameter $orderby passed to SeedDMS_Core_Folder::getDocuments() and SeedDMS_Core_Folder::getSubFolders() can be a string, but only the first char is evaluated
- SeedDMS_Core_DMS::search() excepts parameters as array, added orderby
- add SeedDMS_Core_Folder::hasSubFolderByName()
- fix SeedDMS_Core_Folder::hasDocumentByName() which returned an int > 0 if documents
has been loaded before and even if the document searching for was not among them.
- add new method SeedDMS_Core_Folder::empty()
5.1.11 (2019-05-03)
---------------------
- ???
5.1.10 (2019-04-04)
---------------------
- fix php warning if workflow state doesn' have next transition
- add method SeedDMS_Core_DatabaseAccess::setLogFp()
5.1.9 (2018-11-13)
---------------------
- context can be passed to getAccessMode()
- call hook in SeedDMS_Core_Folder::getAccessMode()
- new optional parameter $listguest for SeedDMS_Core_Document::getReadAccessList()
- remove deprecated methods SeedDMS_Core_Document::convert(), SeedDMS_Core_Document::wasConverted(), SeedDMS_Core_Document::viewOnline(), SeedDMS_Core_Document::getUrl()
5.1.8 (2018-07-02)
---------------------
- SeedDMS_Core_DMS::search() returns false in case of an error
- do not use views in DBAccessPDO by default anymore, use temp. tables
- SeedDMS_Core_Document::getNotifyList() has new parameter to include disabled user in list
- fix possible sql injection in SeedDMS_Core_User
5.1.7 (2018-04-05)
---------------------
- just bump version
5.1.6 (2018-02-14)
---------------------
- add SeedDMS_Core_Folder::getDocumentsMinMax()
- add lots of DocBlocks from merge request #8
- add SeedDMS_Core_AttributeDefinition::removeValue()
5.1.5 (2017-11-07)
---------------------
- use views instead of temp. tables
- add list of expired documents in SeedDMS_Core_DMS::getDocumentList()
- add methods to set comment, name, public, version of document files
- add method SeedDMS_Core_Document::transferToUser()
- SeedDMS_Core_Document::addDocumentFile() returns object of file
- add SeedDMS_Core_DocumentFile::setDate()
- remove SeedDMS_Core_DocumentCategory::addCategory() and getCategories()
- add optional parameters $limit and $offset to SeedDMS_Core_Folder::getDocuments()
and SeedDMS_Core_Folder::getSubFolders()
- getInstance() returns now null instead of false if the object was not found in the db
- add new methods SeedDMS_Core_Document::addCategories() and
SeedDMS_Core_Document::removeCategories()
5.1.4 (2017-09-05)
---------------------
- add virtual access mode for document links and attachments plus callbacks to
check access mode in a hook
- add new method SeedDMS_Core_DMS::getDocumentsExpired()
- all changes from 5.0.14 merged
5.1.3 (2017-08-23)
---------------------
- SeedDMS_Core_Document::getNotifyList() and SeedDMS_Core_Folder::getNotifyList()
returns just users which are not disabled
- add new methods removeFromProcesses(), getWorkflowsInvolved(), getKeywordCategories() to SeedDMS_Core_User
- add methods isMandatoryReviewerOf() and isMandatoryApproverOf()
- add methods transferDocumentsFolders() and transferEvents()
- add method SeedDMS_Core_DMS::getDocumentByOriginalFilename()
5.1.2 (2017-03-23)
---------------------
- SeedDMS_Core_DMS::filterDocumentFiles() returns also documents which are not public
if the owner tries to access them
- Check return value of onPreRemove[Document
Folder], return from calling method if bool
- Add SeedDMS_Core_DMS::getDocumentList()
- Limit number of duplicate files to 1000
- Add hook on(Pre
Post)RemoveContent
- Add hook onAttributeValidate
5.1.1 (2017-02-20)
---------------------
- all changes from 5.0.11 merged
5.1.0 (2017-02-20)
---------------------
- added postgres support
5.0.13 (2017-07-13)
---------------------
- all changes from 4.3.36 merged
5.0.12 (2017-03-23)
---------------------
all sql statements can be logged to a file
do not sort some temporary tables anymore, because it causes an error in mysql if sql_mode=only_full_group_by is set
5.0.11 (2017-02-28)
---------------------
- all changes from 4.3.34 merged
5.0.10 (2017-02-20)
---------------------
- all changes from 4.3.33 merged
5.0.9 (2016-11-02)
---------------------
- all changes from 4.3.32 merged
5.0.8 (2016-11-02)
---------------------
- all changes from 4.3.31 merged
5.0.7 (2016-11-02)
---------------------
- all changes from 4.3.30 merged
- better attribute value checking
5.0.6 (2016-09-06)
---------------------
- all changes from 4.3.29 merged
5.0.5 (2016-08-09)
---------------------
- all changes from 4.3.28 merged
5.0.4 (2016-05-03)
---------------------
- all changes from 4.3.27 merged
5.0.3 (2016-04-04)
---------------------
- use classname from SeedDMS_Core_DMS::_classnames for SeedDMS_Core_DocumentContent
- all changes from 4.3.26 merged
5.0.2 (2016-04-26)
---------------------
- all changes from 4.3.25 merged
5.0.1 (2016-01-22)
---------------------
- all changes from 4.3.24 merged
5.0.0 (2016-01-22)
---------------------
- classes can be overloaded
- clean workflow log when a document version was deleted
4.3.37 (2018-02-14)
---------------------
- SeedDMS_Core_DMS::search() finds documents without a status log
4.3.36 (2017-03-22)
---------------------
- fix sql statement for creating temp. tables (sqlite)
4.3.35 (2017-07-11)
---------------------
do not sort some temporary tables anymore, because it causes an error in mysql if sql_mode=only_full_group_by is set
4.3.34 (2017-02-28)
---------------------
SeedDMS_Core_DMS::getDuplicateDocumentContent() returns complete document
4.3.33 (2017-02-22)
---------------------
- SeedDMЅ_Core_DMS::getTimeline() no longer returns duplicate documents
- SeedDMЅ_Core_Document::addContent() sets workflow after status was set
- SeedDMЅ_Core_Keyword::setOwner() fix sql statement
- SeedDMЅ_Core_User::setFullname() minor fix in sql statement
4.3.32 (2017-01-12)
---------------------
- order groups by name returned by getReadAccessList()
- add optional parameter to SeedDMS_Core_DMS::filterDocumentLinks()
- SeedDMS_Core_DMS::search() can search for document/folder id
4.3.31 (2016-11-02)
---------------------
- new method SeedDMЅ_Core_WorkflowAction::getTransitions()
- new method SeedDMЅ_Core_WorkflowState::getTransitions()
- new method SeedDMЅ_Core_AttributeDefinition::parseValue()
- add check for cycles in workflow SeedDMS_Core_Workflow::checkForCycles()
4.3.30 (2016-10-07)
---------------------
- new method SeedDMЅ_Core_AttributeDefinition::getValueSetSeparator()
- trim each value of a value set before saving the complete value set as a string
4.3.29 (2016-09-06)
---------------------
- SeedDMЅ_Core_Object::getAttributes() orders attributes by name of attribute definition
- SeedDMЅ_Core_Workflow::addTransition() force reload of transition list after adding a
- SeedDMЅ_Core_Document::rewrite[Review
Approval]Log() will also copy file if it exists
- add method SeedDMЅ_Core_Document::rewriteWorkflowLog()
4.3.28 (2016-08-24)
---------------------
- SeedDMЅ_Core_DMS::search() searches also comment of document version
4.3.27 (2016-04-26)
---------------------
- callbacks can have more then one user function
- fix some sql statements, because they didn't work with mysql 5.7.5 anymore
4.3.26 (2016-04-04)
---------------------
- add more callbacks
4.3.25 (2016-03-08)
---------------------
- rename SeedDMS_Core_Group::getNotificationsByGroup() to getNotifications()
- use __construct() for all constructors
- fix setting multi value attributes for versions
4.3.24 (2016-01-22)
---------------------
- make sure boolean attribute is saved as 0/1
- add SeedDMS_Core_User::[g
s]etMandatoryWorkflows()
- add SeedDMS_Core_User::getNotifications()
- add SeedDMS_Core_Group::getNotifications()
- SeedDMS_Core_DMS::getNotificationsByGroup() and
SeedDMS_Core_DMS::getNotificationsByUser() are deprecated
- SeedDMS_Core_DocumentCategory::getDocumentsByCategory() now returns the documents
- add SeedDMS_Core_Group::getWorkflowStatus()
- SeedDMS_Core_User::getDocumentsLocked() sets locking user propperly
4.3.24 (2016-01-21)
---------------------
- make sure boolean attribute is saved as 0/1
- add SeedDMS_Core_User::[g
s]etMandatoryWorkflows()
- add SeedDMS_Core_User::getNotifications()
- add SeedDMS_Core_Group::getNotifications()
- SeedDMS_Core_DMS::getNotificationsByGroup() and
SeedDMS_Core_DMS::getNotificationsByUser() are deprecated
- SeedDMS_Core_DocumentCategory::getDocumentsByCategory() now returns the documents
- add SeedDMS_Core_Group::getWorkflowStatus()
- SeedDMS_Core_User::getDocumentsLocked() sets locking user propperly
4.3.23 (2016-01-21)
---------------------
- new method SeedDMS_Core_DMS::createDump()
- minor improvements int SeedDMS_Core_Document::getReadAccessList()
4.3.22 (2015-11-09)
---------------------
- fix sql statement to reset password
- pass some more information for timeline
4.3.21 (2015-09-28)
---------------------
- add method SeedDMS_Core_Database::getCurrentTimestamp()
- add method SeedDMS_Core_Database::getCurrentDatetime()
- user getCurrentTimestamp() and getCurrentDatetime() whenever possible
4.3.20 (2015-06-26)
---------------------
- add method SeedDMS_Core_DMS::checkDate()
- add method SeedDMS_Core_Document::setDate()
- add method SeedDMS_Core_Folder::setDate()
- date can be passed to SeedDMS_Core_DocumentContent::setStatus()
- add method SeedDMS_Core_DocumentContent::rewriteStatusLog()
- add method SeedDMS_Core_DocumentContent::rewriteReviewLog()
- add method SeedDMS_Core_DocumentContent::rewriteApprovalLog()
- access rights for guest are also taken into account if set in an acl. Previously guest could gain read rights even if the access was probibited
by a group or user right
4.3.19 (2015-06-26)
---------------------
- add optional paramter $noclean to clearAccessList(), setDefaultAccess(), setInheritAccess()
- clearAccessList() will clean up the notifier list
- new method cleanNotifyList()
4.3.18 (2015-06-09)
---------------------
- add optional paramter $msg to SeedDMS_Core_DocumentContent::verifyStatus()
- add method SeedDMS_Core_DMS::getDuplicateDocumentContent()
4.3.17 (2015-03-27)
---------------------
clean workflow log when a document version was deleted
4.3.16 (2015-03-20)
---------------------
no changes
4.3.15 (2015-02-12)
---------------------
users returned by SeedDMS_Core_DMS::getAllUsers() have language and theme set again
4.3.13 (2014-11-27)
---------------------
- fix searching for attributes
- add some more documentation
- SeedDMS_Core_DMS::getDocumentCategories() returns categories sorted by name (Bug #181)
- new methode SeedDMS_Core_Document::replaceContent() which replaces the content of a version.
<release>4.3.14</release>
- add missing start transaction in SeedDMD_Core_Folder::remove()
- SeedDMD_Core_Folder::isSubFolder() doesn't compare object instances anymore (Bug #194)
4.3.12 (2014-11-17)
---------------------
- fix searching folders with multivalue attributes
4.3.11 (2014-11-13)
---------------------
- fixed saving multivalue attributes
- add method SeedDMS_Core_Attribute::getValueAsArray()
4.3.10 (2014-10-22)
---------------------
new release
4.3.9 (2014-07-30)
---------------------
- SeedDMS_Core_KeywordCategory::getKeywordLists() sorts keywords aphabetically
- SeedDMS_Core_DMS::addUser() doesn't throw an error if sql_mode is set to STRICT_TRANS_TABLES and pwdexpiration is not set to a valid date.
4.3.8 (2014-04-09)
---------------------
- new method SeedDMS_Core_DMS::getStatisticalData()
4.3.7 (2014-03-21)
---------------------
no changes
4.3.6 (2014-03-18)
---------------------
- add optional parameters $publiconly=false and $user=null to SeedDMS_Core_Document::getDocumentLinks()
- add new method SeedDMS_Core_Document::getReverseDocumentLinks()
4.3.5 (2014-03-04)
---------------------
no changes
4.3.4 (2014-02-01)
---------------------
- fix handling of multivalue attributes
4.3.3 (2014-02-01)
---------------------
- SeedDMS_Folder::getDocuments() and SeedDMS_Folder::getSubFolders() do not
do any sorting if $orderby is not set.
- database hostname can have port seperated by ':'
- make all functions in SeedDMS_Core_File static (fixes problem with php 5.5.x)
4.3.2 (2013-11-27)
---------------------
- new method SeedDMS_Core_Folder::isSubFolder()
- check for subFolder in SeedDMS_Core_Folder::setParent()
- new methods SeedDMS_Core_DMS::checkFolders() and SeedDMS_Core_DMS::checkDocuments()
4.3.0 (2013-09-05)
---------------------
- various small corrections
- comment of version is no longer taken from document if version comment is empty
- passing an array of users to SeedDMЅ_Core_DMS::search() instead of a single user ist now allowed
- turn on foreign key constraints for sqlite3
- SeedDMЅ_Core_Folder::getPath() can handle a subfolder treated as a root folder
4.2.2 (2013-05-17)
---------------------
- admins can be added as reviewer/approver again
4.2.1 (2013-04-30)
---------------------
- fixed bug in SeedDMS_Core_DocumentContent::addIndApp()
4.2.0 (2013-04-22)
---------------------
- fixed bug in SeedDMS_Core_DocumentContent::addIndApp()
4.1.3 (2013-04-08)
---------------------
- stay in sync with seeddms application
4.1.2 (2013-04-05)
---------------------
- set propper folderList of sub folders after moving a folder
4.1.1 (2013-04-05)
---------------------
- stay in sync with seeddms application
4.1.0 (2013-03-28)
---------------------
- minor bugfixes
4.0.0 (2013-02-26)
---------------------
- minor bugfixes
4.0.0pre5 (2013-02-14)
---------------------
- changed name from letodms to seeddms
- fixed SeedDMS_Database::TableList()
4.0.0pre4 (2013-02-11)
---------------------
- calculate checksum for document versions
- some bug fixes
- some more documentation
- added new methods SeedDMS_Core_Document::getReadUserList() and
SeedDMS_Core_Folder::getReadUserList() which replaces getApproversList()
- fixed sql statement in getReadUserList() for sqlite3
4.0.0pre3 (2013-02-08)
---------------------
- minor bug fixes
4.0.0pre2 (2013-02-06)
---------------------
- lots of bug fixes
- replaced more of old var declaration
- more code documentation
4.0.0pre1 (2013-01-24)
---------------------
- added database transactions
- new workflow
- replaced old var declaration
4.0.0RC1 (2013-02-20)
---------------------
- minor bugfixes
3.4.0 (2012-12-13)
---------------------
- added PDO database driver, several sql changes for better compatiblity
- fixed bug when adding a new document category
- make sure the database remains consistent even in case of errors
3.3.9 (2012-09-19)
---------------------
- version update to be in sync with letodms application
3.3.8 (2012-09-16)
---------------------
- more sql injection protection in LetoDMS_Core_User
3.3.7 (2012-08-25)
---------------------
- no changes, just keep same version as letodms application
3.3.6 (2012-07-16)
---------------------
- no changes, just keep same version as letodms application
3.3.5 (2012-04-30)
---------------------
- minor corrections
3.3.4 (2012-04-11)
---------------------
- fixed bug in LetoDMS_Core_DocumentFile::getPath()
3.3.3 (2012-03-28)
---------------------
- fixed bug in LetoDMS_Core_Document::getPath()
3.3.2 (2012-03-22)
---------------------
- fixed bug in LetoDMS_Core_Document::getDir()
3.3.1 (2012-03-21)
---------------------
- new release
3.3.0 (2012-02-08)
---------------------
- added methods to find and repair errors in document and folder records
- removed sendmail parameter from some methods in LetoDMS_Core_Document
- do not use some of the temporay tables anymore
- SetFetchMode(ADODB_FETCH_ASSOC) in LetoDMS_Core_DatabaseAccess::connect()
3.2.0 (2011-07-23)
---------------------
New release
3.0.0 (2010-04-27)
---------------------
Initial release

View File

@ -1,102 +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_File
*/
require_once('Core/inc.ClassIterator.php');

View File

@ -1,94 +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);
/*
* Lowest and highest access right
*/
define("M_LOWEST_RIGHT", 1);
define("M_HIGHEST_RIGHT", 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,124 +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) { /* {{{ */
$newName = trim($newName);
if(!$newName)
return false;
$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,531 +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) { /* {{{ */
$newName = trim($newName);
if(!$newName)
return false;
$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();
$classname = $this->_dms->getClassname('user');
foreach ($resArr as $row) {
/** @var SeedDMS_Core_User $user */
$user = new $classname($row["id"], $row["login"], $row["pwd"], $row["fullName"], $row["email"], $row["language"], $row["theme"], $row["comment"], $row["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();
$classname = $this->_dms->getClassname('user');
foreach ($resArr as $row) {
/** @var SeedDMS_Core_User $user */
$user = new $classname($row["id"], $row["login"], $row["pwd"], $row["fullName"], $row["email"], $row["language"], $row["theme"], $row["comment"], $row["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();
$queryStr = "SELECT * FROM `tblGroupMembers` WHERE `groupID` = " . $this->_id . " AND `userID` = " . $user->getID();
if ($asManager)
$queryStr .= " AND `manager` = 1";
$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;
}
}
$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 ."' ".
"ORDER BY `tblDocumentReviewLog`.`reviewLogID` DESC";
$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;
} /* }}} */
/**
* 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\Core;
/**
* 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,207 +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-2023 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-2023 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) { /* {{{ */
$newName = trim($newName);
if(!$newName)
return false;
$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) { /* {{{ */
if(!$user || !$user->isType('user'))
return false;
$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 keywords in this list
*/
function getKeywordLists() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT * FROM `tblKeywords` WHERE `category` = " . $this->_id . " order by `keywords`";
return $db->getResultArray($queryStr);
}
/**
* @return integer number of keywords in this list
*/
function countKeywordLists() { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "SELECT COUNT(*) as `c` FROM `tblKeywords` where `category`=".$this->_id;
$resArr = $db->getResultArray($queryStr);
if (is_bool($resArr) && !$resArr)
return false;
return $resArr[0]['c'];
} /* }}} */
/**
* @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,331 +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 $this->_attributes[$attrdef->getId()]->getParsedValue();
}
} 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;
/* Check if 'onPostAddAttribute' callback is set */
if(isset($this->_dms->callbacks['onPostAddAttribute'])) {
foreach($this->_dms->callbacks['onPostAddAttribute'] as $callback) {
if(!call_user_func($callback[0], $callback[1], $this, $attrdef, $value)) {
}
}
}
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()])) {
$oldvalue = $this->_attributes[$attrdef->getId()]->getValue();
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;
/* Check if 'onPostRemoveAttribute' callback is set */
if(isset($this->_dms->callbacks['onPostRemoveAttribute'])) {
foreach($this->_dms->callbacks['onPostRemoveAttribute'] as $callback) {
if(!call_user_func($callback[0], $callback[1], $this, $attrdef, $oldvalue)) {
}
}
}
unset($this->_attributes[$attrdef->getId()]);
}
return true;
} /* }}} */
} /* }}} */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,529 +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-2022 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class to file operation in the document management system
* Use the methods of this class only for files below the content
* directory but not for temporäry files, cache files or log files.
*
* @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-2022 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 (!self::copyFile($source, $target))
return false;
/** @noinspection PhpUndefinedFunctionInspection */
return self::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;
} /* }}} */
/**
* Return the mimetype of a given file
*
* This method uses finfo to determine the mimetype
* but will correct some mimetypes which are
* not propperly determined or could be more specific, e.g. text/plain
* when it is actually text/markdown. In thoses cases
* the file extension will be taken into account.
*
* @param string $filename name of file on disc
* @return string mimetype
*/
static function mimetype($filename) { /* {{{ */
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
switch($mimetype) {
case 'application/octet-stream':
case 'text/plain':
$lastDotIndex = strrpos($filename, ".");
if($lastDotIndex === false) $fileType = ".";
else $fileType = substr($filename, $lastDotIndex);
if($fileType == '.md')
$mimetype = 'text/markdown';
break;
}
return $mimetype;
} /* }}} */
/**
* @param integer $size
* @param array $sizes list of units for 10^0, 10^3, 10^6, ..., 10^(n*3) bytes
* @return string
*/
static function format_filesize($size, $sizes = array('Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB')) { /* {{{ */
if ($size == 0) return('0 Bytes');
if ($size == 1) return('1 Byte');
/** @noinspection PhpIllegalArrayKeyTypeInspection */
return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $sizes[$i]);
} /* }}} */
/**
* Parses a string like '[0-9]+ *[BKMGT]*' into an integer
* B,K,M,G,T stand for byte, kilo byte, mega byte, giga byte, tera byte
* If the last character is omitted, bytes are assumed.
*
* @param $str
* @return bool|int
*/
static function parse_filesize($str) { /* {{{ */
if(!preg_match('/^([0-9]+) *([BKMGT]*)$/', trim($str), $matches))
return false;
$value = $matches[1];
$unit = $matches[2] ? $matches[2] : 'B';
switch($unit) {
case 'T':
return $value * 1024 * 1024 * 1024 *1024;
break;
case 'G':
return $value * 1024 * 1024 * 1024;
break;
case 'M':
return $value * 1024 * 1024;
break;
case 'K':
return $value * 1024;
break;
default;
return (int) $value;
break;
}
/** @noinspection PhpUnreachableStatementInspection */
return false;
} /* }}} */
/**
* @param $file
* @return string
*/
static function file_exists($file) { /* {{{ */
return file_exists($file);
} /* }}} */
/**
* @param $file
* @return string
*/
static function checksum($file) { /* {{{ */
return md5_file($file);
} /* }}} */
/**
* @param $string mimetype
* @return string file extension with the dot or an empty string
*/
static function fileExtension($mimetype) { /* {{{ */
switch($mimetype) {
case "application/pdf":
case "image/png":
case "image/gif":
case "image/jpg":
$expect = substr($mimetype, -3, 3);
break;
default:
$mime_map = [
'video/3gpp2' => '3g2',
'video/3gp' => '3gp',
'video/3gpp' => '3gp',
'application/x-compressed' => '7zip',
'audio/x-acc' => 'aac',
'audio/ac3' => 'ac3',
'application/postscript' => 'ai',
'audio/x-aiff' => 'aif',
'audio/aiff' => 'aif',
'audio/x-au' => 'au',
'video/x-msvideo' => 'avi',
'video/msvideo' => 'avi',
'video/avi' => 'avi',
'application/x-troff-msvideo' => 'avi',
'application/macbinary' => 'bin',
'application/mac-binary' => 'bin',
'application/x-binary' => 'bin',
'application/x-macbinary' => 'bin',
'image/bmp' => 'bmp',
'image/x-bmp' => 'bmp',
'image/x-bitmap' => 'bmp',
'image/x-xbitmap' => 'bmp',
'image/x-win-bitmap' => 'bmp',
'image/x-windows-bmp' => 'bmp',
'image/ms-bmp' => 'bmp',
'image/x-ms-bmp' => 'bmp',
'application/bmp' => 'bmp',
'application/x-bmp' => 'bmp',
'application/x-win-bitmap' => 'bmp',
'application/cdr' => 'cdr',
'application/coreldraw' => 'cdr',
'application/x-cdr' => 'cdr',
'application/x-coreldraw' => 'cdr',
'image/cdr' => 'cdr',
'image/x-cdr' => 'cdr',
'zz-application/zz-winassoc-cdr' => 'cdr',
'application/mac-compactpro' => 'cpt',
'application/pkix-crl' => 'crl',
'application/pkcs-crl' => 'crl',
'application/x-x509-ca-cert' => 'crt',
'application/pkix-cert' => 'crt',
'text/css' => 'css',
'text/x-comma-separated-values' => 'csv',
'text/comma-separated-values' => 'csv',
'application/vnd.msexcel' => 'csv',
'application/x-director' => 'dcr',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx',
'application/x-dvi' => 'dvi',
'message/rfc822' => 'eml',
'application/x-msdownload' => 'exe',
'video/x-f4v' => 'f4v',
'audio/x-flac' => 'flac',
'video/x-flv' => 'flv',
'image/gif' => 'gif',
'application/gpg-keys' => 'gpg',
'application/x-gtar' => 'gtar',
'application/x-gzip' => 'gzip',
'application/mac-binhex40' => 'hqx',
'application/mac-binhex' => 'hqx',
'application/x-binhex40' => 'hqx',
'application/x-mac-binhex40' => 'hqx',
'text/html' => 'html',
'image/x-icon' => 'ico',
'image/x-ico' => 'ico',
'image/vnd.microsoft.icon' => 'ico',
'text/calendar' => 'ics',
'application/java-archive' => 'jar',
'application/x-java-application' => 'jar',
'application/x-jar' => 'jar',
'image/jp2' => 'jp2',
'video/mj2' => 'jp2',
'image/jpx' => 'jp2',
'image/jpm' => 'jp2',
'image/jpeg' => 'jpeg',
'image/pjpeg' => 'jpeg',
'application/x-javascript' => 'js',
'application/json' => 'json',
'text/json' => 'json',
'application/vnd.google-earth.kml+xml' => 'kml',
'application/vnd.google-earth.kmz' => 'kmz',
'text/x-log' => 'log',
'audio/x-m4a' => 'm4a',
'application/vnd.mpegurl' => 'm4u',
'text/markdown' => 'md',
'audio/midi' => 'mid',
'application/vnd.mif' => 'mif',
'video/quicktime' => 'mov',
'video/x-sgi-movie' => 'movie',
'audio/mpeg' => 'mp3',
'audio/mpg' => 'mp3',
'audio/mpeg3' => 'mp3',
'audio/mp3' => 'mp3',
'video/mp4' => 'mp4',
'video/mpeg' => 'mpeg',
'application/oda' => 'oda',
'audio/ogg' => 'ogg',
'video/ogg' => 'ogg',
'application/ogg' => 'ogg',
'application/x-pkcs10' => 'p10',
'application/pkcs10' => 'p10',
'application/x-pkcs12' => 'p12',
'application/x-pkcs7-signature' => 'p7a',
'application/pkcs7-mime' => 'p7c',
'application/x-pkcs7-mime' => 'p7c',
'application/x-pkcs7-certreqresp' => 'p7r',
'application/pkcs7-signature' => 'p7s',
'application/pdf' => 'pdf',
'application/octet-stream' => 'pdf',
'application/x-x509-user-cert' => 'pem',
'application/x-pem-file' => 'pem',
'application/pgp' => 'pgp',
'application/x-httpd-php' => 'php',
'application/php' => 'php',
'application/x-php' => 'php',
'text/php' => 'php',
'text/x-php' => 'php',
'application/x-httpd-php-source' => 'php',
'image/png' => 'png',
'image/x-png' => 'png',
'application/powerpoint' => 'ppt',
'application/vnd.ms-powerpoint' => 'ppt',
'application/vnd.ms-office' => 'ppt',
'application/msword' => 'doc',
'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'pptx',
'application/x-photoshop' => 'psd',
'image/vnd.adobe.photoshop' => 'psd',
'audio/x-realaudio' => 'ra',
'audio/x-pn-realaudio' => 'ram',
'application/x-rar' => 'rar',
'application/rar' => 'rar',
'application/x-rar-compressed' => 'rar',
'audio/x-pn-realaudio-plugin' => 'rpm',
'application/x-pkcs7' => 'rsa',
'text/rtf' => 'rtf',
'text/richtext' => 'rtx',
'video/vnd.rn-realvideo' => 'rv',
'application/x-stuffit' => 'sit',
'application/smil' => 'smil',
'text/srt' => 'srt',
'image/svg+xml' => 'svg',
'application/x-shockwave-flash' => 'swf',
'application/x-tar' => 'tar',
'application/x-gzip-compressed' => 'tgz',
'image/tiff' => 'tiff',
'text/plain' => 'txt',
'text/x-vcard' => 'vcf',
'application/videolan' => 'vlc',
'text/vtt' => 'vtt',
'audio/x-wav' => 'wav',
'audio/wave' => 'wav',
'audio/wav' => 'wav',
'application/wbxml' => 'wbxml',
'video/webm' => 'webm',
'audio/x-ms-wma' => 'wma',
'application/wmlc' => 'wmlc',
'video/x-ms-wmv' => 'wmv',
'video/x-ms-asf' => 'wmv',
'application/xhtml+xml' => 'xhtml',
'application/excel' => 'xl',
'application/msexcel' => 'xls',
'application/x-msexcel' => 'xls',
'application/x-ms-excel' => 'xls',
'application/x-excel' => 'xls',
'application/x-dos_ms_excel' => 'xls',
'application/xls' => 'xls',
'application/x-xls' => 'xls',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx',
'application/vnd.ms-excel' => 'xlsx',
'application/xml' => 'xml',
'text/xml' => 'xml',
'text/xsl' => 'xsl',
'application/xspf+xml' => 'xspf',
'application/x-compress' => 'z',
'application/x-zip' => 'zip',
'application/zip' => 'zip',
'application/x-zip-compressed' => 'zip',
'application/s-compressed' => 'zip',
'multipart/x-zip' => 'zip',
'text/x-scriptzsh' => 'zsh',
];
$expect = isset($mime_map[$mimetype]) === true ? $mime_map[$mimetype] : '';
}
return $expect;
} /* }}} */
/**
* @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 . DIRECTORY_SEPARATOR . $entry))
{
if (!self::removeDir($path . DIRECTORY_SEPARATOR . $entry ))
return false;
}
else
{
if (!@unlink($path . DIRECTORY_SEPARATOR . $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 . DIRECTORY_SEPARATOR . $entry, $targetPath . DIRECTORY_SEPARATOR . $entry))
return false;
} else {
if (!@copy($sourcePath . DIRECTORY_SEPARATOR . $entry, $targetPath . DIRECTORY_SEPARATOR . $entry))
return false;
}
}
@closedir($handle);
}
else
return false;
return true;
} /* }}} */
/**
* @param $sourcePath
* @param $targetPath
* @return bool
*/
static function moveDir($sourcePath, $targetPath) { /* {{{ */
/** @noinspection PhpUndefinedFunctionInspection */
if (!self::copyDir($sourcePath, $targetPath))
return false;
/** @noinspection PhpUndefinedFunctionInspection */
return self::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;
} /* }}} */
}

View File

@ -1,3 +0,0 @@
<?php
// Do any kind of bootstraping for major database version 5
$majorversion = 5; // just an example, currently not used

View File

@ -1,3 +0,0 @@
<?php
// Do any kind of bootstraping for major database version 6
$majorversion = 6; // just an example, currently not used

View File

@ -1,23 +0,0 @@
{
"name": "seeddms/core",
"description": "Core classes to access a SeedDMS database",
"type": "library",
"license": "GPL-2.0-or-later",
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"Seeddms\\Core\\": "Core/"
},
"classmap": ["Core/"]
},
"authors": [
{
"name": "Uwe Steinmann",
"email": "info@seeddms.org"
}
],
"require-dev": {
"phpunit/phpunit": "^9"
}
}

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";
}
?>

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
cacheResultFile=".phpunit.cache/test-results"
executionOrder="depends,defects"
forceCoversAnnotation="false"
beStrictAboutCoversAnnotation="false"
beStrictAboutOutputDuringTests="false"
beStrictAboutTodoAnnotatedTests="false"
failOnRisky="false"
failOnWarning="true"
verbose="true">
<testsuites>
<testsuite name="default">
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>
<coverage cacheDirectory=".phpunit.cache/code-coverage"
includeUncoveredFiles="true"
processUncoveredFiles="true">
<include>
<directory suffix=".php">Core</directory>
</include>
</coverage>
</phpunit>

View File

@ -1 +0,0 @@
C:37:"PHPUnit\Runner\DefaultTestResultCache":106:{a:2:{s:7:"defects";a:1:{s:17:"DmsTest::testInit";i:3;}s:5:"times";a:1:{s:17:"DmsTest::testInit";d:0.002;}}}

View File

@ -1,574 +0,0 @@
<?php
/**
* Implementation of the attribute definiton tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\TestCase;
/**
* Attribute definition test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class AttributeDefinitionTest extends TestCase
{
/**
* Create a real dms object with a mocked db
*
* This mock is only used if \SeedDMS_Core_DatabaseAccess::getResult() is
* called once. This is the case for all \SeedDMS_Core_AttributeDefinition::setXXX()
* methods like setName().
*
* @return \SeedDMS_Core_DMS
*/
protected function getDmsWithMockedDb() : \SeedDMS_Core_DMS
{
$db = $this->createMock(\SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE "))
->willReturn(true);
$dms = new \SeedDMS_Core_DMS($db, '');
return $dms;
}
/**
* Create a mocked dms
*
* @return \SeedDMS_Core_DMS
*/
protected function getDmsMock() : \SeedDMS_Core_DMS
{
$dms = $this->createMock(\SeedDMS_Core_DMS::class);
$dms->expects($this->any())
->method('getDocument')
->with(1)
->willReturn(true);
$dms->expects($this->any())
->method('getFolder')
->with(1)
->willReturn(true);
$dms->expects($this->any())
->method('getUser')
->will(
$this->returnValueMap(
array(
array(1, new \SeedDMS_Core_User(1, 'admin', 'pass', 'Joe Foo', 'baz@foo.de', 'en_GB', 'bootstrap', 'My comment', \SeedDMS_Core_User::role_admin)),
array(2, new \SeedDMS_Core_User(2, 'admin2', 'pass', 'Joe Bar', 'bar@foo.de', 'en_GB', 'bootstrap', 'My comment', \SeedDMS_Core_User::role_admin)),
array(3, null)
)
)
);
$dms->expects($this->any())
->method('getGroup')
->will(
$this->returnValueMap(
array(
array(1, new \SeedDMS_Core_Group(1, 'admin group 1', 'My comment')),
array(2, new \SeedDMS_Core_Group(2, 'admin group 2', 'My comment')),
array(3, null)
)
)
);
return $dms;
}
/**
* Create a mock attribute definition object
*
* @param int $type type of attribute
* @param boolean $multiple set to true for multi value attributes
* @param int $minvalues minimum number of attribute values
* @param int $maxvalues maximum number of attribute values
* @param string $valueset list of allowed values separated by the first char
* @param string $regex regular expression that must match the attribute value
*
* @return \SeedDMS_Core_AttributeDefinition
*/
protected function getAttributeDefinition($type, $multiple=false, $minvalues=0, $maxvalues=0, $valueset='', $regex='')
{
$attrdef = new \SeedDMS_Core_AttributeDefinition(1, 'foo attr', \SeedDMS_Core_AttributeDefinition::objtype_folder, $type, $multiple, $minvalues, $maxvalues, $valueset, $regex);
return $attrdef;
}
/**
* Test getId()
*
* @return void
*/
public function testGetId()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEquals(1, $attrdef->getId());
}
/**
* Test getName()
*
* @return void
*/
public function testGetName()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEquals('foo attr', $attrdef->getName());
}
/**
* Test setName()
*
* @return void
*/
public function testSetName()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
$attrdef->setName('bar attr');
$this->assertEquals('bar attr', $attrdef->getName());
}
/**
* Test getObjType()
*
* @return void
*/
public function testGetObjType()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::objtype_folder, $attrdef->getObjType());
}
/**
* Test setObjType()
*
* @return void
*/
public function testSetObjType()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
$attrdef->setObjType(\SeedDMS_Core_AttributeDefinition::objtype_document);
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::objtype_document, $attrdef->getObjType());
}
/**
* Test getType()
*
* @return void
*/
public function testGetType()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::type_int, $attrdef->getType());
}
/**
* Test setType()
*
* @return void
*/
public function testSetType()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
$attrdef->setType(\SeedDMS_Core_AttributeDefinition::type_string);
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::type_string, $attrdef->getType());
}
/**
* Test getMultipleValues()
*
* @return void
*/
public function testGetMultipleValues()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEquals(false, $attrdef->getMultipleValues());
}
/**
* Test setMultipleValues()
*
* @return void
*/
public function testSetMultipleValues()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
/* Toogle the current value of multiple values */
$oldvalue = $attrdef->getMultipleValues();
$attrdef->setMultipleValues(!$oldvalue);
$this->assertEquals(!$oldvalue, $attrdef->getMultipleValues());
}
/**
* Test getMinValues()
*
* @return void
*/
public function testGetMinValues()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEquals(0, $attrdef->getMinValues());
}
/**
* Test setMinValues()
*
* @return void
*/
public function testSetMinValues()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
/* add 5 to value of min values */
$oldvalue = $attrdef->getMinValues();
$attrdef->setMinValues($oldvalue+5);
$this->assertEquals($oldvalue+5, $attrdef->getMinValues());
}
/**
* Test getMaxValues()
*
* @return void
*/
public function testGetMaxValues()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEquals(0, $attrdef->getMaxValues());
}
/**
* Test setMaxValues()
*
* @return void
*/
public function testSetMaxValues()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
/* add 5 to value of max values */
$oldvalue = $attrdef->getMaxValues();
$attrdef->setMaxValues($oldvalue+5);
$this->assertEquals($oldvalue+5, $attrdef->getMaxValues());
}
/**
* Test getValueSet()
*
* @return void
*/
public function testGetValueSet()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '|foo|bar|baz');
$this->assertEquals('|foo|bar|baz', $attrdef->getValueSet());
}
/**
* Test getValueSetSeparator()
*
* @return void
*/
public function testGetValueSetSeparator()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '|foo|bar|baz');
$this->assertEquals('|', $attrdef->getValueSetSeparator());
/* No value set will return no separator */
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertEmpty($attrdef->getValueSetSeparator());
/* Even a 1 char value set will return no separator */
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '|');
$this->assertEmpty($attrdef->getValueSetSeparator());
/* Multiple users or groups always use a ',' as a separator */
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_user, true);
$this->assertEquals(',', $attrdef->getValueSetSeparator());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_group, true);
$this->assertEquals(',', $attrdef->getValueSetSeparator());
}
/**
* Test getValueSetAsArray()
*
* @return void
*/
public function testGetValueSetAsArray()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '|foo|bar|baz ');
$valueset = $attrdef->getValueSetAsArray();
$this->assertIsArray($valueset);
$this->assertCount(3, $valueset);
/* value set must contain 'baz' though 'baz ' was originally set */
$this->assertContains('baz', $valueset);
/* No value set will return an empty array */
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string);
$valueset = $attrdef->getValueSetAsArray();
$this->assertIsArray($valueset);
$this->assertEmpty($valueset);
}
/**
* Test getValueSetValue()
*
* @return void
*/
public function testGetValueSetValue()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '|foo|bar|baz ');
$this->assertEquals('foo', $attrdef->getValueSetValue(0));
/* Check if trimming of 'baz ' worked */
$this->assertEquals('baz', $attrdef->getValueSetValue(2));
/* Getting the value of a none existing index returns false */
$this->assertFalse($attrdef->getValueSetValue(3));
/* Getting a value from a none existing value set returns false as well */
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string);
$this->assertFalse($attrdef->getValueSetValue(0));
}
/**
* Test setValueSet()
*
* @return void
*/
public function testSetValueSet()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
/* add 5 to value of min values */
$attrdef->setValueSet(' |foo|bar | baz ');
$this->assertEquals('|foo|bar|baz', $attrdef->getValueSet());
}
/**
* Test getRegex()
*
* @return void
*/
public function testGetRegex()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '', '[0-9].*');
$this->assertEquals('[0-9].*', $attrdef->getRegex());
}
/**
* Test setRegex()
*
* @return void
*/
public function testSetRegex()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
/* set a new valid regex */
$this->assertTrue($attrdef->setRegex(' /[0-9].*/i '));
$this->assertEquals('/[0-9].*/i', $attrdef->getRegex());
/* set a new invalid regex will return false and keep the old regex */
$this->assertFalse($attrdef->setRegex(' /([0-9].*/i '));
$this->assertEquals('/[0-9].*/i', $attrdef->getRegex());
}
/**
* Test setEmptyRegex()
*
* @return void
*/
public function testSetEmptyRegex()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string);
/* A mocked dms is needed for updating the database */
$attrdef->setDMS(self::getDmsWithMockedDb());
/* set an empty regex */
$this->assertTrue($attrdef->setRegex(''));
}
/**
* Test parseValue()
*
* @return void
*/
public function testParseValue()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string);
$value = $attrdef->parseValue('foo');
$this->assertIsArray($value);
$this->assertCount(1, $value);
$this->assertContains('foo', $value);
/* An attribute definition with multiple values will split the value by the first char */
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, true, 0, 0, '|baz|bar|foo');
$value = $attrdef->parseValue('|bar|baz');
$this->assertIsArray($value);
$this->assertCount(2, $value);
/* An attribute definition without multiple values, will treat the value as a string */
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '|baz|bar|foo');
$value = $attrdef->parseValue('|bar|baz');
$this->assertIsArray($value);
$this->assertCount(1, $value);
$this->assertContains('|bar|baz', $value);
}
/**
* Test validate()
*
* @TODO Instead of having a lengthy list of assert calls, this could be
* implemented with data providers for each attribute type
*
* @return void
*/
public function testValidate()
{
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string);
$this->assertTrue($attrdef->validate('')); // even an empty string is valid
$this->assertTrue($attrdef->validate('foo')); // there is no invalid string
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '', '/[0-9]*S/');
$this->assertFalse($attrdef->validate('foo')); // doesn't match the regex
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_regex, $attrdef->getValidationError());
$this->assertTrue($attrdef->validate('S')); // no leading numbers needed
$this->assertTrue($attrdef->validate('8980S')); // leading numbers are ok
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, false, 0, 0, '|foo|bar|baz', '');
$this->assertTrue($attrdef->validate('foo')); // is part of value map
$this->assertFalse($attrdef->validate('foz')); // is not part of value map
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_valueset, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, true, 0, 0, '|foo|bar|baz', '');
$this->assertTrue($attrdef->validate('foo')); // is part of value map
$this->assertFalse($attrdef->validate('')); // an empty value cannot be in the valueset
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_valueset, $attrdef->getValidationError());
$this->assertTrue($attrdef->validate('|foo|baz')); // both are part of value map
$this->assertFalse($attrdef->validate('|foz|baz')); // 'foz' is not part of value map
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_valueset, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_string, true, 1, 1, '|foo|bar|baz', '');
$this->assertTrue($attrdef->validate('foo')); // is part of value map
$this->assertFalse($attrdef->validate('')); // empty string is invalid because of min values = 1
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_min_values, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('|foo|baz')); // both are part of value map, but only value is allowed
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_max_values, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_boolean);
$this->assertTrue($attrdef->validate(0));
$this->assertTrue($attrdef->validate(1));
$this->assertFalse($attrdef->validate(2));
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_boolean, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_int);
$this->assertTrue($attrdef->validate(0));
$this->assertTrue($attrdef->validate('0'));
$this->assertFalse($attrdef->validate('a'));
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_int, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_date);
$this->assertTrue($attrdef->validate('2021-09-30'));
$this->assertTrue($attrdef->validate('1968-02-29')); // 1968 was a leap year
$this->assertTrue($attrdef->validate('2000-02-29')); // 2000 was a leap year
$this->assertFalse($attrdef->validate('1900-02-29')); // 1900 didn't was a leap year
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_date, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('1970-02-29')); // 1970 didn't was a leap year
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_date, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('2010/02/28')); // This has the wrong format
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_date, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('1970-00-29')); // 0 month is not allowed
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_date, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('1970-01-00')); // 0 day is not allowed
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_date, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_float);
$this->assertTrue($attrdef->validate('0.567'));
$this->assertTrue($attrdef->validate('1000'));
$this->assertTrue($attrdef->validate('1000e3'));
$this->assertTrue($attrdef->validate('1000e-3'));
$this->assertTrue($attrdef->validate('-1000'));
$this->assertTrue($attrdef->validate('+1000'));
$this->assertFalse($attrdef->validate('0,567')); // wrong decimal point
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_float, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('0.56.7')); // two decimal point
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_float, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_email);
$this->assertTrue($attrdef->validate('info@seeddms.org'));
$this->assertTrue($attrdef->validate('info@seeddms.verylongtopleveldomain'));
$this->assertFalse($attrdef->validate('@seeddms.org')); // no user
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_email, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('info@localhost')); // no tld
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_email, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('info@@seeddms.org')); // double @
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_email, $attrdef->getValidationError());
$this->assertTrue($attrdef->validate('info@subsubdomain.subdomain.seeddms.org')); // multiple subdomains are ok
$this->assertFalse($attrdef->validate('info@seeddms..org')); // double . is not allowed
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_email, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('info@s.org')); // 2nd level domain name is too short
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_email, $attrdef->getValidationError());
$this->assertFalse($attrdef->validate('info@seeddms.o')); // top level domain name is too short
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_email, $attrdef->getValidationError());
$this->assertTrue($attrdef->validate('info@0123456789-0123456789-0123456789-0123456789-0123456789-01234567.org')); // domain name is 63 chars long, which is the max length
$this->assertFalse($attrdef->validate('info@0123456789-0123456789-0123456789-0123456789-0123456789-012345678.org')); // domain name is 1 char longer than 63 chars
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_email, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_url);
$this->assertTrue($attrdef->validate('http://seeddms.org'));
$this->assertTrue($attrdef->validate('https://seeddms.org'));
$this->assertFalse($attrdef->validate('ftp://seeddms.org')); // ftp is not allowed
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_url, $attrdef->getValidationError());
$this->assertTrue($attrdef->validate('http://localhost')); // no tld is just fine
$this->assertFalse($attrdef->validate('http://localhost.o')); // tld is to short
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_url, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_user);
$attrdef->setDMS(self::getDmsMock());
$this->assertTrue($attrdef->validate(1));
$this->assertFalse($attrdef->validate(3));
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_user, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_group);
$attrdef->setDMS(self::getDmsMock());
$this->assertTrue($attrdef->validate('1'));
$this->assertTrue($attrdef->validate('2'));
$this->assertFalse($attrdef->validate('3')); // there is no group with id=3
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_group, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_group, true);
$attrdef->setDMS(self::getDmsMock());
$this->assertTrue($attrdef->validate(',1,2'));
$this->assertFalse($attrdef->validate(',1,2,3')); // there is no group with id=3
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_group, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_user);
$attrdef->setDMS(self::getDmsMock());
$this->assertTrue($attrdef->validate('1'));
$this->assertTrue($attrdef->validate('2'));
$this->assertFalse($attrdef->validate('3')); // there is no user with id=3
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_user, $attrdef->getValidationError());
$attrdef = self::getAttributeDefinition(\SeedDMS_Core_AttributeDefinition::type_user, true);
$attrdef->setDMS(self::getDmsMock());
$this->assertTrue($attrdef->validate(',1,2'));
$this->assertFalse($attrdef->validate(',1,2,3')); // there is no user with id=3
$this->assertEquals(\SeedDMS_Core_AttributeDefinition::val_error_user, $attrdef->getValidationError());
}
}

View File

@ -1,155 +0,0 @@
<?php
/**
* Implementation of the attribute tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\TestCase;
/**
* Attribute and attribute definition test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class AttributeTest extends TestCase
{
/**
* Create a mock dms object
*
* @return SeedDMS_Core_DMS
*/
protected function getMockDMS() : SeedDMS_Core_DMS
{
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->any())
->method('getResult')
->with($this->stringContains("UPDATE "))
->willReturn(true);
$dms = new SeedDMS_Core_DMS($db, '');
return $dms;
}
/**
* Create a mock attribute definition object
*
* @param int $type type of attribute
* @param boolean $multiple true if multiple values are allowed
* @param int $minvalues minimum number of required values
* @param int $maxvalues maximum number of required value
* @param string $valueset list of allowed values separated by the first char
* @param string $regex regular expression the attribute value must match
*
* @return SeedDMS_Core_AttributeDefinition
*/
protected function getAttributeDefinition($type, $multiple=false, $minvalues=0, $maxvalues=0, $valueset='', $regex='')
{
$attrdef = new SeedDMS_Core_AttributeDefinition(1, 'foo attrdef', SeedDMS_Core_AttributeDefinition::objtype_folder, $type, $multiple, $minvalues, $maxvalues, $valueset, $regex);
return $attrdef;
}
/**
* Create a mock attribute object
*
* @param SeedDMS_Core_AttributeDefinition $attrdef attribute defintion of attribute
* @param mixed $value value of attribute
*
* @return SeedDMS_Core_Attribute
*/
static protected function getAttribute($attrdef, $value)
{
$folder = new SeedDMS_Core_Folder(1, 'Folder', null, '', '', '', 0, 0, 0);
$attribute = new SeedDMS_Core_Attribute(1, $folder, $attrdef, $value);
$attribute->setDMS($attrdef->getDMS());
return $attribute;
}
/**
* Test getId()
*
* @return void
*/
public function testGetId()
{
$attrdef = self::getAttributeDefinition(SeedDMS_Core_AttributeDefinition::type_int);
$attribute = self::getAttribute($attrdef, '');
$this->assertEquals(1, $attribute->getId());
}
/**
* Test getValue()
*
* @return void
*/
public function testGetValue()
{
$attrdef = self::getAttributeDefinition(SeedDMS_Core_AttributeDefinition::type_int);
$attribute = self::getAttribute($attrdef, 7);
$this->assertEquals(7, $attribute->getValue());
}
/**
* Test getValueAsArray()
*
* @return void
*/
public function testGetValueAsArray()
{
$attrdef = self::getAttributeDefinition(SeedDMS_Core_AttributeDefinition::type_int);
$attribute = self::getAttribute($attrdef, 7);
$this->assertIsArray($attribute->getValueAsArray());
$this->assertCount(1, $attribute->getValueAsArray());
$this->assertContains(7, $attribute->getValueAsArray());
/* Test a multi value integer */
$attrdef = self::getAttributeDefinition(SeedDMS_Core_AttributeDefinition::type_int, true);
$attribute = self::getAttribute($attrdef, ',3,4,6');
$value = $attribute->getValueAsArray();
$this->assertIsArray($attribute->getValueAsArray());
$this->assertCount(3, $attribute->getValueAsArray());
$this->assertContains('6', $attribute->getValueAsArray());
}
/**
* Test setValue()
*
* @return void
*/
public function testSetValue()
{
$attrdef = self::getAttributeDefinition(SeedDMS_Core_AttributeDefinition::type_int);
$attrdef->setDMS(self::getMockDMS());
$attribute = self::getAttribute($attrdef, 0);
$this->assertTrue($attribute->setValue(9));
$this->assertEquals(9, $attribute->getValue());
/* Setting an array of values for a none multi value attribute will just take the
* element of the array.
*/
$this->assertTrue($attribute->setValue([8,9]));
$this->assertEquals(8, $attribute->getValue());
$attrdef = self::getAttributeDefinition(SeedDMS_Core_AttributeDefinition::type_int, true);
$attrdef->setDMS(self::getMockDMS());
$attribute = self::getAttribute($attrdef, ',3,4,6');
$attribute->setValue([8,9,10]);
$this->assertEquals(',8,9,10', $attribute->getValue());
$this->assertIsArray($attribute->getValueAsArray());
$this->assertCount(3, $attribute->getValueAsArray());
$this->assertContains('9', $attribute->getValueAsArray());
}
}

View File

@ -1,324 +0,0 @@
<?php
/**
* Implementation of the low level database tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
namespace PHPUnit\Framework;
use PHPUnit\Framework\SeedDmsTest;
require_once('SeedDmsBase.php');
/**
* Low level Database test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class DatabaseTest extends SeedDmsTest
{
/**
* Create a sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
}
/**
* Check if connection to database exists
*
* @return void
*/
public function testIsConnected()
{
$this->assertTrue(self::$dbh->ensureConnected());
}
/**
* Test for number of tables in database
*
* @return void
*/
public function testTableList()
{
$tablelist = self::$dbh->TableList();
$this->assertIsArray($tablelist);
// There are just 42 tables in SeedDMS5 and 55 tables in SeedDMS6,
// but one additional
// table 'sqlite_sequence'
$dms = new \SeedDMS_Core_DMS(null, '');
if($dms->version[0] == '5')
$this->assertCount(43, $tablelist);
else
$this->assertCount(56, $tablelist);
}
/**
* Test createTemporaryTable()
*
* @return void
*/
public function testCreateTemporaryTable()
{
foreach (['ttreviewid', 'ttapproveid', 'ttstatid', 'ttcontentid'] as $temp) {
$ret = self::$dbh->createTemporaryTable($temp);
$rec = self::$dbh->getResultArray("SELECT * FROM `".$temp."`");
$this->assertIsArray($rec);
}
/* Running it again will not harm */
foreach (['ttreviewid', 'ttapproveid', 'ttstatid', 'ttcontentid'] as $temp) {
$ret = self::$dbh->createTemporaryTable($temp);
$rec = self::$dbh->getResultArray("SELECT * FROM `".$temp."`");
$this->assertIsArray($rec);
}
/* Running it again and overwrite the old table contents */
foreach (['ttreviewid', 'ttapproveid', 'ttstatid', 'ttcontentid'] as $temp) {
$ret = self::$dbh->createTemporaryTable($temp, true);
$rec = self::$dbh->getResultArray("SELECT * FROM `".$temp."`");
$this->assertIsArray($rec);
}
}
/**
* Test createTemporaryTable() based on views
*
* @return void
*/
public function testCreateTemporaryTableBasedOnViews()
{
self::$dbh->useViews(true);
foreach (['ttreviewid', 'ttapproveid', 'ttstatid', 'ttcontentid'] as $temp) {
$ret = self::$dbh->createTemporaryTable($temp);
$rec = self::$dbh->getResultArray("SELECT * FROM `".$temp."`");
$this->assertIsArray($rec);
}
$viewlist = self::$dbh->ViewList();
$this->assertIsArray($viewlist);
$this->assertCount(4, $viewlist);
/* Running it again will not harm */
foreach (['ttreviewid', 'ttapproveid', 'ttstatid', 'ttcontentid'] as $temp) {
$ret = self::$dbh->createTemporaryTable($temp);
$rec = self::$dbh->getResultArray("SELECT * FROM `".$temp."`");
$this->assertIsArray($rec);
}
/* Running it again and replace the old view */
foreach (['ttreviewid', 'ttapproveid', 'ttstatid', 'ttcontentid'] as $temp) {
$ret = self::$dbh->createTemporaryTable($temp, true);
$rec = self::$dbh->getResultArray("SELECT * FROM `".$temp."`");
$this->assertIsArray($rec);
}
}
/**
* Test for number of views in database
*
* @return void
*/
public function testViewList()
{
$viewlist = self::$dbh->ViewList();
$this->assertIsArray($viewlist);
// There are 0 views
$this->assertCount(0, $viewlist);
}
/**
* Test getDriver()
*
* @return void
*/
public function testGetDriver()
{
$driver = self::$dbh->getDriver();
$this->assertEquals('sqlite', $driver);
}
/**
* Test rbt()
*
* @return void
*/
public function testRbt()
{
$str = self::$dbh->rbt("SELECT * FROM `tblUsers`");
$this->assertEquals('SELECT * FROM "tblUsers"', $str);
}
/**
* Test if table tblFolders has root folder
*
* @return void
*/
public function testInitialRootFolder()
{
$this->assertTrue(self::$dbh->hasTable('tblFolders'));
$query = 'SELECT * FROM `tblFolders`';
$recs = self::$dbh->getResultArray($query);
$this->assertIsArray($recs);
$this->assertCount(1, $recs);
}
/**
* Test if table tblUsers has two initial users
*
* @return void
*/
public function testInitialUsers()
{
$this->assertTrue(self::$dbh->hasTable('tblUsers'));
$query = 'SELECT * FROM `tblUsers`';
$recs = self::$dbh->getResultArray($query);
$this->assertIsArray($recs);
$this->assertCount(2, $recs);
}
/**
* Test getCurrentDatetime()
*
* @return void
*/
public function testGetCurrentDatetime()
{
$query = 'SELECT '.self::$dbh->getCurrentDatetime().' as a';
$recs = self::$dbh->getResultArray($query);
$now = date('Y-m-d H:i:s');
$this->assertIsArray($recs);
$this->assertEquals($now, $recs[0]['a'], 'Make sure php.ini has the proper timezone configured');
}
/**
* Test getCurrentTimestamp()
*
* @return void
*/
public function testGetCurrentTimestamp()
{
$query = 'SELECT '.self::$dbh->getCurrentTimestamp().' as a';
$recs = self::$dbh->getResultArray($query);
$now = time();
$this->assertIsArray($recs);
$this->assertEquals($now, $recs[0]['a'], 'Make sure php.ini has the proper timezone configured');
}
/**
* Test concat()
*
* @return void
*/
public function testConcat()
{
$query = 'SELECT '.self::$dbh->concat(["'foo'", "'baz'", "'bar'"]).' as a';
$recs = self::$dbh->getResultArray($query);
$this->assertIsArray($recs);
$this->assertEquals('foobazbar', $recs[0]['a']);
}
/**
* Test qstr()
*
* @return void
*/
public function testQstr()
{
$str = self::$dbh->qstr("bar");
$this->assertEquals("'bar'", $str);
}
/**
* Test getResult() if the sql fails
*
* @return void
*/
public function testGetResultSqlFail()
{
$ret = self::$dbh->getResult("UPDATE FOO SET `name`='foo'");
$this->assertFalse($ret);
$errmsg = self::$dbh->getErrorMsg();
$this->assertStringContainsString('no such table: FOO', $errmsg);
}
/**
* Test getResultArray() if the sql fails
*
* @return void
*/
public function testGetResultArraySqlFail()
{
$ret = self::$dbh->getResultArray("SELECT * FROM FOO");
$this->assertFalse($ret);
$errmsg = self::$dbh->getErrorMsg();
$this->assertStringContainsString('no such table: FOO', $errmsg);
}
/**
* Test logging into file
*
* @return void
*/
public function testLogging()
{
$fp = fopen('php://memory', 'r+');
self::$dbh->setLogFp($fp);
$sql = "SELECT * FROM `tblUsers`";
$ret = self::$dbh->getResultArray($sql);
$this->assertIsArray($ret);
fseek($fp, 0);
$contents = fread($fp, 200);
/* Check if sql statement was logged into file */
$this->assertStringContainsString($sql, $contents);
fclose($fp);
}
/**
* Test createDump()
*
* @return void
*/
public function testCreateDump()
{
$fp = fopen('php://memory', 'r+');
$ret = self::$dbh->createDump($fp);
$this->assertTrue($ret);
$stat = fstat($fp);
$this->assertIsArray($stat);
$dms = new \SeedDMS_Core_DMS(null, '');
if($dms->version[0] == '5')
$this->assertEquals(1724, $stat['size']);
else
$this->assertEquals(2272, $stat['size']);
// fseek($fp, 0);
// echo fread($fp, 200);
fclose($fp);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,290 +0,0 @@
<?php
/**
* Implementation of the complex dms tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* DMS test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class DmsWithDataTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test getFoldersMinMax()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetFoldersMinMax()
{
self::createSimpleFolderStructure();
$rootfolder = self::$dms->getRootFolder();
$minmax = $rootfolder->getFoldersMinMax();
$this->assertIsArray($minmax);
$this->assertCount(2, $minmax);
$this->assertEquals(0.5, $minmax['min']);
$this->assertEquals(2.0, $minmax['max']);
}
/**
* Test method getFoldersMinMax()
*
* @return void
*/
public function testGetFoldersMinMaxSqlFail()
{
$rootfolder = $this->getMockedRootFolder();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT min(`sequence`) AS `min`, max(`sequence`) AS `max` FROM `tblFolders`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$rootfolder->setDMS($dms);
$this->assertFalse($rootfolder->getFoldersMinMax());
}
/**
* Test getDocumentsMinMax()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetDocumentsMinMax()
{
self::createSimpleFolderStructureWithDocuments();
$subfolder = self::$dms->getFolderByName('Subfolder 1');
$this->assertIsObject($subfolder);
$minmax = $subfolder->getDocumentsMinMax();
$this->assertIsArray($minmax);
$this->assertCount(2, $minmax);
$this->assertEquals(2.0, $minmax['min']);
$this->assertEquals(16.0, $minmax['max']);
}
/**
* Test method getDocumentsMinMax()
*
* @return void
*/
public function testGetDocumentsMinMaxSqlFail()
{
$rootfolder = $this->getMockedRootFolder();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT min(`sequence`) AS `min`, max(`sequence`) AS `max` FROM `tblDocuments`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$rootfolder->setDMS($dms);
$this->assertFalse($rootfolder->getDocumentsMinMax());
}
/**
* Test addDocument()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testAddDocument()
{
self::createSimpleFolderStructure();
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
$this->assertEquals(1, $rootfolder->getId());
/* Add a new document */
$filename = self::createTempFile(200);
list($document, $res) = $rootfolder->addDocument(
'Document 1', // name
'', // comment
null, // expiration
$user, // owner
'', // keywords
[], // categories
$filename, // name of file
'file1.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0 // sequence
);
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
$this->assertIsObject($document);
$this->assertInstanceOf(SeedDMS_Core_Document::class, $document);
$this->assertEquals('Document 1', $document->getName());
}
/**
* Test getDocumentsExpired()
*
* Create two documents which will expired today and tomorrow
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetDocumentsExpiredFuture()
{
self::createSimpleFolderStructure();
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
$this->assertEquals(1, $rootfolder->getId());
/* Add a new document */
$filename = self::createTempFile(200);
list($document, $res) = $rootfolder->addDocument(
'Document 1', // name
'', // comment
mktime(23,59,59), // expiration is still today at 23:59:59
$user, // owner
'', // keywords
[], // categories
$filename, // name of file
'file1.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0 // sequence
);
$this->assertIsObject($document);
list($document, $res) = $rootfolder->addDocument(
'Document 2', // name
'', // comment
mktime(23,59,59)+1, // expiration is tomorrow today at 0:00:00
$user, // owner
'', // keywords
[], // categories
$filename, // name of file
'file1.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0 // sequence
);
$this->assertIsObject($document);
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
$documents = self::$dms->getDocumentsExpired(0); /* Docs expire today */
$this->assertIsArray($documents);
$this->assertCount(1, $documents);
$documents = self::$dms->getDocumentsExpired(date('Y-m-d')); /* Docs expire today */
$this->assertIsArray($documents);
$this->assertCount(1, $documents);
$documents = self::$dms->getDocumentsExpired(1); /* Docs expire till tomorrow 23:59:59 */
$this->assertIsArray($documents);
$this->assertCount(2, $documents);
$documents = self::$dms->getDocumentsExpired(date('Y-m-d', time()+86400)); /* Docs expire till tomorrow 23:59:59 */
$this->assertIsArray($documents);
$this->assertCount(2, $documents);
$documents = self::$dms->getDocumentsExpired(date('Y-m-d', time()+86400), $user); /* Docs expire till tomorrow 23:59:59 owned by $user */
$this->assertIsArray($documents);
$this->assertCount(2, $documents);
}
/**
* Test getDocumentsExpired()
*
* Create two documents which have expired yesterday and the day before
* yesterday
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetDocumentsExpiredPast()
{
self::createSimpleFolderStructure();
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertInstanceOf(SeedDMS_Core_Folder::class, $rootfolder);
$this->assertEquals(1, $rootfolder->getId());
/* Add a new document */
$filename = self::createTempFile(200);
list($document, $res) = $rootfolder->addDocument(
'Document 1', // name
'', // comment
mktime(0,0,0)-1, // expiration was yesterday
$user, // owner
'', // keywords
[], // categories
$filename, // name of file
'file1.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0 // sequence
);
$this->assertIsObject($document);
list($document, $res) = $rootfolder->addDocument(
'Document 2', // name
'', // comment
mktime(0,0,0)-1-86400, // expiration the day before yesterday
$user, // owner
'', // keywords
[], // categories
$filename, // name of file
'file1.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0 // sequence
);
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
$this->assertIsObject($document);
$documents = self::$dms->getDocumentsExpired(0); /* No Docs expire today */
$this->assertIsArray($documents);
$this->assertCount(0, $documents);
$documents = self::$dms->getDocumentsExpired(-1); /* Docs expired yesterday */
$this->assertIsArray($documents);
$this->assertCount(1, $documents);
$documents = self::$dms->getDocumentsExpired(-2); /* Docs expired since the day before yesterday */
$this->assertIsArray($documents);
$this->assertCount(2, $documents);
}
}

View File

@ -1,295 +0,0 @@
<?php
/**
* Implementation of the category tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* User test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class DocumentCategoryTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test method getName() and setName()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetName()
{
$user = SeedDMS_Core_User::getInstance(1, self::$dms);
$cat = self::$dms->addDocumentCategory('Category 1');
$name = $cat->getName();
$ret = $cat->setName('foo');
$this->assertTrue($ret);
$name = $cat->getName();
$this->assertEquals('foo', $name);
$ret = $cat->setName(' ');
$this->assertFalse($ret);
}
/**
* Test method addCategories(), hasCategory(), setCategory()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testAddCategoryToDocument()
{
$rootfolder = self::$dms->getRootFolder();
$user = SeedDMS_Core_User::getInstance(1, self::$dms);
/* Add a new document and two categories */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$cat1 = self::$dms->addDocumentCategory('Category 1');
$cat2 = self::$dms->addDocumentCategory('Category 2');
/* There are no categories yet */
$ret = $document->hasCategory($cat1);
$this->assertFalse($ret);
/* Not passing a category yields on error */
$ret = $document->hasCategory(null);
$this->assertFalse($ret);
/* Adding a category ... */
$ret = $document->addCategories([$cat1]);
$this->assertTrue($ret);
/* ... and check if it is there */
$ret = $document->hasCategory($cat1);
$this->assertTrue($ret);
/* There should be one category now */
$cats = $document->getCategories();
$this->assertIsArray($cats);
$this->assertCount(1, $cats);
$this->assertEquals($cat1->getName(), $cats[0]->getName());
/* Adding the same category shouldn't change anything */
$ret = $document->addCategories([$cat1]);
$this->assertTrue($ret);
/* Check if category is used */
$ret = $cat1->isUsed();
$this->assertTrue($ret);
$ret = $cat2->isUsed();
$this->assertFalse($ret);
/* There is one document with cat 1 but none with cat 2 */
$docs = $cat1->getDocumentsByCategory();
$this->assertIsArray($docs);
$this->assertCount(1, $docs);
$num = $cat1->countDocumentsByCategory();
$this->assertEquals(1, $num);
$docs = $cat2->getDocumentsByCategory();
$this->assertIsArray($docs);
$this->assertCount(0, $docs);
$num = $cat2->countDocumentsByCategory();
$this->assertEquals(0, $num);
/* Still only one category */
$cats = $document->getCategories();
$this->assertIsArray($cats);
$this->assertCount(1, $cats);
/* Setting new categories will replace the old ones */
$ret = $document->setCategories([$cat1, $cat2]);
$this->assertTrue($ret);
/* Now we have two categories */
$cats = $document->getCategories();
$this->assertIsArray($cats);
$this->assertCount(2, $cats);
/* Remove a category */
$ret = $document->removeCategories([$cat1]);
$this->assertTrue($ret);
/* Removing the same category again does not harm*/
$ret = $document->removeCategories([$cat1]);
$this->assertTrue($ret);
/* We are back to one category */
$cats = $document->getCategories();
$this->assertIsArray($cats);
$this->assertCount(1, $cats);
/* Remove the remaining category from the document */
$ret = $document->removeCategories($cats);
$this->assertTrue($ret);
/* No category left */
$cats = $document->getCategories();
$this->assertIsArray($cats);
$this->assertCount(0, $cats);
/* Remove the category itself */
$cats = self::$dms->getDocumentCategories();
$this->assertIsArray($cats);
$this->assertCount(2, $cats);
$ret = $cat1->remove();
$cats = self::$dms->getDocumentCategories();
$this->assertIsArray($cats);
$this->assertCount(1, $cats);
}
/**
* Test method getCategories() with sql fail
*
* @return void
*/
public function testGetCategoriesSqlFail()
{
$document = $this->getMockedDocument();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT * FROM `tblCategory` WHERE"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($document->getCategories());
}
/**
* Test method addCategories() with sql fail
*
* @return void
*/
public function testAddCategoriesSqlFail()
{
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
/* mock sql statement in getCategories() which is called in addCategories() */
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT * FROM `tblCategory` WHERE"))
->willReturn([]);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("INSERT INTO `tblDocumentCategory`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document = $this->getMockedDocument();
$document->setDMS($dms);
$cat = new SeedDMS_Core_DocumentCategory(1, 'Category');
$cat->setDMS($dms);
$this->assertFalse($document->addCategories([$cat]));
}
/**
* Test method removeCategories() with sql fail
*
* @return void
*/
public function testRemoveCategoriesSqlFail()
{
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("DELETE FROM `tblDocumentCategory` WHERE"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document = $this->getMockedDocument();
$document->setDMS($dms);
$cat = new SeedDMS_Core_DocumentCategory(1, 'Category');
$cat->setDMS($dms);
$this->assertFalse($document->removeCategories([$cat]));
}
/**
* Test method setCategories() with sql fail when deleting categories
*
* @return void
*/
public function testSetCategoriesSqlFail()
{
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("DELETE FROM `tblDocumentCategory` WHERE"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document = $this->getMockedDocument();
$document->setDMS($dms);
$cat = new SeedDMS_Core_DocumentCategory(1, 'Category');
$cat->setDMS($dms);
$this->assertFalse($document->setCategories([$cat]));
}
/**
* Test method setCategories() with sql fail when inserting new categories
*
* @return void
*/
public function testSetCategoriesSqlFail2()
{
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->exactly(2))
->method('getResult')
->will(
$this->returnValueMap(
array(
array("DELETE FROM `tblDocumentCategory` WHERE `documentID` = 1", true, true),
array("INSERT INTO `tblDocumentCategory`", true, false)
)
)
);
$dms = new SeedDMS_Core_DMS($db, '');
$document = $this->getMockedDocument();
$document->setDMS($dms);
$cat = new SeedDMS_Core_DocumentCategory(1, 'Category');
$cat->setDMS($dms);
$this->assertFalse($document->setCategories([$cat]));
}
}

View File

@ -1,593 +0,0 @@
<?php
/**
* Implementation of the document content tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* Group test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class DocumentContentTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test method getContent(), getContentByVersion(), getLatestContent()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetContent()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$version = $document->getContentByVersion(1);
$this->assertIsObject($version);
$this->assertEquals($version->getId(), $lcontent->getId());
$content = $document->getContent();
$this->assertIsArray($content);
$this->assertCount(1, $content);
$this->assertEquals($version->getId(), $content[0]->getId());
}
/**
* Test method getContent() mit sql fail
*
* @return void
*/
public function testGetContentSqlFail()
{
$document = $this->getMockedDocument();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT * FROM `tblDocumentContent` WHERE `document` "))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($document->getContent());
}
/**
* Test method getContentByVersion() mit sql fail
*
* @return void
*/
public function testGetContentByVersionSqlFail()
{
$document = $this->getMockedDocument();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT * FROM `tblDocumentContent` WHERE `document` "))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($document->getContentByVersion(1));
}
/**
* Test method getLatestContent() mit sql fail
*
* @return void
*/
public function testGetLatestContentSqlFail()
{
$document = $this->getMockedDocument();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT * FROM `tblDocumentContent` WHERE `document` "))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($document->getLatestContent());
}
/**
* Test method removeContent()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testRemoveContent()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
/* Removing the only version will fail */
$ret = $document->removeContent($lcontent);
$this->assertFalse($ret);
/* Add a new version */
$filename = self::createTempFile(300);
$result = $document->addContent('', $user, $filename, 'file2.txt', '.txt', 'text/plain');
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
$this->assertIsObject($result);
$this->assertIsObject($result->getContent());
/* Second trial to remove a version. Now it succeeds because it is not
* the last version anymore.
*/
$ret = $document->removeContent($lcontent);
$this->assertTrue($ret);
/* The latest version is now version 2 */
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$this->assertEquals(2, $lcontent->getVersion());
/* There is only 1 version left */
$contents = $document->getContent();
$this->assertIsArray($contents);
$this->assertCount(1, $contents);
}
/**
* Test method isType()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testIsType()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$ret = $lcontent->isType('documentcontent');
$this->assertTrue($ret);
}
/**
* Test method getUser(), getDocument()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testVarious()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$ret = $lcontent->isType('documentcontent');
$this->assertTrue($ret);
$doc = $lcontent->getDocument();
$this->assertEquals($document->getId(), $doc->getId());
$u = $lcontent->getUser();
$this->assertEquals($user->getId(), $u->getId());
$filetype = $lcontent->getFileType();
$this->assertEquals('.txt', $filetype);
$origfilename = $lcontent->getOriginalFileName();
$this->assertEquals('file1.txt', $origfilename);
}
/**
* Test method getComment(), setComment()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetComment()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$comment = $lcontent->getComment();
$this->assertEquals('', $comment);
$ret = $lcontent->setComment('Document content comment');
$this->assertTrue($ret);
/* Retrieve the document content from the database again */
$content = self::$dms->getDocumentContent($lcontent->getId());
$comment = $content->getComment();
$this->assertEquals('Document content comment', $comment);
}
/**
* Test method getDate(), setDate()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetDate()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$date = $lcontent->getDate();
$this->assertIsInt($date);
$this->assertGreaterThanOrEqual(time(), $date);
/* Set date as timestamp */
$ret = $lcontent->setDate($date-1000);
$this->assertTrue($ret);
/* Retrieve the document content from the database again */
$content = self::$dms->getDocumentContent($lcontent->getId());
$newdate = $content->getDate();
$this->assertEquals($date-1000, $newdate);
/* Set date in Y-m-d H:i:s format */
$date = time()-500;
$ret = $lcontent->setDate(date('Y-m-d H:i:s', $date));
$this->assertTrue($ret);
/* Retrieve the document content from the database again */
$content = self::$dms->getDocumentContent($lcontent->getId());
$newdate = $content->getDate();
$this->assertEquals($date, $newdate);
/* Not passing a date will set the current date/time */
$date = time();
$ret = $lcontent->setDate();
$this->assertTrue($ret);
/* Retrieve the document content from the database again */
$content = self::$dms->getDocumentContent($lcontent->getId());
$newdate = $content->getDate();
$this->assertEquals($date, $newdate);
}
/**
* Test method getFileSize(), setFileSize()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetFileSize()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1', 200);
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$filesize = $lcontent->getFileSize();
$this->assertEquals(200, $filesize);
/* Intentially corrupt the file size */
$db = self::$dms->getDb();
$ret = $db->getResult("UPDATE `tblDocumentContent` SET `fileSize` = 300 WHERE `document` = " . $document->getID() . " AND `version` = " . $lcontent->getVersion());
$this->assertTrue($ret);
$corcontent = self::$dms->getDocumentContent($lcontent->getId());
$filesize = $corcontent->getFileSize();
$this->assertEquals(300, $filesize);
/* Repair filesize by calling setFileSize() */
$ret = $corcontent->setFileSize();
$this->assertTrue($ret);
$filesize = $corcontent->getFileSize();
$this->assertEquals(200, $filesize);
}
/**
* Test method getChecksum(), setChecksum()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetChecksum()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1', 200);
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$orgchecksum = $lcontent->getChecksum();
$this->assertIsString($orgchecksum);
$this->assertEquals(32, strlen($orgchecksum));
/* Intentially corrupt the checksum */
$db = self::$dms->getDb();
$ret = $db->getResult("UPDATE `tblDocumentContent` SET `checksum` = 'foobar' WHERE `document` = " . $document->getID() . " AND `version` = " . $lcontent->getVersion());
$this->assertTrue($ret);
$corcontent = self::$dms->getDocumentContent($lcontent->getId());
$checksum = $corcontent->getChecksum();
$this->assertEquals('foobar', $checksum);
/* Repair filesize by calling setChecksum() */
$ret = $corcontent->setChecksum();
$this->assertTrue($ret);
$checksum = $corcontent->getChecksum();
$this->assertEquals($orgchecksum, $checksum);
}
/**
* Test method getStatus(), setStatus(), getStatusLog()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetStatus()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1', 200);
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$status = $lcontent->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
$statuslog = $lcontent->getStatusLog();
$this->assertIsArray($statuslog);
$this->assertCount(1, $statuslog);
/* Missing update user returns false */
$ret = $lcontent->setStatus(S_OBSOLETE, '', null);
$this->assertFalse($ret);
/* A status out of range returns false */
$ret = $lcontent->setStatus(9, '', $user);
$this->assertFalse($ret);
/* A wrong date returns false */
$ret = $lcontent->setStatus(S_OBSOLETE, '', $user, '2021-02-29 10:10:10');
$this->assertFalse($ret);
$ret = $lcontent->setStatus(S_OBSOLETE, 'No longer valid', $user, date('Y-m-d H:i:s'));
$status = $lcontent->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_OBSOLETE, $status['status']);
/* Status log has now 2 entries */
$statuslog = $lcontent->getStatusLog();
$this->assertIsArray($statuslog);
$this->assertCount(2, $statuslog);
/* Add the 'onSetStatus' callback */
$callret = '';
$callback = function ($param, $content, $updateuser, $oldstatus, $newstatus) use (&$callret) {
$callret = $oldstatus.' to '.$newstatus;
return $param;
};
/* Because the callback will return false, the status will not be set */
self::$dms->setCallback('onSetStatus', $callback, false);
/* Trying to go back to status released with a callback returning false */
$ret = $lcontent->setStatus(S_RELEASED, 'Valid again', $user);
$status = $lcontent->getStatus();
$this->assertIsArray($status);
/* Status is still S_OBSOLETE because the callback returned false */
$this->assertEquals(S_OBSOLETE, $status['status']);
$this->assertEquals(S_OBSOLETE.' to '.S_RELEASED, $callret);
/* Do it again, but this time the callback returns true */
self::$dms->setCallback('onSetStatus', $callback, true);
/* Trying to go back to status released with a callback returning true */
$ret = $lcontent->setStatus(S_RELEASED, 'Valid again', $user);
$status = $lcontent->getStatus();
$this->assertIsArray($status);
/* Status updated to S_RELEASED because the callback returned true */
$this->assertEquals(S_RELEASED, $status['status']);
$this->assertEquals(S_OBSOLETE.' to '.S_RELEASED, $callret);
/* Status log has now 3 entries */
$statuslog = $lcontent->getStatusLog();
$this->assertIsArray($statuslog);
$this->assertCount(3, $statuslog);
/* Get just the last entry */
$statuslog = $lcontent->getStatusLog(1);
$this->assertIsArray($statuslog);
$this->assertCount(1, $statuslog);
$this->assertEquals('Valid again', $statuslog[0]['comment']);
}
/**
* Test method getMimeType(), setMimeType()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetMimeType()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1', 200);
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$ret = $lcontent->setMimeType('text/csv');
$this->assertTrue($ret);
/* Retrieve the document content from the database again */
$content = self::$dms->getDocumentContent($lcontent->getId());
$this->assertIsObject($content);
$this->assertEquals('text/csv', $content->getMimeType());
}
/**
* Test method getFileType(), setFileType()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetFileType()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1', 200);
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$ret = $lcontent->setMimeType('text/css');
$this->assertTrue($ret);
$ret = $lcontent->setFileType();
$this->assertTrue($ret);
/* Retrieve the document content from the database again */
$content = self::$dms->getDocumentContent($lcontent->getId());
$this->assertIsObject($content);
$this->assertEquals('.css', $content->getFileType());
/* Also get the file content to ensure the renaming of the file
* on disc has succeeded.
*/
$c = file_get_contents(self::$dms->contentDir.$lcontent->getPath());
$this->assertEquals(200, strlen($c));
}
/**
* Test method replaceContent()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testReplaceContent()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$guest = self::$dms->getUser(2);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1', 200);
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
$filename = self::createTempFile(300);
/* Not using the same user yields an error */
$ret = $document->replaceContent(1, $guest, $filename, 'file1.txt', '.txt', 'text/plain');
$this->assertFalse($ret);
/* Not using the same orig. file name yields an error */
$ret = $document->replaceContent(1, $user, $filename, 'file2.txt', '.txt', 'text/plain');
$this->assertFalse($ret);
/* Not using the same file type yields an error */
$ret = $document->replaceContent(1, $user, $filename, 'file1.txt', '.csv', 'text/plain');
$this->assertFalse($ret);
/* Not using the same mime type yields an error */
$ret = $document->replaceContent(1, $user, $filename, 'file1.txt', '.txt', 'text/csv');
$this->assertFalse($ret);
/* Setting version to 0 will replace the latest version */
$ret = $document->replaceContent(0, $user, $filename, 'file1.txt', '.txt', 'text/plain');
$this->assertTrue($ret);
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
/* Retrieve the document content from the database again */
$newcontent = $document->getLatestContent();
$this->assertIsObject($newcontent);
$this->assertEquals('text/plain', $newcontent->getMimeType());
/* File size has grown from 200 to 300 bytes */
$filesize = $newcontent->getFileSize();
$this->assertEquals(300, $filesize);
/* Still version 1 */
$version = $newcontent->getVersion();
$this->assertEquals(1, $version);
}
/**
* Test method replaceContent()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAccessMode()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$guest = self::$dms->getUser(2);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1', 200);
$this->assertIsObject($document);
$lcontent = $document->getLatestContent();
$this->assertIsObject($lcontent);
/* Access rights on a document content are always M_READ unless the callback
* onCheckAccessDocumentContent is implemented */
$mode = $lcontent->getAccessMode($user);
$this->assertEquals(M_READ, $mode);
}
}

View File

@ -1,290 +0,0 @@
<?php
/**
* Implementation of the document file tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* Group test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class DocumentFileTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
self::$dbversion = self::$dms->getDBVersion();
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test method getInstance()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetMockedDocumentFile()
{
$user = self::getMockedUser();
$document1 = self::getMockedDocument(1, 'Document 1');
$file = new SeedDMS_Core_DocumentFile(1, $document1, $user->getId(), 'comment', time(), '', '.txt', 'text/plain', 'test.txt', 'name', 1, true);
$this->assertIsObject($file);
$this->assertTrue($file->isType('documentfile'));
$document = $file->getDocument();
$this->assertIsObject($document);
$this->assertTrue($document->isType('document'));
$this->assertEquals('Document 1', $document->getName());
$ispublic = $file->isPublic();
$this->assertTrue($ispublic);
$comment = $file->getComment();
$this->assertEquals('comment', $comment);
$filetype = $file->getFileType();
$this->assertEquals('.txt', $filetype);
$mimetype = $file->getMimeType();
$this->assertEquals('text/plain', $mimetype);
$name = $file->getName();
$this->assertEquals('name', $name);
$origfilename = $file->getOriginalFileName();
$this->assertEquals('test.txt', $origfilename);
$version = $file->getVersion();
$this->assertEquals(1, $version);
$accessmode = $file->getAccessMode($user);
$this->assertEquals(M_READ, $accessmode);
}
/**
* Test method setComment() mit sql fail
*
* @return void
*/
public function testSetCommentSqlFail()
{
$user = self::getMockedUser();
$document = $this->getMockedDocument();
$file = new SeedDMS_Core_DocumentFile(1, $document, $user->getId(), 'comment', time(), '', '.txt', 'text/plain', 'test.txt', 'name', 1, true);
$this->assertIsObject($file);
$this->assertTrue($file->isType('documentfile'));
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE `tblDocumentFiles` SET `comment`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($file->setComment('my comment'));
}
/**
* Test method setName() mit sql fail
*
* @return void
*/
public function testSetNameSqlFail()
{
$user = self::getMockedUser();
$document = $this->getMockedDocument();
$file = new SeedDMS_Core_DocumentFile(1, $document, $user->getId(), 'comment', time(), '', '.txt', 'text/plain', 'test.txt', 'name', 1, true);
$this->assertIsObject($file);
$this->assertTrue($file->isType('documentfile'));
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE `tblDocumentFiles` SET `name`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($file->setName('my name'));
}
/**
* Test method setDate() mit sql fail
*
* @return void
*/
public function testSetDateSqlFail()
{
$user = self::getMockedUser();
$document = $this->getMockedDocument();
$file = new SeedDMS_Core_DocumentFile(1, $document, $user->getId(), 'comment', time(), '', '.txt', 'text/plain', 'test.txt', 'name', 1, true);
$this->assertIsObject($file);
$this->assertTrue($file->isType('documentfile'));
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE `tblDocumentFiles` SET `date`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($file->setDate());
}
/**
* Test method setVersion() mit sql fail
*
* @return void
*/
public function testSetVersionSqlFail()
{
$user = self::getMockedUser();
$document = $this->getMockedDocument();
$file = new SeedDMS_Core_DocumentFile(1, $document, $user->getId(), 'comment', time(), '', '.txt', 'text/plain', 'test.txt', 'name', 1, true);
$this->assertIsObject($file);
$this->assertTrue($file->isType('documentfile'));
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE `tblDocumentFiles` SET `version`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($file->setVersion(1));
}
/**
* Test method setPublic() mit sql fail
*
* @return void
*/
public function testSetPublicnSqlFail()
{
$user = self::getMockedUser();
$document = $this->getMockedDocument();
$file = new SeedDMS_Core_DocumentFile(1, $document, $user->getId(), 'comment', time(), '', '.txt', 'text/plain', 'test.txt', 'name', 1, true);
$this->assertIsObject($file);
$this->assertTrue($file->isType('documentfile'));
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE `tblDocumentFiles` SET `public`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$document->setDMS($dms);
$this->assertFalse($file->setPublic(true));
}
/**
* Test method addDocumentFile(), getDocumentFile()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testAddDocumentFile()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$document = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document);
$tmpfile = self::createTempFile();
$file = $document->addDocumentFile('attachment.txt', 'comment', $user, $tmpfile, 'attachment.txt', '.txt', 'text/plain', 0, true);
$this->assertTrue(SeedDMS_Core_File::removeFile($tmpfile));
$this->assertIsObject($file);
$this->assertTrue($file->isType('documentfile'));
$files = $document->getDocumentFiles();
$this->assertIsArray($files);
$this->assertCount(1, $files);
$file = $files[0];
$document = $file->getDocument();
$this->assertIsObject($document);
$this->assertTrue($document->isType('document'));
$this->assertEquals('Document 1', $document->getName());
$ispublic = $file->isPublic();
$this->assertTrue($ispublic);
$luser = $file->getUser();
$this->assertIsObject($luser);
$this->assertTrue($luser->isType('user'));
$ret = $file->setComment('new comment');
$this->assertTrue($ret);
$comment = $file->getComment();
$this->assertEquals('new comment', $comment);
$ret = $file->setName('new name');
$this->assertTrue($ret);
$name = $file->getName();
$this->assertEquals('new name', $name);
$now = time();
$ret = $file->setDate($now);
$this->assertTrue($ret);
$date = $file->getDate();
$this->assertEquals($now, $date);
$ret = $file->setDate('fail');
$this->assertFalse($ret);
$ret = $file->setVersion(2);
$this->assertTrue($ret);
$version = $file->getVersion();
$this->assertEquals(2, $version);
$ret = $file->setVersion('fail');
$this->assertFalse($ret);
$ret = $file->setPublic(true);
$this->assertTrue($ret);
$ispublic = $file->isPublic();
$this->assertEquals(1, $ispublic);
}
}

View File

@ -1,125 +0,0 @@
<?php
/**
* Implementation of the document link tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* Group test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class DocumentLinkTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
self::$dbversion = self::$dms->getDBVersion();
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test method getInstance()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetMockedDocumentLink()
{
$user = self::getMockedUser();
$document1 = self::getMockedDocument(1, 'Document 1');
$document2 = self::getMockedDocument(2, 'Document 2');
$link = new SeedDMS_Core_DocumentLink(1, $document1, $document2, $user, true);
$this->assertIsObject($link);
$this->assertTrue($link->isType('documentlink'));
$document = $link->getDocument();
$this->assertIsObject($document);
$this->assertTrue($document->isType('document'));
$this->assertEquals('Document 1', $document->getName());
$document = $link->getTarget();
$this->assertIsObject($document);
$this->assertTrue($document->isType('document'));
$this->assertEquals('Document 2', $document->getName());
$ispublic = $link->isPublic();
$this->assertTrue($ispublic);
}
/**
* Test method addDocumentLink(), getDocumentLink()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testAddDocumentLink()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$document1 = self::createDocument($rootfolder, $user, 'Document 1');
$this->assertIsObject($document1);
$document2 = self::createDocument($rootfolder, $user, 'Document 2');
$this->assertIsObject($document2);
$link = $document1->addDocumentLink($document2->getId(), $user->getId(), true);
$this->assertIsObject($link);
$this->assertTrue($link->isType('documentlink'));
$document = $link->getDocument();
$this->assertIsObject($document);
$this->assertTrue($document->isType('document'));
$this->assertEquals('Document 1', $document->getName());
$document = $link->getTarget();
$this->assertIsObject($document);
$this->assertTrue($document->isType('document'));
$this->assertEquals('Document 2', $document->getName());
$ispublic = $link->isPublic();
$this->assertTrue($ispublic);
$luser = $link->getUser();
$this->assertIsObject($luser);
$this->assertTrue($luser->isType('user'));
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,219 +0,0 @@
<?php
/**
* Implementation of the file utils tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* Group test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class FileUtilsTest extends SeedDmsTest
{
/**
* Create temporary directory
*
* @return void
*/
protected function setUp(): void
{
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
exec('rm -rf '.self::$contentdir);
}
/**
* Test method format_filesize()
*
* @return void
*/
public function testFormatFileSize()
{
$this->assertEquals('1 Byte', SeedDMS_Core_File::format_filesize(1));
$this->assertEquals('0 Bytes', SeedDMS_Core_File::format_filesize(0));
$this->assertEquals('1000 Bytes', SeedDMS_Core_File::format_filesize(1000));
$this->assertEquals('1 KiB', SeedDMS_Core_File::format_filesize(1024));
$this->assertEquals('1 KiB', SeedDMS_Core_File::format_filesize(1025));
$this->assertEquals('2 KiB', SeedDMS_Core_File::format_filesize(2047));
$this->assertEquals('1 MiB', SeedDMS_Core_File::format_filesize(1024*1024));
$this->assertEquals('1 GiB', SeedDMS_Core_File::format_filesize(1024*1024*1024));
}
/**
* Test method format_filesize()
*
* @return void
*/
public function testParseFileSize()
{
$this->assertEquals(200, SeedDMS_Core_File::parse_filesize('200B'));
$this->assertEquals(200, SeedDMS_Core_File::parse_filesize('200 B'));
$this->assertEquals(200, SeedDMS_Core_File::parse_filesize('200'));
$this->assertEquals(1024, SeedDMS_Core_File::parse_filesize('1K'));
$this->assertEquals(2*1024*1024, SeedDMS_Core_File::parse_filesize('2M'));
$this->assertEquals(3*1024*1024*1024, SeedDMS_Core_File::parse_filesize('3 G'));
$this->assertEquals(4*1024*1024*1024*1024, SeedDMS_Core_File::parse_filesize('4 T'));
$this->assertFalse(SeedDMS_Core_File::parse_filesize('4 t'));
$this->assertFalse(SeedDMS_Core_File::parse_filesize('-4T'));
}
/**
* Test method fileSize()
*
* @return void
*/
public function testFileSize()
{
$filename = self::createTempFile(200, self::$contentdir);
$this->assertEquals(200, SeedDMS_Core_File::fileSize($filename));
/* Getting the size of a none existing file returns false */
$this->assertFalse(SeedDMS_Core_File::fileSize('foobar'));
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
}
/**
* Test method file_exists()
*
* @return void
*/
public function testFileExists()
{
$filename = self::createTempFile(200, self::$contentdir);
$this->assertTrue(SeedDMS_Core_File::file_exists($filename));
$this->assertFalse(SeedDMS_Core_File::file_exists($filename.'bla'));
$this->assertTrue(SeedDMS_Core_File::removeFile($filename));
}
/**
* Test method fileExtension()
*
* @return void
*/
public function testFileExtension()
{
$this->assertEquals('png', SeedDMS_Core_File::fileExtension('image/png'));
$this->assertEquals('', SeedDMS_Core_File::fileExtension('image/kpng'));
$this->assertEquals('txt', SeedDMS_Core_File::fileExtension('text/plain'));
$this->assertEquals('md', SeedDMS_Core_File::fileExtension('text/markdown'));
}
/**
* Test method moveFile()
*
* @return void
*/
public function testMoveFile()
{
$filename = self::createTempFile(200, self::$contentdir);
$this->assertEquals(200, SeedDMS_Core_File::fileSize($filename));
$ret = SeedDMS_Core_File::moveFile($filename, self::$contentdir.DIRECTORY_SEPARATOR."foobar");
$this->assertTrue($ret);
/* Getting the file size of the old doc must fail now */
$this->assertFalse(SeedDMS_Core_File::fileSize($filename));
/* Getting the file size of the new doc succeds */
$this->assertEquals(200, SeedDMS_Core_File::fileSize(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
$this->assertTrue(SeedDMS_Core_File::removeFile(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
}
/**
* Test method makeDir(), renameDir(), removeDir()
*
* @return void
*/
public function testMakeRenameAndRemoveDir()
{
/* Create a directory and put a file into it */
$ret = SeedDMS_Core_File::makeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar");
system('touch '.self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."tt");
/* Rename the directory */
$ret = SeedDMS_Core_File::renameDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar", self::$contentdir.DIRECTORY_SEPARATOR."bazfoo");
$this->assertTrue($ret);
/* The new must exist and the old one is gone */
$this->assertTrue(is_dir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
$this->assertFalse(is_dir(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
$this->assertTrue(SeedDMS_Core_File::removeDir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
$this->assertFalse(SeedDMS_Core_File::removeDir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
$this->assertFalse(SeedDMS_Core_File::removeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
/* Create a directory, a sub directory and a file */
$ret = SeedDMS_Core_File::makeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar");
$this->assertTrue($ret);
$ret = SeedDMS_Core_File::makeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."bazfoo");
$this->assertTrue($ret);
system('touch '.self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."bazfoo".DIRECTORY_SEPARATOR."tt");
$this->assertTrue(SeedDMS_Core_File::file_exists(self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."bazfoo".DIRECTORY_SEPARATOR."tt"));
$ret = SeedDMS_Core_File::removeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar");
$this->assertTrue($ret);
$this->assertFalse(SeedDMS_Core_File::file_exists(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
$this->assertFalse(SeedDMS_Core_File::file_exists(self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."bazfoo"));
$this->assertFalse(SeedDMS_Core_File::file_exists(self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."bazfoo".DIRECTORY_SEPARATOR."tt"));
}
/**
* Test method makeDir(), copyDir(), removeDir()
*
* @return void
*/
public function testMakeCopyAndRemoveDir()
{
/* Create a directory and put a file into it */
$ret = SeedDMS_Core_File::makeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar");
system('touch '.self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."tt");
/* Rename the directory */
$ret = SeedDMS_Core_File::copyDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar", self::$contentdir.DIRECTORY_SEPARATOR."bazfoo");
$this->assertTrue($ret);
/* The new and the old dir must exist */
$this->assertTrue(is_dir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
$this->assertTrue(is_dir(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
$this->assertTrue(SeedDMS_Core_File::removeDir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
$this->assertTrue(SeedDMS_Core_File::removeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
}
/**
* Test method moveDir()
*
* @return void
*/
public function testMakeAndMoveDir()
{
/* Create a directory and put a file into it */
$ret = SeedDMS_Core_File::makeDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar");
system('touch '.self::$contentdir.DIRECTORY_SEPARATOR."foobar".DIRECTORY_SEPARATOR."tt");
/* Rename the directory */
$ret = SeedDMS_Core_File::moveDir(self::$contentdir.DIRECTORY_SEPARATOR."foobar", self::$contentdir.DIRECTORY_SEPARATOR."bazfoo");
$this->assertTrue($ret);
/* The new must exist and the old dir must be disappeared */
$this->assertTrue(is_dir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
$this->assertFalse(is_dir(self::$contentdir.DIRECTORY_SEPARATOR."foobar"));
$this->assertTrue(SeedDMS_Core_File::removeDir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
$this->assertFalse(is_dir(self::$contentdir.DIRECTORY_SEPARATOR."bazfoo"));
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,410 +0,0 @@
<?php
/**
* Implementation of the group tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* Group test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class GroupTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
self::$dbversion = self::$dms->getDBVersion();
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Create a mock group object
*
* @return SeedDMS_Core_Group
*/
protected function getMockGroup()
{
$user = $this->getMockBuilder(SeedDMS_Core_Group::class)
->onlyMethods([])
->disableOriginalConstructor()->getMock();
return $user;
}
/**
* Create a mock group object
*
* @return SeedDMS_Core_Group
*/
protected function getGroup()
{
$group = new SeedDMS_Core_Group(1, 'foogroup', 'My comment');
return $group;
}
/**
* Create a mock regular user object
*
* @return SeedDMS_Core_User
*/
protected function getUser()
{
$user = new SeedDMS_Core_User(2, 'user', 'pass', 'Joe Baz', 'joe@foo.de', 'en_GB', 'bootstrap', 'My comment', SeedDMS_Core_User::role_user);
return $user;
}
/**
* Test method isType()
*
* @return void
*/
public function testIsType()
{
$group = $this->getGroup();
$this->assertTrue($group->isType('group'));
}
/**
* Test method getName()
*
* @return void
*/
public function testGetName()
{
$group = $this->getGroup();
$this->assertEquals('foogroup', $group->getName());
}
/**
* Test method getName() and setName()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetName()
{
$group = self::$dms->addGroup('Group', '');
$ret = $group->setName('foo');
$this->assertTrue($ret);
$name = $group->getName();
$this->assertEquals('foo', $name);
/* Setting an empty name must fail */
$ret = $group->setName(' ');
$this->assertFalse($ret);
}
/**
* Test method setName()
*
* @return void
*/
public function testSetNameSqlFail()
{
$group = $this->getGroup();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE `tblGroups` SET `name`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$group->setDMS($dms);
$this->assertFalse($group->setName('my name'));
}
/**
* Test method getComment()
*
* @return void
*/
public function testGetComment()
{
$group = $this->getGroup();
$this->assertEquals('My comment', $group->getComment());
}
/**
* Test method getComment() and setComment()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetComment()
{
$group = self::$dms->addGroup('Group', '');
$ret = $group->setComment('foo');
$this->assertTrue($ret);
$comment = $group->getComment();
$this->assertEquals('foo', $comment);
}
/**
* Test method setComment()
*
* @return void
*/
public function testSetCommentSqlFail()
{
$group = $this->getGroup();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResult')
->with($this->stringContains("UPDATE `tblGroups` SET `comment`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$group->setDMS($dms);
$this->assertFalse($group->setComment('my comment'));
}
/**
* Test method getUsers()
*
* @return void
*/
public function testGetUsersSqlFail()
{
$group = $this->getGroup();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("SELECT `tblUsers`.* FROM `tblUsers`"))
->willReturn(false);
$dms = new SeedDMS_Core_DMS($db, '');
$group->setDMS($dms);
$this->assertFalse($group->getUsers());
}
/**
* Test method addUser(), isMember(), and removeUser()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testAddAndRemoveUser()
{
$group = self::$dms->addGroup('Group', '');
if(self::$dms->version[0] == '5')
$role = SeedDMS_Core_User::role_user;
else {
$role = SeedDMS_Core_Role::getInstance(3, self::$dms);
$this->assertIsObject($role);
$this->assertEquals($role->getRole(), SeedDMS_Core_Role::role_user);
}
$user1 = self::$dms->addUser('joe', 'pass', 'Joe Foo', 'joe@foo.de', 'en_GB', 'bootstrap', 'My comment', $role);
$user2 = self::$dms->addUser('sally', 'pass', 'Sally Foo', 'sally@foo.de', 'en_GB', 'bootstrap', 'My comment', $role);
/* Add user1 and user2. user2 is also a manager */
$ret = $group->addUser($user1);
$this->assertTrue($ret);
$ret = $group->addUser($user2, true);
$this->assertTrue($ret);
$users = $group->getUsers();
$this->assertIsArray($users);
$this->assertCount(2, $users);
$ret = $group->removeUser($user1);
$this->assertTrue($ret);
$users = $group->getUsers();
$this->assertIsArray($users);
$this->assertCount(1, $users);
}
/**
* Test method isMember(), toggleManager()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testIsMember()
{
$group = self::$dms->addGroup('Group', '');
$user1 = self::$dms->addUser('joe', 'pass', 'Joe Foo', 'joe@foo.de', 'en_GB', 'bootstrap', 'My comment');
$user2 = self::$dms->addUser('sally', 'pass', 'Sally Foo', 'sally@foo.de', 'en_GB', 'bootstrap', 'My comment');
/* Add user1 and user2. user2 is also a manager */
$ret = $group->addUser($user1);
$this->assertTrue($ret);
$ret = $group->addUser($user2, true);
$this->assertTrue($ret);
/* user1 is a member but not a manager */
$ret = $group->isMember($user1);
$this->assertTrue($ret);
$ret = $group->isMember($user1, true);
$this->assertFalse($ret);
/* user2 is a member and a manager */
$ret = $group->isMember($user2, true);
$this->assertTrue($ret);
}
/**
* Test method toggleManager()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testToggleManager()
{
$group = self::$dms->addGroup('Group', '');
$user1 = self::$dms->addUser('joe', 'pass', 'Joe Foo', 'joe@foo.de', 'en_GB', 'bootstrap', 'My comment');
/* Add user1 */
$ret = $group->addUser($user1);
$this->assertTrue($ret);
/* user1 is a member but not a manager */
$ret = $group->isMember($user1);
$this->assertTrue($ret);
$ret = $group->isMember($user1, true);
$this->assertFalse($ret);
/* Toggle manager mode of user 1 and check again */
$ret = $group->toggleManager($user1);
$ret = $group->isMember($user1, true);
$this->assertTrue($ret);
}
/**
* Test method getUsers()
*
* @return void
*/
public function testGetUsers()
{
$group = $this->getGroup();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
if(self::$dbversion['major'] == 6) {
$db->expects($this->exactly(2))
->method('getResultArray')
->withConsecutive([$this->stringContains("`tblGroupMembers`.`groupID` = '".$group->getId()."'")], [$this->stringContains("SELECT * FROM `tblRoles` WHERE `id` =")])
->willReturnOnConsecutiveCalls(array(array('id'=>2, 'login'=>'user', 'pwd'=>'pass', 'fullName'=>'Joe Baz', 'email'=>'joe@foo.de', 'language'=>'en_GB', 'theme'=>'bootstrap', 'comment'=>'', 'role'=>SeedDMS_Core_User::role_user, 'hidden'=>0, 'role'=>1)), array('id'=>1, 'name'=>'role', 'role'=>1, 'noaccess'=>''));
} else {
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("`tblGroupMembers`.`groupID` = '".$group->getId()."'"))
->willReturn(array(array('id'=>2, 'login'=>'user', 'pwd'=>'pass', 'fullName'=>'Joe Baz', 'email'=>'joe@foo.de', 'language'=>'en_GB', 'theme'=>'bootstrap', 'comment'=>'', 'role'=>SeedDMS_Core_User::role_user, 'hidden'=>0, 'role'=>1)));
}
$dms = new SeedDMS_Core_DMS($db, '');
$group->setDMS($dms);
$users = $group->getUsers();
$this->assertIsArray($users);
$this->assertCount(1, $users);
}
/**
* Test method getManagers()
*
* @return void
*/
public function testGetManagers()
{
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
if(self::$dbversion['major'] == 6) {
$db->expects($this->exactly(2))
->method('getResultArray')
->withConsecutive([$this->stringContains("`manager` = 1")], [$this->stringContains("SELECT * FROM `tblRoles` WHERE `id` =")])
->willReturnOnConsecutiveCalls(array(array('id'=>2, 'login'=>'user', 'pwd'=>'pass', 'fullName'=>'Joe Baz', 'email'=>'joe@foo.de', 'language'=>'en_GB', 'theme'=>'bootstrap', 'comment'=>'', 'role'=>SeedDMS_Core_User::role_user, 'hidden'=>0, 'role'=>1)), array('id'=>1, 'name'=>'role', 'role'=>1, 'noaccess'=>''));
} else {
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains('`manager` = 1'))
->willReturn(array(array('id'=>2, 'login'=>'user', 'pwd'=>'pass', 'fullName'=>'Joe Baz', 'email'=>'joe@foo.de', 'language'=>'en_GB', 'theme'=>'bootstrap', 'comment'=>'', 'role'=>SeedDMS_Core_User::role_user, 'hidden'=>0)));
}
$dms = new SeedDMS_Core_DMS($db, '');
$group = $this->getGroup();
$group->setDMS($dms);
$managers = $group->getManagers();
$this->assertIsArray($managers);
$this->assertCount(1, $managers);
}
/**
* Test method getNotifications()
*
* @return void
*/
public function testGetNotifications()
{
$group = $this->getGroup();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("WHERE `tblNotify`.`groupID` = ".$group->getId()))
->willReturn(array(array('target'=>2, 'targetType'=>'0', 'userID'=>0, 'groupID'=>$group->getId())));
$dms = new SeedDMS_Core_DMS($db, '');
$group->setDMS($dms);
$notifications = $group->getNotifications();
$this->assertIsArray($notifications);
$this->assertCount(1, $notifications);
$this->assertInstanceOf(SeedDMS_Core_Notification::class, $notifications[0]);
}
/**
* Test method getNotifications() with target type
*
* @return void
*/
public function testGetNotificationsWithTargetType()
{
$group = $this->getGroup();
$db = $this->createMock(SeedDMS_Core_DatabaseAccess::class);
$db->expects($this->once())
->method('getResultArray')
->with($this->stringContains("WHERE `tblNotify`.`groupID` = ".$group->getId()." AND `tblNotify`.`targetType` = 1"))
->willReturn(array(array('target'=>2, 'targetType'=>'1', 'userID'=>0, 'groupID'=>$group->getId())));
$dms = new SeedDMS_Core_DMS($db, '');
$group->setDMS($dms);
$notifications = $group->getNotifications(1);
$this->assertIsArray($notifications);
$this->assertCount(1, $notifications);
$this->assertInstanceOf(SeedDMS_Core_Notification::class, $notifications[0]);
}
}

View File

@ -1,147 +0,0 @@
<?php
/**
* Implementation of the keyword tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* User test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class KeywordCategoryTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test method getName() and setName()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetName()
{
$user = SeedDMS_Core_User::getInstance(1, self::$dms);
$cat = self::$dms->addKeywordCategory($user->getId(), 'Category 1');
$name = $cat->getName();
$ret = $cat->setName('foo');
$this->assertTrue($ret);
$name = $cat->getName();
$this->assertEquals('foo', $name);
$ret = $cat->setName(' ');
$this->assertFalse($ret);
}
/**
* Test method getOwner() and setOwner()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetOwner()
{
$user = SeedDMS_Core_User::getInstance(1, self::$dms);
$guest = SeedDMS_Core_User::getInstance(2, self::$dms);
$cat = self::$dms->addKeywordCategory($user->getId(), 'Category 1');
$this->assertIsObject($cat);
$ret = $cat->setOwner($guest);
$this->assertTrue($ret);
$owner = $cat->getOwner();
$this->assertEquals(2, $owner->getId());
$ret = $cat->setOwner(null);
$this->assertFalse($ret);
}
/**
* Test method addKeywordList() and editKeywordList(), getKeywordLists(), removeKeywordList()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetSetEditAndRemoveKeywordList()
{
$user = SeedDMS_Core_User::getInstance(1, self::$dms);
$cat = self::$dms->addKeywordCategory($user->getId(), 'Category 1');
$this->assertIsObject($cat);
$ret = $cat->addKeywordList('foo');
$this->assertTrue($ret);
$ret = $cat->addKeywordList('bar');
$this->assertTrue($ret);
$list = $cat->getKeywordLists();
$this->assertIsArray($list);
$this->assertCount(2, $list);
$ret = $cat->editKeywordList(1, 'baz');
$this->assertTrue($ret);
$ret = $cat->removeKeywordList(1);
$this->assertTrue($ret);
$list = $cat->getKeywordLists();
$this->assertIsArray($list);
$this->assertCount(1, $list);
}
/**
* Test method addKeywordCategory() and remove()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testAndAndRemoveKeywordCategory()
{
$user = SeedDMS_Core_User::getInstance(1, self::$dms);
$cat = self::$dms->addKeywordCategory($user->getId(), 'Category 1');
$this->assertIsObject($cat);
$ret = $cat->addKeywordList('foo');
$this->assertTrue($ret);
$ret = $cat->addKeywordList('bar');
$this->assertTrue($ret);
$ret = $cat->remove();
$this->assertTrue($ret);
}
}

View File

@ -1,477 +0,0 @@
<?php
/**
* Implementation of the review and approval tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* Group test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class ReviewApprovalTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test method addIndReviewer(), addGrpReviewer(), verifyStatus(),
* getReviewStatus(), removeReview(), delIndReviewer()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testReviewDocumentByUserAndGroup()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertIsObject($user);
/* Add a new user who will be the reviewer */
$reviewer = self::$dms->addUser('reviewer', 'reviewer', 'Reviewer One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($reviewer);
/* Add a new group which will be the reviewer */
$reviewergrp = self::$dms->addGroup('reviewer', '');
$this->assertIsObject($reviewergrp);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$content = $document->getLatestContent();
$this->assertIsObject($content);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
/* A missing reviewer or user causes an error */
$ret = $content->addIndReviewer($reviewer, null);
$this->assertEquals(-1, $ret);
/* A missing reviewer or user causes an error */
$ret = $content->addIndReviewer(null, $user);
$this->assertEquals(-1, $ret);
/* Adding a group instead of a user causes an error */
$ret = $content->addIndReviewer($reviewergrp, $user);
$this->assertEquals(-1, $ret);
/* Finally add the reviewer */
$ret = $content->addIndReviewer($reviewer, $user);
$this->assertGreaterThan(0, $ret);
/* Adding the user again will yield in an error */
$ret = $content->addIndReviewer($reviewer, $user);
$this->assertEquals(-3, $ret);
/* Needs to call verifyStatus() in order to recalc the status */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_DRAFT_REV, $newstatus);
/* Get all reviews */
$reviewstatus = $content->getReviewStatus();
$this->assertIsArray($reviewstatus);
$this->assertCount(1, $reviewstatus);
/* Get list of individual und group reviewers */
$reviewers = $content->getReviewers();
$this->assertIsArray($reviewers);
$this->assertCount(2, $reviewers);
$this->assertCount(1, $reviewers['i']);
$this->assertCount(0, $reviewers['g']);
/*
$db = self::$dms->getDB();
$db->createTemporaryTable("ttreviewid", true);
$queryStr = "SELECT * FROM ttreviewid";
$recs = $db->getResultArray($queryStr);
echo $db->getErrorMsg();
var_dump($recs);
*/
/* A missing reviewer or user causes an error */
$ret = $content->addGrpReviewer($reviewergrp, null);
$this->assertEquals(-1, $ret);
/* A missing reviewer or user causes an error */
$ret = $content->addGrpReviewer(null, $user);
$this->assertEquals(-1, $ret);
/* Adding a user instead of a group causes an error */
$ret = $content->addGrpReviewer($reviewer, $user);
$this->assertEquals(-1, $ret);
/* Finally add the reviewer */
$ret = $content->addGrpReviewer($reviewergrp, $user);
$this->assertGreaterThan(0, $ret);
$groupstatus = $reviewergrp->getReviewStatus();
/* Adding the group again will yield in an error */
$ret = $content->addGrpReviewer($reviewergrp, $user);
$this->assertEquals(-3, $ret);
/* Get all reviews */
$reviewstatus = $content->getReviewStatus();
$this->assertIsArray($reviewstatus);
$this->assertCount(2, $reviewstatus);
/* Get list of individual und group reviewers */
$reviewers = $content->getReviewers();
$this->assertIsArray($reviewers);
$this->assertCount(2, $reviewers);
$this->assertCount(1, $reviewers['i']);
$this->assertCount(1, $reviewers['g']);
$userstatus = $reviewer->getReviewStatus();
$groupstatus = $reviewergrp->getReviewStatus();
/* There should be two log entries, one for each reviewer */
$reviewlog = $content->getReviewLog(5);
$this->assertIsArray($reviewlog);
$this->assertCount(2, $reviewlog);
/* Adding a review without a user of reviewer causes an error */
$ret = $content->setReviewByInd($reviewer, null, S_LOG_ACCEPTED, 'Comment of individual reviewer');
$this->assertEquals(-1, $ret);
$ret = $content->setReviewByInd(null, $user, S_LOG_ACCEPTED, 'Comment of individual reviewer');
$this->assertEquals(-1, $ret);
/* Adding a review as an individual but passing a group causes an error */
$ret = $content->setReviewByInd($reviewergrp, $user, S_LOG_ACCEPTED, 'Comment of individual reviewer');
$this->assertEquals(-1, $ret);
/* Individual reviewer reviews document */
$ret = $content->setReviewByInd($reviewer, $user, S_LOG_ACCEPTED, 'Comment of individual reviewer');
$this->assertIsInt(0, $ret);
$this->assertGreaterThan(0, $ret);
/* Get the last 5 review log entries (actually there are just 3 now) */
$reviewlog = $content->getReviewLog(5);
$this->assertIsArray($reviewlog);
$this->assertCount(3, $reviewlog);
$this->assertEquals('Comment of individual reviewer', $reviewlog[0]['comment']);
$this->assertEquals(1, $reviewlog[0]['status']);
/* Needs to call verifyStatus() in order to recalc the status.
* It must not be changed because the group reviewer has not done the
* review.
*/
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_DRAFT_REV, $newstatus);
/* Adding a review without a user of reviewer causes an error */
$ret = $content->setReviewByGrp($reviewergrp, null, S_LOG_ACCEPTED, 'Comment of group reviewer');
$this->assertEquals(-1, $ret);
$ret = $content->setReviewByGrp(null, $user, S_LOG_ACCEPTED, 'Comment of group reviewer');
$this->assertEquals(-1, $ret);
/* Adding a review as an group but passing a user causes an error */
$ret = $content->setReviewByGrp($reviewer, $user, S_LOG_ACCEPTED, 'Comment of group reviewer');
$this->assertEquals(-1, $ret);
/* Group reviewer reviews document */
$ret = $content->setReviewByGrp($reviewergrp, $user, S_LOG_ACCEPTED, 'Comment of group reviewer');
$this->assertIsInt(0, $ret);
$this->assertGreaterThan(0, $ret);
/* Get the last 5 review log entries (actually there are just 4 now) */
$reviewlog = $content->getReviewLog(5);
$this->assertIsArray($reviewlog);
$this->assertCount(4, $reviewlog);
$this->assertEquals('Comment of group reviewer', $reviewlog[0]['comment']);
$this->assertEquals(1, $reviewlog[0]['status']);
/* Now the document has received all reviews */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_RELEASED, $newstatus);
/* Remove the last review of the user */
$userstatus = $reviewer->getReviewStatus($document->getId(), $content->getVersion());
$this->assertIsArray($userstatus);
$this->assertCount(2, $userstatus);
$this->assertCount(1, $userstatus['indstatus']);
$ret = $content->removeReview($userstatus['indstatus'][$document->getId()]['reviewID'], $user, 'Undo review');
$this->assertTrue($ret);
/* Get the last 8 review log entries (actually there are just 5 now) */
$reviewlog = $content->getReviewLog(8);
$this->assertIsArray($reviewlog);
$this->assertCount(5, $reviewlog);
$this->assertEquals('Undo review', $reviewlog[0]['comment']);
$this->assertEquals(0, $reviewlog[0]['status']);
/* Now the document must be back in draft mode */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_DRAFT_REV, $newstatus);
/* Removing the user as a reviewer completly will release the
* document again, because the group reviewer became the only
* reviewer and has done the review already.
*/
$ret = $content->delIndReviewer($reviewer, $user, 'Reviewer removed');
$this->assertIsInt($ret);
$this->assertEquals(0, $ret);
/* Get the last 8 review log entries (actually there are just 6 now) */
$reviewlog = $content->getReviewLog(8);
$this->assertIsArray($reviewlog);
$this->assertCount(6, $reviewlog);
$this->assertEquals('Reviewer removed', $reviewlog[0]['comment']);
$this->assertEquals(-2, $reviewlog[0]['status']);
/* Now the document will be released again */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_RELEASED, $newstatus);
}
/**
* Test method addIndApprover(), addGrpApprover(), verifyStatus(),
* getApprovalStatus(), removeApproval(), delIndApprover()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testApproveDocumentByUserAndGroup()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertIsObject($user);
/* Add a new user who will be the approver */
$approver = self::$dms->addUser('approver', 'approver', 'Approver One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($approver);
/* Add a new group which will be the approver */
$approvergrp = self::$dms->addGroup('approver', '');
$this->assertIsObject($approvergrp);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$content = $document->getLatestContent();
$this->assertIsObject($content);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
/* A missing approver or user causes an error */
$ret = $content->addIndApprover($approver, null);
$this->assertEquals(-1, $ret);
/* A missing approver or user causes an error */
$ret = $content->addIndApprover(null, $user);
$this->assertEquals(-1, $ret);
/* Adding a group instead of a user causes an error */
$ret = $content->addIndApprover($approvergrp, $user);
$this->assertEquals(-1, $ret);
/* Finally add the reviewer */
$ret = $content->addIndApprover($approver, $user);
$this->assertGreaterThan(0, $ret);
/* Adding the user again will yield in an error */
$ret = $content->addIndApprover($approver, $user);
$this->assertEquals(-3, $ret);
/* Needs to call verifyStatus() in order to recalc the status */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_DRAFT_APP, $newstatus);
/* Get all approvals */
$approvalstatus = $content->getApprovalStatus();
$this->assertIsArray($approvalstatus);
$this->assertCount(1, $approvalstatus);
/* Get list of individual und group approvers */
$approvers = $content->getApprovers();
$this->assertIsArray($approvers);
$this->assertCount(2, $approvers);
$this->assertCount(1, $approvers['i']);
$this->assertCount(0, $approvers['g']);
/* A missing approver or user causes an error */
$ret = $content->addGrpApprover($approvergrp, null);
$this->assertEquals(-1, $ret);
/* A missing approver or user causes an error */
$ret = $content->addGrpApprover(null, $user);
$this->assertEquals(-1, $ret);
/* Adding a user instead of a group causes an error */
$ret = $content->addGrpApprover($approver, $user);
$this->assertEquals(-1, $ret);
/* Finally add the reviewer */
$ret = $content->addGrpApprover($approvergrp, $user);
$this->assertGreaterThan(0, $ret);
$groupstatus = $approvergrp->getApprovalStatus();
/* Adding the group again will yield in an error */
$ret = $content->addGrpApprover($approvergrp, $user);
$this->assertEquals(-3, $ret);
/* Get all approvals */
$approvalstatus = $content->getApprovalStatus();
$this->assertIsArray($approvalstatus);
$this->assertCount(2, $approvalstatus);
/* Get list of individual und group approvers */
$approvers = $content->getApprovers();
$this->assertIsArray($approvers);
$this->assertCount(2, $approvers);
$this->assertCount(1, $approvers['i']);
$this->assertCount(1, $approvers['g']);
$userstatus = $approver->getApprovalStatus();
$groupstatus = $approvergrp->getApprovalStatus();
/* There should be two log entries, one for each approver */
$approvallog = $content->getApproveLog(5);
$this->assertIsArray($approvallog);
$this->assertCount(2, $approvallog);
/* Adding a approval without a user of approver causes an error */
$ret = $content->setApprovalByInd($approver, null, S_LOG_ACCEPTED, 'Comment of individual approver');
$this->assertEquals(-1, $ret);
$ret = $content->setApprovalByInd(null, $user, S_LOG_ACCEPTED, 'Comment of individual approver');
$this->assertEquals(-1, $ret);
/* Adding a approval as an individual but passing a group causes an error */
$ret = $content->setApprovalByInd($approvergrp, $user, S_LOG_ACCEPTED, 'Comment of individual approver');
$this->assertEquals(-1, $ret);
/* Individual approver approvals document */
$ret = $content->setApprovalByInd($approver, $user, S_LOG_ACCEPTED, 'Comment of individual approver');
$this->assertIsInt(0, $ret);
$this->assertGreaterThan(0, $ret);
/* Get the last 5 approval log entries (actually there are just 3 now) */
$approvallog = $content->getApproveLog(5);
$this->assertIsArray($approvallog);
$this->assertCount(3, $approvallog);
$this->assertEquals('Comment of individual approver', $approvallog[0]['comment']);
$this->assertEquals(1, $approvallog[0]['status']);
/* Needs to call verifyStatus() in order to recalc the status.
* It must not be changed because the group approver has not done the
* approval.
*/
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_DRAFT_APP, $newstatus);
/* Adding a approval without a user of approver causes an error */
$ret = $content->setApprovalByGrp($approvergrp, null, S_LOG_ACCEPTED, 'Comment of group approver');
$this->assertEquals(-1, $ret);
$ret = $content->setApprovalByGrp(null, $user, S_LOG_ACCEPTED, 'Comment of group approver');
$this->assertEquals(-1, $ret);
/* Adding a approval as an group but passing a user causes an error */
$ret = $content->setApprovalByGrp($approver, $user, S_LOG_ACCEPTED, 'Comment of group approver');
$this->assertEquals(-1, $ret);
/* Group approver approvals document */
$ret = $content->setApprovalByGrp($approvergrp, $user, S_LOG_ACCEPTED, 'Comment of group approver');
$this->assertIsInt(0, $ret);
$this->assertGreaterThan(0, $ret);
/* Get the last 5 approval log entries (actually there are just 4 now) */
$approvallog = $content->getApproveLog(5);
$this->assertIsArray($approvallog);
$this->assertCount(4, $approvallog);
$this->assertEquals('Comment of group approver', $approvallog[0]['comment']);
$this->assertEquals(1, $approvallog[0]['status']);
/* Now the document has received all approvals */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_RELEASED, $newstatus);
/* Remove the last approval of the user */
$userstatus = $approver->getApprovalStatus($document->getId(), $content->getVersion());
$this->assertIsArray($userstatus);
$this->assertCount(2, $userstatus);
$this->assertCount(1, $userstatus['indstatus']);
$ret = $content->removeApproval($userstatus['indstatus'][$document->getId()]['approveID'], $user, 'Undo approval');
$this->assertTrue($ret);
/* Get the last 8 approval log entries (actually there are just 5 now) */
$approvallog = $content->getApproveLog(8);
$this->assertIsArray($approvallog);
$this->assertCount(5, $approvallog);
$this->assertEquals('Undo approval', $approvallog[0]['comment']);
$this->assertEquals(0, $approvallog[0]['status']);
/* Now the document must be back in draft mode */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_DRAFT_APP, $newstatus);
/* Removing the user as a approver completly will release the
* document again, because the group approver became the only
* approver and has done the approval already.
*/
$ret = $content->delIndApprover($approver, $user, 'Approver removed');
$this->assertIsInt($ret);
$this->assertEquals(0, $ret);
/* Get the last 8 approval log entries (actually there are just 6 now) */
$approvallog = $content->getApproveLog(8);
$this->assertIsArray($approvallog);
$this->assertCount(6, $approvallog);
$this->assertEquals('Approver removed', $approvallog[0]['comment']);
$this->assertEquals(-2, $approvallog[0]['status']);
/* Now the document will be released again */
$newstatus = $content->verifyStatus(false, $user);
$this->assertIsInt($newstatus);
$this->assertEquals(S_RELEASED, $newstatus);
}
}

View File

@ -1,365 +0,0 @@
<?php declare(strict_types=1);
/**
* Implementation of the database tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
namespace PHPUnit\Framework;
use PHPUnit\Framework\TestCase;
/**
* Database test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class SeedDmsTest extends TestCase
{
public static $dbh;
public static $dms;
public static $contentdir;
public static $dbversion;
/**
* Create a sqlite database in memory
*
* @return void
*/
public static function createInMemoryDatabase(): object
{
$dbh = new \SeedDMS_Core_DatabaseAccess('sqlite', '', '', '', ':memory:');
$dbh->connect();
$queries = file_get_contents(getenv("SEEDDMS_CORE_SQL"));
// generate SQL query
$queries = explode(";", $queries);
// execute queries
$errorMsg = '';
foreach ($queries as $query) {
//echo $query;
$query = trim($query);
if (!empty($query)) {
$dbh->getResult($query);
if ($dbh->getErrorNo() != 0) {
//echo $dbh->getErrorMsg()."\n";
$errorMsg .= $dbh->getErrorMsg()."\n";
}
}
}
return $dbh;
}
/**
* Create a mocked root folder object
*
* @return \SeedDMS_Core_Folder
*/
protected function getMockedRootFolder($id=1, $name='DMS')
{
$folder = new \SeedDMS_Core_Folder($id, $name, 0, 'DMS root', time(), 1, 0, 0, 0.0);
return $folder;
}
/**
* Create a mocked document object
*
* @return \SeedDMS_Core_Document
*/
protected function getMockedDocument($id=1, $name='Document')
{
$document = new \SeedDMS_Core_Document($id, $name, '', time(), null, 1, 1, 1, M_READ, 0, '', 1.0);
return $document;
}
/**
* Create a mocked user object
*
* @return \SeedDMS_Core_User
*/
protected function getMockedUser()
{
$user = new \SeedDMS_Core_User(1, 'login', '', 'New User', 'email@seeddms.org', 'de_DE', 'bootstrap', '', null);
return $user;
}
/**
* Create a temporary file with random content and the given length.
*
* @param integer $length length of file
*
* @return string name of temporary file
*/
protected static function createTempFile($length=200, $dir='')
{
if($tmpfname = @tempnam($dir ? $dir : sys_get_temp_dir(), 'foo')) {
file_put_contents($tmpfname, substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', (int) ceil($length/strlen($x)) )),1,$length));
return $tmpfname;
} else
return false;
}
/**
* Create a temporary directory with random name in systems temp dir.
*
* @param integer $mode access mode of new directory
*
* @return string name of temporary directory
*/
protected static function createTempDir(string $dir = null, int $mode = 0700): string {
/* Use the system temp dir by default. */
if (is_null($dir)) {
$dir = sys_get_temp_dir();
}
do { $tmp = $dir . '/' . mt_rand(); }
while (!@mkdir($tmp, $mode));
return $tmp;
}
/**
* Create a simple document.
*
* @param \SeedDMS_Core_Folder $parent parent folder
* @param \SeedDMS_Core_User $owner owner of document
* @param string $name name of document
* @param integer $length length of file
*
* @return string name of temporary file
*/
protected static function createDocument($parent, $owner, $name, $length=200)
{
$filename = self::createTempFile($length);
list($document, $res) = $parent->addDocument(
$name, // name
'', // comment
null, // no expiration
$owner, // owner
'', // keywords
[], // categories
$filename, // name of file
'file1.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0 // sequence
);
unlink($filename);
return $document;
}
/**
* Create a simple folder structure without documents
*
* DMS root -+- Subfolder 1 -+- Subsubfolder 1 -+- Subsubsubfolder 1
* |
* +- Subfolder 2
* |
* +- Subfolder 3
*
* The sequence field of Subfolder x is:
* Subfolder 1: 2.0
* Subfolder 2: 1.0
* Subfolder 1: 0.5
*
* @return void
*/
protected static function createSimpleFolderStructure()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
/* Set up a folder structure */
$subfolder = $rootfolder->addSubFolder('Subfolder 1', '', $user, 2.0);
$subsubfolder = $subfolder->addSubFolder('Subsubfolder 1', '', $user, 1.0);
$subsubsubfolder = $subsubfolder->addSubFolder('Subsubsubfolder 1', '', $user, 1.0);
$rootfolder->addSubFolder('Subfolder 2', '', $user, 1.0);
$rootfolder->addSubFolder('Subfolder 3', '', $user, 0.5);
}
/**
* Create a simple folder structure with documents
*
* Creates the same folder structure like createSimpleFolderStructure()
* but adds 30 documents to 'Subfolder 1'. They are named 'Document 1'
* to 'Document 30'.
*
* @return void
*/
protected static function createSimpleFolderStructureWithDocuments()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
self::createSimpleFolderStructure();
/* Add documents to 'Subfolder 1' */
$subfolder = self::$dms->getFolderByName('Subfolder 1');
for ($i=1; $i<=15; $i++) {
$filename = self::createTempFile(200);
list($document, $res) = $subfolder->addDocument(
'Document 1-'.$i, // name
'', // comment
null,
$user, // owner
'', // keywords
[], // categories
$filename, // name of file
'file-1-'.$i.'.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0+$i // sequence
);
unlink($filename);
}
/* Add documents to 'Subfolder 2' */
$subfolder = self::$dms->getFolderByName('Subfolder 2');
for ($i=1; $i<=15; $i++) {
$filename = self::createTempFile(200);
list($document, $res) = $subfolder->addDocument(
'Document 2-'.$i, // name
'', // comment
null,
$user, // owner
'', // keywords
[], // categories
$filename, // name of file
'file-2-'.$i.'.txt', // original file name
'.txt', // file type
'text/plain', // mime type
1.0+$i // sequence
);
unlink($filename);
}
}
/**
* Create two groups with 3 users each
* The groups are named 'Group 1' and 'Group 2'. The users in Group 1
* are named 'User-1-1', 'User-1-2', 'User-1-3'. The users in Group 2
* are named 'User-2-1', 'User-2-2', 'User-2-3'.
* The login name is the lower case of the name.
*
* @return void
*/
protected static function createGroupsAndUsers()
{
for($i=1; $i<=2; $i++) {
$group = self::$dms->addGroup('Group '.$i, '');
for($j=1; $j<=3; $j++) {
$user = self::$dms->addUser('user-'.$i.'-'.$j, '', 'User '.$j.' in group '.$i, 'user@seeddms.org', 'en_GB', 'bootstrap', '');
$user->joinGroup($group);
}
}
}
/**
* Creates a workflow with two transitions identical to the traditional
* workflow
*
* NR --- review --> NA -+- approve --> RL
* +- reject --> RJ |
* +- reject ---> RJ
*
* States:
* NR = needs review
* NA = needs approval
* RL = released
* RJ = rejected
*
* Actions:
* review
* approve
* reject
*
* Transitions:
* NR -- review -> NA maybe done by reviewer
* NR -- reject -> RJ maybe done by reviewer
* NA -- approve -> RL maybe done by approver
* NA -- reject -> RJ maybe done by approver
*/
protected function createWorkflow(\SeedDMS_Core_User $reviewer, \SeedDMS_Core_User $approver): \SeedDMS_Core_Workflow
{
/* Create workflow states */
$ws_nr = self::$dms->addWorkflowState('needs review', S_IN_WORKFLOW);
$ws_na = self::$dms->addWorkflowState('needs approval', S_IN_WORKFLOW);
$ws_rl = self::$dms->addWorkflowState('released', S_RELEASED);
$ws_rj = self::$dms->addWorkflowState('rejected', S_REJECTED);
/* Create workflow actions */
$wa_rv = self::$dms->addWorkflowAction('review', S_IN_WORKFLOW);
$wa_rj = self::$dms->addWorkflowAction('reject', S_REJECTED);
$wa_ap = self::$dms->addWorkflowAction('approve', S_RELEASED);
/* Create a workflow which starts in state 'needs review' */
$workflow = self::$dms->addWorkflow('traditional workflow', $ws_nr);
/* Add transition NR -- review -> NA */
$wt_nr_na = $workflow->addTransition($ws_nr, $wa_rv, $ws_na, [$reviewer], []);
/* Add transition NR -- review -> RJ */
$wt_nr_rj = $workflow->addTransition($ws_nr, $wa_rj, $ws_rj, [$reviewer], []);
/* Add transition NA -- approve -> RL */
$wt_na_rl = $workflow->addTransition($ws_na, $wa_ap, $ws_rl, [$approver], []);
/* Add transition NA -- reject -> RJ */
$wt_na_rj = $workflow->addTransition($ws_na, $wa_rj, $ws_rj, [$approver], []);
return $workflow;
}
/**
* Creates a workflow with one transitions for approving a document
*
* NA -+- approve --> RL
* |
* +- reject ---> RJ
*
* States:
* NA = needs approval
* RL = released
* RJ = rejected
*
* Actions:
* approve
* reject
*
* Transitions:
* NA -- approve -> RL maybe done by approver
* NA -- reject -> RJ maybe done by approver
*/
protected function createSimpleWorkflow(\SeedDMS_Core_User $approver): \SeedDMS_Core_Workflow
{
/* Create workflow states */
$ws_na = self::$dms->addWorkflowState('simple needs approval', S_IN_WORKFLOW);
$ws_rl = self::$dms->addWorkflowState('simple released', S_RELEASED);
$ws_rj = self::$dms->addWorkflowState('simple rejected', S_REJECTED);
/* Create workflow actions */
$wa_rj = self::$dms->addWorkflowAction('simple reject', S_REJECTED);
$wa_ap = self::$dms->addWorkflowAction('simple approve', S_RELEASED);
/* Create a workflow which starts in state 'needs approval' */
$workflow = self::$dms->addWorkflow('simple workflow', $ws_na);
/* Add transition NA -- approve -> RL */
$wt_na_rl = $workflow->addTransition($ws_na, $wa_ap, $ws_rl, [$approver], []);
/* Add transition NA -- reject -> RJ */
$wt_na_rj = $workflow->addTransition($ws_na, $wa_rj, $ws_rj, [$approver], []);
return $workflow;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,638 +0,0 @@
<?php
/**
* Implementation of the workflow tests
*
* PHP version 7
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version @package_version@
* @link https://www.seeddms.org
*/
use PHPUnit\Framework\SeedDmsTest;
/**
* Group test class
*
* @category SeedDMS
* @package Tests
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright 2021 Uwe Steinmann
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License
* @version Release: @package_version@
* @link https://www.seeddms.org
*/
class WorkflowTest extends SeedDmsTest
{
/**
* Create a real sqlite database in memory
*
* @return void
*/
protected function setUp(): void
{
self::$dbh = self::createInMemoryDatabase();
self::$contentdir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'phpunit-'.time();
mkdir(self::$contentdir);
// echo "Creating temp content dir: ".self::$contentdir."\n";
self::$dms = new \SeedDMS_Core_DMS(self::$dbh, self::$contentdir);
self::$dbversion = self::$dms->getDBVersion();
}
/**
* Clean up at tear down
*
* @return void
*/
protected function tearDown(): void
{
self::$dbh = null;
// echo "\nRemoving temp. content dir: ".self::$contentdir."\n";
exec('rm -rf '.self::$contentdir);
}
/**
* Test method getInitState() and setInitState()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetInitState()
{
$ws_nr = self::$dms->addWorkflowState('needs review', S_IN_WORKFLOW);
$ws_na = self::$dms->addWorkflowState('needs approval', S_IN_WORKFLOW);
$workflow = self::$dms->addWorkflow('traditional workflow', $ws_nr);
$initstate = $workflow->getInitState();
$this->assertEquals($ws_nr->getName(), $initstate->getName());
$ret = $workflow->setInitState($ws_na);
$this->assertTrue($ret);
$initstate = $workflow->getInitState();
$this->assertEquals($ws_na->getName(), $initstate->getName());
}
/**
* Test method getName() and setName()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetStateName()
{
$state = self::$dms->addWorkflowState('needs review', S_IN_WORKFLOW);
$name = $state->getName();
$this->assertEquals('needs review', $name);
$ret = $state->setName('foobar');
$this->assertTrue($ret);
$name = $state->getName();
$this->assertEquals('foobar', $name);
}
/**
* Test method getName() and setName()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetActionName()
{
$action = self::$dms->addWorkflowAction('action');
$name = $action->getName();
$this->assertEquals('action', $name);
$ret = $action->setName('foobar');
$this->assertTrue($ret);
$name = $action->getName();
$this->assertEquals('foobar', $name);
}
/**
* Test method getName() and setName()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetWorkflowName()
{
$ws_nr = self::$dms->addWorkflowState('needs review', S_IN_WORKFLOW);
$workflow = self::$dms->addWorkflow('traditional workflow', $ws_nr);
$name = $workflow->getName();
$this->assertEquals('traditional workflow', $name);
$ret = $workflow->setName('foo');
$this->assertTrue($ret);
$name = $workflow->getName();
$this->assertEquals('foo', $name);
}
/**
* Test method getDocumentStatus() and setDocumentStatus()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testGetAndSetDocumentStatus()
{
$state = self::$dms->addWorkflowState('some name', S_RELEASED);
$docstatus = $state->getDocumentStatus();
$this->assertEquals(S_RELEASED, $docstatus);
$ret = $state->setDocumentStatus(S_REJECTED);
$this->assertTrue($ret);
$docstatus = $state->getDocumentStatus();
$this->assertEquals(S_REJECTED, $docstatus);
}
/**
* Test method workflow->remove()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testCreateAndRemoveWorkflow()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertIsObject($user);
/* Add a new user who will be the reviewer */
$reviewer = self::$dms->addUser('reviewer', 'reviewer', 'Reviewer One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($reviewer);
/* Add a new user who will be the approver */
$approver = self::$dms->addUser('approver', 'approver', 'Approver One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($approver);
$workflow = self::createWorkflow($reviewer, $approver);
$this->assertIsObject($workflow);
$ret = $workflow->remove();
$this->assertTrue($ret);
$states = self::$dms->getAllWorkflowStates();
$this->assertIsArray($states);
$this->assertCount(4, $states);
foreach($states as $state)
$this->assertFalse($state->isUsed());
$actions = self::$dms->getAllWorkflowActions();
$this->assertIsArray($actions);
$this->assertCount(3, $actions);
foreach($actions as $action)
$this->assertFalse($action->isUsed());
}
/**
* Test method remove()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testCreateAndRemoveAction()
{
$action = self::$dms->addWorkflowAction('action');
$this->assertIsObject($action);
$actions = self::$dms->getAllWorkflowActions();
$this->assertIsArray($actions);
$this->assertCount(1, $actions);
$ret = $action->remove();
$this->assertTrue($ret);
$actions = self::$dms->getAllWorkflowActions();
$this->assertIsArray($actions);
$this->assertCount(0, $actions);
}
/**
* Test method remove()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testCreateAndRemoveState()
{
$state = self::$dms->addWorkflowState('needs review', S_IN_WORKFLOW);
$this->assertIsObject($state);
$states = self::$dms->getAllWorkflowStates();
$this->assertIsArray($states);
$this->assertCount(1, $states);
$ret = $state->remove();
$this->assertTrue($ret);
$states = self::$dms->getAllWorkflowStates();
$this->assertIsArray($states);
$this->assertCount(0, $states);
}
/**
* Test method setWorkflow(), getWorkflow(), getWorkflowState()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testAssignWorkflow()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertIsObject($user);
/* Add a new user who will be the reviewer */
$reviewer = self::$dms->addUser('reviewer', 'reviewer', 'Reviewer One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($reviewer);
/* Add a new user who will be the approver */
$approver = self::$dms->addUser('approver', 'approver', 'Approver One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($approver);
$workflow = self::createWorkflow($reviewer, $approver);
$this->assertIsObject($workflow);
/* Check for cycles */
$cycles = $workflow->checkForCycles();
$this->assertFalse($cycles);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$content = $document->getLatestContent();
$this->assertIsObject($content);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
/* Assign the workflow */
$ret = $content->setWorkflow($workflow, $user);
$this->assertTrue($ret);
/* Assign a workflow again causes an error */
$ret = $content->setWorkflow($workflow, $user);
$this->assertFalse($ret);
/* Get a fresh copy of the content from the database and get the workflow */
$again = self::$dms->getDocumentContent($content->getId());
$this->assertIsObject($again);
$w = $again->getWorkflow();
$this->assertEquals($workflow->getId(), $w->getId());
/* Status of content should be S_IN_WORKFLOW now */
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_IN_WORKFLOW, $status['status']);
/* Get current workflow state */
$state = $content->getWorkflowState();
$this->assertEquals('needs review', $state->getName());
$workflowlog = $content->getWorkflowLog();
$this->assertIsArray($workflowlog);
$this->assertCount(0, $workflowlog);
/* The workflow has altogether 4 states */
$states = $workflow->getStates();
$this->assertIsArray($states);
$this->assertCount(4, $states);
/* Check the initial state */
$initstate = $workflow->getInitState();
$this->assertEquals('needs review', $initstate->getName());
/* init state is definitely used */
$ret = $initstate->isUsed();
$this->assertTrue($ret);
/* init state has two transistions linked to it */
$transitions = $initstate->getTransitions();
$this->assertIsArray($transitions);
$this->assertCount(2, $transitions);
/* Check if workflow is used by any document */
$isused = $workflow->isUsed();
$this->assertTrue($isused);
}
/**
* Test method setWorkflow(), getWorkflow(), getWorkflowState()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testStepThroughWorkflow()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertIsObject($user);
/* Add a new user who will be the reviewer */
$reviewer = self::$dms->addUser('reviewer', 'reviewer', 'Reviewer One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($reviewer);
/* Add a new user who will be the approver */
$approver = self::$dms->addUser('approver', 'approver', 'Approver One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($approver);
$workflow = self::createWorkflow($reviewer, $approver);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$content = $document->getLatestContent();
$this->assertIsObject($content);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
/* Assign the workflow */
$ret = $content->setWorkflow($workflow, $user);
$this->assertTrue($ret);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_IN_WORKFLOW, $status['status']);
/* Remove the workflow */
$ret = $content->removeWorkflow($user);
$this->assertTrue($ret);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
/* Remove the workflow again is just fine */
$ret = $content->removeWorkflow($user);
$this->assertTrue($ret);
/* Assign the workflow again */
$ret = $content->setWorkflow($workflow, $user);
$this->assertTrue($ret);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_IN_WORKFLOW, $status['status']);
/* Check if workflow needs action by the reviewer/approver */
$ret = $content->needsWorkflowAction($reviewer);
$this->assertTrue($ret);
$ret = $content->needsWorkflowAction($approver);
$this->assertFalse($ret);
/* Get current workflow state*/
$state = $content->getWorkflowState();
$this->assertEquals('needs review', $state->getName());
/* There should be two possible transitions now
* NR -- review -> NA
* NR -- reject -> RJ
*/
$nexttransitions = $workflow->getNextTransitions($state);
$this->assertIsArray($nexttransitions);
$this->assertCount(2, $nexttransitions);
/* But of course, there were no previous transitions */
$prevtransitions = $workflow->getPreviousTransitions($state);
$this->assertIsArray($prevtransitions);
$this->assertCount(0, $prevtransitions);
/* Check if reviewer is allowed to trigger the transition.
* As we are still in the intitial state, the possible transitions
* may both be triggered by the reviewer but not by the approver.
*/
foreach($nexttransitions as $nexttransition) {
if($nexttransition->getNextState()->getDocumentStatus() == S_REJECTED)
$rejecttransition = $nexttransition;
elseif($nexttransition->getNextState()->getDocumentStatus() == S_IN_WORKFLOW)
$reviewtransition = $nexttransition;
$ret = $content->triggerWorkflowTransitionIsAllowed($reviewer, $nexttransition);
$this->assertTrue($ret);
$ret = $content->triggerWorkflowTransitionIsAllowed($approver, $nexttransition);
$this->assertFalse($ret);
}
/* Trigger the successful review transition.
* As there is only one reviewer the transition will fire and the workflow
* moves forward into the next state. triggerWorkflowTransition() returns the
* next state.
*/
$nextstate = $content->triggerWorkflowTransition($reviewer, $reviewtransition, 'Review succeeded');
$this->assertIsObject($nextstate);
$this->assertEquals('needs approval', $nextstate->getName());
$state = $content->getWorkflowState();
$this->assertEquals($nextstate->getId(), $state->getId());
$this->assertEquals('needs approval', $state->getName());
/* The workflow log has one entry now */
$workflowlog = $content->getLastWorkflowLog();
$this->assertIsObject($workflowlog);
$this->assertEquals('Review succeeded', $workflowlog->getComment());
/* There should be two possible transitions now
* NA -- approve -> RL
* NA -- reject -> RJ
*/
$nexttransitions = $workflow->getNextTransitions($state);
$this->assertIsArray($nexttransitions);
$this->assertCount(2, $nexttransitions);
/* But of course, there is one previous transitions, the one that led to
* the current state of the workflow.
*/
$prevtransitions = $workflow->getPreviousTransitions($state);
$this->assertIsArray($prevtransitions);
$this->assertCount(1, $prevtransitions);
$this->assertEquals($reviewtransition->getId(), $prevtransitions[0]->getId());
/* Check if approver is allowed to trigger the transition.
* As we are now in 'needs approval' state, the possible transitions
* may both be triggered by the approver but not by the reviewer.
*/
foreach($nexttransitions as $nexttransition) {
if($nexttransition->getNextState()->getDocumentStatus() == S_REJECTED)
$rejecttransition = $nexttransition;
elseif($nexttransition->getNextState()->getDocumentStatus() == S_RELEASED)
$releasetransition = $nexttransition;
$ret = $content->triggerWorkflowTransitionIsAllowed($approver, $nexttransition);
$this->assertTrue($ret);
$ret = $content->triggerWorkflowTransitionIsAllowed($reviewer, $nexttransition);
$this->assertFalse($ret);
}
/* Trigger the successful approve transition.
* As there is only one approver the transition will fire and the workflow
* moves forward into the next state. triggerWorkflowTransition() returns the
* next state.
*/
$nextstate = $content->triggerWorkflowTransition($approver, $releasetransition, 'Approval succeeded');
$this->assertIsObject($nextstate);
$this->assertEquals('released', $nextstate->getName());
/* The workflow log has two entries now */
$workflowlog = $content->getLastWorkflowLog();
$this->assertIsObject($workflowlog);
$this->assertEquals('Approval succeeded', $workflowlog->getComment());
/* Because the workflow has reached a final state, the workflow will no
* longer be attached to the document.
*/
$workflow = $content->getWorkflow();
$this->assertFalse($workflow);
/* There is also no way to get the state anymore */
$state = $content->getWorkflowState();
$this->assertFalse($state);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
/* Even after the workflow has been finished the log can still be retrieved */
$workflowlog = $content->getLastWorkflowLog();
$this->assertIsObject($workflowlog);
$this->assertEquals('Approval succeeded', $workflowlog->getComment());
}
/**
* Test method rewindWorkflow()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testRewindWorkflow()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertIsObject($user);
/* Add a new user who will be the reviewer */
$reviewer = self::$dms->addUser('reviewer', 'reviewer', 'Reviewer One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($reviewer);
/* Add a new user who will be the approver */
$approver = self::$dms->addUser('approver', 'approver', 'Approver One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($approver);
$workflow = self::createWorkflow($reviewer, $approver);
/* Add a new document */
$document = self::createDocument($rootfolder, $user, 'Document 1');
$content = $document->getLatestContent();
$this->assertIsObject($content);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_RELEASED, $status['status']);
/* Assign the workflow */
$ret = $content->setWorkflow($workflow, $user);
$this->assertTrue($ret);
$status = $content->getStatus();
$this->assertIsArray($status);
$this->assertEquals(S_IN_WORKFLOW, $status['status']);
/* Check if workflow needs action by the reviewer */
$ret = $content->needsWorkflowAction($reviewer);
$this->assertTrue($ret);
/* Get current workflow state*/
$state = $content->getWorkflowState();
$this->assertEquals('needs review', $state->getName());
/* There should be two possible transitions now
* NR -- review -> NA
* NR -- reject -> RJ
*/
$nexttransitions = $workflow->getNextTransitions($state);
$this->assertIsArray($nexttransitions);
$this->assertCount(2, $nexttransitions);
/* Check if reviewer is allowed to trigger the transition.
* As we are still in the intitial state, the possible transitions
* may both be triggered by the reviewer but not by the approver.
*/
foreach($nexttransitions as $nexttransition) {
if($nexttransition->getNextState()->getDocumentStatus() == S_IN_WORKFLOW)
$reviewtransition = $nexttransition;
}
/* Trigger the successful review transition.
* As there is only one reviewer the transition will fire and the workflow
* moves forward into the next state. triggerWorkflowTransition() returns the
* next state.
*/
$nextstate = $content->triggerWorkflowTransition($reviewer, $reviewtransition, 'Review succeeded');
$this->assertIsObject($nextstate);
$this->assertEquals('needs approval', $nextstate->getName());
/* Get current workflow state*/
$state = $content->getWorkflowState();
$this->assertEquals('needs approval', $state->getName());
/* The workflow log has one entry now */
$workflowlogs = $content->getWorkflowLog();
$this->assertIsArray($workflowlogs);
$this->assertCount(1, $workflowlogs);
if(self::$dbversion['major'] > 5)
$this->assertEquals('Review succeeded', $workflowlogs[1][0]->getComment());
else
$this->assertEquals('Review succeeded', $workflowlogs[0]->getComment());
$ret = $content->rewindWorkflow();
$this->assertTrue($ret);
/* After rewinding the workflow the initial state is set ... */
$state = $content->getWorkflowState();
$this->assertEquals('needs review', $state->getName());
/* and the workflow log has been cleared */
$workflowlogs = $content->getWorkflowLog();
$this->assertIsArray($workflowlogs);
$this->assertCount(0, $workflowlogs);
}
/**
* Test method getTransitionsByStates()
*
* This method uses a real in memory sqlite3 database.
*
* @return void
*/
public function testTransitionsByStateWorkflow()
{
$rootfolder = self::$dms->getRootFolder();
$user = self::$dms->getUser(1);
$this->assertIsObject($user);
/* Add a new user who will be the reviewer */
$reviewer = self::$dms->addUser('reviewer', 'reviewer', 'Reviewer One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($reviewer);
/* Add a new user who will be the approver */
$approver = self::$dms->addUser('approver', 'approver', 'Approver One', 'user1@seeddms.org', 'en_GB', 'bootstrap', '');
$this->assertIsObject($approver);
$workflow = self::createWorkflow($reviewer, $approver);
/* Check the initial state */
$initstate = $workflow->getInitState();
$this->assertEquals('needs review', $initstate->getName());
/* init state has two transistions linked to it */
$transitions = $initstate->getTransitions();
$this->assertIsArray($transitions);
$this->assertCount(2, $transitions);
$t = $workflow->getTransitionsByStates($initstate, $transitions[1]->getNextState());
$this->assertEquals($transitions[1]->getId(), $t[0]->getId());
}
}

View File

@ -1,94 +0,0 @@
1.1.18 (2023-01-09)
---------------------
- IndexedDocument() accepts a callable for conversion to text
- SeedDMS_Lucene_Search::open and create return itself but Zend_Search_Lucene
1.1.17 (2021-05-10)
---------------------
- close pipes in execWithTimeout(), also return exit code of command
1.1.16 (2020-12-12)
---------------------
- add indexing of folders
1.1.15 (2020-09-10)
---------------------
- 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()
1.1.14 (2020-09-02)
---------------------
- Index users with at least read access on the document
1.1.13 (2018-04-11)
---------------------
- IndexedDocument() remembers cmd and mimetype
1.1.12 (2018-01-30)
---------------------
- execWithTimeout() reads data from stderr and saves it into error msg
1.1.11 (2017-12-04)
---------------------
- allow conversion commands for mimetypes with wildcards
1.1.10 (2017-03-01)
---------------------
- catch exception in execWithTimeout()
1.1.9 (2016-04-28)
---------------------
- pass variables to stream_select() to fullfill strict standards.
- make all functions in Indexer.php static
1.1.8 (2016-03-29)
---------------------
- set last parameter of stream_select() to 200000 micro sec. in case the timeout in sec. is set to 0
1.1.7 (2016-02-01)
---------------------
- add command for indexing postѕcript files
1.1.6 (2015-08-05)
---------------------
- run external commands with a timeout
1.1.5 (2014-07-30)
---------------------
- field for original filename is treated as utf-8
- declare SeeDMS_Lucene_Indexer::open() static
1.1.4 (2013-08-13)
---------------------
- class SeedDMS_Lucene_Search::search returns false if query is invalid instead of an empty result record
1.1.3 (2013-06-27)
---------------------
- explicitly set encoding to utf-8 when adding fields
- do not check if deleting document from index fails, update it in any case
1.1.2 (2013-06-17)
---------------------
- parse query term and catch errors before using it
1.1.1 (2012-12-03)
---------------------
- catch exception if index is opened but not available
1.1.0 (2012-11-06)
---------------------
- use a configurable list of mime type converters, fixed indexing and searching
of special chars like german umlaute.
1.0.1 (2011-11-06)
---------------------
- New Release
0.0.1 (2009-04-27)
---------------------

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,266 +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;
/**
* Run a shell command
*
* @param $cmd
* @param int $timeout
* @return array
* @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();
// 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);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
if ($timeleft <= 0) {
proc_terminate($process);
throw new Exception("command timeout on: " . $cmd);
} else {
$return_value = proc_close($process);
return array('stdout'=>$output, 'stderr'=>$error, 'return'=>$return_value);
}
} /* }}} */
/**
* 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()));
$this->addField(Zend_Search_Lucene_Field::Keyword('record_type', 'document'));
$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'));
$this->addField(Zend_Search_Lucene_Field::UnIndexed('created', $version->getDate()));
if(!$nocontent)
$this->addField(Zend_Search_Lucene_Field::UnIndexed('indexed', time()));
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)) {
$mimetype = $version->getMimeType();
$this->mimetype = $mimetype;
if(is_callable($convcmd)) {
$result = $convcmd($document);
if($result['content']) {
self::setContent($result['content']);
} elseif($result['content'] === false) {
$this->errormsg = $result['errormsg'];
}
$this->cmd = $result['cmd'];
} elseif(is_object($convcmd) && (get_class($convcmd) == 'SeedDMS_ConversionMgr')) {
if($service = $convcmd->getService($mimetype, 'text/plain')) {
$content = $convcmd->convert($path, $mimetype, 'text/plain');
if($content) {
self::setContent($content);
} elseif($content === false) {
$this->errormsg = 'Conversion failed';
}
$this->cmd = get_class($service);
} else {
$this->cmd = 'No service to convert '.$mimetype.' to text/plain';
}
} else {
$content = '';
$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']) {
self::setContent($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::Keyword('record_type', 'folder'));
$this->addField(Zend_Search_Lucene_Field::UnIndexed('created', $document->getDate()));
$this->addField(Zend_Search_Lucene_Field::UnIndexed('indexed', time()));
}
} /* }}} */
public function getErrorMsg() { /* {{{ */
return $this->errormsg;
} /* }}} */
public function getMimeType() { /* {{{ */
return $this->mimetype;
} /* }}} */
public function setContent($data) { /* {{{ */
$this->addField(Zend_Search_Lucene_Field::UnStored('content', $data, 'utf-8'));
} /* }}} */
public function getCmd() { /* {{{ */
return $this->cmd;
} /* }}} */
/* Use only for setting the command if e.g. an extension takes over the
* conversion to txt (like the office extension which uses the collabora
* conversion service).
*/
public function setCmd($cmd) { /* {{{ */
$this->cmd = $cmd;
} /* }}} */
}
?>

View File

@ -1,208 +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;
/**
* @var string $index lucene index
* @access protected
*/
protected $index;
public function __construct($index) {
$this->index = $index;
}
static function open($conf) { /* {{{ */
try {
$index = Zend_Search_Lucene::open($conf['indexdir']);
if($index)
return new self($index);
else
return null;
} catch (Exception $e) {
return null;
}
} /* }}} */
static function create($conf) { /* {{{ */
try {
$index = Zend_Search_Lucene::create($conf['indexdir']);
if($index)
return new self($index);
else
return null;
} catch (Exception $e) {
return null;
}
} /* }}} */
/**
* Do some initialization
*
*/
public 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);
} /* }}} */
/**
* Add document to index
*
* @param object $doc indexed document of class
* SeedDMS_Lucene_IndexedDocument
* @return boolean false in case of an error, otherwise true
*/
function addDocument($doc) { /* {{{ */
if(!$this->index)
return false;
return $this->index->addDocument($doc);
} /* }}} */
/**
* Remove document from index
*
* @param object $id internal id of document
* @return boolean false in case of an error, otherwise true
*/
public function delete($id) { /* {{{ */
if(!$this->index)
return false;
return $this->index->delete($id);
} /* }}} */
/**
* Check if document was deleted
*
* @param object $id internal id of document
* @return boolean true if document was deleted
*/
public function isDeleted($id) { /* {{{ */
if(!$this->index)
return false;
return $this->index->isDeleted($id);
} /* }}} */
/**
* Search in index
*
* @param string $query
* @return array result
*/
public function find($query) { /* {{{ */
if(!$this->index)
return false;
return $this->index->find($query);
} /* }}} */
/**
* Get a single document from index
*
* @param string $id id of document
* @return boolean false in case of an error, otherwise true
*/
public function findById($id) { /* {{{ */
if(!$this->index)
return false;
return $this->index->findById($id);
} /* }}} */
/**
* 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, $content=true) { /* {{{ */
if(!$this->index)
return false;
return $this->index->getDocument($id);
} /* }}} */
/**
* Return list of terms in index
*
* @return array list of Zend_Lucene_Term
*/
public function terms($prefix='', $col='') { /* {{{ */
if(!$this->index)
return false;
return $this->index->terms();
} /* }}} */
/**
* Return number of documents in index
*
* @return interger number of documents
*/
public function count() { /* {{{ */
if(!$this->index)
return false;
return $this->index->count();
} /* }}} */
/**
* Commit changes
*
* This function does nothing!
*/
function commit() { /* {{{ */
if(!$this->index)
return false;
return $this->index->commit();
} /* }}} */
/**
* Optimize index
*
* This function does nothing!
*/
function optimize() { /* {{{ */
if(!$this->index)
return false;
return $this->index->optimize();
} /* }}} */
}
?>

View File

@ -1,160 +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($fields['owner'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= 'owner:'.$fields['owner'];
} elseif(is_array($fields['owner'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(owner:"';
$querystr .= implode('" || owner:"', $fields['owner']);
$querystr .= '")';
}
}
if(!empty($fields['record_type'])) {
if($querystr)
$querystr .= ' && ';
$querystr .= '(record_type:';
$querystr .= implode(' || record_type:', $fields['record_type']);
$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['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,23 +0,0 @@
{
"name": "seeddms/lucene",
"description": "Lucene based fulltext search for SeedDMS ",
"type": "library",
"license": "GPL-2.0-or-later",
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"Seeddms\\Lucene\\": "Lucene/"
},
"classmap": ["Lucene/"]
},
"authors": [
{
"name": "Uwe Steinmann",
"email": "info@seeddms.org"
}
],
"require-dev": {
"phpunit/phpunit": "^9"
}
}

View File

@ -1,389 +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>2023-01-09</date>
<time>08:55:43</time>
<version>
<release>1.1.18</release>
<api>1.1.18</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- IndexedDocument() accepts a callable for conversion to text
- SeedDMS_Lucene_Search::open and create return itself but Zend_Search_Lucene
</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>
<date>2009-04-27</date>
<version>
<release>0.0.1</release>
<api>0.0.1</api>
</version>
<stability>
<release>alpha</release>
<api>alpha</api>
</stability>
<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>
<release>
<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>
</release>
<release>
<date>2021-05-10</date>
<time>08:55:43</time>
<version>
<release>1.1.17</release>
<api>1.1.17</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- close pipes in execWithTimeout(), also return exit code of command
</notes>
</release>
</changelog>
</package>

View File

@ -1,128 +0,0 @@
1.5.0 (2023-01-09)
---------------------
- add previewer which creates txt
1.4.0 (2021-10-16)
---------------------
- use new conversion service if available
- createRawPreview() checks early if a converter exists
1.3.3 (2020-12-23)
---------------------
- close pipes in execWithTimeout(), also return exit code of command
- createPreview() has optional parameter by referenz to return true if a
preview image was actually created
1.3.2 (2020-12-23)
---------------------
- set header Content-Length
- update package description
1.3.1 (2020-03-21)
---------------------
- add parameter $target to SeedDMS_Preview_pdfPreviewer::hasRawPreview() and SeedDMS_Preview_pdfPreviewer::getRawPreview()
1.3.0 (2020-02-17)
---------------------
- add new methode getPreviewFile()
1.2.10 (2019-02-11)
---------------------
- new parameter for enabling/disabling xsendfile
- fix creation of pdf preview if document content class is not SeedDMS_Core_DocumentContent
1.2.9 (2018-07-13)
---------------------
- make sure list of converters is always an array
- usage of mod_sendfile can be configured
1.2.8 (2018-03-08)
---------------------
- preview is also created if SeedDMS_Core_DocumentContent has a child class
1.2.7 (2018-01-18)
---------------------
- 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
1.2.6 (2017-12-04)
---------------------
- SeedDMS_Preview_Base::setConverters() overrides existing converters.
- New method SeedDMS_Preview_Base::addConverters() merges new converters with old ones.
1.2.5 (2017-10-11)
---------------------
- SeedDMS_Preview_Base::hasConverter() returns only try if command is set
1.2.4 (2017-10-11)
---------------------
- fix typo in converter for tar.gz files
1.2.3 (2017-09-18)
---------------------
- createPreview() returns false if running the converter command fails
1.2.2 (2017-03-02)
---------------------
- commands can be set for mimetypes 'xxxx/*' and '*'
- pass mimetype as parameter '%m' to converter
1.2.1 (2016-11-15)
---------------------
- setConverters() overrides exiting converters
1.2.0 (2016-11-07)
---------------------
- add new previewer which converts document to pdf instead of png
1.1.9 (2016-04-26)
---------------------
- 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()
1.1.8 (2016-04-05)
---------------------
- pass variables to stream_select (required by php7)
1.1.7 (2016-03-29)
---------------------
- set last parameter of stream_select() to 200000 micro sec. in case the timeout in sec. is set to 0
1.1.6 (2016-03-08)
---------------------
- check if object passed to createPreview(), hasPreview() is not null
1.1.5 (2016-02-11)
---------------------
- add method getFilesize()
- timeout for external commands can be passed to contructor of SeedDMS_Preview_Previewer
1.1.4 (2015-08-08)
---------------------
- command for creating the preview will be called with a given timeout
1.1.3 (2015-02-13)
---------------------
- 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.
1.1.2 (2014-04-10)
---------------------
- create fixed width image with proportional height
1.1.1 (2014-03-18)
---------------------
- add converters for .tar.gz, .ps, .txt
1.1.0 (2013-04-29)
---------------------
- preview image can also be created from a document file (SeedDMS_Core_DocumentFile)
1.0.0 (2012-11-20)
---------------------
- initial version

View File

@ -1,39 +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');
/**
* @uses Preview/PdfPreviewer.php
*/
require_once('Preview/TxtPreviewer.php');
?>

View File

@ -1,247 +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 object $conversionmgr
* @access protected
*/
protected $conversionmgr;
/**
* @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;
$this->conversionmgr = null;
} /* }}} */
/**
* Run a shell command
*
* @param $cmd
* @param int $timeout
* @return array
* @throws Exception
*/
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);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
if ($timeleft <= 0) {
proc_terminate($process);
throw new Exception("command timeout on: " . $cmd);
} else {
$return_value = proc_close($process);
return array('stdout'=>$output, 'stderr'=>$error, 'return'=>$return_value);
}
} /* }}} */
/**
* Get preview dir
*
* @return string name of preview directory on disc
*/
public function getPreviewDir() { /* {{{ */
return $this->previewDir;
} /* }}} */
/**
* 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();
} /* }}} */
/**
* Set conversion service manager
*
* A conversion manager is a service for converting files from one format
* to another format.
*
* @param object $conversionmgr
*/
function setConversionMgr($conversionmgr) { /* {{{ */
$this->conversionmgr = $conversionmgr;
} /* }}} */
/**
* 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 $from from mimetype
* @param string $to to mimetype
*
* @return boolean true if converter exists, otherwise false
*/
function hasConverter($from, $to='') { /* {{{ */
if($this->conversionmgr)
return $this->conversionmgr->hasService($from, $to);
else
return array_key_exists($from, $this->converters) && $this->converters[$from];
} /* }}} */
/**
* 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,309 +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.DIRECTORY_SEPARATOR.'pdf', $timeout, $xsendfile);
$this->converters = array(
);
} /* }}} */
/**
* Return the physical filename of the preview image on disc
* including the path
*
* @param object $object document content or document file
* @return string file name of preview image
*/
public function getFileName($object) { /* {{{ */
if(!$object)
return false;
$document = $object->getDocument();
$dms = $document->_dms;
$dir = $this->previewDir.DIRECTORY_SEPARATOR.$document->getDir();
switch(get_class($object)) {
case $dms->getClassname('documentcontent'):
$target = $dir.'p'.$object->getVersion();
break;
case $dms->getClassname('documentfile'):
$target = $dir.'f'.$object->getID();
break;
default:
return false;
}
return $target;
} /* }}} */
/**
* Check if converter for a given mimetype is set
*
* @param string $mimetype from mimetype
*
* @return boolean true if converter exists, otherwise false
*/
function hasConverter($from, $to='') { /* {{{ */
return parent::hasConverter($from, 'application/pdf');
} /* }}} */
/**
* 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(!self::hasConverter($mimetype))
return false;
if(!$this->previewDir)
return false;
if(!is_dir($this->previewDir.DIRECTORY_SEPARATOR.$dir)) {
if (!SeedDMS_Core_File::makeDir($this->previewDir.DIRECTORY_SEPARATOR.$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))) {
if($this->conversionmgr) {
if(!$this->conversionmgr->convert($infile, $mimetype, 'application/pdf', $target.'.pdf')) {
$this->lastpreviewfile = '';
return false;
}
$new = true;
} else {
$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);
$new = true;
} catch(Exception $e) {
$this->lastpreviewfile = '';
return false;
}
}
}
return true;
}
$new = false;
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.DIRECTORY_SEPARATOR.$document->getDir();
if(file_exists($dir) && is_dir($dir)) {
return SeedDMS_Preview_Previewer::recurseRmdir($dir);
} else {
return false;
}
} /* }}} */
}
?>

View File

@ -1,371 +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;
/**
* Create instance of image previewer
*
* @param string $previewDir path of base directory where all images are
* stored. This directory will have a subdirectory derived from the object id.
* @param integer $width default width of an image
* @param integer $timeout timeout for shell commands to create a preview image
* @param boolean $xsendfile if set to true the apache module xsendfile will
* be used.
*/
function __construct($previewDir, $width=40, $timeout=5, $xsendfile=true) { /* {{{ */
parent::__construct($previewDir.DIRECTORY_SEPARATOR.'png', $timeout, $xsendfile);
$this->converters = array(
);
$this->width = intval($width);
} /* }}} */
/**
* Return the physical filename of the preview image on disc
* including the path
*
* @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=0) { /* {{{ */
if(!$object)
return false;
if($width == 0)
$width = $this->width;
else
$width = intval($width);
$document = $object->getDocument();
$dms = $document->_dms;
$dir = $this->previewDir.DIRECTORY_SEPARATOR.$document->getDir();
switch(get_class($object)) {
case $dms->getClassname('documentcontent'):
$target = $dir.'p'.$object->getVersion().'-'.$width;
break;
case $dms->getClassname('documentfile'):
$target = $dir.'f'.$object->getID().'-'.$width;
break;
default:
return false;
}
return $target;
} /* }}} */
/**
* Check if converter for a given mimetype is set
*
* @param string $mimetype from mimetype
*
* @return boolean true if converter exists, otherwise false
*/
function hasConverter($from, $to='') { /* {{{ */
return parent::hasConverter($from, 'image/png');
} /* }}} */
/**
* 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)
* @param boolean $new will be set to true if the preview images was created
* @return boolean true on success, false on failure
*/
public function createRawPreview($infile, $dir, $mimetype, $width=0, $target='', &$new=false) { /* {{{ */
if(!self::hasConverter($mimetype))
return false;
if($width == 0)
$width = $this->width;
else
$width = intval($width);
if(!$this->previewDir)
return false;
if(!is_dir($this->previewDir.DIRECTORY_SEPARATOR.$dir)) {
if (!SeedDMS_Core_File::makeDir($this->previewDir.DIRECTORY_SEPARATOR.$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))) {
if($this->conversionmgr) {
if(!$this->conversionmgr->convert($infile, $mimetype, 'image/png', $target.'.png', array('width'=>$width))) {
$this->lastpreviewfile = '';
return false;
}
$new = true;
} else {
$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);
$new = true;
} catch(Exception $e) {
$this->lastpreviewfile = '';
return false;
}
}
}
return true;
}
$new = false;
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
* @param boolean $new will be set to true if the preview images was created
* @return boolean true on success, false on failure
*/
public function createPreview($object, $width=0, &$new=false) { /* {{{ */
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, $new);
} /* }}} */
/**
* 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.DIRECTORY_SEPARATOR.$document->getDir();
if(file_exists($dir) && is_dir($dir)) {
return SeedDMS_Preview_Previewer::recurseRmdir($dir);
} else {
return false;
}
} /* }}} */
}
?>

View File

@ -1,306 +0,0 @@
<?php
/**
* Implementation of text 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 text 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_TxtPreviewer extends SeedDMS_Preview_Base {
function __construct($previewDir, $timeout=5, $xsendfile=true) { /* {{{ */
parent::__construct($previewDir.DIRECTORY_SEPARATOR.'txt', $timeout, $xsendfile);
$this->converters = array(
);
} /* }}} */
/**
* Return the physical filename of the preview image on disc
* including the path
*
* @param object $object document content or document file
* @return string file name of preview image
*/
public function getFileName($object) { /* {{{ */
if(!$object)
return false;
$document = $object->getDocument();
$dms = $document->_dms;
$dir = $this->previewDir.DIRECTORY_SEPARATOR.$document->getDir();
switch(get_class($object)) {
case $dms->getClassname('documentcontent'):
$target = $dir.'t'.$object->getVersion();
break;
default:
return false;
}
return $target;
} /* }}} */
/**
* Check if converter for a given mimetype is set
*
* @param string $mimetype from mimetype
*
* @return boolean true if converter exists, otherwise false
*/
function hasConverter($from, $to='') { /* {{{ */
return parent::hasConverter($from, 'text/plain');
} /* }}} */
/**
* Create a text preview for a given file
*
* This method creates a preview in text 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.text (if set) or md5($infile).text.
* The $mimetype is used to select the propper conversion programm.
* An already existing text 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(!self::hasConverter($mimetype))
return true;
if(!$this->previewDir)
return false;
if(!is_dir($this->previewDir.DIRECTORY_SEPARATOR.$dir)) {
if (!SeedDMS_Core_File::makeDir($this->previewDir.DIRECTORY_SEPARATOR.$dir)) {
return false;
}
}
if(!file_exists($infile))
return false;
if(!$target)
$target = $this->previewDir.$dir.md5($infile);
$this->lastpreviewfile = $target.'.txt';
if($target != '' && (!file_exists($target.'.txt') || filectime($target.'.txt') < filectime($infile))) {
if($this->conversionmgr) {
if(!$this->conversionmgr->convert($infile, $mimetype, 'text/plain', $target.'.txt')) {
$this->lastpreviewfile = '';
return false;
}
$new = true;
} else {
$cmd = '';
$mimeparts = explode('/', $mimetype, 2);
if(isset($this->converters[$mimetype])) {
$cmd = str_replace(array('%f', '%o', '%m'), array($infile, $target.'.txt', $mimetype), $this->converters[$mimetype]);
} elseif(isset($this->converters[$mimeparts[0].'/*'])) {
$cmd = str_replace(array('%f', '%o', '%m'), array($infile, $target.'.txt', $mimetype), $this->converters[$mimeparts[0].'/*']);
} elseif(isset($this->converters['*'])) {
$cmd = str_replace(array('%f', '%o', '%m'), array($infile, $target.'.txt', $mimetype), $this->converters['*']);
}
if($cmd) {
try {
self::execWithTimeout($cmd, $this->timeout);
$new = true;
} catch(Exception $e) {
$this->lastpreviewfile = '';
return false;
}
}
}
return true;
}
$new = false;
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.'.txt') && filectime($target.'.txt') >= filectime($infile)) {
return true;
}
return false;
} /* }}} */
/**
* Check if a preview txt 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.'.txt') && filectime($target.'.txt') >= $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.'.txt')) {
$this->sendFile($target.'.txt');
}
} /* }}} */
/**
* 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.'.txt')) {
$this->sendFile($target.'.txt');
}
} /* }}} */
/**
* 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.'.txt')) {
return(filesize($target.'.txt'));
} 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.'.txt')) {
return(unlink($target.'.txt'));
} 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 text belonging to a document
*
* This function removes the preview text 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.DIRECTORY_SEPARATOR.$document->getDir();
if(file_exists($dir) && is_dir($dir)) {
return SeedDMS_Preview_Previewer::recurseRmdir($dir);
} else {
return false;
}
} /* }}} */
}
?>

View File

@ -1,23 +0,0 @@
{
"name": "seeddms/preview",
"description": "Create Preview images, pdf and txt for for SeedDMS ",
"type": "library",
"license": "GPL-2.0-or-later",
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"Seeddms\\Preview\\": "Preview/"
},
"classmap": ["Preview/"]
},
"authors": [
{
"name": "Uwe Steinmann",
"email": "info@seeddms.org"
}
],
"require-dev": {
"phpunit/phpunit": "^9"
}
}

View File

@ -1,511 +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>2023-01-09</date>
<time>09:49:39</time>
<version>
<release>1.5.0</release>
<api>1.5.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- add previewer which creates txt
</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>
<file name="TxtPreviewer.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>7.4.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>
<release>
<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>
</release>
<release>
<date>2020-12-23</date>
<time>09:49:39</time>
<version>
<release>1.3.3</release>
<api>1.3.3</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- close pipes in execWithTimeout(), also return exit code of command
- createPreview() has optional parameter by referenz to return true if a
preview image was actually created
</notes>
</release>
<release>
<date>2021-10-16</date>
<time>09:49:39</time>
<version>
<release>1.4.0</release>
<api>1.4.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- use new conversion service if available
- createRawPreview() checks early if a converter exists
</notes>
<release>
</changelog>
</package>

View File

@ -1,89 +0,0 @@
1.0.18 (2023-01-09)
---------------------
- add optional parameter $order to SeedDMS_SQLiteFTS_Indexer::find()
- add optional parameters $query and $col to SeedDMS_SQLiteFTS_Indexer::terms()
- IndexedDocument() accepts a callable for conversion to text
- remove stop words from content
1.0.17 (2022-03-04)
---------------------
- throw exeption in find() instead of returning false
- fix query if rootFolder or startFolder is set
1.0.16 (2021-05-10)
---------------------
- close pipes in execWithTimeout(), also return exit code of command
- add support for fts5 (make it the default)
- add class SeedDMS_SQLiteFTS_Field
1.0.15 (2020-12-12)
---------------------
- add indexing folders
1.0.14 (2020-09-11)
---------------------
- 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()
1.0.13 (2020-09-02)
---------------------
- add user to list of terms
1.0.12 (2020-09-02)
---------------------
- Index users with at least read access on a document
1.0.11 (2019-11-28)
---------------------
- Set 'created' in index to creation date of indexed content (was set to current
timestamp)
1.0.10 (2018-04-11)
---------------------
- IndexedDocument() remembers cmd and mimetype
1.0.9 (2018-01-30)
---------------------
- execWithTimeout() reads data from stderr and saves it into error msg
1.0.8 (2017-12-04)
---------------------
- allow conversion commands for mimetypes with wildcards
1.0.7 (2017-03-01)
---------------------
- catch exception in execWithTimeout()
1.0.6 (2016-03-29)
---------------------
- fix calculation of timeout (see bug #269)
1.0.5 (2016-03-29)
---------------------
- set last parameter of stream_select() to 200000 micro sec. in case the timeout in sec. is set to 0
1.0.4 (2016-03-15)
---------------------
- make it work with sqlite3 &lt; 3.8.0
1.0.3 (2016-02-01)
---------------------
- add command for indexing postѕcript files
1.0.2 (2016-01-10)
---------------------
- check if index exists before removing it when creating a new one
1.0.1 (2015-11-16)
---------------------
- add __get() to SQLiteFTS_Document because class.IndexInfo.php access class variable title which doesn't exists
1.0.0 (2015-08-10)
---------------------
- initial release

View File

@ -1,49 +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');
/**
* @uses SeedDMS_SQLiteFTS_Exception
*/
require_once('SQLiteFTS/Exception.php');
?>

View File

@ -1,117 +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 addField(SeedDMS_SQLiteFTS_Field $field) { /* {{{ */
$this->fields[$field->name] = $field;
if($field->name == 'docid') {
$this->id = $field->value;
}
return $this;
} /* }}} */
/**
* Return an array with the names of the fields in this document.
*
* @return array
*/
public function getFieldNames() {
return array_keys($this->fields);
}
public function _getFieldValue($key) { /* {{{ */
if(isset($this->fields[$key]))
return $this->fields[$key];
else
return false;
} /* }}} */
/**
* Proxy method for getFieldValue(), provides more convenient access to
* the string value of a field.
*
* @param string $name
* @return string
*/
public function __get($name) {
return $this->getFieldValue($name);
}
/**
* Returns Zend_Search_Lucene_Field object for a named field in this document.
*
* @param string $fieldName
* @return Zend_Search_Lucene_Field
*/
public function getField($fieldName) {
if (!array_key_exists($fieldName, $this->fields)) {
require_once 'SeedDMS/SQLiteFTS/Exception.php';
throw new SeedDMS_SQLiteFTS_Exception("Field name \"$fieldName\" not found in document.");
}
return $this->fields[$fieldName];
}
/**
* Returns the string value of a named field in this document.
*
* @see __get()
* @return string
*/
public function getFieldValue($fieldName) {
return $this->getField($fieldName)->value;
}
}
?>

View File

@ -1,41 +0,0 @@
<?php
/**
* SeedDMS_SQLiteFTS
*
* @category SeedDMS
* @package SeedDMS
* @copyright Copyright (c) 2021 uwe@steinmann.cx
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id$
*/
/**
* @category SeedDMS
* @package SeedDMS
* @copyright Copyright (c) 2021 uwe@steinmann.cx
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class SeedDMS_SQLiteFTS_Exception extends Exception
{
/**
* Construct the exception
*
* @param string $msg
* @param int $code
* @param Exception $previous
* @return void
*/
public function __construct($msg = '', $code = 0, Exception $previous = null) {
parent::__construct($msg, (int) $code, $previous);
}
/**
* String representation of the exception
*
* @return string
*/
public function __toString() {
return parent::__toString();
}
}

View File

@ -1,88 +0,0 @@
<?php
/**
* Implementation of a field
*
* @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 field.
*
* @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_Field {
/**
* Field name
*
* @var string
*/
public $name;
/**
* Field value
*
* @var boolean
*/
public $value;
/**
* Object constructor
*
* @param string $name
* @param string $value
*/
public function __construct($name, $value) {
$this->name = $name;
$this->value = $value;
}
/**
* Constructs a String-valued Field that is not tokenized, but is indexed
* and stored. Useful for non-text fields, e.g. date or url.
*
* @param string $name
* @param string $value
* @return SeedDMS_SQLiteFTS_Field
*/
public static function keyword($name, $value) {
return new self($name, $value);
}
/**
* Constructs a String-valued Field that is tokenized and indexed,
* and is stored in the index, for return with hits. Useful for short text
* fields, like "title" or "subject". Term vector will not be stored for this field.
*
* @param string $name
* @param string $value
* @return SeedDMS_SQLiteFTS_Field
*/
public static function text($name, $value) {
return new self($name, $value);
}
/**
* Constructs a String-valued Field that is tokenized and indexed,
* but that is not stored in the index.
*
* @param string $name
* @param string $value
* @return SeedDMS_SQLiteFTS_Field
*/
public static function unStored($name, $value) {
return new self($name, $value);
}
}

View File

@ -1,266 +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');
require_once('Field.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;
/**
* Run a shell command
*
* @param $cmd
* @param int $timeout
* @return array
* @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();
// 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);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
if ($timeleft <= 0) {
proc_terminate($process);
throw new Exception("command timeout on: " . $cmd);
} else {
$return_value = proc_close($process);
return array('stdout'=>$output, 'stderr'=>$error, 'return'=>$return_value);
}
} /* }}} */
/**
* Constructor. Creates our indexable document and adds all
* necessary fields to it using the passed in document
*
* $convcmd can either be an array of conversion commands or
* an object of class SeedDMS_ConversionMgr
*/
public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { /* {{{ */
$this->errormsg = '';
$this->cmd = '';
$this->mimetype = '';
$this->addField(SeedDMS_SQLiteFTS_Field::Text('title', $document->getName()));
if($acllist = $document->getReadAccessList(1, 1, 1)) {
$allu = [];
foreach($acllist['users'] as $u)
$allu[] = $u->getLogin();
$this->addField(SeedDMS_SQLiteFTS_Field::Text('users', implode(' ', $allu)));
/*
$allg = [];
foreach($acllist['groups'] as $g)
$allg[] = $g->getName();
$this->addField(SeedDMS_SQLiteFTS_Field::Text('groups', implode(' ', $allg)));
*/
}
if($attributes = $document->getAttributes()) {
foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition();
if($attrdef->getValueSet() != '')
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()));
else
$this->addField(SeedDMS_SQLiteFTS_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()));
}
}
$owner = $document->getOwner();
$this->addField(SeedDMS_SQLiteFTS_Field::Text('owner', $owner->getLogin()));
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('path', str_replace(':', 'x', $document->getFolderList())));
if($comment = $document->getComment()) {
$this->addField(SeedDMS_SQLiteFTS_Field::Text('comment', $comment));
}
if($document->isType('document')) {
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', 'D'.$document->getID()));
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('record_type', 'document'));
$version = $document->getLatestContent();
if($version) {
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('mimetype', $version->getMimeType()));
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('origfilename', $version->getOriginalFileName()));
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $version->getDate(), 'unindexed'));
if(!$nocontent)
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('indexed', time(), 'unindexed'));
if($attributes = $version->getAttributes()) {
foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition();
if($attrdef->getValueSet() != '')
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()));
else
$this->addField(SeedDMS_SQLiteFTS_Field::Text('attr_'.str_replace(' ', '_', $attrdef->getName()), $attribute->getValue()));
}
}
}
if($categories = $document->getCategories()) {
$names = array();
foreach($categories as $cat) {
$names[] = $cat->getName();
}
$this->addField(SeedDMS_SQLiteFTS_Field::Text('category', implode('#', $names)));
}
if($keywords = $document->getKeywords()) {
$this->addField(SeedDMS_SQLiteFTS_Field::Text('keywords', $keywords));
}
if($version) {
$status = $version->getStatus();
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('status', $status['status']+10));
}
if($version && !$nocontent) {
$path = $dms->contentDir . $version->getPath();
if(file_exists($path)) {
$mimetype = $version->getMimeType();
$this->mimetype = $mimetype;
if(is_callable($convcmd)) {
$result = $convcmd($document);
if($result['content']) {
self::setContent($result['content']);
} elseif($result['content'] === false) {
$this->errormsg = $result['errormsg'];
}
$this->cmd = $result['cmd'];
} elseif(is_object($convcmd) && (get_class($convcmd) == 'SeedDMS_ConversionMgr')) {
if($service = $convcmd->getService($mimetype, 'text/plain')) {
$content = $convcmd->convert($path, $mimetype, 'text/plain');
if($content) {
self::setContent($content);
} elseif($content === false) {
$this->errormsg = 'Conversion failed';
}
$this->cmd = get_class($service);
} else {
$this->cmd = 'No service to convert '.$mimetype.' to text/plain';
}
} else {
$content = '';
$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']) {
self::setContent($content['stdout']);
// $this->addField(SeedDMS_SQLiteFTS_Field::UnStored('content', $content['stdout']));
}
if($content['stderr']) {
$this->errormsg = $content['stderr'];
}
} catch (Exception $e) {
}
}
}
}
}
} elseif($document->isType('folder')) {
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', 'F'.$document->getID()));
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('record_type', 'folder'));
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $document->getDate(), 'unindexed'));
$this->addField(SeedDMS_SQLiteFTS_Field::Keyword('indexed', time(), 'unindexed'));
}
} /* }}} */
public function getErrorMsg() { /* {{{ */
return $this->errormsg;
} /* }}} */
public function getMimeType() { /* {{{ */
return $this->mimetype;
} /* }}} */
public function setContent($data) { /* {{{ */
$this->addField(SeedDMS_SQLiteFTS_Field::Text('content', $data));
} /* }}} */
public function getCmd() { /* {{{ */
return $this->cmd;
} /* }}} */
/* Use only for setting the command if e.g. an extension takes over the
* conversion to txt (like the office extension which uses the collabora
* conversion service).
*/
public function setCmd($cmd) { /* {{{ */
$this->cmd = $cmd;
} /* }}} */
}
?>

View File

@ -1,463 +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 string $_ftstype
* @access protected
*/
protected $_ftstype;
/**
* @var object $_conn sqlite index
* @access protected
*/
protected $_conn;
/**
* @var array $_stop_words array of stop words
* @access protected
*/
protected $_stop_words;
const ftstype = 'fts5';
/**
* Remove stopwords from string
*/
protected function strip_stopwords($str = "") { /* {{{ */
// 1.) break string into words
// [^-\w\'] matches characters, that are not [0-9a-zA-Z_-']
// if input is unicode/utf-8, the u flag is needed: /pattern/u
$words = preg_split('/[^-\w\']+/u', $str, -1, PREG_SPLIT_NO_EMPTY);
// 2.) if we have at least 2 words, remove stopwords
if(!empty($words)) {
$stopwords = $this->_stop_words;
$words = array_filter($words, function ($w) use (&$stopwords) {
return ((mb_strlen($w, 'utf-8') > 2) && !isset($stopwords[mb_strtolower($w, "utf-8")]));
});
}
// check if not too much was removed such as "the the" would return empty
if(!empty($words))
return implode(" ", $words);
return $str;
} /* }}} */
/**
* Constructor
*
*/
function __construct($indexerDir) { /* {{{ */
$this->_conn = new PDO('sqlite:'.$indexerDir.'/index.db');
$this->_ftstype = self::ftstype;
if($this->_ftstype == 'fts5')
$this->_rawid = 'rowid';
else
$this->_rawid = 'docid';
$this->_stop_words = [];
} /* }}} */
/**
* 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 static::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(self::ftstype == 'fts4') {
if($version['versionNumber'] >= 3008000)
$sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, record_type, title, comment, keywords, category, mimetype, origfilename, owner, content, created, indexed, users, status, path, notindexed=created, notindexed=indexed, matchinfo=fts3)';
else
$sql = 'CREATE VIRTUAL TABLE docs USING fts4(documentid, record_type, title, comment, keywords, category, mimetype, origfilename, owner, content, created, indexed, 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;
}
} elseif(self::ftstype == 'fts5') {
$sql = 'CREATE VIRTUAL TABLE docs USING fts5(documentid, record_type, title, comment, keywords, category, mimetype, origfilename, owner, content, created unindexed, indexed unindexed, users, status, path)';
$res = $index->_conn->exec($sql);
if($res === false) {
return null;
}
$sql = 'CREATE VIRTUAL TABLE docs_terms USING fts5vocab(docs, \'col\');';
$res = $index->_conn->exec($sql);
if($res === false) {
return null;
}
} else
return null;
return($index);
} /* }}} */
/**
* Do some initialization
*
*/
public function init($stopWordsFile='') { /* {{{ */
if($stopWordsFile)
$this->_stop_words = array_flip(preg_split("/[\s,]+/", file_get_contents($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;
foreach(array('comment', 'keywords', 'category', 'content', 'mimetype', 'origfilename', 'status', 'created', 'indexed') as $kk) {
try {
${$kk} = $doc->getFieldValue($kk);
} catch (Exception $e) {
${$kk} = '';
}
}
$sql = "DELETE FROM docs WHERE documentid=".$this->_conn->quote($doc->getFieldValue('document_id'));
$res = $this->_conn->exec($sql);
if($res === false) {
return false;
}
if($this->_stop_words)
$content = $this->strip_stopwords($content);
$sql = "INSERT INTO docs (documentid, record_type, title, comment, keywords, category, owner, content, mimetype, origfilename, created, indexed, users, status, path) VALUES (".$this->_conn->quote($doc->getFieldValue('document_id')).", ".$this->_conn->quote($doc->getFieldValue('record_type')).", ".$this->_conn->quote($doc->getFieldValue('title')).", ".$this->_conn->quote($comment).", ".$this->_conn->quote($keywords).", ".$this->_conn->quote($category).", ".$this->_conn->quote($doc->getFieldValue('owner')).", ".$this->_conn->quote($content).", ".$this->_conn->quote($mimetype).", ".$this->_conn->quote($origfilename).", ".(int)$created.", ".(int)$indexed.", ".$this->_conn->quote($doc->getFieldValue('users')).", ".$this->_conn->quote($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 $id internal id of document
* @return boolean false in case of an error, otherwise true
*/
public function delete($id) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "DELETE FROM docs WHERE ".$this->_rawid."=".(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'. 'hits' is an array of SeedDMS_SQLiteFTS_QueryHit
*/
public function find($query, $filter='', $limit=array(), $order=array()) { /* {{{ */
if(!$this->_conn)
return false;
/* First count some records for facets */
foreach(array('owner', 'mimetype', 'category', 'status') as $facetname) {
$sql = "SELECT `".$facetname."`, count(*) AS `c` FROM `docs`";
if($query) {
$sql .= " WHERE docs MATCH ".$this->_conn->quote($query);
}
if($filter) {
if($query)
$sql .= " AND ".$filter;
else
$sql .= " WHERE ".$filter;
}
$res = $this->_conn->query($sql." GROUP BY `".$facetname."`");
if(!$res)
throw new SeedDMS_SQLiteFTS_Exception("Counting records in facet \"$facetname\" failed.");
// return false;
$facets[$facetname] = array();
foreach($res as $row) {
if($row[$facetname] && $row['c']) {
if($facetname == 'category') {
$tmp = explode('#', $row[$facetname]);
if(count($tmp) > 1) {
foreach($tmp as $t) {
if(!isset($facets[$facetname][$t]))
$facets[$facetname][$t] = $row['c'];
else
$facets[$facetname][$t] += $row['c'];
}
} else {
if(!isset($facets[$facetname][$row[$facetname]]))
$facets[$facetname][$row[$facetname]] = $row['c'];
else
$facets[$facetname][$row[$facetname]] += $row['c'];
}
} elseif($facetname == 'status') {
$facets[$facetname][($row[$facetname]-10).''] = $row['c'];
} else
$facets[$facetname][$row[$facetname]] = $row['c'];
}
}
}
$sql = "SELECT `record_type`, count(*) AS `c` FROM `docs`";
if($query)
$sql .= " WHERE docs MATCH ".$this->_conn->quote($query);
if($filter) {
if($query)
$sql .= " AND ".$filter;
else
$sql .= " WHERE ".$filter;
}
$res = $this->_conn->query($sql." GROUP BY `record_type`");
if(!$res)
throw new SeedDMS_SQLiteFTS_Exception("Counting records in facet \"record_type\" failed.");
// return false;
$facets['record_type'] = array('document'=>0, 'folder'=>0);
foreach($res as $row) {
$facets['record_type'][$row['record_type']] = $row['c'];
}
$total = $facets['record_type']['document'] + $facets['record_type']['folder'];
$sql = "SELECT ".$this->_rawid.", documentid FROM docs";
if($query)
$sql .= " WHERE docs MATCH ".$this->_conn->quote($query);
if($filter) {
if($query)
$sql .= " AND ".$filter;
else
$sql .= " WHERE ".$filter;
}
if($this->_ftstype == 'fts5') {
//$sql .= " ORDER BY rank";
// boost documentid, record_type, title, comment, keywords, category, mimetype, origfilename, owner, content, created unindexed, users, status, path
if(!empty($order['by'])) {
switch($order['by']) {
case "title":
$sql .= " ORDER BY title";
break;
case "created":
$sql .= " ORDER BY created";
break;
default:
$sql .= " ORDER BY bm25(docs, 10.0, 0.0, 10.0, 5.0, 5.0, 10.0)";
}
if(!empty($order['dir'])) {
if($order['dir'] == 'desc')
$sql .= " DESC";
}
}
}
if(!empty($limit['limit']))
$sql .= " LIMIT ".(int) $limit['limit'];
if(!empty($limit['offset']))
$sql .= " OFFSET ".(int) $limit['offset'];
$res = $this->_conn->query($sql);
if(!$res)
throw new SeedDMS_SQLiteFTS_Exception("Searching for documents failed.");
$hits = array();
if($res) {
foreach($res as $rec) {
$hit = new SeedDMS_SQLiteFTS_QueryHit($this);
$hit->id = $rec[$this->_rawid];
$hit->documentid = $rec['documentid'];
$hits[] = $hit;
}
}
return array('count'=>$total, 'hits'=>$hits, 'facets'=>$facets);
} /* }}} */
/**
* Get a single document from index
*
* @param string $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 ".$this->_rawid.", documentid FROM docs WHERE documentid=".$this->_conn->quote($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[$this->_rawid];
$hit->documentid = $rec['documentid'];
$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, $content=true) { /* {{{ */
if(!$this->_conn)
return false;
$sql = "SELECT ".$this->_rawid.", documentid, title, comment, owner, keywords, category, mimetype, origfilename, created, indexed, users, status, path".($content ? ", content" : "")." FROM docs WHERE ".$this->_rawid."='".$id."'";
$res = $this->_conn->query($sql);
$doc = false;
if($res) {
if(!($rec = $res->fetch(PDO::FETCH_ASSOC)))
return false;
$doc = new SeedDMS_SQLiteFTS_Document();
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('docid', $rec[$this->_rawid]));
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('document_id', $rec['documentid']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Text('title', $rec['title']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Text('comment', $rec['comment']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Text('keywords', $rec['keywords']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Text('category', $rec['category']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('mimetype', $rec['mimetype']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('origfilename', $rec['origfilename']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Text('owner', $rec['owner']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('created', $rec['created']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('indexed', $rec['indexed']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Text('users', $rec['users']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('status', $rec['status']));
$doc->addField(SeedDMS_SQLiteFTS_Field::Keyword('path', explode('x', substr($rec['path'], 1, -1))));
if($content)
$doc->addField(SeedDMS_SQLiteFTS_Field::UnStored('content', $rec['content']));
}
return $doc;
} /* }}} */
/**
* Return list of terms in index
*
* @return array list of SeedDMS_SQLiteFTS_Term
*/
public function terms($prefix='', $col='') { /* {{{ */
if(!$this->_conn)
return false;
if($this->_ftstype == 'fts5') {
$sql = "SELECT term, col, doc as occurrences FROM docs_terms";
if($prefix || $col) {
$sql .= " WHERE";
if($prefix) {
$sql .= " term like '".$prefix."%'";
if($col)
$sql .= " AND";
}
if($col)
$sql .= " col = '".$col."'";
}
$sql .= " ORDER BY col, occurrences desc";
} else {
$sql = "SELECT term, col, occurrences FROM docs_terms WHERE col!='*'";
if($prefix)
$sql .= " AND term like '".$prefix."%'";
if($col)
$sql .= " AND col = '".$col."'";
$sql .= " ORDER BY col, occurrences desc";
}
$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 number of documents in index
*
* @return interger number of documents
*/
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,72 +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;
$this->_document = null;
} /* }}} */
/**
* 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,166 +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 id of seeddms document
* @return object instance of SeedDMS_SQliteFTS_QueryHit or false
*/
function getDocument($id) { /* {{{ */
$hits = $this->index->findById('D'.$id);
return $hits ? $hits[0] : false;
} /* }}} */
/**
* Get folder from index
*
* @param int $id id of seeddms folder
* @return object instance of SeedDMS_SQliteFTS_QueryHit or false
*/
function getFolder($id) { /* {{{ */
$hits = $this->index->findById('F'.$id);
return $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(), $order=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 .= ' AND ';
$querystr .= 'owner:'.$fields['owner'];
} elseif(is_array($fields['owner'])) {
if($querystr)
$querystr .= ' AND ';
$querystr .= '(owner:';
$querystr .= implode(' OR owner:', $fields['owner']);
$querystr .= ')';
}
}
if(!empty($fields['record_type'])) {
if($querystr)
$querystr .= ' AND ';
$querystr .= '(record_type:';
$querystr .= implode(' OR record_type:', $fields['record_type']);
$querystr .= ')';
}
if(!empty($fields['category'])) {
if($querystr)
$querystr .= ' AND ';
$querystr .= '(category:"';
$querystr .= implode('" AND category:"', $fields['category']);
$querystr .= '")';
}
if(!empty($fields['mimetype'])) {
if($querystr)
$querystr .= ' AND ';
$querystr .= '(mimetype:"';
$querystr .= implode('" OR mimetype:"', $fields['mimetype']);
$querystr .= '")';
}
if(!empty($fields['status'])) {
if($querystr)
$querystr .= ' AND ';
$status = array_map(function($v){return (int)$v+10;}, $fields['status']);
$querystr .= '(status:';
$querystr .= implode(' OR status:', $status);
$querystr .= ')';
}
if(!empty($fields['user'])) {
if($querystr)
$querystr .= ' AND ';
$querystr .= '(users:';
$querystr .= implode(' OR users:', $fields['user']);
$querystr .= ')';
}
if(!empty($fields['rootFolder']) && $fields['rootFolder']->getFolderList()) {
if($querystr)
$querystr .= ' AND ';
$querystr .= '(path:';
$querystr .= str_replace(':', 'x', $fields['rootFolder']->getFolderList().$fields['rootFolder']->getID().':');
$querystr .= '*)';
}
if(!empty($fields['startFolder']) && $fields['startFolder']->getFolderList()) {
if($querystr)
$querystr .= ' AND ';
$querystr .= '(path:';
$querystr .= str_replace(':', 'x', $fields['startFolder']->getFolderList().$fields['startFolder']->getID().':');
$querystr .= '*)';
}
$filterstr = '';
if(!empty($fields['created_start'])) {
if($filterstr)
$filterstr .= ' AND ';
$filterstr .= '(created>='.$fields['created_start'].')';
}
if(!empty($fields['created_end'])) {
if($filterstr)
$filterstr .= ' AND ';
$filterstr .= '(created<'.$fields['created_end'].')';
}
try {
$result = $this->index->find($querystr, $filterstr, $limit, $order);
$recs = array();
foreach($result["hits"] as $hit) {
$recs[] = array('id'=>$hit->id, 'document_id'=>$hit->documentid);
}
return array('count'=>$result['count'], 'hits'=>$recs, 'facets'=>$result['facets']);
} catch (Exception $e) {
return false;
}
} /* }}} */
}
?>

View File

@ -1,75 +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',
13 => 'indexed',
);
/* fts5 pass the column name in $col, fts4 uses an integer */
if(is_int($col))
$this->field = $fields[$col];
else
$this->field = $col; //$fields[$col];
$this->_occurrence = $occurrence;
} /* }}} */
}
?>

View File

@ -1,23 +0,0 @@
{
"name": "seeddms/lucene",
"description": "SQLiteFTS based fulltext search for SeedDMS ",
"type": "library",
"license": "GPL-2.0-or-later",
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"Seeddms\\SQLiteFTS\\": "SQLiteFTS/"
},
"classmap": ["SQLiteFTS/"]
},
"authors": [
{
"name": "Uwe Steinmann",
"email": "info@seeddms.org"
}
],
"require-dev": {
"phpunit/phpunit": "^9"
}
}

View File

@ -1,376 +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>2023-01-09</date>
<time>08:57:44</time>
<version>
<release>1.0.18</release>
<api>1.0.18</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- add optional parameter $order to SeedDMS_SQLiteFTS_Indexer::find()
- add optional parameters $query and $col to SeedDMS_SQLiteFTS_Indexer::terms()
- IndexedDocument() accepts a callable for conversion to text
- remove stop words from content
</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>
<file name="Field.php" role="php">
<tasks:replace from="@package_version@" to="version" type="package-info" />
</file>
<file name="Exception.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>
<release>
<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>
</release>
<release>
<date>2021-05-10</date>
<time>08:57:44</time>
<version>
<release>1.0.16</release>
<api>1.0.16</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- close pipes in execWithTimeout(), also return exit code of command
- add support for fts5 (make it the default)
- add class SeedDMS_SQLiteFTS_Field
</notes>
</release>
<release>
<date>2022-03-04</date>
<time>08:57:44</time>
<version>
<release>1.0.17</release>
<api>1.0.17</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- throw exeption in find() instead of returning false
- fix query if rootFolder or startFolder is set
</notes>
</release>
</changelog>
</package>

View File

@ -16,7 +16,7 @@
<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.1.14" />
<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" />
@ -74,7 +74,12 @@
<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..." />

View File

@ -1,30 +1,41 @@
{
"config": {
"platform": {
"php": "7.4"
"php": "8.2"
}
},
"require": {
"sabre/dav": "^3.",
"slim/slim": "^3.0",
"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",
@ -62,5 +73,4 @@
}
}
]
}

View File

@ -57,7 +57,7 @@
enableLanguageSelector = "true"
stopWordsFile = ""
sortUsersInList = ""
enableDropUpload = "false"
enableDropUpload = "true"
enableRecursiveCount = "false"
maxRecursiveCount = "0"
enableThemeSelector = "true"
@ -112,6 +112,7 @@
dropFolderDir = ""
cacheDir = ""
backupDir = ""
logFileMaxLevel="6"
/>
<!--
- enableGuestLogin: If you want anybody to login as guest, set the following line to true
@ -295,7 +296,7 @@
updateNotifyTime = "86400"
extraPath = ""
maxExecutionTime = "30"
cmdTimeout = "1"
cmdTimeout = "10"
/>
<!--
- enableNotificationAppRev: set to true if reviewers and approvers shall be informed about a pending review/approval
@ -308,21 +309,15 @@
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>

View File

@ -52,17 +52,45 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common {
$sequence = $this->getParam('sequence');
$reviewers = $this->getParam('reviewers');
$approvers = $this->getParam('approvers');
$recipients = $this->getParam('recipients');
$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:
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);
@ -79,14 +107,41 @@ 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:
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);
@ -106,6 +161,7 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common {
$workflow = $this->getParam('workflow');
$notificationgroups = $this->getParam('notificationgroups');
$notificationusers = $this->getParam('notificationusers');
$initialdocumentstatus = $this->getParam('initialdocumentstatus');
$maxsizeforfulltext = $this->getParam('maxsizeforfulltext');
$defaultaccessdocs = $this->getParam('defaultaccessdocs');
@ -116,7 +172,7 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common {
$cats, $userfiletmp, utf8_basename($userfilename),
$filetype, $userfiletype, $sequence,
$reviewers, $approvers, $reqversion,
$version_comment, $attributes, $attributes_version, $workflow);
$version_comment, $attributes, $attributes_version, $workflow, $initialdocumentstatus);
if (is_bool($res) && !$res) {
$this->errormsg = "error_occured";
@ -133,6 +189,24 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common {
}
}
$lc = $document->getLatestContent();
if($recipients) {
if($recipients['i']) {
foreach($recipients['i'] as $uid) {
if($u = $dms->getUser($uid)) {
$res = $lc->addIndRecipient($u, $user);
}
}
}
if($recipients['g']) {
foreach($recipients['g'] as $gid) {
if($g = $dms->getGroup($gid)) {
$res = $lc->addGrpRecipient($g, $user);
}
}
}
}
/* Add a default notification for the owner of the document */
if($settings->_enableOwnerNotification) {
$res = $document->addNotify($owner->getID(), true);

View File

@ -41,14 +41,41 @@ 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) {
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);

View File

@ -40,6 +40,11 @@ class SeedDMS_Controller_ApproveDocument extends SeedDMS_Controller_Common {
$this->oldstatus = $overallStatus['status'];
$this->newstatus = $this->oldstatus;
if(!$this->callHook('preApproveDocument', $content)) {
}
$result = $this->callHook('approveDocument', $content);
if($result === null) {
if ($approvaltype == "ind") {
$approvalLogID = $content->setApprovalByInd($user, $user, $approvalstatus, $approvalcomment, $approvalfile);
} elseif ($approvaltype == "grp") {
@ -52,7 +57,10 @@ class SeedDMS_Controller_ApproveDocument extends SeedDMS_Controller_Common {
$this->errormsg = "approval_update_failed";
return false;
}
}
$result = $this->callHook('approveUpdateDocumentStatus', $content);
if($result === null) {
if($approvalstatus == -1) {
$this->newstatus = S_REJECTED;
if($content->setStatus(S_REJECTED, $approvalcomment, $user)) {
@ -96,6 +104,12 @@ class SeedDMS_Controller_ApproveDocument extends SeedDMS_Controller_Common {
}
}
}
}
if(!$this->callHook('postApproveDocument', $content)) {
}
return true;
} /* }}} */
}

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

@ -45,8 +45,8 @@ class SeedDMS_Controller_ClearCache extends SeedDMS_Controller_Common {
}
if(!empty($post['js'])) {
$cmd = 'rm -rf '.addDirSep($settings->_cacheDir).'js'.DIRECTORY_SEPARATOR.'*';
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)) {

108
controllers/class.Cron.php Normal file
View File

@ -0,0 +1,108 @@
<?php
/**
* Implementation of Cron controller
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2020 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class which does the busines logic for the regular cron job
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2020 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_Cron extends SeedDMS_Controller_Common {
public function run() { /* {{{ */
$dms = $this->params['dms'];
$user = $this->params['user'];
$settings = $this->params['settings'];
$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($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.");
$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);
}
} 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;
} /* }}} */
}

View File

@ -22,13 +22,8 @@
*/
class SeedDMS_Controller_Download extends SeedDMS_Controller_Common {
public function run() {
public function version() { /* {{{ */
$dms = $this->params['dms'];
$type = $this->params['type'];
switch($type) {
case "version":
if(empty($this->params['content'])) {
$version = $this->params['version'];
$document = $this->params['document'];
if($version < 1) {
@ -48,9 +43,6 @@ class SeedDMS_Controller_Download extends SeedDMS_Controller_Common {
* expect the content in the controller
*/
$this->params['content'] = $content;
} else {
$content = $this->params['content'];
}
if(null === $this->callHook('version')) {
if(file_exists($dms->contentDir . $content->getPath())) {
header("Content-Transfer-Encoding: binary");
@ -60,11 +52,162 @@ class SeedDMS_Controller_Download extends SeedDMS_Controller_Common {
header("Cache-Control: must-revalidate");
header("ETag: ".$content->getChecksum());
sendFile($dms->contentDir.$content->getPath());
sendFile($dms->contentDir . $content->getPath());
}
}
break;
}
return true;
} /* }}} */
public function file() { /* {{{ */
$dms = $this->params['dms'];
$file = $this->params['file'];
if(null === $this->callHook('file')) {
if(file_exists($dms->contentDir . $file->getPath())) {
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=\"" . $file->getOriginalFileName() . "\"");
header("Content-Type: " . $file->getMimeType());
header("Cache-Control: must-revalidate");
sendFile($dms->contentDir . $file->getPath());
}
}
return true;
} /* }}} */
public function archive() { /* {{{ */
$dms = $this->params['dms'];
$filename = $this->params['file'];
$basedir = $this->params['basedir'];
if(null === $this->callHook('archive')) {
if(file_exists($basedir . $filename)) {
header('Content-Description: File Transfer');
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");
$efilename = rawurlencode($filename);
header("Content-Disposition: attachment; filename=\"" .$efilename . "\"; filename*=UTF-8''".$efilename);
header("Cache-Control: public");
sendFile($basedir .$filename );
}
}
return true;
} /* }}} */
public function log() { /* {{{ */
$dms = $this->params['dms'];
$filename = $this->params['file'];
$basedir = $this->params['basedir'];
if(null === $this->callHook('log')) {
if(file_exists($basedir . $filename)) {
header("Content-Type: text/plain; name=\"" . $filename . "\"");
header("Content-Transfer-Encoding: binary");
$efilename = rawurlencode($filename);
header("Content-Disposition: attachment; filename=\"" .$efilename . "\"; filename*=UTF-8''".$efilename);
header("Cache-Control: must-revalidate");
sendFile($basedir.$filename);
}
}
return true;
} /* }}} */
public function sqldump() { /* {{{ */
$dms = $this->params['dms'];
$filename = $this->params['file'];
$basedir = $this->params['basedir'];
if(null === $this->callHook('sqldump')) {
if(file_exists($basedir . $filename)) {
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");
$efilename = rawurlencode($filename);
header("Content-Disposition: attachment; filename=\"" .$efilename . "\"; filename*=UTF-8''".$efilename);
header("Cache-Control: must-revalidate");
sendFile($basedir.$filename);
}
}
return true;
} /* }}} */
public function approval() { /* {{{ */
$dms = $this->params['dms'];
$document = $this->params['document'];
$logid = $this->params['approvelogid'];
$filename = $dms->contentDir . $document->getDir().'a'.$logid;
if (!file_exists($filename) ) {
$this->error = 1;
return false;
}
if(null === $this->callHook('approval')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
header("Content-Type: ".$mimetype);
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=\"approval-" . $document->getID()."-".(int) $_GET['approvelogid'] . get_extension($mimetype) . "\"");
header("Cache-Control: must-revalidate");
sendFile($filename);
}
return true;
} /* }}} */
public function review() { /* {{{ */
$dms = $this->params['dms'];
$document = $this->params['document'];
$logid = $this->params['reviewlogid'];
$filename = $dms->contentDir . $document->getDir().'r'.$logid;
if (!file_exists($filename) ) {
$this->error = 1;
return false;
}
if(null === $this->callHook('review')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
header("Content-Type: ".$mimetype);
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($filename ));
header("Content-Disposition: attachment; filename=\"review-" . $document->getID()."-".(int) $_GET['reviewlogid'] . get_extension($mimetype) . "\"");
header("Cache-Control: must-revalidate");
sendFile($filename);
}
return true;
} /* }}} */
public function run() { /* {{{ */
$dms = $this->params['dms'];
$type = $this->params['type'];
switch($type) {
case "version":
return $this->version();
break;
case "file":
return $this->file();
break;
case "archive":
return $this->archive();
break;
case "log":
return $this->log();
break;
case "sqldump":
return $this->sqldump();
break;
case "approval":
return $this->approval();
break;
case "review":
return $this->review();
break;
}
} /* }}} */
}

View File

@ -122,8 +122,35 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common {
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, $document, false)) {
$this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute);

View File

@ -51,13 +51,40 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common {
$oldattributes = $folder->getAttributes();
if($attributes) {
foreach($attributes as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
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);
@ -81,6 +108,7 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common {
}
}
}
}
foreach($oldattributes as $attrdefid=>$oldattribute) {
if(!isset($attributes[$attrdefid])) {
if(!$folder->removeAttribute($dms->getAttributeDefinition($attrdefid)))

View File

@ -64,6 +64,16 @@ class SeedDMS_Controller_Login extends SeedDMS_Controller_Common {
return false;
}
if($settings->_enable2FactorAuthentication) {
if($user->getSecret()) {
$tfa = new \RobThree\Auth\TwoFactorAuth('SeedDMS');
if($tfa->verifyCode($user->getSecret(), $_POST['twofactauth']) !== true) {
$this->setErrorMsg("login_error_text");
return false;
}
}
}
/* Run any additional checks which may prevent login */
if(false === $this->callHook('restrictLogin', $user)) {
if(empty($this->errormsg))
@ -222,6 +232,7 @@ class SeedDMS_Controller_Login extends SeedDMS_Controller_Common {
}
}
if(!is_object($user))
$user = $authenticator->authenticate($login, $pwd);
if(0) {

View File

@ -0,0 +1,67 @@
<?php
/**
* Implementation of ReceiptDocument controller
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 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-2013 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_ReceiptDocument extends SeedDMS_Controller_Common {
public function run() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$settings = $this->params['settings'];
$document = $this->params['document'];
$content = $this->params['content'];
$receiptstatus = $this->params['receiptstatus'];
$receipttype = $this->params['receipttype'];
$group = $this->params['group'];
$comment = $this->params['comment'];
/* Get the document id and name before removing the document */
$docname = $document->getName();
$documentid = $document->getID();
if(!$this->callHook('preReceiptDocument', $content)) {
}
$result = $this->callHook('receiptDocument', $content);
if($result === null) {
if ($receipttype == "ind") {
if(0 > $content->setReceiptByInd($user, $user, $receiptstatus, $comment)) {
$this->error = 1;
$this->errormsg = "receipt_update_failed";
return false;
}
} elseif ($receipttype == "grp") {
if(0 > $content->setReceiptByGrp($group, $user, $receiptstatus, $comment)) {
$this->error = 1;
$this->errormsg = "receipt_update_failed";
return false;
}
}
}
if(!$this->callHook('postReceiptDocument', $content)) {
}
return true;
}
}

View File

@ -36,6 +36,11 @@ class SeedDMS_Controller_ReviewDocument extends SeedDMS_Controller_Common {
$this->oldstatus = $overallStatus['status'];
$this->newstatus = $this->oldstatus;
if(!$this->callHook('preReviewDocument', $content)) {
}
$result = $this->callHook('reviewDocument', $content);
if($result === null) {
if ($reviewtype == "ind") {
$reviewLogID = $content->setReviewByInd($user, $user, $reviewstatus, $reviewcomment, $reviewfile);
} elseif($reviewtype == "grp") {
@ -48,7 +53,10 @@ class SeedDMS_Controller_ReviewDocument extends SeedDMS_Controller_Common {
$this->errormsg = "review_update_failed";
return false;
}
}
$result = $this->callHook('reviewUpdateDocumentStatus', $content);
if($result === null) {
if($reviewstatus == -1) {
$this->newstatus = S_REJECTED;
if($content->setStatus(S_REJECTED, $reviewcomment, $user)) {
@ -113,6 +121,11 @@ class SeedDMS_Controller_ReviewDocument extends SeedDMS_Controller_Common {
}
}
}
}
if(!$this->callHook('postReviewDocument', $content)) {
}
return true;
} /* }}} */
}

View File

@ -0,0 +1,143 @@
<?php
/**
* Implementation of ReviseDocument controller
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 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-2013 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_ReviseDocument extends SeedDMS_Controller_Common {
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'];
$revisionstatus = $this->params['revisionstatus'];
$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
* if one has rejected it. So in the very end the doc is rejected, but
* doc remainѕ in S_IN_REVISION until all have revised the doc
*/
$onevotereject = $this->params['onevotereject'];
/* Get the document id and name before removing the document */
$docname = $document->getName();
$documentid = $document->getID();
if(!$this->callHook('preReviseDocument', $content)) {
}
$result = $this->callHook('reviseDocument', $content);
if($result === null) {
if ($revisiontype == "ind") {
if(0 > $content->setRevision($user, $user, $revisionstatus, $comment)) {
$this->error = 1;
$this->errormsg = "revision_update_failed";
return false;
}
} elseif ($revisiontype == "grp") {
if(0 > $content->setRevision($group, $user, $revisionstatus, $comment)) {
$this->error = 1;
$this->errormsg = $ll."revision_update_failed";
return false;
}
}
}
/* Check to see if the overall status for the document version needs to be
* updated.
*/
$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";
return false;
}
} else {
$docRevisionStatus = $content->getRevisionStatus();
if (is_bool($docRevisionStatus) && !$docRevisionStatus) {
$this->error = 1;
$this->errormsg = "cannot_retrieve_revision_snapshot";
return false;
}
$revisionok = 0;
$revisionnotok = 0;
$revisionTotal = 0;
foreach ($docRevisionStatus as $drstat) {
if ($drstat["status"] == 1) {
$revisionok++;
}
if ($drstat["status"] == -1) {
$revisionnotok++;
}
if ($drstat["status"] != -2) {
$revisionTotal++;
}
}
// If all revisions have been done and there are no rejections,
// then release the document. If all revisions have been done but some
// of them were rejections then documents needs correction.
// Otherwise put it back into revision workflow
if ($revisionok == $revisionTotal) {
$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) {
$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 {
$this->newstatus=S_IN_REVISION;
if(!$content->setStatus($this->newstatus,$comment,$user)) {
$this->error = 1;
$this->errormsg = "revision_update_failed";
return false;
}
}
}
}
if(!$this->callHook('postReviseDocument', $content)) {
}
return true;
}
}

View File

@ -0,0 +1,56 @@
<?php
/**
* Implementation of Role manager controller
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class which does the busines logic for role manager
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_RoleMgr extends SeedDMS_Controller_Common {
public function run() {
}
public function addrole() {
$dms = $this->params['dms'];
$name = $this->params['name'];
$role = $this->params['role'];
return($dms->addRole($name, $role));
}
public function removerole() {
$roleobj = $this->params['roleobj'];
return $roleobj->remove();
}
public function editrole() {
$dms = $this->params['dms'];
$name = $this->params['name'];
$role = $this->params['role'];
$roleobj = $this->params['roleobj'];
$noaccess = $this->params['noaccess'];
if ($roleobj->getName() != $name)
$roleobj->setName($name);
if ($roleobj->getRole() != $role)
$roleobj->setRole($role);
$roleobj->setNoAccess($noaccess);
return true;
}
}

View File

@ -0,0 +1,68 @@
<?php
/**
* Implementation of Transmittal Download controller
*
* @category DMS
* @package SeedDMS
* @license GPL 2
* @version @version@
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @version Release: @package_version@
*/
/**
* Class which does the busines logic for downloading a transmittal
*
* @category DMS
* @package SeedDMS
* @author Uwe Steinmann <uwe@steinmann.cx>
* @copyright Copyright (C) 2010-2013 Uwe Steinmann
* @version Release: @package_version@
*/
class SeedDMS_Controller_TransmittalDownload extends SeedDMS_Controller_Common {
public function run() {
$dms = $this->params['dms'];
$user = $this->params['user'];
$transmittal = $this->params['transmittal'];
$items = $transmittal->getItems();
if($items) {
include("../inc/inc.ClassDownloadMgr.php");
$downmgr = new SeedDMS_Download_Mgr();
if($extraheader = $this->callHook('extraDownloadHeader'))
$downmgr->addHeader($extraheader);
foreach($items as $item) {
$content = $item->getContent();
$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, $filename);
} else
$downmgr->addItem($content, $extracols, null, $filename);
}
}
$filename = tempnam(sys_get_temp_dir(), 'transmittal-download-');
if($filename) {
if($downmgr->createArchive($filename)) {
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($filename));
header("Content-Disposition: attachment; filename=\"export-" .date('Y-m-d') . ".zip\"");
header("Content-Type: application/zip");
header("Cache-Control: must-revalidate");
readfile($filename);
} else {
}
unlink($filename);
}
exit;
}
}
}

View File

@ -48,16 +48,18 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common {
$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('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)) {
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'))) {
@ -65,6 +67,21 @@ class SeedDMS_Controller_UpdateDocument extends SeedDMS_Controller_Common {
}
}
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_update_document';

View File

@ -1,3 +1,3 @@
#!/bin/sh
# This command retrieves the strings that need to be translated
sgrep -o "%r\n" '"getMLText(\"" __ "\""' */*.php|sort|uniq -c
sgrep -o "%r\n" '"getMLText(\"" __ "\""' */*.php views/bootstrap/*.php |sort|uniq -c

View File

@ -1,7 +1,7 @@
<?php
/* Determine all languages keys used in the php files */
$output = array();
if(exec('sgrep -o "%r\n" \'"tMLText(\"" __ "\""\' */*.php|sort|uniq -c', $output)) {
if(exec('sgrep -o "%r\n" \'"tMLText(\"" __ "\""\' */*.php views/bootstrap/*.php|sort|uniq -c', $output)) {
$allkeys = array();
foreach($output as $line) {
$data = explode(' ', trim($line));
@ -9,8 +9,9 @@ if(exec('sgrep -o "%r\n" \'"tMLText(\"" __ "\""\' */*.php|sort|uniq -c', $output
}
}
$languages = array('ar_EG', 'bg_BG', 'ca_ES', 'cs_CZ', 'de_DE', 'en_GB', 'es_ES', 'fr_FR', 'hu_HU', 'it_IT', 'nl_NL', 'pl_PL', 'pt_BR', 'ro_RO', 'ru_RU', 'sk_SK', 'sv_SE', 'tr_TR', 'zh_CN', 'zh_TW');
/* Reading languages */
foreach(array('en_GB', 'de_DE', 'it_IT', 'sk_SK', 'cs_CZ') as $lang) {
foreach($languages as $lang) {
include('languages/'.$lang.'/lang.inc');
ksort($text);
$langarr[$lang] = $text;
@ -20,7 +21,7 @@ foreach(array('en_GB', 'de_DE', 'it_IT', 'sk_SK', 'cs_CZ') as $lang) {
echo "List of missing keys\n";
echo "-----------------------------\n";
foreach(array_keys($allkeys) as $key) {
foreach(array('en_GB', 'de_DE', 'it_IT', 'sk_SK', 'cs_CZ') as $lang) {
foreach($languages as $lang) {
if(!isset($langarr[$lang][$key])) {
echo "Missing key '".$key."' in language ".$lang."\n";
}
@ -31,7 +32,7 @@ echo "\n";
/* Check for phrases not used anymore */
echo "List of superflous keys\n";
echo "-----------------------------\n";
foreach(array('en_GB', 'de_DE', 'it_IT', 'sk_SK', 'cs_CZ') as $lang) {
foreach($languages as $lang) {
$n = 0;
foreach($langarr[$lang] as $key=>$value) {
if(!isset($allkeys[$key])) {

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