-
Notifications
You must be signed in to change notification settings - Fork 14
/
CHANGES.txt
1058 lines (773 loc) · 39.2 KB
/
CHANGES.txt
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
W I N G C H A N G E S
----------------------------------------------------------
This file tracks the changes to Wing over time. Especially
with respect to new features and compatibility changes.
==========================================================
2024-10-11
* Remove smartmatch
2024-08-20
* Smaller memory footprint delete_all method, delete_all_chunkily
2024-08-01
* Guarantee that rows are always returned in a consistent order.
2024-04-29
* Modernize the install to latest Perl and fix a bunch of perl prereq problems.
2023-03-14
* Increase iteration limit in wing.vue.js _all() to 199 from 99.
2023-01-06
* Added verify_user option to generate_relationship() in Wing::Rest.
* Fixed a bug where generating field options from a parent list would cause an error.
2022-12-27
* Added X-WING-SKIP-RESULT-WRAPPER header check in Wing::Rest.
2022-12-16
* Added generate_options_by_name_where option to Wing::Role::Result::Parent.
* Added a switch to have new comment box at the top instead of the bottom.
2022-05-04
* Fix permission errors that happen when trying to Ouch an object in the message field.
2022-05-03
* Handle badly formed JSON Firebase messages gracefully.
2022-02-27
* Fixed a problem where if creation params were 0 or empty string and that was a valid value creation would fail.
2021-11-28
* Added wing.suppress_default_axios_errors.
2021-11-15
* In wing.vue.js wing.base_uri is no longer applied via wing.format_base_uri if the uri supplied starts with http.
* In wing.vue.js fixed a problem where wing.object_list wasn't passing along with_credentials when creating new objects.
* In wing.vue.js fixed a problem where wing.firebase wasn't using format_base_uri to request the JWT.
2021-11-14
* Added REST endpoint /api/user/whoami which returns info about who the currently logged in user is if any.
2021-11-04
* Added the ability to pass options to wing.format_post_data, and an option in wing.object called post_formatting_options to pass through.
2021-10-26
* Fix issue with _all promise resolution with variable page and data being returned.
2021-10-25
* Pass through on_each from the _all method to the _search method in wing.vue.js.
2021-10-24
* A more promise friendly version of the _all method in wing.vue.js.
2021-10-12
* Removed id change from 10-9
* Replaced it with _use_this_id as a rest parameter for creating objects with a specific id.
2021-10-09
* An id can now be specified when creating an object via Rest.
2021-10-01
* Added delete_object() method for wing.object to get around validations on things like prettier.
2021-09-29
* Posting to /api/session will generate a cookie.
2021-09-22
* Added Wing::Role::Result::EveryUserControlled.
2021-09-06
* Don't reject 0 in fields out of hand. To limit numeric quantities in fields use the range property of any field.
2021-08-03
* Extend check_privileges into child relationship URLs
2021-05-24
* Fix double templating of login when using SSO from offsite.
2021-03-11
* Added wrap option to luxon-date-time.
* Fix: Prototype mismatch: sub Wing::Rest::WebHook::from_json: none vs ($@) at /data/Wing/lib/Wing/Rest/WebHook.pm line 6.
2021-02-20
* Added a web hooks subsystem.
2021-02-11
* Fixed wingman tube job viewer.
2021-01-30
* Fixed a couple of warnings in lib/Wing/Firebase.pm
2021-01-28
* Added default_time to luxon-date-time.
2021-01-05
* Added bin/util/nginx_ip_count.pl for seeing which IP's are hitting the server the most given a specific tail from the nginx log.
USAGE: tail -10000 /var/log/nginx/access.log|bin/util/nginx_ip_count.pl
2020-12-12
* Updated default captcha field to be more clear for dullards.
* Removed captchas that were too challenging for mere mortals.
2020-12-05
* Added wing.luxon2wing() date converter in wing.vue.js.
2020-12-04
* Fix timezone formatting bug in wing.vue.js format_datetime().
2020-11-30
* Added an EmailAllUsers wingman job.
2020-11-23
* Added wing.format_datetime() to wing.vue.js.
2020-11-21
* luxon-date-time component in wing.vue.js now accepts date-disabled-fn property to disable specific dates.
* wing.format_date() in wing.vue.js now correctly places a comma after the day.
2020-11-20
* Wing::Rest::generate_relationship() now has a new option in named_options called ranged. This allows you to specify _start_name_of_field and _end_name_of_field in your query params, which will search >= name_of_field and <= name_of_field on that relationship.
2020-11-19
* Expose ip_address field to describe() method which can be useful to lock some requests to specific IP addresses.
2020-11-18
* Older browsers don't support the ||= operator, so removing it from wing.vue.js.
* Enabled decade buttons on the luxon date time picker.
2020-11-17
* Added format_date(), format_timeago(), date2luxon() in wing.vue.js.
* Depricated the datetime and timeago filters in wing.vue.js.
* Added the <luxon-date-time> component in wing.vue.js.
* Depricated the <date-time> component in wing.vue.js.
2020-11-15
* Emit change event for wing-select and wing-select-new components in wing.vue.js.
* Some bug fixes in wing class --add and --template templates.
2020-11-11
* Handle warnings even when properties are directly injected into a wing object in wing.vue.js.
* Fix: wing.vue.js displays the Add a Comment form, even if the user isn't logged in. #32
2020-11-09
* Removed "Last Login" from profile template since that is hidden info.
* Made long URLs in comments wrap so they don't make weird scroll bars.
2020-11-06
* Changed the save and preview button on the markdown editor to make it easier to see and easier to use.
2020-10-27
* Default value in Wing::DB::Result is now set by set_column() rather than calling the column_name() accessor, for both performance and so that dynamically generated options validation doesn't get called prematurely when the object has no data.
2020-10-24
* Remove autosave on markdown editor.
2020-10-22
* Fix bug in wing.vue.js date-time component.
2020-10-19
* Fixed a bug where wing.vue.js wing.object.save() wouldn't save if the value was 0.
* Fixed a bug that prevents objects from being recycled by resetting the fetch_api.
2020-10-18
* Fixed wing.vue.js wing.object.on_delete bug introduced on 2020-10-16.
2020-10-17
* Added db_class_name option to generate_options, generate_relationship, generate_all_relationships, generate_read, generate_create, generate_delete, and generate_update in Wing::Rest for API migration tasks.
* Added custom handler to duplicate method in Result so that you can manipulate the copy before data is copied into it.
2020-10-16
* Updated on_create, on_delete, and on_update to each return a reference to the object as their second parameter in wing.vue.js.
* Removed vestigial self.id from wing.vue.js wing.object.
2020-10-15
* Small refinements to wing-pagination columns.
2020-10-12
* Added percent-from-decimal component to wing.vue.js.
2020-10-09
* Exposed "scroll_to_id" prop on wing-pagination component. Pagination defaults to scrolling up to "app". If you want something else specify it here.
* Minor refactoring of ideas system.
* Converted ideas templates to Vue.
* Added slot called "above-add-comment" to wing.vue.js <comments> component.
2020-10-08
* Exposed Wing::Util::commify() to Wing::Template.
* wing.vue.js markdown-editor component exposes a default slot so you can place content below the editor.
2020-10-05
* In wing.vue.js added set_fetch_api() on wing.object.
2020-10-01
* Made the algolia search code a bit more elegant to make it easier to implement their recommended retry strategy.
* Wing::Algolia has been updated to cycle through 4 different URLs for redundancy.
* Wing::Rest generate_relationship with named_options "queryable" now does a full wildcard search again.
* Wrote the documentation for Wing::Util.
* Added Wing::Role::Result::Trigram and associated utilities to enable fast substring searching in large tables.
* Fixed: Can't use an undefined value as an ARRAY reference at /data/Wing/lib/Wing/Rest.pm line 158.
2020-09-29
* Fulltext searches below 3 characters are off limits unless you change innodb_ft_min_token_size, which isn't always possible or desirable. Therefore wing generated classes now add a non-fulltext index in addition to the fulltext one so that you can do substring searches on that as well.
2020-09-28
* Fixed: When a captcha answer is 0 it always fails.
* Added better sorting of fulltext fields for generated rest classes.
* Updated trends page to use bootstrap vue components instead of flatpickr.
* Added CSV export to trends page.
2020-09-25
* Fulltext queries generated by Rest generate_relationship are merged into a single query rather than being "OR"ed together.
* The debounce time on wing_object().search has been changed from 200 to 500 ms. There is now search_fast() if you still want to go 200ms.
* The wing-pagination component has been changed to use search_fast().
2020-09-24
* Added "fulltextquery" as a key in Rest named_options. Use it instead of "queryable" to perform a MySQL MATCH() AGAINST() fulltext instead of a typical LIKE substring search. Note that you'll need a fulltext index for that field in order to use this option.
* Converted ideas to fulltext search.
* Converted wing class --add to make the "name" field a fulltext index by default.
2020-09-21
* Changed check_privilege_method to log on debug instead of warn.
* Rest claasses no longer do full text searches as they simply don't scale due to full table scans.
2020-09-16
* Minor change to Wing::DB::Result->check_privilege_method so that it returns a 1 instead of the result of the called method if it passes it's checks. It's just checking for truthiness not specfically a 1.
2020-09-13
* Markdown editor goes into readonly mode while saving.
* Markdwon editor scrolls to same line number + 5 after saving.
* Fixed bug in parsing MySQL date times in tgc.vue.js as it was not using UTC.
2020-09-10
* Fix static id bug by wrapping id default in function.
2020-09-05
* Added <markdown-editor> component to wing.vue.js.
* Added <date-time> component to wing.vue.js.
2020-09-02
* Added 'WingBot' to user agent string of ContenFilter.
2020-09-01
* Web Filtered Fields should not allow null.
2020-08-29
* Refactored the <toggle> component.
* Added wing.generate_id().
2020-08-26
* Modernized the template_class templates.
2020-08-21
* Added toggle switch component to wing.vue.js.
* JSON fields now assume a non JSON string is a single element array as it's more useful than assuming it's an error.
* Field validation now allows for an array reference as a valid value for enumeration comparisons.
2020-08-19
* Added wing.format_field_label() for generating make shift field labels on the fly.
* Added search_params to wing.vue.js wing.object_list.all() and wing.object_list.search().
* Added v-autosavedelay and v-autosavefield options for the v-autosave directive in wing.vue.js.
* Added <wing-options-label> component to wing.vue.js.
2020-08-19
* Added wing.natural_sort() utility for sorting lists so that numbers appear naturally in alpha-numeric lists.
2020-08-14
* Updated bootstrap-vue to 2.16.0.
* Updated vue to 2.6.7.
* Updated bootstrap to 4.5.2.
* Added wing-pagination component to wing.vue.js.
2020-07-13
* Fixed bug in Wing::Util::is_in() where it always returned true.
2020-07-10
* Added Wing::Util with several utility functions that are useful all over wing apps.
2020-07-09
* Give better diagnostics for Algolia API failures.
2020-07-06
* Added captcha at account creation. If you have an existing app and want to use it you'll need to do the following:
in etc/wing.conf add:
"captcha" : {
"on_create_account" : 1,
},
in views/account/create_accont_include.tt add:
[% IF captcha.riddle %]
<div class="form-group">
<label for="_captcha_answer">Fill in the blank</label><br>
<input type="hidden" name="_captcha_key" value="[% captcha.key %]">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">[% captcha.riddle %]</span>
</div>
<input class="form-control" type="text" name="_captcha_answer" id="_captcha_answer">
</div>
<span class="form-text text-muted">(Required)</span>
</div>
[% END %]
in views/error.tt replace:
[% INCLUDE account/authenticate_include.tt redirect_after=params.redirect_after || request.path %]
with:
[% INCLUDE account/authenticate_include.tt redirect_after=params.redirect_after || request.path captcha=exception.captcha %]
2020-06-29
* Allow fields in a class to be prioritized, to guarantee some get processed before others.
2020-02-03
* Added a better error message when an object things a reference should exist but does not.
2020-02-28
* Added wing.copy_to_clipboard() method.
2020-01-28
* Make Wingman behave like Beanstalk::Client when a timeout is specified
2019-10-22
* Add v-autosavedelay to increase timeout on autosave
2019-10-11
* Added a bury command to wingman.
2019-09-26
* Remove unneeded param from .call in wing.vue.js
* Added Wing->stash which allows variables that last only 1 request.
2019-09-23
* UTF-8 encode messages to Firebase, too.
2019-09-04
* Use Text::Demoroniser to clean messages being sent to Firebase
2019-08-19
* Added wing trends --recalc_one
2019-08-16
* Fix "read more" link in comments.
2019-07-10
* Add file-locked trends script to prevent more than 1 copy from running at a time.
2019-07-09
* Fixed the formatting of a "you need to log in" message.
2019-06-04
* Added comments as a directive to wing.vue.js to be used in conjunction with Wing::Role::Result::Comment.
2019-06-03
* Upgrade to Facebook::OpenGraph
* Requires Net::Amazon::S3 0.86 or higher.
2019-05-10
* Wing notifications (wing.info, wing.success, etc) have been upgraded to use Bootstrap Toasts. See WingVue.pod for usage notes.
* You must upgrade to [email protected] and [email protected].
* You can remove noty from wing_ui_css_requirements.tt and wing_ui_js_requirements.tt.
2019-05-08
* Fixed bug with nulls in wing.vue.js.
2019-05-07
* wing.vue.js post can properly handle a JSON blob on post.
2019-05-02
* Pass thru unlogged methods to CHI.
2019-04-28
* Use per-process cache object.
2019-04-27
* Added cachelog subsystem. To use add "cachelog" : "log" to your config, or see Wing::Role::Result::CacheLog for a database log.
* Added "flush" to wing command cache. Only works with FastMmap and MemcachedFast.
2019-04-26
* Added a session id conflict check for better security auditing.
2019-04-15
* Do not die in sending email jobs. Just delete the job.
2019-04-09
* Add additional debug for email problems.
* Remove real_name/display_name from mkits due to unsafe characters.
2019-03-06
* Increased the timeout of secondary auth to 30 minutes.
* Made a better secondary auth email template.
* Made secondary auth not get into an infinite loop.
2019-02-25
* Added option to wing.object.save() in wing.vue.js.
* Added wing-select-new directive to wing.vue.js.
2019-02-12
* Added get_field_options() and format_field_options() to wing.vue.js.
* Added format_objects_as_field_options() to object_list in wing.vue.js.
2019-02-05
* Modified S3Image to allow verification of an image outside of the handle upload method.
* Added the append() method to wing.object_list in wing.vue.js.
* Added custom-select class to wing-select in wing.vue.js to bring it inline with the formatting for bootstrap-vue.
2019-02-04
* Modified S3Image to allow for images not attached to other objects by passing '-none-' into image_relationship_name.
2019-01-28
* Fix a long standing bug with false logging of email errors.
2018-11-26
* Fix trends delta roll up calculation.
* Add --target option to wing trends command line.
2018-11-25
* Added Wing::Instrument to make it easier to profile Wing.
2018-10-18
* Trends deltas now take an average over time rather than having last write be the value for daily, monthly, yearly. This means delta trends won't have perfect accuracy for a while.
* Trends don't log if value eq undef
2018-09-30
* Bunch of chat bug fixes.
* Added /badge and /badge-color commands to chat.
* Added windowing controls to chat wrapper.
* Admins automatically handle secondary auth when they "become" a user now.
2018-09-29
* Add S3File role, for uploading files vs images into a private bucket.
2018-09-25
* Converted UI to use Vue 2 and Bootstrap 4.
* Read angular2vue.txt for migration details.
* Now requires: Template::Plugin::JSON::Escape
* If you wish to take advantage of the new Firebase features in the UI you'll need to load:
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-database.js"></script>
* Now requires Crypt::JWT and Firebase Perl modules.
* Added public/wing.chatwrapper.js. If you want to use it, you need to expose it in etc/nginx.conf.
* If you want to use Firebase, copy the rules from var/firebase_rules.json into your Firebase instance.
* If you want to use Firebase, you'll need to set up the Firebase section in your wing.conf file like this:
"firebase" : {
"id" : "firebase-idgoeshere",
"service_email" : "firebase-adminsdk-somecode@firebase-dbname.iam.gserviceaccount.com",
"api_key" : "api key goes here",
"database" : "dbname",
"admin_key" : "-----BEGIN PRIVATE KEY-----\nkey goes here\n-----END PRIVATE KEY-----\n",
"auth" : { "admin" : true, "secret" : "secret goes here", "data" : {"uid" : "wing"} }
},
* facebook_uid and facebook_token are now part of Wing::Role::Result::User so remove them from your base classes.
* You'll need to add Wing::Web::Chat to the module list in MyApp::Web if you want to use chat.
2018-07-11
* Add a very basic Javascript neutralizer to Wing::ContentFilter.
2018-07-01
* Made idea sorting pluggable.
* Added incomprehensible option to ideas.
* Added Wing::Algolia.
2018-06-25
* Gave Session a self relationship.
2018-06-22
* libpng should be compiled with Wing because the RPMs found in many places don't contain pngfix.
2018-06-20
* Use MooseX::NonMoose to convert Wing::DB::Result and set defaults.
2018-06-19
* Migrate Wing to use the latest Perl (5.26.2) and modules.
* Removed start_web.sh (and related scripts) in favor of wing commands.
wing web --start
wing web --stop
wing rest --start
wing rest --stop
* Added wing command to start and stop wingman.
wing wingman --start
wing wingman --restart
wing wingman --stop
wing wwingman --start --watchself
2018-04-30
* Change X-HTTP-Real-IP in nginx.conf to use $http_x_forwarded_for instead of $remote_addr to be compatible with Amazon load balancer.
* Added last_op to lib/Wing/Role/User.pm
* Will need to do a DB upgrade on app.
2018-04-18
* Notify about cookies.
2018-04-10
* Added 2-factor authentication for GDPR compliance.
* NOTE: You need to add var/init/var/mkits/secondary_auth.mkit to your mkits.
2018-03-30
* Fixed a search bug in var/ideas/index.tt.
2018-2-13
* If Role::Field options returns undef then don't validate it.
2018-2-12
* Don't double encode HTML entities.
2018-2-8
* Autokick all jobs in all tubes in the current wingman server
2018-1-16
* User permanently deactivated flag.
2017-11-28
* Added JSONField role so that I could add validation everywhere.
2017-10-05
* Should have written tests for the new check privilege stuff.
2017-10-04
* check_privilege in Wing::Role::Result::Field now will also describe the field if it is privileged.
* No longer hiding an error sending an email.
2017-09-25
* No longer sending Dancer server tokens.
* Added a very basic security report collector web service.
2017-09-12
* Better insufficient privileges message.
2017-09-08
* email_override in the config now also ovrrides BCC.
2017-09-06
* Added the ideas system so it can be shared across all our various platforms.
2017-09-04
* You can now specify a relationship name and value to sort on via Rest.
2017-08-24
* Everyone should be using the latest version of DBIx::Class::InflateColumn::Serializer to avoid JSON encoding errors. You also need to add the following to any fields you serialize to JSON:
'serializer_options' => { utf8 => 1 }
Example:
fields => {
dbic => { data_type => 'mediumblob', is_nullable => 1, 'serializer_class' => 'JSON', 'serializer_options' => { utf8 => 1 } },
view => 'private',
edit => 'postable',
},
2017-08-09
* Added accumulate option to wing.angular.js objectListManager search().
2017-08-04
* Added role for attaching comments to an object.
2017-07-20
* Moved login() from Wing::Web::Account, to Wing::Dancer and made it a Dancer Plugin so it can be called from multiple modules.
2017-07-18
* Added instructions for compiling OpenSSL and Perl modules on Mac OS, because Apple's outdated OpenSSL doesn't work anymore with sites like Stripe.
2017-06-29
Added skip_confirm to wing.angular.js objectManager delete().
2017-06-29
* Added get_object() in wing.angular.js to suppliment find_object().
* Added params option to search() and all() in objectListManager in wing.angular.js.
2017-06-25
* Allow null as a value on a Rest qualifier.
* Fixed a bug in wing.merge()
* Added with_credentials flag to wing.angular.js objectListManager and objectManager $http methods.
2017-06-23
* create() in wing.angular.js objectListManager now provides a reference to the object during on_success
2017-06-22
* wing.angular.js now supports angular 1.6, by removing the use of .success and .error methods on $http in favor of .then
2017-06-09
* WebFilteredField no longer puts a restriction on the length of a string.
* S3Image increased filename size from 60 to 255.
2017-05-18
* Added max_items option to result sets so that you can artificially stop pagination after some arbitrary amount, rather than all the records in the database.
2017-03-04
* Readding the prevention of joined queries on generated relationships.
2017-03-03
* Removed a wierd query option on objectListManager search() in wing.angular.js.
2017-01-25
* Don't prevent joined queries from performing a query on generated relationships.
2017-01-11
* Do session check if session_id is passed to /api/_test
2017-01-02
* Changed the output of Wing::Rest::Status over a potential security issue.
2016-12-30
* UriPart role should also have had skip_duplicate turned on by default.
2016-12-28
* UriPartOnInit role should have had skip_duplicate turned on by default.
* Show job id in Wingman error message when not found.
2016-11-04
* _order_by can now be an array.
2016-10-18
* Backed out change added on 2016-10-14, because the user decided not to use it, and it was causing other problems elsewhere in existing apps.
2016-10-14
* lib/DB/Result.pm now has verify_creation_params setting the values of required params so that they can be used in a can_edit() check when creating an object.
2016-10-13
* S3Image now includes the object id in the local cache path.
2016-10-07
* Add option to skip Wing's field uniqueness check, if the field value is null.
2016-10-04
* Allow joined queries on Rest generate_relationship().
2016-08-29
* Switched to our own markdown parser for better security, speed, and formatting.
2016-08-25
* Added better precheck for unique fields to check for unique indexes as well as unique qualifiers.
* Added in page targets to Web Filtered Fields.
2016-08-22
* Requires Text::MultiMarkdown and URI::Find::Delimited.
* Allow for Markdown in Web Filtered Fields.
* ContentFilter now uses ## instead of == for headings. Use something like this to upgrade your database:
update groups set description=replace(description, '==','##');
2016-08-18
* Add a login link to 401 ajax error messages.
2016-08-08
* Export "can_view" property via describe() method in Result.pm
2016-08-02
* Fixed a bug in Wing::ContentFilter where it couldn't get SSL sites.
2016-07-18
* Added filter to Wing::Role::Result::Field.
2016-07-11
* Disambiguate a Rest _order_by clause.
* By default content filter allows for H2 through H6.
2016-07-06
* Allow qualifiers in Rest generate_relationship to be passed a comparison operator.
* wing.angular.js objectListManager on_each is now passed the objectManager instance of each object in addition to its properties.
2016-06-30
* Updated the Facebook SSO API to work with Facebook's nonsense.
* Exposed FacebookAuthUser role so you know what fields you have to add to auth with Facebook.
* NOTE: You need to copy var/init/views/account/create_account_include.tt finish_facebook.tt, and authenticate_include.tt into your views/account folder.
2016-06-29
* Added a describe_delete method.
2016-06-24
* Replaced 451 error codes with the HTTP standard 401.
2016-06-22
* Fixed a bug introduced in the last release where _include_options wasn't available on describe object calls.
2016-06-18
* Added Wing::Role::Result::Cousin, which sets up many to many relationships between classes in a Wing way.
* Added the Rest param _include and the method param include to describe() and format_list() in Wing::Dancer so that you can arbitrarily add stuff to class describe methods.
* Documented the options in Wing::Rest for generate_relationship() and generate_all_relationships().
* Fixed a bug relating to the object prefetch created by generate_relationship().
* wing.angular.js objectListManager search() now has an on_success option that is passed the successful result set.
2016-06-16
* Added privileged_params() to Wing::DB::Result.
* Added check_privilege option to wing_field in Wing::Role::Result::Field.
* The above two changes allow the creation of special privilege checks on a per-field basis.
2016-06-11
* Added Wing::Role::Result::Warnings to give a standardized way of creating warnings in classes.
* Change a couple fields that shouldn't be not null in the User role.
2016-06-06
* Moved environment setup into various OS specific readme files.
2016-06-03
* Added WING_NO_EMAIL environment variable to skip sending email all together.
* Added wait_on_wingman() and cleanup_wait_on_wingman() to Wing::TestHelper.
* Wing::TestHelper automatically recovers from a bad cleanup of the Andy test user.
2016-05-30
* A few changes and bug fixes for better testing.
2016-05-24
* If a field is defined as required or unique then we no longer allow empty string '' as a valid value.
2016-05-10
* Added a --force option to wing class --add so that you don't accidentally overwrite your classes.
* Added documentation for undocumented features of wing.angular.js.
2016-05-05
* Upgraded to latest angular and angular-ui.
2016-04-28
* Added "on_all_done" option for the .all() method in objectListManager in wing.angular.js.
2016-04-18
* Changed the default path for the fastmmap cache so projects don't trounce on each other's cache.
2016-04-14
* Added { join_type => 'left' } on parent relationships that are not required, which will allow prefetches and joins where the object doesn't exist.
* You can now specify _include_related_objects=relationshipname and pull back only the objects you want, not all related objects.
2016-03-30
* Added checklist directive to wing.angular.js
2016-03-28
* wing.angular.js objectListManager now has call() and reset() methods.
2016-03-23
* wing.angular.js objectManager now passes behavior fetch_options to delete().
2016-03-12
* Added "generate_password_reset_code" method to Wing::Role::Result::User.
2016-03-11
* Added the can_link_to method in Wing::DB::Result, which is used for owner checking in Wing::Role::Result::Parent.
2016-03-09
* Broke out installs for different systems into their own README files. Thanks to Jim Edwards for his help on this.
2016-02-21
* Added Wing::Role::Result::UriPartOnInit to set a uri_part only when an object is first created.
2016-02-04
* wing.js errors now go away after 12 seconds and warnings go away after 10 seconds.
2016-01-28
* Force UTC time zone on DateTime objects going into/out of the database.
2016-01-26
* Wing::ContentFilter makes a shorter prettier note for external links now.
2016-01-15
* Thanks to Chan Wilson for all his feedback on this set of changes.
* Added a message to wing class to let you know where you can access your newly created object.
* Added Test::Trap and JSON::XS to bin/setup/03_install_perl_modules.sh to make installs flow easier.
* Added a note as to where you can find the logs in README.txt.
* Indicated what services need to be restarted after you add a class in README.txt.
2016-01-12
* Removed fetch_create_options from wing.angular.js because fetch_options is better.
* Added WingAngular.pod documentation for wing.angular.js.
* Added the Wing Command kick module so that you can kick buried wingman jobs.
2015-12-29
* Updated the javascript libraries to the latest versions.
2015-12-17
* Added support for is_auto_increment to Wing::Role::Result::Field dbic definitions.
* Added unique qualifiers, so you could have uniqueness within an object type.
2015-11-24
* Changed Wing::Role::Result::Parent to allow undef to be set on a relationship that is not required or unique.
* Added on_success to options and behavior for all() and search() in objectListManager in wing.angular.js.
2015-11-20
* Added fetch_options() to wing.angular.js objectListManager.
* Added force-number directive to wing.angular.js.
2015-10-20
* Added qualifiers option to generate_relationships() in Wing::Rest.
* Change template so search forms submit when you hit enter.
2015-10-05
* Added a line to bin/dataapps.sh to make Wing compatible with Mac OS X El Capitan.
2015-08-25
* Added local_cache_path requirement to Role::S3Image.
* Added fetch() to Role::S3Image.
* Fixed a bug in Role::UserControlled where you couldn't stack multiple "Controlled" roles, becasue UserControlled would throw an exception if it didn't pass the first step.
2015-08-24
* Added can_delete() to Wing::DB::Result.
2015-08-19
* Now generating the _field_name_options method in Wing::Role::Result::Field. Example: _color_options for a field called color.
2015-08-07
* Added the trends system to track stats over time.
2015-07-22
* Added call() to objectManager in wing.angular.js to allow for methods that should automatically update the object that are not part of CRUD.
* Fixed a problem with the auto generated templates instructing to call .list() instead of .all()
* Added named_options option to generate_all_relationships() to be passed into individual generate_relationship() calls in Wing::Rest.
* Added queryable option to generate_relationship() in Wing::Rest.
* Better redirect on templated class index.tt to edit.tt.
2015-07-14
* Added an option to objectListManager fetch() to prepend an item.
2015-06-30
* Now requires Imager and Image::ExifTool and File::Temp
* Added Wing::Role::Result::S3Image
2015-06-29
* Now requires pQuery and Data::OpenGraph.
* Added Wing::ContentFilter
2015-06-26
* wing.angular.js objectListManager search() now uses then() instead of success() and returns its results to be compatible with bootstrap ui typeahead.
2015-06-23
* wing db --prep now automatically adds charset and collate options to table generation.
* Added view_uri and edit_uri to make it easier for folks to template stuff.
2015-06-22
* Better debug when an object is not found via fetch_object.
* Added Wing::TestHelper
* Added wing class --test=MyClass test generator
2015-06-21
* Added fetch_creation_options() to objectListManager in wing.angular.js.
* Wing defaultly uses wing.angular.js now in its templates.
2015-05-10
* Fix an IE cache issue in wing.angular.js.
2015-04-23
* Added the "cache" module to Wing::Command so you can get, set, and remove items in the cache from the command line.
2015-04-12
* Added _sort_order and _order_by handlers to Wing::Dancer::format_list().
2015-04-11
* Added timeago date filter in wing.angular.js.
* Added unshift option to create on objectListManager in wing.angular.js.
2015-04-09
* Added "email_override" option to the config file. If this is specified then any emails sent out will always go to that address rather than the intented recipient.
2015-03-31
* A massive overhaul to wing.angular.js:
* Refactored objectListManager factory to be smaller and more flexible.
* Moved confirmations from objectListManager into it's own factory.
* Added objectManager factory and made objectListManager use objectManager objects.
* Added directive for input[number] to force the model to always be a number.
* Added autosave directive which works similar to wing.attach_autosave()
* Added wing-select directive, which autogenerates <select> lists from _options data.
* Added force-string directive, which forces numbers to be strings for display purposes on a model. This is needed because Perl hash keys aare always strings, but scalars can be strings or numbers, so when comparing them in js 1 != '1'.
2015-03-29
* Added wing.merge() to wing.js, which is useful for merging parameter hashes to make a request back to the server.
* Added wing.angular.js. To use it simply do:
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script>
<script src="/wing.angular.js"></script>
myApp = angular.module('MyApp',['wing']);
myApp.controller('MyCtrl', function($scope, $http, objectListManager) {
$scope.users = new objectListManager(
fetch_options : {
_include_options: 1,
_include_relationships: 1, // required
},
list_api : '/api/user',
create_api : '/api/user',
on_create : function(object, index) {
wing.success(object.username + ' created.');
},
on_update : function(object, index) {
wing.success(object.username + ' saved.');
},
on_delete : function(object, index) {
wing.success('Deleted' + object.name +'.');
},
});
});
<!-- in html -->
<div ng-controller="MyCtrl">
<div ng-repeat="user in users.objects">{{user.properties.username}} <button ng-click="user.delete()">Delete</button></div>
</div>
2015-03-12
* Fixed a bug where 0 didn't count as a defined value for required fields.
* Rebuilt the "wing class" command so that it more accurately reflects modern Wing development practices.
* wing.js added a callback parameter to wing.delete_object().
2015-03-10
* Fixed a bug where the default web.psgi and rest.psgi files were missing "use Dancer;" which caused everything to fail.
* Did a lot of cleanup of the default templates to more modern practices.
* Rewrote the user manager app to use AngularJS instead of Handlebars
* wing.js added wing.angular_http_injector() which you can use like this:
app.config( function($httpProvider) {
$httpProvider.defaults.withCredentials = true;
$httpProvider.interceptors.push(wing.angular_http_interceptor);
});
* wing.js added wing.angular_datetime_filter() which you can use like this:
app.filter('datetime', ['$filter', wing.angular_datetime_filter]);
2014-12-30
* wing.js update_field() now passes the data result to the callback.
* wing.js attach_autosave() now allows a third parameter to be a callback that will be executed upon success.
2014-09-21
* Now have a default Result Set object which is required for Wing to operate. This is a backward incompatible change, but is easily fixed. Simply edit YourApp::DB and add this line inside load_namespaces()
__PACKAGE__->load_namespaces(
default_resultset_class => '+Wing::DB::ResultSet',
);
2014-09-20
* Switched to PNotify 2.0. This is backward incompatible with PNotify 1.0.
2014-05-27
* Add error handling to SendTemplateEmail Wingman job.
2014-05-06
* Add a file to hold a master before_template_render hook for all of wing. This hook should always be the last hook processed, because it will call describe on the current_user object passed in.
2014-04-2
* Automatically set the database name in the config file, based on the project name.
2014-03-17
* Update the template class templates for Bootstrap3
2014-02-27
* You can now add extra_processing to the Wing::Rest's generate_delete.
2014-02-27
* You can now make a class viewable using the PrivilegeControlled role.
2013-10-30
* Changed session to compare the password hash stored in the session with the one stored in the database. This way all existing sessions will get logged out if the user changes their password.
2013-09-25
* Daemonized wingman.pl. You now need the Daemon::Control perl module. You can also add a "wingman/pid_file_path" directive to your config file if you want to control where the pid is stored.
* Added --watch-only as a command line flag to wingman.pl so that you can specify a tube to watch other than the default tube. This is useful when you have different servers that you wish to handle different tubes.
2013-09-21
* Fixed a major security hole where it was possible to create new objects in some cases when you shouldn't be able to.
2013-09-03
* Wing::Role::Result::Field now allows you to pass a code reference into the options parameter so you can dynamically generate field options.
2013-08-12
* Wing tenant sites now need a new configuration entry tenants/app_dir to tell Wing where to find the APP_DIR for tenants. This allows the owner codebase to find it for doing database installs and library path handling.
* Wing tenant sites have a limited SSO to use their owner's sites to log into tenant sites.
2013-08-08
* Wing::Rest now has generate_relationship() and generate_all_relationships() so that
you need not hand-create your relationship web services any longer. These are
also enabled by default when you 'wing class --add=NewClass'
2013-06-18
* Wing::Rest::Status now returns a tracer for checking cookie values.
2013-06-08
* Better support for sites, user-controlled deletion, restoration and list all/owned.
2013-06-08