ryan Posted August 12, 2022 Share Posted August 12, 2022 I hope that you all are having a great week! This week I've been working on some updates to the User Activity module and have released version 5 in the ProDevTools board. This version focuses on adding several new requested features, including the following: New options to also detect when you (yourself) are editing the same page in 2+ windows and when you have modified a page in a different window. These are the “collide-self” and “modify-self” options in module config. The module now keeps track of what fields have changed in the page editor and stores them with the activity so that they can be shown in the activity viewer or in page edit alerts. When a page has been modified that is also open to another user it now presents them with a dialog giving the option to reload the page or keep editing. A new “lock” option has been added that blocks a user from editing a page when it is already being edited by another. This is an alternative to just warning them with a pop-up, and it literally prevents them from being able to open the page in the page editor. This can be enabled in the module config and can also be optionally disabled for superuser. A new configuration setting has been added that lets you configure the refresh time in the page list (previously it was not editable). Added feature to limit the “you've been idle for awhile…” to the page editor only. When enabled, idle is still tracked for other admin processes, but idle alerts don't appear. Improvements to ProcessUserActivity (the included activity viewer module), including: 1) visible vs. hidden states are now more obvious. 2) Changes made in page editor are now included in the activity information. 3) The ajax drop-down navigation summary has been improved to include more information. Large portions of the module have been refactored into separate classes for better maintainability and other related improvements. This week there have also been a few commits to the core, but mostly just small fixes and phpdoc improvements, so not enough to write about here, but there likely will be next week. Thanks for reading and have a great weekend! 17 Link to comment Share on other sites More sharing options...
adrian Posted August 13, 2022 Share Posted August 13, 2022 @ryan - is there any chance of adding support for using this module on custom frontend forms? Maybe it's already supported somehow, but my initial limited experiments didn't seem to get me very far. The idea is that you don't want staff editing a user profile in the admin at the same time the user is editing it themselves via their frontend interface. Thanks! Link to comment Share on other sites More sharing options...
bernhard Posted August 15, 2022 Share Posted August 15, 2022 On 8/13/2022 at 7:58 PM, adrian said: @ryan - is there any chance of adding support for using this module on custom frontend forms? Maybe it's already supported somehow, but my initial limited experiments didn't seem to get me very far. The idea is that you don't want staff editing a user profile in the admin at the same time the user is editing it themselves via their frontend interface. Thanks! Extending on this... Would it be possible to get the API for this into the core? So that others can build modules that benefit from this feature? Like page builders for example? Hope I'm not asking too much here, but just wanted to say that this could be a quite helpful feature for my upcoming page builder module... Though I'm really not sure, as I don't know the module at all and how it works, so take this with caution ? Maybe we could have the API in the core for others to build on top of it (like adrian with his forms and me with my page builder) and for everybody just wanting a plug and play "page-edit-notifications" there would be the pro module? Link to comment Share on other sites More sharing options...
adrian Posted August 23, 2022 Share Posted August 23, 2022 @ryan - just realized that I possibly wasn't very clear above. I understand that frontend users are tracked and they appear in the Access > User Activity list. What I am looking to do it tie their activity on a specified front-end URL (basically a custom profile editing form) to their user page in the admin, so that if admin editors go the user's page in the admin, they'll see the "current being edited by" warning. Hope that makes more sense. Thanks! Link to comment Share on other sites More sharing options...
ryan Posted August 27, 2022 Author Share Posted August 27, 2022 @adrian UserActivity doesn't use ajax on the front-end, so there's nothing to ping to continuously check and verify the activity is still current. Though you still could use it in a non-ajax context, or you could add your own ajax to do it. The reason UserActivity doesn't use ajax on the front-end is just a matter of security... avoiding a place for nuisance garbage to be submitted. It hides its ajax endpoint behind the admin and requires a logged-in user for that endpoint to save an activity. You can use UserActivity's API to save activities on your own though, here's how: $ua = $modules->get('UserActivity'); $activity = $page->url; // i.e. /members/profile-edit/ $ua->saveUserActivity($user, $activity); Then when you want to check if that activity is active, perhaps with a hook into something in ProcessUser or ProcessPageEdit, or even somewhere on your front-end... $ua = $modules->get('UserActivity'); $u = $users->get('adrian'); // user object, name or id $items = $ua->findUserActivity($u, [ 'equals' => '/members/profile-edit/', 'seconds' => 60, // in last n seconds (default=60) ]); if(count($items)) { $this->warning("User may be editing their profile right now"); } Link to comment Share on other sites More sharing options...
adrian Posted August 28, 2022 Share Posted August 28, 2022 Hi @ryan, That is kinda what I tried already. From my testing, the first part of that code doesn't actually trigger the ajax updates. Of course the initial loading of the front end profile is logged by UserActivity by default anyway, so I don't need that for initial testing of the alert in the admin, but without it, it's not actually useful in the real world. Any ideas why the ajax wouldn't be working? The second part works as a notifier, but to be useful I think it really needs to trigger the same dialog that UserActivity normally displays. Unfortunately the core PW warning banner doesn't really work for this because if there is more than one alert, the rest are collapsed and editors aren't going to expand it to see the "User may be editing their profile right now" message. How can we trigger the user activity alert instead? Thanks! Link to comment Share on other sites More sharing options...
adrian Posted August 28, 2022 Share Posted August 28, 2022 Sorry, seems like I need to make the ajax call to saveUserActivity() myself. That seems to be working and updating status as expected. Now it's really just a matter of triggering that UserActivity popup alert instead of the PW warning. And of course have it triggered when an ajax triggered saveUserActivity() call is made from the frontend. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now