Permalink
Fetching contributors…
Cannot retrieve contributors at this time
602 lines (446 sloc) 22.4 KB
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.
==========================================================
2018-07-11
* Add a very basic Javascript neutralizer to Wing::ContentFilter.
2018-07-01
* Made idea sorting pluggable.
* Added incomprehensible option to ideas.
2018-06-25
* Gave Session a self relationship.
* Added an error message if you don't pass in a api url for wing.vue.js delete().
* Fixed a bug in error handling in wing.vue.js delete.
* Added wing.base_uri property to wing.vue.js.
* wing.vue.js now requires <script src="https://cdn.jsdelivr.net/npm/qs@6.5.2/dist/qs.js"></script>.
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-04-04
* Better error handling in wing.object and wing.object_list in wing.vue.js.
* Added new round() filter to wing.vue.js.
* wing.object and wing.object_list now have fetch_api, list_api, and create_api exposed as properties.
2018-03-30
* Added wing.vue.js get_query_param().
* Fixed a search bug in var/ideas/index.tt.
2018-03-23
* Converted UI to use Vue 2 and Bootstrap 4.
* Read angular2vue.txt for migration details.
* Now requires: Template::Plugin::JSON::Escape
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
* Site's trashed property is now available to admins.
2013-06-06
* Many bug-fixes with tenant handling in wing db
2013-05-31
* Added tenant() and tenant_db() methods to Wing.pm.
2013-05-30
* Added the --do option to wing db.
* Added the wing tenant plugin
2013-05-25
* Added Wing Command, the new CLI for Wing.
* Now requires App::Cmd.
* Converted wing_db.pl to Wing Command.
* Converted wing_add_user.pl to Wing Command.
* wing user can now search and list users, and list only admins.
* Add wing do to Wing Command, for firing off Wingman jobs.
* Converted wing_add_class.pl and wing_template_class.pl to Wing Command.
2013-05-19
* Added EmailAllAdmins Wingman plugin.
* WARNING: By this point all Wing apps should have a block similar
to this added to their config files if they want to start
using Wingman services.
"wingman" : {
"max_workers" : 2,
"beanstalkd" : {
"server" : "127.0.0.1",
"ttr" : 60,
"default_tube" : "wingman",
},
"plugins" : {
"Wingman::Plugin::SendTemplatedEmail" : {
"phase" : "SendTemplatedEmail",
},
"Wingman::Plugin::EmailAllAdmins" : {
"phase" : "EmailAllAdmins",
},
}
},
2013-05-18
* Added SendTemplatedEmail Wingman plugin.
* Added generic.mkit
* Added reset_password.mkit
2013-05-16
* Added Wingman manager rest and web interfaces.
2013-05-14
* Restructured Wingman and added more documentation for it.
2013-05-12
* Added the Wingman job server.
* Now requires Parallel::ForkManager, Beanstalk::Client, and Plugin::Tiny.