Commerce_Sciences - Version 1.0.36

Version Notes

Stable

Download this release

Release Info

Developer Magento Core Team
Extension Commerce_Sciences
Version 1.0.36
Comparing to
See all releases


Version 1.0.36

Files changed (22) hide show
  1. app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/About.php +90 -0
  2. app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/Campaignid.php +111 -0
  3. app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/Group/About.php +27 -0
  4. app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/Isactive.php +79 -0
  5. app/code/local/Commercesciences/Base/Helper/Data.php +330 -0
  6. app/code/local/Commercesciences/Base/Model/Adminhtml/System/Config/Source/Fontstyle.php +32 -0
  7. app/code/local/Commercesciences/Base/Model/Config.php +10 -0
  8. app/code/local/Commercesciences/Base/Model/Mysql4/Config.php +11 -0
  9. app/code/local/Commercesciences/Base/Model/Observer.php +163 -0
  10. app/code/local/Commercesciences/Base/Model/Resource/Setup.php +6 -0
  11. app/code/local/Commercesciences/Base/controllers/ApiController.php +38 -0
  12. app/code/local/Commercesciences/Base/etc/config.xml +130 -0
  13. app/code/local/Commercesciences/Base/etc/system.xml +76 -0
  14. app/code/local/Commercesciences/Base/sql/commercesciences_base_setup/mysql4-install-0.0.1.php +22 -0
  15. app/design/adminhtml/default/default/layout/commercesciences.xml +8 -0
  16. app/etc/modules/Commercesciences_Base.xml +8 -0
  17. package.xml +18 -0
  18. skin/adminhtml/default/default/commercesciences/css/skin.css +328 -0
  19. skin/adminhtml/default/default/commercesciences/images/CS-Logo-innerpage.png +0 -0
  20. skin/adminhtml/default/default/commercesciences/images/icons-boxed.png +0 -0
  21. skin/adminhtml/default/default/commercesciences/images/intro-img.png +0 -0
  22. skin/adminhtml/default/default/commercesciences/images/setup-takes-2-minutes.png +0 -0
app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/About.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Commercesciences_Base_Block_Adminhtml_Config_Form_Renderer_About extends Mage_Adminhtml_Block_System_Config_Form_Field
4
+ {
5
+ protected $_csHelper = null;
6
+
7
+ /**
8
+ * retrieve the module helper
9
+ * @return Commercesciences_Base_Helper_Data
10
+ */
11
+ protected function getCsHelper(){
12
+ if(!$this->_csHelper){
13
+ $this->_csHelper = Mage::helper("commercesciences_base");
14
+ }
15
+ return $this->_csHelper;
16
+ }
17
+
18
+ /**
19
+ * renders and returns the full HTML of the lower part (about) on the configurations panel
20
+ * here we can decide just not to show anything
21
+ *
22
+ * @param Varien_Data_Form_Element_Abstract $element
23
+ * @return string
24
+ */
25
+ public function render(Varien_Data_Form_Element_Abstract $element){
26
+ $html = '<div class="cs_styles">
27
+ <div class="cs_wrap">
28
+ <div id="main" style="">
29
+
30
+ <div class="cs_key-text-block">
31
+ <div class="cs_container">
32
+ <div class="cs_row">
33
+ <div class="cs_span12">
34
+ <h3><strong>The Personal Bar<span class="cs_sans-serif cs_tm">™</span> Is a free E-Commerce add-on, floating at the bottom of your site\'s pages,</strong></h3>
35
+ <h3><strong>designed to ease navigation, increase engagement and revenue</strong></h3>
36
+ </div>
37
+ </div>
38
+ <div class="cs_setup-takes-2-min"></div>
39
+ </div>
40
+ </div>
41
+
42
+ <div class="cs_bar-guide-block">
43
+ <div class="cs_bar-guide-img"></div>
44
+ </div>
45
+
46
+ <div class="cs_details-block">
47
+ <div class="cs_container">
48
+ <div class="cs_row cs_highlight-details" id="getIntuitive">
49
+ <div class="cs_span2 cs_feature-icon"></div>
50
+ <div class="cs_span10 cs_highlight-details-desc">
51
+ <h3><strong>Get Intuitive.</strong> Enable quick access to key site\'s assets, anywhere.</h3>
52
+ <p>Avoid shoppers abandonment due to complex navigation. Improve site usability by gathering all key assets in one intuitive place which is always-on. Adding a <strong>Personal Bar</strong>™ will ease navigation with <i>Search &amp; Checkout</i>, emphasize customer care with <i>Chat &amp; Feedback</i>, boost social with <i>Facebook Like &amp; Google’s +1</i>. It\'s based on your existing site capabilities (e.g. search) as well as offers many new experiences.</p>
53
+ </div>
54
+ </div>
55
+
56
+ <div class="cs_row highlight-details" id="standOut">
57
+ <div class="cs_span10 cs_highlight-details-desc">
58
+ <h3><strong>Stand Out.</strong> Add a stunning edge to your online store in minutes.</h3>
59
+ <p>Improve your brand recognition through a compelling shopping experience. Creating your own <strong>Personal Bar</strong>™ is easy. You don\'t need to be a web designer or developer. Just choose or create a <strong>Personal Bar</strong>™ theme you love and customize it to your needs through our easy-to-use Config Panel. Upload your own logo and add a lovable Personal Shopper to enhance your store’s design.</p>
60
+ </div>
61
+ <div class="cs_span2 cs_feature-icon cs_stand-out"></div>
62
+ </div>
63
+
64
+ <div class="cs_row cs_highlight-details" id="growSales">
65
+ <div class="cs_span2 cs_feature-icon cs_grow-sales"></div>
66
+ <div class="cs_span10 cs_highlight-details-desc">
67
+ <h3><strong>Grow Sales.</strong> Increase your traffic and Facebook fanbase.</h3>
68
+ <p>In today\'s era of Social SEO, gaining social visibility is critical to your store\'s success. Recent studies show that up to 30% of traffic comes from social networks such as Facebook, Google +1 and Pinterest. The <strong>Personal Bar</strong>™ is designed to enable shoppers to easily share with their Facebook friends, join your fanbase, and click on +1 improving your Google ranking. And the best part - it encourages shoppers to further engage by rewarding them with a compelling coupon.</p>
69
+ </div>
70
+ </div>
71
+
72
+
73
+ </div>
74
+ </div>
75
+
76
+ <div class="cs_ending-block">
77
+ <div class="link-ph">
78
+ <p>Have Questions? <a class="start-now" href="http://commercesciences.com/contact">contact us</a></p>
79
+ </div>
80
+ </div>
81
+
82
+ </div>
83
+ </div>
84
+ </div>';
85
+
86
+
87
+ return $html;
88
+ }
89
+
90
+ }
app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/Campaignid.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Commercesciences_Base_Block_Adminhtml_Config_Form_Renderer_Campaignid extends Mage_Adminhtml_Block_System_Config_Form_Field
4
+ {
5
+ protected $_csHelper = null;
6
+
7
+ /**
8
+ * retrieve the module helper
9
+ * @return Commercesciences_Base_Helper_Data
10
+ */
11
+ protected function getCsHelper(){
12
+ if(!$this->_csHelper){
13
+ $this->_csHelper = Mage::helper("commercesciences_base");
14
+ }
15
+ return $this->_csHelper;
16
+ }
17
+
18
+
19
+ /**
20
+ * renders and returns the full HTML of the upper part (email) on the configurations panel
21
+ * here we can decide just not to show anything
22
+ *
23
+ * @param Varien_Data_Form_Element_Abstract $element
24
+ * @return string
25
+ */
26
+ public function render(Varien_Data_Form_Element_Abstract $element){
27
+ $html = '<script type="text/javascript">
28
+ document.observe("dom:loaded", function() {
29
+
30
+ $$(".scalable.save").each(function(element){
31
+ element.writeAttribute("onclick",null);
32
+ element.observe("click", function(event){
33
+ $$(".scalable.save").each(function(element){
34
+ element.writeAttribute("disabled","disabled");
35
+ });
36
+ configForm.submit();
37
+ });
38
+
39
+ });
40
+
41
+ });
42
+ </script>
43
+ ';
44
+
45
+ try{
46
+
47
+ $step = $this->getCsHelper()->getStep();
48
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
49
+
50
+ if(!$element->getValue()){
51
+ $currentUser = Mage::getSingleton('admin/session');
52
+ $currentUserEmail = $currentUser->getUser()->getEmail();
53
+
54
+ $element->setValue($currentUserEmail);
55
+ }
56
+ $inputBox = $element->getElementHtml();
57
+ $configEditBlock = Mage::getBlockSingleton("adminhtml/system_config_edit");
58
+ /* @var Mage_Adminhtml_Block_Widget_Button $saveButton */
59
+ $saveButton = $configEditBlock->getLayout()->createBlock('adminhtml/widget_button')
60
+ ->setData(array(
61
+ 'label' => Mage::helper('adminhtml')->__('Create My Account &#187;'),
62
+ 'onclick' => 'configForm.submit()',
63
+ 'class' => 'save',
64
+ ));
65
+ if($step == Commercesciences_Base_Helper_Data::STEP_ZERO){
66
+ $html .= '<div class="cswrapper form-list">';
67
+ $html .= '<div class="csexp1">'.$this->__("You're almost there! Please enter your email below to activate your account (Note: this email would be used to provide you updates and reports).").'</div>';
68
+ $html .= '<div class="csexp2"><div class="csexp2_left">Email Address</div><div class="csexp2_right">'.$inputBox.'</div></div>';
69
+ $html .= '<div class="csexp3"><div class="csexp3_left">Is Live on your store?</div><div class="csexp2_right"><select class="csexpt_right_select" disabled="disabled"><option>No</option></select><p class="note"><span>The personal bar will be hidden from your shoppers until you click "Go Live" from your Config Panel or your Magento dashboard.</span></p>'.$saveButton->toHtml();
70
+ $html .= '<p class="note"><span style="color:#ff0000;">Before clicking "Create My Account" - Please make sure you have logged-out and logged back in from your Magento admin, <br>and that you have clicked "Flush Magento Cache" (under System &gt; Cache Management)</span></p>';
71
+ $html .= '</div></div>';
72
+ $html .= '</div>';
73
+
74
+ return $html;
75
+ }
76
+ if($step == Commercesciences_Base_Helper_Data::STEP_ONE){
77
+ $linkToConfBar = 'http://commercesciences.com/magento/configureInitial?userID='.$csConfig->getUserId().'&securityToken='.$csConfig->getSecurityToken();
78
+
79
+ $html .= '<div class="cswrapper form-list">';
80
+ $html .= '<div class="csexp11">';
81
+ $html .= '<div class="csexp11_1">'.$this->__("Congratulations! Your new Personal Bar account is now ready.").'</div>';
82
+ $html .= '<div class="csexp11_2">'.$this->__("To configure the Personal Bar Experiences, Style and more, please click on Go to my Config Panel below.").'</div>';
83
+ $html .= '<div class="csexp11_3">'.$this->__("Your personal Bar will remain hidden from your store visitors until you Publish it.").'</div>';
84
+ $html .= '</div>';
85
+ $html .= '<div class="csexp11_5">'.$this->__("Personal Bar Settings").'</div>';
86
+ $html .= '<div class="csexp11_6">'.$this->__("The Personal Bar is fully customizable to fit your store's look & feel and to help you increase engagement and revenue.").'</div>';
87
+ $html .= '<div class="csexp11_7"><a href="'.$linkToConfBar.'" target="_blank">'.$this->__("Go to my Config Panel&#187;").'</a></div>';
88
+
89
+ $html .= '</div>';
90
+
91
+ return $html;
92
+ }
93
+ if($step == Commercesciences_Base_Helper_Data::STEP_TWO){
94
+ $linkToConfBar = 'http://commercesciences.com/magento/configureInitial?userID='.$csConfig->getUserId().'&securityToken='.$csConfig->getSecurityToken();
95
+
96
+ $html .= '<div class="cswrapper form-list">';
97
+ $html .= '<div class="csexp21">'.$this->__("Personal Bar Settings").'</div>';
98
+ $html .= '<div class="csexp22">'.$this->__("The Personal Bar is fully customizable to fit your store’s look & feel and to help you increase engagement and revenue.").'</div>';
99
+ $html .= '<div class="csexp23"><a href="'.$linkToConfBar.'" target="_blank">'.$this->__("Go to my Config Panel&#187;").'</a></div>';
100
+ $html .= '</div>';
101
+
102
+ return $html;
103
+ }
104
+
105
+ return '';
106
+ }catch(Exception $e){
107
+ return '';
108
+ }
109
+ }
110
+
111
+ }
app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/Group/About.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Commercesciences_Base_Block_Adminhtml_Config_Form_Renderer_Group_About extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
4
+ {
5
+ protected $_csHelper = null;
6
+
7
+ /**
8
+ * retrieve the module helper
9
+ * @return Commercesciences_Base_Helper_Data
10
+ */
11
+ protected function getCsHelper(){
12
+ if(!$this->_csHelper){
13
+ $this->_csHelper = Mage::helper("commercesciences_base");
14
+ }
15
+ return $this->_csHelper;
16
+ }
17
+
18
+ public function render(Varien_Data_Form_Element_Abstract $element)
19
+ {
20
+ $step = $this->getCsHelper()->getStep();
21
+ if($step != Commercesciences_Base_Helper_Data::STEP_ZERO){
22
+ return '';
23
+ }
24
+
25
+ return parent::render($element);
26
+ }
27
+ }
app/code/local/Commercesciences/Base/Block/Adminhtml/Config/Form/Renderer/Isactive.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Commercesciences_Base_Block_Adminhtml_Config_Form_Renderer_Isactive extends Mage_Adminhtml_Block_System_Config_Form_Field
4
+ {
5
+ protected $_csHelper = null;
6
+
7
+ /**
8
+ * retrieve the module helper
9
+ * @return Commercesciences_Base_Helper_Data
10
+ */
11
+ protected function getCsHelper(){
12
+ if(!$this->_csHelper){
13
+ $this->_csHelper = Mage::helper("commercesciences_base");
14
+ }
15
+ return $this->_csHelper;
16
+ }
17
+
18
+
19
+ /**
20
+ * renders and returns the full HTML of the lower part (is_active) on the configurations panel
21
+ * here we can decide just not to show anything
22
+ *
23
+ * @param Varien_Data_Form_Element_Abstract $element
24
+ * @return string
25
+ */
26
+ public function render(Varien_Data_Form_Element_Abstract $element){
27
+ try{
28
+
29
+ $step = $this->getCsHelper()->getStep();
30
+ if($step == Commercesciences_Base_Helper_Data::STEP_ZERO || $step == Commercesciences_Base_Helper_Data::STEP_ONE){
31
+ return '';
32
+ }
33
+
34
+ $activeState = $this->getCsHelper()->getActiveState();
35
+ if($activeState['error'] != false){
36
+ throw new Exception($activeState['error']);
37
+ }
38
+ $visible = -1;
39
+ if($activeState['data']=='Hidden'){
40
+ $visible = 0;
41
+ }elseif($activeState['data']=='Visible'){
42
+ $visible = 1;
43
+ }else{
44
+ throw new Exception($this->__("Error ocurred. Your updates weren't saved. Please contact ComemrceScience for support (error id: 005)"));
45
+ }
46
+
47
+ $element->setValue($visible);
48
+ $selectBox = $element->getElementHtml();
49
+
50
+ $configEditBlock = Mage::getBlockSingleton("adminhtml/system_config_edit");
51
+ /* @var Mage_Adminhtml_Block_Widget_Button $saveButton */
52
+ $saveButton = $configEditBlock->getLayout()->createBlock('adminhtml/widget_button')
53
+ ->setData(array(
54
+ 'label' => Mage::helper('adminhtml')->__('Save Config'),
55
+ 'onclick' => 'configForm.submit()',
56
+ 'class' => 'save',
57
+ ));
58
+
59
+ if($step == Commercesciences_Base_Helper_Data::STEP_ONE){
60
+ $html = '<div class="cswrapper form-list">';
61
+ $html .= '<div class="csexp12"><div class="csexp12_left">Enabled?</div><div class="csexp12_right">'.$selectBox.$saveButton->toHtml().'</div></div>';
62
+ $html .= '</div>';
63
+
64
+ return $html;
65
+ }
66
+ if($step == Commercesciences_Base_Helper_Data::STEP_TWO){
67
+ $html = '<div class="cswrapper form-list">';
68
+ $html .= '<div class="csexp24"><div class="csexp24_left">Is Live on my store?</div><div class="csexp24_right">'.$selectBox.$saveButton->toHtml().'</div></div>';
69
+ $html .= '<div class="csexp25"><div class="csexp25_left">'.$this->__("Have questions? contact our").'</div> <a class="csexp25_left2" href="mailto: support@commercesciences.com">'.$this->__("support team").'</a></div>';
70
+ $html .= '</div>';
71
+
72
+ return $html;
73
+ }
74
+ }catch(Exception $e){
75
+ return '';
76
+ }
77
+
78
+ }
79
+ }
app/code/local/Commercesciences/Base/Helper/Data.php ADDED
@@ -0,0 +1,330 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Commercesciences_Base_Helper_Data extends Mage_Core_Helper_Abstract{
4
+
5
+ const STEP_ZERO = 0;
6
+ const STEP_ONE = 1;
7
+ const STEP_TWO = 2;
8
+
9
+ const CONFIG_EMAIL = 'commercesciences/required_param/email';
10
+ const DEFAULT_MYSQL_TIMEOUT = 10;
11
+
12
+ /**
13
+ * handles the errors
14
+ */
15
+ public function handleError($error){
16
+ //Mage::log("Error:".$error, null, 'cs-error.log', true);
17
+ throw new Exception($error);
18
+ }
19
+
20
+ /**
21
+ * return the current step of the system
22
+ *
23
+ * @return int
24
+ */
25
+ public function getStep(){
26
+ if(!$this->_step){
27
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
28
+ if(!$csConfig || !$csConfig->getId()){
29
+ $csConfig = Mage::getModel("commercesciences_base/config");
30
+ $csConfig->save();
31
+ }
32
+ if(!$csConfig->getUserId()){
33
+ $this->_step = Commercesciences_Base_Helper_Data::STEP_ZERO;
34
+ return $this->_step;
35
+ }
36
+
37
+ //we have userId its step 1 or 2
38
+ $aStateArr = $this->getActiveState();
39
+ if($aStateArr['error'] != false){
40
+ $this->handleError($aStateArr['error']);
41
+ return;
42
+ }
43
+ if($aStateArr['data'] == 'NotConfigured'){
44
+ $this->_step = Commercesciences_Base_Helper_Data::STEP_ONE;
45
+ }elseif($aStateArr['data'] == 'Hidden' || $aStateArr['data'] == 'Visible'){
46
+ $this->_step = Commercesciences_Base_Helper_Data::STEP_TWO;
47
+ }else{
48
+ $error = $this->__("Error ocurred. Your updates weren't saved. Please contact ComemrceScience for support (error id: 005)");
49
+ //Mage::log("Error:".$error, null, 'cs-error.log', true);
50
+ throw new Exception($error);
51
+ return;
52
+ }
53
+ }
54
+
55
+ return $this->_step;
56
+ }
57
+
58
+ /**
59
+ * converts the first layer of stdObject to array
60
+ * @param stdObject $stdObj
61
+ * @return array
62
+ */
63
+ public function stdObject2Array($stdObj)
64
+ {
65
+ if (is_object($stdObj)){
66
+ $stdObj = get_object_vars($stdObj);
67
+ }
68
+ return $stdObj;
69
+ }
70
+
71
+ /**
72
+ * register the email + domain on commercesciences
73
+ *
74
+ * @return array - format [error] => ''
75
+ */
76
+ public function register($email, $storeUrl){
77
+
78
+ $RESTClient = new Zend_Rest_Client("http://api.commercesciences.com");
79
+
80
+ $httpClient = $RESTClient->getHttpClient();
81
+ $httpClient->setConfig(array(
82
+ "timeout" => 30
83
+ ));
84
+
85
+ try {
86
+
87
+ //Mage::log("xxx", null, "debug6.log", true);
88
+
89
+ $timeBeforeApiCall = time();
90
+
91
+ $response = $RESTClient->restPost("/magento/registerPost", array('email' => $email, 'storeURL'=>$storeUrl));
92
+ $responseJson = $response->getBody();
93
+
94
+ $timeAfterApiCall = time();
95
+ //Mage::log("yyy-".$responseJson, null, "debug6.log", true);
96
+ //Mage::log("zzz-".($timeAfterApiCall-$timeBeforeApiCall), null, "debug6.log", true);
97
+
98
+ //fictive
99
+ //$responseJson = '{"good":true,"data":{"securityToken":"qfJpXFdiccH2LtAXy3U3mMZFRNiAbMsiGocKpk9RLarqda9001YYxXjYyQwy","userID":12296,"tag":"\u003c!-- CS Bar --\u003e\r\n\u003cscript type\u003d\u0027text/javascript\u0027\u003e\r\nvar script \u003d document.createElement(\u0027script\u0027);\r\nscript.type \u003d \u0027text/javascript\u0027;\r\nscript.src \u003d ((document.location.protocol \u003d\u003d \u0027https:\u0027) ? \u0027https://\u0027 : \u0027http://\u0027) +\r\n \u0027app.cdn-cs.com/b/4Udqvg/k9rip6/l/cs_all.js\u0027;\r\ndocument.getElementsByTagName(\u0027head\u0027)[0].appendChild(script);\r\n\u003c/script\u003e\r\n\u003c!-- end CS --\u003e\r\n"}}';
100
+
101
+ //Mage::log("response-".$responseJson, null, 'debug4.log', true);
102
+
103
+ //fictive response for testing
104
+
105
+ /*$parsedResponse = array(
106
+ 'security_token' => 'abcdefghijklmnop',
107
+ 'user_id' => '123456',
108
+ 'tag' => '<script type="text/javascript">alert(\'Hello!\');</script>'
109
+ );
110
+ */
111
+
112
+ $parsedResponseArr = $this->stdObject2Array(json_decode($responseJson));
113
+ if(!isset($parsedResponseArr['good'])){
114
+ //timeout occured
115
+ return array('error' => $this->__("The CommerceSciences server is currently busy, your updates weren't saved. Please try again later. (error id: 003)"));
116
+ }
117
+ if($parsedResponseArr['good'] == false){
118
+ if(isset($parsedResponseArr['fieldErrors']) && $parsedResponseArr['fieldErrors']){
119
+ $fieldErrorsArr = $parsedResponseArr['fieldErrors'];
120
+ $errorMsg = '';
121
+ foreach($fieldErrorsArr as $field => $fError){
122
+ $errorMsg .= $this->__($fError).",";
123
+ }
124
+ //remove the last comma
125
+ $errorMsg = substr($errorMsg, 0, strlen($errorMsg)-1);
126
+ return array('error' => $errorMsg);
127
+ }elseif(isset($parsedResponseArr['globalError']) && $parsedResponseArr['globalError']){
128
+ return array('error' => $this->__($parsedResponseArr['globalError']));
129
+ }
130
+ }
131
+ $parsedResponse = $this->stdObject2Array($parsedResponseArr['data']);
132
+
133
+ if(!isset($parsedResponse['securityToken']) || !$parsedResponse['securityToken']
134
+ || !isset($parsedResponse['userID']) || !$parsedResponse['userID']
135
+ || !isset($parsedResponse['tag']) || !$parsedResponse['tag']){
136
+ return $this->__("Error ocurred. Your updates weren't saved. Please contact ComemrceScience for support (error id: 001)");
137
+ }
138
+
139
+ if($timeAfterApiCall-$timeBeforeApiCall > self::DEFAULT_MYSQL_TIMEOUT){
140
+ //Mage::log("ffff", null, "debug6.log", true);
141
+
142
+ //pobably mysql serer has gone away, save data in the session
143
+
144
+ $adminSession = Mage::getModel('customer/session');
145
+ $adminSession->setCsUserId($parsedResponse['userID']);
146
+ $adminSession->setCsSecurityToken($parsedResponse['securityToken']);
147
+ $adminSession->setCsTag($parsedResponse['tag']);
148
+ }else{
149
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
150
+ if(!$csConfig){
151
+ $csConfig = Mage::getModel("commercesciences_base/config");
152
+ }
153
+ $csConfig->setStep(Commercesciences_Base_Helper_Data::STEP_ONE)
154
+ ->setSecurityToken($parsedResponse['securityToken'])
155
+ ->setUserId($parsedResponse['userID'])
156
+ ->setTag($parsedResponse['tag'])
157
+ ->save();
158
+ }
159
+
160
+
161
+
162
+
163
+ return array('error' => false);
164
+ }catch(Exception $e){
165
+ //timeout or other unhandled exception was thrown
166
+ return array('error' => $this->__($e->getMessage()));
167
+ }
168
+ }
169
+
170
+ /**
171
+ * Change the is_state of the bar
172
+ *
173
+ * @param int $changeTo
174
+ * @return array
175
+ */
176
+ protected function changeActiveState($changeTo=1){
177
+
178
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
179
+ if(!$csConfig || !$csConfig->getUserId() || !$csConfig->getSecurityToken()){
180
+ //we must be already at least on step 1, so the DB record has to exist
181
+ return array('error' => $this->__("Error ocurred. Your updates weren't saved. Please contact ComemrceScience for support (error id: 002)"));
182
+ }
183
+
184
+ $RESTClient = new Zend_Rest_Client("http://api.commercesciences.com");
185
+
186
+ $httpClient = $RESTClient->getHttpClient();
187
+ $httpClient->setConfig(array(
188
+ "timeout" => 30
189
+ ));
190
+
191
+ try{
192
+ if($changeTo){
193
+ $response = $RESTClient->restPost("/magento/showBarPost", array('userID' => $csConfig->getUserId(), 'securityToken'=>$csConfig->getSecurityToken()));
194
+ }else{
195
+ $response = $RESTClient->restPost("/magento/hideBarPost", array('userID' => $csConfig->getUserId(), 'securityToken'=>$csConfig->getSecurityToken()));
196
+ }
197
+
198
+ $responseJson = $response->getBody();
199
+ //Mage::log("activation-response-".$responseJson, null, 'debug4.log', true);
200
+
201
+ $parsedResponseArr = $this->stdObject2Array(json_decode($responseJson));
202
+ if(!isset($parsedResponseArr['good'])){
203
+ return $this->__("The CommerceSciences server is currently busy, your updates weren't saved. Please try again later. (error id: 004)");
204
+ }
205
+ if($parsedResponseArr['good'] == false){
206
+ if(isset($parsedResponseArr['fieldErrors']) && $parsedResponseArr['fieldErrors']){
207
+ $fieldErrorsArr = $parsedResponseArr['fieldErrors'];
208
+ $errorMsg = '';
209
+ foreach($fieldErrorsArr as $field => $fError){
210
+ $errorMsg .= $this->__($fError).",";
211
+ }
212
+ //remove the last comma
213
+ $errorMsg = substr($errorMsg, 0, strlen($errorMsg)-1);
214
+ return array('error' => $errorMsg);
215
+ }elseif(isset($parsedResponseArr['globalError']) && $parsedResponseArr['globalError']){
216
+ return array('error' => $this->__($parsedResponseArr['globalError']));
217
+ }
218
+ }
219
+
220
+ return array('error'=> false, 'data' => ($parsedResponseArr['data']==true ? 1 : 0));
221
+
222
+
223
+ }catch(Exception $e){
224
+ //timeout or other unhandled exception was thrown
225
+ return array('error' => $this->__($e->getMessage()));
226
+ }
227
+ }
228
+
229
+ /**
230
+ * activate the CS bar
231
+ *
232
+ * @return array
233
+ */
234
+ public function activate(){
235
+ $this->changeActiveState(1);
236
+ }
237
+
238
+ /**
239
+ * deactivate the CS bar
240
+ *
241
+ * @return array
242
+ */
243
+ public function deactivate(){
244
+ $this->changeActiveState(0);
245
+ }
246
+
247
+ /**
248
+ * get commercesciences tag
249
+ *
250
+ * @return string
251
+ */
252
+ public function getTag(){
253
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
254
+ if(!$csConfig){
255
+ return '';
256
+ }
257
+ return ($csConfig->getTag() ? $csConfig->getTag() : '');
258
+ }
259
+
260
+ /**
261
+ * check whether the bar is active
262
+ *
263
+ * @return array
264
+ */
265
+ public function getActiveState(){
266
+
267
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
268
+ if(!$csConfig){
269
+ //we must be already at least on step 1, so the DB record has to exist
270
+ return array('error' => $this->__("Error ocurred. Your updates weren't saved. Please contact ComemrceScience for support (error id: 005)"));
271
+ }
272
+
273
+
274
+ $RESTClient = new Zend_Rest_Client("http://api.commercesciences.com");
275
+
276
+ $httpClient = $RESTClient->getHttpClient();
277
+ $httpClient->setConfig(array(
278
+ "timeout" => 30
279
+ ));
280
+
281
+ try{
282
+ $response = $RESTClient->restGet("/magento/getBarStatus", array('userID' => $csConfig->getUserId(), 'securityToken'=>$csConfig->getSecurityToken()));
283
+
284
+ $responseJson = $response->getBody();
285
+ //dummy response
286
+ //$responseJson = '{"good":true,"data":"Hidden"}';
287
+
288
+ $parsedResponseArr = $this->stdObject2Array(json_decode($responseJson));
289
+
290
+
291
+ if(!isset($parsedResponseArr['good'])){
292
+ return array('error' => $this->__("The CommerceSciences server is currently busy, your updates weren't saved. Please try again later. (error id: 006)"));
293
+ }
294
+ if($parsedResponseArr['good'] == false){
295
+ if(isset($parsedResponseArr['fieldErrors']) && $parsedResponseArr['fieldErrors']){
296
+ $fieldErrorsArr = $parsedResponseArr['fieldErrors'];
297
+ $errorMsg = '';
298
+ foreach($fieldErrorsArr as $field => $fError){
299
+ $errorMsg .= $fError.",";
300
+ }
301
+ $errorMsg = substr($errorMsg, 0, strlen($errorMsg)-1);
302
+ return array('error' => $errorMsg);
303
+ }elseif(isset($parsedResponseArr['globalError']) && $parsedResponseArr['globalError']){
304
+ return array('error' =>$parsedResponseArr['globalError']);
305
+ }
306
+ }
307
+ return array('error'=> false, 'data' => $parsedResponseArr['data']);
308
+ }catch(Exception $e){
309
+ return array('error' => $this->__($e->getMessage()));
310
+ }
311
+ }
312
+
313
+ /*
314
+ * get a code of the first store in the magento installation
315
+ */
316
+ public function getFirstStoreCode(){
317
+ if(!$this->_firstStore){
318
+ foreach (Mage::app()->getWebsites() as $website) {
319
+ foreach ($website->getGroups() as $group) {
320
+ $stores = $group->getStores();
321
+ foreach ($stores as $store) {
322
+ $this->_firstStore = $store->getCode();
323
+ break;
324
+ }
325
+ }
326
+ }
327
+ }
328
+ return $this->_firstStore;
329
+ }
330
+ }
app/code/local/Commercesciences/Base/Model/Adminhtml/System/Config/Source/Fontstyle.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Commercesciences_Base_Model_Adminhtml_System_Config_Source_Fontstyle{
5
+
6
+ /**
7
+ * Options getter
8
+ *
9
+ * @return array
10
+ */
11
+ public function toOptionArray()
12
+ {
13
+ $helper = Mage::helper("commercesciences_base");
14
+ $options = array(
15
+ array('value' => 0, 'label'=>$helper->__('normal')),
16
+ array('value' => 1, 'label'=>$helper->__('italic')),
17
+ array('value' => 2, 'label'=>$helper->__('oblique')),
18
+ );
19
+
20
+ return $options;
21
+ }
22
+
23
+ public function toAssocArray(){
24
+ $helper = Mage::helper("commercesciences_base");
25
+ $assocArr = array(
26
+ '0' => $helper->__('normal'),
27
+ '1' => $helper->__('italic'),
28
+ '2' => $helper->__('oblique')
29
+ );
30
+ return $assocArr;
31
+ }
32
+ }
app/code/local/Commercesciences/Base/Model/Config.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Commercesciences_Base_Model_Config extends Mage_Core_Model_Abstract
3
+ {
4
+ public function _construct ()
5
+ {
6
+ parent::_construct();
7
+ $this->_init('commercesciences_base/config');
8
+ }
9
+
10
+ }
app/code/local/Commercesciences/Base/Model/Mysql4/Config.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Commercesciences_Base_Model_Mysql4_Config extends Mage_Core_Model_Mysql4_Abstract
3
+ {
4
+ /**
5
+ * parent construct
6
+ */
7
+ public function _construct ()
8
+ {
9
+ $this->_init('commercesciences_base/config', 'entity_id');
10
+ }
11
+ }
app/code/local/Commercesciences/Base/Model/Observer.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Commercesciences_Base_Model_Observer
3
+ {
4
+ private $_putcommercesciences = false;
5
+
6
+ /**
7
+ * retrieve the module helper
8
+ * @return Commercesciences_Base_Helper_Data
9
+ */
10
+ protected function getCsHelper(){
11
+ if(!$this->_csHelper){
12
+ $this->_csHelper = Mage::helper("commercesciences_base");
13
+ }
14
+ return $this->_csHelper;
15
+ }
16
+
17
+ /**
18
+ * observer for the event core_block_abstract_to_html_after
19
+ * adds the tag of commercescience to the block html
20
+ *
21
+ * @param $observer
22
+ * @return mixed
23
+ */
24
+ public function addCommercesciencesHtml($observer)
25
+ {
26
+ if($this->_putcommercesciences){
27
+ return;
28
+ }
29
+
30
+ $request = Mage::app()->getRequest();
31
+ if(($request->getRouteName() == "adminhtml")){
32
+ return;
33
+ }
34
+
35
+
36
+
37
+ $commercesciencesTag = Mage::helper("commercesciences_base")->getTag();
38
+ if(!$commercesciencesTag){
39
+ return;
40
+ }
41
+
42
+ $block = $observer->getBlock();
43
+ $transport = $observer->getTransport();
44
+
45
+ if($block->getNameInLayout() == "footer"){
46
+ $transportHTML = $transport->getHtml();
47
+ $transport->setHtml($transportHTML.$commercesciencesTag);
48
+ $this->_putcommercesciences = true;
49
+ return;
50
+ }
51
+
52
+ if($block->getNameInLayout() == "before_body_end"){
53
+ $transportHTML = $transport->getHtml();
54
+ $transport->setHtml($transportHTML.$commercesciencesTag);
55
+ $this->_putcommercesciences = true;
56
+ return;
57
+ }
58
+
59
+ }
60
+
61
+
62
+ /**
63
+ * observer for event model_config_data_save_before:
64
+ * before the configurations are saved on the admin panel,
65
+ * perform the logic of the flow
66
+ *
67
+ * @param $observer
68
+ * @return void
69
+ */
70
+ public function performStepLogic($observer){
71
+ $request = Mage::app()->getRequest();
72
+ $params = $request->getParams();
73
+ $savedConfigSection = $params['section'];
74
+ if($savedConfigSection != 'commercesciences'){
75
+ return;
76
+ }
77
+
78
+
79
+
80
+ $step = $this->getCsHelper()->getStep();
81
+ $csHelper = $this->getCsHelper();
82
+
83
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
84
+ if(!$csConfig || !$csConfig->getId()){
85
+ $csConfig = Mage::getModel("commercesciences_base/config");
86
+ $csConfig->save();
87
+ }
88
+
89
+ $firstStoreCode = $csHelper->getFirstStoreCode();
90
+ $storeUrl = Mage::app()->getStore($firstStoreCode)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
91
+
92
+ if($step == Commercesciences_Base_Helper_Data::STEP_ZERO){
93
+ //check valid email
94
+ if(!isset($params['groups']['required_param']['fields']['email']['value'])
95
+ || !trim($params['groups']['required_param']['fields']['email']['value'])){
96
+ $csHelper->handleError($csHelper->__('The email should not be empty'));
97
+ return;
98
+ }
99
+ $email = trim($params['groups']['required_param']['fields']['email']['value']);
100
+ $email = filter_var($email, FILTER_VALIDATE_EMAIL);
101
+ if(!$email){
102
+ $csHelper->handleError($csHelper->__('The email %s is not valid', $email));
103
+ return;
104
+ }
105
+
106
+ //register
107
+ $result = $csHelper->register($email, $storeUrl);
108
+ if($result['error']){
109
+ $csHelper->handleError($result['error']);
110
+ return;
111
+ }
112
+
113
+ //customer registered - clear the cache
114
+ Mage::app()->cleanCache();
115
+ }
116
+
117
+ if($step == Commercesciences_Base_Helper_Data::STEP_ONE
118
+ || $step == Commercesciences_Base_Helper_Data::STEP_TWO){
119
+ if(!isset($params['groups']['required_param']['fields']['is_active']['value'])){
120
+ return;
121
+ }
122
+ $newIsActiveConfig = $params['groups']['required_param']['fields']['is_active']['value'];
123
+
124
+
125
+ if($newIsActiveConfig==0){
126
+ $csHelper->deactivate();
127
+ }else{
128
+ $csHelper->activate();
129
+ }
130
+ }
131
+ return;
132
+ }
133
+
134
+ public function beforeTabLoaded($observer){
135
+ $controller_action = $observer->getControllerAction();
136
+ $request = $controller_action->getRequest();
137
+ if($controller_action->getFullActionName() == "adminhtml_system_config_edit"){
138
+ if($request->getParam('section') == 'commercesciences'){
139
+ $adminSession = Mage::getModel('customer/session');
140
+ //Mage::log("vvvv", null, "debug6.log", true);
141
+ if($adminSession->getCsUserId()
142
+ && $adminSession->getCsSecurityToken()
143
+ && $adminSession->getCsTag()){
144
+ $csConfig = Mage::getModel("commercesciences_base/config")->load("1");
145
+ if(!$csConfig || !$csConfig->getId()){
146
+ $csConfig = Mage::getModel("commercesciences_base/config");
147
+ }
148
+ $csConfig->setUserId($adminSession->getCsUserId());
149
+ $csConfig->setSecurityToken($adminSession->getCsSecurityToken());
150
+ $csConfig->setTag($adminSession->getCsTag());
151
+ $csConfig->save();
152
+
153
+ $adminSession->unsetData("cs_user_id");
154
+ $adminSession->unsetData("cs_security_token");
155
+ $adminSession->unsetData("cs_tag");
156
+
157
+ //Mage::log("ppp-".$csConfig->getUserId(), null, "debug6.log", true);
158
+ }
159
+ }
160
+ }
161
+ }
162
+
163
+ }
app/code/local/Commercesciences/Base/Model/Resource/Setup.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ class Commercesciences_Base_Model_Resource_Setup
3
+ extends Mage_Core_Model_Resource_Setup
4
+ {
5
+
6
+ }
app/code/local/Commercesciences/Base/controllers/ApiController.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Commercesciences_Base_ApiController extends Mage_Core_Controller_Front_Action
5
+ {
6
+ public function setisconfiguredAction()
7
+ {
8
+ $request = $this->getRequest();
9
+ if ($request->isPost()) {
10
+ $userId = $request->getParam('userId');
11
+ $securityToken = $request->getParam('securityToken');
12
+
13
+ $csConfig = Mage::getModel("commercesciences_base/config")->load('1');
14
+ if($csConfig
15
+ && $csConfig->getUserId()==$userId
16
+ && $csConfig->getSecurityToken()==$securityToken){
17
+ $csConfig->setStep(Commercesciences_Base_Helper_Data::STEP_TWO);
18
+ $csConfig->save();
19
+ $responseArray = array(
20
+ 'good' => 'true'
21
+ );
22
+ }else{
23
+ $responseArray = array(
24
+ 'good' => 'false',
25
+ 'error' => 'The customer doesnt have such user_id/security_token in his database'
26
+ );
27
+ }
28
+ }else{
29
+ $responseArray = array(
30
+ 'good' => 'false',
31
+ 'error' => 'The request should be of type POST'
32
+ );
33
+ }
34
+
35
+ $this->getResponse()->setHeader('Content-Type', 'application/json', true)->setBody(json_encode($responseArray));
36
+ return;
37
+ }
38
+ }
app/code/local/Commercesciences/Base/etc/config.xml ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Commercesciences_Base>
4
+ <version>0.0.1</version>
5
+ </Commercesciences_Base>
6
+ </modules>
7
+ <frontend>
8
+ <routers>
9
+ <commercesciences_base>
10
+ <use>standard</use>
11
+ <args>
12
+ <module>Commercesciences_Base</module>
13
+ <frontName>commercesciences</frontName>
14
+ </args>
15
+ </commercesciences_base>
16
+ </routers>
17
+ </frontend>
18
+ <global>
19
+ <events>
20
+ <core_block_abstract_to_html_after>
21
+ <observers>
22
+ <commercesciences_core_block_abstract_to_html_after>
23
+ <type>singleton</type>
24
+ <class>Commercesciences_Base_Model_Observer</class>
25
+ <method>addCommercesciencesHtml</method>
26
+ </commercesciences_core_block_abstract_to_html_after>
27
+ </observers>
28
+ </core_block_abstract_to_html_after>
29
+ <core_config_data_save_before>
30
+ <observers>
31
+ <commercesciences_admin_system_config_changed_section_commercesciences>
32
+ <type>singleton</type>
33
+ <class>Commercesciences_Base_Model_Observer</class>
34
+ <method>performStepLogic</method>
35
+ </commercesciences_admin_system_config_changed_section_commercesciences>
36
+ </observers>
37
+ </core_config_data_save_before>
38
+ <controller_action_predispatch_adminhtml_system_config_edit>
39
+ <observers>
40
+ <commercesciences_controller_action_predispatch_adminhtml_system_config_edit>
41
+ <type>singleton</type>
42
+ <class>Commercesciences_Base_Model_Observer</class>
43
+ <method>beforeTabLoaded</method>
44
+ </commercesciences_controller_action_predispatch_adminhtml_system_config_edit>
45
+ </observers>
46
+ </controller_action_predispatch_adminhtml_system_config_edit>
47
+ </events>
48
+ <helpers>
49
+ <commercesciences_base>
50
+ <class>Commercesciences_Base_Helper</class>
51
+ </commercesciences_base>
52
+ </helpers>
53
+ <blocks>
54
+ <commercesciences_base>
55
+ <class>Commercesciences_Base_Block</class>
56
+ </commercesciences_base>
57
+ </blocks>
58
+ <models>
59
+ <commercesciences_base>
60
+ <class>Commercesciences_Base_Model</class>
61
+ <resourceModel>commercesciences_base_mysql4</resourceModel>
62
+ </commercesciences_base>
63
+ <commercesciences_base_mysql4>
64
+ <class>Commercesciences_Base_Model_Mysql4</class>
65
+ <entities>
66
+ <config>
67
+ <table>commercesciences_base_config</table>
68
+ </config>
69
+ </entities>
70
+ </commercesciences_base_mysql4>
71
+ </models>
72
+ <resources>
73
+ <commercesciences_base_setup>
74
+ <setup>
75
+ <module>Commercesciences_Base</module>
76
+ <class>Commercesciences_Base_Model_Resource_Setup</class>
77
+ </setup>
78
+ </commercesciences_base_setup>
79
+ </resources>
80
+ </global>
81
+ <default>
82
+ <commercesciences>
83
+ <required_param>
84
+ <is_active>1</is_active>
85
+ </required_param>
86
+ </commercesciences>
87
+ </default>
88
+ <admin>
89
+ <routers>
90
+ <commercesciences>
91
+ <use>admin</use>
92
+ <args>
93
+ <module>Commercesciences_Base</module>
94
+ <frontName>commercesciences</frontName>
95
+ </args>
96
+ </commercesciences>
97
+ </routers>
98
+ </admin>
99
+ <adminhtml>
100
+ <layout>
101
+ <updates>
102
+ <commercesciences>
103
+ <file>commercesciences.xml</file>
104
+ </commercesciences>
105
+ </updates>
106
+ </layout>
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
+ <commercesciences>
119
+ <title>CommerceSciences</title>
120
+ </commercesciences>
121
+ </children>
122
+ </config>
123
+ </children>
124
+ </system>
125
+ </children>
126
+ </admin>
127
+ </resources>
128
+ </acl>
129
+ </adminhtml>
130
+ </config>
app/code/local/Commercesciences/Base/etc/system.xml ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <tabs>
3
+ <commercesciences>
4
+ <label>Personal Bar</label>
5
+ <sort_order>800</sort_order>
6
+ </commercesciences>
7
+ </tabs>
8
+ <sections>
9
+ <commercesciences>
10
+ <class>separator-top</class>
11
+ <label><![CDATA[<span class="stadmin-csconfig_menu">Personal Bar Configuration</span>]]></label>
12
+ <tab>commercesciences</tab>
13
+ <frontend_type>text</frontend_type>
14
+ <sort_order>10</sort_order>
15
+ <show_in_default>1</show_in_default>
16
+ <show_in_website>1</show_in_website>
17
+ <show_in_store>1</show_in_store>
18
+ <groups>
19
+ <required_param>
20
+ <label>Personal Bar account Details</label>
21
+ <frontend_type>text</frontend_type>
22
+ <sort_order>10</sort_order>
23
+ <show_in_default>1</show_in_default>
24
+ <show_in_website>1</show_in_website>
25
+ <show_in_store>1</show_in_store>
26
+ <expanded>1</expanded>
27
+ <fields>
28
+ <email>
29
+ <label></label>
30
+ <comment></comment>
31
+ <frontend_type>text</frontend_type>
32
+ <frontend_model>commercesciences_base/adminhtml_config_form_renderer_campaignid</frontend_model>
33
+ <sort_order>0</sort_order>
34
+ <show_in_default>1</show_in_default>
35
+ <show_in_website>1</show_in_website>
36
+ <show_in_store>1</show_in_store>
37
+ </email>
38
+ <is_active>
39
+ <label>Is Active?</label>
40
+ <comment>[Activate/Deactivate CommerceSciences bar]</comment>
41
+ <frontend_type>select</frontend_type>
42
+ <source_model>adminhtml/system_config_source_yesno</source_model>
43
+ <frontend_model>commercesciences_base/adminhtml_config_form_renderer_isactive</frontend_model>
44
+ <sort_order>1</sort_order>
45
+ <show_in_default>1</show_in_default>
46
+ <show_in_website>1</show_in_website>
47
+ <show_in_store>1</show_in_store>
48
+ </is_active>
49
+ </fields>
50
+ </required_param>
51
+ <about_the_bar>
52
+ <label>About the Personal Bar</label>
53
+ <frontend_type>text</frontend_type>
54
+ <sort_order>20</sort_order>
55
+ <show_in_default>1</show_in_default>
56
+ <show_in_website>1</show_in_website>
57
+ <show_in_store>1</show_in_store>
58
+ <expanded>1</expanded>
59
+ <frontend_model>commercesciences_base/adminhtml_config_form_renderer_group_about</frontend_model>
60
+ <fields>
61
+ <email>
62
+ <label></label>
63
+ <comment></comment>
64
+ <frontend_type>text</frontend_type>
65
+ <frontend_model>commercesciences_base/adminhtml_config_form_renderer_about</frontend_model>
66
+ <sort_order>0</sort_order>
67
+ <show_in_default>1</show_in_default>
68
+ <show_in_website>1</show_in_website>
69
+ <show_in_store>1</show_in_store>
70
+ </email>
71
+ </fields>
72
+ </about_the_bar>
73
+ </groups>
74
+ </commercesciences>
75
+ </sections>
76
+ </config>
app/code/local/Commercesciences/Base/sql/commercesciences_base_setup/mysql4-install-0.0.1.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ $installer->startSetup();
5
+
6
+ /* iterate on the stores and delete old cs configurations */
7
+ //@TODO
8
+
9
+
10
+ $installer->run("
11
+ DROP TABLE IF EXISTS `{$installer->getTable('commercesciences_base/config')}`;
12
+ CREATE TABLE `{$installer->getTable('commercesciences_base/config')}` (
13
+ `entity_id` int(1) unsigned NOT NULL default 1,
14
+ `step` int(1) unsigned default NULL,
15
+ `user_id` varchar(20) default NULL,
16
+ `security_token` varchar(1024) default NULL,
17
+ `tag` varchar(2048) default NULL,
18
+ PRIMARY KEY (`entity_id`)
19
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
20
+ ");
21
+
22
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/commercesciences.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="head">
5
+ <action method="addCss"><name>commercesciences/css/skin.css</name></action>
6
+ </reference>
7
+ </default>
8
+ </layout>
app/etc/modules/Commercesciences_Base.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Commercesciences_Base>
4
+ <active>true</active>
5
+ <codePool>local</codePool>
6
+ </Commercesciences_Base>
7
+ </modules>
8
+ </config>
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Commerce_Sciences</name>
4
+ <version>1.0.36</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>An extension which enables easy installation for CommerceSciences bar</summary>
10
+ <description>With the installation of the extension, the user will be able to easily register to CommerceSciences and get the bar installed immediately in his website.</description>
11
+ <notes>Stable</notes>
12
+ <authors><author><name>CSciences</name><user>auto-converted</user><email>avivr@commercesciences.com</email></author></authors>
13
+ <date>2012-10-25</date>
14
+ <time>21:53:11</time>
15
+ <contents><target name="magelocal"><dir name="Commercesciences"><dir name="Base"><dir name="Block"><dir name="Adminhtml"><dir name="Config"><dir name="Form"><dir name="Renderer"><dir name="Group"><file name="About.php" hash="a16457268fe17d002e171059bae3c34f"/></dir><file name="About.php" hash="0cb1eb47f815edbc7bd73f7b99f5e993"/><file name="Campaignid.php" hash="f57b905258ef89a5e85eccf65f8bbbab"/><file name="Isactive.php" hash="2a25355d0f457f28a413d6a87ab45d2a"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="2a4b02da1d698ec720db77e7330abd03"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><file name="Fontstyle.php" hash="c651dc8613a3a501ae7c43dd56f7ca10"/></dir></dir></dir></dir><dir name="Mysql4"><file name="Config.php" hash="4d66326f7313bbdf67ca8c16ed34e87d"/></dir><dir name="Resource"><file name="Setup.php" hash="fb19aa68ae9c60f3869247ca109904a4"/></dir><file name="Config.php" hash="5db637f6c8a9ed31c113dde29d87e9de"/><file name="Observer.php" hash="c459e567ba7a9efaee8ce115e714371b"/></dir><dir name="controllers"><file name="ApiController.php" hash="254e5482daed31d581689f988593a99b"/></dir><dir name="etc"><file name="config.xml" hash="7404d3aae752c3a638c5fa3b55a4fbd6"/><file name="system.xml" hash="d120e7366fd3045e3030098dbf1ce2b3"/></dir><dir name="sql"><dir name="commercesciences_base_setup"><file name="mysql4-install-0.0.1.php" hash="17057c596cd36ea4a1e9d87cf37bc0de"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Commercesciences_Base.xml" hash="3223d3e6acdeac74abe8b6f10d899522"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="commercesciences.xml" hash="85100232edb979c031e05c3977664781"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="commercesciences"><dir name="css"><file name="skin.css" hash="5f9245e592c4fb5178edcc744336e4b7"/></dir><dir name="images"><file name="CS-Logo-innerpage.png" hash="450dc4a05822cba236a3400bfa1535f7"/><file name="icons-boxed.png" hash="703749e7a6dd991cffc3767244f14887"/><file name="intro-img.png" hash="20f4193fef90371b49379e6df1e8d523"/><file name="setup-takes-2-minutes.png" hash="9b69dde5ccc771e6910adb3a153cf591"/></dir></dir></dir></dir></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies/>
18
+ </package>
skin/adminhtml/default/default/commercesciences/css/skin.css ADDED
@@ -0,0 +1,328 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .content-header h3 span.stadmin-csconfig_menu {
2
+ background-image:url("../images/CS-Logo-innerpage.png");
3
+ background-position: 0 0;
4
+ background-repeat:no-repeat;
5
+ color:#4799AE;
6
+ padding-left:51px;
7
+ padding-right:0;
8
+ }
9
+ .tabs.config-tabs span.stadmin-csconfig_menu,
10
+ .tabs a:hover.active span.stadmin-csconfig_menu,
11
+ .tabs.config-tabs span.stadmin-csconfig_menu a.stadmin-csconfig_menu:hover {
12
+ padding: 0;
13
+ background-image:url("../images/CS-Logo-innerpage.png");
14
+ background-position:0 2px;
15
+ background-repeat:no-repeat;
16
+ color:#4799AE;
17
+ padding-left:51px;
18
+ padding-right:0;
19
+ }
20
+ .cswrapper{
21
+ padding: 0 10px;
22
+ font-weight: bold;
23
+
24
+ }
25
+
26
+
27
+ /* Fix for IE8 */
28
+ .cs_wrap .link-ph {
29
+ min-width: 900px;
30
+ }
31
+ .csexp1{
32
+ min-width: 900px;
33
+ }
34
+ .cswrapper div {
35
+ min-width: 900px;
36
+ }
37
+ /* End Fix for IE8 */
38
+
39
+
40
+ .csexp2, .csexp3{
41
+ width: 500px;
42
+ margin: 20px 0 0;
43
+ }
44
+ .csexp2{
45
+ height: 20px;
46
+ }
47
+ .csexp3{
48
+ height: 75px;
49
+ }
50
+ .csexp2_left, .csexp3_left, .csexp12_left, .csexp24_left{
51
+ float: left;
52
+ width: 200px;
53
+ }
54
+ .csexp2_right, .csexp3_right, .csexp12_right, .csexp24_right{
55
+ float: right;
56
+ width: 300px;
57
+ }
58
+ .csexp2_right input{
59
+ width: 300px;
60
+ }
61
+ .csexpt_right_select{
62
+ width: 307px;
63
+ }
64
+ .csexp2_right button.save{
65
+ margin-top: 10px;
66
+ }
67
+ .csexp11{
68
+ border: 1px solid #BFBFBF;
69
+ background-color: #FFFFFF;
70
+ padding: 10px;
71
+ }
72
+ .csexp11_2,.csexp11_3,.csexp11_4,.csexp11_6{
73
+ font-weight: normal;
74
+ }
75
+ .csexp11_5{
76
+ margin: 10px 0px 0px 10px;
77
+ }
78
+ .csexp11_6,.csexp11_7{
79
+ margin: 2px 0px 0px 10px;
80
+ }
81
+ .csexp12{
82
+ width: 500px;
83
+ margin: 40px 0 0 10px;
84
+ }
85
+ .csexp24{
86
+ width: 500px;
87
+ height: 55px;
88
+ margin: 40px 0 0 0px;
89
+ }
90
+ .csexp12_right select, .csexp24_right select{
91
+ width: 250px;
92
+ }
93
+ .csexp12_right button, .csexp24_right button{
94
+ margin-top: 15px;
95
+ }
96
+ .csexp23{
97
+ margin-top: 10px;
98
+ }
99
+ .csexp25{
100
+ width: 500px;
101
+ margin-top: 50px;
102
+ }
103
+ .csexp25_left,.csexp25_left2{
104
+ float: left;
105
+ }
106
+ .csexp25_left2{
107
+ margin-left: 5px;
108
+ color: #000000;
109
+ font-weight: normal;
110
+ }
111
+
112
+
113
+ .cs_styles {
114
+ font-size: 100%;
115
+ -webkit-text-size-adjust: 100%;
116
+ -ms-text-size-adjust: 100%;
117
+ }
118
+ .cs_styles a:focus {
119
+ outline: thin dotted #333;
120
+ outline: 5px auto -webkit-focus-ring-color;
121
+ outline-offset: -2px;
122
+ outline: thin dotted #333;
123
+ outline: 5px auto -webkit-focus-ring-color;
124
+ outline-offset: -2px;
125
+ }
126
+ .cs_styles a:hover,
127
+ .cs_styles a:active {
128
+ outline: 0;
129
+ }
130
+
131
+ .cs_styles {
132
+ margin: 0;
133
+ height: 100%;
134
+ position: relative;
135
+ font-family: 'Pontano Sans', "Myriad Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
136
+ font-size: 14px;
137
+ line-height: 22px;
138
+ color: #000000;
139
+ background-color: #222222;
140
+ }
141
+ .cs_styles a {
142
+ color: #0088cc;
143
+ text-decoration: none;
144
+ }
145
+ .cs_styles a:hover {
146
+ color: #0064cd;
147
+ text-decoration: underline;
148
+ }
149
+ .cs_row {
150
+ margin-left: -20px;
151
+ *zoom: 1;
152
+ *zoom: 1;
153
+ }
154
+ .cs_row:before,
155
+ .cs_row:after {
156
+ display: table;
157
+ content: "";
158
+ }
159
+ .cs_row:after {
160
+ clear: both;
161
+ }
162
+ [class*="cs_span"] {
163
+ float: left;
164
+ margin-left: 20px;
165
+ }
166
+ .cs_container {
167
+ width: 940px;
168
+ }
169
+ .cs_span12 {
170
+ width: 940px;
171
+ }
172
+ .cs_span10 {
173
+ width: 780px;
174
+ }
175
+ .cs_span2 {
176
+ width: 140px;
177
+ }
178
+ .cs_row {
179
+ margin-left: -20px;
180
+ *zoom: 1;
181
+ *zoom: 1;
182
+ }
183
+ .cs_row:before,
184
+ .cs_row:after {
185
+ display: table;
186
+ content: "";
187
+ }
188
+ .cs_row:after {
189
+ clear: both;
190
+ }
191
+ .cs_container {
192
+ width: 940px;
193
+ }
194
+ .cs_span12 {
195
+ width: 940px;
196
+ }
197
+ .cs_span10 {
198
+ width: 780px;
199
+ }
200
+ .cs_span2 {
201
+ width: 140px;
202
+ }
203
+ .cs_container {
204
+ margin-right: auto;
205
+ margin-left: auto;
206
+ *zoom: 1;
207
+ *zoom: 1;
208
+ }
209
+
210
+ .cs_styles p {
211
+ margin: 0 0 11px;
212
+ font-family: 'Pontano Sans', "Myriad Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
213
+ font-size: 14px;
214
+ line-height: 22px;
215
+ }
216
+
217
+ .cs_styles h3 {
218
+ margin: 0;
219
+ font-family: inherit;
220
+ font-weight: normal;
221
+ color: inherit;
222
+ text-rendering: optimizelegibility;
223
+ }
224
+ .cs_styles h3 {
225
+ font-size: 18px;
226
+ line-height: 33px;
227
+ }
228
+ .cs_styles strong {
229
+ font-weight: 600;
230
+ }
231
+
232
+ .cs_styles {
233
+ padding-top: 60px;
234
+ background: #fdfcfb ;
235
+ }
236
+ .cs_sans-serif {
237
+ font-family: Arial, Helvetica, 'sans-serif';
238
+ }
239
+ .cs_sans-serif.cs_tm {
240
+ font-size: 75%;
241
+ }
242
+
243
+ .cs_key-text-block {
244
+ text-align: center;
245
+ }
246
+ .cs_ending-block {
247
+ text-align: center;
248
+ }
249
+ .cs_ending-block p {
250
+ font-weight: bold;
251
+ font-size: 17px;
252
+ }
253
+ .cs_key-text-block h3 {
254
+ font-size: 23px;
255
+ letter-spacing: -1px;
256
+ line-height: 24px;
257
+ position: relative;
258
+ display: inline-block;
259
+ text-align: center;
260
+ }
261
+ .cs_key-text-block .cs_container {
262
+ position: relative;
263
+ }
264
+
265
+ .cs_setup-takes-2-min {
266
+ background-image: url(../images/setup-takes-2-minutes.png);
267
+ width: 96px;
268
+ height:57px;
269
+ position: absolute;
270
+ top: 44px;
271
+ left: 0;
272
+ }
273
+
274
+ .cs_details-block {
275
+ padding: 20px 0 10px;
276
+ }
277
+ .cs_details-block .cs_feature-icon {
278
+ background-image: url(../images/icons-boxed.png);
279
+ background-repeat: no-repeat;
280
+ width: 140px;
281
+ height: 136px;
282
+ }
283
+ .cs_details-block .cs_feature-icon.cs_get-intuitive {
284
+ background-position: 0 0;
285
+ }
286
+ .cs_details-block .cs_feature-icon.cs_stand-out {
287
+ background-position: -145px 0;
288
+ }
289
+ .cs_details-block .cs_feature-icon.cs_grow-sales {
290
+ background-position: -290px 0;
291
+ }
292
+ .cs_details-block h3 {
293
+ font-size: 22px;
294
+ color: #0d2427;
295
+ text-shadow: 0 1px 0 white;
296
+ }
297
+ .cs_details-block .cs_highlight-details {
298
+ margin-top: 10px;
299
+ margin-bottom: 15px;
300
+ }
301
+ .cs_details-block .cs_highlight-details-desc p {
302
+ margin: 2px 0 0px;
303
+ display: block;
304
+ margin-bottom: 10px;
305
+ font-size: 15px;
306
+ line-height: 19px;
307
+ font-family: Helvetica, Arial, sans-serif;
308
+ color: #4D5657;
309
+ font-weight: normal;
310
+ }
311
+
312
+ .cs_bar-guide-block {
313
+ margin: 50px auto 30px;
314
+ }
315
+
316
+ .cs_bar-guide-img {
317
+ margin: 0 auto 0;
318
+ background: transparent url(../images/intro-img.png) no-repeat center center;
319
+ width: 696px;
320
+ height: 205px;
321
+ }
322
+
323
+ @font-face {
324
+ font-family: 'Pontano Sans';
325
+ font-style: normal;
326
+ font-weight: 400;
327
+ src: local('Pontano Sans'), local('PontanoSans-Regular'), url(http://themes.googleusercontent.com/static/fonts/pontanosans/v1/gTHiwyxi6S7iiHpqAoiE3HhCUOGz7vYGh680lGh-uXM.woff) format('woff');
328
+ }
skin/adminhtml/default/default/commercesciences/images/CS-Logo-innerpage.png ADDED
Binary file
skin/adminhtml/default/default/commercesciences/images/icons-boxed.png ADDED
Binary file
skin/adminhtml/default/default/commercesciences/images/intro-img.png ADDED
Binary file
skin/adminhtml/default/default/commercesciences/images/setup-takes-2-minutes.png ADDED
Binary file