The Voice Commander module automatically makes voice commands for navigating the entire menu system of your Drupal site, using Web Speech API.
You can choose which menu to work, than just press Ctrl+Alt and start speak. Also, you can turn on voice commands on mobile device.
Now Google's voice recognition service is gaining popularity and may already be comfortable enough to use in Chrome on desktops and mobile devices.
Ease of operation is achieved through the use of voice instead of manual navigation.
Voice commander has no analogues in Drupal world. It works with Web Speech API that already builded in Chrome Browser and and has already begun to develop maintaint of Speech in Safari.
Project: https://www.drupal.org/sandbox/yuriy.kostin/2385113
Git clone command: git clone --branch 7.x-1.x http://git.drupal.org/sandbox/yuriy.kostin/2385113.git voicecommander
PAReview link: http://pareview.sh/pareview/httpgitdrupalorgsandboxyuriykostin2385113git
Manual reviews of other projects:
- https://www.drupal.org/node/2366565#comment-9538131
- https://www.drupal.org/node/2416847#comment-9568637
- https://www.drupal.org/node/2419301#comment-9581815
- https://www.drupal.org/node/2423079#comment-9606037
- https://www.drupal.org/node/2422531#comment-9605973
- https://www.drupal.org/node/2423379#comment-9606165
Comments
Comment #1
yuriy.kostin commentedComment #2
PA robot commentedWe 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 #3
alexander_danilenko commentedThere is no functionality related to error reporting to end-user. For example if command is missing or don't allowed - user can't see any indications or errors on page.
Also there is no command for clearing cache.
Comment #4
andrdrx commentedAdded handlers and set messages for errors, wrong commands or unexpected situations.
Comment #5
yuriy.kostin commentedComment #6
artsakenos commentedHello Yuriy, Yaremiy, Alexandand, a nice contribution indeed, I hope a functionality like this can become quickly available for the Drupal community. At the moment I found many issues during the installation and usage process. My suggestions follow:
Automated Review
⊠ Git default branch is not set, see the documentation on setting a default branch.
Individual user account
☑ Follows the guidelines for individual user accounts.
No duplication
☑ Does not cause module duplication and/or fragmentation
Except the unmantained https://www.drupal.org/project/speech I see no similar solutions available for the community.
Master Branch
✎ Follows the guidelines for master branch. But a default branch is not set up, please check the pareview output.
README.txt/README.md
✎ The content itself is ok and follows the guidelines for in-project documentation and/or the README Template.
Just take care the underlining must everywhere be as long as the title.
Installation / Usage
⊠ I experienced issues during the installation with drush:
Fatal error: Call to undefined function drush_voicecommander_download() in /home/drupalpro/websites/merda.dev/sites/all/modules/custom/voicecommander/drush/voicecommander.drush.inc on line 113After the installation the website warns you constantly:
VoiceCommander: plugin "Annyang" or file "annyang.min.js" is not exist in libraries folder.Instead, once the module is installed I would send a notification to the user to warn him to install the libraries, providing links as support.
Also after having installed the warning remains until a cache clearing is performed.
While using it, it always appear the Allow Deny dialog box, which is annoying, and anyway it doesn’t catch what I say, even selecting all the menu. I am not sure which command list Is available, I would highlight it somewhere, because right now I couldn't perform any command. This was the result for me more or less: http://youtu.be/lu88J5JL8Hw
Project Description
⊠ The title of this issue is wrong, it should be [D7] VoiceCommander instead.
The git command is wrong,
git clone --branch 7.x-1.x yuriy.kostin@git.drupal.org:sandbox/yuriy.kostin/2385113.git voicecommandershould be instead
git clone --branch 7.x-1.x http://git.drupal.org/sandbox/yuriy.kostin/2385113.git voicecommanderAlso, you should provide the pareview link in the issue page to make the review process easier.
in this case:
http://pareview.sh/pareview/httpgitdrupalorgsandboxyuriykostin2385113gitGood Luck with this amazing module!
Comment #7
andrdrx commentedComment #8
yuriy.kostin commentedComment #9
andrdrx commentedHello Andrea and thank you for your review of our first module. We have reviewed your comments and made next fixes and updates;
Comment #10
yuriy.kostin commentedComment #11
yuriy.kostin commentedComment #12
mavimo commentedvoicecommander.modulecomment refer to Colorbox moduletypeof (annyang) !== 'undefined'can beundefined !== annyang$('.my-selector', context).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.
This review uses the Project Application Review Template.
PS: nice work!
Comment #13
yuriy.kostin commentedComment #14
yuriy.kostin commentedComment #15
yuriy.kostin commentedComment #16
joachim commentedThis looks really cool!
I had a few teething problems though:
- Chrome asks for my permission to use the microphone every single time I held down CTRL+ALT. This makes it really hard to use.
- None of my commands were recognized at first. It's not clear from the readme what sort of things I can say. Some examples would be good, eg: 'Drupal Content Types', 'Drupal Modules', etc.
On to a code review:
There are a few mentions of another module, such as:
Repeating the name of the function doesn't count as documentation. You should state what the function does:
You also need to document the @params and @return.
Form builder functions have standard params which are missing here.
Providing a drush command is a very nice touch, though it does this:
The README should have instructions on where to get the library from.
> Select menu for commands *(Management menu use default)
I don't understand what this UI text means at all.
The module description in the info is rather long -- some of that should go in a hook_help().
Not sure what this is for...
If you want to provide a cache clear command, would the admin_menu menu item not do?
BTW, please don't tag issues with random keywords! Read the guidelines that are linked on the tag field.
Comment #17
yuriy.kostin commentedHi Marco and Joachim, thank you for your review comments and your time.
Answers on Joachim questions:
About “Chrome asks for my permission”
- Chrome will be asking for your permission to use the microphone every single time while you are using http:// instead https://. If you're site is using ssl permission to use the mic will be ask once. This is non-secure protocol issue. Also we have already described this behavior in readme file and module description/
About “None of my commands were recognized”
You must say menu item titles as navigation commands. For example:
- you have Main Menu on youre site, and "Home" item in this menu.
- you have choosed Main Menu on VoiceCommander settings page.
- in this way you can just say "Home" and VoiceCommander will redirect you to Home Page.
About Drush commands
At first you need enable module:
$ drush en voicecommander -yAnd then use command for install Annyang plugin:
$ drush vcComment #18
joachim commented> Also we have already described this behavior in readme file and module description
I eventually found that, but it's nested in the README several folders down. Would be better in the top-level README.
Comment #19
yuriy.kostin commentedComment #20
yuriy.kostin commentedComment #21
klausiRemoving review bonus tag, you have not done all manual reviews, you just posted the output of an automated review tool. Make sure to read through the source code of the other projects, as requested on the review bonus page.
Comment #22
joachim commentedThis is breaking normal JS behaviour on my development site:
- I am working on https://www.drupal.org/project/reference_option_limit, and with VC enabled the JS on the field widget only works the first time.
- Module Filter doesn't work at all
Comment #23
andrdrx commentedHello, Joachim and thank you for your time to view our project. We figured out the reason of error and have fixed it. For both cases described by you it was same root cause.
Comment #24
yuriy.kostin commentedComment #25
yuriy.kostin commentedComment #26
klausimanual review:
Removing review bonus tag, you can add it again if you have done another 3 reviews of other projects.
Comment #27
klausiJS: window.href uses / instead of Drupal.basePath or whatever it is called.
Comment #28
naveenvalechaManual Review Review of the 7.x-1.x branch (commit dedc4e7):
voicecommander.module : function _voicecommander_cc_all : drupal_flush_all_caches() is very heavy operation.As I have seen that you are calling from the voicecomamnder.js file.For long term, I would suggest please specify about it on the project page and also add the comments in the code.
Do we need the menu type "MENU_NORMAL_ITEM" . Please add a comment.
Also I suggest that menu path would be 'admin/config/....' instead of "cc_all" menu item path to . Its just suggestion.
2)
use Drupal.settings.basePath instead of / as @klausi addressed above.
3)
voicecommander.admin.inc function voicecommander_settings_form : Spelling issue, "administartor".
Security Issues :
1)
voicecommander.module function _voicecommander_base_menu_recursive: This function has an access by pass problem.So, users may see node titles and other menu entries that that may not have access to, which is a security problem. You need to call menu_link_load() on each item and then check access. This step will also translate the menu title.
Similarly in the _voicecommander_menus_recursive function.
2)
voicecommander.admin.inc function voicecommander_settings_form : The menu_get_menus function is displaying the Menus in the select list. This is displaying all the menus here.So this function will also display the custom menus to the user with "access voice commander settings" can see all the menus type even the user does not have "administer menu settings" permissions which seems a light security issue, so need some access check here as well.
Edit : Addressed by @Klausi to me on IRC. Thanks :)
3)
The path is also vulnerable to CSRF exploits.so either needs a confirmation form / security token in the url.See http://epiqo.com/en/all-your-pants-are-danger-csrf-explained for more information.
Comment #29
klausiI don't think it is necessary to call menu_link_load() on every menu item, the API function should return the #access key for each item which indicates whether the user is allowed to see the item or not.
Comment #30
klausiAs I discussed with Naveen on IRC another security issue is the cc_all path. This is vulnerable to CSRF exploits because you are performing write operations without a confirmation form or a security token in the URL. See http://epiqo.com/en/all-your-pants-are-danger-csrf-explained and https://docs.acquia.com/articles/protecting-your-drupal-module-against-c...
Comment #31
kevinus commentedHello Naveenvalecha and Klausi,
About:
Function menu_tree_all_data() is already have "security check". Look at include/menu.inc (line 1150 and line 1355).
I see no reason to double check for access.
Same as for
Comment #32
yuriy.kostin commentedHi Klausi and Naveen,
Thank of review and your time.
About Klausi issues:
1. Fixed
2. Fixed
JS: Fixed (used Drupal.settings.basePath instead of / a)
About Naveen issues: Manual Review is all fixed
Security Issues :
1. See Kevinus answer https://www.drupal.org/node/2391837#comment-9590601
2. See Kevinus answer https://www.drupal.org/node/2391837#comment-9590601
3. Fixed
Comment #33
yuriy.kostin commentedComment #34
yuriy.kostin commentedComment #35
yuriy.kostin commentedComment #36
naveenvalechaReview of the 7.x-1.x branch (commit ba3d08a)
$_GET['destination'].$_GET is fine but drupal_get_query_parameters function is preferable.The second page argument is not using in the callback function ? If not then simply remove.
Waiting just for my last point.Otherwise RTBC :) Thanks for your help in reviewing other project applications and patience in the Project applications review process.
Comment #37
klausiRepeating myself from the last review:
+ the things Naveen mentioned. But that are not application blockers, otherwise looks RTBC to me.
Assigning to Dave Reid as he might have time to take a final look at this.
Comment #38
yuriy.kostin commentedHi Naveen and Klaus,
All your issues of comments #36 and #37 are fixed.
Thank you for your help with review module and your time!
Comment #39
klausino objections for more than a week, so ...
Thanks for your contribution, yuriy.kostin!
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 #40
yuriy.kostin commentedThanks to all who's helped review of this module!