Version Notes
Adding js file to package
Download this release
Release Info
Developer | Magento Core Team |
Extension | stas_test_extension_2 |
Version | 1.0.1 |
Comparing to | |
See all releases |
Version 1.0.1
- app/code/community/Beecoder/Beeshopy/Block/Track.php +49 -0
- app/code/community/Beecoder/Beeshopy/Helper/Data.php +13 -0
- app/code/community/Beecoder/Beeshopy/Model/Api.php +315 -0
- app/code/community/Beecoder/Beeshopy/controllers/AdminController.php +29 -0
- app/code/community/Beecoder/Beeshopy/controllers/IndexController.php +66 -0
- app/code/community/Beecoder/Beeshopy/etc/api.xml +44 -0
- app/code/community/Beecoder/Beeshopy/etc/config.xml +84 -0
- app/design/frontend/base/default/layout/beeshopy.xml +18 -0
- app/design/frontend/base/default/template/beeshopy/track.phtml +4 -0
- app/etc/modules/Beecoder_Beeshopy.xml +10 -0
- package.xml +21 -0
- skin/frontend/base/default/js/beeshopy/beetailer.js +390 -0
app/code/community/Beecoder/Beeshopy/Block/Track.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Beetailer checkout tracking code
|
4 |
+
*
|
5 |
+
* @category Beetailer
|
6 |
+
* @package Beecoder_Beeshopy
|
7 |
+
*/
|
8 |
+
|
9 |
+
|
10 |
+
class Beecoder_Beeshopy_Block_Track extends Mage_Core_Block_Template
|
11 |
+
{
|
12 |
+
|
13 |
+
private $_order = null;
|
14 |
+
|
15 |
+
public function getOrder()
|
16 |
+
{
|
17 |
+
if ($this->_order === null) {
|
18 |
+
$orderId = Mage::getSingleton('checkout/session')->getLastOrderId();
|
19 |
+
if ($orderId) {
|
20 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
21 |
+
if ($order->getId()) {
|
22 |
+
$this->_order = $order;
|
23 |
+
}
|
24 |
+
}
|
25 |
+
}
|
26 |
+
return $this->_order;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function trackingCode()
|
30 |
+
{
|
31 |
+
$beetailerRef = Mage::getModel('core/cookie')->get('beetailer_ref');
|
32 |
+
$beetailerRefDate = Mage::getModel('core/cookie')->get('beetailer_ref_date');
|
33 |
+
|
34 |
+
if ($order = $this->getOrder()) {
|
35 |
+
$res = '<script type="text/javascript" src=\'//www.beetailer.com/s.js'.
|
36 |
+
'?p[order_number]='.$order->getIncrementId().
|
37 |
+
'&p[amount]='.urlencode(sprintf("%.2f", $order->getSubtotal())).
|
38 |
+
'&p[order_date]='.urlencode($order->getCreatedAt()).
|
39 |
+
'&p[email]='.urlencode($order->getCustomerEmail()).
|
40 |
+
'&p[beetailer_ref]='.urlencode($beetailerRef).
|
41 |
+
'&p[beetailer_ref_date]='.urlencode($beetailerRefDate).
|
42 |
+
'&p[shop_domain]='.urlencode(Mage::getBaseURL()).
|
43 |
+
'\'></script>';
|
44 |
+
|
45 |
+
Mage::getModel('core/cookie')->delete('beetailer_ref');
|
46 |
+
}
|
47 |
+
return $res;
|
48 |
+
}
|
49 |
+
}
|
app/code/community/Beecoder/Beeshopy/Helper/Data.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Beetailer Data helper
|
4 |
+
*
|
5 |
+
* @category Beetailer
|
6 |
+
* @package Beecoder_Beeshopy
|
7 |
+
*/
|
8 |
+
|
9 |
+
|
10 |
+
class Beecoder_Beeshopy_Helper_Data extends Mage_Core_Helper_Abstract
|
11 |
+
{
|
12 |
+
|
13 |
+
}
|
app/code/community/Beecoder/Beeshopy/Model/Api.php
ADDED
@@ -0,0 +1,315 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Beetailer Custom API
|
4 |
+
*
|
5 |
+
* @category Beetailer
|
6 |
+
* @package Beecoder_Beeshopy
|
7 |
+
*/
|
8 |
+
|
9 |
+
|
10 |
+
class Beecoder_Beeshopy_Model_Api extends Mage_Catalog_Model_Api_Resource
|
11 |
+
{
|
12 |
+
/** Get beeshopy needed product information */
|
13 |
+
public function productInfo($productId, $store = null, $identifierType = null)
|
14 |
+
{
|
15 |
+
/* Load Product */
|
16 |
+
$product = $this->_getProduct($productId, $store, $identifierType);
|
17 |
+
|
18 |
+
if (!$product->getId()) {
|
19 |
+
$this->_fault('not_exists');
|
20 |
+
}
|
21 |
+
|
22 |
+
$result = $this->getProductInfo($product, $store);
|
23 |
+
/* Children and related products*/
|
24 |
+
$result += $this->children($product, $store);
|
25 |
+
|
26 |
+
return $result;
|
27 |
+
}
|
28 |
+
|
29 |
+
public function categoryTree($parentId, $store = null)
|
30 |
+
{
|
31 |
+
if (is_null($parentId) && !is_null($store)) {
|
32 |
+
$parentId = Mage::app()->getStore($this->_getStoreId($store))->getRootCategoryId();
|
33 |
+
} elseif (is_null($parentId)) {
|
34 |
+
$parentId = 1;
|
35 |
+
}
|
36 |
+
|
37 |
+
$tree = Mage::getResourceSingleton('catalog/category_tree')->load();
|
38 |
+
|
39 |
+
$root = $tree->getNodeById($parentId);
|
40 |
+
|
41 |
+
if ($root && $root->getId() == 1) {
|
42 |
+
$root->setName(Mage::helper('catalog')->__('Root'));
|
43 |
+
}
|
44 |
+
|
45 |
+
$collection = Mage::getModel('catalog/category')->getCollection()
|
46 |
+
->setStoreId($this->_getStoreId($store))
|
47 |
+
->addAttributeToSelect('name')
|
48 |
+
->setLoadProductCount(true)
|
49 |
+
->addAttributeToSelect('is_active');
|
50 |
+
|
51 |
+
$tree->addCollectionData($collection, true);
|
52 |
+
|
53 |
+
return $this->_nodeToArray($root);
|
54 |
+
}
|
55 |
+
|
56 |
+
public function assignedProducts($categoryId, $store = null)
|
57 |
+
{
|
58 |
+
$category = Mage::getModel('catalog/category')->load($categoryId);
|
59 |
+
|
60 |
+
$collection = $category->setStoreId($this->_getStoreId($store))
|
61 |
+
->getProductCollection()
|
62 |
+
->addAttributeToSelect('name')
|
63 |
+
->addAttributeToSelect('visibility')
|
64 |
+
->setOrder(Mage::getStoreConfig('catalog/frontend/default_sort_by'), 'asc');
|
65 |
+
|
66 |
+
$result = array();
|
67 |
+
|
68 |
+
foreach ($collection as $product) {
|
69 |
+
$result[] = array(
|
70 |
+
'product_id' => $product->getId(),
|
71 |
+
'visibility' => $product->getVisibility(),
|
72 |
+
'type' => $product->getTypeId(),
|
73 |
+
'sku' => $product->getSku(),
|
74 |
+
'title' => $product->getName()
|
75 |
+
);
|
76 |
+
}
|
77 |
+
|
78 |
+
return $result;
|
79 |
+
}
|
80 |
+
|
81 |
+
/** Get system info such as currency, rates, ... */
|
82 |
+
public function systemInfo()
|
83 |
+
{
|
84 |
+
$currencyModel = Mage::getModel('directory/currency');
|
85 |
+
$store_views = array();
|
86 |
+
$default_store_view = Mage::app()->getDefaultStoreView()->getId();
|
87 |
+
/* Store views */
|
88 |
+
foreach(Mage::app()->getStores() as $sview){
|
89 |
+
if($sview->getIsActive() == 1 || $sview->getId() == $default_store_view){
|
90 |
+
$includes_taxes = Mage::helper('tax')->priceIncludesTax($sview);
|
91 |
+
$store_views[$sview->getId()] = array('id' => $sview->getId(), 'name' => $sview->getName(), 'code' => $sview->getCode(), 'root_category_id' => $sview->getRootCategoryId(), 'taxes_included' => $includes_taxes);
|
92 |
+
/* Currencies */
|
93 |
+
$store_views[$sview->getId()]['currencies'] = array();
|
94 |
+
$base = $sview->getBaseCurrency()->getCode();
|
95 |
+
|
96 |
+
foreach($sview->getAvailableCurrencyCodes() as $code){
|
97 |
+
$default = $sview->getDefaultCurrencyCode() == $code ? true : false;
|
98 |
+
$currency = $currencyModel->load($code);
|
99 |
+
/* No ratio defined */
|
100 |
+
$ratios = $currencyModel->getCurrencyRates($base, $code);
|
101 |
+
if($ratios == NULL){$ratios = array($code => 1);}
|
102 |
+
/* EO No ratio*/
|
103 |
+
array_push($store_views[$sview->getId()]['currencies'],
|
104 |
+
array("default" => $default, 'ratio' => $ratios, 'format' => $currency->getOutputFormat()));
|
105 |
+
}
|
106 |
+
}
|
107 |
+
}
|
108 |
+
return array('store_views' => $store_views, 'include_url_code' => Mage::getStoreConfig('web/url/use_store'));
|
109 |
+
}
|
110 |
+
|
111 |
+
/* Used to know if module is installed*/
|
112 |
+
public function checkModule()
|
113 |
+
{
|
114 |
+
return array("api_version" => '2.4.8', "magento_version" => Mage::getVersion());
|
115 |
+
}
|
116 |
+
|
117 |
+
/*Auxiliar functions*/
|
118 |
+
|
119 |
+
/** Get configurable/grouped and related children information */
|
120 |
+
private function children($parent, $store = null, $identifierType = null)
|
121 |
+
{
|
122 |
+
try
|
123 |
+
{
|
124 |
+
$res['children'] = array();
|
125 |
+
$res['related'] = array();
|
126 |
+
|
127 |
+
/* Related products */
|
128 |
+
foreach($parent->getRelatedProductIds() as $product_id){
|
129 |
+
$product = $this->_getProduct($product_id, $store, $identifierType);
|
130 |
+
|
131 |
+
if($product->isSalable() != false){
|
132 |
+
array_push($res['related'], $this->getProductInfo($product, $store));
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
switch($parent->getTypeId()){
|
137 |
+
case("configurable"):
|
138 |
+
$res["children"] = $this->configurableProducts($parent, $store, $identifierType);
|
139 |
+
break;
|
140 |
+
case("grouped"):
|
141 |
+
$res["children"] = $this->groupedProducts($parent, $store, $identifierType);
|
142 |
+
break;
|
143 |
+
}
|
144 |
+
|
145 |
+
return $res;
|
146 |
+
}
|
147 |
+
catch (Mage_Core_Exception $e)
|
148 |
+
{
|
149 |
+
$this->_fault('store_not_exists');
|
150 |
+
}
|
151 |
+
}
|
152 |
+
|
153 |
+
private function getProductInfo($product, $store = null, $extra_params = array())
|
154 |
+
{
|
155 |
+
/* Images */
|
156 |
+
$image_class = Mage::getModel('catalog/product_attribute_media_api');
|
157 |
+
$images = $image_class->items($product->getId(), $store);
|
158 |
+
|
159 |
+
/* Custom Options */
|
160 |
+
$options = $this->getCustomOptions($product);
|
161 |
+
$links = $this->getDownloadableLinks($product);
|
162 |
+
|
163 |
+
/* Prepare results */
|
164 |
+
$result = array(
|
165 |
+
'idx' => $product->getId(),
|
166 |
+
'sku' => $product->getSku(),
|
167 |
+
'product_type' => $product->getTypeId(),
|
168 |
+
'body' => $product->getInDepth(),
|
169 |
+
'description' => $product->getDescription(),
|
170 |
+
'short_description' => $product->getShortDescription(),
|
171 |
+
'title' => $product->getName(),
|
172 |
+
'in_stock' => $product->getStockItem()->getIsInStock(),
|
173 |
+
'qty' => $product->getStockItem()->getQty(),
|
174 |
+
'price' => $product->getPrice(),
|
175 |
+
'permalink' => $product->getUrlPath(),
|
176 |
+
'url_in_store' => $product->getProductUrl(),
|
177 |
+
'images' => $images,
|
178 |
+
'visibility' => $product->getVisibility(),
|
179 |
+
'special_price' => $product->getSpecialPrice(),
|
180 |
+
'special_from_date' => $product->getSpecialFromDate(),
|
181 |
+
'special_to_date' => $product->getSpecialToDate(),
|
182 |
+
'custom_options' => $options,
|
183 |
+
'status' => $product->getStatus(),
|
184 |
+
'links' => $links
|
185 |
+
);
|
186 |
+
|
187 |
+
// Optional extra parameters
|
188 |
+
return $result + $extra_params;
|
189 |
+
}
|
190 |
+
|
191 |
+
/** Get configurable products */
|
192 |
+
private function configurableProducts($parent, $store = null, $identifierType = null)
|
193 |
+
{
|
194 |
+
$res = array();
|
195 |
+
|
196 |
+
/* Check if using magento-configurable-simple module */
|
197 |
+
$modules = Mage::getConfig()->getNode('modules')->children();
|
198 |
+
$modulesArray = (array)$modules;
|
199 |
+
$use_simple_configurable = (isset($modulesArray['OrganicInternet_SimpleConfigurableProducts']) && $modulesArray['OrganicInternet_SimpleConfigurableProducts']->is('active')) ? true : false;
|
200 |
+
/* EO Check */
|
201 |
+
|
202 |
+
/* Get configurable attributes */
|
203 |
+
$attrs_codes = $parent->getTypeInstance()->getConfigurableAttributesAsArray();
|
204 |
+
/* Get all children */
|
205 |
+
$children = $parent->getTypeInstance()->getChildrenIds($parent->getId());
|
206 |
+
|
207 |
+
foreach ($children[0] as $i => $value) {
|
208 |
+
$product = $this->_getProduct($value, $store, $identifierType);
|
209 |
+
/* Initial Price */
|
210 |
+
|
211 |
+
$price = $use_simple_configurable ? $product->getFinalPrice() : $parent->getFinalPrice();
|
212 |
+
/* Price Difference */
|
213 |
+
$difference = 0;
|
214 |
+
//Generate caption_name
|
215 |
+
$caption = "";
|
216 |
+
$configurable_options = array();
|
217 |
+
foreach($attrs_codes as $code){
|
218 |
+
$caption .= $product->getResource()->getAttribute($code['attribute_code'])->getFrontend()->getValue($product) . " - ";
|
219 |
+
$attr_value = $product->getData($code['attribute_code']);
|
220 |
+
/* Calculate price */
|
221 |
+
foreach($code['values'] as $value){
|
222 |
+
if($value['value_index'] == $attr_value) {
|
223 |
+
$configurable_options[$code['attribute_id']] = $attr_value;
|
224 |
+
if($value["is_percent"] == 1){
|
225 |
+
$difference += ($price * $value['pricing_value']) / 100;
|
226 |
+
}else{
|
227 |
+
$difference += $value['pricing_value'];
|
228 |
+
}
|
229 |
+
}
|
230 |
+
}
|
231 |
+
}
|
232 |
+
|
233 |
+
if($product->isSalable() != false){
|
234 |
+
array_push($res, $this->getProductInfo($product, $store, array('caption_name' => $caption,
|
235 |
+
'configurable_price' => $price + $difference, 'configurable_options' => $configurable_options)));
|
236 |
+
}
|
237 |
+
}
|
238 |
+
return $res;
|
239 |
+
}
|
240 |
+
|
241 |
+
private function groupedProducts($parent, $store = null, $identifierType = null)
|
242 |
+
{
|
243 |
+
$res = array();
|
244 |
+
$children = $parent->getTypeInstance()->getChildrenIds($parent->getId());
|
245 |
+
foreach ($children[3] as $i => $value) {
|
246 |
+
$product = $this->_getProduct($value, $store, $identifierType);
|
247 |
+
if($product->isSalable() != false){
|
248 |
+
array_push($res,$this->getProductInfo($product, $store));
|
249 |
+
}
|
250 |
+
}
|
251 |
+
return $res;
|
252 |
+
}
|
253 |
+
|
254 |
+
private function getCustomOptions($product)
|
255 |
+
{
|
256 |
+
$options = array();
|
257 |
+
$customOptions = $product->getOptions();
|
258 |
+
foreach ($customOptions as $customOption) {
|
259 |
+
$values = $customOption->getValues();
|
260 |
+
$option = array(
|
261 |
+
'mgnt_id' => $customOption->getId(),
|
262 |
+
'title' => $customOption->getTitle(),
|
263 |
+
'required' => $customOption->getIsRequire(),
|
264 |
+
'input_type' => $customOption->getType(),
|
265 |
+
'order' => $customOption->getSortOrder(),
|
266 |
+
'price' => $customOption->getPrice(),
|
267 |
+
'price_type' => $customOption->getPriceType(),
|
268 |
+
'values' => array()
|
269 |
+
);
|
270 |
+
|
271 |
+
foreach ($values as $value) {
|
272 |
+
array_push($option['values'],
|
273 |
+
array(
|
274 |
+
'title' => $value->getTitle(),
|
275 |
+
'price' => $value->getPrice(),
|
276 |
+
'price_type' => $value->getPriceType(),
|
277 |
+
'sku' => $value->getSku(),
|
278 |
+
'mgnt_id' => $value->getId()
|
279 |
+
)
|
280 |
+
);
|
281 |
+
}
|
282 |
+
array_push($options, $option);
|
283 |
+
}
|
284 |
+
return $options;
|
285 |
+
}
|
286 |
+
|
287 |
+
/* Downloadable products links */
|
288 |
+
private function getDownloadableLinks($product){
|
289 |
+
if($product->getTypeId() != "downloadable") return array();
|
290 |
+
$links = $product->getTypeInstance(true)->getLinks($product);
|
291 |
+
$links_res = array();
|
292 |
+
foreach($links as $link){
|
293 |
+
array_push($links_res, array('price' => $link->getPrice(), 'mgnt_id' => $link->getId(), 'title' => $link->getTitle(), 'price_type' => "fixed"));
|
294 |
+
}
|
295 |
+
return $links_res;
|
296 |
+
}
|
297 |
+
|
298 |
+
protected function _nodeToArray(Varien_Data_Tree_Node $node)
|
299 |
+
{
|
300 |
+
$result = array();
|
301 |
+
$result['category_id'] = $node->getId();
|
302 |
+
$result['parent_id'] = $node->getParentId();
|
303 |
+
$result['name'] = $node->getName();
|
304 |
+
$result['is_active'] = $node->getIsActive();
|
305 |
+
$result['position'] = $node->getPosition();
|
306 |
+
$result['level'] = $node->getLevel();
|
307 |
+
$result['product_count'] = $node->getProductCount();
|
308 |
+
$result['children'] = array();
|
309 |
+
|
310 |
+
foreach ($node->getChildren() as $child) {
|
311 |
+
$result['children'][] = $this->_nodeToArray($child);
|
312 |
+
}
|
313 |
+
return $result;
|
314 |
+
}
|
315 |
+
}
|
app/code/community/Beecoder/Beeshopy/controllers/AdminController.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Admin menu
|
4 |
+
*
|
5 |
+
* @category Beetailer
|
6 |
+
* @package Beecoder_Beeshopy
|
7 |
+
*/
|
8 |
+
|
9 |
+
|
10 |
+
class Beecoder_Beeshopy_AdminController extends Mage_Adminhtml_Controller_Action
|
11 |
+
{
|
12 |
+
public function indexAction()
|
13 |
+
{
|
14 |
+
$this->loadLayout();
|
15 |
+
$this->_setActiveMenu('facebook-store');
|
16 |
+
|
17 |
+
$block = $this->getLayout()
|
18 |
+
->createBlock('core/text', 'beetailer-admin')
|
19 |
+
->setText("<iframe src='https://www.beetailer.com?from=iframe' width=1124 height='2350' frameborder='0' scrolling='no' style='margin:0px auto;display:block;'></iframe>");
|
20 |
+
|
21 |
+
$this->_addContent($block);
|
22 |
+
$this->renderLayout();
|
23 |
+
}
|
24 |
+
|
25 |
+
protected function _isAllowed()
|
26 |
+
{
|
27 |
+
return Mage::getSingleton('admin/session')->isAllowed('facebook-store');
|
28 |
+
}
|
29 |
+
}
|
app/code/community/Beecoder/Beeshopy/controllers/IndexController.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Beetailer Shopping cart class
|
4 |
+
*
|
5 |
+
* @category Beetailer
|
6 |
+
* @package Beecoder_Beeshopy
|
7 |
+
*/
|
8 |
+
|
9 |
+
|
10 |
+
class Beecoder_Beeshopy_IndexController extends Mage_Core_Controller_Front_Action
|
11 |
+
{
|
12 |
+
public function indexAction()
|
13 |
+
{
|
14 |
+
if ($this->getRequest()->getParams()) {
|
15 |
+
Mage::getModel('core/cookie')->set("beetailer_ref", $this->getRequest()->getParam('fb_ref'));
|
16 |
+
Mage::getModel('core/cookie')->set("beetailer_ref_date", time());
|
17 |
+
|
18 |
+
/* Fill shopping cart */
|
19 |
+
$cart = Mage::getSingleton('checkout/cart');
|
20 |
+
$products = $this->getRequest()->getParam('products');
|
21 |
+
$sview = $this->getRequest()->getParam('store_view');
|
22 |
+
|
23 |
+
foreach($products as $attrs){
|
24 |
+
$product = Mage::getModel('catalog/product')
|
25 |
+
->setStoreId(Mage::app()->getStore($sview)->getId())
|
26 |
+
->load($attrs['idx']);
|
27 |
+
|
28 |
+
$options = isset($attrs['options']) ? $attrs['options'] : array();
|
29 |
+
$super_attributes = isset($attrs['super_attributes']) ? $attrs['super_attributes'] : array();
|
30 |
+
$links = isset($attrs['links']) ? explode(",", $attrs['links'][0]) : array();
|
31 |
+
|
32 |
+
try{
|
33 |
+
$cart->addProduct($product, array(
|
34 |
+
'qty' => $attrs["qty"],
|
35 |
+
'super_attribute' => $super_attributes,
|
36 |
+
'options' => $options,
|
37 |
+
'links' => $links
|
38 |
+
));
|
39 |
+
}catch (Mage_Core_Exception $e) { }
|
40 |
+
}
|
41 |
+
$cart->save();
|
42 |
+
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
|
43 |
+
|
44 |
+
$this->_redirect('checkout/cart', $this->gaParams());
|
45 |
+
}else{
|
46 |
+
$this->_redirect('/');
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
/** Add Google analytics parameters */
|
51 |
+
public function gaParams()
|
52 |
+
{
|
53 |
+
$redirect_params = array();
|
54 |
+
foreach($this->getRequest()->getParams() as $k => $v){
|
55 |
+
if(preg_match('/^utm_/', $k)){
|
56 |
+
$redirect_params[$k] = $v;
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
if(count($redirect_params)){
|
61 |
+
$redirect_params = array('_query' => $redirect_params);
|
62 |
+
}
|
63 |
+
|
64 |
+
return $redirect_params;
|
65 |
+
}
|
66 |
+
}
|
app/code/community/Beecoder/Beeshopy/etc/api.xml
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<api>
|
4 |
+
<resources>
|
5 |
+
<beeshopyCustomApi translate="title" module="Beecoder_Beeshopy">
|
6 |
+
<title>Beeshopy custom API</title>
|
7 |
+
<model>Beecoder_Beeshopy/Api</model>
|
8 |
+
<methods>
|
9 |
+
<!-- Retrieve product information -->
|
10 |
+
<productInfo translate="title" module="beecoder_beeshopy">
|
11 |
+
<title>Retrieve product information</title>
|
12 |
+
<acl>catalog/product</acl>
|
13 |
+
</productInfo>
|
14 |
+
<!-- Rewrite original category.tree, num products added -->
|
15 |
+
<categoryTree translate="title" module="beecoder_beeshopy">
|
16 |
+
<title>Rewrite original category.tree, num products added</title>
|
17 |
+
<acl>catalog/product</acl>
|
18 |
+
</categoryTree>
|
19 |
+
<!-- Rewrite original category.assignedProducts, product_name added -->
|
20 |
+
<assignedProducts translate="title" module="beecoder_beeshopy">
|
21 |
+
<title>Rewrite original category.assignedProducts, product_name added</title>
|
22 |
+
<acl>catalog/product</acl>
|
23 |
+
</assignedProducts>
|
24 |
+
<!-- System information, store views, taxes included, currencies -->
|
25 |
+
<systemInfo translate="title" module="beecoder_beeshopy">
|
26 |
+
<title>Retrieve usefull system information</title>
|
27 |
+
<acl>catalog/product</acl>
|
28 |
+
</systemInfo>
|
29 |
+
<!-- Check if module is instaled and check correct access permissions-->
|
30 |
+
<checkModule translate="title" module="beecoder_beeshopy">
|
31 |
+
<title>Check if module installed and return version</title>
|
32 |
+
<acl>catalog/product</acl>
|
33 |
+
</checkModule>
|
34 |
+
</methods>
|
35 |
+
</beeshopyCustomApi>
|
36 |
+
</resources>
|
37 |
+
<acl>
|
38 |
+
<resources>
|
39 |
+
<all>
|
40 |
+
</all>
|
41 |
+
</resources>
|
42 |
+
</acl>
|
43 |
+
</api>
|
44 |
+
</config>
|
app/code/community/Beecoder/Beeshopy/etc/config.xml
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Beecoder_Beeshopy>
|
5 |
+
<version>0.1.0</version>
|
6 |
+
</Beecoder_Beeshopy>
|
7 |
+
</modules>
|
8 |
+
|
9 |
+
<global>
|
10 |
+
<blocks>
|
11 |
+
<beecoder_beeshopy>
|
12 |
+
<class>Beecoder_Beeshopy_Block</class>
|
13 |
+
</beecoder_beeshopy>
|
14 |
+
</blocks>
|
15 |
+
|
16 |
+
<models>
|
17 |
+
<Beecoder_Beeshopy>
|
18 |
+
<class>Beecoder_Beeshopy_Model</class>
|
19 |
+
</Beecoder_Beeshopy>
|
20 |
+
</models>
|
21 |
+
|
22 |
+
<helpers>
|
23 |
+
<Beeshopy>
|
24 |
+
<class>Beecoder_Beeshopy_Helper</class>
|
25 |
+
</Beeshopy>
|
26 |
+
</helpers>
|
27 |
+
</global>
|
28 |
+
|
29 |
+
<frontend>
|
30 |
+
<routers>
|
31 |
+
<process-facebook-cart>
|
32 |
+
<use>standard</use>
|
33 |
+
<args>
|
34 |
+
<module>Beecoder_Beeshopy</module>
|
35 |
+
<frontName>process-facebook-cart</frontName>
|
36 |
+
</args>
|
37 |
+
</process-facebook-cart>
|
38 |
+
</routers>
|
39 |
+
|
40 |
+
<layout>
|
41 |
+
<updates>
|
42 |
+
<beeshopy>
|
43 |
+
<file>beeshopy.xml</file>
|
44 |
+
</beeshopy>
|
45 |
+
</updates>
|
46 |
+
</layout>
|
47 |
+
</frontend>
|
48 |
+
|
49 |
+
<admin>
|
50 |
+
<routers>
|
51 |
+
<beetailer-installation>
|
52 |
+
<use>admin</use>
|
53 |
+
<args>
|
54 |
+
<module>Beecoder_Beeshopy</module>
|
55 |
+
<frontName>beetailer-installation</frontName>
|
56 |
+
</args>
|
57 |
+
</beetailer-installation>
|
58 |
+
</routers>
|
59 |
+
</admin>
|
60 |
+
|
61 |
+
<adminhtml>
|
62 |
+
<menu>
|
63 |
+
<facebook-store translate="title" module="Beeshopy">
|
64 |
+
<title>Facebook Store</title>
|
65 |
+
<action>beetailer-installation/admin/index</action>
|
66 |
+
<sort_order>100</sort_order>
|
67 |
+
</facebook-store>
|
68 |
+
</menu>
|
69 |
+
|
70 |
+
<acl>
|
71 |
+
<resources>
|
72 |
+
<admin>
|
73 |
+
<children>
|
74 |
+
<facebook-store translate="title" module="Beeshopy">
|
75 |
+
<title>Facebook Store</title>
|
76 |
+
<sort_order>100</sort_order>
|
77 |
+
</facebook-store>
|
78 |
+
</children>
|
79 |
+
</admin>
|
80 |
+
</resources>
|
81 |
+
</acl>
|
82 |
+
</adminhtml>
|
83 |
+
</config>
|
84 |
+
|
app/design/frontend/base/default/layout/beeshopy.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout version="0.1.0">
|
3 |
+
<checkout_onepage_success>
|
4 |
+
<reference name="before_body_end">
|
5 |
+
<block type="beecoder_beeshopy/track" name="beecoderbeeshopy_track" template='beeshopy/track.phtml'/>
|
6 |
+
</reference>
|
7 |
+
</checkout_onepage_success>
|
8 |
+
|
9 |
+
<default>
|
10 |
+
<reference name="head">
|
11 |
+
<block type="core/text" name='beetailer'>
|
12 |
+
<action method="setText">
|
13 |
+
<text><![CDATA[ <script type='text/javascript' src='//www.beetailer.com/javascripts/beetailer.js'></script> ]]> </text>
|
14 |
+
</action>
|
15 |
+
</block>
|
16 |
+
</reference>
|
17 |
+
</default>
|
18 |
+
</layout>
|
app/design/frontend/base/default/template/beeshopy/track.phtml
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<!-- Beetailer.com tracking code -->
|
2 |
+
<?php
|
3 |
+
echo($this->trackingCode());
|
4 |
+
?>
|
app/etc/modules/Beecoder_Beeshopy.xml
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Beecoder_Beeshopy>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>community</codePool>
|
7 |
+
</Beecoder_Beeshopy>
|
8 |
+
</modules>
|
9 |
+
</config>
|
10 |
+
|
package.xml
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>stas_test_extension_2</name>
|
4 |
+
<version>1.0.1</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license>OSL v3.0</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Insert your shop in Facebook!
|
10 |
+
Beeshopy extension for Magento, it allows you to integrates your magento store with beeshopy.</summary>
|
11 |
+
<description>Custom Module that allows you to connect with beeshopy service and integrates your magento store with Facebook. 
|
12 |
+

|
13 |
+
It contains a custom API and cart processing.</description>
|
14 |
+
<notes>Adding js file to package</notes>
|
15 |
+
<authors><author><name>Miguel Ángel Martínez Triviño</name><user>auto-converted</user><email>migmartri@gmail.com</email></author></authors>
|
16 |
+
<date>2011-09-14</date>
|
17 |
+
<time>08:56:17</time>
|
18 |
+
<contents><target name="magecommunity"><dir name="Beecoder"><dir name="Beeshopy"><dir name="Block"><file name="Track.php" hash="a40d400b02f73d5b4dea35c348ffee00"/></dir><dir name="Helper"><file name="Data.php" hash="ead88c0b629856526d39e7fb6f3a4ca5"/></dir><dir name="Model"><file name="Api.php" hash="8e02acad05b4494025b76a7a1504351c"/></dir><dir name="controllers"><file name="AdminController.php" hash="1b343fe1ef8ae5fafc5d355844e3f508"/><file name="IndexController.php" hash="bad3391bb742a55a2ee62895cb723e87"/></dir><dir name="etc"><file name="api.xml" hash="507ae656ea724a77def33efd8429d674"/><file name="config.xml" hash="2fcfaeccb838771505e12715c9618c3d"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Beecoder_Beeshopy.xml" hash="55666ef45f08dab44b138e49532ca3b8"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="beeshopy.xml" hash="d307958edf914638aa5cd57f8d449c46"/></dir><dir name="template"><dir name="beeshopy"><file name="track.phtml" hash="47c95001bb55042c5ae7d8ee4b03cccf"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="js"><dir name="beeshopy"><file name="beetailer.js" hash="1ec29bef61895d80519a8559734c90e6"/></dir></dir></dir></dir></dir></target></contents>
|
19 |
+
<compatible/>
|
20 |
+
<dependencies/>
|
21 |
+
</package>
|
skin/frontend/base/default/js/beeshopy/beetailer.js
ADDED
@@ -0,0 +1,390 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var fb_ref_regex = /^beetailer_(.*)/
|
2 |
+
|
3 |
+
function getParam(name){
|
4 |
+
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
|
5 |
+
if (results) {
|
6 |
+
return results[1];
|
7 |
+
} else {
|
8 |
+
null
|
9 |
+
}
|
10 |
+
}
|
11 |
+
|
12 |
+
/* Cookies handle */
|
13 |
+
function createCookie(name,value,days) {
|
14 |
+
if (days) {
|
15 |
+
var date = new Date();
|
16 |
+
date.setTime(date.getTime()+(days*24*60*60*1000));
|
17 |
+
var expires = "; expires="+date.toGMTString();
|
18 |
+
}
|
19 |
+
else var expires = "";
|
20 |
+
/* Adding wildcard period character in order to work with Magento core/cookie set function */
|
21 |
+
document.cookie = name+"="+value+expires+"; path=/; domain=."+window.location.hostname;
|
22 |
+
}
|
23 |
+
|
24 |
+
function readCookie(name) {
|
25 |
+
var nameEQ = name + "=";
|
26 |
+
var ca = document.cookie.split(';');
|
27 |
+
for(var i=0;i < ca.length;i++) {
|
28 |
+
var c = ca[i];
|
29 |
+
while (c.charAt(0)==' ') c = c.substring(1,c.length);
|
30 |
+
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
|
31 |
+
}
|
32 |
+
|
33 |
+
return "";
|
34 |
+
}
|
35 |
+
|
36 |
+
function eraseCookie(name) {
|
37 |
+
createCookie(name,"",-1);
|
38 |
+
}
|
39 |
+
|
40 |
+
/* Check for Beetailer ref*/
|
41 |
+
function checkUrl(){
|
42 |
+
if(getParam("fb_ref") && fb_ref_regex.test(getParam("fb_ref"))){
|
43 |
+
/* Deprecated */
|
44 |
+
/* General cookie */
|
45 |
+
createCookie("beetailer_shop", getParam("fb_ref").split("_")[1] , 720);
|
46 |
+
/* Checkout cookie */
|
47 |
+
if(getParam("checkout_token")){
|
48 |
+
createCookie("beetailer_checkout", getParam("checkout_token"), 720);
|
49 |
+
}
|
50 |
+
/* EO deprecated */
|
51 |
+
|
52 |
+
createCookie("beetailer_ref", getParam("fb_ref") , 720);
|
53 |
+
createCookie("beetailer_ref_date", new Date().getTime()/1000 , 720);
|
54 |
+
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
function hidePromoPopup(){
|
59 |
+
var head = document.getElementsByTagName('html')[0];
|
60 |
+
var child = document.getElementById("beetailer_promotion");
|
61 |
+
head.removeChild(child);
|
62 |
+
createCookie("hide_beetailer_promos", 1)
|
63 |
+
}
|
64 |
+
|
65 |
+
function addPromos(){
|
66 |
+
if(!readCookie('hide_beetailer_promos')){
|
67 |
+
/* Load promotions script */
|
68 |
+
var head= document.getElementsByTagName('head')[0];
|
69 |
+
var script= document.createElement('script');
|
70 |
+
script.type= 'text/javascript';
|
71 |
+
script.src= '//www.beetailer.com/out/promotions.js?domain=' + window.location.hostname;
|
72 |
+
head.appendChild(script);
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
function addBeesocial(){
|
77 |
+
if(typeof bt_widget_label == "undefined"){ bt_widget_label = "beesocial"};
|
78 |
+
if(document.getElementById(bt_widget_label) && !document.getElementById("social_widget_iframe")){
|
79 |
+
label = document.getElementById(bt_widget_label);
|
80 |
+
var attributes = document.getElementById(bt_widget_label).attributes;
|
81 |
+
var options = Array();
|
82 |
+
|
83 |
+
/* Load javascript vbles embeded in html tag attributes */
|
84 |
+
for (i=0;i<attributes.length; i++){
|
85 |
+
options[attributes[i].nodeName] = attributes[i].nodeValue;
|
86 |
+
}
|
87 |
+
|
88 |
+
/* Instanciate iframe script */
|
89 |
+
var iframe= document.createElement('iframe');
|
90 |
+
iframe.setAttribute("frameBorder", "0");
|
91 |
+
iframe.setAttribute("scrolling", "no");
|
92 |
+
iframe.setAttribute("width", "100%");
|
93 |
+
iframe.setAttribute("height", "1");
|
94 |
+
iframe.setAttribute("id", "social_widget_iframe");
|
95 |
+
var src= "//www.beetailer.com/out/social_widget" +
|
96 |
+
"?domain=" + options["data-domain"] +
|
97 |
+
"&product_id=" + options["data-product-id"] +
|
98 |
+
"&url=" + options["data-url"] +
|
99 |
+
"&data_comment_width=" + options['data-comment-width'] +
|
100 |
+
"&data_css_style=" + escape(options['data-css-style']) +
|
101 |
+
"&data_disable_twitter=" + options['data-disable-twitter'] +
|
102 |
+
"&data_disable_like=" + options['data-disable-like'] +
|
103 |
+
"&data_disable_comment=" + options['data-disable-comment'] +
|
104 |
+
"&data_disable_plusone=" + options['data-disable-plusone'] +
|
105 |
+
"&data_twitter_text=" + options['data-twitter-text'] +
|
106 |
+
"&data_fb_comment_style=" + options['data-fb-comment-style'] +
|
107 |
+
"&data_fb_comment_num_post=" + options['data-fb-comment-num-post'] +
|
108 |
+
"&platform=" + options['platform'];
|
109 |
+
|
110 |
+
iframe.src= src + "&hash=" + MD5(src) + "#" + window.location.href;
|
111 |
+
label.appendChild(iframe);
|
112 |
+
|
113 |
+
/* Resize listener */
|
114 |
+
XD.receiveMessage(function(message){
|
115 |
+
console.warn('Resizing iframe ' + message.data + 'px');
|
116 |
+
document.getElementById('social_widget_iframe').style.height= message.data + 'px';
|
117 |
+
}, 'https://www.beetailer.com');
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
// Resize post_message
|
122 |
+
//
|
123 |
+
var XD = function(){
|
124 |
+
var interval_id,
|
125 |
+
last_hash,
|
126 |
+
cache_bust = 1,
|
127 |
+
attached_callback,
|
128 |
+
window = this;
|
129 |
+
|
130 |
+
return {
|
131 |
+
postMessage : function(message, target_url, target) {
|
132 |
+
if (!target_url) {
|
133 |
+
return;
|
134 |
+
}
|
135 |
+
target = target || parent; // default to parent
|
136 |
+
if (window['postMessage']) {
|
137 |
+
// the browser supports window.postMessage, so call it with a targetOrigin
|
138 |
+
// set appropriately, based on the target_url parameter.
|
139 |
+
target['postMessage'](message, target_url.replace( /([^:]+:\/\/[^\/]+).*/, '$1'));
|
140 |
+
} else if (target_url) {
|
141 |
+
// the browser does not support window.postMessage, so use the window.location.hash fragment hack
|
142 |
+
target.location = target_url.replace(/#.*$/, '') + '#' + (+new Date) + (cache_bust++) + '&' + message;
|
143 |
+
}
|
144 |
+
},
|
145 |
+
receiveMessage : function(callback, source_origin) {
|
146 |
+
// browser supports window.postMessage
|
147 |
+
if (window['postMessage']) {
|
148 |
+
// bind the callback to the actual event associated with window.postMessage
|
149 |
+
if (callback) {
|
150 |
+
attached_callback = function(e) {
|
151 |
+
if ((typeof source_origin === 'string' && typeof e.origin === 'string' && e.origin.replace(/http(s*):\/\//, "") !== source_origin.replace(/http(s*):\/\//, ""))
|
152 |
+
|| (Object.prototype.toString.call(source_origin) === "[object Function]" && source_origin(e.origin) === !1)) {
|
153 |
+
return !1;
|
154 |
+
}
|
155 |
+
callback(e);
|
156 |
+
};
|
157 |
+
}
|
158 |
+
if (window['addEventListener']) {
|
159 |
+
window[callback ? 'addEventListener' : 'removeEventListener']('message', attached_callback, !1);
|
160 |
+
} else {
|
161 |
+
window[callback ? 'attachEvent' : 'detachEvent']('onmessage', attached_callback);
|
162 |
+
}
|
163 |
+
} else {
|
164 |
+
// a polling loop is started & callback is called whenever the location.hash changes
|
165 |
+
interval_id && clearInterval(interval_id);
|
166 |
+
interval_id = null;
|
167 |
+
if (callback) {
|
168 |
+
interval_id = setInterval(function() {
|
169 |
+
var hash = document.location.hash,
|
170 |
+
re = /^#?\d+&/;
|
171 |
+
if (hash !== last_hash && re.test(hash)) {
|
172 |
+
last_hash = hash;
|
173 |
+
callback({data: hash.replace(re, '')});
|
174 |
+
}
|
175 |
+
}, 100);
|
176 |
+
}
|
177 |
+
}
|
178 |
+
}
|
179 |
+
};
|
180 |
+
}();
|
181 |
+
|
182 |
+
/**
|
183 |
+
*
|
184 |
+
* MD5 (Message-Digest Algorithm)
|
185 |
+
* http://www.webtoolkit.info/
|
186 |
+
*
|
187 |
+
**/
|
188 |
+
|
189 |
+
var MD5 = function (string) {
|
190 |
+
|
191 |
+
function RotateLeft(lValue, iShiftBits) {
|
192 |
+
return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
|
193 |
+
}
|
194 |
+
|
195 |
+
function AddUnsigned(lX,lY) {
|
196 |
+
var lX4,lY4,lX8,lY8,lResult;
|
197 |
+
lX8 = (lX & 0x80000000);
|
198 |
+
lY8 = (lY & 0x80000000);
|
199 |
+
lX4 = (lX & 0x40000000);
|
200 |
+
lY4 = (lY & 0x40000000);
|
201 |
+
lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
|
202 |
+
if (lX4 & lY4) {
|
203 |
+
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
|
204 |
+
}
|
205 |
+
if (lX4 | lY4) {
|
206 |
+
if (lResult & 0x40000000) {
|
207 |
+
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
|
208 |
+
} else {
|
209 |
+
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
|
210 |
+
}
|
211 |
+
} else {
|
212 |
+
return (lResult ^ lX8 ^ lY8);
|
213 |
+
}
|
214 |
+
}
|
215 |
+
|
216 |
+
function F(x,y,z) { return (x & y) | ((~x) & z); }
|
217 |
+
function G(x,y,z) { return (x & z) | (y & (~z)); }
|
218 |
+
function H(x,y,z) { return (x ^ y ^ z); }
|
219 |
+
function I(x,y,z) { return (y ^ (x | (~z))); }
|
220 |
+
|
221 |
+
function FF(a,b,c,d,x,s,ac) {
|
222 |
+
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
|
223 |
+
return AddUnsigned(RotateLeft(a, s), b);
|
224 |
+
};
|
225 |
+
|
226 |
+
function GG(a,b,c,d,x,s,ac) {
|
227 |
+
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
|
228 |
+
return AddUnsigned(RotateLeft(a, s), b);
|
229 |
+
};
|
230 |
+
|
231 |
+
function HH(a,b,c,d,x,s,ac) {
|
232 |
+
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
|
233 |
+
return AddUnsigned(RotateLeft(a, s), b);
|
234 |
+
};
|
235 |
+
|
236 |
+
function II(a,b,c,d,x,s,ac) {
|
237 |
+
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
|
238 |
+
return AddUnsigned(RotateLeft(a, s), b);
|
239 |
+
};
|
240 |
+
|
241 |
+
function ConvertToWordArray(string) {
|
242 |
+
var lWordCount;
|
243 |
+
var lMessageLength = string.length;
|
244 |
+
var lNumberOfWords_temp1=lMessageLength + 8;
|
245 |
+
var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
|
246 |
+
var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
|
247 |
+
var lWordArray=Array(lNumberOfWords-1);
|
248 |
+
var lBytePosition = 0;
|
249 |
+
var lByteCount = 0;
|
250 |
+
while ( lByteCount < lMessageLength ) {
|
251 |
+
lWordCount = (lByteCount-(lByteCount % 4))/4;
|
252 |
+
lBytePosition = (lByteCount % 4)*8;
|
253 |
+
lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
|
254 |
+
lByteCount++;
|
255 |
+
}
|
256 |
+
lWordCount = (lByteCount-(lByteCount % 4))/4;
|
257 |
+
lBytePosition = (lByteCount % 4)*8;
|
258 |
+
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
|
259 |
+
lWordArray[lNumberOfWords-2] = lMessageLength<<3;
|
260 |
+
lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
|
261 |
+
return lWordArray;
|
262 |
+
};
|
263 |
+
|
264 |
+
function WordToHex(lValue) {
|
265 |
+
var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
|
266 |
+
for (lCount = 0;lCount<=3;lCount++) {
|
267 |
+
lByte = (lValue>>>(lCount*8)) & 255;
|
268 |
+
WordToHexValue_temp = "0" + lByte.toString(16);
|
269 |
+
WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
|
270 |
+
}
|
271 |
+
return WordToHexValue;
|
272 |
+
};
|
273 |
+
|
274 |
+
function Utf8Encode(string) {
|
275 |
+
string = string.replace(/\r\n/g,"\n");
|
276 |
+
var utftext = "";
|
277 |
+
|
278 |
+
for (var n = 0; n < string.length; n++) {
|
279 |
+
|
280 |
+
var c = string.charCodeAt(n);
|
281 |
+
|
282 |
+
if (c < 128) {
|
283 |
+
utftext += String.fromCharCode(c);
|
284 |
+
}
|
285 |
+
else if((c > 127) && (c < 2048)) {
|
286 |
+
utftext += String.fromCharCode((c >> 6) | 192);
|
287 |
+
utftext += String.fromCharCode((c & 63) | 128);
|
288 |
+
}
|
289 |
+
else {
|
290 |
+
utftext += String.fromCharCode((c >> 12) | 224);
|
291 |
+
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
292 |
+
utftext += String.fromCharCode((c & 63) | 128);
|
293 |
+
}
|
294 |
+
|
295 |
+
}
|
296 |
+
|
297 |
+
return utftext;
|
298 |
+
};
|
299 |
+
|
300 |
+
var x=Array();
|
301 |
+
var k,AA,BB,CC,DD,a,b,c,d;
|
302 |
+
var S11=7, S12=12, S13=17, S14=22;
|
303 |
+
var S21=5, S22=9 , S23=14, S24=20;
|
304 |
+
var S31=4, S32=11, S33=16, S34=23;
|
305 |
+
var S41=6, S42=10, S43=15, S44=21;
|
306 |
+
|
307 |
+
string = Utf8Encode(string);
|
308 |
+
|
309 |
+
x = ConvertToWordArray(string);
|
310 |
+
|
311 |
+
a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
|
312 |
+
|
313 |
+
for (k=0;k<x.length;k+=16) {
|
314 |
+
AA=a; BB=b; CC=c; DD=d;
|
315 |
+
a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
|
316 |
+
d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
|
317 |
+
c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
|
318 |
+
b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
|
319 |
+
a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
|
320 |
+
d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
|
321 |
+
c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
|
322 |
+
b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
|
323 |
+
a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
|
324 |
+
d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
|
325 |
+
c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
|
326 |
+
b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
|
327 |
+
a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
|
328 |
+
d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
|
329 |
+
c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
|
330 |
+
b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
|
331 |
+
a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
|
332 |
+
d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
|
333 |
+
c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
|
334 |
+
b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
|
335 |
+
a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
|
336 |
+
d=GG(d,a,b,c,x[k+10],S22,0x2441453);
|
337 |
+
c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
|
338 |
+
b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
|
339 |
+
a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
|
340 |
+
d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
|
341 |
+
c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
|
342 |
+
b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
|
343 |
+
a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
|
344 |
+
d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
|
345 |
+
c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
|
346 |
+
b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
|
347 |
+
a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
|
348 |
+
d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
|
349 |
+
c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
|
350 |
+
b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
|
351 |
+
a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
|
352 |
+
d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
|
353 |
+
c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
|
354 |
+
b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
|
355 |
+
a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
|
356 |
+
d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
|
357 |
+
c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
|
358 |
+
b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
|
359 |
+
a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
|
360 |
+
d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
|
361 |
+
c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
|
362 |
+
b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
|
363 |
+
a=II(a,b,c,d,x[k+0], S41,0xF4292244);
|
364 |
+
d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
|
365 |
+
c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
|
366 |
+
b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
|
367 |
+
a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
|
368 |
+
d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
|
369 |
+
c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
|
370 |
+
b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
|
371 |
+
a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
|
372 |
+
d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
|
373 |
+
c=II(c,d,a,b,x[k+6], S43,0xA3014314);
|
374 |
+
b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
|
375 |
+
a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
|
376 |
+
d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
|
377 |
+
c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
|
378 |
+
b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
|
379 |
+
a=AddUnsigned(a,AA);
|
380 |
+
b=AddUnsigned(b,BB);
|
381 |
+
c=AddUnsigned(c,CC);
|
382 |
+
d=AddUnsigned(d,DD);
|
383 |
+
}
|
384 |
+
|
385 |
+
var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
|
386 |
+
|
387 |
+
return temp.toLowerCase();
|
388 |
+
}
|
389 |
+
|
390 |
+
window.onload=function(){ checkUrl(); addBeesocial(); addPromos(); };
|