Sellry_Humanfriendlycaptcha - Version 1.0.0

Version Notes

First preview release

Download this release

Release Info

Developer Magento Core Team
Extension Sellry_Humanfriendlycaptcha
Version 1.0.0
Comparing to
See all releases


Version 1.0.0

Files changed (23) hide show
  1. app/code/community/Sellry/Humanfriendlycaptcha/Block/Adminhtml/System/Config/Fieldset/Hint.php +114 -0
  2. app/code/community/Sellry/Humanfriendlycaptcha/Block/Core/Text/List.php +92 -0
  3. app/code/community/Sellry/Humanfriendlycaptcha/Block/Customer/Form/Register.php +59 -0
  4. app/code/community/Sellry/Humanfriendlycaptcha/Block/Humanfriendlycaptcha.php +45 -0
  5. app/code/community/Sellry/Humanfriendlycaptcha/Block/Newsletter/Subscribe.php +59 -0
  6. app/code/community/Sellry/Humanfriendlycaptcha/Block/Review/Form.php +59 -0
  7. app/code/community/Sellry/Humanfriendlycaptcha/Block/System/Config/Form/Field/Pages.php +42 -0
  8. app/code/community/Sellry/Humanfriendlycaptcha/Helper/Data.php +76 -0
  9. app/code/community/Sellry/Humanfriendlycaptcha/Helper/Recaptcha.php +55 -0
  10. app/code/community/Sellry/Humanfriendlycaptcha/Model/Humanfriendlycaptcha.php +61 -0
  11. app/code/community/Sellry/Humanfriendlycaptcha/Model/Observer.php +61 -0
  12. app/code/community/Sellry/Humanfriendlycaptcha/Model/System/Config/Backend/Pages.php +33 -0
  13. app/code/community/Sellry/Humanfriendlycaptcha/Model/System/Config/Source/Forms.php +53 -0
  14. app/code/community/Sellry/Humanfriendlycaptcha/controllers/IndexController.php +41 -0
  15. app/code/community/Sellry/Humanfriendlycaptcha/etc/config.xml +141 -0
  16. app/code/community/Sellry/Humanfriendlycaptcha/etc/system.xml +119 -0
  17. app/code/community/Sellry/Humanfriendlycaptcha/sql/humanfriendlycaptcha_setup/mysql4-install-1.0.0.php +43 -0
  18. app/design/adminhtml/default/default/template/sellry/humanfriendlycaptcha/system/config/fieldset/hint.phtml +61 -0
  19. app/design/frontend/default/default/layout/sellry_humanfriendlycaptcha.xml +35 -0
  20. app/design/frontend/default/default/template/sellry/humanfriendlycaptcha/humanfriendlycaptcha.phtml +41 -0
  21. js/sellry/humanfriendlycaptcha.js +37 -0
  22. lib/AYAH.php +461 -0
  23. package.xml +22 -0
app/code/community/Sellry/Humanfriendlycaptcha/Block/Adminhtml/System/Config/Fieldset/Hint.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Block_Adminhtml_System_Config_Fieldset_Hint
31
+ extends Mage_Adminhtml_Block_Abstract
32
+ implements Varien_Data_Form_Element_Renderer_Interface
33
+ {
34
+ protected $_template = 'sellry/humanfriendlycaptcha/system/config/fieldset/hint.phtml';
35
+
36
+ protected $_dataUrl = 'http://sellry.com/magento-extensions/index.php';
37
+
38
+ public function __construct() {
39
+ parent::__construct();
40
+
41
+ $this->setMainHeading(Mage::helper('humanfriendlycaptcha')->__('So You ARE a Human! by <a href="%s" target="_new">sellry</a>', "http://sellry.com/magento-extensions?utm_source=".Mage::getBaseUrl()."&utm_medium=developer-link&utm_campaign=HumanFriendlyCaptcha&utm_content=".$this->getModuleVersion()));
42
+ $this->setCallToActionMessage(Mage::helper('humanfriendlycaptcha')->__('Need help with this extension? Let us know.'));
43
+ $this->setLogoImage('http://sellry.com/magento-extensions/logo.jpg');
44
+
45
+ $this->getModuleData();
46
+
47
+ return $this;
48
+ }
49
+
50
+ public function isConnected()
51
+ {
52
+ $helper = Mage::helper('humanfriendlycaptcha');
53
+ return (bool)($helper->getScoringKey() && $helper->getPublisherKey());
54
+ }
55
+
56
+ /**
57
+ * Render fieldset html
58
+ *
59
+ * @param Varien_Data_Form_Element_Abstract $element
60
+ * @return string
61
+ */
62
+ public function render(Varien_Data_Form_Element_Abstract $element)
63
+ {
64
+ return $this->toHtml();
65
+ }
66
+
67
+ public function getModuleVersion()
68
+ {
69
+ return (string) Mage::getConfig()->getNode('modules/Sellry_Humanfriendlycaptcha/version');
70
+ }
71
+
72
+ public function getModuleData()
73
+ {
74
+ $modulesArray = (array)Mage::getConfig()->getNode('modules')->children();
75
+ $aux = (array_key_exists('Enterprise_Enterprise', $modulesArray))? 'EE' : 'CE' ;
76
+
77
+ $data = array(
78
+ 'module' => 'Humanfriendlycaptcha',
79
+ 'version' => $this->getModuleVersion(),
80
+ 'magento_version' => Mage::getVersion(),
81
+ 'magento_edition' => $aux,
82
+ 'locale' => Mage::app()->getLocale()->getLocaleCode()
83
+ );
84
+
85
+ $client = new Varien_Http_Client($this->_dataUrl);
86
+ $client->setMethod(Varien_Http_Client::POST);
87
+ $client->setParameterPost('data', Mage::helper('core')->jsonEncode($data));
88
+
89
+ try{
90
+ $response = $client->request();
91
+ if ($response->isSuccessful()) {
92
+ $body = $response->getBody();
93
+ $requestData = Mage::helper('core')->jsonDecode($body);
94
+ if(!$requestData['error']) {
95
+ foreach($requestData['result'] as $key => $value) {
96
+ $this->setData($key, $value);
97
+ }
98
+ }
99
+ }
100
+ } catch (Exception $e) {
101
+ Mage::log($e->getMessage());
102
+ }
103
+ }
104
+
105
+ public function getLatestDownloadUrl()
106
+ {
107
+ return "http://sellry.com/magento-extensions/human-friendly-captcha?utm_source=".Mage::getBaseUrl()."&utm_medium=download-link&utm_campaign=HumanFriendlyCaptcha&utm_content=".$this->getModuleVersion();
108
+ }
109
+
110
+ public function getCallToActionUrl()
111
+ {
112
+ return "http://sellry.com/contact?&utm_source=".Mage::getBaseUrl()."&utm_medium=support-link&utm_campaign=HumanFriendlyCaptcha&utm_content=".$this->getModuleVersion();
113
+ }
114
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Block/Core/Text/List.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Block_Core_Text_List extends Mage_Core_Block_Text_List
31
+ {
32
+ protected function _toHtml()
33
+ {
34
+ $html = parent::_toHtml();
35
+ $helper = Mage::helper('humanfriendlycaptcha');
36
+ $shouldCheck = false;
37
+ if($helper->isEnabled() && $this->getBlockAlias() == 'content') {
38
+ $activeOnThisPage = false;
39
+
40
+ $pages = unserialize($helper->getPages());
41
+ $currentUrl = parse_url(Mage::helper('core/url')->getCurrentUrl());
42
+ $currentUrl = trim($currentUrl['path'], '/');
43
+ foreach($pages as $page) {
44
+ if(isset($page['page'])) {
45
+ $url = parse_url($page['page']);
46
+ if($currentUrl == trim($url['path'], '/')) {
47
+ $activeOnThisPage = true;
48
+ break;
49
+ }
50
+ }
51
+ }
52
+
53
+ $forms = explode(',',$helper->getMagentoForms());
54
+ if(stristr($currentUrl, 'contacts') && in_array('contact', $forms)) //small hack just for the contact page
55
+ $activeOnThisPage = true;
56
+
57
+ if($activeOnThisPage && !(stristr($html, 'ayah'))) {
58
+ $formIds = array();
59
+ preg_match("/var\s*([a-zA-Z0-9\_]*)[\s\=|new]*VarienForm\(['|\"](.[^'|\"]*)['|\"][\s\,a-z]*\)/si", $html, $formData);
60
+ if(count($formData) > 2)
61
+ {
62
+ $shouldCheck = true;
63
+ $varienVar = $formData[1];
64
+ $formId = $formData[2];
65
+ $matches = array();
66
+ $helper->runMatch($formId, $html, $matches, true);
67
+ if(count($matches)) {
68
+ foreach($matches[0] as $match) {
69
+ $ayahCode = $helper->getCode($formId, $varienVar);
70
+ $html = str_replace($match, $match.$ayahCode, $html);
71
+ }
72
+ }
73
+ }
74
+ else {
75
+ $formId = '[a-zA-Z0-9\-\_]*';
76
+ $matches = array();
77
+ $helper->runMatch($formId, $html, $matches, true);
78
+ if(count($matches)) {
79
+ $shouldCheck = true;
80
+ foreach($matches[0] as $match) {
81
+ $ayahCode = $helper->getCode();
82
+ $html = str_replace($match, $match.$ayahCode, $html);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+ Mage::getSingleton('core/session')->setShouldCheckCaptcha($shouldCheck);
89
+
90
+ return $html;
91
+ }
92
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Block/Customer/Form/Register.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Block_Customer_Form_Register extends Mage_Customer_Block_Form_Register
31
+ {
32
+ protected function _toHtml() {
33
+ $html = parent::_toHtml();
34
+
35
+ $helper = Mage::helper('humanfriendlycaptcha');
36
+ $shouldCheck = false;
37
+ if($helper->isEnabled()) {
38
+ $magentoForms = explode(',', $helper->getMagentoForms());
39
+
40
+ if(in_array('customer_register', $magentoForms)) {
41
+ preg_match("/var\s*([a-zA-Z0-9\_]*)[\s\=|new]*VarienForm\(['|\"](.[^'|\"]*)['|\"][\s\,a-z]*\)/si", $html, $formData);
42
+ if(count($formData) > 2)
43
+ {
44
+ $shouldCheck = true;
45
+ $varienVar = $formData[1];
46
+ $formId = $formData[2];
47
+ $matches = array();
48
+ $helper->runMatch($formId, $html, $matches);
49
+ if(count($matches)) {
50
+ $ayahCode = $helper->getCode($formId, $varienVar);
51
+ $html = str_replace($matches[0], $matches[0].$ayahCode, $html);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ Mage::getSingleton('core/session')->setShouldCheckCaptcha($shouldCheck);
57
+ return $html;
58
+ }
59
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Block/Humanfriendlycaptcha.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Block_Humanfriendlycaptcha extends Mage_Core_Block_Template
31
+ {
32
+ protected function _construct()
33
+ {
34
+ parent::_construct();
35
+ $this->setTemplate('sellry/humanfriendlycaptcha/humanfriendlycaptcha.phtml');
36
+ }
37
+
38
+ public function getCode(){
39
+ $code = '';
40
+ if (Mage::helper('humanfriendlycaptcha')->isEnabled()) {
41
+ $code = Mage::getSingleton('humanfriendlycaptcha/humanfriendlycaptcha')->getCode();
42
+ }
43
+ return $code;
44
+ }
45
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Block/Newsletter/Subscribe.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Block_Newsletter_Subscribe extends Mage_Newsletter_Block_Subscribe
31
+ {
32
+ protected function _toHtml() {
33
+ $html = parent::_toHtml();
34
+
35
+ $helper = Mage::helper('humanfriendlycaptcha');
36
+ $shouldCheck = false;
37
+ if($helper->isEnabled()) {
38
+ $magentoForms = explode(',', $helper->getMagentoForms());
39
+
40
+ if(in_array('newsletter', $magentoForms)) {
41
+ preg_match("/var\s*([a-zA-Z0-9\_]*)[\s\=|new]*VarienForm\(['|\"](.[^'|\"]*)['|\"][\s\,a-z]*\)/si", $html, $formData);
42
+ if(count($formData) > 2)
43
+ {
44
+ $shouldCheck = true;
45
+ $varienVar = $formData[1];
46
+ $formId = $formData[2];
47
+ $matches = array();
48
+ $helper->runMatch($formId, $html, $matches);
49
+ if(count($matches) && !(stristr($html, 'ayah'))) {
50
+ $ayahCode = $helper->getCode($formId, $varienVar);
51
+ $html = str_replace($matches[0], $matches[0].$ayahCode, $html);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ Mage::getSingleton('core/session')->setShouldCheckCaptcha($shouldCheck);
57
+ return $html;
58
+ }
59
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Block/Review/Form.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Block_Review_Form extends Mage_Review_Block_Form
31
+ {
32
+ protected function _toHtml() {
33
+ $html = parent::_toHtml();
34
+
35
+ $helper = Mage::helper('humanfriendlycaptcha');
36
+ $shouldCheck = false;
37
+ if($helper->isEnabled()) {
38
+ $magentoForms = explode(',', $helper->getMagentoForms());
39
+
40
+ if(in_array('review_form', $magentoForms)) {
41
+ preg_match("/var\s*([a-zA-Z0-9\_]*)[\s\=|new]*VarienForm\(['|\"](.[^'|\"]*)['|\"][\s\,a-z]*\)/si", $html, $formData);
42
+ if(count($formData) > 2)
43
+ {
44
+ $shouldCheck = true;
45
+ $varienVar = $formData[1];
46
+ $formId = $formData[2];
47
+ $matches = array();
48
+ $helper->runMatch($formId, $html, $matches);
49
+ if(count($matches) && !(stristr($html, 'ayah'))) {
50
+ $ayahCode = $helper->getCode($formId, $varienVar);
51
+ $html = str_replace($matches[0], $matches[0].$ayahCode, $html);
52
+ }
53
+ }
54
+ }
55
+ }
56
+ Mage::getSingleton('core/session')->setShouldCheckCaptcha($shouldCheck);
57
+ return $html;
58
+ }
59
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Block/System/Config/Form/Field/Pages.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Block_System_Config_Form_Field_Pages extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
31
+ {
32
+ public function __construct()
33
+ {
34
+ $this->addColumn('page', array(
35
+ 'label' => Mage::helper('humanfriendlycaptcha')->__('Page link'),
36
+ 'style' => 'width:360px',
37
+ ));
38
+ $this->_addAfter = false;
39
+ $this->_addButtonLabel = Mage::helper('humanfriendlycaptcha')->__('Add Page');
40
+ parent::__construct();
41
+ }
42
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Helper/Data.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Helper_Data extends Mage_Core_Helper_Abstract
31
+ {
32
+
33
+ public function isEnabled() {
34
+ return (bool)Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/enabled',Mage::app()->getStore());
35
+ }
36
+
37
+ public function getScoringKey() {
38
+ return Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/scoring_key',Mage::app()->getStore());
39
+ }
40
+
41
+ public function getPublisherKey() {
42
+ return Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/publisher_key',Mage::app()->getStore());
43
+ }
44
+
45
+ public function getErrorMessage() {
46
+ return Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/error_message',Mage::app()->getStore());
47
+ }
48
+
49
+ public function getPages() {
50
+ return Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/pages',Mage::app()->getStore());
51
+ }
52
+
53
+ public function getMagentoForms() {
54
+ return Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/magento_forms',Mage::app()->getStore());
55
+ }
56
+
57
+ public function getCode($formId = null, $varienVar = null){
58
+ return Mage::app()->getLayout()->createBlock('humanfriendlycaptcha/humanfriendlycaptcha')
59
+ ->setFormId($formId)
60
+ ->setVarienVar($varienVar)
61
+ ->toHtml();
62
+ }
63
+
64
+ public function score(){
65
+ return Mage::getSingleton('humanfriendlycaptcha/humanfriendlycaptcha')->score();
66
+ }
67
+
68
+ public function runMatch($formId, $html, &$matches, $all = false)
69
+ {
70
+ $regex = "/(<form[a-zA-Z0-9\s\=\'\"\.\:\/\-\_\\?\;\&\%\#\!\(\)\+\,\|\]\[\}\{\~]*id=['|\"]".$formId."['|\"][a-zA-Z0-9\s\=\'\"\.\:\/\-\_\\?\;\&\%\#\!\(\)\+\,\|\]\[\}\{\~]*>)/si";
71
+ if($all)
72
+ preg_match_all($regex, $html, $matches);
73
+ else
74
+ preg_match($regex, $html, $matches);
75
+ }
76
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Helper/Recaptcha.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Helper_Recaptcha extends Fishpig_Wordpress_Helper_Recaptcha {
31
+
32
+ public function getRecaptchaHtml() {
33
+ return $this->_getDataHelper()->getCode();
34
+ }
35
+
36
+ public function isEnabled() {
37
+ return $this->_getDataHelper()->isEnabled();
38
+ }
39
+
40
+ public function isValidValue($challenge, $response, $graceful = false) {
41
+ return $this->_getDataHelper()->score();
42
+ }
43
+ /**
44
+ *
45
+ * @return Sellry_Humanfriendlycaptcha_Helper_Data
46
+ */
47
+ protected function _getDataHelper(){
48
+ return Mage::helper('humanfriendlycaptcha');
49
+ }
50
+
51
+ public function getCaptchaErrorMessage() {
52
+ return $this->_getDataHelper()->getErrorMessage();
53
+ }
54
+
55
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Model/Humanfriendlycaptcha.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Model_Humanfriendlycaptcha extends Mage_Core_Model_Abstract
31
+ {
32
+ protected $_ayah;
33
+
34
+ protected function _construct()
35
+ {
36
+ }
37
+
38
+ public function getCode(){
39
+ return $this->getAyah()->getPublisherHTML(array('onsubmit' => 'submitFirst'));
40
+ }
41
+
42
+ public function score(){
43
+ return $this->getAyah()->scoreResult();
44
+ }
45
+
46
+ /**
47
+ *
48
+ * @return AYAH
49
+ */
50
+ public function getAyah(){
51
+ if (!$this->_ayah) {
52
+ $this->_ayah = new AYAH(array(
53
+ 'scoring_key' => Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/scoring_key'),
54
+ 'publisher_key' => Mage::getStoreConfig('sellry_humanfriendlycaptcha/general/publisher_key'),
55
+ ));
56
+ }
57
+ return $this->_ayah;
58
+ }
59
+
60
+
61
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Model/Observer.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Model_Observer extends Mage_Core_Controller_Front_Action
31
+ {
32
+ public function submitObserver($observer) {
33
+ /* @var $request Mage_Core_Controller_Request_Http */
34
+ if(Mage::helper('humanfriendlycaptcha')->isEnabled() && Mage::getSingleton('core/session')->getShouldCheckCaptcha()) {
35
+ $action = $observer->getControllerAction();
36
+ $request = $action->getRequest();
37
+ if ($request->isPost()) {
38
+ $api = Mage::getSingleton('humanfriendlycaptcha/humanfriendlycaptcha');
39
+ if (!$api->score()){
40
+ $session = Mage::getSingleton('customer/session');
41
+ $session->addError(Mage::helper('humanfriendlycaptcha')->getErrorMessage());
42
+ $action->getResponse()->setRedirect(Mage::getUrl($this->_getRedirectUrl($action), array('_secure' => true)));
43
+ $action->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
44
+ }
45
+ }
46
+ }
47
+
48
+ Mage::getSingleton('core/session')->unsShouldCheckCaptcha();
49
+ }
50
+
51
+ protected function _getRedirectUrl($action) {
52
+ switch (true) {
53
+ case ($action instanceof Mage_Customer_AccountController):
54
+ return '*/*/create';
55
+ case ($action instanceof Mage_Review_ProductController):
56
+ return '*/*/list/id/'.$action->getRequest()->getParam('id');
57
+ default:
58
+ return '*/*/*';
59
+ }
60
+ }
61
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Model/System/Config/Backend/Pages.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Model_System_Config_Backend_Pages extends Mage_Adminhtml_Model_System_Config_Backend_Serialized_Array
31
+ {
32
+ protected $_eventPrefix = 'sellry_humanfriendlycaptcha_config_backend_pages';
33
+ }
app/code/community/Sellry/Humanfriendlycaptcha/Model/System/Config/Source/Forms.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_Model_System_Config_Source_Forms
31
+ {
32
+ public function toOptionArray()
33
+ {
34
+ return array(
35
+ array(
36
+ 'label' => 'Contact form',
37
+ 'value' => 'contact'
38
+ ),
39
+ array(
40
+ 'label' => 'Customer Registration form',
41
+ 'value' => 'customer_register'
42
+ ),
43
+ array(
44
+ 'label' => 'Newsletter Subscription form',
45
+ 'value' => 'newsletter'
46
+ ),
47
+ array(
48
+ 'label' => 'Product Review form',
49
+ 'value' => 'review_form'
50
+ ),
51
+ );
52
+ }
53
+ }
app/code/community/Sellry/Humanfriendlycaptcha/controllers/IndexController.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ class Sellry_Humanfriendlycaptcha_IndexController extends Mage_Core_Controller_Front_Action
31
+ {
32
+ public function indexAction()
33
+ {
34
+ echo 'Inside Sellry_Humanfriendlycaptcha_IndexController::indexAction()'; exit;
35
+ }
36
+
37
+ public function testAction()
38
+ {
39
+ echo 'Inside Sellry_Humanfriendlycaptcha_IndexController::testAction()'; exit;
40
+ }
41
+ }
app/code/community/Sellry/Humanfriendlycaptcha/etc/config.xml ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ -->
29
+ <config>
30
+ <modules>
31
+ <Sellry_Humanfriendlycaptcha>
32
+ <version>1.0.0</version>
33
+ </Sellry_Humanfriendlycaptcha>
34
+ </modules>
35
+ <global>
36
+ <blocks>
37
+ <humanfriendlycaptcha>
38
+ <class>Sellry_Humanfriendlycaptcha_Block</class>
39
+ </humanfriendlycaptcha>
40
+ <core>
41
+ <rewrite>
42
+ <text_list>Sellry_Humanfriendlycaptcha_Block_Core_Text_List</text_list>
43
+ </rewrite>
44
+ </core>
45
+ <customer>
46
+ <rewrite>
47
+ <form_register>Sellry_Humanfriendlycaptcha_Block_Customer_Form_Register</form_register>
48
+ </rewrite>
49
+ </customer>
50
+ <newsletter>
51
+ <rewrite>
52
+ <subscribe>Sellry_Humanfriendlycaptcha_Block_Newsletter_Subscribe</subscribe>
53
+ </rewrite>
54
+ </newsletter>
55
+ <review>
56
+ <rewrite>
57
+ <form>Sellry_Humanfriendlycaptcha_Block_Review_Form</form>
58
+ </rewrite>
59
+ </review>
60
+ </blocks>
61
+ <helpers>
62
+ <humanfriendlycaptcha>
63
+ <class>Sellry_Humanfriendlycaptcha_Helper</class>
64
+ </humanfriendlycaptcha>
65
+ <wordpress>
66
+ <rewrite>
67
+ <recaptcha>Sellry_Humanfriendlycaptcha_Helper_Recaptcha</recaptcha>
68
+ </rewrite>
69
+ </wordpress>
70
+ </helpers>
71
+ <models>
72
+ <humanfriendlycaptcha>
73
+ <class>Sellry_Humanfriendlycaptcha_Model</class>
74
+ </humanfriendlycaptcha>
75
+ </models>
76
+ </global>
77
+ <frontend>
78
+ <layout>
79
+ <updates>
80
+ <Sellry_Humanfriendlycaptcha>
81
+ <file>sellry_humanfriendlycaptcha.xml</file>
82
+ </Sellry_Humanfriendlycaptcha>
83
+ </updates>
84
+ </layout>
85
+ <events>
86
+ <controller_action_predispatch_customer_account_createpost>
87
+ <observers>
88
+ <hfc_customer_account_create_observer>
89
+ <type>singleton</type>
90
+ <class>humanfriendlycaptcha/observer</class>
91
+ <method>submitObserver</method>
92
+ </hfc_customer_account_create_observer>
93
+ </observers>
94
+ </controller_action_predispatch_customer_account_createpost>
95
+ <controller_action_predispatch_review_product_post>
96
+ <observers>
97
+ <hfc_customer_account_create_observer>
98
+ <type>singleton</type>
99
+ <class>humanfriendlycaptcha/observer</class>
100
+ <method>submitObserver</method>
101
+ </hfc_customer_account_create_observer>
102
+ </observers>
103
+ </controller_action_predispatch_review_product_post>
104
+ </events>
105
+ </frontend>
106
+ <adminhtml>
107
+ <acl>
108
+ <resources>
109
+ <all>
110
+ <title>Allow Everything</title>
111
+ </all>
112
+ <admin>
113
+ <children>
114
+ <system>
115
+ <children>
116
+ <config>
117
+ <children>
118
+ <sellry_humanfriendlycaptcha translate="label" module="humanfriendlycaptcha">
119
+ <title>Configure Human Friendly CAPTCHA</title>
120
+ <sort_order>50</sort_order>
121
+ </sellry_humanfriendlycaptcha>
122
+ </children>
123
+ </config>
124
+ </children>
125
+ </system>
126
+ </children>
127
+ </admin>
128
+ </resources>
129
+ </acl>
130
+ </adminhtml>
131
+ <default>
132
+ <sellry_humanfriendlycaptcha>
133
+ <general>
134
+ <enabled>0</enabled>
135
+ <error_message>Hmmm... we weren't able to recognize you as human.</error_message>
136
+ <magento_forms>contact,customer_register,newsletter</magento_forms>
137
+ </general>
138
+ </sellry_humanfriendlycaptcha>
139
+ </default>
140
+
141
+ </config>
app/code/community/Sellry/Humanfriendlycaptcha/etc/system.xml ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ -->
29
+ <config>
30
+ <sections>
31
+ <sellry_humanfriendlycaptcha translate="label" module="humanfriendlycaptcha">
32
+ <label>Human-Friendly Captcha</label>
33
+ <tab>customer</tab>
34
+ <frontend_type>text</frontend_type>
35
+ <sort_order>10</sort_order>
36
+ <show_in_default>1</show_in_default>
37
+ <show_in_website>1</show_in_website>
38
+ <show_in_store>1</show_in_store>
39
+ <groups>
40
+ <hint>
41
+ <frontend_model>humanfriendlycaptcha/adminhtml_system_config_fieldset_hint</frontend_model>
42
+ <sort_order>0</sort_order>
43
+ <show_in_default>1</show_in_default>
44
+ <show_in_website>1</show_in_website>
45
+ <show_in_store>1</show_in_store>
46
+ </hint>
47
+ <general translate='label'>
48
+ <label>General configuration</label>
49
+ <frontend_type>text</frontend_type>
50
+ <sort_order>10</sort_order>
51
+ <show_in_default>1</show_in_default>
52
+ <show_in_website>1</show_in_website>
53
+ <show_in_store>1</show_in_store>
54
+ <fields>
55
+ <enabled>
56
+ <label>Enable PlayThru CAPTCHA</label>
57
+ <frontend_type>select</frontend_type>
58
+ <source_model>adminhtml/system_config_source_yesno</source_model>
59
+ <sort_order>10</sort_order>
60
+ <show_in_default>1</show_in_default>
61
+ <show_in_website>1</show_in_website>
62
+ <show_in_store>1</show_in_store>
63
+ </enabled>
64
+ <publisher_key>
65
+ <label>Publisher Key</label>
66
+ <comment>Look for this in the areyouahuman.com dashboard.</comment>
67
+ <frontend_type>text</frontend_type>
68
+ <sort_order>20</sort_order>
69
+ <show_in_default>1</show_in_default>
70
+ <show_in_website>1</show_in_website>
71
+ <show_in_store>1</show_in_store>
72
+ </publisher_key>
73
+ <scoring_key>
74
+ <label>Scoring Key</label>
75
+ <comment>This is also in the areyouahuman.com dashboard.</comment>
76
+ <frontend_type>text</frontend_type>
77
+ <sort_order>30</sort_order>
78
+ <show_in_default>1</show_in_default>
79
+ <show_in_website>1</show_in_website>
80
+ <show_in_store>1</show_in_store>
81
+ </scoring_key>
82
+ <error_message>
83
+ <label>Error message</label>
84
+ <comment>Visitors see this if they don't complete the PlayThru.</comment>
85
+ <frontend_type>text</frontend_type>
86
+ <sort_order>40</sort_order>
87
+ <show_in_default>1</show_in_default>
88
+ <show_in_website>1</show_in_website>
89
+ <show_in_store>1</show_in_store>
90
+ </error_message>
91
+ <magento_forms>
92
+ <label>Magento forms to protect</label>
93
+ <comment>Select Magento forms you want PlayThru to protect. Our recommended options are selected by default.</comment>
94
+ <frontend_type>multiselect</frontend_type>
95
+ <source_model>humanfriendlycaptcha/system_config_source_forms</source_model>
96
+ <sort_order>50</sort_order>
97
+ <show_in_default>1</show_in_default>
98
+ <show_in_website>1</show_in_website>
99
+ <show_in_store>1</show_in_store>
100
+ </magento_forms>
101
+ <pages>
102
+ <label>Additional forms to protect</label>
103
+ <comment>Type other URLs containing forms you want protected and CAPTCHA should appear magically on them!
104
+ Note: This feature doesn't work for all forms. If after you've added a URL and tried submitting your form, the CAPTCHA does not appear, follow the instructions on sellry.com/ayah to manually add CAPTCHA support to your form(s).
105
+ </comment>
106
+ <frontend_model>humanfriendlycaptcha/system_config_form_field_pages</frontend_model>
107
+ <backend_model>humanfriendlycaptcha/system_config_backend_pages</backend_model>
108
+ <sort_order>60</sort_order>
109
+ <show_in_default>1</show_in_default>
110
+ <show_in_website>1</show_in_website>
111
+ <show_in_store>1</show_in_store>
112
+ </pages>
113
+ </fields>
114
+ </general>
115
+ </groups>
116
+ </sellry_humanfriendlycaptcha>
117
+ </sections>
118
+
119
+ </config>
app/code/community/Sellry/Humanfriendlycaptcha/sql/humanfriendlycaptcha_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+
30
+ $installer = $this;
31
+ /* @var $installer Mage_Core_Model_Resource_Setup */
32
+
33
+ $installer->startSetup();
34
+
35
+ //Use {$this->getTable('humanfriendlycaptcha_humanfriendlycaptcha')} for table name
36
+
37
+ $installer->run("
38
+
39
+ //Add your SQL here...
40
+
41
+ ");
42
+
43
+ $installer->endSetup();
app/design/adminhtml/default/default/template/sellry/humanfriendlycaptcha/system/config/fieldset/hint.phtml ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+ ?>
30
+ <style>
31
+ .sellry-notice {padding:15px 10px 10px 20px; border:1px solid #ccc; background:#f9fcec; margin:0 0 10px;}
32
+ .sellry-notice .logo {width:155px; float:left; margin:0 10px 0 0;}
33
+ .sellry-notice .notice {float:left;}
34
+ .sellry-notice .notice h4 {color:#6e6e6e; }
35
+ .sellry-notice .notice span, strong {color:#a09991;}
36
+ .sellry-notice .notice span,
37
+ .sellry-notice .notice strong,
38
+ .sellry-notice .notice a {line-height:20px;}
39
+ </style>
40
+ <div class='sellry-notice'>
41
+ <div class="logo">
42
+ <img src="<?php echo $this->getLogoImage() ?>" />
43
+ </div>
44
+ <div class="notice">
45
+ <h4>
46
+ <?php echo $this->getMainHeading() ?>
47
+ </h4>
48
+ <?php if($this->getLatestVersion() && $this->getModuleVersion() != $this->getLatestVersion()): ?>
49
+ <span><?php echo $this->__('Version: <strong>%s</strong> (this version is out of date)', $this->getModuleVersion()) ?></span>
50
+ <a href="<?php echo $this->getLatestDownloadUrl() ?>" target="_new"><?php echo $this->__('Download an updated version.') ?></a>
51
+ <?php else: ?>
52
+ <span><?php echo $this->__('Version: <strong>%s</strong> (this is the latest).', $this->getModuleVersion()) ?></span>
53
+ <?php endif; ?>
54
+ <?php if(!$this->isConnected()): ?>
55
+ <br/>
56
+ <?php echo $this->__("<strong>You're not connected to PlayThru yet.</strong> <a href='%s' target='_new'>Get a free account now.</a>", 'http://portal.areyouahuman.com/signup/basic'); ?>
57
+ <?php endif; ?>
58
+ <h4><a href="<?php echo $this->getCallToActionUrl() ?>" target="_new"><?php echo $this->getCallToActionMessage() ?></a><h4>
59
+ </div>
60
+ <div class="clear"></div>
61
+ </div>
app/design/frontend/default/default/layout/sellry_humanfriendlycaptcha.xml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ -->
29
+ <layout version="0.1.0">
30
+ <default>
31
+ <reference name="head">
32
+ <action method="addJs"><script>sellry/humanfriendlycaptcha.js</script></action>
33
+ </reference>
34
+ </default>
35
+ </layout>
app/design/frontend/default/default/template/sellry/humanfriendlycaptcha/humanfriendlycaptcha.phtml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * So You ARE a Human! by Sellry
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * Humanfriendlycaptcha
22
+ *
23
+ * @category Sellry
24
+ * @package Sellry_Humanfriendlycaptcha
25
+ * @copyright Copyright (c) 2013 Sellry (http://sellry.com)
26
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
27
+ * @author Michael Bower <sales@sellry.com>
28
+ */
29
+ /*
30
+ * @var $this Sellry_Humanfriendlycaptcha_Block_Humanfriendlycaptcha
31
+ */
32
+ ?>
33
+
34
+ <?php echo $this->getCode(); ?>
35
+ <?php if($this->getFormId() && $this->getVarienVar()): ?>
36
+ <script type="text/javascript">
37
+ document.observe("dom:loaded", function(){
38
+ validators['<?php echo $this->getFormId() ?>'] = <?php echo $this->getVarienVar() ?>;
39
+ });
40
+ </script>
41
+ <?php endif; ?>
js/sellry/humanfriendlycaptcha.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Here we will store references to all the VarienForm variables for the forms
3
+ * that we will use AYAH on
4
+ * @type Array
5
+ */
6
+ var validators = new Array();
7
+
8
+ /*
9
+ * The modified submit function
10
+ * @param null|Event event
11
+ * @returns {Boolean}
12
+ */
13
+ function validateSubmit(event) {
14
+ var target = event ? $(event.target) : $(this);
15
+ if(!validators[target.id].validator.validate()) {
16
+ $('ayahLayer').remove();
17
+ $('ayahLayerBlock').remove();
18
+ return false;
19
+ }
20
+
21
+ this._submit();
22
+ }
23
+
24
+ document.observe("dom:loaded", function(){
25
+ if(window.HTMLElement){
26
+ /* DOM-compliant Browsers */
27
+ HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
28
+ HTMLFormElement.prototype.submit = validateSubmit;
29
+ } else {
30
+ /* IE does not expose it's HTMLElement object or its children
31
+ Let the document load so all forms are accounted for */
32
+ for(var i=0; i<document.forms.length; i++){
33
+ document.forms[i]._submit= document.forms[i].submit;
34
+ document.forms[i].submit = validateSubmit;
35
+ }
36
+ }
37
+ });
lib/AYAH.php ADDED
@@ -0,0 +1,461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * Are You A Human
4
+ * PHP Integration Library
5
+ *
6
+ * @version 1.1.4
7
+ *
8
+ * - Documentation and latest version
9
+ * http://portal.areyouahuman.com/help
10
+ * - Get an AYAH Publisher Key
11
+ * https://portal.areyouahuman.com
12
+ * - Discussion group
13
+ * http://getsatisfaction.com/areyouahuman
14
+ *
15
+ * Copyright (c) 2011 AYAH LLC -- http://www.areyouahuman.com
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+ *
25
+ */
26
+
27
+ class AYAH {
28
+ protected $ayah_publisher_key;
29
+ protected $ayah_scoring_key;
30
+ protected $ayah_web_service_host;
31
+ protected $session_secret;
32
+
33
+ protected $__debug_mode = FALSE;
34
+ protected $__message_buffer = array();
35
+ protected $__version_number = '1.1.4';
36
+
37
+ /**
38
+ * Constructor
39
+ * If the session secret exists in input, it grabs it
40
+ * @param $params associative array with keys publisher_key, scoring_key, web_service_host
41
+ *
42
+ */
43
+ public function __construct($params = array())
44
+ {
45
+ // Try to load the ayah_config.php file.
46
+ if ( ! $this->__load_config_file())
47
+ {
48
+ $this->__log("DEBUG", __FUNCTION__, "The ayah_config.php file is missing.");
49
+ }
50
+
51
+ if(array_key_exists("session_secret", $_REQUEST)) {
52
+ $this->session_secret = $_REQUEST["session_secret"];
53
+ }
54
+
55
+ // Set them to defaults
56
+ $this->ayah_publisher_key = "";
57
+ $this->ayah_scoring_key = "";
58
+ $this->ayah_web_service_host = "ws.areyouahuman.com";
59
+
60
+ // If the constants exist, override with those
61
+ if (defined('AYAH_PUBLISHER_KEY')) {
62
+ $this->ayah_publisher_key = AYAH_PUBLISHER_KEY;
63
+ }
64
+
65
+ if (defined('AYAH_SCORING_KEY')) {
66
+ $this->ayah_scoring_key = AYAH_SCORING_KEY;
67
+ }
68
+
69
+ if (defined('AYAH_WEB_SERVICE_HOST')) {
70
+ $this->ayah_web_service_host = AYAH_WEB_SERVICE_HOST;
71
+ }
72
+
73
+ // Lastly grab the parameters input and save them
74
+ foreach (array_keys($params) as $key) {
75
+ if (in_array($key, array("publisher_key", "scoring_key", "web_service_host"))) {
76
+ $variable = "ayah_" . $key;
77
+ $this->$variable = $params[$key];
78
+ } else {
79
+ $this->__log("ERROR", __FUNCTION__, "Unrecognized key for constructor param: '$key'");
80
+ }
81
+ }
82
+
83
+ // Generate some warnings if a foot shot is coming
84
+ if ($this->ayah_publisher_key == "") {
85
+ $this->__log("ERROR", __FUNCTION__, "Warning: Publisher key is not defined. This won't work.");
86
+ }
87
+ else
88
+ {
89
+ $this->__log("DEBUG", __FUNCTION__, "Publisher key: '$this->ayah_publisher_key'");
90
+ }
91
+
92
+ if ($this->ayah_scoring_key == "") {
93
+ $this->__log("ERROR", __FUNCTION__, "Warning: Scoring key is not defined. This won't work.");
94
+ }
95
+ else
96
+ {
97
+ $this->__log("DEBUG", __FUNCTION__, "Scoring key: '$this->ayah_scoring_key'");
98
+ }
99
+
100
+ if ($this->ayah_web_service_host == "") {
101
+ $this->__log("ERROR", __FUNCTION__, "Warning: Web service host is not defined. This won't work.");
102
+ }
103
+ else
104
+ {
105
+ $this->__log("DEBUG", __FUNCTION__, "AYAH Webservice host: '$this->ayah_web_service_host'");
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Returns the markup for the PlayThru
111
+ *
112
+ * @return string
113
+ */
114
+ public function getPublisherHTML($config = array())
115
+ {
116
+ // Initialize.
117
+ $session_secret = "";
118
+ $fields = array('config' => $config);
119
+ $webservice_url = '/ws/setruntimeoptions/' . $this->ayah_publisher_key;
120
+
121
+ // If necessary, process the config data.
122
+ if ( ! empty($config))
123
+ {
124
+ // Log it.
125
+ $this->__log("DEBUG", __FUNCTION__, "Setting runtime options...config data='".implode(",", $config)."'");
126
+
127
+ // Add the gameid to the options url.
128
+ if (array_key_exists("gameid", $config))
129
+ {
130
+ $webservice_url .= '/' . $config['gameid'];
131
+ }
132
+ }
133
+
134
+ // Call the webservice and get the response.
135
+ $resp = $this->doHttpsPostReturnJSONArray($this->ayah_web_service_host, $webservice_url, $fields);
136
+ if ($resp)
137
+ {
138
+ // Get the session secret from the response.
139
+ $session_secret = $resp->session_secret;
140
+
141
+ // Build the url to the AYAH webservice.
142
+ $url = 'https://'; // The AYAH webservice API requires https.
143
+ $url.= $this->ayah_web_service_host; // Add the host.
144
+ $url.= "/ws/script/"; // Add the path to the API script.
145
+ $url.= urlencode($this->ayah_publisher_key); // Add the encoded publisher key.
146
+ $url.= (empty($session_secret))? "" : "/".$session_secret; // If set, add the session_secret.
147
+
148
+ // Build and return the needed HTML code.
149
+ return "<div id='AYAH'></div><script src='". $url ."' type='text/javascript' language='JavaScript'></script>";
150
+ }
151
+ else
152
+ {
153
+ // Build and log a detailed message.
154
+ $url = "https://".$this->ayah_web_service_host.$webservice_url;
155
+ $message = "Unable to connect to the AYAH webservice server. url='$url'";
156
+ $this->__log("ERROR", __FUNCTION__, $message);
157
+
158
+ // Build and display a helpful message to the site user.
159
+ $style = "padding: 10px; border: 1px solid #EED3D7; background: #F2DEDE; color: #B94A48;";
160
+ $message = "Unable to load the <i>Are You a Human</i> PlayThru&trade;. Please contact the site owner to report the problem.";
161
+ echo "<p style=\"$style\">$message</p>\n";
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Check whether the user is a human
167
+ * Wrapper for the scoreGame API call
168
+ *
169
+ * @return boolean
170
+ */
171
+ public function scoreResult() {
172
+ $result = false;
173
+ if ($this->session_secret) {
174
+ $fields = array(
175
+ 'session_secret' => urlencode($this->session_secret),
176
+ 'scoring_key' => $this->ayah_scoring_key
177
+ );
178
+ $resp = $this->doHttpsPostReturnJSONArray($this->ayah_web_service_host, "/ws/scoreGame", $fields);
179
+ if ($resp) {
180
+ $result = ($resp->status_code == 1);
181
+ }
182
+ }
183
+ else
184
+ {
185
+ $this->__log("ERROR", __FUNCTION__, "Unable to score the result. Please check that your ayah_config.php file contains your correct publisher key and scoring key.");
186
+ }
187
+
188
+ return $result;
189
+ }
190
+
191
+ /**
192
+ * Records a conversion
193
+ * Called on the goal page that A and B redirect to
194
+ * A/B Testing Specific Function
195
+ *
196
+ * @return boolean
197
+ */
198
+ public function recordConversion() {
199
+ // Build the url to the AYAH webservice..
200
+ $url = 'https://'; // The AYAH webservice API requires https.
201
+ $url.= $this->ayah_web_service_host; // Add the host.
202
+ $url.= "/ws/recordConversion/"; // Add the path to the API script.
203
+ $url.= urlencode($this->ayah_publisher_key); // Add the encoded publisher key.
204
+
205
+ if( isset( $this->session_secret ) ){
206
+ return '<iframe style="border: none;" height="0" width="0" src="' . $url . '"></iframe>';
207
+ } else {
208
+ $this->__log("ERROR", __FUNCTION__, 'AYAH Conversion Error: No Session Secret');
209
+ return FALSE;
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Do a HTTPS POST, return some JSON decoded as array (Internal function)
215
+ * @param $host hostname
216
+ * @param $path path
217
+ * @param $fields associative array of fields
218
+ * return JSON decoded data structure or empty data structure
219
+ */
220
+ protected function doHttpsPostReturnJSONArray($hostname, $path, $fields) {
221
+ $result = $this->doHttpsPost($hostname, $path, $fields);
222
+
223
+ if ($result) {
224
+ $result = $this->doJSONArrayDecode($result);
225
+ } else {
226
+ $this->__log("ERROR", __FUNCTION__, "Post to https://$hostname$path returned no result.");
227
+ $result = array();
228
+ }
229
+
230
+ return $result;
231
+ }
232
+
233
+ // Internal function; does an HTTPS post
234
+ protected function doHttpsPost($hostname, $path, $fields) {
235
+ $result = "";
236
+ // URLencode the post string
237
+ $fields_string = "";
238
+ foreach($fields as $key=>$value) {
239
+ if (is_array($value)) {
240
+ if ( ! empty($value)) {
241
+ foreach ($value as $k => $v) {
242
+ $fields_string .= $key . '['. $k .']=' . $v . '&';
243
+ }
244
+ } else {
245
+ $fields_string .= $key . '=&';
246
+ }
247
+ } else {
248
+ $fields_string .= $key.'='.$value.'&';
249
+ }
250
+ }
251
+ rtrim($fields_string,'&');
252
+
253
+ // cURL or something else
254
+ if (function_exists('curl_init'))
255
+ {
256
+ // Build the cURL url.
257
+ $curl_url = "https://" . $hostname . $path;
258
+
259
+ // Log it.
260
+ $this->__log("DEBUG", __FUNCTION__, "Using cURl: url='$curl_url', fields='$fields_string'");
261
+
262
+ // Initialize cURL session.
263
+ if ($ch = curl_init($curl_url))
264
+ {
265
+ // Set the cURL options.
266
+ curl_setopt($ch, CURLOPT_POST, count($fields));
267
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
268
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
269
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
270
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
271
+
272
+ // Execute the cURL request.
273
+ $result = curl_exec($ch);
274
+
275
+ // Close the curl session.
276
+ curl_close($ch);
277
+ }
278
+ else
279
+ {
280
+ // Log it.
281
+ $this->__log("DEBUG", __FUNCTION__, "Unable to initialize cURL: url='$curl_url'");
282
+ }
283
+ }
284
+ else
285
+ {
286
+ $this->__log("DEBUG", __FUNCTION__, "No cURL support....using fsockopen()");
287
+
288
+ // Build a header
289
+ $http_request = "POST $path HTTP/1.1\r\n";
290
+ $http_request .= "Host: $hostname\r\n";
291
+ $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
292
+ $http_request .= "Content-Length: " . strlen($fields_string) . "\r\n";
293
+ $http_request .= "User-Agent: AreYouAHuman/PHP " . $this->get_version_number() . "\r\n";
294
+ $http_request .= "Connection: Close\r\n";
295
+ $http_request .= "\r\n";
296
+ $http_request .= $fields_string ."\r\n";
297
+
298
+ $result = '';
299
+ $errno = $errstr = "";
300
+ $fs = fsockopen("ssl://" . $hostname, 443, $errno, $errstr, 10);
301
+ if( false == $fs ) {
302
+ $this->__log("ERROR", __FUNCTION__, "Could not open socket");
303
+ } else {
304
+ fwrite($fs, $http_request);
305
+ while (!feof($fs)) {
306
+ $result .= fgets($fs, 4096);
307
+ }
308
+
309
+ $result = explode("\r\n\r\n", $result, 2);
310
+ $result = $result[1];
311
+ }
312
+ }
313
+
314
+ // Log the result.
315
+ $this->__log("DEBUG", __FUNCTION__, "result='$result'");
316
+
317
+ // Return the result.
318
+ return $result;
319
+ }
320
+
321
+ // Internal function: does a JSON decode of the string
322
+ protected function doJSONArrayDecode($string) {
323
+ $result = array();
324
+
325
+ if (function_exists("json_decode")) {
326
+ try {
327
+ $result = json_decode( $string);
328
+ } catch (Exception $e) {
329
+ $this->__log("ERROR", __FUNCTION__, "Exception when calling json_decode: " . $e->getMessage());
330
+ $result = null;
331
+ }
332
+ } elseif (file_Exists("json.php")) {
333
+ require_once('json.php');
334
+ $json = new Services_JSON();
335
+ $result = $json->decode($string);
336
+
337
+ if (!is_array($result)) {
338
+ $this->__log("ERROR", __FUNCTION__, "Expected array; got something else: $result");
339
+ $result = array();
340
+ }
341
+ } else {
342
+ $this->__log("ERROR", __FUNCTION__, "No JSON decode function available.");
343
+ }
344
+
345
+ return $result;
346
+ }
347
+
348
+ /**
349
+ * Get the current debug mode (TRUE or FALSE)
350
+ *
351
+ * @return boolean
352
+ */
353
+ public function debug_mode($mode=null)
354
+ {
355
+ // Set it if the mode is passed.
356
+ if (null !== $mode)
357
+ {
358
+ $this->__debug_mode = $mode;
359
+
360
+ // Display a message if debug_mode is TRUE.
361
+ if ($mode)
362
+ {
363
+ $version_number = $this->get_version_number();
364
+ $this->__log("DEBUG", "", "Debug mode is now on. (ayah.php version=$version_number)");
365
+
366
+ // Flush the buffer.
367
+ $this->__flush_message_buffer();
368
+ }
369
+ }
370
+
371
+ // If necessary, set the default.
372
+ if ( ! isset($this->__debug_mode) or (null == $this->__debug_mode)) $this->__debug_mode = FALSE;
373
+
374
+ // Return TRUE or FALSE.
375
+ return ($this->__debug_mode)? TRUE : FALSE;
376
+ }
377
+
378
+ /**
379
+ * Get the current version number
380
+ *
381
+ * @return string
382
+ */
383
+ public function get_version_number()
384
+ {
385
+ return (isset($this->__version_number))? $this->__version_number : FALSE;
386
+ }
387
+
388
+ /**
389
+ * Load the config file.
390
+ *
391
+ * @return boolean
392
+ */
393
+ private function __load_config_file()
394
+ {
395
+ // Initialize.
396
+ $name = 'ayah_config.php';
397
+ $locations = array(
398
+ './',
399
+ dirname(__FILE__)."/",
400
+ );
401
+
402
+ // Look for the config file in each location.
403
+ foreach ($locations as $location)
404
+ {
405
+ if (file_exists($location.$name))
406
+ {
407
+ require_once($location.$name);
408
+ return TRUE;
409
+ }
410
+ }
411
+
412
+ // Could not find the config file.
413
+ return FALSE;
414
+ }
415
+
416
+ /**
417
+ * Log a message
418
+ *
419
+ * @return null
420
+ */
421
+ private function __log($type, $function, $message)
422
+ {
423
+ // Add a prefix to the message.
424
+ $message = __CLASS__ . "::$function: " . $message;
425
+
426
+ // Is it an error message?
427
+ if (FALSE !== stripos($type, "error"))
428
+ {
429
+ error_log($message);
430
+ }
431
+
432
+ // Build the full message.
433
+ $message_style = "padding: 10px; border: 1px solid #EED3D7; background: #F2DEDE; color: #B94A48;";
434
+ $full_message = "<p style=\"$message_style\"><strong>$type:</strong> $message</p>\n";
435
+
436
+ // Output to the screen too?
437
+ if ($this->debug_mode())
438
+ {
439
+ echo "$full_message";
440
+ }
441
+ else
442
+ {
443
+ // Add the message to the buffer in case we need it later.
444
+ $this->__message_buffer[] = $full_message;
445
+ }
446
+ }
447
+
448
+ private function __flush_message_buffer()
449
+ {
450
+ // Flush the buffer.
451
+ if ( ! empty($this->__message_buffer))
452
+ {
453
+ foreach ($this->__message_buffer as $buffered_message)
454
+ {
455
+ // Print the buffered message.
456
+ echo "$buffered_message";
457
+ }
458
+ }
459
+ }
460
+ }
461
+
package.xml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Sellry_Humanfriendlycaptcha</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL 3.0)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Protect your Magento form submissions from spammers with CAPTCHAs that humans can actually understand.</summary>
10
+ <description>Robots are getting smarter even as CAPTCHAs become less and less intelligible. This extension installs human-friendly CAPTCHA onto your Magento forms. Choose from standard Magento forms you want to protect, or add pages by URL that need protection.
11
+
12
+ Works with the following CAPTCHAs:
13
+
14
+ Are You a Human</description>
15
+ <notes>First preview release</notes>
16
+ <authors><author><name>Sellry</name><user>auto-converted</user><email>sales@sellry.com</email></author></authors>
17
+ <date>2013-12-12</date>
18
+ <time>18:53:28</time>
19
+ <contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="sellry"><dir name="humanfriendlycaptcha"><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="4ffda31ed5a854e6d03df65fda40eeab"/></dir></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="sellry_humanfriendlycaptcha.xml" hash="f62470104a87239680cca79be096d98c"/></dir><dir name="template"><dir name="sellry"><dir name="humanfriendlycaptcha"><file name="humanfriendlycaptcha.phtml" hash="8e8c779d1f4261c8b7354f127d4c5180"/></dir></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="sellry"><file name="humanfriendlycaptcha.js" hash="8f71fd680038cf42f29a257f1aff86e9"/></dir></dir></target><target name="magecommunity"><dir name="Sellry"><dir name="Humanfriendlycaptcha"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="ece13d217b1ebfe0e36ba6fccc776e93"/></dir></dir></dir></dir><dir name="Core"><dir name="Text"><file name="List.php" hash="14dfceedfff6897587044d6a1d03347b"/></dir></dir><dir name="Customer"><dir name="Form"><file name="Register.php" hash="e5a69c958ec9dbbf3acdb3a03fb87e83"/></dir></dir><dir name="Newsletter"><file name="Subscribe.php" hash="a511133a5ef347cf96b72014effa5d43"/></dir><dir name="Review"><file name="Form.php" hash="e19dbd18afed68e0920145e60a1c87f9"/></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Pages.php" hash="625a666baf27f37e590bc5f7737cc926"/></dir></dir></dir></dir><file name="Humanfriendlycaptcha.php" hash="8412803f2df929af4cd91dc47112db49"/></dir><dir name="controllers"><file name="IndexController.php" hash="86db65a7958c5f55bdd591ce3a098099"/></dir><dir name="etc"><file name="config.xml" hash="b81396a765670564f7111e145628e72f"/><file name="system.xml" hash="93c17ac2da194b937c8d9288e74ba2ab"/></dir><dir name="Helper"><file name="Data.php" hash="732e6ffaa3ef704147d49186ffd2164f"/><file name="Recaptcha.php" hash="10d0dff1e96048acc379e6f1ffd418d5"/></dir><dir name="Model"><dir name="System"><dir name="Config"><dir name="Backend"><file name="Pages.php" hash="fdc321fb336eba011139898148b91e80"/></dir><dir name="Source"><file name="Forms.php" hash="026e2cd45ce1c8a13c4f0d23b6d95fa9"/></dir></dir></dir><file name="Humanfriendlycaptcha.php" hash="4591ab13d33f39175b4efb2f14c2daa3"/><file name="Observer.php" hash="ba3341c6c6776d96cf613622c9c7bc3c"/></dir><dir name="sql"><dir name="humanfriendlycaptcha_setup"><file name="mysql4-install-1.0.0.php" hash="2ce8c8ee2a56cb462ed62d289a0e6e77"/></dir></dir></dir></dir></target><target name="magelib"><dir name="."><file name="AYAH.php" hash="198ddd78f6b3b5161eb1a3c9d2c602e2"/></dir></target></contents>
20
+ <compatible/>
21
+ <dependencies/>
22
+ </package>