The module records a visitors session and lets the administrator (or who has access) to playback that session.
You can choose to filter recording on user roles, url, php, country, language, screen size of the visitor.
I have searched for module that does something similiar but could not find anything, the recorder module (https://www.drupal.org/project/recorder) records usage, but only page load etc. which is more similiar to Google Analytics but for backend. User records is more similiar to mouseflow.com
A video on how to setup and use the module can be found here:
https://www.youtube.com/watch?v=kwgJ328UYmo
The project page can be found here:
https://www.drupal.org/sandbox/marcus_johansson/2370893
Git Clone command is:
git clone --branch 7.x-1.x http://git.drupal.org/sandbox/Marcus_Johansson/2370893.git user_recording
Reviews of other projects:
https://www.drupal.org/node/2360537#comment-9345617
https://www.drupal.org/node/2373267#comment-9333357
https://www.drupal.org/node/2367301#comment-9340343
https://www.drupal.org/node/2275959#comment-9334547
https://www.drupal.org/node/2365671#comment-9338489
https://www.drupal.org/node/2411721#comment-9554759
https://www.drupal.org/node/2348143#comment-9555115
https://www.drupal.org/node/2374429#comment-9555217
| Comment | File | Size | Author |
|---|---|---|---|
| #12 | coder-results.txt | 1.52 KB | klausi |
Comments
Comment #1
PA robot commentedThere are some errors reported by automated review tools, did you already check them? See http://pareview.sh/pareview/httpgitdrupalorgsandboxMarcus_Johansson23708...
We are currently quite busy with all the project applications and we prefer projects with a review bonus. Please help reviewing and put yourself on the high priority list, then we will take a look at your project right away :-)
Also, you should get your friends, colleagues or other community members involved to review this application. Let them go through the review checklist and post a comment that sets this issue to "needs work" (they found some problems with the project) or "reviewed & tested by the community" (they found no major flaws).
I'm a robot and this is an automated message from Project Applications Scraper.
Comment #2
marcus_johansson commentedI fixed all the errors reported by the automated review tools except one - user_recording.min.js is supposed to be an obfuscated version of user_recording.js. So this issue exists by design.
FILE: /var/www/drupal-7-pareview/pareview_temp/user_recording.min.js
--------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------
1 | WARNING | File appears to be minified and cannot be processed
Comment #3
marcus_johansson commentedComment #4
k0teg commentedAutomated Review
Review of the 7.x-1.x branch (commit 9539044):
This automated report was generated with PAReview.sh, your friendly project application review script. You can also use the online version to check your project. You have to get a review bonus to get a review from me.
Source: http://pareview.sh/ - PAReview.sh online service
Manual Review
The starred items (*) are fairly big issues and warrant going back to Needs Work. Items marked with a plus sign (+) are important and should be addressed before a stable project release. The rest of the comments in the code walkthrough are recommendations.
If added, please don't remove the security tag, we keep that for statistics and to show examples of security problems.
This review uses the Project Application Review Template.
Comment #5
k0teg commentedComment #6
marcus_johansson commentedThank you so much for your review k0teg. It was really good things you pointed out that I had missed/did not know about. I have corrected all of them to fit Drupal standards now and will open up the application again for review.
Some things noted though that I did different from your suggestions:
I'm guessing this function was drupal_get_query_parameters() you were referring to? It's fixed now with that function.
The problem with the locale function is that it's missing some name standards that's in the GeoIP database. But I didn't go so far as to look into the GeoIP module that I'm requiring - it had the function I was looking for, so now I'm using _geoip_country_values() from that module to fill the select input instead of a hardcoded file.
Thank you once again!
Comment #7
marcus_johansson commentedComment #8
Eugene Fidelin commentedFor better readability, i would suggest replace
with
drupal_exit() should be used instead of exit, more information is here https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_...
Duplicate array key (at line 32),
Duplicate array key (at line 139)
Duplicate array key (at line 157)
Unterminated statement at line 103
Constructor call without new (at line 70)
I would suggest rewrite this line in this way:
Comment #9
Swarnendu-Dutta commentedThanks for your contribution.
The module looks interesting and it does an awesome job.
Please address the issues mentioned by Eugene Fidelin.
echo drupal_json_output(array('status' => 'ok'));Why are you using echo before the drupal_json_output which returns the data in JSON format.
Comment #10
marcus_johansson commentedThank you for reviewing the code. I fixed all bugs that you both mentioned and also cleaned up the code as suggested by Eugene Fidelin.
Comment #11
marcus_johansson commentedComment #12
klausiReview of the 7.x-1.x branch (commit 75aa3bc):
This automated report was generated with PAReview.sh, your friendly project application review script. You can also use the online version to check your project. You have to get a review bonus to get a review from me.
manual review:
The review bonus tag is already removed, you can add it again if you did another 3 reviews of other projects.
Comment #13
klausimanual review continued:
<script><lert('XSS');</script>as use agent then you will get a nasty javascript popup on this page. You need to sanitize all user provided text before printing, make sure to read https://www.drupal.org/node/28984 again.Comment #14
marcus_johansson commentedHi Klausi,
Thank you so much for your review, you pointed out very important things, especially the PHP security flaw and the XSS exploits.
So for each issue:
Thanks once again for you review, I will do some more reviews to win back the bonus tag.
Comment #15
marcus_johansson commentedComment #16
marcus_johansson commentedComment #17
marcus_johansson commentedComment #18
marcus_johansson commentedAdded 3 more review to the 5 I had, adding PAReview: review bonus again. Hope that's ok.
Comment #19
naveenvalechaCongrats! You are near RTBC :) . Just few nitpicks
Manual Review :
you can also add more add on functions under it.and please also change where are u calling these.After these you should call them like
Drupal.user_recording.ur_make_id();instead ofur_make_id();As the GeoIP module has soft dependency.So I would suggest you to update this message a little.
The hook_menu type "MENU_NORMAL_ITEM" is default so we can easily remove it.
This menu path has direct access callback to true.The operation in function user_recording_track is not too much expensive that will leads to DOS.So I think it needs more experianced reviewers eyes.What they reckon on this ?
check_plain($row->id),This is not a user provided input.check_plain is not needed here.Only pass those parameters that are needed in query.
Comment #20
klausi@naveenvalecha:
2) Writing verbose Javascript with multiple assignment lines is fine - JS minifiers will do the hard work for you anyway and more verbose code is easier to maintain.
9) including the type explicitly does not hurt and makes it more clear what the code is doing, so this is fine as well.
10) Well that page callback needs to accessible by any user, so that the recorded data can be tracked, right?
Comment #21
marcus_johansson commentedThank you both too naveenvalecha & klausi for your feedback. I'll work on the issues.
Regarding issue 10 naveenvalecha is correct - since you can choose which roles should be tracked in the settings, these roles should also be honored here with a function connected to access callback or with a check when the page is constructed. Right now anyone in theory could spoof post data even if they do not belong to a role that should be tracked. In theory someone could set that they only wants to track admin users for instance.
Comment #22
marcus_johansson commented@naveenvalecha: Thanks again, I fixed most of the notes you had including 10 since it was a real problem. 2 and 9 I skipped since they where ok according to klausi.
The two notes I did not fix was regarding cookies (notes 4 and 5) - I do understand that cookies can be edited and thus should be treated as malicious data (all the data should actually be treated this way since anyone could make a false post). So this data is only outputted on row 56 of user_recording_list.inc:
l($row->user_id, 'admin/reports/user_recording/' . $row->user_id),Since it's using l without the #html option set to true, it is already going through check_plain() before being outputted.
Comment #23
klausimanual review:
But otherwise looks RTBC to me.
Assigning to heddn as he might have time to take a final look at this.
Comment #24
klausino objections for more than a week, so ...
Thanks for your contribution, Marcus_Johansson!
I updated your account so you can promote this to a full project and also create new projects as either a sandbox or a "full" project.
Here are some recommended readings to help with excellent maintainership:
You can find lots more contributors chatting on IRC in #drupal-contribute. So, come hang out and stay involved!
Thanks, also, for your patience with the review process. Anyone is welcome to participate in the review process. Please consider reviewing other projects that are pending review. I encourage you to learn more about that process and join the group of reviewers.
Thanks to the dedicated reviewer(s) as well.
Comment #26
avpaderno