-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCHANGELOG
1530 lines (1361 loc) · 185 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
RADICORE for PHP - news
2018-03-01, version 2.09.0
Database changes:
- run script menu\sql\mysql\menu.menu_export(2017-11-10).sql to update the contents of the MENU database
Other changes:
- fixed bug in mnu_saved_selection.class.inc and output4_header.class.inc by renaming method updateSelection() to updateSavedSelection() so that it does not conflict with standard method inside std.table.class.inc
- updated all dml.???.class.inc files and error.inc to cater for the $errcontext argument of the error handler being deprecated in PHP 7.2
- updated _cm_getNodeData() in 'std.table.class.inc' to include a 4th argument called $collapsed.
- updated 'std.tree_view1.inc' and 'std.tree_view2.inc' to maintain the contents of $collapsed.
- updated return_bytes() function to split off the trailing alpha character before performing any multiplications.
- updated the MENU database to include a new task called 'dates(all)' which will remove the 'dates(current/historic/future)' setting.
- updated 'include.library.inc' so that the currentOrHistoric() function can deal with the 'dates(all)' option.
- updated method '_cm_updateFieldarray()' method in 'std.table.class.inc' so that the 2nd argument is passed by reference. The contents of this array will automatically be merged with $fieldarray after the call so this provides the opportunity to remove values which are no longer wanted.
- added array variable $no_filter_where to 'std.table.class.inc' which prevents column names which do not exist in the current table from being filtered out of the where string. This can be set in the '_cm_initialise()' method. This provides an alternative to the '_cm_filterWhere()' method.
- updated 'include.xml.php5.inc' and 'std.data_field.xsl' to allow tooltips in custom buttons.
- updated 'std.search1.inc' so that it calls the $dbobject->post_search() method before it saves the search string in the $_SESSION array instead of after.
- updated 'std.filedownload.inc' so that you can provide the contents in memory instead of always having to read it from disk.
- updated 'std.table.class.inc' so that the getData_raw() method saves its results in $this->fieldarray.
- updated 'std.table.class.inc' so that the popupReturn() method will not call _cm_popupReturn() if the $selection argument is empty.
- updated 'std.table.class.inc' by adding a 2nd argument to the sqlSelectInit() method which will optionally allow $this->lookup_data to be initialised.
- updated 'include.session.inc' to improve the CSRF checks.
- updated 'std.validation.class.inc' to improve the validation of boolean fields.
- updated 'include.library.inc' so that the getForeignKeyValues() function can find the keys to either the parent or the child table in any parent-to-child relationship.
2017-11-01, version 2.08.0
Database changes:
- none
Other changes:
- fixed bug in logon.class.inc so that it escapes characters in user_id before doing a lookup on AUDIT_LOGON_ERRORS.
- fixed bug in getLanguageArray() which sometimes caused a 'file sys.language_array.inc is empty' error.
- updated dml.pgsql.class.inc for PostgreSQL version 10 which now uses GENERATED AS IDENTITY to indicate an auto-increment column.
- updated mnu_file.class.inc so that when files are deleted on the FilePicker screen it shows the correct count.
- fixed bug in menu\sql\mysql\mnu-user.sql which referenced a column which no longer exists.
- updated std.output1/2/3/4/5/6.inc so that they remove task details from the $_SESSION array after the file has been sent to the browser. This was to fix a problem with the CSRF token.
- fixed bug in std.multi5.inc and std.multi6.inc which sometimes made the RETRIEVE button ineffective.
- fixed bug in std.help.inc where the browser language indicated a language code which is not actually supported.
- fixed bug in std.library.inc where the browser language indicated a language code which is not actually supported.
- updated std.table.class.inc so that if _cm_pre_deleteData() returns an empty $fieldarray then the calls to validateDelete(), deleteRelations() and _dml_deleteRecord() are skipped.
- fixed bug in std.validation.class.inc which dropped fields from the data array if the 'novalidate' or 'nondb' option was set in the $fieldspec array.
- updated dml.pgsql.class.inc to deal with "FOR UPDATE cannot be applied to the nullable side of an outer join" error.
- updated file 'includes/browser_detection.inc' to version 5.8.0
2017-10-05, version 2.07.0
Database changes:
- run script audit\sql\mysql\alter_table(2017-09-18).sql in order to change the structure of the AUDIT database
Other changes:
- increased size of session_id on php_session table to allow for change implemented in PHP 7.1.0
- updated logon screen to add 'Strict-Transport-Security: max-age=31536000; includeSubDomains' to HTTP header when HTTPS is available to turn on HTTP Strict Transport Security (HSTS).
- updated all links in menu bar, breadcrumbs and submit buttons to include a token to prevent CSRF attacks.
2017-09-01, version 2.06.0
Database changes:
- none
Other changes:
- removed the ampersand from all '$dbobject =& RDCsingleton::getInstance()' calls as it now generates a warning that only variables can be passed by reference.
- updated std.batch.inc so that it looks for ini fles in the sequence batch.ini, htaccess and user.ini, and will only process the first one that it finds.
- updated std.table.class.inc so that validateUpdate() method can be limited to primary or secondary validation only instead of both.
- updated std.update1.inc and std.output4.inc to call validateUpdate() with the correct switch.
- updated std.table.class.inc so that the _sqlProcessJoin(), validateDelete(), deleteRelations(), eraseRelations() and getForeignData() methods will use singletons for any child objects.
- updated std.table.class.inc so that the getFieldSpec_original() method will store its data in a static variable so that further calls will use this static variable instead of reading the file from disk again.
- fixed std.add1.inc, std.add2.inc, std.multi1.inc, std.update1.inc and std.update3.inc where '$dbobject' was mis-spelt as '$dbobect'.
- updated include.library.inc so that the getLanguageArray() and getLanguageText() functions will store any data in static variables which are keyed by language code and subsystem to prevent the same file being read from disk more than once.
- updated include.library.inc so that the pasteData() function will call the getForeignData() method to retrieve data from parent tables.
- updated include.xml.php.inc and std.data_field.xsl so that if the 'button' control is set to an array then the 'subtype' value (which can be 'submit' or 'button') will be used for each entry in that array.
- updated include.xml.php5.inc so that the XSLTransform() method will provide the contents of the XML document in the error log should the transform fail for any reason.
2017-08-03, version 2.05.0
Database changes:
- run script menu\sql\mysql\alter_table(2017-07-20).sql in order to change the structure of the MENU database
- run script menu\sql\mysql\menu.menu_export(2017-07-20).sql in order to change the contents of the MENU database.
Other changes:
- updated MNU_USER_ROLE table to include start_date and end_date so that roles can be activated or deactivated on certain dates.
- updated OUTPUT4 task so that the screen now shows a sequence number and a label for each column which can be exported to the CSV file. ***** NOTE THAT YOU WILL HAVE TO REBUILD EACH OUTPUT4 SCREEN STRUCTURE FILE USING THE TEMPLATE SCRIPT IN DEFAULT/SCREENS/EN/OUTPUT4.SCREEN.INC, NOT FORGETTING TO REPLACE '#tablename#' WITH THE ACTUAL TABLE NAME. *****
- fixed bug which prevented "where dt between curdate() and curdate() + interval 365 day" from working.
- fixed bug in 'std.add4.inc' where the call to getInitialDataMultiple() was using $where_array instead of the $where string.
- updated 'std.validation.class.inc' to reject any value for a primary or candidate keys which contains whitespace characters.
- fixed bug in 'getLanguageArray()' and 'getLanguageText()' so that they do not read in the the message file more times than is necessary.
2017-07-01, version 2.04.2
Database changes:
- None
Other changes:
- fixed bug in mnu_user.class.inc which caused the user_password field to be hidden in the 'Add User' task. This is not a good idea as it is a required field.
- modified std.update1.inc so that after the call to $dbobject->getData() the result in $fieldarray is converted from an indexed array to an associative array.
- modified std.singleton.php5.class.inc so that if the input argument contains more than one '/' it will be treated as a complete path name and will not be subject to any adjustments.
- fixed bug in std.search1.inc which failed to deal properly with leaving a popup screen without having made a selection.
- modified include.session.inc to pass $where, $selection and $search strings as arguments on the exec($command_line) call to get around the problem which caused these values to be not retrieved from the $_SESSION array.
- modified std.table.class.inc so that after a call to $dbobject->getData() from anything other than a page controller a call to ->getForeignData() will be made automatically to include any missing data from foreign tables. This will prevent the need to perform this operation manually.
- fixed bug in _dml_ReadBeforeUpdate() method of std.table.class.inc so that the select string is not adjusted if it contains either '*' or '<tablename>.*'.
2017-06-14, version 2.04.1
Database changes:
- None
Other changes:
- fixed problem in filepicker screens by renaming 'file', 'size' and 'date' fields to 'file_name', 'file_size' and 'file_date'. This to to resolve confusion between 'size' being used as an attribute as well as a name.
- fixed bug in a batch process started from a navigation button which caused it to lose the current selection criteria.
- fixed bug in "List Database" screen which caused it not to show the subsystem name.
2017-06-01, version 2.04.0
Database changes:
- run script dict\sql\mysql\alter_table(2017-05-01).sql in order to change the structure of the DICT database
- run script menu\sql\mysql\alter_table(2017-05-01).sql in order to change the structure of the MENU database
- run script dict\sql\mysql\dict.menu_export(2017-05-01).sql in order to update the contents of the MENU database
You are advised to re-export all your application database details after this update.
You are advised to re-export all your application subsystem details after this update.
Other changes:
- updated all XSL stylesheets to output web pages with DOCTYPE for HTML5 instead of XHTML.
- modified std.table.class.inc so that if the getExtraData() method is given an associative array it will return an associative array. If it is given an indexed array it will return an indexed array.
- modified include.library.inc so that the array_update_indexed() function wil reset $fieldarray to ensure that the pointer starts at the first entry.
- modified include.library.inc so that the formatNumber() function will exit if the input argument is not numeric.
- modified std.validation.class.inc so that the validateNumber() will round any values for minvalue and $maxvalue to remove any unwanted decimal places.
- updated std.multi2.inc so that the sort order used in the parent form is used for the inner entity.
- updated std.multi3.inc to fix 'undefined variable' when returning from a child form.
- modified dict_database_s02.class.inc so that child relationships are not exported unless the child table is in the same database as the parent.
- updated std.datevalidation.class.inc so that it throws exceptions instead of populating $this->errors.
- updated include.xml.php5.inc so that if a pageis displayed using HTTPS then the hyperlink for the 'help' page will also use HTTPS.
- modified the logon screen so that when switching between HTTP and HTTPS it passes the session_id via a cookie instead of in the URL.
- updated tables in the DICT database to create consistent names for XX_NAME and XX_DESC columns:
-- the DICT_COLUMN.COLUMN_DESC column is renamed to COLUMN_NAME varchar(80)
-- the DICT_COLUMN.COL_COMMENT column is renamed to COLUMN_DESC text
-- the DICT_DATABASE.DATABASE_DESC column is renamed to DATABASE_NAME varchar(80)
-- the DICT_DATABASE.DB_COMMENT column is renamed to DATABASE_DESC text
-- the DICT_RELATIONSHIP.RELATION_DESC column is renamed to RELATION_NAME varchar(80)
-- the DICT_RELATIONSHIP.REL_COMMENT column is renamed to RELATION_DESC text
-- the DICT_RELATIONSHIP.REL_TYPE column is renamed to RELATION_TYPE char(3)
-- the DICT_TABLE.TABLE_DESC column is renamed to TABLE_NAME varchar(80)
-- the DICT_TABLE.TBL_COMMENT column is renamed to TABLE_DESC text
- updated tables in the MENU database to create consistent names for XX_NAME and XX_DESC columns:
-- the MNU_ACCOUNT.ACCOUNT_DESC column is added
-- the MNU_FAVOURITE.TASK_DESC column is renamed to TASK_NAME
-- the MNU_PATTERN.PATTERN_DESC column is renamed to PATTERN_NAME
-- the MNU_PATTERN.PATTERN_DESC column is added
-- the MNU_ROLE.ROLE_DESC column is renamed to ROLE_NAME
-- the MNU_ROLE.ROLE_DESC columnis added
-- the MNU_SAVED_SELECTION.SELECTION_DESC column is renamed to SELECTION_NAME
-- the MNU_SUBSYSTEM.SUBSYS_DESC column is renamed to SUBSYSY_NAME
-- the MNU_SUBSYSTEM.SUBSYS_DESC column is added
-- the MNU_TASK.TASK_DESC column is renamed to TASK_NAME
-- the MNU_TASK.TASK_DESC column is added
-- the MNU_TASK_ALT.TASK_DESC column is renamed to TASK_NAME
-- the MNU_TASK_ALT.TASK_DESC column is added
-- the MNU_TODO.ITEM_DESC column is renamed to ITEM_NAME
-- the MNU_TODO.ITEM_NOTES column is renamed to ITEM_DESC
- updated the MNU_USER table to replace the pswd_chg_date and pswd_chg_time columns with a single pswd_change_datetime
- updated the MNU_USER table to replace the logon_date and logon_time columns with a single logon_datetime
2017-04-02, version 2.03.0
Database changes:
- run script menu\sql\mysql\alter_table(2017-02-12).sql in order to change the structure of the MENU database
Other changes:
- fixed bug in where2indexedArray() so that it deals with '(SELECT COUNT(*) FROM .....) = 0' properly.
- modified processing of $this->no_foreign_data so that it will still process _cm_getForeignData() but skip processing of $this->parent_relations array.
- added column FORCE_PSWD_CHG to table MNU_USER which will force the user to change his password at the next logon regardless of any policy on days or logons. This flag will be set to 'Y' whenever a user's password is reset, but only if the corresponding 'Force Change?' value on the Menu Control record is set to 'Y'.
- modified processing of WHERE string to allow both of the following:
-- lower(product_name) LIKE '%hello%'
-- product_name ILIKE '%hello%'
- added the ability to filter records from the display in the _cm_post_getData() method.
2017-02-01, version 2.02.0
Database changes:
- run script workflow\sql\workflow.menu_export(2016-11-02).sql in order to update the contents of the MENU database
Other changes:
- found and fixed a number of "Undefined index" and "Undefined variable" notices.
- fixed a bug in the logon class which failed to include the user_id when writing to the AUDIT_LOGON_ERRORS table.
- added new tasks to the Workflow subsystem to allow a case status to be changed in the following ways (a) from OPEN to SUSPENDED, (b) from OPEN to CANCELLED, (c) from SUSPENDED to OPEN, and (d) from SUSPENDED to CANCELLED. You will need to run script workflow\sql\workflow.menu_export(2016-11-02).sql in order to update the contents of the MENU database.
- modified 'std.table.class.inc' so that the insertMultiple() method can perform updates and deletes as well as inserts.
- modified 'std.table.class.inc' so that the updateMultiple() method can perform inserts and deletes as well as updates.
- modified 'include.session.inc' so that the initSession() function will strip all single and double quotes from the $_GET array before it is processed.
2016-11-01, version 2.01.0
Database changes:
- none
Other changes:
- updated 'include.xml.php5.inc' so that when a LIST pattern is executed it will not read the MNU_TASK data for popup tasks in order to obtain the text for the tooltip.
- tidied up batch processing by copying file 'std.batch.inc' from each subsystem directory and renaming it as 'include.batch.inc' in the parent directory. Updated each 'std.batch.inc' so that it refers to '../include.batch.inc'. Also copied 'batch.ini.default' and 'batch.ini' from each susbsystem directory into the parent directory. This means that I can update the code in '../include.batch.inc' in just one place instead of multiple directories, and that each installation needs only one copy of 'batch.ini'.
- included file 'custom_javascript.class.inc' which will allow javascript to be specified globally for all forms and/or all fields.
- created 'javascript' directory to contain scripts 'jquery-3.1.1.min.js' and 'jquery.cookie.min.js' which will disable a submit button when it is pressed and overlay it with a spinning red circle. This will prevent the problems caused by a user who presses a submit button more than once, thus sending multiple requests to the server.
- modified 'include.xml.php5.inc' so that call to form_level_js() in 'custom_javascript.class.inc' is only performed once for each form.
- updated Workflow system to allow more than two arcs on an implicit-OR-split, and removed restriction that one of the transitions must be triggered via a TIMER.
- fixed bug which prevented putting all Radicore schemas into a single database.
- modified 'database(output2).php' so that the PDF output shows the count of tables and relationships in each subsystem.
2016-10-01, version 2.00.0
Database changes:
- run script menu\sql\mysql\alter_table(2016-08-30).sql to alter the structure of the MENU database.
Other changes:
- dropped support for PHP4 and opened support for PHP7. This is because the PHP4 class constructors, which worked in both PHP4 and PHP5, will no longer work in PHP7. I have updated all classes to use the PHP5 constructors which will work in PHP5 and PHP7, but not in PHP4.
- changed MNU_TODO table by adding a column called 'object_id'. This is an optional field which is not used by the framework but by an application which was built using the framework.
- fixed bug in getCount() method where the SQL statement starts with whitespace.
- modified the logging of sql queries so that they are now written to the '<subsystem>/sql/logs' directory instead of the '<subsystem>/sql' directory, and to include timings down to the millisecond. See <a href="http://www.radicore.org/viewarticle.php?article_id=23#faq51">FAQ51</a> for details.
- added function dateDiff_YYMM() to get the difference between two dates in years and months.
- updated 'include.session.inc' and 'std.update4.inc' so that when a task of the UPDATE4 pattern is activated through a navigation button without any individial rows being selected then any search criteria currently being used in the parent task will be passed down to the child task.
- updated all page controllers to remove the calls to START_TRANSACTION and COMMIT/ROLLBACK around the processing of custom buttons as they serve no purpose.
- updated 'include.session.inc' so that if scriptNext() is used when processing a custom button then it is treated just like a popup in that when the form containing the custom button is reactivated it will not re-read the database and therefore lose any data in the form which has not yet been saved.
- updated 'dml.sqlsrv.class.inc' to use 'SELECT SCOPE_IDENTITY()' instead of 'SELECT @@identity' to fix the bug reported in <a href="http://radicore.org/fud/index.php?t=msg&th=2288">http://radicore.org/fud/index.php?t=msg&th=2288</a>.
- updated setJavaScript() in include.xml.php5.inc so that the contents of $javascript['foot'][]['code'] is processed correctly.
2016-08-01, version 1.97.0
Database changes:
- none
Other changes:
- added function generateGUID() to incude.library.inc
- updated std.add1/2/5.inc to include call to $object->quitButton() when CANCEL button is pressed.
- added the generateGUID() function to include.library.inc
- updated SQL Server processing to avoid the error 'New transaction is not allowed because there are other threads running in the session'. Calls to $dbobject->getDataSerial() and $dbobject->fetchRow() are now done using a separate instance of the database driver. This means that if any database updates are performed after a call to ->fetchRow() the call to ->startTransaction() will no longer fail.
- updated 'std.validation.class.inc' to disallow a '%' character from being used in a primary or unique key as this is used as the 'wildcard' character in database searches.
- updated 'std.filepicker.list1.xsl' to allow video files as well as still images.
- updated 'std.table.class.inc' so that when a task is initiated via append2ScriptSequence() with 'action' = 'OK' (meaning that the QUIT button is invalid and the task should only be terminated with a SUBMIT button) then the QUIT/CANCEL button is removed so that it cannot be pressed.
2016-07-01, version 1.96.0
Database changes:
- none
Other changes:
- fixed bug in 'logon.class.inc' and mnu_user.class.inc' which failed to deal with passwords which had not been encrypted before being stored in the database.
- fixed bug in 'mnu_user.class.inc' which which only deal with users with the same value for rdcaccount_id as the logon user when toggling between encrypted and unencrypted passwords.
- fixed bug in 'std.validation.class.inc' which rejected a field's subtype of 'video'.
- fixed bug in 'dml.pgsql.class.inc' regarding the error "FOR UPDATE cannot be applied to the nullable side of an outer join".
- fixed bug in 'dml.sqlsrv.class.inc' where referencing an alias name which is the product of a previous expression has to be replaced by the original expression.
- modified 'include.xml.php5.inc' and 'include.session.inc' to deal with popup buttons which can appear in different entities in the same multi-entity transaction pattern. The button's value will now be in the format 'task#<zone>#<task_id>' where '<zone>' can be either 'dbouter', 'dbmiddle' or 'dbinner'. When returning from the popup this makes it easier to pass the popup result to the correct table object.
- fixed bugs in 'mnu_initial_value_role(multi3)a/b.php', 'mnu_initial_value_user(multi3)a/b.php' and 'mnu_role_taskfield(multi3)a/b.php' where the query produced the wrong result in certain circumstances.
- modified all 'dml.???.class.inc' files so that when looking for a change in a unique key during an update it will use strcasecomp() to perform a case-insensitive comparison.
- modified 'std.pdf.class.inc' so that the 'ignore_if_empty' option will now work in 'Body contents (detail view - additional data)'.
- modified 'include.xml.php.inc', 'std.buttons.xsl' and 'std.data_field.xsl' so that tooltips are now displayed for action buttons amd popup buttons.
- fixed bug which prevented creation of new records on MNU_ACCOUNT table.
- fixed bug when a user with a NULL rdcaccount_id used Copy+Paste on a user record which had rdcaccount_id > 1. The new record must use the same rdcaccount_id as the copied record whereas the bug caused it t be set to 1 (the shared account).
2016-06-01, version 1.95.0
Database changes:
- run script menu\sql\mysql\alter_table(2016-05-18).sql to alter the structure of the MENU database.
- run script menu\sql\mysql\menu.menu_export(2016-05-18).sql to alter the contents of the MENU database.
Other changes:
- modified handling of custom buttons in page controllers ADD5, LINK1, MULTI2/3/4/5/6. By default the customButton() method will only be called on the object in which the button was actually defined, but this can be overridden by setting $this->allow_all_zones=TRUE in other objects.
- fixed bug in 'mnu_initial_value_role_s01.class.inc' by excluding 'start_task_id' from the WHERE clause which was introduced in version 1.94.0.
- fixed bug which caused role_id on "Search User" screen to be mandatory instead of optional.
- fixed bugs with "Search Workitem" and "Search Token" screens in WORKFLOW subsystem.
- fixed bug in 'Generate PHP Script (b)' when it tried to create an entry on MNU_MENU with a value for button_text which was too long. It now uses the table identity instead of the table description.
- added $rownum as a second argument to the _cm_getForeignData() method to identify the row number for the $fieldarray argument.
- added column 'is_documentation_only' to the 'mnu_task_field' table. This defaults to 'N', but can be set to 'Y' when the entry should not be used as a prompt when adusting the contents of the MNU_INITIAL_VALUE_USER or MNU_INITIAL_VALUE_ROLE tables.
- added tables MNU_TASK_QUICKSEARCH and MNU_TASK_QUICKSEARCH_ALT so that populating the QuickSearch area on the screen can be done by adding entries to the MENU database instead of adding code to the table class.
- amended the data dictionary to add the 'mustvalidate' option to the $fieldspec array.
- amended the data dictionary to add 'video' to the list of subtypes.
- amended 'std.table.class.inc' so that the member variable called $this->reuse_previous_select has a default value of TRUE instead of FALSE as TRUE is the most common value that is required.
2016-04-01, version 1.94.0
Database changes:
- none
Other changes:
- modified 'dict_column.class.inc' so that when inporting column definitions it does not nullify existing values for 'align_hv' or 'align_lr'.
- fixed bug in 'mnu_subsystem_s01.class.inc' (Export Subsystem) which escaped the " (double quote) character which caused such strings as '<a href="...">' to be corrupted when reloaded.
- fixed bug in 'mnu_subsystem_s01.class.inc' (Export Subsystem) which caused data for mnu_user_role to be labelled for the mnu_initial_value_user table.
- updated the 'fileupload1' pattern to include a call to getExtraData() so that the messages can be customised.
- modified the use of rdcaccount_id so that access to a table's data depends on the value in the user's MNU_USER record:
- if NULL then the user can read data for any account but can only add/update/delete records for rdcaccount_id=1 (the shared account)
- if = 1 then the user can only read/add/update/delete data for the shared account
- if > 1 then the user can read data for that account and the shared account, but can only add/update/delete records for that non-shared account
- modified 'std.validation.class.inc' to use the filter_var() function for email addresses and numbers.
2016-01-30, version 1.93.0
Database changes:
- none
Other changes:
- Added 'u' modifier to all preg_replace calls to fix the problem reported in http://radicore.org/fud/index.php?t=msg&th=1896&goto=5293&#msg_5293
- Changed 'mnu_subsystem_s01.class.inc' so that when exporting a subsystem it includes MNU_TASK entries with TASK_TYPE = 'MENU' as well as 'PROC'.
- Changed 'mnu_subsystem_s01.class.inc' so that when exporting a subsystem it includes MNU_ROLE entries for each role that has one of the subsystem's tasks on the MNU_ROLE_TASK table.
- Changed 'std.list2.inc' and 'std.list3.inc' to use function 'getForeignKeyValues()' to help build the WHERE string to access the child table.
- Modified the Workflow process so that if a transition is a batch task, the next transition can have an 'AUTO' trigger provided that it is also a batch task. It is possible for an online task to be followed by a batch task with an 'AUTO' trigger which is then run immediately in the same session, but it is not possible for a batch task to be followed by an online task with an 'AUTO' trigger. A transition which is a batch task can be followed by an online task with a 'USER' trigger as this does not actually run the online task - it only updates the database to enable the workitem for that online task which then prompts the user for action during an online session.
- Modified the Dictionary Export process so that any column with the column_desc field set to 'DEPRECATED' will be excluded from the $fieldspec array. This will allow a deprecated column to remain in the physical database, but the table class will act as if it is not there.
- Modified the way that batch (command line) tasks are activated on Windows so that if the PHP.EXE program is not correctly defined on the PATH environment variable it can be overridden by the PATH_TO_PHP_EXECUTABLE constant in the config.inc file.
2015-12-12, version 1.92.0
Database changes:
- run script 'audit\sql\mysql\alter_table(2015-10-15).sql' to alter the structure of the AUDIT database.
- run script 'menu\sql\mysql\alter_table(2015-11-19).sql' to alter the structure of the MENU database.
- run script 'menu\sql\menu.menu_export(2015-11-20).sql' to alter the contents of the MENU database.
Other changes:
- modified tables 'audit_ssn' and 'audit_trn' in the AUDIT database to replace separate 'date' and 'time' columns with a single 'datetime' column. This will allow more accurate selections between different dates.
- modified the 'Menu Control' screen to allow the 'Audit Delete' values to specify a time period in days, weeks, months or years instead of just years.
- modified 'std.csv.class.inc' to include the 'appendToCSV()' method to allow additional data to be appended to the CSV output following the calls to 'getData_serial()' and 'fetchRow()'.
- fixed bug in workflow engine caused by a case being started by a user whose rdcaccount_id is set to '1'.
- updated 'std.output4.inc' to allow the use of popup buttons, custom buttons and javascript.
- fixed bug in 'std.fileupload1.inc' caused by wrong arguments being passed to SplFileInfo object.
- amended the MENU database by adding tables MNU_SAVED_SELECTION and MNU_SAVED_SELECTION_DATA for use in transations which use the OUTPUT4 pattern.
- fixed bug in 'dml.oracle.php.class.inc' when performing getData_serial() with $rows_per_page > 0.
- fixed bug in 'dict_table_s02.class.inc' when exporting dictionary data as reported in http://radicore.org/fud/index.php?t=msg&goto=5177
- updated 'std.table.class.inc' to add the $offset argument to the _cm_popupCall() method so that if this is used in an area with multiple rows it will show the HTML row number (which starts from 1 not zero).
- updated '_cm_pre_getData)' method in 'std.table.class.inc' to rename 3rd argument from $fieldarray to $parent_data.
- updated 'dict_table_s04.class.inc' so when generating the scripts for a LINK1 pattern it will allow the INNER table to be in a different database.
- updated 'std.table.class.inc' to rename '_validateInsert()' and '_validateUpdate()' methods to '_validateInsertPrimary()' and '_validateUpdatePrimary()' in order to avoid confusion with other validation methods with similar names.
2015-10-01, version 1.91.0
Database changes:
- run script 'menu\sql\<dbms>\alter_table(2015-09-20).sql' to rename 'mnu_user.language_code' to 'mnu_user.language_id'.
Other changes:
- fixed bug in std.update1.inc which erroneously called the getInitialData() method after the PASTE button was pressed.
- modified 'std.treenode.xsl' to allow additional names in 'css_class' to be added to the node description.
- fixed bug in 'std.multi5.inc' which caused the call to $dbinner->setParentData() to initialise $inner_data.
- updated 'std.search1.inc' to set $dbobject->no_foreign_data = FALSE instead of TRUE. This is because I have found it necessary to change it to FALSE more often than to leave it as TRUE, so the default setting should be the one that is most commonly used.
- updated 'std.filepicker1.inc' so that it automatically includes the quicksearch area for file or directory names. This removes the need for a separate 'Search' button on the navigation bar.
- updated 'include.xml.php5.inc' and 'std.head.xsl' to allow javascript to be added at the end of the <BODY> element.
- updated 'include.xml.php5.inc' and 'std.data_field.xsl' to allow custom buttons to be specifed by either the <input> or <button> controls. If you currently use any 'button' controls these may have to be changed to 'input' due to the way that the button text is displayed in the screen.
- fixed bug in 'std.multi2/3/4/5.inc' which caused a popup in the inner entity to return its result to the wrong row.
- updated 'include.xml.php5.inc' to allow 'rdc_fieldspecs' to be an alias of 'rdc_fieldspec', and to allow either to be used in the '_cm_formatData)' method as well as the '_cm_post_getData()' method.
- fixed bug in 'std.multi4.inc' which caused scrolling for the outer entity to fail.
- renamed column 'language_code' to 'language_id' in the MNU_USER table to be consistent with the MNU_LANGUAGE table.
- fixed bug in 'mnu_subsystem_s01.class.inc' which caused an invalid query to be generated when trying to export from the 'mnu_user_role' table.
- updated TCPDF library to version 6.2.12
- updated TINYMCE library to version 4.2.6
2015-07-01, version 1.90.0
Database changes:
- run script "menu\sql\menu.menu_export(2015-06-23).sql" to add the 'directory(up)' task to the MENU database.
Other changes:
- fixed bug in 'validateDelete()' method within 'std.table.class.inc' which caused $errors array to be cleared out by calling '_examineWorkflowInstance()' method.
- updated 'where2array' and 'array2where' functions within 'include.library.inc' to cater for bitwise operations on columns such as "WHERE col1 & 1 = 0".
- fixed bug in 'dict_column.class.inc' which failed to show the size of columns of type 'bit'.
- fixed bug in 'php_session.class.inc' where the values for 'date_created' and 'last_updated' were set using PHP dates while the date comparison in the GC method (garbage collection) used 'now()' which is the current date as known to the database server. 'date_created' and 'last_updated' are now updated using 'now()'.
- updated all the relevant 'dml.???.class.inc' classes to convert 'now()' to the equivalent function in that DBMS.
- fixed bug in 'std.tree1.inc' and 'std.tree2.inc' which prevented selected rows from staying selected after returning from a child task with the 'locked' option set.
- modified 'std.filepicker1.inc' so that it will list directories instead of file if the $this->picker_filetypes property is set to the string 'directory' instead of an array of file extensions. This can be used in a task which can be added as a navigation button to a standard filepicker task to switch to a subdirectory within the current directory. See <a href="http://www.tonymarston.net/php-mysql/infrastructure-faq.html#faq162">FAQ162</a> for details.
- added a new task called 'directory(up)' to the 'Miscellaneous' subsystem which can be added as a navigation button on a filepicker task to go up a directory level instead of down to a selected subdirectory.
- updated 'std.fileupload1.inc' so that when it is started from a navigation button in a filepicker task it will set its directory to the current directory in that filepicker task.
- modified the screen layout used by 'std.fileupload1.inc' so that it shows the directory into which the file will be uploaded.
2015-05-05, version 1.89.0
Database changes:
- run script "audit\sql\mysql\alter_table(2015-03-29).sql" to alter the 'session_data' column from TEXT to BLOB.
- run script "workflow\sql\mysql\alter_table(2015-05-01).sql" to update the structure of the WF_ARC table in the WORKFLOW database.
- run script "menu\sql\mysql\alter_table(2015-05-01).sql" to update the structure of the MNU_USER table in the MENU database.
Other changes:
- updated the 'getExtraData()' method within 'std.table.class.inc' so that the call to '_cm_getExtraData()' comes after the call to '_cm_changeConfig()' instead of before. This allows any extra data to be fetched after the object's configuration has been changed.
- updated 'dml.sqlsrv.class.inc' to deal with conversion of CONCAT, CONCAT_WS and GROUP_CONCAT functions.
- fixed bug in 'mnu_task(upd1).php' which caused the 'Run at End' and 'Run at Cancel' popups to show only the current task instead of everything but the current task.
- updated the 'php_session' table in the AUDIT database from a TEXT to a BLOB datatype so that it can handle unusual characters. This became evident in the SQLSRV driver, but may also affect the MYSQL driver.
- updated 'php_session.class.inc' so that the 'session_data' column for the SQLSRV database is converted from TEXT to BINARY using the CONVERT(varbinary(max), ...) function.
- updated 'std.table.class.inc' to include the $allow_zero_rows property. This is for use in the LIST3 pattern.
- updated 'std.list3.inc' so that if no rows are read in the 'middle' entity, but it has the $allow_zero_rows property set, it will continue to the 'inner' entity without displaying an error. This will effectively make the 'middle' entity optional.
- updated 'std.table.class.inc' to include the 'validateChooseButton()' and '_cm_validateChooseButton()' methods.
- updated 'include.session.inc' so that when the 'chooseButton()' function is called it will pass the selection to the object's 'validateChooseButton()' method. This will allow further processing to take place after the selection has been made and before it returns control to the calling script.
- updated 'std.table.class.inc' to include the 'getParentClass()' and 'getChildClass()' methods which will return the names of those classes, if they exist in the current Transaction Pattern.
- updated 'std.validation.class.inc' to convert a boolean value from TRUE/FALSE to the equivalent 'true' or 'false' value provided in the $fieldspec array.
- updated the WF_ARC table in the WORKFLOW database to replace the 'pre_condition' field with three separate fields to remove the need to use the 'eval()' function which could possibly be used to inject malicious code.
- updated the MNU_USER table in the MENU database to increase the size of the 'user_password' column. This is to allow a future change to the password hashing/encryption algorithm.
2015-03-01, version 1.88.0
Database changes:
- none
Other changes:
- modified 'std.csv.class.inc' so that the call to ini_set('auto_detect_line_endings', true) comes before the call to fopen(), not after. This is a result of https://bugs.php.net/bug.php?id=63341
- modified 'getChanges()' function in 'include.library.inc' so that the test uses '==' instead of '===' as this was saying that the value '6' (string) was different from the value 6 (long).
- modified 'getCount()' method in several 'dml.???.class.inc' files so that it can deal correctly with a $where string that spans multiple lines.
- fixed bug within 'ddl_showTableKeys()' method in file 'dml.sqlsrv.class.inc' to include 'constraint_name' in the list of selected fields.
- modified 'dict_table_key.class.inc' so that the key name 'PRIMARY' is in uppercase and all other keys are in lowercase.
- modified 'dict_column_s01.class.inc' so that the call to '$keyobj->getInitialDataMultiple($this->where)' is not executed if there are any errors produced by a previous call.
- fixed bug in 'std.update1.inc' which lost scrolling area after pressing 'SUBMIT' button.
- fixed bug in 'logon.php' which failed to update AUDIT_LOGON_ERRORS and MNU_USER table if the logon failed and the database engine was transactional. Previously it followed the convention where any errors would cause a rollback, but in this case it must always perform a commit in order to log the error.
- fixed bug in 'std.datevalidation.class.inc' which allowed a date such as '1970-01-001' to be accepted as valid.
- fixed bug in 'std.datevalidation.class.inc' which failed to strip off the microseconds from timestamps HH:MM:SS<.microseconds>
- updated 'std.fileupload1.inc' so that if $this->allow_multiple = TRUE then a SUBMIT+stay button will be shown to prevent the task from quitting after the file has been uploaded, thus allowing another file to be uploaded.
- updated 'std.fileupload1.inc' so that it will populate a $files array for each uploaded file. This will contain the following:
$file['url'] = fully-qualified file name
$file['filename_orig'] = 'example.pdf'
$file['filename'] = 'example'
$file['extension'] = 'pdf'
$file['size'] = 23400
- amended 'std.table.class.inc' so that after returning from a fileupload task the contents of the $files array will be made available in an additional argument called $return_files in the _cm_reset(), _cm_popupReturn() and _cm_post_popupReturn() methods.
2014-12-01, version 1.87.0
Database changes:
- none
Other changes:
- fixed bug in 'std.pdf.class.inc' so that can it can trap and discard any Byte Order Marks which are written to the output stream when a file which is encoded in UTF-8 is included, such as when the getLanguageText() function is called.
- fixed bug in 'std.multi1.inc' so that if a call to getData($where) returns an empty row it will be filled with the contents of the $where string so that a new record can be created.
- fixed bug in 'std.table.class.inc' so that the formatData() method will not call the getInternalDate() method on an empty date otherwise it will generate an error.
- updated 'std.filepicker1.inc' so that it will use the 'Order By' value in the task screen for its default sort sequence.
- fixed bug in 'mnu_menu.class.inc' which, in some circumstances, did not remove menu buttons which were not accessible by the user.
- fixed bug in the data dictionary which failed to show the choice of unique keys when maintaining the relationship between two tables.
- fixed bug with where2array() function in 'include.library.inc' which could not deal with tabs and newlines in the input string.
- fixed bug with executeQuery() method in 'std.table.class.inc' so that when splitting a string of queries into an array using ';' as a delimiter it now ignores ';' characters inside quoted strings. This fixes bug http://radicore.org/fud/index.php?t=msg&th=1410
- fixed bug in isPkeyComplete() function in 'include.library.inc' which failed to deal with a compound unique key where an optional column was not provided. This should only cause an error when a NOT NULL column is not provided.
- fixed bug with 'Generate PHP scripts (b) - Enter Details' which failed to show the outer database name and showed an empty dropdown list for the outer table name in the DEL4 pattern. This fixes bug http://radicore.org/fud/index.php?t=msg&th=1414
- updated PDF processing to allow 'padding' values to be set between the cell boundary and the cell contents.
- updated PDF processing to allow the 'y' coordinate of one cell to be saved so that it can be used to position another cell.
2014-09-01, version 1.86.0
Database changes:
- none
Other changes:
- modified processing of datetime fields so that when the input contains only a date portion a time portion will be appended, and this will be taken from the default value. For start_date fields this will normally be '00:00:00' while for end_date fields this would be '23:59:59'.
- modified 'std.tree_view2.inc' to set $GLOBALS['mode'] to 'tree' instead of 'read', and to call the 'getExtraData()' method on the outer entity.
- fixed bug in 'std.multi1.inc' which removed all data except the primary key for a new record after returning from a popup screen.
- fixed bug in 'std.buttons.xsl' and 'include.xml.php4/5.inc' to make the word 'Selections:' (in the navigation bar) translatable instead of hard-coded.
- fixed bug in validateSortItem() function so that if the object's table name is at the start of the FROM string it will not look for any alias names for that table.
- fixed bug in 'std.list2.inc' and 'std.list3.inc' so that when the RESET button is used it will not lose the ORDERBY sequence for the outer entity.
- added the ability to specify that a particular field in a particular row in a multi-row update area, such as in a MULTI2 pattern, should be set to 'noedit'. This can be achieved by adding the pseudo-column 'rdc_fieldspec['fieldname']' with the value "array('noedit' => 'y')" to the row in question.
- modified the workflow system to enable a task to set the user_id of a workitem record to a particular value. See <a href="http://www.tonymarston.net/php-mysql/infrastructure-faq.html#faq161">FAQ161</a> for details.
- fixed bug in 'logon.class.inc' which generated an invalid SQL query when trying to set 'is_disabled' to TRUE after the number of failed logon attempts went over the limit.
- amended 'std.table.class.inc' so that for the 'insertRecord()' and 'updateRecord()' methods the call to $this->convertTimeZone is now done after the call to '_cm_pre_insertRecord()' and '_cm_pre_updateRecord()' respectively. This is to allow any datetime validation to take place before the values are converted from the client timezone to the server timezone.
2014-07-01, version 1.85.0
Database changes:
- run script 'dict/sql/mysql/alter_table(2014-06-14).sql' to change the structure of the DICT database.
- run script 'menu/sql/menu.menu_export(2014-06-26).sql' to alter the contents of the MENU database
Other changes:
- fixed bug in 'dict_table_key.class.inc' which failed to update correctly after columns were either added to or removed from the primary key.
- fixed bug in 'dml.pgsql.class.inc' which failed to set the auto_increment attribute when importing a table's structure into the Data Dictionary.
- updated table 'dict_column' in the DICT database to increase size of 'col_default' column from 40 to 255 characters. This is to allow default values such as "nextval('test_autoincrement_id_seq'::regclass)" which may appear in PostgreSQL databases.
- fixed bug in 'mnu_task.class.inc', 'mnu_menu.class.inc', 'mnu_nav_button.class.inc' and 'mnu_favourite_s04.class.inc' so that queries test for the value 'Y' instead of TRUE otherwise they will fail when using the PostgreSQL database.
- modified 'std.tree_view1.inc' and 'std.tree_view2.inc' to allow pagination, but this is for the entries which exist at level 1 only.
- added pattern 'OUTPUT6' to extract data from a Tree View and output it to a CSV file.
2014-06-01, version 1.84.0
Database changes:
- run script 'menu/sql/mysql/alter_table(2014-05-07).sql' to change the structure of the MENU database.
Other changes:
- modified 'php_session.class.inc' so that it ignores $GLOBALS['server_timezone'] when setting the 'date_created' and 'last_updated' columns. This was causing problems with session garbage collection when the application timezone was different from the database timezone.
- modified 'dml.pgsql.class.inc' so that it sets the database timezone to be the same as date_default_timezone_get();
- fixed bug in 'dml.oracle.class.inc' which caused an incorrect conversion of 'DATE_SUB(field1 - INTERVAL $field2 unit)' to '($field1 - INTERVAL '$field2' $unit)'.
- fixed bug when attempting to use the 'recover password' option on the logon screen.
- modified the MNU_LANGUAGE table to increase the size of the date_format columns. This is to allow for Asian dates which contain symbols.
- modified 'std.filepicker1.inc' so that if the directory contains more than 2000 files the file names will be read once and stored in a cache instead of being read from disk each time. The cache will be per session, and if the RESTART button is pressed it will be rebuilt.
- added function 'replaceScreenLabels()' to work in DETAIL screens to complement 'replaceScreenHeadings()' which works in LIST screens.
- updated 'std.pdf.class.inc' to allow all fonts to be changed if the language changes. Please refer to http://www.tonymarston.net/php-mysql/infrastructure-faq.html#faq159 for details.
- modified the logon process to check the record counts on the 'mnu_task_ip_address', 'mnu_user_ip_address', 'mnu_time_limit_role' and 'mnu_time_limit_user' tables so that if they are empty no further lookups are performed on all subsequent web pages in the current session.
- updated 'std.imap.class.inc' to use imap_errors() if imap_open() returns false.
2014-05-01, version 1.83.0
Database changes:
- run script 'menu/sql/mysql/alter_table(2014-04-17).sql' to change the structure of the MENU database.
- run script 'menu/sql/menu.menu_export(2014-04-17).sql' to change the contents of the MENU database.
Other changes:
- updated the MNU_LANGUAGE table in the MENU database to add the 'input_date_format' and 'output_date_format' columns. This is to allow the ability to specify different input and output date formats for different languages instead of having a single output format for each installation. The input date format will restrict the user's input to that format instead of allowing it to be free-format and having the software guess what it is by using regular expressions (this does not work satisfactorily with certain unicode character sets).
- updated the MNU_FAVOURITE table in the MENU database to add a UNIQUE index on user_id+task_id to prevent duplicate records.
- updated the MENU database to remove the 'role_id' column from the MNU_USER table and move it to the new MNU_USER_ROLE table. This will allow a user to have more than one role. One role must be marked as 'primary' to identify the starting transaction.
- updated the MENU database to include the MNU_USER_ALT table which allows users to have different names in different languages.
- fixed bug in 'dml.*.class.inc' which prevented a candidate key from being changed from something to NULL.
- updated 'std.csv.class.inc' so that when creating a CSV file it will by default set the BOM (byte order mark) to signify that the output is UTF8.
- updated login.php so that after a successful login the session_id is regenerated. This procedure was advised in https://wblinks.com/notes/secure-session-management-tips/
- updated htaccess.txt to include "session.cookie_httponly 1". This procedure was advised in http://simonholywell.com/post/2013/05/improve-php-session-cookie-security.html
- fixed bug in '_dml_updateSelection()' and '_dml_deleteSelection()' methods which used the current value in $this->rows_per_page to limit the number of rows affected. This prevented more than one record being processed if the current value of $this->rows_per_page was 1, such as in an UPDATE1 transaction. This value is now ignored, which means that the code will process all available records and not just the first one.
- modified the '__sleep()' method within 'std.table.class.inc' so that when the object is being serialised for storage in the session data the contents of $this->fieldarray will be modified to remove any fields which are not in the primary key. Note that the list of pkey fields can be temporarily adjusted by using the '_cm_getPkeyNames()' method. Note that this procedure is not performed if the current task has a pattern of ADD, UPD, MULTI or SRCH.
- fixed issue http://www.radicore.org/forum/index.php?t=msg&th=1089&goto=4133 which caused the audit trail to find zero records.
2014-03-07, version 1.82.0
Database changes:
- none
Other changes:
- modified 'std.table.class.inc' so that '_cm_getColumnNames()' method can be used to remove unwanted columns as well as set the initial value in the selection screen of the UPDATE4 task.
- modified 'std.search1.inc' so that it will accept a value for an ENUM field which is either a numeric index or a string representation.
- modified 'runInBackground()' function within 'include.session.inc' so that if being run on linux/unix it will run the command line version of PHP and pass the session id as an argument, otherwise it will continue to start a parallel apache thread via the curl extension.
- modified 'initSession()' function within 'include.session.inc' so that it the session id can be obtained either from $argv (command line) or $_GET.
- modified 'std.batch.inc' so that it will display any input values which have been supplied in the $argv array.
- modified 'mnu_nav_button.class.inc' so that when it modifies the SELECT clause to extract values from a foreign language table it removes the previous entry from the default table. This is to fix a problem when using the SQL Server database as it does not like duplicate names in the SELECT clause.
- fixed bug in 'dml.sqlsrv.class.inc' where it failed to change 'dbname.tblname' to 'dbname.dbo.tblname' in the SELECT clause.
- updated 'getExternalDate()' and 'getInternalDate()' methods inside 'std.datevalidation.class.inc' to provide a second optional argument to specify the format of the input/output date if it is different from the value defined in $GLOBALS['date_format'].
- modified 'std.table.class.inc' to include '$this->executeQuery()' method to execute an arbitrary query, or several queries. You can also use '$this->multiQuery()' as a synonym for this method.
- added the 'findDBName()' function to identify the correct database name to be used in an SQL query containing a JOIN.
- fixed bug in 'std.pdf.class.inc' which caused a cell containing only '0' (zero) to be printed as blank.
- modified 'dict_table_s02.class.inc' so that when creating '<table>.dict.inc' files it will include the database name independent of the subsystem name. This is to allow more than one database to exist in the same subsystem.
2013-12-01, version 1.81.0
Database changes:
- run script menu/sql/menu.menu_export(2013-10-17).sql to change the contents of the MENU database.
- run script dict/sql/dict.menu_export(2013-10-26).sql to change the contents of the MENU database.
- run script dict/sql/mysql/alter_table(2013-10-26).sql to change the structure of the DICT database.
Other changes:
- updated 'radicore.simplexmlelement.inc' (which is used to convert a PHP array to XML) so that if the first element is an index number then it is output as '<index index="0">' instead of '<0>' which is invalid XML.
- updated 'include.library.inc' so that the format_xml_document() function will abort if the $doc->loadXML() or $doc->load() functions find an error.
- updated 'std.table.class.inc' to include '$this->fields_not_for_trimming' property. This is an indexed array containing names of fields whose contents should not be trimmed when either the '_validateInsert()' or '_validateUpdate()' function is called. By default all string values are trimmed to remove leading and trailing spaces, but in rare cases these may be valid parts of the string.
- fixed bug in 'std.validation.class.inc' when dealing with very large floating point numbers.
- fixed bug in getTableAlias1/2/3() functions in 'include.library.inc' when the string contains newline characters.
- updated database import functionality in the Data Dictionary so that if multiple servers are defined in the CONFIG.INC file then it will show all databases from all those servers which have yet to be imported. Previously this was limited to only that server which contained the DICT database itself.
- updated 'dml.mysqli.class.inc' so that after an insert it will retrieve the value of an auto_increment field even if it is not the primary key.
- added 'MULTI6' to the list of transaction patterns.
- renamed task 'dict_table(popup1)' to 'dict_table(popup2)' as it actually uses the 'popup2' pattern.
- updated list of relationship types in the Data Dictionary to include 'IGNORE' which will cause no action to be taken on the child table when the parent is deleted.
- updated the DICT_RELATIONSHIP table to include a 'key_name' column to identify which key in the parent/senior table is to be used in the relationship. This will default to the PRIMARY key, but may be changed to one of the other UNIQUE keys.
- updated all page controllers to rename the 'submit' button to 'submitBtn' so that it does not clash with the javascript 'submit()' function.
- added the $object->updateFieldArray() and $this->_cm_updateFieldArray() methods to 'std.table.class.inc' so that if a form is submitted by the javascript 'submit()' function and not a SUBMIT button all changes can be made available to the application objects. All relevant page controllers have been updated to call this method.
- removed the '_cm_setParentData()' method as it is now redundant. Please refer to the getParentData() and setParentData() methods below.
- Where a transaction uses more than one object in a parent-child or parent-child-grandchild relationship the page controller will automatically populate the $parent_object and $child_object properties in each relevant object. The contents of $fieldarray in these objects can be obtained using either $this->getParentData() or $this->getChildData(). This data can also be updated using the $this->setParentData() or $this->setChildData() methods.
- modified 'dml.mysqli.class.inc' to that it will automtically sync MySQL's timezone with PHP's timezone in order to avoid the problem reported in http://www.radicore.org/forum/index.php?t=msg&th=688&goto=3870#msg_3870. It is therefore *IMPERATIVE* that you have the correct timezone specified in your php.ini file.
- created script fix_audit_tbl(batch).php to update the 'pkey' column in the 'audit_tbl' table to remove any errant spaces between the field name and the '=' sign. This prevents records from being retrieved when using the 'Audit Trail' button on the navigation bar.
2013-09-03, version 1.80.0
Database changes:
- none
Other changes:
- added '$this->no_foreign_data' flag to 'std.table.class.inc' to prevent 'getForeignData()' method from being called automatically.
- amended 'std.search1.inc' and 'std.multi5.inc' to set $this->no_foreign_data to TRUE.
- fixed bug in 'std.xml.php4/5.inc' when displaying error messages which are not associated with a field on the screen.
- fixed bug in 'xml2array' function inside 'radicore.xmlreader.inc' when an element contains a child element of the same name.
- amended 'std.batch.inc' and 'error.inc' to properly report errors with 'require()' function in batch jobs.
- removed the getBrowserLanguage(), matchBrowserLanguage() and saveLocaleFormat() functions from 'include.library.inc' and placed them inside 'language_detection.inc' so that they can be used without referencing 'include.library.inc'.
- updated the '_cm_getValRep()' method within 'mnu_user.class.inc' so that the $where argument is used in the call to getData(). This will allow the list of users to be filtered by the contents of the $where string.
- fixed bug in 'std.validation.class.inc' where a non-numeric value in a numeric field was not being reported correctly in the error message.
- updated 'dml.mysqli.class.inc' to output any MySQL warnings, such as silent data truncation, into the message area.
- updated 'mnu_subsystem_s01.class.inc' (subsystem export) to deal with MNU_TIME_LIMIT_ROLE and MNU_TIME_LIMIT_USER tables.
- updated all 'dml.*.class.inc' to include the '__toString()' method which can be used when the error handler is invoked.
- created 'error_logs' directory to hold the 'errorlog.html' file which is appended to by the error handler in 'error.inc'.
- upgraded TCPDF library to version 6.0.024.
2013-06-22, version 1.79.0
Database changes:
- added tables MNU_TIME_LIMIT_ROLE and MNU_TIME_LIMIT_USER to the menu database. Please run the following scripts:
-- radicore\menu\sql\mysql\alter_table(2013-04-21).sql - to amend the structure of the MENU database
-- radicore\menu\sql\menu.menu_export(2013-04-21).sql - to add task details to the MENU database.
Other changes:
- updated list of valid IP addresses in SOAP and XMLRPC folders to include '::1' (the IPv6 equivalent of '127.0.0.1').
- updated 'std.validation.class.inc' to replace CRLF in any multiline strings to just LF as CRLF is sometimes interpretted as two line feeds.
- updated 'std.filepicker1.inc' and 'std.filepicker2.inc' to move the processing of the RESET button.
- updated 'std.filepicker2.inc' to include the server name in the 'current directory' message.
- updated TCPDF to version 6.0.010 for PHP5. The PHP4 version is no longer updated.
- added tables MNU_TIME_LIMIT_ROLE and MNU_TIME_LIMIT_USER to the menu database which can be used to restrict user access to particular times of day and/or particular days. The maintenance screens are available via navigation buttons on the 'List Roles' and 'List Users' screens.
- fixed bug in 'dml.oracle.php5.class.inc' when retrieving times from a CHAR(8) column instead of a DATE column.
- modified 'std.help.inc' to obtain task description from the mnu_task table.
- modified 'std.multi4.inc' to include processing for custom buttons in the data area (FAQ137).
- modified 'std.help.inc' to look for 'help-header.txt' and 'help-footer.txt' in the 'text/<language>/' directory before falling back to the subsystem root directory. This will enable the header and footer text to be available in different languages.
- modified 'std.help.inc' to allow the value '[copy: <task_id>]' to automatically copy the help text from another task.
- updated 'std.data_field.xsl' to allow fields with 'control=hidden' to occur in multi-row screens.
- updated list of relationship types in the Data Dictionary so that 'CASCADE' becomes 'CASCADE (framework)' and 'NULLIFY' becomes 'NULLIFY (framework)', and added 'CASCADE (FK constraint)' and 'NULLIFY (FK constraint)'. This is to separate actions which need to be taken by the framework from those that will be done by foreign key constraints in the database.
- added 'MULTI5' to the list of transaction patterns. The update to the MENU database is included in the radicore\menu\sql\menu.menu_export(2013-04-21).sql script.
2013-03-02, version 1.78.0
Database changes:
- none
Other changes:
- updated Import Columns function in Data Dictionary so that any existing comment is not overwritten with what has been defined in the dictionary database.
- updated XSL stylesheets to remove various errors reported by http://validator.w3.org/.
- updated XSL stylesheets to put 'title' attribute on images and navigation buttons so that they show up as tooltips in HTML pages.
- fixed problem in 'Generate PHP Scripts (a)+(b)' which failed to enclose $dbprefix in double quotes when constructing the sql query.
- updated 'std.pdf.class.inc' to allow an image to be used in 'detail view - multiple'.
- updated 'std.data_field.xsl' so that when a checkbox with a label appears in a search screen as a radiogroup, the label is shown in front of the group.
- fixed bug in 'std.filepicker1.inc' which failed to toggle sorting on the 'date' column.
- modified 'std.datevalidation.class.inc' to include $GLOBALS['date_format'] = 'yyyy-mm-dd' in the config file so that it can display dates in the format '2001-06-21'.
2013-01-01, version 1.77.0
Database changes:
- updated the structure of the MENU database to include the 'HELP_TEXT_ALT' and 'MNU_TASK_ALT' tables for text in alternative languages. You will need to run the following scripts:
-- radicore\menu\sql\mysql\alter_table(2012-11-17).sql - to amend the structure of the MENU database
-- radicore\menu\sql\menu.menu_export(2012-11-17).sql - to add task details to the MENU database.
Other changes:
- fixed bug in 'std.table.class.inc' where the scriptNext() and scriptPrevious() methods referred to $this->commit and $this->rollback instead of $this->commit() and $this->rollback().
- updated 'include.library.inc' to include removeBOM() function. This removes the Byte Order Mark from UTF8 strings.
- updated processing of $this->sql_search to allow line breaks in search expressions such as 'EXISTS(SELECT 1 FROM ... WHERE ...)'.
- fixed bug in 'getTableAlias1()' and 'getTableAlias2()' where it had "trim($regs[0])" instead of "array_map('trim', $regs[0])".
- fixed bug in 'validateSortItem()' where it failed to use alias name if $this->sql_from contained 'tablename AS alias'.
- modified all the DML classes to pass the connection details via the constructor instead of global variables.
- fixed bug in 'dml.oracle.class.inc' which prevented the details for FLOAT(126) columns from being imported into the data dictionary.
- changed std.help.inc so that it reads help text from the database instead of from disk files. This means that the 'help' directory is now redundant.
- updated 'std.filepicker.list1.xsl' to accept 'no_hyperlink' in the 'params' element to display the file name as plain text.
- updated Data Dictionary to allow an integer column of any size, not just TINYINT(1), to be treated as a boolean.
- updated navigation buttons to include the task description as a tool-tip ("title" attribute on an input control).
- replaced the button label in the Quick Search area to read "Quick Search" instead of "Search" to avoid confusion with the other search button.
2012-10-14, version 1.76.0
- fixed bug in 'std.csv.class.inc' which prevented column headings being written out to a comma delimited file.
- updated MNU_USER table in the MENU database to increase the size of the 'ip_address' column from 16 to 40 characters. You will need to run script 'alter_table(2012-06-06).sql' to implement this change.
- updated AUDIT_LOGON_ERRORS table in the AUDIT database to increase the size of the 'ip_address' column from 16 to 40 characters. You will need to run script 'alter_table(2012-06-08).sql' to implement this change.
- modified the send_mail() function within 'include.library.inc' so that when sending an HTML message it puts the plain text version before the HTML version. This is because some email clients which cannot display HTML messages don't like it if the HTML version is first.
- fixed bug when dealing with numbers in locales which have different values for decimal point and thousands separator. Numbers are formatted in the user's locale before being displayed, and reformatted to internal representation (decimal point is '.', thousands separator is NULL) before being validated and written to the database. If a formatted number is included in the screen as 'noedit' then it is not passed back in the $_POST array, and when the $_POST array is merged with the original data the unformatted value is used. When this unformatted value is processed by the 'number_unformat()' function the result is a corrupted. The 'array_update_associative()' function has been modified to ensure that any number in the POST array is correctly unformatted before it is passed to the table object.
- updated the data dictionary to include screens to view relationship details from the child to its parents as well as from the parent to its children. You will need to run script 'dict.menu_export(2012-06-23).sql' in order to update the contents of your menu database.
- updated 'mnu_subsystem.class.inc' to make the 'erase' function faster.
- updated 'std.validation.class.inc' to deal with timestamp fields which are required but empty with a default of CURRENT_TIMESTAMP.
- updated 'dml.mysqli.class.inc' to change 'ddl_showColumns()' method to use INFORMATION_SCHEMA instead of 'SHOW COLUMNS'.
- updated 'dml.mysqli.class.inc' to deal with default of CURRENT_TIMESTAMP in timestamp fields.
- updated TCPDF library to version 5.9.178.
- fixed bug in 'include.xml.php4/5.inc' which sometimes caused the wrong value for 'orderby_seq' to be loaded into the screen, thus causing the wrong up-arrow/down-arrow image to be displayed next to the sort column.
- fixed bug in 'std.filepicker1.inc' which caused the sort sequence to toggle between 'ascending' and 'descending' each time the page was automatically refreshed.
- modified result of clicking on a column heading in a list screen to change the sort sequence so that clicking on a different column will always start at ASCENDING sequence, and will only toggle between ASCENDING and DESCENDING when repeatedly clicking on the same column name.
- fixed bug in getTimeStamp() when $GLOBALS['server_timezone'] in the config file is set to a different value than the server's timezone.
- fixed bug when clicking on a hyperlink in the breadcrumbs area to go back to a previous task.
- updated the $servers directive in the config file to include an entry called 'switch_dbnames'. This can be used when the database name used when importing into the data dictionary and creating the class files is completely different (not just a change in prefix) when deployed on a different server.
- fixed bug in 'dml.oracle.php5.class.inc' when using $dbprefix to alter database names.
- fixed bug when using Oracle 11g which stopped with "ORA-01002 Fetch Out of Sequence" error.
2012-06-03, version 1.75.0
- fixed bug in 'std.pdf.class.inc' when dealing with a barcode in the multi1-multi9 area.
- moved methods 'outputPDF_DetailView()', 'outputPDF_LabelView()' and 'outputPDF_ListView()' from 'std.table.class.inc' to 'std.pdf.class.inc' as they are methods for PDF documents and not database tables.
- moved method 'outputCSV()' from 'std.table.class.inc' to a new file called 'std.csv.class.inc'.
- updated TCPDF library to version 5.9.157.
- fixed bug in 'dict_column.class.inc' which set a boolean value of '0' to 'N'.
- fixed bug in 'include.library.inc' which dealt incorrectly with a boolean value of '0'.
- updated 'std.xml.php4.inc' and 'std.xml.php5.inc' to have all the functions inside a class called 'radicore_view'.
- fixed bug in runInBackground() function so that it can detect and report errors such as '401 Authorization Required'.
- updated 'send_email()' function inside 'include.library.inc' so that it will send an HTML email if the message starts with '<' and ends with '>'.
2012-04-14, version 1.74.0
- created 'isDirectoryValid()' function to test that a directory is within the 'open_basedir' list before using the 'is_dir()' or 'file_exists()' function.
- updated 'audit_trn.class.inc' and 'audit_tbl.class.inc' to automatically increment the sequence number if a duplicate is detected during an insert.
- fixed bug which prevented 'updateSelection()' from working with an update string = "field1=field1+1, field2=field2+1".
- modified 'updateRecord()' in 'dml.mysql.class.inc' to allow a value of 'function(...)' to be added to the SQL query string as "field1=FUNCTION(...)" instead of "field1='FUNCTION(...)'". This can be turned on by by adding the field name to $this->allow_db_function as in '$this->allow_db_function[] = 'field1';".
- modified 'std.pdf.class.inc' so that the 'multi1'-'multi9' zones will not stop with the first empty result, and will be processed in the order defined within the structure file (which could be multi1, multi4, multi3, multi2, multi6) instead of sequentially as in multi1, multi2, multi3, multi4, multi5, multi6.
- updated 'std.multi2.inc' to allow $search value to be input to outer entity via the '_cm_restart()' method.
2012-02-08, version 1.73.0
- fixed bug in 'dml.pgsql.class.inc' so that the arguments in the DATE_SUB() function are cast to the expected data types.
- modified LDAP and RADIUS classes (in /menu/classes/) to check that the extension is actually available when the class is instantiated, and abort if not.
- modified 'error.inc', 'dml.sqlserv.class.inc' and 'dml.oracle.class.inc' to deal with database errors in a more consistent manner.
- modified code which handles the switching between HTTP and HTTPS protocols.
- updated XAMPLE prototype to version 2.4.0 to include an example of the TinyMCE javascript library v3.4.7 as well as updating the FCKeditor library to version 2.6.6.
- modified 'add database' function in Data Dictionary to exclude databases from the server if they have the current dbprefix but exist in the dictionary without the prefix.
- updated 'std.data_field.xsl' so that a field with properties 'control=multi-line' and 'xml=CDATA' will be displayed as ordinary text without escaping any HTML entities.
- updated 'std.update4.inc' so that it validates any sort field passed down by the parent script.
- add new task 'audit_ssn(batch)delete' which will delete entries from the AUDIT database older than 'N' years, where 'N' can be set on the 'Maintain Menu Controls' screen. A navigation button for this task is also available on this screen, but you can also set up a cron job to run this automatically. You will need to run script 'audit.menu_export(2012-01-24).sql' in order to add this task to your system.
- fixed bug in 'std.filepicker1.inc' which preventeed it from showing an error message henerated by a child form (usually std.fileupload1.inc).
- fixed bug in 'dml.sqlsrv.class.inc' when encountering SUBSTR() inside a CONCAT() function.
- updated 'std.table.class.inc' and 'dml.*.class.inc' to allow the '_cm_deleteSelection()' method to specify FROM and USING arguments to enable a multi-table delete in the format 'DELETE FROM $from USING $using WHERE $selection'.
2011-12-10, version 1.72.0
- updated 'include.library.inc' so that the 'removeDuplicateFromSelect()' function will not insert a duplicate field reference at the position of the first reference, otherwise it may result in an invalid SQL statement.
- updated 'dml.pgsql.class.inc' for PostgreSQL version 9.1 where string literals containing the backslash character must now be defined using the escape string syntax (E'...') otherwise an error will be generated.
- updated 'std.imap.class.inc' to get around problems when converting encoding into UTF-8.
- updated 'std.validation.class.inc' so that the the validateEmail() function can deal with multiple addresses in a single field, and to deal with addresses in the format 'name <[email protected]>'.
- updated 'include.session.inc' to call quicksearch code from a separate function.
- fixed bug in 'std.table.class.inc' which cause the 'deleteRecord()' function to lose the contents of $this->numrows after calling validateDelete().
- updated 'std.table.class.inc' so that the insertOrUpdate() function will check $this->no_display_count before generating a message.
- updated 'std.fileupload1.inc' to include a 'submitstay' button so that it does not exit after uploading a file.
- fixed bug in 'dml.*.class.inc' so that the getData_serial() method uses !is_null() on $rdc_limit and $rdc_offset instead of !empty() as the value zero returns TRUE with empty().
2011-09-02, version 1.71.0
- fix bug in 'std.pdf.class.inc' when a report line has both text and a barcode, and the height of the barcode is not an exact multiple of the line height of the text.
- updated 'std.pdf.class.inc' to include the following:
-- allow margin and padding options to be supplied either with or without an underscore making 'marginleft' and 'margin_left' both valid.
-- restrict the 'border' option on barcodes to the containing cell and 'image_border' for the barcode itself (when the barcode is smaller than its cell).
-- removed the 'position' option on barcodes as this positions the cell within the page, not the barcode within the cell.
-- added the 'cellfitalign' option to barcodes to position the barcode within its cell.
-- added the ability to handle 2D barcodes (QRCODE and PDF417).
-- added the 'margin_top' and 'margin_bottom' options to the page definitions.
-- added the 'image_offset' option for pictures and barcodes to provide a space between the image border and the cell border.
-- added the 'body_gap' option to specify a gap between the header and the body. The default is 1mm.
-- allow width of '*' to be used on more than 1 column, in which case the remaining space will be apportioned equally.
2011-08-25, version 1.70.0
- merge 'align','valign' and 'class' attribute values into a single 'class' entry when adding the screen structure details to the XML document.
- created script 'radicore/menu/sql/mnu_role_task.sql' to add missing standard tasks to existing roles. This is not necessary for new roles as they are added automatically when they are created.
- updated 'table(generate)b.php' so that when it creates the '<table>.report.inc' file for an OUTPUT2 task it will set the default column widths to a percentage so that the whole line is filled.
- updated TCPDF library to version 5.9.112.
- updated MENU database to include the OUTPUT5 pattern. You will have to run script 'radicore\menu\sql\menu.menu_export(2011-08-24).sql' to apply this change to your database.
- added file 'std.output5.inc' as the controller for the OUTPUT5 pattern.
- updated 'table(generate)a.php' and 'table(generate)b.php' to include OUTPUT5 pattern for address labels.
- updated 'std.pdf.class.inc' to deal with the OUTPUT5 pattern (address labels).
- updated 'default/pdf.styles.inc' so that 'noborder' style sets the border width to zero instead of the border colour to white.
- updated 'std.pdf.class.inc' to allow the 'min_lines' option on $structure['body']['fields'] elements in the report structure file so that a cell with fewer lines will be padded with empty lines.
- updated 'std.pdf.class.inc' to allow 'padding_left/right/top/bottom' and 'margin_bottom' to be specified in the 'pdf.styles.inc' file for use with the OUTPUT5 pattern (address labels).
2011-08-01, version 1.69.0
- added ability to pre-select a field name in the QuickSearch dropdown.
- added option to include a QuickSearch area on LIST2 screens.
- fixed bug which failed to display multiple error messages on the logon screen.
- modified 'include.xml.php5.inc' to replace '<br></br>' with '<br />' in HTML output to get around a bug in the libxslt library.
- added 'SUBMIT+stay' and 'SUBMIT+next' buttons to LINK1 pattern.
- modified XML output so that if a field's value is an array it will be output as '<array key="0" value="value1" />' instead of '<array id="value1" />' so that associative arrays can be shown properly.
- added ability to specify the 'nosort' option in the $structure['<zone>']['columns'] array as well as the $structure['<zone>']['fields'] array.
- as the <COL ALIGN="..."> and <COL VALIGN="..."> attributes are poorly supported in most browsers (and removed from HTML5) I have changed the code in 'include.xml.php4/5.inc' to convert them to 'class' attributes instead. The 'class' attribute within <COL> is also poorly supported, so I have changed 'std.column_hdg.xsl' and 'std.data_field.xsl' so it will now be added to every cell within that column instead. This has been tested in IE8, Firefox 5.0, Opera 11.5 and Safari 5.0.5. See http://www.tonymarston.net/php-mysql/model-view-controller.html#xsl-structure for details.
- modified all XSL stylesheets to include 'indent=yes' so that HTML output is easier to read.
- change the handling of error messages so that errors generated within internal objects can be shown as having come from that object. See http://www.tonymarston.net/php-mysql/infrastructure-faq.html#faq14 for details.
2011-06-01, version 1.68.0
- fixed a bug in the 'outputCSV()' method within 'std.table.class.inc' to ensure that only those fields which have been specifically selected will be output.
- modified '_dml_updateSelection()' method within 'std.table.class.inc' so that it will stop on the first error.
- modified 'updateRecord()' method within 'dml.*.class.inc' so that if it is called with a $where string, and the primary key has changed, it will still check for a duplicate value.
- modified 'send_email()' function within 'include.library.inc' so that it puts the 'from' address into the 5th argument of PHP's mail() function to force a valid 'Return-Path' value in the mail header otherwise the sendmail program may use a value which causes the recipient's mail server to treat the email as spam. If a fixed value for Return-Path is required you can set the MAIL_RETURN_PATH constant in the CONFIG.INC file.
- added option to include browser-specific CSS files.
- added option to include a QuickSearch area on LIST1 screens.
- upgraded TCPDF library to version 5.9.084
2011-01-01, version 1.67.0
- fixed bug which allowed tasks which had been disabled to appear in the 'favourites' area of the menu/home page.
- changed 'include.general.inc' so that it will look for a file called 'config.local.inc' if 'config.inc' does not exist in the include path. This is for use on development machines.
- fixed bug in XML processing when dealing with errors in a multi-row screen.
- fixed bug in getExtraData() method in std.table.class.inc which caused it to empty $this->fieldarray.
- updated XSL processing to use the disable-output-escaping template instead of the disable-output-escaping option. This is to get around a bug in Firefox.
- updated TCPDF library to version 5.9.029.
- fixed bug in 'dml.pgsql.class.inc' which had the wrong arguments in the call to $auditobj->auditDelete().
- amended table 'mnu_favourite' in the 'menu' database to include the 'breadcrumbs' column. This will allow the menu buttons and the breadcrumbs area to be rebuilt to what they had been when the task was originally added to a user's favourites. You will have to run script radicore\menu\sql\mysql\alter_table(2010-12-29).sql in order to change the database schema.
- added 'dml.sqlsrv.class.inc' so that RADICORE can now work with an SQL Server database.
2010-12-01, version 1.66.0
- updated 'std.imap.class.inc' to include method html2text() which will convert an HTML document into plain text.
- updated 'std.imap.class.inc' so that it will provide the content-id of any attachments which are included in the HTML email. This will allow the 'cid' entry to be replaced with a URL that will obtain the attachment from its new location.
- added the 'fullwidth' property to each 'style_custom.css' file so that the 'textarea' control can be made to fit the full width of the cell instead of being restricted to the specified number of columns.
- amended XML/XSL processing so that if you add $this->fieldspec['fieldname']['xml'] = 'CDATA' to a field's specifications it will be added to the XHTML document in a <pre> element with disable-output-escaping="yes". This will prevent characters such as '<', '>' and '&' from being converted to '<', '>' and '&'. Note that the 'disable-output-escaping' option does not work in client-side transformations with Firefox (see bug #98168).
- updated 'dml.pgsql.class.inc' so that it can deal with the 'retry_on_duplicate_key' property.
- updated 'dml.oracle.php5.class.inc' so that it can deal with the DATE_SUB() and DATE_ADD() functions.
- updated 'std.update2.inc' so that it will combine the result of the call to $dbobject->updateSelection() with any other messages generated within the object.
- updated 'error.inc' so that the error log is emailed using 'charset=UTF-8' so that non-ascii characters are displayed correctly.
- updated 'errorlogdel.php' so that after creating an empty 'errorlog.html' file it inserts a 'charset=utf-8' header so that utf-8 characters can be displayed correctly.
- amended 'std.data_field.xsl' so that if additional CSS class names are supplied in the screen structure file and/or the XML document then they will be merged into a single 'class' attribute.
2010-11-01, version 1.65.0
- ensure that search screens allow 'IS NULL' and 'IS NOT NULL' as search criteria in any field.
- amended 'std.imap.class.inc' so that if the plain text version of the message is empty (which it should never be if the email client follows the correct protocols) it will use the HTML version.
- modified 'std.fileupload1.inc' and 'std.table.class.inc' so that filesize is made available in the _cm_post_fileUpload() method.
- modified 'include.session.inc' so that a 'run_at_end' task is not added to the processing sequence if the current task terminates with errors.
- fixed bug with breadcrumbs area when switching between different tasks which use the same script.
- updated 'std.list1/2/3.inc', 'std.multi2/3/4.inc' so that any search criteria supplied in either selection_fixed or selection_temp on MNU_TASK table is saved so that it becomes visible in the associated search screen.
- updated 'std.table.class.inc' to include methods 'restart()' and '_cm_restart()'. These will be called from all page controllers when they are restarted after returning from a child form. This will allow action to be taken after returning from a particular child task.
- modified 'include.library.inc' to improve the use of regular expressions when processing the WHERE string.
2010-10-02, version 1.64.0
- fixed bug in 'stripOperators()' function in file 'include.library.inc', which is used in 'where2array()', so that if the value is enclosed in single or double quotes it will also call stripslashes() in case it contains any escaped characters.
- fixed some anomalies when using column hyperlinks to change the sort sequence in LIST forms.
- updated 'audit_fld.class.inc' so that it will truncate any string larger than 65535 characters.
- updated the config.inc file to include the constant ERROR_LOG_MAILTO. This can contain one or more email addresses. If this is defined then the error_log will be emailed to this address.
- modified 'dml.*.class.inc' files so that when inserting a record with a compound primary key, part of which is empty, it will set the field to '' (empty string) instead of NULL.
2010-09-01, version 1.63.0
- updated std.help.inc so that the script id and script description are on separate lines.
- fixed bug in 'std.add3.inc' which caused it to return the wrong count when inserting more than one record.
- updated 'std.data_field.xsl' to copy across any 'class' attribute found with any <option> in the <lookup> area for dropdown lists.
- modified 'include.xml.php4/5.inc' so that the reference to file 'style_custom.css' will be excluded from the HTML output if it does not exist.
- when converting a selection string to or from an array ensure that the difference between a field value of '' (empty string) and NULL is maintained.
- updated TCPDF library to version 5.8.013
- fixed bug which caused the creation of a PDF file which could not be read. This was caused by running the initialisation code a second time after detecting a change in language, and this re-initialisation caused a corruption.
2010-08-01, version 1.62.0
- fixed bug in unFormatNumber() where it processed an empty field.
- fixed bug in getWhere() where it returned multiple selections when the current task only displayed one.
- fixed bug in 'append2ScriptSequence()' which caused the 'prepend' option to fail if the $_SESSION['script_sequence'] array did not currently exist.
- created some extra popups for 'Choose Task'. You will need to run the following script:
-- radicore\menu\sql\menu.menu_export(2010-07-18).sql in order to update the contents of your MENU database.
- updated the MNU_TASK table in the MENU database to include columns for 'task_id_run_at_end' and 'task_id_run_at_cancel'. You will need to run the following script:
-- radicore\menu\sql\mysql\alter_table(2010-07-18).sql in order to update the structure of your MENU database.
- added the MNU_FAVOURITE table to the MENU database. This stores a user's favourite tasks so that they can be displayed in the 'Favourites' area of the Menu/Home Page screen. They are displayed as buttons on the Menu/Home Page screen which can be pressed to activate the task. You will need to run the following scripts:
-- radicore\menu\sql\mysql\alter_table(2010-07-20).sql in order to update the structure of your MENU database.
-- radicore\menu\sql\menu.menu_export(2010-07-20).sql in order to update the contents of your MENU database.
- added navigation buttons to the 'List To-Do' screens to set the selection criteria to either COMPLETE or INCOMPLETE. You will need to run the following script:
-- radicore\menu\sql\menu.menu_export(2010-07-24).sql in order to update the contents of your MENU database.
- added task 'Delete Logon Errors' to AUDIT subsystem. You must run the folowing script:
-- radicore\audit\sql\audit.menu_export(2010-07-31).sql in order to update the contents of your MENU database.
2010-07-01, version 1.61.0
- modified 'std.validation.class.inc' and 'logon.class.inc' to deal with situation where $_SESSION['rdcaccount_id'] is not present.
- modified 'error.inc' to skip logoff function if $logon_user_id is 'INTERNET' or 'BATCH'.
- amended XMLRPC functions to obtain the value for $GLOBALS['dbprefix'] before the database is accessed.
- modified 'dml.mysqli.class.inc' so that if an errno of 2006 (MySQL server has gone away) is returned it will attempt to reconnect.
- modified 'config.xmlrpc.inc.default' to change the server encoding from 'utf8' to 'iso-8895-1'. This is because the client has already changed any utf8 characters into numeric entities, and to decode them using 'utf8' again would produce the wrong results.
- modified 'getLanguageFile()' within 'include.library.inc' so that if it cannot find a file beginning with 'sys' then it uses a literal error message instead of one supplied by 'getLanguageText()' as this would also fail with 'file not found'.
- modified 'std.table.class.inc' so that 'getForeignData()' will not clear out any key fields if a lookup failed while within a search screen as the key may only contain a partial value.
- modified 'std.table.class.inc' so that 'unFormatData()' will not insert '9999-12-31' into a field which has 'infinityisnull' set while within a search screen.
- fixed bug in convertTZdate() and convertTZtime() which failed to ensure that date is converted to internal format (ccyy-mm-dd) before being converted.
2010-06-01, version 1.60.0
- modified 'config.inc' file to include optional 'port' and 'socket' parameters for MySQL database connections. See 'config.inc.default' for details.
- modified 'std.batch.inc' and 'dml.???.class.inc' so that if a batch job fails on a duplicate candidate key during an insert or an update then the error log will contain the key value.
- modified XML/XSL processing to allow a field's HTML control to be set to 'button'. See FAQ137 for details.
- modified 'std.add1.inc', 'std.add2.inc', 'std.add5.inc' and 'std.update1.inc' to deal with 'button' controls.
- fixed bug with cascadeDelete() when called from deleteRelations() method which failed to pass down the identity of the parent table.
- modified processing of MNU_INITIAL_VALUE_ROLE and MNU_INITIAL_VALUE_USER so that both will be read and combined, with USER values taking precedence over ROLE values.
- fixed bug in 'std.validation.class.inc' involving a MySQL field type of 'SET' which uses a screen control of MULTI CHECKBOX. This bug resulted in unselected values being represented as '0' in the sql query, thus causing an error. This does not happen if the control is MULTI DROPDOWN. See http://www.radicore.org/forum/index.php?t=msg&goto=2543 for details.
2010-05-01, version 1.59.0
- fixed bug when writing to the AUDIT database when it has a dbprefix which is different from that of the table being audited.
- updated TCPDF library to version 4.9.007.
- added the ability to execute a task between the logon screen and the display of the first menu. This task can be specified as the 'initial passthru' on the 'menu' (Home Page) task. See FAQ132 for details.
- fixed bug in wf_workitem.class.inc and workflow_engine.class.inc where rdcaccount_id was not included in the SELECT list. See http://www.radicore.org/forum/index.php?t=msg&th=554 for details.
- amended function 'append2ScriptSequence()' to include an optional second argument, which, if set to TRUE, will cause the task details to be prepended to the $_SESSION['script_sequence'] array instead of being appended. This is to force any AUTO tasks generated by the workflow system to go to the head of the queue in front of any non-workflow tasks. See http://www.radicore.org/forum/index.php?t=msg&th=556 for details.
- amended 'workitem(timeout).php' so that it will process records for all values of rdcaccount_id.
- updated 'wf_transition' table in 'workflow' database so that the time_limit can be specified in minutes instead of hours. You will need to run script radicore\workflow\sql\mysql\alter_table(2010-04-07).sql in order to implement this change.
- fixed bug in 'std.multi4.inc' which prevented it from changing the rows-per-page setting.
- fixed bug with the regular expression within the 'unFormatNumber()' method in 'std.table.class.inc'.
- fixed bug which prevented a task of pattern 'batch' to be run from a menu button.
- amended the 'auditWrite()' method inside 'audit_tbl.class.inc' so that it ignores BLOB fields. This is to prevent an error when attempting to write to a string field which contains invalid characters.
- updated the data dictionary to allow a column to have a control of 'image'. This is similar to the 'control=filepicker' with 'subtype=image', but without the filepicker option.
- updated XML/XSL processing to allow the specification of 'alt' text for an image field. See FAQ133 for details.
- updated XML/XSL processing to allow a hyperlink field to have separate parts for 'label' and 'url'. See FAQ133 for details.
- updated XML/XSL processing to allow a hyperlink field to be specified as an array so that multiple entries can be displayed. See FAQ133 for details.
2010-04-01, version 1.58.0
- updated PDF processing to allow the page footer to contain an image.
- updated PDF processing to allow the page margins to be changed from the defaults.
- updated PDF processing to allow 'ignore_if_empty' to be set for an entire style. This saves having to specify it for every line that uses that style.
- updated PDF processing to allow title elements to be printed once per database row (not on overflow pages). This facility uses the 'print_only_once' option.
- fixed database export and table export functions within the data dictionary so that when they link to the MENU database to find the subsystem's directory name they use the correct dbprefix from the config.inc file.
- change 'singleton' class to 'RDCsingleton' so that it wll not clash with a class/interface with the same name when being integrated with other software. YOU WILL NEED TO CHANGE ALL REFERENCES TO THIS CLASS IN YOUR CODE.
2010-03-01, version 1.57.0
- modified the workflow system to allow more than 2 Explicit OR-Splits to come out of a transition. Any number can be specified, but they must all have a pre-condition that can be tested for TRUE except for the last one. This will be used as the default when none of the pre-conditions evaluates to TRUE.
- allow the text on the menu/home page for pending workflow items to be customised. For details see FAQ130.
- added 'soap' directory to assist in the development of web services. Point your browser to 'radicore/soap/index.html' to see some working examples.
2010-02-01, version 1.56.0
- fixed bug in startTransaction() method within 'std.table.class.inc' so that, when setting up the lock array, if the multiple database server option is employed it will use a separate dbprefix for each server rather than a single dbprefix for all servers.
- modified the '_cm_ListView_print_after()' method within 'std.table.class.inc' so that it includes $next_row as the second argument. This will allow a comparison to be made with the current row before printing any extra lines.
- fixed bug in processing of MULTI4 pattern which failed to associate error messages with the correct rows of the inner entity.
- modified screen structure files to allow the 'align' and 'valign' attributes to be specified for cells in the vertical view.
- modified 'std.multi1.inc' so that it calls the 'validateDelete()' method before the 'deleteRecord()' method.
- modified 'update column' in the data dictionary to allow a new control called 'image hyperlink'. The field value should be the path to an image, and this will be displayed as a thumbnail image which will also be a hyperlink to the full-sized image.
2010-01-01, version 1.55.0
- updated 'std.validation.class.inc' to allow a numeric field to contain text such as 'field+1' so that it can be incremented from its current value instead of just being set to a new value.
- updated 'std.delete1.inc' to display a message after a record has been deleted.
2009-12-01, version 1.54.0
- fixed bug in setDefaultOrderBy() function which set the default sequence to 'asc', only to have it switched to 'desc' in the setOrderBy() function.
- fixed bug in 'dict_table_key.class.inc' which failed to include the value of $dbprefix when accessing the database schema.
- fixed bug in 'std.update4.inc' to change '$dbobject->getErrors' to '$dbobject->getErrors()'.
- fixed bug in the 'import tables' function in the data dictionary which added $dbprefix twice to $dbname, thereby creating an invalid database name.
- added 'xmlrpc' directory to assist in the development of web services. Point your browser to 'radicore/xmlrpc/index.html' to see some working examples.
- replaced all POSIX functions which have been deprecated in PHP 5.3.0 with their PCRE equivalents.
- updated the MENU database to include tables MNU_TASK_IP_ADDRESS and MNU_USER_IP_ADDRESS. This can be used to restrict access to machines with specified IP addresses. You will need to run the following scripts
-- radicore\menu\sql\mysql\alter_table(2009-11-15).sql to alter the structure of your MENU database.
-- radicore\menu\sql\menu.menu_export(2009-11-15).sql to update the contents of your MENU database.
2009-11-01, version 1.53.0
- modified error handler so that it only displays verbose error messages when the server is 'localhost'. Verbose messages will still be sent to file 'errorlog.html' and emailed to the system administrator.
- fixed bug in 'runInBackground()' function which failed to pass back any error message to the calling function.
- fixed bug in 'std.filepicker1.inc' which failed to process the 'selectall/unselectall' options.
- fixed bug in 'initialise()' function within 'std.table.class.inc' which incorrectly replaced $where with $selection.
- modified search screen so that a dropdown list or radio group can be temporarily converted to a MULTIDROP. This will allow multiple options to be selected instead of just one, and will result in SQL similar to the following being inserted in the WHERE string: "field IN ('option1','option2','option3',...)".
2009-10-04, version 1.52.0
- upgraded TCPDF to version 4.8.005
- updated 'include.general.inc' to add functions 'convertTZdate()' and 'convertTZtime()'. These will allow timezone conversions on fields of type 'date' and 'time' instead of 'datetime'.
- updated footer processing in PDF output so that 'date' and 'time' values are converted into the user's timezone.
- updated 'std.table.class.inc' to replace the '_cm_ListView_pre_print()' method with the '_cm_ListView_print_before()' and '_cm_ListView_print_after()' methods.
- updated 'std.pdf.class.inc' to include the 'getLinesRemaining()' method.
- fixed bug in login screen where the email address was entered in mixed/upper case instead of lower case, causing the error message "A record already exists with this key" to be displayed.
- updated 'std.validation.class.inc' to change all 'str*()' functions to 'mb_str*()' (if the mbstring extension has been loaded) as the func_overload option is no longer supported in htaccess files as of PHP version 5.2.7
- fixed bug in 'std.update5.inc' which failed if $where was empty, ignoring the fact that $selection was not empty.
- updated AUDIT database to add 'email_addr' field to 'audit_logon_errors' table. This is to fix bug when a login fails when using an email address instead of a user id. You will need to run script 'radicore\audit\sql\mysql\alter_table(2009-09-29).sql' in order to update your database schema.
2009-09-01, version 1.51.0
- fixed bug in 'std.search1.inc' which caused changes to $this-fieldspec in '_cm_validateSearch()' to be ignored.
- changed 'std.data_field.xsl' to remove the need for the 'id' attribute when defining labels for options in radio groups and checkboxes. The 'id' attribute always used a value which was the same as the 'value' attribute for the control, which caused duplicate id's if more than one field had the same value. This in turn caused only the last label entry with that id to have any effect.
- fixed bug in 'std.list2/3.inc', 'std.multi2/3/4.inc' where the RESET button caused action to be taken on the outer/parent entity when it should not.
- fixed bug in 'childForm()' function which passed $search as a separate string to child forms of type 'list' instead of merging in the $where string.
- fixed bug in 'childForm()' function which failed to include $script_vars in its arguments on the call to the runInBackground() function.
- fixed bug in 'std.table.class.inc' which failed to set up the value for rdcaccount_id when the getData_serial() method was called.
- fixed bug in '__sqlProcessJoin()' where $select (the current SELECT list) contained a field with an alias name and the contents of $parent_field contained more than one new field name.
- fixed bug in 'dict_database_s01.class.inc' which referred to task 'dict_table(list)2' instead of 'dict_table(list2)'.
- removed "header('content-length: ...')" from XSLclient() function as this caused problems when the XML document contained multibyte characters.
- changed HELP text for DICT subsystem to reflect the latest task id's.
- added custom method '_cm_reset()' which is called whenever the RESET button is pressed.
- changed the processing of _cm_initialise() so that the 2nd argument, $selection, will be available for all tasks, not just those of pattern ADD2.
- changed '_cm_pre_output()' method so that the $filename argument is available for CSV output. This will allow the filename to be changed in OUTPUT1 tasks.
- changed 'std.pdf.class.inc' to allow the 'ignore_if_empty' attribute for a cell in the title area.
- fixed bug in 'recover password' function which failed to decrypt the user's password before it was emailed.
2009-08-01, version 1.50.0
- fixed bug in 'include.xml.php4/5.inc' which mis-spelled a call to getLanguageText().
- modified the _sqlSelectAlternateLanguage() method inside 'std.table.class.inc' so that it allows more options.
- modified 'dml.pgsql.class.inc' to include the adjustGroupBy() and adjustHaving() functions which are used for the Oracle database.
- added function replaceScreenColumns() which will replace a column id in a screen structure file with a different column id (and label) at runtime. This is similar to replaceScreenHeadings() which will only replace the column label.
- updated 'mnu_subsystem_s01.class.inc' (subsystem export) so that it includes the MNU_ACCOUNT and MNU_MOTD tables when exporting the MENU subsystem.
- updated various 'std.*.inc' files to use $object->getErrors() instead of $object->errors.
- updated Virtual Private Database processing so that users whose rdcaccount_id is greater than 1 cannot modify or delete any shared records (where rdcaccount_id = 1).
- allow the selection/choice made in popup screens to be locked for the next activation.
- updated 'std.output1/2/3/4.inc' so that $search is available as a 3rd argument to _cm_initialise() in case it was called from a search screen.
2009-07-01, version 1.49.0
- added field 'user_timezone' to MNU_USER table. You will need to run script radicore\menu\sql\mysql\alter_table(2009-06-01).sql in order to amend the database schema.
- added the ability to convert datetime fields between the timezone of the server and the timezone of the client. This is only available if your PHP version is 5.2 or greater.
- updated 'std.pdf.class.inc' to use $this->getAliasNbPages() instead of the deprecated $this->AliasNbPages (used to insert 'page n of n' in page footers).
- modified ListView in PDF processing so that each line can have a border top and bottom instead of alternate lines having a different background colour. Also allow 'border=P' to put a border around the page instead of each cell.
- modified all page controllers to use '$dbobject->getMessages()' instead of '$dbobject->messages' which will allow $dbobject->messages to be either a string or an array.
- modified 'dml.oracle.php4.class.inc' and 'dml.oracle.php5.class.inc' in order to manipulate the GROUP BY and HAVING clauses as what is acceptable to MySQL will not work in Oracle.
- added method 'post_search()' and '_cm_post_search()' to 'std.table.class.inc'.
- modified 'std.search1.inc' to call the new 'post_search()' method in order to perform any final processing before the entered values are passed back to the calling form. This may be because the search form is being used to enter selection details before firing off a batch process.
- all tasks and scripts in the DICT subsystem have been renamed to conform to the current Radicore naming conventions. You will need to run script radicore\dict\sql\dict.menu_export(2009-06-25).sql to update your MENU database.
- modified search screens so that required fields will be indicated as such. The 'required' property is removed from every entry in $this->fieldspec by default, but can be reinstated in '_cm_changeConfig()'.
- fix bug in 'dict_table_s02.class.inc' (export table) which failed to error when a related table was in a different subsystem but with no value for SUBSYS_DIR.
2009-06-01, version 1.48.0
- updated 'std.buttons.xsl' to include the total row count after 'show 25 | ... | show 100'.
- added table 'mnu_motd' to the MENU database to deal with Message Of The Day.
You will need to run the following scripts:
- radicore\menu\sql\mysql\alter_table(2009-05-05).sql to update the structure of the MENU database. This will also add 'mnu_motd(show)' to the mnu_role_task table for each role_id so that it is accessible to all users.
- radicore\menu\sql\menu.menu_export(2009-05-05).sql to add the new tasks to the MENU database.
- modified the logon process so that a 'Show Message of the Day' screen will appear immediately after passing through the LOGON screen. It will show the latest unexpired message, with the ability to scroll through earlier unexpired messages.
- fixed bug in 'mnu_user(add1)' which failed to encrypt the password field.
- updated the dictionary import scripts to take account of $dbprefix when reading the target database. Database names in the dictionary do not have this prefix.
- modified the method of looking up language files, screen and report structure files. It will now look for the specified file individually in one of the possible language directories instead of assuming that if the language directory exists then the file must exist in that directory.
- renamed script 'mnu_pattern_enq.php' to 'mnu_pattern(enq1).php' and 'mnu_role_search.php' to 'mnu_role(search).php' to conform to current naming standards. You will need to run script radicore\menu\sql\menu.menu_export(2009-05-14).sql in order to update your copy of the MENU database.
- fixed bug which caused the BACK button from a help page to go back to the wrong page.
- changed the MULTI1 pattern to remove the RETRIEVE button and replace the CLEAR button with RESET as it resets the screen to its previous values which may not mean clearing it to an empty state.
- upgraded TCPDF library to version 4.6.011.
- fixed bug in 'std.validation.class.inc' which failed to validate a string's length against the column size in the data dictionary.
2009-05-01, version 1.47.0
- updated 'include.session.inc' to include getPreviousPattern() function.
- updated 'std.table.class.inc' to include $this->scriptPrevious() method which will call $this->commit() if there is a database transaction which is open.
- updated 'std.table.class.inc' to include $this->no_duplicate_error which, if set to TRUE, will prevent an error message when inserting a record which already exists. Instead it will set $this->numrows to zero to signify 'no insert', and the '_cm_post_insertRecord()' method will not be called. If the new record is not a duplicate then $this->numrows will be set to 1 to signify 'record inserted'.
- updated 'batch_log(filepicker)' task so that by default each file hyperlink will open up in the browser window. If 'download=TRUE' is entered into the task's 'settings' field then each hyperlink will be processed by the 'batch_log(filedownload)' task.
- updated 'std.table.class.inc' to include 'post_fileUpload()' and '_cm_post_fileUpload()' methods.
- updated 'std.fileupload1.inc' to call the 'post_fileUpload()' method so that the file may be processed after it has been uploaded.
- updated the 'selections' area of the navigation bar so that a selection can be locked, which will enable the same records to be automatically reselected when returning to the screen.
- modified the processing of the 'rdcaccount_id' field so that it is qualified with the table name when included in any SQL statement that is generated by the framework.
2009-04-01, version 1.46.0
- fixed bug in php_session.class.inc which accepted a session_id greater than 32 chars when the request string had '/.../...' appended to it.
- updated 'deleteRelations()' method in 'std.table.class.inc' so that when deleting or nullifying child relations the value of $this->audit_logging for the parent table is passed down to the child table.
- updated the 'dict_table' table in the DICT database to include columns 'nameof_start_date' an 'nameof_end_date' when the table has fields which represent 'start_date' and/or 'end_date', but with different names. You must run script radicore\dict\sql\mysql\alter_table(2009-03-08).sql in order to update your database schema.
- updated PDF processing to allow '<imagename>' to be expressed as '%%name' instead of the hard-coded path to an image file so that the path name can be provided from data which is obtained at runtime.
- fixed bug in 'mnu_user.class.inc' which tried to validate the password when attempting to update a different field, such as the role_id. As the password is not present on the screen the validation always failed.
- fixed bug in 'std.pdf.class.inc' where variables in the title were not being shown correctly if the printing of _cm_ListView_total() caused a new page to be started.
- updated 'std.table.class.inc' to include $this->scriptNext() method which will call $this->commit() if there is a database transaction which is open.
2009-03-01, version 1.45.0
- fixed bug in lookup of language directories which used format 'xx-XX' instead of 'xx_xx' (all lower-case characters, with '_' (underscore) instead of '-' (hyphen)).
- fixed bug in conversion of WHERE string into array to allow operator of NOT LIKE as well as LIKE.
- updated TCPDF library to version 4.5.018
2009-02-01, version 1.44.0
- ensure that if a screen is refreshed after a database update it is done via GET instead of POST.
- fixed bug in 'std.detail1.xsl' which prevented a field's 'size' attribute in the screen structure file from being used to override the default size.
- fixed bug in 'getData_raw()' when $this->sql_orderby contains a field which does not exist in either $this->sql_select or $this->fieldspec, thus causing an error.
- fixed bug in 'mnu_user.class.inc' which corrupted the password when the COPY button is pressed while running 'mnu_user(add1)'.
- fixed bug in 'std.encryption.class.inc' regarding multibyte characters.
- fixed bug in 'include.xml.php4/5.inc' which tried to output a numeric field name as an element id. These are invalid in XML, so are ignored.
- fixed bug in 'std.filedownload1.inc' to allow spaces in the file name.
- fixed bug in 'std.head.xsl' which failed to append the session name to the meta refresh line.
2009-01-01, version 1.43.0
- added variable '$this->sql_no_foreign_db' (default value is FALSE) to 'std.table.class.inc'. If this is set to TRUE then when $this->_sqlForeignJoin() is executed it will ignore any tables which exist in other databases. This is to deal with the situation where an application contains several databases which are spit across more than one server, in which case cross-database JOINs would fail.
- replaced 'getColumnHeadings()' and 'setColumnHeadings()' functions with 'replaceScreenHeadings()'.
- added 'replaceReportHeadings()' function for PDF output.
- updated PDF report structure files to allow column widths to be expressed as a percentage as well as a number.
- upgraded TCPF library to version 4.4.006.
2008-12-02, version 1.42.0
- made it possible to connect to a remote MySQL database using SSL encryption. This is only possible when using the 'improved' mysqli extension for version 4.1 and above. Refer to FAQ115.
- fixed bug in 'std.pdf.class.inc' in order to allow an image to appear in the 'multi*' area.
- modified 'insertOrUpdate() method within 'std.table.class.inc' so that the input array is checked to see if the full primary key has been specified. If it has not then a lookup cannot be performed and the record will be inserted. This is to deal with auto_increment columns.
- modified the 'getColumnNames()' method within 'std.table.class.inc' so that it calls custom method '_cm_getColumNames()'. This will allow both the list of column names (defined within $this->fieldpsec) and their initial values to be customised.
- fixed bug in 'logon.class.inc' which caused the wrong error message to be displayed if the login is via email address and the address does not exist in the MNU_USER table.
- updated the processing of radio groups to allow individual entries to be given their own CSS style. Refer to FAQ117.
- updated 'std.batch.inc' so that it will use the INCLUDE_PATH from the local {.}htaccess{.txt} file instead of the 'batch.ini' file. You will need to copy the updated version from the 'radicore/default' directory.
- modified list of patterns to include 'BATCH' for tasks which are to be run in the background. Refer to FAQ119. You will need to run script 'radicore\menu\sql\menu.menu_export(2008-11-21).sql' in order to update your copy of the MENU database.
- updated directory structure to include 'radicore/logs' for the output from background tasks. You will need to create this directory and change its permissions so that it can be written to by the application.
- created task 'batch_log(filepicker)' to read the contents of the 'radicore/logs' directory. Clicking on a file name will download/display its contents.
- updated 'std.filepicker1.inc' to include a call to the 'filePickerSelect()' method after a selection has been made in case some further processing is necessary.
- updated 'std.filedownload1.inc' to include a call to the 'initialise()' method to perform any processing before the 'initialiseFileDownload()' method is called.
- added task 'file(search)' to be used as the search function for the 'filepicker' pattern.
- added task 'file(delete)' as a navigation button in 'batch_log(filepicker)', to allow selected entries to be deleted.
- updated 'std.filepicker1.inc' to include optional 'size' and 'date' column, and to allow sorting on these columns.
2008-11-01, version 1.41.0
- fixed bug in 'initSession()' function within file 'include.session.inc' which lost the value of a task's pattern_id in the session data.
- updated 'std.add2.inc' so that if 'getExtraData()' produces an error it will return immediately to the previous task.
- fixed bug in 'std.validation.class.inc' which failed to pick up a custom validation class in the subsystem's 'classes' directory.
- fixed bug in 'std.datevalidation.class.inc' which failed to deal correctly with dates which were input in the format 'dd/mm/yyyy'.
- added option on Menu Control Data to allow login via email address instead of user_id.
- upgraded TCPDF library to version 4.0.029 (after overcoming some new bugs in TCPDF which the author won't recognise as bugs).
- modified the pagination and scrolling functionality to allow 'google style' which shows (Page 1 2 3 4 5 6 7 8 9 10 of 99) instead of (Page 5 of 99). My thanks to Ian Katz for contributing this code.
- modified the 'help' template inside 'std.buttons.xsl' so that all help screens use the same session name as the application screens. This will ensure that the user's language will be taken into account when finding text to be displayed.
- modified 'std.pdf.class.inc' to accept 'notext' => 'y' on images so that the image will be displayed on its own without the file name.
- fixed bug in 'radicore/default/screens/en/output4.screen.inc' which had 'party' as the table name instead of '#tablename#'.
2008-10-01, version 1.40.0
- fixed bug in 'qualifySelect()' of 'std.table.class.inc' so that it will not try to qualify any element in the select list which starts with 'function(SELECT ...)' as well as '(SELECT ...)'.
- added 'sqlSelectDefault()' method to 'std.table.class.inc' so that the components of an object's sql SELECT statement can be set to their default values before being modified.
- modified 'std.datevalidation.class.inc' and 'config.inc' to allow dates to be displayed in the format 'dd.mm.yyyy' and 'dd/mm/yy'.
- modified 'Generate SQL' function in AUDIT system to replace chr(10) with '\n' and chr(13) with '\r' in field values.
- modified the 'filepicker' pattern so that if a 'fileupload' task is activated then the uploaded file will automatically be passed back to the user as the selected file without any further action.
- modified 'std.help.inc' so that it includes both the taskid and description in the screen title.
- added the ability to authenticate the logon screen via an LDAP server, in addition to the existing RADIUS server.
- updated MNU_TASK table to include a new column to hold max_execution_time, to allow a script to run for longer than the limit defined in the PHP.INI file. You will need to run script radicore\menu\sql\mysql\alter_table(2008-09-19).sql to update the structure of the MENU database.
- made it possible to force a page break in a PDF report with the code "$this->pdf->AddPage();"
- fixed bug in 'getForeignData()' which dealt incorrectly with a field list containing multiple fields, some of which were aliased.
2008-09-01, version 1.39.0
- modified 'std.table.class.inc' so that if the 'getData()' or 'getData_serial()' methods need to check that the primary key has been supplied they will also accept a candidate key.
- fixed bug in 'dml.*.class.inc' which caused the value zero in an integer field to be treated as empty, thus causing an error if a field had the 'required' property set. The test has been changed from 'if (empty($value)) to 'if (strlen($value) > 0)'.
- modified 'std.table.class.inc' so that the 'initialise()' method saves the contents of $where in $this->where. This will allow $where in an ADD1 pattern to be passed to a popup form.