All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Python 3.13 to test matrix
- Colspan in affected tables
- Better implementation of
get_solo()
- Month order in alliance stats view (#377)
- Chinese translation updated
- Broken corporation performance graph in alliance statistics view
- Autocomplete JS updated
- Corporation statistics pages improved
Important
After updating to this version, make sure to run the following command to migrate the old fleet types to the new system:
python manage.py afat_migrate_fleet_types
- Optional doctrine field to FAT link creation forms
- Integrity hashes to CSS and JavaScript
- ESI fleet closing condition. When the FC left the fleet and is now in another fleet, the previous fleet was not detected as no longer tracked, and as such, not closed until the FC is either in no fleet at all or offline.
- Settings from
local.py
moved to DB - Fleet type dropdown to auto-suggest field
AFAT_APP_NAME
setting to ensure the app name can be properly localized
- Monthly total FATs to statistics overview
- Use Chart.js bundled with Alliance Auth
- Dependencies updated
allianceauth
>=4.4.0
- Dependencies updated
allianceauth
>=4.3.1
- French translation improved
- Japanese translation improved
- Lingua codes updated to match Alliance Auth v4.3.1
- URL generation modularized
- French translation updated
- Japanese translation updated
- Support for Python 3.8 and Python 3.9
- Lack of authorization check when requesting recent FatLinks in Dashboard Ajax call. This could lead to unauthorized access to FatLinks of other users. (#337)
- Chinese translation updated
- Russian translation updated
- Translations updated
Note
This version needs at least Alliance Auth v4.0.0!
Please make sure to update your Alliance Auth instance before you install this version, otherwise, an update to Alliance Auth will be pulled in unsupervised.
- Compatibility to Alliance Auth v4
- Bootstrap 5
- Django 4.2
- Show the main character first on the dashboard page
- Some issues with the translations in the Python code
- Issues with translations in the Django admin backend
- Stats graph appearance
- A bug where the previous or next month number wasn't calculated correctly in the statistics detail view
- A bug where the next month button in the statistics detail view was not displayed correctly
- A potential performance issue with an ajax call in the dashboard view (thx to @pvyParts)
- JS modernized
- CSS modernized
- Templates changed to Bootstrap 5
- Support for Alliance Auth 3
Note
This version needs at least Alliance Auth v4.0.0b2!
Please make sure to update your Alliance Auth instance before you install this version, otherwise, an update to Alliance Auth will be pulled in unsupervised.
- A potential performance issue with an ajax call in the dashboard view (thx to @pvyParts)
Note
This version needs at least Alliance Auth v4.0.0b2!
Please make sure to update your Alliance Auth instance before you install this version, otherwise, an update to Alliance Auth will be pulled in unsupervised.
- Stats graph appearance
- A bug where the previous or next month number wasn't calculated correctly in the statistics detail view
- A bug where the next month button in the statistics detail view was not displayed correctly
Note
This version needs at least Alliance Auth v4.0.0b2!
Please make sure to update your Alliance Auth instance before you install this version, otherwise, an update to Alliance Auth will be pulled in unsupervised.
- Compatibility to Alliance Auth v4
- Bootstrap 5
- Django 4.2
- Show the main character first on the dashboard page
- Some issues with the translations in the Python code
- Issues with translations in the Django admin backend
- JS modernized
- CSS modernized
- Templates changed to Bootstrap 5
- Support for Alliance Auth 3
Note
This is the last version compatible with Alliance Auth v3.
- Pylint issues
- Import from
app_utils
- Capitalization for translatable strings
- German translation improved
- Korean translation improved
- Russian translation improved
- Spanish translation improved
- Use keyword arguments wherever possible
- Model names
- Some model field names
- Test suite updated
- Import from ImicusFAT (ImicusFAT has been gone for a while now and doesn't work with Alliance Auth >= 3.0.0. Whoever is still using it, should feel bad and immediately update their systems.)
- Manual FAT model. This has been deprecated back in April 2021, so it's time to remove it.
- Korean translation improved
- Russian translation improved
- Spanish translation improved
- Bootstrap CSS fix
- Footer to promote help with the app translation
- German translation improved
- Russian translation improved
- Ukrainian translation improved
- Models made translation-ready
- Translatable strings properly pluralized
- Task code cleaned up
- Error tracking for ESI fleets moved to the DB instead of being cached by Redis, as Redis was too unreliable and there was a good chance the task stopped working properly.
- German translation updated
- Russian translation updated
- German translation updated
- Include Sunday in statistics again (Related to #251)
- FATs by Weekday for Alliance are off by one day
- Only show active fleet types in FAT link form
- FATs by Weekday for Corp are off by one day (#251)
- Check if ESI is available (ESI is online and below error limit) before running
update_esi_fatlinks
task
- Russian translation updated
- German translation updated
- Hide hint text behind the permissions the users should have to see it
- Bottom margin in some statistics views
- Show FAT Link register link only for clickable FAT links
- Auto retry for ESI and OS errors in tasks, since django-esi already retries all relevant errors
- Using
SITE_URL
now in the templates instead of{{ request.scheme }}://{{ request.get_host }}
- Minimum requirements:
allianceauth>=3.2.0
Before you update to this version, make sure you have at least Alliance Auth v2.15.1 installed, otherwise, this update will pull in Alliance Auth 3.x unsupervised with breaking changes. (See Alliance Auth 3.0.0 release notes)
- Instructions on how to uninstall
ImicusFAT
after data migration to README
- CSS modernized
- CSS and JS moved to their own bundled HTML templates
- Deprecated
type
attributes removed formstyle
andscript
tags - Minimum requirements:
allianceauth>=2.15.1
allianceauth-app-utils>=1.14.1
unidecode>=1.3.4
python>=3.8
- Missing JS re-added
- Duplicate Key Error during ESI fleet tracking (This time for good ... I hope :-P)
- Explicit
django-esi
dependency fromsetup.cfg
since it's already pulled in byallianceauth
itself - Deprecated
MANIFEST.in
file
- JS template order
- Form for "Manual FAT" re-activated again
- Form for "Manual FAT" is temporarily deactivated since CCP just announced that the
/search
ESI endpoint will be removed tomorrow (probably during downtime) for good, which was used for this feature. Alternatives that would make this feature work as it was until now are currently unavailable. Say "Thank You CCP" ...
- Data migration from ImicusFAT: Workaround for ImicusFAT bug !43 added. It is not a work of art but should mitigate the issue. Thanks to @pvyParts for the idea.
- Use bundled JS provided by AA
- Minimum Requirement
- Alliance Auth >= 2.14.0
- Unused JavaScript
- Apparently, I did it wrong and
get_or_create
was throwing errors. Should be fixed now
- Another attempt to fix the Duplicate Key Error that still happens from time to time. This is - to my analysis - because ESI is not fast enough to handle all the calls between the task runs. So we let Django handle it now, hopefully.
- Duplicate Key error by moving check if character exists to
process_character
function instead ofprocess_fats
function
- Access to character statistics
- More permission fixes for statistics
- JavaScript modernized
- An issue where a user can't see other characters statistics despite having the right permissions
- Test suite for AA 3.x and Django 4
- Switched to
setup.cfg
as config file, sincesetup.py
is deprecated now
- Deprecated settings
- [Compatibility] AA 3.x / Django 4 :: ImportError: cannot import name 'ugettext_lazy' from 'django.utils.translation'
models.TextChoices
refactored for better code readability- Using
path
in URL config instead of soon-to-be removedurl
- Improvements to try/except blocks
- Import from bFAT. bFAT is deprecated since quite some time now and by now everyone who was using it should have updated to a working and supported FAT module.
- JavaScript:
const
instead oflet
where ever appropriate - Minimum requirements
- Alliance Auth v2.9.4
update_esi_fatlinks
task chain improved, so the sub-taskprocess_character
is only fired for new pilots in fleet, not for every pilot
afat_static
template tag to break browser cache for selected CSS and JS files on app update
- Code modernized
- Cleanup for ImicusFAT migration moved to migration command and removed from README (Meaning: No more manual preparation needed when migrating from ImicusFAT to AFAT)
- Unused
DEFAULT_TASK_PRIORITY
setting for tasks - Commented code that's no longer used
- Slugified links with unicode characters in
AFAT_APP_NAME
- DataTables keep their state (Page and number of entries per page) for the current session.
- Minimum requirements
- Python 3.7
- Alliance Auth v2.9.3
- Russian and German translations (We should have it all now ...)
- Russian and German translations
- Month numbers are integers not strings
- Russian translation
- Russian translation (Thanks to -7- [0RIG] Neomad Miromme)
- Spelling in some templates
- Sorting of months in statistics view
- German translation
- TypeError in convert_fats_to_dict() When fleet (name) Is NULL/None (#115)
- User with
manage_afat
permission now have access to the logs as well, as they should have from the beginning
- Activate and Deactivate actions in admin backend for fleet types now throw an error message if they error out for some reason
- Minimum version for
allianceauth-app-utils
set to 1.8.1
- Automatically reload information in fatlink detail view only when the fleet is still tracked/active
- Some checks for object existence improved
- An import from the wrong module
- A possible "division by zero" error in corp statistics
- Basic code coverage test
- Code of Conduct
- GitHub Templates
- Only show characters with FATs in statistics overview
- Sort by month in statistics overview
- Expected parentheses around arrow function argument
- Prevent double submit of forms, to stop multiple manual FAT links from being created if someone double-clicks (or more) on the "Create Link" button
- Next and current month buttons in corp stats
- Error 500 due to non existent EveCorporationInfo objects
- Checked for compatibility with Python 3.9 and Django 3.2
- Admin views are now searchable
- Manual log removed from admin view. This should be migrated by now to the new combined log. If you haven't done so yet, see update instructions for v2.0.0 please
- JS modernized
- FAT link hash creation, to ensure the hash is definitely unique (Not that it wasn't before, but now it is enforced via its DB table field)
- Using Django application registry instead of directly accessing
INSTALLED_APPS
- Using Django messages API (#86)
- Index to
hash
field in AFatLink model (Thanks @ErikKalkoken)
- Time period (year and month select) templates refactored
- FAT link hashes in log are now linked to their respective FAT link details, as long as the FAT link is not deleted yet (Thanks to @ErikKalkoken to let me know how to do so without firing potentially hundreds of queries against the database)
- Reduced load time for all pages incl. admin site (Thanks @ErikKalkoken)
- Button to close your own ESI fleet to more view. It is now available on the Dashboard, in the FAT link list and in the FAT link details view as well. You can only close your own ESI fleets.
- Manual FAT function limited. It is only available when the FAT link has been created within the last 24 hours and has not been re-opened.
- Message templates refactored to make them more maintainable
- Ability to manually add pilots to FAT link has been disabled for ESI tracked FAT links. The reason for this is pretty simple. Since an ESI tracked FAT link is continuously tracking the fleet via ESI, all pilot who have been in said fleet are added automatically. If someone hasn't been added, said someone wasn't in the fleet.
If you haven't updated to the v2 version yet, do so first and do not go straight to this version. Read the update instructions for v2.0.0 please please.
django.db.utils.IntegrityError: (1048, "Column 'log_time' cannot be null")
on log merge.
If you haven't updated to the v2 version yet, do so first and do not go straight to this version. Read the update instructions for v2.0.0 please please.
- Error 500 due to missing
EveAllianceInfo
object in statistics view - Clear content of modal windows when they are closed
- Unique IDs for modals
related_name
to foreign keys in models- Proper log model
- Proper log messages to fatlink detail view and edit actions to differenciate if someone is only viewing or actually editing some details
- Confirmation modal window when closing ESI fleets manually
- Ability to re-open clickable FAT links for a certain time after they have expired.
FAT links can be re-opened only once though (
manage_afat
permissions are needed to re-open FAT links) - Logs view (
log_view
permissions are needed to view the logs)
- Inline JS for DataTables moved to their own files
- Templates restructured
- Proper directory structure
- Proper names
- Links restructured
- Some changes in link names (mostly for ajax calls)
- Link segment order unified
- Function names following a proper naming convention
- Use swagger spec provided by CCP instead of maintaining our own file
- Migration from ImicusFAT now writes into the new AFAT log table
- Migration from bFAT now writes into the new AFAT log table
- Migration from native FAT module now writes into the new AFAT log table
- Wording in modal windows
- Modal windows merged into one file which is loaded conditionally
- Log messages improved
- Manual FAT log deactivated in favor of the new general log
- Forms for FAT link creation now properly using django forms
- Old code for flat lists. Not used anymore and will not be used ever again
If you installed one of the alpha versions, make sure to reset your migrations first! Migrations have been reset during the alpha versions a couple of times.
To do so, run:
python manage.py migrate afat 0017
Once done, proceed with the update as lined out below.
This release introduces a new periodic task, make sure to add it to your local.py
,
besides that, it is the usual steps to update ...
Download and install the new version
pip install -U allianceauth-afat
Add the new task to your local.py
CELERYBEAT_SCHEDULE["afat_logrotate"] = {
"task": "afat.tasks.logrotate",
"schedule": crontab(minute="0", hour="1"),
}
Run static collection and migrations
python manage.py collectstatic
python manage.py migrate
Restart your supervisor.
Finally migrate the Manual FAT log to the new logging table
python manage.py afat_migrate_manual_fat_log
Before you update to this version, make sure you remove all "deleted" data from your tables. To do so, log in to your mysql console and run the following commands:
# de-activate foreign key checks
SET FOREIGN_KEY_CHECKS=0;
# remove all "deleted" FATs
delete from afat_afat where deleted_at is not null;
# remove all "deleted" fat link types
delete from afat_afatlinktype where deleted_at is not null;
# get all fatlink IDs of "deleted" fatlinks as comma separated list and make sure
# to have that in your notepad saved, you need this list for the next comamnds
select group_concat(id) from afat_afatlink where deleted_at is not null;
# now remove everything that is related to those IDs
# make sure to replace "id_list" with the comma separated
# list of IDs from the earlier command
delete from afat_clickafatduration where fleet_id in (id_list);
delete from afat_afat where afatlink_id in (id_list);
delete from afat_afatlink where id in(id_list);
# re-activate foreign key checks
SET FOREIGN_KEY_CHECKS=1;
This step is important before updating, because the "deleted" marker will be lost during migration! If you don't run this step, you'll have all your FATlinks and FATs that were previously "deleted" as active again.
- Soft deletion mechanism we inherited from ImicusFAT. It's more trouble than it's worth and it's not used anyways. So we stick to "delete data when it should be deleted", and not just mark it as deleted and keep it as stale data in the table.
- Migration information for migration from ImicusFAT in README.md file
-
Ability to "close" ESI fat links manually. (Only the FC creating the link has this ability when creating new ESI fat links when he still has registered fleets.)
- Setting to change the application name, in case you want it named something specific
- Info when there are already registered ESI links for the FC and with which characters
- A check for already registered fleets on ESI link creation. If the character already has a fleet registered, and it is hte same fleet, he gets a message. If it is a new fleet, the old fleet will be closed, and the new fleet will be registered.
- An issue with sorting by date in datatables
- Tables look and feel
- Removed the "actions" header
- Added hover effect to all tables
- Added common table style
- EVE/UTC tz handling optimized
- Ability to create ESI fat links on alts, in case the FC has another fleet on one of their alts up and running
- More ESI error handling
- Views imports optimized
- An issue when the FC switched to another fleet. This was not detected properly, and the "old" ESI link was not closed.
- Option to set the default expiry time for clickable FAT links in minutes. If nothing es set, 60 minutes will be assumed as default.
-
Permissions have been completely overhauled and simplified
Name Description Notes basic_access Can access the AFAT module Your line member probably want this permission, so they can see the module and click the FAT links they are given. They also can see their own statistics with this permission. manage_afat Can manage the AFAT module Your Military lead probably should get this permission add_fatlink Can create FAT Links Your regular FC or who ever should be able to add FAT links should have this permission stats_corporation_own Can see own corporation statistics stats_corporation_other Can see statistics of other corporations Please make sure to read the following before updating!
Permissions have been completely redone and simplified. This means, the current permissions will no longer apply after the update. Time to clean them up! In order to do so, run the following commands in exactly this order!
-
Update the software itself:
pip install -u allianceauth-afat
-
Open a django console:
python manage.py shell
-
Remove the modules old permissions:
from django.contrib.auth.models import Permission Permission.objects.filter(content_type__app_label="afat").delete() exit()
-
Run static collection and migrations:
python manage.py collectstatic python manage.py migrate
Keep in mind, you have to set the new permission to the states/groups that previously had permissions.
-
- Deal with invalid user profiles. For example when a user has revoked his/her ESI access.
- Useragent to ESI calls
- Ajax URLs structured
- Internal methods for afat_view renamed to dashboard
- Views modularized
- Dashboard static tables replaced with DataTables which get populated via Ajax calls
- Fleet Edit FAT list table replaced with DataTable
- Statistics now only show alliances and corps when their members have access to the module, not just all anymore
- Missing fleet commander added to ESI FAT links. Now the automatic ESI pull also works when the fleet commander is an alt of the creator
- Length of form fields adjusted
- Hardened the auto ESI pull against possible ESI hiccups, so ESI FAT links are not closed prematurely
- Explanation for the "via Esi" labels in FAT list view
- New "via Esi" label for currently active ESI links
- Prevent user from opening more than 1 ESI fleet
ESI links will now be updated automagically. This means, pilots who join later will still be registered, as long as the FC who created the ESI link is still the actual fleet boss and didn't close or leave the fleet.
- Bootstrap classes in template
- Reducing characters displayed on stats main view to only those with FATs
- 'NoneType' object has no attribute 'character_name' (This happens when the creator of a FAT link for what ever reason lost his main char and prevents the FAT link list from being loaded.)
- couple of tweaks to templates and JS
- show only characters with FAT links in stats main view
- tables tweaked …
- preventing DataTables from getting wider than their parent element
- even/odd styles
- text alignments
- Import scripts for imports from Alliance Auth's FAT module as well as from bFAT and ImicusFAT. These imports can be done initially right after the first install of AFAT. Fiddling around with SQL to import is no linger needed with this.
- Filter to the Fat Links List view. You can now filter for Fleet Type and is a FAT link was created via ESI or not in the FAT links list.
- FAT links information in FAT links list is now loaded via ajax. This means, especially for installations with a large number of FAT links, this page should be loaded considerably faster.
- Minimum required version of Alliance Auth set to 2.8.0
- Support for Django 2
- Added a check to
Clickable FATLinks
to verify whether the character is actually online.
- Workflow improvements for
ESI FATLinks
- Show only chars with recent activity in "Recent Activity" view
- Added Average FATs to the monthly corp stats overview.
- Added "Basic Access" permission. This permission prevents unintended audience from accessing the module.
IMPORTANT:
When updating to this version, you will need to give the state/group that should have
access to the AFAT module the
afat|Alliance Auth AFAT|Can access the Alliance Auth AFAT module
permission.
Without this permission, the user cannot see the link, open any statistics or register
via clickable FATLinks.
To update your existing installation of AFAT, first enable your virtual environment (venv) of your Alliance Auth installation.
pip install -U allianceauth-afat
python manage.py collectstatic
python manage.py migrate
Finally restart your supervisor services for AA
stats
tostatistic
ally
toalliance
corp
tocorporation
char
tocharacter
month/year
toyear/month
(this is to enable us to have yearly statistics for certain views)
- Added a year switch to main statistics view
- Added a year switch to corporation statistics view
- Added a year switch to alliance statistics view
- Changed the fatlink list to be restricted to a year
- Added year switch to fatlink list
- Added manual FAT log to admin page as read only
- Deleted FATs have not been logged
- Marking fatlinks done via ESI as such in fatlink lists
- Filter to the admin backend
- Enable/Disable fleet types in admin view
- Some more information has been added to the admin view
- Better permission handling in templates
- Django 3 compatibility (for AA 2.8.0 - https://gitlab.com/allianceauth/allianceauth/-/issues/1261)
- Minimum required Alliance Auth version
- Fleet edit form
- Permissions to edit and delete fatlinks and fats
- Some more information has been added to the admin view
- Better permission handling in templates
- Django 3 compatibility (for AA 2.8.0 - https://gitlab.com/allianceauth/allianceauth/-/issues/1261)
- Minimum required Alliance Auth version
- Permissions to edit and delete fatlinks and fats
- Templates prepared for Django 3 update in Alliance Auth
- Month navigation to stats detail pages to review older stats
- baseurl from
afat
tofleetactivitytracking
- hard coded links replaced
- an issue with "No Alliance" in stats view
- fleet types are now sorted alphabetically
- Can Only Create ESI Link if Fleet Boss
- Show Clickable Link Only When Still Valid
- Various Formatting Enhancements
- Remaining Flat List Fragments
- ESI FAT Messages
- Various Formatting Enhancements