1.A detailed description :
dSero Anti AdBlock for Google AdSense is a Drupal module that enabled dSero Anti AdBlock and Ad Recovery service for Drupal sites (see more at http://www.dsero.com).
We have large number of WordPress installations (http://wordpress.org/extend/plugins/dsero-anti-adblock-for-google-adsense/) and it is high time that Drupal publishers will enjoy our service as well:

2. Why it's differnet
We aware of the following projects:
1) http://drupal.org/project/simplead_block: this is not an AdBlock related project, but AdSense integration solution.
2) http://drupal.org/project/ad_blockers_detector: this project is not maintained for two years, and it seems to take an aggressive approach (preventing using the site w/ AdBlock, while we present high quality ads in the empty placements).

3. A link to the project page: http://drupal.org/sandbox/dSero/1804756

4. A direct link to your git repository: dSero@git.drupal.org:sandbox/dSero/1804756.git

5. Drupal 7 module

6. We have a working examples for this project: http://drupal7.dsero.com for Drupal 7

7. Reviews of other projects:
http://drupal.org/node/1811646#comment-6597608
http://drupal.org/node/1775964#comment-6597812
http://drupal.org/node/1797090#comment-6597864

8. Another 3 Reviews of other projects:
http://drupal.org/node/1775282#comment-6614152
http://drupal.org/node/1720336#comment-6614220
http://drupal.org/node/1711932#comment-6614460

9. Another 3 Reviews of other projects:
http://drupal.org/node/1815518#comment-6623638 + http://drupal.org/node/1815518#comment-6623866
http://drupal.org/node/1808474#comment-6623912
http://drupal.org/node/1793098#comment-6624008

10. Another 3 Reviews of other projects:
http://drupal.org/node/1789676#comment-6627380
http://drupal.org/node/1740956#comment-6627422 + http://drupal.org/node/1740956#comment-6627434
http://drupal.org/node/1637744#comment-6627450

CommentFileSizeAuthor
#24 drupalcs-result.txt819 bytesklausi

Comments

jibus’s picture

Status: Needs review » Needs work

Hello ! =)

Manually review of your module.

I am not an expert, below is what i found:

- You have only a master branch. You have to create a new branch according to the Drupal version of your module (here, 7.x-1.x), then remove the master branch. See http://drupal.org/node/1659588 for more informations.
- You must always end each file with a new line http://drupal.org/coding-standards
- Do not use indent tabs. Indents must be 2 spaces. Also, you have to remove whitespaces at the end of each line of your code.
- Remove CVS $Id tag, there are not required any more
- Juste a notice: i am confused about the name of your module, it this dSero or dsero_anti_adblock_for_google_adsense ? Maybe, you need to rename your files according to the name of your project.
- You should use hook_init() instead of hook_install() for adding your script.
- Why there is an standalone php file ? I can't see the link between your module file and this php file.
- Line 212 & 216, i think that function_exists() is not required here: drupal_set_html_head() and drupal_add_js() are core functions.
- Secund notice: const is not required in Drupal 7 for constants (but it is in Drupal 8).
- You could use drupal_json_decode() instead of json_decode(). Same, for urlencode().
- I think you should separe the admin part from dsero.module into a new file like dsero.admin.inc
- I have the impression that the user can decide on which block ads appears, but the js script is added on all pages.

I run also an automated test which reveals some of the errors i reported.

Hope that helps :)

dSero’s picture

Status: Needs work » Needs review

Thank you Jibus for the great and helpful code review,

You can find bellow the fixes and comments when needed,

- You have only a master branch. You have to create a new branch according to the Drupal version of your module (here, 7.x-1.x), then remove the master branch. See http://drupal.org/node/1659588 for more informations.
RESPONSE: Fixed

- You must always end each file with a new line http://drupal.org/coding-standards
RESPONSE: Fixed

- Do not use indent tabs. Indents must be 2 spaces. Also, you have to remove whitespaces at the end of each line of your code.
RESPONSE: Fixed

- Remove CVS $Id tag, there are not required any more
RESPONSE: Fixed

- Juste a notice: i am confused about the name of your module, it this dSero or dsero_anti_adblock_for_google_adsense ? Maybe, you need to rename your files according to the name of your project.
RESPONSE: Fixed

- You should use hook_init() instead of hook_install() for adding your script.
RESPONSE: We selected hook_install by purpose, since it's an initial task that we want to happen once when the user installs the plugin

- Why there is an standalone php file ? I can't see the link between your module file and this php file.
RESPONSE: Fixed. You are right. This file was attached by mistake

- Line 212 & 216, i think that function_exists() is not required here: drupal_set_html_head() and drupal_add_js() are core functions.
RESPONSE: We used this to support both Drupal 6 and Drupal 7 using the same code and avoid code duplication.

- Second notice: const is not required in Drupal 7 for constants (but it is in Drupal 8).
RESPONSE: Therefore its seems like a good idea to keep them, so migration to Drupal 8 will be easier

- You could use drupal_json_decode() instead of json_decode(). Same, for urlencode().
RESPONSE: drupal_urlencode is not supported in Drupal 7 (http://drupal.org/node/1231848). In order to support Drupal 6 as well, we prefer to keep using json_decode

- I think you should separe the admin part from dsero.module into a new file like dsero.admin.inc
RESPONSE: The admin section accounts to 230 lines out of 240, so we not sure it will be a great help separating the files into two. Please let us know if it is critical.

- I have the impression that the user can decide on which block ads appears, but the js script is added on all pages.
RESPONSE: No. This is not a current feature, but we indeed will consider it to our future versions.

- I run also an automated test which reveals some of the errors i reported.
RESPONSE: We fixed all issues raised by http://ventral.org/pareview/httpgitdrupalorgsandboxdsero1804756git

Thank you again for your time and helpful comments

cubeinspire’s picture

Status: Needs work » Needs review

Hi,

I'm looking at the code and I see the following:

1. You added functions inside the .info file. Those functions should go inside .module or .install files

2. When you define a class the file should be referenced on the .info file

3. On line 154 of .module the title should be inside the t() function

4. You are executing code directly on the module file, from line 234 to the end of the file. I've worked with some modules until now and I've never seen this. I'm quite sure you can find hooks to execute that code at the right moment.

5. line 236. drupal_set_html_head is a Drupal 6 function.
Your module is Drupal 7, do you need to test if that function exists ?

I guess parts of this modules are the same as in the Wordpress module and still need to be adapted.

Nice module by the way.

cubeinspire’s picture

Status: Needs review » Needs work

forgot to change status

dSero’s picture

Thank you Sergio for your time the helpful comments

See comments bellow:

1. You added functions inside the .info file. Those functions should go inside .module or .install files

RESPONSE: Fixed.

2. When you define a class the file should be referenced on the .info file

RESPONSE: Fixed. We separated the class to a new file and made the reference

3. On line 154 of .module the title should be inside the t() function

RESPONSE: Fixed. The right function to use in these cases is get_t() (see http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/get_t/7)

4. You are executing code directly on the module file, from line 234 to the end of the file. I've worked with some modules until now and I've never seen this. I'm quite sure you can find hooks to execute that code at the right moment.

RESPONSE: Fixed. It seems that the right method to use is hook_init() to solve this issue.

5. line 236. drupal_set_html_head is a Drupal 6 function.
Your module is Drupal 7, do you need to test if that function exists ?

RESPONSE: Fixed.

I guess parts of this modules are the same as in the Wordpress module and still need to be adapted.

Nice module by the way.

RESPONSE: Thank you :-)

FINAL RESPONSE: Verified again with http://git.drupal.org/sandbox/dSero/1804756.git

Thank you again,

Moshe Kaplan

dSero’s picture

In the meantime the module is available for download from http://dsero.com (direct link: http://www.dsero.com/dsero_anti_adblock_for_google_adsense-7.x-1.0.zip).

I'll be glad for you review to make it an official drupal.org module

klausi’s picture

We are currently quite busy with all the project applications and I can only review projects with a review bonus. Please help me reviewing and I'll take a look at your project right away :-)

dSero’s picture

Thank you klausi,

Please find bellow 3 cases I took care of:
http://drupal.org/node/1811646#comment-6597608
http://drupal.org/node/1775964#comment-6597812
http://drupal.org/node/1797090#comment-6597864

Hope for a quick review,
Moshe Kaplan

cubeinspire’s picture

Hi dSero, you should add a PAReview: review bonus tag if you apply for a review bonus. Otherwise the administrator won't find your issue.
You can read again the review bonus process for any question regarding the process:
http://drupal.org/node/1410826

dSero’s picture

Issue tags: +PAreview: review bonus

Thank you Sergio,

It took me ages to find the tag location at the bottom of this page...

Thank you again,
Moshe

cubeinspire’s picture

Status: Needs work » Needs review

1. Find the one on that doesn't belong to this list:

  • Dashboard (View and customize your dashboard.)
  • Content (Administer content and comments.)
  • Structure (Administer blocks, content types, menus, etc.)
  • Appearance (Select and configure your themes.)
  • People (Manage user accounts, roles, and permissions.)
  • Modules (Extend site functionality.)
  • Configuration (Administer settings.)
  • dSero (View AdBlock Analytics and enable dSero Ad Recovery.)
  • Reports (View reports, updates, and errors.)
  • Help

I think that it is too intrusive to put this module as a root item of the administration menu.
Imagine that everyone put its own modules at the root level...
I'm not sure if this can be a reason to block the release process but in any case I personnally found that quite annoying. Please, can you put this link a more adapted place like as child of configuration root item ?

2. Line 145. dsero_anti_adblock_for_google_adsense_get_dashboard_path()
This is even more intrusive than the previous one and I think this requires modifications.
This function sends the administrator email address as a $_GET param to an external website without its consent.
This is something I personally don't want to see on a GPL free CMS... there are a lot of privative software on the market already.
Why don't add a secured Drupal form with a submit button instead ?

Beside that the code is ok, it follows the Drupal standards.

cubeinspire’s picture

Status: Needs review » Needs work

changing status

iwhitcomb’s picture

Status: Needs review » Needs work

Line 42, 92
drupal_http_request() is the preferred method over file_get_contents()

Also, I'm not sure I understand the reason behind using the DseroCache class to store all of the variables and constants.

dSero’s picture

Status: Needs work » Needs review

Dear Ian,

Thank you for your quick reply.

1. Line 42, 92
drupal_http_request() is the preferred method over file_get_contents()
RESPONSE: Fixed. Thank you for noticing me about it.

2. Also, I'm not sure I understand the reason behind using the DseroCache class to store all of the variables and constants.
RESPONSE: It's just a common way to store everything in one place to keep the used constants and variables together.

3. Finally I verified again using the automated test that everything is okay: http://ventral.org/pareview/httpgitdrupalorgsandboxdsero1804756git

Thank you again,
Moshe

cubeinspire’s picture

Hi Moshe,

You have not answered to my review on #11.
What is your opinion about those the two points ?

cubeinspire’s picture

Status: Needs review » Needs work
Issue tags: +PAReview: GPL Issue

#11: You associate the email address of the administrator with a hashed key and store it at dSero database automatically without any consent from the user. That's a privacy violation !

If this is not happening, can you give a proof of that ?

If you see other modules that work with 3th platforms as Mollom or Google Analytics, the user has to go the the main platform and give his email address to obtain the API key then introduce it on his module configuration page.

They don't use the CMS API to send your personal data without consent.
I know this is very tempting, but please don't.

What you do here is not legal on 90% of countries...
Changing status and added tag.

dSero’s picture

Status: Needs work » Needs review

Sorry Sergio, I didn't notice # 11, thanks for noticing me

Thank you for the review. Actually we did it in a similar way at WordPress, and I had no wrong intentions.

1. Regarding the link location, I have found several other examples for this (actually I copied it...).
Since this the main management of the module and people see there their AdBlock analytics and revenues, I believe it should be noticeable and not hidden as a one time configuration modules.

2. Line 145. dsero_anti_adblock_for_google_adsense_get_dashboard_path()
Please notice that we pass this parameter as a # and not as ?:
http://mds.dsero.com/adblock-report.html#p=" . DseroCache::$sitePrivateCode . $email_param

That mean that as long as the user does not submit their email, it does not get to our servers, but remains in the client (the URL part after the # is not sent to the web server according to the HTTP protocol).
It's there to make it easier for the user to submit their email if they decide to do so (since they want to activate the Ad Recovery and get money).

Thanks again,
Moshe

cubeinspire’s picture

Concerning the # param.

Officially this is meant to stay on client side that's TRUE....

BUT: your iframe is executing a function called qs() that parses the url params (also the #) and send it with an Ajax call to a php script called adblocker.statistics.php !
With this code you are giving yourself the temptation to store private information and it's as easy as adding this line on your javascript file (hosted outside of drupal repository) :
data.e = qsParm['e'];

See loadPage() function line 30 of js/adblock-report.js

1. From my point of view sending private information as URL params is a very bad practice.
2. I would never use a module that send my information away without asking me.
3. The basic philosophy behind GNU/GPL project is to keep software free and fight against privative software, which between other practices, stores users information without permission.
4. Drupal has a grate Form API that can build the form you show inside that iframe without risk of sending the administrator email to an external server.

This is the script on your server that receives the # params:
adblocker.statistics.php

If you have no plans to store administration emails, why don't add this form insde the drupal module without calling an iframe ?

Concerning the menu item on the tree root

I don't think this is a reason to block the review of this module.
I just think is a wrong choice for your project as people usually like to have the items in a good semantic order.

Concerning Wordpress

Wordpress has no validation for contributed plugins/themes submissions and is quite common to find bugs, intrusive code, base64 encrypted code and many other surprises inside...

cubeinspire’s picture

Status: Needs review » Needs work

I'm asking to a git administrator what should be done on this case.
I think my task is done here as I analysed the code and pointed the facts so I will stop following this issue and go to other projects so I don't block this process more.

As you have a review bonus she/he should answer to this point.

Regards,
Sergio

dSero’s picture

Status: Needs work » Reviewed & tested by the community

Hi Sergio,

Thank you,
Regarding the # in order to avoid further issues we decided to remove this call to accelerate the application process.

Of course we validated it with the automatic process.

Moshe

cubeinspire’s picture

I understand you are really impatient to validate your work but please don't set the RTBC status by your own.

At comment #17 point 2 there was an obvious try to hide the way your code works.

Looking at the JS file that this module loads inside the iframe we can see that you are parsing the # params and sending values (the administrator email address?) to your server without asking first. See comment #18

You have a PAReview: review bonus and I've sent an email to a git administrator so he can check your module and decide by himself.

If it was my decision I wouldn't approve this module without removing the iframe and moving the module from the admin menu root level.

dSero’s picture

Status: Reviewed & tested by the community » Needs review

Dear Sergio,

Thank you again for your review,
I recommend you to go over our javascript again and see that the only thing that we parse from the # param and send to the servers is the dSero SSO code, that is not connected to the a given user and does not include the email (this is required to make sure that no one else is exposed to the sites AdBlock Analytics).
The email is used only as a hint for the email textbox, and it's only the drupal user's decision if he should submit it or not.

We appreciate our users privacy, and if they choose to use only the AdBlock Analytics, they can do so without submitting any email or other identification. If they choose to use our Ad Recovery, we need a documented approval for that, and submitting an email address is a legitimate way.

Actually, I see your comment very rude, as you point on us, without carefully reading the code.

Regarding #20, I removed the email hint from our code, since I prefer to avoid minor functionality from the Anti AdBlock Drupal version, rather than arguing in pointless arguments.

We could indeed avoid using IFRAME, but probably it will be in favor of a link of an external report (as we are not fans of code duplication).

Best Regards,
Moshe

cubeinspire’s picture

Dear Moshe,

Your code is not the problem here.
I reviewed this project three times and I'm just trying to advice you the best that I can.

I don't think I would be the only person that will find aggressive to discover that the User1 email is sent using an iframe and parsed with a js code without the user consent.

This could not only be disappointing for some users, but also become a legal problem to your company.

As said before, is my advice.

Regards,

Sergio

klausi’s picture

Status: Needs review » Needs work
Issue tags: -PAReview: GPL Issue, -PAreview: review bonus
StatusFileSize
new819 bytes

Hm, there seems to be no GPL licensing violation here, all files appear to be genuine. The javascript file logicdesign was referring to seems to be gone as well, so I see no problem continuing this.

Review of the 7.x-1.x branch:

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:

  1. project shortname "dsero_anti_adblock_for_google_adsense" is too long, is that really necessary? Why not simply "dsero"?
  2. project page is too long. Once this gets promoted to a full project you should move information to dedicated documentation pages.
  3. @file doc block is the same in all files. Please replace it with actual useful documentation what the specific file is about.
  4. I agree that the class DseroCache is quite useless and does not make sense. Please remove it and just use standard constants.
  5. "!defined('_DSERO') or die;": never use die() in the global scope. Why do you need that line?
  6. "const _DSERO = TRUE;": const can only be used since PHP 5.3 as replacement for define(). As Drupal 7 should also work on PHP 5.2 I recommend to use define() or add the PHP 5.3 dependency to the info file.
  7. dsero_anti_adblock_for_google_adsense_generate_site_code(): why should there be an exception during variable_set() or drupal_http_request()? Both functions do not throw exceptions, so your try/catch blocks are useless.
  8. dsero_anti_adblock_for_google_adsense_menu(): do not use t() in hook_menu(), the items will be translated later.
  9. dsero_anti_adblock_for_google_adsense_block(): $form is undefined.
  10. "t('Failed to update API key - ') . t($status)": do not concatenate translatable strings, use placeholders with t() instead.
  11. dsero_anti_adblock_for_google_adsense_init(): why do you need hook_init()? This will be executed on every single page request and is considered expensive for performance. You should only add the javascript when your ad is actually displayed.
  12. dsero_anti_adblock_for_google_adsense_block(): hook_block() does not exist in Drupal 7.

Removing review bonus tag, you can add it again if you have done another 3 reviews of other projects.

dSero’s picture

Status: Needs work » Needs review

0. Automatic review
RESPONSE: Fixed. All issues were related to hook_block that I removed. Does PAReview.sh and the online version match? since I check my code before sumitting. Verified it again now.

1. project shortname "dsero_anti_adblock_for_google_adsense" is too long, is that really necessary? Why not simply "dsero"?
RESPONSE: We found out that longer name that actually describes what the module does, avoid misunderstanding from the users. Anyhow, it seems there is no way to change it: http://drupal.org/node/1310524

2. project page is too long. Once this gets promoted to a full project you should move information to dedicated documentation pages.
RESPONSE: I'll be glad to do so. I would not find an option for that in the sandbox.

3. @file doc block is the same in all files. Please replace it with actual useful documentation what the specific file is about.
RESPONSE: Fixed. I've added a short description to the .module and .install files.

4. I agree that the class DseroCache is quite useless and does not make sense. Please remove it and just use standard constants.
Response: Fixed. Removed that.

5. "!defined('_DSERO') or die;": never use die() in the global scope. Why do you need that line?
RESPONSE: Fixed. Removed that

6. "const _DSERO = TRUE;": const can only be used since PHP 5.3 as replacement for define(). As Drupal 7 should also work on PHP 5.2 I recommend to 7. use define() or add the PHP 5.3 dependency to the info file.
RESPONSE: Fixed. Removed that

7. dsero_anti_adblock_for_google_adsense_generate_site_code(): why should there be an exception during variable_set() or drupal_http_request()? Both functions do not throw exceptions, so your try/catch blocks are useless.
RESPONSE: Fixed. Removed that

8. dsero_anti_adblock_for_google_adsense_menu(): do not use t() in hook_menu(), the items will be translated later.
RESPONSE: Fixed. Interesting, since I got a comment regarding it. Anyway I removed that.

9. dsero_anti_adblock_for_google_adsense_block(): $form is undefined.
RESPONSE: Fixed. Removed that

10. "t('Failed to update API key - ') . t($status)": do not concatenate translatable strings, use placeholders with t() instead.
RESPONSE: Fixed

11. dsero_anti_adblock_for_google_adsense_init(): why do you need hook_init()? This will be executed on every single page request and is considered expensive for performance. You should only add the javascript when your ad is actually displayed.
RESPONSE: The javascript is embedded on every single page request, so it seems like the correct call. Let me know if there is a better way.

12. dsero_anti_adblock_for_google_adsense_block(): hook_block() does not exist in Drupal 7.
RESPONSE: Fixed. Removed that

dSero’s picture

dSero’s picture

Issue summary: View changes

Added the reviews for other projects

klausi’s picture

Status: Needs review » Needs work
Issue tags: -PAreview: review bonus +PAreview: single application approval

manual review:

  1. dsero_anti_adblock_for_google_adsense.module: "$_dsero_anti_adblock_for_google_adsense_blocking_path = '';": do not define standard variables in the global scope like that, they have no effect.
  2. dsero_anti_adblock_for_google_adsense_should_refresh(): why do you need global variables? variable_get() is cached in memory anyway.
  3. dsero_anti_adblock_for_google_adsense_refresh_code_from_remote(): "dsero_anti_adblock_for_google_adsense_should_refresh() == FALSE": that function never returns FALSE?
  4. I'm heavily confused by the global variables and the usage of variable_set(). Why do you set those system variables when they are overwritten on any page request anyway?
  5. dsero_anti_adblock_for_google_adsense_should_refresh(): does nothing more than generating a random number. dsero_anti_adblock_for_google_adsense_refresh_code_from_remote() does nothing more than issuing a drupal_http_request(). That could all be just one function that is called from hook_init(). No need for globals, no need for variable_set().
  6. $_dsero_anti_adblock_for_google_adsense_site_private_code is also not necessary is global variable, it is saved as system variable anyway.
  7. You are installing the site code on hook_install(). No need to do it again in hook_init() and hook_enable().
  8. Overall there is a lot of verbose, confusing code that does not do much. I think this project is too short to approve you as git vetted user. However, we can promote this single project manually to a full project for you.

Removing review bonus tag, you can add it again if you have done another 3 reviews of other projects.

dSero’s picture

Status: Needs work » Needs review

Dear Mr. Purer,

Thank you for your time and kind review. Please find bellow the details response to the issues that you raised:

1. dsero_anti_adblock_for_google_adsense.module: "$_dsero_anti_adblock_for_google_adsense_blocking_path = '';": do not define standard variables in the global scope like that, they have no effect.
RESPONSE:Fixed. Removed as suggested at #2

2. dsero_anti_adblock_for_google_adsense_should_refresh(): why do you need global variables? variable_get() is cached in memory anyway.
RESPONSE: Fixed. Remove it as suggested.

3. dsero_anti_adblock_for_google_adsense_refresh_code_from_remote(): "dsero_anti_adblock_for_google_adsense_should_refresh() == FALSE": that function never returns FALSE?
RESPONSE: Please notice that it has a very high probability of returning FALSE, due to the following line: return (rand(1, DSERO_ANTI_ADBLOCK_FOR_GOOGLE_ADSENSE_RAND_MAX) < 2);

4. I'm heavily confused by the global variables and the usage of variable_set(). Why do you set those system variables when they are overwritten on any page request anyway?
RESPONSE: They are not overwritten everytime. See #3, there is high probability that they will not be overwritten every call.

5. dsero_anti_adblock_for_google_adsense_should_refresh(): does nothing more than generating a random number. dsero_anti_adblock_for_google_adsense_refresh_code_from_remote() does nothing more than issuing a drupal_http_request(). That could all be just one function that is called from hook_init(). No need for globals, no need for variable_set().
RESPONSE:I removed the globals. Please notice. dsero_anti_adblock_for_google_adsense_should_refresh() is a statistical cache invalidation method, as explained in #3.

6. $_dsero_anti_adblock_for_google_adsense_site_private_code is also not necessary is global variable, it is saved as system variable anyway.
RESPONSE: Fixed. Removed that.

7. You are installing the site code on hook_install(). No need to do it again in hook_init() and hook_enable().
RESPONSE: I removed the hook_enable(). However, it is recommended to keep it in the hook_init() in order to minimize error cases (for example if during installation our servers were not available for some reason).

8. Overall there is a lot of verbose, confusing code that does not do much. I think this project is too short to approve you as git vetted user. However, we can promote this single project manually to a full project for you.
RESPONSE: It will be a pleasure if you could promote that single project. I hope that my answer clarified some of the subjects, and that I could contribute more to the community in the future.

9. I verified it again using http://ventral.org/pareview/httpgitdrupalorgsandboxdsero1804756git before submission.

Best Regards,
Moshe

dSero’s picture

Issue summary: View changes

Another review of external projects

dSero’s picture

klausi’s picture

Status: Needs review » Reviewed & tested by the community
Issue tags: -PAreview: review bonus

No need to call me "Mr. Purer", makes me feel old. klausi is fine :-)

Looks a lot cleaner now and seems RTBC to me. Removing review bonus tag, you can add it again if you have done another 3 reviews of other projects.

dSero’s picture

Issue tags: +PAreview: review bonus

Thanks klausi,

Another 3 projects peer review:
http://drupal.org/node/1789676#comment-6627380
http://drupal.org/node/1740956#comment-6627422 + http://drupal.org/node/1740956#comment-6627434
http://drupal.org/node/1637744#comment-6627450

I'll be glad if anyone will take push this project to production.

Thank you in advance,
Moshe

dSero’s picture

Issue summary: View changes

Another Pareview

klausi’s picture

Status: Reviewed & tested by the community » Fixed

No objections for more than a week, so ...

Thanks for your contribution, dSero!

I promoted this to a full project: http://drupal.org/project/dsero_anti_adblock_for_google_adsense

Now that this experimental project has been promoted, you'll need to update the URL of your remote repository or reclone it.

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 get 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.

Automatically closed -- issue fixed for 2 weeks with no activity.

Anonymous’s picture

Issue summary: View changes

Another 3 projects review