Version Notes
After installation of the Catalog visibility plug-in, please clear the cache.
Download this release
Release Info
Developer | Cybage Software Pvt. Ltd. |
Extension | Cybage_Catalag_Visibility |
Version | 1.0.0.0 |
Comparing to | |
See all releases |
Version 1.0.0.0
- app/code/community/Cybage/Customergroup/Block/Adminhtml/Customergroup.php +53 -0
- app/code/community/Cybage/Customergroup/Block/Adminhtml/Js.php +46 -0
- app/code/community/Cybage/Customergroup/Block/Adminhtml/Renderer/Customergroup.php +44 -0
- app/code/community/Cybage/Customergroup/Helper/Attribute.php +21 -0
- app/code/community/Cybage/Customergroup/Helper/Data.php +76 -0
- app/code/community/Cybage/Customergroup/Model/Observer.php +433 -0
- app/code/community/Cybage/Customergroup/controllers/CustomergroupController.php +24 -0
- app/code/community/Cybage/Customergroup/etc/adminhtml.xml +35 -0
- app/code/community/Cybage/Customergroup/etc/config.xml +171 -0
- app/code/community/Cybage/Customergroup/etc/system.xml +77 -0
- app/code/community/Cybage/Customergroup/sql/customergroup_setup/mysql4-install-0.1.0.php +93 -0
- app/code/community/Cybage/Customergroupcore/Helper/Data.php +29 -0
- app/code/community/Cybage/Customergroupcore/Model/Category/Attribute/Backend/Customergroup.php +59 -0
- app/code/community/Cybage/Customergroupcore/Model/Category/Entity/Customergroupcore.php +49 -0
- app/code/community/Cybage/Customergroupcore/Model/Product/Entity/Customergroupcore.php +72 -0
- app/code/community/Cybage/Customergroupcore/etc/config.xml +32 -0
- app/design/adminhtml/default/default/layout/customergroup/customergroup.xml +46 -0
- app/design/adminhtml/default/default/template/customergroup/category/js.phtml +17 -0
- app/design/adminhtml/default/default/template/customergroup/customergroup.phtml +20 -0
- app/design/adminhtml/default/default/template/customergroup/js.phtml +67 -0
- app/design/frontend/base/default/layout/customergroup/customergroup.xml +50 -0
- app/design/frontend/base/default/template/customergroup/product/addto.phtml +30 -0
- app/design/frontend/base/default/template/customergroup/product/addtocart.phtml +27 -0
- app/design/frontend/base/default/template/customergroup/product/list.phtml +123 -0
- app/design/frontend/base/default/template/customergroup/wishlist/cart.phtml +54 -0
- app/design/frontend/base/default/template/customergroup/wishlist/share.phtml +18 -0
- app/design/frontend/base/default/template/customergroup/wishlist/sidebar.phtml +57 -0
- app/design/frontend/base/default/template/customergroup/wishlist/tocart.phtml +18 -0
- app/design/frontend/rwd/default/layout/customergroup/customergroup.xml +50 -0
- app/design/frontend/rwd/default/template/customergroup/product/addto.phtml +32 -0
- app/design/frontend/rwd/default/template/customergroup/product/addtocart.phtml +31 -0
- app/design/frontend/rwd/default/template/customergroup/product/list.phtml +188 -0
- app/design/frontend/rwd/default/template/customergroup/wishlist/cart.phtml +55 -0
- app/design/frontend/rwd/default/template/customergroup/wishlist/sidebar.phtml +58 -0
- app/etc/modules/Cybage_Customergroup.xml +27 -0
- app/etc/modules/Cybage_Customergroupcore.xml +21 -0
- js/customergroup/jquery-1.10.2.min.js +6 -0
- js/customergroup/jquery.noconflict.js +1 -0
- package.xml +30 -0
app/code/community/Cybage/Customergroup/Block/Adminhtml/Customergroup.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroup_Block_Adminhtml_Customergroup extends Mage_Adminhtml_Block_Template
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Retrieve customer group option array
|
17 |
+
*
|
18 |
+
* @return array
|
19 |
+
*/
|
20 |
+
public function getSelectedOptions()
|
21 |
+
{
|
22 |
+
$options = array();
|
23 |
+
if($this->getRequest()->getParam('categoryIds')) {
|
24 |
+
$options = Mage::helper('customergroupcore')->getStoreCustomerGroups();
|
25 |
+
$_categoryIds = array_unique(explode(',' , $this->getRequest()->getParam('categoryIds')));
|
26 |
+
$_customerGroup = array();
|
27 |
+
foreach ($_categoryIds as $key => $value) {
|
28 |
+
$_parentCategory = Mage::getModel('catalog/category')->load($value);
|
29 |
+
if($_parentCategory->getCustomergroup()) {
|
30 |
+
$_customerGroup = array_merge($_customerGroup,$_parentCategory->getCustomergroup());
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
if($_customerGroup) {
|
35 |
+
$options = array_intersect_key($options,array_flip($_customerGroup));
|
36 |
+
return $options;
|
37 |
+
}
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Retrieve already assigned customer group option array
|
43 |
+
*
|
44 |
+
* @return array
|
45 |
+
*/
|
46 |
+
public function getAssignedGroups()
|
47 |
+
{
|
48 |
+
if($this->getRequest()->getParam('assigned_groups')) {
|
49 |
+
return explode(',' , $this->getRequest()->getParam('assigned_groups'));
|
50 |
+
}
|
51 |
+
return false;
|
52 |
+
}
|
53 |
+
}
|
app/code/community/Cybage/Customergroup/Block/Adminhtml/Js.php
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroup_Block_Adminhtml_Js extends Mage_Adminhtml_Block_Catalog_Product_Edit_Js
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Check current product is assigned to any category
|
17 |
+
*
|
18 |
+
* @return boolean
|
19 |
+
*/
|
20 |
+
public function isAssignedToCategory()
|
21 |
+
{
|
22 |
+
$_currentProduct = $this->getProduct();
|
23 |
+
$_categoryIds = $_currentProduct->getCategoryIds();
|
24 |
+
if($_categoryIds) {
|
25 |
+
return true;
|
26 |
+
} else {
|
27 |
+
return false;
|
28 |
+
}
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Check and return if current product is assigned to any customer group
|
33 |
+
*
|
34 |
+
* @return array
|
35 |
+
*/
|
36 |
+
public function getAssignedGroups()
|
37 |
+
{
|
38 |
+
$_currentProduct = $this->getProduct();
|
39 |
+
$_customerGroups = $_currentProduct->getCustomergroup();
|
40 |
+
if($_customerGroups) {
|
41 |
+
return implode(',' , $_customerGroups);
|
42 |
+
} else {
|
43 |
+
return false;
|
44 |
+
}
|
45 |
+
}
|
46 |
+
}
|
app/code/community/Cybage/Customergroup/Block/Adminhtml/Renderer/Customergroup.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroup_Block_Adminhtml_Renderer_Customergroup extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
|
14 |
+
{
|
15 |
+
const ZERO = 0;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Renders grid column
|
19 |
+
*
|
20 |
+
* @param Varien_Object $row
|
21 |
+
* @return string
|
22 |
+
*/
|
23 |
+
public function render(Varien_Object $row)
|
24 |
+
{
|
25 |
+
if(strlen($row->getCustomergroup())) {
|
26 |
+
$customerGroups = explode(',',$row->getCustomergroup());
|
27 |
+
$suppStr = "";
|
28 |
+
if(count($customerGroups) > self::ZERO)
|
29 |
+
{
|
30 |
+
$suppStr = "<ul>";
|
31 |
+
foreach($customerGroups as $groupId)
|
32 |
+
{
|
33 |
+
$productModel = Mage::getModel('catalog/product');
|
34 |
+
$attr = $productModel->getResource()->getAttribute("customergroup");
|
35 |
+
if ($attr->usesSource()) {
|
36 |
+
$suppStr .= "<li>".$attr->getSource()->getOptionText("$groupId")."</li>";
|
37 |
+
}
|
38 |
+
}
|
39 |
+
$suppStr .= "</ul>";
|
40 |
+
}
|
41 |
+
return $suppStr;
|
42 |
+
}
|
43 |
+
}
|
44 |
+
}
|
app/code/community/Cybage/Customergroup/Helper/Attribute.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroup_Helper_Attribute extends Mage_Adminhtml_Helper_Catalog_Product_Edit_Action_Attribute
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Excluded from batch update attribute codes
|
17 |
+
*
|
18 |
+
* @var array
|
19 |
+
*/
|
20 |
+
protected $_excludedAttributes = array(0 =>'url_key', 1 => 'customergroup');
|
21 |
+
}
|
app/code/community/Cybage/Customergroup/Helper/Data.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroup_Helper_Data extends Mage_Core_Helper_Abstract
|
14 |
+
{
|
15 |
+
const ONE = 1;
|
16 |
+
protected $_isNotAllowed = false;
|
17 |
+
protected $_noMessage = false;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* check if module is enabled or not
|
21 |
+
*
|
22 |
+
* @return boolean
|
23 |
+
*/
|
24 |
+
public function isEnabled() {
|
25 |
+
return Mage::getStoreConfig('customergroup/setting/visibility');
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* check product's customer group
|
30 |
+
* @param wishlist item
|
31 |
+
* @return boolean
|
32 |
+
*/
|
33 |
+
public function checkProductCustomerGroups($product) {
|
34 |
+
$flag = false;
|
35 |
+
if($product->getCustomergroup()) {
|
36 |
+
$productCustGroupIds = explode(',', $product->getCustomergroup());
|
37 |
+
$customerGroupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
|
38 |
+
if(in_array($customerGroupId, $productCustGroupIds)) {
|
39 |
+
$flag = true;
|
40 |
+
} else {
|
41 |
+
$this->_isNotAllowed = true;
|
42 |
+
}
|
43 |
+
} else {
|
44 |
+
$this->_isNotAllowed = true;
|
45 |
+
}
|
46 |
+
if(count($product->getCategoryIds()) && $flag) {
|
47 |
+
foreach($product->getCategoryIds() as $catId) {
|
48 |
+
$category = Mage::getSingleton('catalog/category')->load($catId);
|
49 |
+
if($category->getAddtocart() != self::ONE) {
|
50 |
+
$flag = false;
|
51 |
+
$this->_isNotAllowed = true;
|
52 |
+
$this->_noMessage = true;
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
56 |
+
return $flag;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* check if any product in wishlist is not allowed
|
61 |
+
*
|
62 |
+
* @return boolean
|
63 |
+
*/
|
64 |
+
public function checkIsAllowed() {
|
65 |
+
return $this->_isNotAllowed;
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* set message
|
70 |
+
*
|
71 |
+
* @return string
|
72 |
+
*/
|
73 |
+
public function checkMessage() {
|
74 |
+
return $this->_noMessage;
|
75 |
+
}
|
76 |
+
}
|
app/code/community/Cybage/Customergroup/Model/Observer.php
ADDED
@@ -0,0 +1,433 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroup_Model_Observer
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Customer group id
|
17 |
+
*/
|
18 |
+
const NOT_LOGGED_IN = 0;
|
19 |
+
const ZERO = 0;
|
20 |
+
const ONE = 1;
|
21 |
+
const VISIBLE = 4;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Check module status
|
25 |
+
*/
|
26 |
+
public function checkModuleStatus()
|
27 |
+
{
|
28 |
+
$categoryAttribute = Mage::getModel('catalog/resource_eav_attribute')->loadByCode('catalog_category', 'customergroup');
|
29 |
+
$productAttribute = Mage::getModel('catalog/resource_eav_attribute')->loadByCode('catalog_product', 'customergroup');
|
30 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
31 |
+
$categoryAttribute->setIsVisible(self::ONE);
|
32 |
+
$productAttribute->setIsVisible(self::ONE);
|
33 |
+
$categoryAttribute->save();
|
34 |
+
$productAttribute->save();
|
35 |
+
} else {
|
36 |
+
$categoryAttribute->setIsVisible(self::ZERO);
|
37 |
+
$productAttribute->setIsVisible(self::ZERO);
|
38 |
+
$categoryAttribute->save();
|
39 |
+
$productAttribute->save();
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Check whether specified product is eligible for customer to view or not
|
45 |
+
*
|
46 |
+
* @param Varien_Event_Observer $observer
|
47 |
+
*/
|
48 |
+
public function checkCustomerGroupOnProductView($observer)
|
49 |
+
{
|
50 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
51 |
+
$action = $observer->getEvent()->getControllerAction();
|
52 |
+
|
53 |
+
if ($action instanceof Mage_Catalog_ProductController && $action->getRequest()->getActionName() == 'view' ) {
|
54 |
+
$productId = (int) $action->getRequest()->getParam('id');
|
55 |
+
$product = Mage::getSingleton('catalog/product')->load($productId);
|
56 |
+
|
57 |
+
$error = false;
|
58 |
+
$loginStatus = Mage::getSingleton('customer/session')->isLoggedIn();
|
59 |
+
if ($loginStatus) {
|
60 |
+
$customerGroupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
|
61 |
+
if(!in_array($customerGroupId, $product->getCustomergroup())) {
|
62 |
+
$error = true;
|
63 |
+
}
|
64 |
+
} else {
|
65 |
+
if(!in_array(self::NOT_LOGGED_IN, $product->getCustomergroup())) {
|
66 |
+
$error = true;
|
67 |
+
}
|
68 |
+
}
|
69 |
+
if ($error) {
|
70 |
+
Mage::getSingleton('core/session')->addError(Mage::helper('customergroup')->__('The selected product is no longer available and hence cannot be viewed'));
|
71 |
+
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
|
72 |
+
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
|
73 |
+
Mage::app()->getResponse()->sendResponse();
|
74 |
+
exit;
|
75 |
+
}
|
76 |
+
}
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Append customer group column into product grid
|
82 |
+
*
|
83 |
+
* @param Varien_Event_Observer $observer
|
84 |
+
*/
|
85 |
+
public function appendCustomerGroupColumn($observer)
|
86 |
+
{
|
87 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
88 |
+
$block = $observer->getBlock();
|
89 |
+
if (!isset($block)) {
|
90 |
+
return $this;
|
91 |
+
}
|
92 |
+
|
93 |
+
$block->addColumn('customergroup', array(
|
94 |
+
'header' => Mage::helper('catalog')->__('Customer Group'),
|
95 |
+
'width' => '80px',
|
96 |
+
'index' => 'customergroup',
|
97 |
+
'type' => 'options',
|
98 |
+
'options' => Mage::getSingleton('customergroupcore/product_entity_customergroupcore')->getOptionArray(),
|
99 |
+
'filter_condition_callback' => array($this, 'filterGroupsCondition'),
|
100 |
+
'renderer' => 'Cybage_Customergroup_Block_Adminhtml_Renderer_Customergroup',
|
101 |
+
));
|
102 |
+
|
103 |
+
$block->addColumnsOrder('customergroup', 'status')->sortColumnsByOrder();
|
104 |
+
|
105 |
+
return $this;
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Filter product collection using customer group
|
111 |
+
*
|
112 |
+
* @param Mage_Catalog_Model_Resource_Product_Collection $collection
|
113 |
+
*/
|
114 |
+
public function filterGroupsCondition($collection, $column)
|
115 |
+
{
|
116 |
+
$value = $column->getFilter()->getValue();
|
117 |
+
if (!$value && $value != self::ZERO) {
|
118 |
+
return;
|
119 |
+
}
|
120 |
+
|
121 |
+
$collection->addAttributeToFilter(
|
122 |
+
array(
|
123 |
+
array('attribute'=> 'customergroup', 'like' => $value),
|
124 |
+
array('attribute'=> 'customergroup', 'like' => $value.',%'),
|
125 |
+
array('attribute'=> 'customergroup', 'like' => '%,'.$value),
|
126 |
+
array('attribute'=> 'customergroup', 'like' => '%,'.$value.',%'),
|
127 |
+
)
|
128 |
+
);
|
129 |
+
}
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Append customer group attribute into product collection
|
133 |
+
*
|
134 |
+
* @param Varien_Event_Observer $observer
|
135 |
+
* @return Mage_Catalog_Model_Resource_Product_Collection
|
136 |
+
*/
|
137 |
+
public function appendCustomerGroupAttribute($observer)
|
138 |
+
{
|
139 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
140 |
+
$storeId = (int) Mage::app()->getRequest()->getParam('store', self::ZERO);
|
141 |
+
$collection = $observer->getCollection();
|
142 |
+
$collection->joinAttribute(
|
143 |
+
'customergroup', 'catalog_product/customergroup', 'entity_id', null, 'inner', $storeId
|
144 |
+
);
|
145 |
+
|
146 |
+
return $this;
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Added Customer group filter on catalog category collection
|
152 |
+
* @param Varien_Event_Observer $observer
|
153 |
+
* @return : Object
|
154 |
+
*/
|
155 |
+
public function checkCustomerGroupOnCategory($observer)
|
156 |
+
{
|
157 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
158 |
+
$collection = $observer->getEvent()->getCategoryCollection();
|
159 |
+
$this->applyCustomerGroupFilter($collection);
|
160 |
+
return $this;
|
161 |
+
}
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Added Customer group filter on catalog product collection
|
166 |
+
* @param Varien_Event_Observer $observer
|
167 |
+
* @return : Object
|
168 |
+
*/
|
169 |
+
public function checkCustomerGroupOnProduct($observer)
|
170 |
+
{
|
171 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
172 |
+
$collection = $observer->getCollection();
|
173 |
+
$beforeProducts = array();
|
174 |
+
foreach($collection->getData() as $product) {
|
175 |
+
$beforeProducts[$product['entity_id']] = $product;
|
176 |
+
}
|
177 |
+
$this->applyCustomerGroupFilter($collection);
|
178 |
+
if(Mage::app()->getRequest()->getControllerName() == "cart" && Mage::getSingleton('customer/session')->isLoggedIn()) {
|
179 |
+
$afterProducts = array();
|
180 |
+
$connection = Mage::getModel('core/resource')->getConnection('core_read');
|
181 |
+
$products = $connection->fetchAll($collection->getSelect());
|
182 |
+
foreach($products as $product) {
|
183 |
+
$afterProducts[$product['entity_id']] = $product;
|
184 |
+
}
|
185 |
+
$remainingProducts = array_diff_key($beforeProducts, $afterProducts);
|
186 |
+
if($remainingProducts) {
|
187 |
+
$name = array();
|
188 |
+
foreach($remainingProducts as $product) {
|
189 |
+
$product = Mage::getModel('catalog/product')->load($product['entity_id']);
|
190 |
+
if($product->getVisibility() == self::VISIBLE) {
|
191 |
+
$name[] = $product->getName();
|
192 |
+
}
|
193 |
+
}
|
194 |
+
$message = Mage::getStoreConfig('customergroup/setting/front_cart_message') ? Mage::getStoreConfig('customergroup/setting/front_cart_message') : "The below products are no longer available and hence have been removed from your cart:";
|
195 |
+
Mage::getSingleton('checkout/session')->addError(Mage::helper('customergroup')->__($message . " </br>'%s'", implode(", ", $name)));
|
196 |
+
}
|
197 |
+
}
|
198 |
+
return $this;
|
199 |
+
}
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* Add Filter For Customer Group on product or category collection
|
204 |
+
* @param : Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $collection
|
205 |
+
*/
|
206 |
+
public function applyCustomerGroupFilter($collection)
|
207 |
+
{
|
208 |
+
$customerGroupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
|
209 |
+
$customerGroup = Mage::getModel('customer/group')->load($customerGroupId);
|
210 |
+
$collection->addAttributeToFilter(
|
211 |
+
array(
|
212 |
+
array('attribute'=> 'customergroup', 'like' => $customerGroupId),
|
213 |
+
array('attribute'=> 'customergroup', 'like' => $customerGroupId.',%'),
|
214 |
+
array('attribute'=> 'customergroup', 'like' => '%,'.$customerGroupId),
|
215 |
+
array('attribute'=> 'customergroup', 'like' => '%,'.$customerGroupId.',%'),
|
216 |
+
)
|
217 |
+
);
|
218 |
+
}
|
219 |
+
|
220 |
+
/**
|
221 |
+
* Check Customer group on grouped, bundle and configurable product
|
222 |
+
* @param Varien_Event_Observer $observer
|
223 |
+
* @return : Object
|
224 |
+
*/
|
225 |
+
public function checkCustomerGroupOnParentProduct($observer)
|
226 |
+
{
|
227 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
228 |
+
$product = $observer->getProduct();
|
229 |
+
switch ($product->getTypeId()) {
|
230 |
+
case "grouped":
|
231 |
+
if (strlen($product->getCustomergroup())) {
|
232 |
+
$associatedProducts = $product->getTypeInstance(true)->getAssociatedProducts($product);
|
233 |
+
if(count($associatedProducts) > self::ZERO) {
|
234 |
+
$parentCustomerGroupIds = $this->checkCustomerGroupOnChildProduct($product, $associatedProducts);
|
235 |
+
$product->setCustomergroup(implode(',', $parentCustomerGroupIds));
|
236 |
+
$product->getResource()->saveAttribute($product, 'customergroup');
|
237 |
+
}
|
238 |
+
}
|
239 |
+
break;
|
240 |
+
|
241 |
+
case "bundle":
|
242 |
+
if (strlen($product->getCustomergroup())) {
|
243 |
+
$associatedProducts = $product->getTypeInstance(true)->getSelectionsCollection(
|
244 |
+
$product->getTypeInstance(true)->getOptionsIds($product), $product);
|
245 |
+
foreach($associatedProducts as $option) {
|
246 |
+
$associatedProductsIds[] = $option['entity_id'];
|
247 |
+
}
|
248 |
+
if(count($associatedProducts) > self::ZERO) {
|
249 |
+
$parentCustomerGroupIds = $this->checkCustomerGroupOnChildProduct($product, $associatedProducts);
|
250 |
+
$product->setCustomergroup(implode(',', $parentCustomerGroupIds));
|
251 |
+
$product->getResource()->saveAttribute($product, 'customergroup');
|
252 |
+
}
|
253 |
+
}
|
254 |
+
break;
|
255 |
+
|
256 |
+
case "configurable":
|
257 |
+
if (strlen($product->getCustomergroup())) {
|
258 |
+
$conf = Mage::getModel('catalog/product_type_configurable')->setProduct($product);
|
259 |
+
$associatedProducts = $conf->getUsedProductCollection()->addAttributeToSelect('*')->addFilterByRequiredOptions();
|
260 |
+
if(count($associatedProducts) > self::ZERO) {
|
261 |
+
$parentCustomerGroupIds = $this->checkCustomerGroupOnChildProduct($product, $associatedProducts);
|
262 |
+
$product->setCustomergroup(implode(',', $parentCustomerGroupIds));
|
263 |
+
$product->getResource()->saveAttribute($product, 'customergroup');
|
264 |
+
}
|
265 |
+
}
|
266 |
+
break;
|
267 |
+
|
268 |
+
case "simple":
|
269 |
+
$parentIds = array();
|
270 |
+
$parentIds = array_merge($parentIds, Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($product->getId()));
|
271 |
+
$parentIds = array_merge($parentIds, Mage::getSingleton("catalog/product_type_configurable")->getParentIdsByChild($product->getId()));
|
272 |
+
$parentIds = array_merge($parentIds, Mage::getSingleton("bundle/product_type")->getParentIdsByChild($product->getId()));
|
273 |
+
if($parentIds) {
|
274 |
+
$parentUrl = array();
|
275 |
+
foreach($parentIds as $parentId) {
|
276 |
+
$product = Mage::getModel('catalog/product')->load($parentId);
|
277 |
+
$parentUrl[] = sprintf("<a href=%s target='_blank'>%s</a>", Mage::getUrl('*/*/edit',array("id"=>$parentId)) , $product->getName());
|
278 |
+
}
|
279 |
+
}
|
280 |
+
if(!is_null($parentUrl)) {
|
281 |
+
$parentUrl = implode(", ", $parentUrl);
|
282 |
+
Mage::getSingleton('core/session')->addNotice(Mage::helper('customergroup')->__("If you have added or removed any customer group from this product then please ensure the same is done for the respective parent product. Click on the below link if you wish to proceed to make changes: </br> %s", $parentUrl));
|
283 |
+
}
|
284 |
+
break;
|
285 |
+
|
286 |
+
default:
|
287 |
+
break;
|
288 |
+
}
|
289 |
+
}
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Check Customer group is assigned to atleast single child product
|
294 |
+
* @param Varien_Event_Observer $observer
|
295 |
+
* @return : Object
|
296 |
+
*/
|
297 |
+
public function checkCustomerGroupOnChildProduct($product, $associatedProducts)
|
298 |
+
{
|
299 |
+
$parentCustomerGroupIds = explode(',' , $product->getCustomergroup());
|
300 |
+
$customerGroupLabel = array();
|
301 |
+
$productModel = Mage::getModel('catalog/product');
|
302 |
+
$attr = $productModel->getResource()->getAttribute("customergroup");
|
303 |
+
foreach($parentCustomerGroupIds as $key => $id) {
|
304 |
+
$flag = false;
|
305 |
+
foreach($associatedProducts as $childProduct) {
|
306 |
+
$childCustomerGroupIds = explode(',' , $childProduct->getCustomergroup());
|
307 |
+
if(in_array($id, $childCustomerGroupIds)) {
|
308 |
+
$flag = true;
|
309 |
+
}
|
310 |
+
}
|
311 |
+
if(!$flag) {
|
312 |
+
unset($parentCustomerGroupIds[$key]);
|
313 |
+
$customerGroupLabel[] = $attr->getSource()->getOptionText("$id");
|
314 |
+
}
|
315 |
+
}
|
316 |
+
if($customerGroupLabel) {
|
317 |
+
$customerGroupLabel = implode(", ", $customerGroupLabel);
|
318 |
+
Mage::getSingleton('core/session')->addNotice(Mage::helper('customergroup')->__("The below customer groups would be available for assignment only when they are assigned to any of the respective child products: </br> %s", $customerGroupLabel));
|
319 |
+
}
|
320 |
+
return $parentCustomerGroupIds;
|
321 |
+
}
|
322 |
+
|
323 |
+
/**
|
324 |
+
* remove customer group from child categories if it is removed from parent categories
|
325 |
+
* @param array
|
326 |
+
* @return : array
|
327 |
+
*/
|
328 |
+
public function checkCustomerGroupOnChildCategories($observer)
|
329 |
+
{
|
330 |
+
if(Mage::helper('customergroup')->isEnabled()) {
|
331 |
+
$category = $observer->getEvent()->getCategory();
|
332 |
+
$params = Mage::app()->getRequest()->getParam('general');
|
333 |
+
if($params['customergroup']) {
|
334 |
+
$children = $category->getResource()->getChildren($category, true);
|
335 |
+
if(count($children)) {
|
336 |
+
$category = Mage::getSingleton('catalog/category')->load($params['id']);
|
337 |
+
if(count($category->getCustomergroup())) {
|
338 |
+
$removedCategory = array_diff($category->getCustomergroup(), $params['customergroup']);
|
339 |
+
if(count($removedCategory)) {
|
340 |
+
foreach($children as $child) {
|
341 |
+
$childCategory = Mage::getSingleton('catalog/category')->load($child);
|
342 |
+
if(count($childCategory->getCustomergroup())) {
|
343 |
+
$diffCategory = array_diff($childCategory->getCustomergroup(), $removedCategory);
|
344 |
+
if(count($diffCategory)) {
|
345 |
+
$childCategory->setCustomergroup(implode(",", $diffCategory));
|
346 |
+
} else {
|
347 |
+
$childCategory->setCustomergroup("");
|
348 |
+
}
|
349 |
+
$childCategory->getResource()->saveAttribute($childCategory, 'customergroup');
|
350 |
+
}
|
351 |
+
}
|
352 |
+
}
|
353 |
+
}
|
354 |
+
}
|
355 |
+
$children[] = $params['id'];
|
356 |
+
$productCollection = Mage::getModel('catalog/product')->getCollection()
|
357 |
+
->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
|
358 |
+
->addAttributeToFilter('category_id', array('in' => $children));
|
359 |
+
if(count($productCollection->getData())) {
|
360 |
+
$category = Mage::getSingleton('catalog/category')->load($params['id']);
|
361 |
+
if(count($category->getCustomergroup())) {
|
362 |
+
$removedCategory = array_diff($category->getCustomergroup(), $params['customergroup']);
|
363 |
+
if(count($removedCategory)) {
|
364 |
+
foreach($productCollection->getData() as $product) {
|
365 |
+
$product = Mage::getSingleton('catalog/product')->load($product['entity_id']);
|
366 |
+
if(count($product->getCustomergroup())) {
|
367 |
+
$diffCategory = array_diff($product->getCustomergroup(), $removedCategory);
|
368 |
+
if(count($diffCategory)) {
|
369 |
+
$product->setCustomergroup(implode(",", $diffCategory));
|
370 |
+
} else {
|
371 |
+
$product->setCustomergroup("");
|
372 |
+
}
|
373 |
+
$product->getResource()->saveAttribute($product, 'customergroup');
|
374 |
+
}
|
375 |
+
}
|
376 |
+
}
|
377 |
+
}
|
378 |
+
}
|
379 |
+
} else {
|
380 |
+
$children = $category->getResource()->getChildren($category, true);
|
381 |
+
if(count($children)) {
|
382 |
+
foreach($children as $child) {
|
383 |
+
$childCategory = Mage::getSingleton('catalog/category')->load($child);
|
384 |
+
$childCategory->setCustomergroup("");
|
385 |
+
$childCategory->getResource()->saveAttribute($childCategory, 'customergroup');
|
386 |
+
}
|
387 |
+
}
|
388 |
+
$children[] = $params['id'];
|
389 |
+
$productCollection = Mage::getModel('catalog/product')->getCollection()
|
390 |
+
->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
|
391 |
+
->addAttributeToFilter('category_id', array('in' => $children));
|
392 |
+
if(count($productCollection->getData())) {
|
393 |
+
foreach($productCollection->getData() as $product) {
|
394 |
+
$product = Mage::getSingleton('catalog/product')->load($product['entity_id']);
|
395 |
+
$product->setCustomergroup("");
|
396 |
+
$product->getResource()->saveAttribute($product, 'customergroup');
|
397 |
+
}
|
398 |
+
}
|
399 |
+
}
|
400 |
+
if(!$params['addtocart']) {
|
401 |
+
$children = $category->getResource()->getChildren($category, true);
|
402 |
+
if(count($children)) {
|
403 |
+
foreach($children as $child) {
|
404 |
+
$childCategory = Mage::getSingleton('catalog/category')->load($child);
|
405 |
+
$childCategory->setAddtocart(false);
|
406 |
+
$childCategory->getResource()->saveAttribute($childCategory, 'addtocart');
|
407 |
+
}
|
408 |
+
}
|
409 |
+
}
|
410 |
+
if($params['path']) {
|
411 |
+
$category = $observer->getEvent()->getCategory();
|
412 |
+
$path = explode('/', $params['path']);
|
413 |
+
unset($path[self::ZERO]);
|
414 |
+
unset($path[self::ONE]);
|
415 |
+
$flag = false;
|
416 |
+
foreach($path as $id) {
|
417 |
+
if($id != $params['id']) {
|
418 |
+
$parentCategory = Mage::getSingleton('catalog/category')->load($id);
|
419 |
+
if($parentCategory->getAddtocart() != self::ONE) {
|
420 |
+
$flag = true;
|
421 |
+
}
|
422 |
+
}
|
423 |
+
}
|
424 |
+
if($flag) {
|
425 |
+
$category->setAddtocart(self::ZERO);
|
426 |
+
$message = Mage::getStoreConfig('customergroup/setting/addtocart_message') ? Mage::getStoreConfig('customergroup/setting/addtocart_message') : "Enable 'Add to Cart Button' on the parent category";
|
427 |
+
Mage::getSingleton('core/session')->addNotice($message);
|
428 |
+
}
|
429 |
+
}
|
430 |
+
return $this;
|
431 |
+
}
|
432 |
+
}
|
433 |
+
}
|
app/code/community/Cybage/Customergroup/controllers/CustomergroupController.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroup_CustomergroupController extends Mage_Adminhtml_Controller_Action
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Ajax action for retrive all customer groups of categories
|
17 |
+
*
|
18 |
+
*/
|
19 |
+
public function indexAction()
|
20 |
+
{
|
21 |
+
$this->loadLayout();
|
22 |
+
$this->renderLayout();
|
23 |
+
}
|
24 |
+
}
|
app/code/community/Cybage/Customergroup/etc/adminhtml.xml
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroup
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
<config>
|
15 |
+
<acl>
|
16 |
+
<resources>
|
17 |
+
<admin>
|
18 |
+
<children>
|
19 |
+
<system>
|
20 |
+
<children>
|
21 |
+
<config>
|
22 |
+
<children>
|
23 |
+
<customergroup translate="title" module="customergroup">
|
24 |
+
<title>customergroup</title>
|
25 |
+
<sort_order>11</sort_order>
|
26 |
+
</customergroup>
|
27 |
+
</children>
|
28 |
+
</config>
|
29 |
+
</children>
|
30 |
+
</system>
|
31 |
+
</children>
|
32 |
+
</admin>
|
33 |
+
</resources>
|
34 |
+
</acl>
|
35 |
+
</config>
|
app/code/community/Cybage/Customergroup/etc/config.xml
ADDED
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroup
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
<config>
|
15 |
+
<modules>
|
16 |
+
<Cybage_Customergroup>
|
17 |
+
<version>0.1.0</version>
|
18 |
+
</Cybage_Customergroup>
|
19 |
+
</modules>
|
20 |
+
<global>
|
21 |
+
<blocks>
|
22 |
+
<customergroup>
|
23 |
+
<class>Cybage_Customergroup_Block</class>
|
24 |
+
</customergroup>
|
25 |
+
</blocks>
|
26 |
+
<helpers>
|
27 |
+
<customergroup>
|
28 |
+
<class>Cybage_Customergroup_Helper</class>
|
29 |
+
</customergroup>
|
30 |
+
<adminhtml>
|
31 |
+
<rewrite>
|
32 |
+
<catalog_product_edit_action_attribute>Cybage_Customergroup_Helper_Attribute</catalog_product_edit_action_attribute>
|
33 |
+
</rewrite>
|
34 |
+
</adminhtml>
|
35 |
+
</helpers>
|
36 |
+
<models>
|
37 |
+
<customergroup>
|
38 |
+
<class>Cybage_Customergroup_Model</class>
|
39 |
+
</customergroup>
|
40 |
+
</models>
|
41 |
+
<resources>
|
42 |
+
<customergroup_setup>
|
43 |
+
<setup>
|
44 |
+
<module>Cybage_Customergroup</module>
|
45 |
+
<class>Mage_Eav_Model_Entity_Setup</class>
|
46 |
+
</setup>
|
47 |
+
<connection>
|
48 |
+
<use>core_setup</use>
|
49 |
+
</connection>
|
50 |
+
</customergroup_setup>
|
51 |
+
<customergroup_write>
|
52 |
+
<connection>
|
53 |
+
<use>core_write</use>
|
54 |
+
</connection>
|
55 |
+
</customergroup_write>
|
56 |
+
<customergroup_read>
|
57 |
+
<connection>
|
58 |
+
<use>core_read</use>
|
59 |
+
</connection>
|
60 |
+
</customergroup_read>
|
61 |
+
</resources>
|
62 |
+
</global>
|
63 |
+
<frontend>
|
64 |
+
<events>
|
65 |
+
<controller_action_predispatch_catalog_product_view>
|
66 |
+
<observers>
|
67 |
+
<customergroup_check>
|
68 |
+
<class>customergroup/observer</class>
|
69 |
+
<method>checkCustomerGroupOnProductView</method>
|
70 |
+
</customergroup_check>
|
71 |
+
</observers>
|
72 |
+
</controller_action_predispatch_catalog_product_view>
|
73 |
+
<catalog_category_collection_load_before>
|
74 |
+
<observers>
|
75 |
+
<category_customergroup_check>
|
76 |
+
<class>customergroup/observer</class>
|
77 |
+
<method>checkCustomerGroupOnCategory</method>
|
78 |
+
</category_customergroup_check>
|
79 |
+
</observers>
|
80 |
+
</catalog_category_collection_load_before>
|
81 |
+
<catalog_product_collection_load_before>
|
82 |
+
<observers>
|
83 |
+
<product_customergroup_check>
|
84 |
+
<class>customergroup/observer</class>
|
85 |
+
<method>checkCustomerGroupOnProduct</method>
|
86 |
+
</product_customergroup_check>
|
87 |
+
</observers>
|
88 |
+
</catalog_product_collection_load_before>
|
89 |
+
</events>
|
90 |
+
<layout>
|
91 |
+
<updates>
|
92 |
+
<customergroup>
|
93 |
+
<file>customergroup/customergroup.xml</file>
|
94 |
+
</customergroup>
|
95 |
+
</updates>
|
96 |
+
</layout>
|
97 |
+
</frontend>
|
98 |
+
<admin>
|
99 |
+
<routers>
|
100 |
+
<adminhtml>
|
101 |
+
<use>admin</use>
|
102 |
+
<args>
|
103 |
+
<modules>
|
104 |
+
<Cybage_Customergroup after="Mage_Adminhtml">Cybage_Customergroup</Cybage_Customergroup>
|
105 |
+
</modules>
|
106 |
+
</args>
|
107 |
+
</adminhtml>
|
108 |
+
</routers>
|
109 |
+
</admin>
|
110 |
+
<adminhtml>
|
111 |
+
<layout>
|
112 |
+
<updates>
|
113 |
+
<customergroup>
|
114 |
+
<file>customergroup/customergroup.xml</file>
|
115 |
+
</customergroup>
|
116 |
+
</updates>
|
117 |
+
</layout>
|
118 |
+
<events>
|
119 |
+
<controller_action_predispatch>
|
120 |
+
<observers>
|
121 |
+
<module_visibility_check>
|
122 |
+
<class>customergroup/observer</class>
|
123 |
+
<method>checkModuleStatus</method>
|
124 |
+
</module_visibility_check>
|
125 |
+
</observers>
|
126 |
+
</controller_action_predispatch>
|
127 |
+
<adminhtml_catalog_product_grid_prepare_massaction>
|
128 |
+
<observers>
|
129 |
+
<customgrid_column_append>
|
130 |
+
<class>customergroup/observer</class>
|
131 |
+
<method>appendCustomerGroupColumn</method>
|
132 |
+
</customgrid_column_append>
|
133 |
+
</observers>
|
134 |
+
</adminhtml_catalog_product_grid_prepare_massaction>
|
135 |
+
<catalog_product_collection_load_before>
|
136 |
+
<observers>
|
137 |
+
<customergroup_attribute_append>
|
138 |
+
<class>customergroup/observer</class>
|
139 |
+
<method>appendCustomerGroupAttribute</method>
|
140 |
+
</customergroup_attribute_append>
|
141 |
+
</observers>
|
142 |
+
</catalog_product_collection_load_before>
|
143 |
+
<catalog_category_save_before>
|
144 |
+
<observers>
|
145 |
+
<child_category_customergroup_check>
|
146 |
+
<class>customergroup/observer</class>
|
147 |
+
<method>checkCustomerGroupOnChildCategories</method>
|
148 |
+
</child_category_customergroup_check>
|
149 |
+
</observers>
|
150 |
+
</catalog_category_save_before>
|
151 |
+
<catalog_product_save_after>
|
152 |
+
<observers>
|
153 |
+
<parent_product_customergroup_check>
|
154 |
+
<class>customergroup/observer</class>
|
155 |
+
<method>checkCustomerGroupOnParentProduct</method>
|
156 |
+
</parent_product_customergroup_check>
|
157 |
+
</observers>
|
158 |
+
</catalog_product_save_after>
|
159 |
+
</events>
|
160 |
+
</adminhtml>
|
161 |
+
<default>
|
162 |
+
<customergroup>
|
163 |
+
<setting>
|
164 |
+
<visibility>1</visibility>
|
165 |
+
<message>Product no longer available.</message>
|
166 |
+
<addtocart_message>Enable 'Add to Cart Button' on the parent category.</addtocart_message>
|
167 |
+
<front_cart_message>The below products are no longer available and hence have been removed from your cart:</front_cart_message>
|
168 |
+
</setting>
|
169 |
+
</customergroup>
|
170 |
+
</default>
|
171 |
+
</config>
|
app/code/community/Cybage/Customergroup/etc/system.xml
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroup
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
<config>
|
15 |
+
<tabs>
|
16 |
+
<customergroup_tab translate="label" module="customergroup">
|
17 |
+
<label>Cybage</label>
|
18 |
+
<sort_order>300</sort_order>
|
19 |
+
</customergroup_tab>
|
20 |
+
</tabs>
|
21 |
+
<sections>
|
22 |
+
<customergroup translate="label" module="customergroup">
|
23 |
+
<label>Catalog Visibility</label>
|
24 |
+
<tab>customergroup_tab</tab>
|
25 |
+
<frontend_type>text</frontend_type>
|
26 |
+
<sort_order>200</sort_order>
|
27 |
+
<show_in_default>1</show_in_default>
|
28 |
+
<show_in_website>1</show_in_website>
|
29 |
+
<show_in_store>1</show_in_store>
|
30 |
+
<groups>
|
31 |
+
<setting translate="label" module="customergroup">
|
32 |
+
<label>Catalog Visibility Settings</label>
|
33 |
+
<frontend_type>text</frontend_type>
|
34 |
+
<sort_order>4</sort_order>
|
35 |
+
<show_in_default>1</show_in_default>
|
36 |
+
<show_in_website>1</show_in_website>
|
37 |
+
<show_in_store>1</show_in_store>
|
38 |
+
<fields>
|
39 |
+
<visibility translate="label" module="customergroup">
|
40 |
+
<label>Module Status</label>
|
41 |
+
<frontend_type>select</frontend_type>
|
42 |
+
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
43 |
+
<sort_order>1</sort_order>
|
44 |
+
<show_in_default>1</show_in_default>
|
45 |
+
<show_in_website>1</show_in_website>
|
46 |
+
<show_in_store>1</show_in_store>
|
47 |
+
</visibility>
|
48 |
+
<message translate="label" module="customergroup">
|
49 |
+
<label>Wishlist Custom Message</label>
|
50 |
+
<frontend_type>text</frontend_type>
|
51 |
+
<sort_order>2</sort_order>
|
52 |
+
<show_in_default>1</show_in_default>
|
53 |
+
<show_in_website>1</show_in_website>
|
54 |
+
<show_in_store>1</show_in_store>
|
55 |
+
</message>
|
56 |
+
<addtocart_message translate="label" module="customergroup">
|
57 |
+
<label>Disable Add To Cart Button Custom Message - Admin</label>
|
58 |
+
<frontend_type>text</frontend_type>
|
59 |
+
<sort_order>3</sort_order>
|
60 |
+
<show_in_default>1</show_in_default>
|
61 |
+
<show_in_website>1</show_in_website>
|
62 |
+
<show_in_store>1</show_in_store>
|
63 |
+
</addtocart_message>
|
64 |
+
<front_cart_message translate="label" module="customergroup">
|
65 |
+
<label>Product Remove From Shopping Cart Custom Message - Frontend</label>
|
66 |
+
<frontend_type>text</frontend_type>
|
67 |
+
<sort_order>4</sort_order>
|
68 |
+
<show_in_default>1</show_in_default>
|
69 |
+
<show_in_website>1</show_in_website>
|
70 |
+
<show_in_store>1</show_in_store>
|
71 |
+
</front_cart_message>
|
72 |
+
</fields>
|
73 |
+
</setting>
|
74 |
+
</groups>
|
75 |
+
</customergroup>
|
76 |
+
</sections>
|
77 |
+
</config>
|
app/code/community/Cybage/Customergroup/sql/customergroup_setup/mysql4-install-0.1.0.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
/** @var $installer Mage_Catalog_Model_Resource_Setup */
|
14 |
+
$installer = new Mage_Catalog_Model_Resource_Setup();
|
15 |
+
$installer->startSetup();
|
16 |
+
$installer->addAttribute('catalog_product', 'customergroup', array(
|
17 |
+
'attribute_set' => 'Default',
|
18 |
+
'group' => 'General',
|
19 |
+
'label' => 'Customer Group',
|
20 |
+
'visible' => 1,
|
21 |
+
'type' => 'varchar',
|
22 |
+
'input' => 'multiselect',
|
23 |
+
'system' => false,
|
24 |
+
'required' => false,
|
25 |
+
'is_configurable' => false,
|
26 |
+
'user_defined' => true,
|
27 |
+
'source' => 'customergroupcore/product_entity_customergroupcore',
|
28 |
+
'backend' => 'customergroupcore/category_attribute_backend_customergroup',
|
29 |
+
'default' => 0
|
30 |
+
));
|
31 |
+
$installer->addAttribute('catalog_category', 'addtocart', array(
|
32 |
+
'type' => 'int',
|
33 |
+
'label'=> 'Add To Cart Button',
|
34 |
+
'input' => 'select',
|
35 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
|
36 |
+
'visible' => true,
|
37 |
+
'required' => false,
|
38 |
+
'user_defined' => true,
|
39 |
+
'default' => 1,
|
40 |
+
'source' => 'eav/entity_attribute_source_boolean',
|
41 |
+
'group' => "Display Settings"
|
42 |
+
));
|
43 |
+
$installer->addAttribute('catalog_category', 'customergroup', array(
|
44 |
+
'type' => 'varchar',
|
45 |
+
'label'=> 'Customer Group',
|
46 |
+
'input' => 'multiselect',
|
47 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
|
48 |
+
'visible' => true,
|
49 |
+
'required' => false,
|
50 |
+
'user_defined' => true,
|
51 |
+
'default' => 0,
|
52 |
+
'source' => 'customergroupcore/category_entity_customergroupcore',
|
53 |
+
'backend' => 'customergroupcore/category_attribute_backend_customergroup',
|
54 |
+
'group' => "Display Settings"
|
55 |
+
));
|
56 |
+
|
57 |
+
$installer->endSetup();
|
58 |
+
|
59 |
+
$customerGroup = Mage::getSingleton('customer/group');
|
60 |
+
$allGroups = $customerGroup->getCollection()->toOptionHash();
|
61 |
+
$allGroups = implode(",", array_flip($allGroups));
|
62 |
+
|
63 |
+
$currentStore = Mage::app()->getStore()->getId();
|
64 |
+
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID);
|
65 |
+
$category = Mage::getModel('catalog/category');
|
66 |
+
$categoryTree = $category->getTreeModel()->load();
|
67 |
+
$categoryIds = $categoryTree->getCollection()->getAllIds();
|
68 |
+
if ($categoryIds) {
|
69 |
+
try {
|
70 |
+
foreach($categoryIds as $id){
|
71 |
+
$singleCategory = Mage::getModel('catalog/category')->load($id);
|
72 |
+
$singleCategory->setCustomergroup($allGroups);
|
73 |
+
$singleCategory->getResource()->saveAttribute($singleCategory, 'customergroup');
|
74 |
+
$singleCategory->setAddtocart(true);
|
75 |
+
$singleCategory->getResource()->saveAttribute($singleCategory, 'addtocart');
|
76 |
+
}
|
77 |
+
} catch (Mage_Core_Exception $e) {
|
78 |
+
Mage::log($e->__toString(), null, 'customergroup_cat.log');
|
79 |
+
}
|
80 |
+
}
|
81 |
+
Mage::app()->getStore()->setId($currentStore);
|
82 |
+
|
83 |
+
$productIds = Mage::getResourceModel('catalog/product_collection')
|
84 |
+
->getAllIds();
|
85 |
+
|
86 |
+
$attributeData = array("customergroup" => $allGroups );
|
87 |
+
$storeId = 0;
|
88 |
+
try {
|
89 |
+
Mage::getSingleton('catalog/product_action')
|
90 |
+
->updateAttributes($productIds, $attributeData, $storeId);
|
91 |
+
} catch (Mage_Core_Exception $e) {
|
92 |
+
Mage::log($e->__toString(), null, 'customergroup.log');
|
93 |
+
}
|
app/code/community/Cybage/Customergroupcore/Helper/Data.php
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroupcore
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroupcore_Helper_Data extends Mage_Core_Helper_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Get store customer groups
|
17 |
+
*
|
18 |
+
* @return array
|
19 |
+
*/
|
20 |
+
public function getStoreCustomerGroups() {
|
21 |
+
$options = array();
|
22 |
+
$customerGroup = Mage::getSingleton('customer/group');
|
23 |
+
$allGroups = $customerGroup->getCollection()->toOptionHash();
|
24 |
+
foreach ($allGroups as $key => $allGroup) {
|
25 |
+
$options[$key] = array( 'value' => $key, 'label' => $allGroup );
|
26 |
+
}
|
27 |
+
return $options;
|
28 |
+
}
|
29 |
+
}
|
app/code/community/Cybage/Customergroupcore/Model/Category/Attribute/Backend/Customergroup.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroupcore
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroupcore_Model_Category_Attribute_Backend_Customergroup
|
14 |
+
extends Mage_Eav_Model_Entity_Attribute_Backend_Abstract
|
15 |
+
{
|
16 |
+
const ATTRIBUTE_CODE = 'customergroup';
|
17 |
+
|
18 |
+
public function validate($object)
|
19 |
+
{
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Before Attribute Save Process
|
24 |
+
*
|
25 |
+
* @param Varien_Object $object
|
26 |
+
* @return Cybage_Customergroupcore_Model_Category_Attribute_Backend_Customergroup
|
27 |
+
*/
|
28 |
+
public function beforeSave($object) {
|
29 |
+
$attributeCode = $this->getAttribute()->getName();
|
30 |
+
if ($attributeCode == self::ATTRIBUTE_CODE) {
|
31 |
+
$data = $object->getData($attributeCode);
|
32 |
+
if (!is_array($data)) {
|
33 |
+
$data = array();
|
34 |
+
}
|
35 |
+
$object->setData($attributeCode, join(',', $data));
|
36 |
+
}
|
37 |
+
if (is_null($object->getData($attributeCode))) {
|
38 |
+
$object->setData($attributeCode, false);
|
39 |
+
}
|
40 |
+
return $this;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* After Attribute Load Process
|
45 |
+
*
|
46 |
+
* @param Varien_Object $object
|
47 |
+
* @return Cybage_Customergroupcore_Model_Category_Attribute_Backend_Customergroup
|
48 |
+
*/
|
49 |
+
public function afterLoad($object) {
|
50 |
+
$attributeCode = $this->getAttribute()->getName();
|
51 |
+
if ($attributeCode == self::ATTRIBUTE_CODE) {
|
52 |
+
$data = $object->getData($attributeCode);
|
53 |
+
if (strlen($data)) {
|
54 |
+
$object->setData($attributeCode, explode(',', $data));
|
55 |
+
}
|
56 |
+
}
|
57 |
+
return $this;
|
58 |
+
}
|
59 |
+
}
|
app/code/community/Cybage/Customergroupcore/Model/Category/Entity/Customergroupcore.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroupcore
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroupcore_Model_Category_Entity_Customergroupcore extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Retrieve customer group option array
|
17 |
+
*
|
18 |
+
* @return array
|
19 |
+
*/
|
20 |
+
public function getAllOptions()
|
21 |
+
{
|
22 |
+
if ( !$this->_options ) {
|
23 |
+
$this->_options = Mage::helper('customergroupcore')->getStoreCustomerGroups();
|
24 |
+
}
|
25 |
+
$_currentCategory = Mage::registry('current_category');
|
26 |
+
if($_currentCategory->getParentId()) {
|
27 |
+
$_parentCategory = Mage::getModel('catalog/category')->load($_currentCategory->getParentId());
|
28 |
+
if($_parentCategory->getCustomergroup()) {
|
29 |
+
$_customerGroup = array_flip($_parentCategory->getCustomergroup());
|
30 |
+
$this->_options = array_intersect_key($this->_options,$_customerGroup);
|
31 |
+
} else {
|
32 |
+
$emptyOption[] = array("value"=>'-1', "label"=>'Assign customer groups to parent category first');
|
33 |
+
return $emptyOption;
|
34 |
+
}
|
35 |
+
} else if(Mage::app()->getRequest()->getParam('parent')) {
|
36 |
+
$_parentCategoryId = Mage::app()->getRequest()->getParam('parent');
|
37 |
+
$_parentCategory = Mage::getModel('catalog/category')->load($_parentCategoryId);
|
38 |
+
if($_parentCategory->getCustomergroup()) {
|
39 |
+
$_customerGroup = array_flip($_parentCategory->getCustomergroup());
|
40 |
+
$this->_options = array_intersect_key($this->_options,$_customerGroup);
|
41 |
+
} else {
|
42 |
+
$emptyOption[] = array("value"=>'-1', "label"=>'Assign customer groups to parent category first');
|
43 |
+
return $emptyOption;
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
return $this->_options;
|
48 |
+
}
|
49 |
+
}
|
app/code/community/Cybage/Customergroupcore/Model/Product/Entity/Customergroupcore.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroupcore
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
class Cybage_Customergroupcore_Model_Product_Entity_Customergroupcore extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
|
14 |
+
{
|
15 |
+
/**
|
16 |
+
* Retrieve customer group option array
|
17 |
+
*
|
18 |
+
* @return array
|
19 |
+
*/
|
20 |
+
public function getAllOptions()
|
21 |
+
{
|
22 |
+
if ( !$this->_options ) {
|
23 |
+
$this->_options = Mage::helper('customergroupcore')->getStoreCustomerGroups();
|
24 |
+
}
|
25 |
+
if(Mage::registry('current_product')) {
|
26 |
+
$_currentProduct = Mage::registry('current_product');
|
27 |
+
$_categoryIds = $_currentProduct->getCategoryIds();
|
28 |
+
if($_categoryIds) {
|
29 |
+
$_customerGroup = array();
|
30 |
+
foreach ($_categoryIds as $key => $value) {
|
31 |
+
$_parentCategory = Mage::getModel('catalog/category')->load($value);
|
32 |
+
if($_parentCategory->getCustomergroup()) {
|
33 |
+
$_customerGroup = array_merge($_customerGroup,$_parentCategory->getCustomergroup());
|
34 |
+
}
|
35 |
+
}
|
36 |
+
if($_customerGroup) {
|
37 |
+
$this->_options = array_intersect_key($this->_options,array_flip($_customerGroup));
|
38 |
+
} else {
|
39 |
+
return false;
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
return $this->_options;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Retrieve customer group option array
|
48 |
+
*
|
49 |
+
* @return array
|
50 |
+
*/
|
51 |
+
public function toOptionArray()
|
52 |
+
{
|
53 |
+
return $this->getAllOptions();
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Retrieve customer group option array
|
58 |
+
*
|
59 |
+
* @return array
|
60 |
+
*/
|
61 |
+
public function getOptionArray()
|
62 |
+
{
|
63 |
+
$optionArray = $this->getAllOptions();
|
64 |
+
$optionsArr = array();
|
65 |
+
foreach($optionArray as $options) {
|
66 |
+
$value = $options['value'];
|
67 |
+
$label = $options['label'];
|
68 |
+
$optionsArr[$value] = $label;
|
69 |
+
}
|
70 |
+
return $optionsArr;
|
71 |
+
}
|
72 |
+
}
|
app/code/community/Cybage/Customergroupcore/etc/config.xml
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroupcore
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
<config>
|
15 |
+
<modules>
|
16 |
+
<Cybage_Customergroupcore>
|
17 |
+
<version>0.1.0</version>
|
18 |
+
</Cybage_Customergroupcore>
|
19 |
+
</modules>
|
20 |
+
<global>
|
21 |
+
<models>
|
22 |
+
<customergroupcore>
|
23 |
+
<class>Cybage_Customergroupcore_Model</class>
|
24 |
+
</customergroupcore>
|
25 |
+
</models>
|
26 |
+
<helpers>
|
27 |
+
<customergroupcore>
|
28 |
+
<class>Cybage_Customergroupcore_Helper</class>
|
29 |
+
</customergroupcore>
|
30 |
+
</helpers>
|
31 |
+
</global>
|
32 |
+
</config>
|
app/design/adminhtml/default/default/layout/customergroup/customergroup.xml
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroup
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
|
15 |
+
<layout>
|
16 |
+
<adminhtml_catalog_category_edit>
|
17 |
+
<reference name="head">
|
18 |
+
<action method="addJs" ifconfig="customergroup/setting/visibility"><script>customergroup/jquery-1.10.2.min.js</script></action>
|
19 |
+
<action method="addJs" ifconfig="customergroup/setting/visibility"><script>customergroup/jquery.noconflict.js</script></action>
|
20 |
+
</reference>
|
21 |
+
<reference name="js">
|
22 |
+
<block type="customergroup/adminhtml_js" template="customergroup/category/js.phtml" name="customergroup_category_js"></block>
|
23 |
+
</reference>
|
24 |
+
</adminhtml_catalog_category_edit>
|
25 |
+
<adminhtml_catalog_product_new>
|
26 |
+
<reference name="head">
|
27 |
+
<action method="addJs" ifconfig="customergroup/setting/visibility"><script>customergroup/jquery-1.10.2.min.js</script></action>
|
28 |
+
<action method="addJs" ifconfig="customergroup/setting/visibility"><script>customergroup/jquery.noconflict.js</script></action>
|
29 |
+
</reference>
|
30 |
+
<reference name="js">
|
31 |
+
<block type="customergroup/adminhtml_js" template="customergroup/js.phtml" name="customergroup_js"></block>
|
32 |
+
</reference>
|
33 |
+
</adminhtml_catalog_product_new>
|
34 |
+
<adminhtml_catalog_product_edit>
|
35 |
+
<reference name="head">
|
36 |
+
<action method="addJs" ifconfig="customergroup/setting/visibility"><script>customergroup/jquery-1.10.2.min.js</script></action>
|
37 |
+
<action method="addJs" ifconfig="customergroup/setting/visibility"><script>customergroup/jquery.noconflict.js</script></action>
|
38 |
+
</reference>
|
39 |
+
<reference name="js">
|
40 |
+
<block type="customergroup/adminhtml_js" template="customergroup/js.phtml" name="customergroup_js"></block>
|
41 |
+
</reference>
|
42 |
+
</adminhtml_catalog_product_edit>
|
43 |
+
<adminhtml_customergroup_index>
|
44 |
+
<block type="customergroup/adminhtml_customergroup" name="root" output="toHtml" template="customergroup/customergroup.phtml"/>
|
45 |
+
</adminhtml_customergroup_index>
|
46 |
+
</layout>
|
app/design/adminhtml/default/default/template/customergroup/category/js.phtml
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
|
14 |
+
|
15 |
+
<div class="validation-advice" id="advice-required-entry-customergroup" style="display: none">
|
16 |
+
<?php echo $this->__("Assign category first to select customer groups."); ?>
|
17 |
+
</div>
|
app/design/adminhtml/default/default/template/customergroup/customergroup.phtml
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
|
14 |
+
<?php $_options = $this->getSelectedOptions(); ?>
|
15 |
+
<?php $_assignedGroups = $this->getAssignedGroups(); ?>
|
16 |
+
<?php if($_options) { ?>
|
17 |
+
<?php foreach($_options as $_option) { ?>
|
18 |
+
<option value="<?php echo $_option['value']; ?>" <?php if(in_array($_option['value'], $_assignedGroups)) { ?> selected="selected" <?php } ?>><?php echo $_option['label']; ?></option>
|
19 |
+
<?php } ?>
|
20 |
+
<?php } ?>
|
app/design/adminhtml/default/default/template/customergroup/js.phtml
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
<?php $_category = $this->isAssignedToCategory(); ?>
|
14 |
+
<?php $_assignedGroups = $this->getAssignedGroups(); ?>
|
15 |
+
|
16 |
+
<div class="validation-advice" id="advice-required-entry-customergroup" style="display: none">
|
17 |
+
<?php echo $this->__("Assign category first to select customer groups."); ?>
|
18 |
+
</div>
|
19 |
+
<div class="validation-advice" id="advice-required-entry-customergroup-category" style="display: none">
|
20 |
+
<?php echo $this->__("Assign customer groups to category first to select customer groups."); ?>
|
21 |
+
</div>
|
22 |
+
|
23 |
+
<script type="text/javascript">
|
24 |
+
jQuery( document ).ready(function() {
|
25 |
+
<?php if(!$_category) { ?>
|
26 |
+
jQuery("#customergroup").after( jQuery("#advice-required-entry-customergroup"));
|
27 |
+
jQuery("#advice-required-entry-customergroup").show();
|
28 |
+
jQuery("#customergroup > option").each(function() {
|
29 |
+
jQuery(this).removeAttr('selected');
|
30 |
+
});
|
31 |
+
jQuery("#customergroup").attr('disabled','disabled');
|
32 |
+
<?php } else { ?>
|
33 |
+
if( !jQuery("#customergroup").has('option').length ) {
|
34 |
+
jQuery("#customergroup").after( jQuery("#advice-required-entry-customergroup-category"));
|
35 |
+
jQuery("#advice-required-entry-customergroup-category").show();
|
36 |
+
}
|
37 |
+
<?php } ?>
|
38 |
+
});
|
39 |
+
jQuery( function() {
|
40 |
+
jQuery( document ).on( "change", ":checkbox", function () {
|
41 |
+
if ( jQuery(this).parents("#product-categories").length == 1 ) {
|
42 |
+
setTimeout(function() {
|
43 |
+
<?php $_formKey = Mage::getSingleton('core/session')->getFormKey(); ?>
|
44 |
+
jQuery.ajax({
|
45 |
+
url: "<?php echo $this->getUrl('adminhtml/customergroup/index') ?>",
|
46 |
+
type: "POST",
|
47 |
+
data: {categoryIds: jQuery("#product_categories").val(), form_key:"<?php echo $_formKey ?>", assigned_groups:"<?php echo $_assignedGroups ?>"},
|
48 |
+
success: function(data) {
|
49 |
+
if(jQuery.trim(data)) {
|
50 |
+
jQuery("#customergroup").empty().append(data);
|
51 |
+
jQuery("#customergroup").removeAttr('disabled');
|
52 |
+
jQuery("#advice-required-entry-customergroup").hide();
|
53 |
+
} else {
|
54 |
+
jQuery("#customergroup").after( jQuery("#advice-required-entry-customergroup"));
|
55 |
+
jQuery("#advice-required-entry-customergroup").show();
|
56 |
+
jQuery("#customergroup > option").each(function() {
|
57 |
+
jQuery(this).removeAttr('selected');
|
58 |
+
});
|
59 |
+
jQuery("#customergroup").attr('disabled','disabled');
|
60 |
+
}
|
61 |
+
}
|
62 |
+
});
|
63 |
+
}, 100);
|
64 |
+
}
|
65 |
+
});
|
66 |
+
});
|
67 |
+
</script>
|
app/design/frontend/base/default/layout/customergroup/customergroup.xml
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroup
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
|
15 |
+
<layout>
|
16 |
+
<wishlist_index_index>
|
17 |
+
<reference name="customer.wishlist.item.cart">
|
18 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/cart.phtml</template></action>
|
19 |
+
</reference>
|
20 |
+
<reference name="customer.wishlist.button.share">
|
21 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/share.phtml</template></action>
|
22 |
+
</reference>
|
23 |
+
<reference name="customer.wishlist.button.toCart">
|
24 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/tocart.phtml</template></action>
|
25 |
+
</reference>
|
26 |
+
</wishlist_index_index>
|
27 |
+
<catalog_category_default>
|
28 |
+
<reference name="product_list">
|
29 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/list.phtml</template></action>
|
30 |
+
</reference>
|
31 |
+
</catalog_category_default>
|
32 |
+
<catalog_category_layered>
|
33 |
+
<reference name="product_list">
|
34 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/list.phtml</template></action>
|
35 |
+
</reference>
|
36 |
+
</catalog_category_layered>
|
37 |
+
<catalog_product_view>
|
38 |
+
<reference name="product.info.addtocart">
|
39 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/addtocart.phtml</template></action>
|
40 |
+
</reference>
|
41 |
+
<reference name="product.info.addto">
|
42 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/addto.phtml</template></action>
|
43 |
+
</reference>
|
44 |
+
</catalog_product_view>
|
45 |
+
<default>
|
46 |
+
<reference name="wishlist_sidebar">
|
47 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/sidebar.phtml</template></action>
|
48 |
+
</reference>
|
49 |
+
</default>
|
50 |
+
</layout>
|
app/design/frontend/base/default/template/customergroup/product/addto.phtml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
|
14 |
+
<?php $_product = $this->getProduct(); ?>
|
15 |
+
<?php $_wishlistSubmitUrl = $this->helper('wishlist')->getAddUrl($_product); ?>
|
16 |
+
<?php $category = Mage::registry('current_category');?>
|
17 |
+
|
18 |
+
<ul class="add-to-links">
|
19 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
20 |
+
<li><a href="<?php echo $_wishlistSubmitUrl ?>" onclick="productAddToCartForm.submitLight(this, this.href); return false;" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
|
21 |
+
<?php endif; ?>
|
22 |
+
<?php if($category->getAddtocart()): ?>
|
23 |
+
<?php
|
24 |
+
$_compareUrl = $this->helper('catalog/product_compare')->getAddUrl($_product);
|
25 |
+
?>
|
26 |
+
<?php if($_compareUrl) : ?>
|
27 |
+
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
|
28 |
+
<?php endif; ?>
|
29 |
+
<?php endif; ?>
|
30 |
+
</ul>
|
app/design/frontend/base/default/template/customergroup/product/addtocart.phtml
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
<?php $category = Mage::registry('current_category');?>
|
14 |
+
<?php if($category->getAddtocart()): ?>
|
15 |
+
<?php $_product = $this->getProduct(); ?>
|
16 |
+
<?php $buttonTitle = $this->__('Add to Cart'); ?>
|
17 |
+
<?php if($_product->isSaleable()): ?>
|
18 |
+
<div class="add-to-cart">
|
19 |
+
<?php if(!$_product->isGrouped()): ?>
|
20 |
+
<label for="qty"><?php echo $this->__('Qty:') ?></label>
|
21 |
+
<input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
|
22 |
+
<?php endif; ?>
|
23 |
+
<button type="button" title="<?php echo $buttonTitle ?>" id="product-addtocart-button" class="button btn-cart" onclick="productAddToCartForm.submit(this)"><span><span><?php echo $buttonTitle ?></span></span></button>
|
24 |
+
<?php echo $this->getChildHtml('', true, true) ?>
|
25 |
+
</div>
|
26 |
+
<?php endif; ?>
|
27 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/customergroup/product/list.phtml
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
<?php
|
14 |
+
/**
|
15 |
+
* Product list template
|
16 |
+
*
|
17 |
+
* @see Mage_Catalog_Block_Product_List
|
18 |
+
*/
|
19 |
+
?>
|
20 |
+
<?php
|
21 |
+
$_productCollection=$this->getLoadedProductCollection();
|
22 |
+
$_helper = $this->helper('catalog/output');
|
23 |
+
$category = Mage::registry('current_category');
|
24 |
+
?>
|
25 |
+
<?php if(!$_productCollection->count()): ?>
|
26 |
+
<p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p>
|
27 |
+
<?php else: ?>
|
28 |
+
<div class="category-products">
|
29 |
+
<?php echo $this->getToolbarHtml() ?>
|
30 |
+
<?php // List mode ?>
|
31 |
+
<?php if($this->getMode()!='grid'): ?>
|
32 |
+
<?php $_iterator = 0; ?>
|
33 |
+
<ol class="products-list" id="products-list">
|
34 |
+
<?php foreach ($_productCollection as $_product): ?>
|
35 |
+
<li class="item<?php if( ++$_iterator == sizeof($_productCollection) ): ?> last<?php endif; ?>">
|
36 |
+
<?php // Product Image ?>
|
37 |
+
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(135); ?>" width="135" height="135" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a>
|
38 |
+
<?php // Product description ?>
|
39 |
+
<div class="product-shop">
|
40 |
+
<div class="f-fix">
|
41 |
+
<?php $_productNameStripped = $this->stripTags($_product->getName(), null, true); ?>
|
42 |
+
<h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped; ?>"><?php echo $_helper->productAttribute($_product, $_product->getName() , 'name'); ?></a></h2>
|
43 |
+
<?php if($_product->getRatingSummary()): ?>
|
44 |
+
<?php echo $this->getReviewsSummaryHtml($_product) ?>
|
45 |
+
<?php endif; ?>
|
46 |
+
<?php echo $this->getPriceHtml($_product, true) ?>
|
47 |
+
<?php if($category->getAddtocart()): ?>
|
48 |
+
<?php if($_product->isSaleable()): ?>
|
49 |
+
<p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
|
50 |
+
<?php else: ?>
|
51 |
+
<p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
|
52 |
+
<?php endif; ?>
|
53 |
+
<?php endif; ?>
|
54 |
+
<div class="desc std">
|
55 |
+
<?php echo $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description') ?>
|
56 |
+
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped ?>" class="link-learn"><?php echo $this->__('Learn More') ?></a>
|
57 |
+
</div>
|
58 |
+
<ul class="add-to-links">
|
59 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
60 |
+
<li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
|
61 |
+
<?php endif; ?>
|
62 |
+
<?php if($category->getAddtocart()): ?>
|
63 |
+
<?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
|
64 |
+
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
|
65 |
+
<?php endif; ?>
|
66 |
+
<?php endif; ?>
|
67 |
+
</ul>
|
68 |
+
</div>
|
69 |
+
</div>
|
70 |
+
</li>
|
71 |
+
<?php endforeach; ?>
|
72 |
+
</ol>
|
73 |
+
<script type="text/javascript">decorateList('products-list', 'none-recursive')</script>
|
74 |
+
|
75 |
+
<?php else: ?>
|
76 |
+
|
77 |
+
<?php // Grid Mode ?>
|
78 |
+
|
79 |
+
<?php $_collectionSize = $_productCollection->count() ?>
|
80 |
+
<?php $_columnCount = $this->getColumnCount(); ?>
|
81 |
+
<?php $i=0; foreach ($_productCollection as $_product): ?>
|
82 |
+
<?php if ($i++%$_columnCount==0): ?>
|
83 |
+
<ul class="products-grid">
|
84 |
+
<?php endif ?>
|
85 |
+
<li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">
|
86 |
+
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(135); ?>" width="135" height="135" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a>
|
87 |
+
<h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></a></h2>
|
88 |
+
<?php if($_product->getRatingSummary()): ?>
|
89 |
+
<?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
|
90 |
+
<?php endif; ?>
|
91 |
+
<?php echo $this->getPriceHtml($_product, true) ?>
|
92 |
+
<div class="actions">
|
93 |
+
<?php if($category->getAddtocart()): ?>
|
94 |
+
<?php if($_product->isSaleable()): ?>
|
95 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
|
96 |
+
<?php else: ?>
|
97 |
+
<p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
|
98 |
+
<?php endif; ?>
|
99 |
+
<?php endif; ?>
|
100 |
+
<ul class="add-to-links">
|
101 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
102 |
+
<li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
|
103 |
+
<?php endif; ?>
|
104 |
+
<?php if($category->getAddtocart()): ?>
|
105 |
+
<?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
|
106 |
+
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
|
107 |
+
<?php endif; ?>
|
108 |
+
<?php endif; ?>
|
109 |
+
</ul>
|
110 |
+
</div>
|
111 |
+
</li>
|
112 |
+
<?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?>
|
113 |
+
</ul>
|
114 |
+
<?php endif ?>
|
115 |
+
<?php endforeach ?>
|
116 |
+
<script type="text/javascript">decorateGeneric($$('ul.products-grid'), ['odd','even','first','last'])</script>
|
117 |
+
<?php endif; ?>
|
118 |
+
|
119 |
+
<div class="toolbar-bottom">
|
120 |
+
<?php echo $this->getToolbarHtml() ?>
|
121 |
+
</div>
|
122 |
+
</div>
|
123 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/customergroup/wishlist/cart.phtml
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
/* @var $this Mage_Wishlist_Block_Customer_Wishlist_Item_Column_Cart */
|
14 |
+
/* @var Mage_Wishlist_Model_Item $item */
|
15 |
+
$item = $this->getItem();
|
16 |
+
$product = $item->getProduct();
|
17 |
+
$options = $this->getChild('customer.wishlist.item.options')
|
18 |
+
->setItem($item)
|
19 |
+
->getConfiguredOptions();
|
20 |
+
$isAllowed = Mage::helper('customergroup')->checkProductCustomerGroups($product);
|
21 |
+
$message = Mage::getStoreConfig('customergroup/setting/message') ? Mage::getStoreConfig('customergroup/setting/message') : "Invalid Group";
|
22 |
+
if(Mage::helper('customergroup')->checkMessage()) {
|
23 |
+
$message = '';
|
24 |
+
}
|
25 |
+
?>
|
26 |
+
<div class="cart-cell">
|
27 |
+
<?php echo $this->getPriceHtml($product, empty($options));?>
|
28 |
+
<div class="add-to-cart-alt">
|
29 |
+
<?php if ($item->canHaveQty() && $item->getProduct()->isVisibleInSiteVisibility()): ?>
|
30 |
+
<input type="text" class="input-text qty validate-not-negative-number" name="qty[<?php echo $item->getId() ?>]" value="<?php echo $this->getAddToCartQty($item) * 1 ?>" />
|
31 |
+
<?php endif; ?>
|
32 |
+
<?php if ($product->isSaleable()): ?>
|
33 |
+
<?php if ($isAllowed): ?>
|
34 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" onclick="addWItemToCart(<?php echo $item->getId()?>);" class="button btn-cart"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
|
35 |
+
<?php else: ?>
|
36 |
+
<p class="availability out-of-stock"><span><?php echo $message;?></span></p>
|
37 |
+
<?php endif; ?>
|
38 |
+
<?php else: ?>
|
39 |
+
<?php if ($product->getIsSalable()): ?>
|
40 |
+
<p class="availability in-stock"><span><?php echo $this->__('In stock') ?></span></p>
|
41 |
+
<?php else: ?>
|
42 |
+
<p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
|
43 |
+
<?php endif; ?>
|
44 |
+
<?php endif; ?>
|
45 |
+
</div>
|
46 |
+
<?php foreach($this->getSortedChildren() as $childName):?>
|
47 |
+
<?php echo $this->getChildHtml($childName, false);?>
|
48 |
+
<?php endforeach;?>
|
49 |
+
<?php if ($product->isVisibleInSiteVisibility()): ?>
|
50 |
+
<?php if ($isAllowed): ?>
|
51 |
+
<p><a class="link-edit" href="<?php echo $this->getItemConfigureUrl($item) ?>"><?php echo $this->__('Edit') ?></a></p>
|
52 |
+
<?php endif; ?>
|
53 |
+
<?php endif ?>
|
54 |
+
</div>
|
app/design/frontend/base/default/template/customergroup/wishlist/share.phtml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
|
14 |
+
<?php if(!Mage::helper('customergroup')->checkIsAllowed()) { ?>
|
15 |
+
<?php if($this->getWishlist()->getItemsCount()): ?>
|
16 |
+
<button type="submit" name="save_and_share" title="<?php echo $this->__('Share Wishlist') ?>" class="button btn-share"><span><span><?php echo $this->__('Share Wishlist') ?></span></span></button>
|
17 |
+
<?php endif;?>
|
18 |
+
<?php } ?>
|
app/design/frontend/base/default/template/customergroup/wishlist/sidebar.phtml
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
<?php $message = Mage::getStoreConfig('customergroup/setting/message') ? Mage::getStoreConfig('customergroup/setting/message') : "Invalid Group"; ?>
|
14 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
15 |
+
<div class="block block-wishlist">
|
16 |
+
<div class="block-title">
|
17 |
+
<strong><span><?php echo $this->getTitle(); ?></span></strong>
|
18 |
+
</div>
|
19 |
+
<div class="block-content">
|
20 |
+
<p class="block-subtitle"><?php echo $this->__('Last Added Items') ?></p>
|
21 |
+
<?php if ($this->hasWishlistItems()): ?>
|
22 |
+
<ol class="mini-products-list" id="wishlist-sidebar">
|
23 |
+
<?php foreach ($this->getWishlistItems() as $_item): ?>
|
24 |
+
<?php $product = $_item->getProduct(); ?>
|
25 |
+
<?php $isAllowed = Mage::helper('customergroup')->checkProductCustomerGroups($product); ?>
|
26 |
+
<?php
|
27 |
+
if(Mage::helper('customergroup')->checkMessage()) {
|
28 |
+
$message = '';
|
29 |
+
}
|
30 |
+
?>
|
31 |
+
<li class="item">
|
32 |
+
<a href="<?php echo $this->getProductUrl($_item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($product, 'thumbnail')->resize(50); ?>" width="50" height="50" alt="<?php echo $this->escapeHtml($product->getName()) ?>" /></a>
|
33 |
+
<div class="product-details">
|
34 |
+
<a href="<?php echo $this->getItemRemoveUrl($_item) ?>" title="<?php echo $this->__('Remove This Item') ?>" onclick="return confirm('<?php echo $this->__('Are you sure you would like to remove this item from the wishlist?') ?>');" class="btn-remove"><?php echo $this->__('Remove This Item') ?></a>
|
35 |
+
<p class="product-name"><a href="<?php echo $this->getProductUrl($_item) ?>"><?php echo $this->escapeHtml($product->getName()) ?></a></p>
|
36 |
+
<?php echo $this->getPriceHtml($product, false, '-wishlist') ?>
|
37 |
+
<?php if ($product->isSaleable() && $product->isVisibleInSiteVisibility()): ?>
|
38 |
+
<?php if ($isAllowed): ?>
|
39 |
+
<a href="<?php echo $this->getItemAddToCartUrl($_item) ?>" class="link-cart"><?php echo $this->__('Add to Cart') ?></a>
|
40 |
+
<?php else: ?>
|
41 |
+
<p class="availability out-of-stock"><span><?php echo $message;?></span></p>
|
42 |
+
<?php endif; ?>
|
43 |
+
<?php endif; ?>
|
44 |
+
</div>
|
45 |
+
</li>
|
46 |
+
<?php endforeach; ?>
|
47 |
+
</ol>
|
48 |
+
<script type="text/javascript">decorateList('wishlist-sidebar');</script>
|
49 |
+
<div class="actions">
|
50 |
+
<a href="<?php echo $this->helper('wishlist')->getListUrl() ?>"><?php echo $this->__('Go to Wishlist') ?></a>
|
51 |
+
</div>
|
52 |
+
<?php else: ?>
|
53 |
+
<p class="empty"><?php echo $this->__('You have no items in your wishlist.') ?></p>
|
54 |
+
<?php endif ?>
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
<?php endif ?>
|
app/design/frontend/base/default/template/customergroup/wishlist/tocart.phtml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
|
14 |
+
<?php if(!Mage::helper('customergroup')->checkIsAllowed()) { ?>
|
15 |
+
<?php if($this->getWishlist()->getItemsCount() && $this->getWishlist()->isSalable()): ?>
|
16 |
+
<button type="button" title="<?php echo $this->__('Add All to Cart') ?>" onclick="addAllWItemsToCart()" class="button btn-add"><span><span><?php echo $this->__('Add All to Cart') ?></span></span></button>
|
17 |
+
<?php endif;?>
|
18 |
+
<?php } ?>
|
app/design/frontend/rwd/default/layout/customergroup/customergroup.xml
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroup
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
|
15 |
+
<layout>
|
16 |
+
<wishlist_index_index>
|
17 |
+
<reference name="customer.wishlist.item.cart">
|
18 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/cart.phtml</template></action>
|
19 |
+
</reference>
|
20 |
+
<reference name="customer.wishlist.button.share">
|
21 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/share.phtml</template></action>
|
22 |
+
</reference>
|
23 |
+
<reference name="customer.wishlist.button.toCart">
|
24 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/tocart.phtml</template></action>
|
25 |
+
</reference>
|
26 |
+
</wishlist_index_index>
|
27 |
+
<default>
|
28 |
+
<reference name="wishlist_sidebar">
|
29 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/wishlist/sidebar.phtml</template></action>
|
30 |
+
</reference>
|
31 |
+
</default>
|
32 |
+
<catalog_category_default>
|
33 |
+
<reference name="product_list">
|
34 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/list.phtml</template></action>
|
35 |
+
</reference>
|
36 |
+
</catalog_category_default>
|
37 |
+
<catalog_category_layered>
|
38 |
+
<reference name="product_list">
|
39 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/list.phtml</template></action>
|
40 |
+
</reference>
|
41 |
+
</catalog_category_layered>
|
42 |
+
<catalog_product_view>
|
43 |
+
<reference name="product.info.addtocart">
|
44 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/addtocart.phtml</template></action>
|
45 |
+
</reference>
|
46 |
+
<reference name="product.info.addto">
|
47 |
+
<action method="setTemplate" ifconfig="customergroup/setting/visibility"><template>customergroup/product/addto.phtml</template></action>
|
48 |
+
</reference>
|
49 |
+
</catalog_product_view>
|
50 |
+
</layout>
|
app/design/frontend/rwd/default/template/customergroup/product/addto.phtml
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
|
14 |
+
<?php $_product = $this->getProduct(); ?>
|
15 |
+
<?php $_wishlistSubmitUrl = $this->helper('wishlist')->getAddUrl($_product); ?>
|
16 |
+
<?php $category = Mage::registry('current_category');?>
|
17 |
+
|
18 |
+
<ul class="add-to-links">
|
19 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
20 |
+
<li><a href="<?php echo $_wishlistSubmitUrl ?>" onclick="productAddToCartForm.submitLight(this, this.href); return false;" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
|
21 |
+
<?php endif; ?>
|
22 |
+
<?php if($category->getAddtocart()): ?>
|
23 |
+
<?php
|
24 |
+
$_compareUrl = $this->helper('catalog/product_compare')->getAddUrl($_product);
|
25 |
+
?>
|
26 |
+
|
27 |
+
<?php if($_compareUrl) : ?>
|
28 |
+
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
|
29 |
+
<?php endif; ?>
|
30 |
+
<?php endif; ?>
|
31 |
+
</ul>
|
32 |
+
|
app/design/frontend/rwd/default/template/customergroup/product/addtocart.phtml
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
<?php $category = Mage::registry('current_category');?>
|
14 |
+
<?php if($category->getAddtocart()): ?>
|
15 |
+
<?php $_product = $this->getProduct(); ?>
|
16 |
+
<?php $buttonTitle = $this->__('Add to Cart'); ?>
|
17 |
+
<?php if($_product->isSaleable()): ?>
|
18 |
+
<div class="add-to-cart">
|
19 |
+
<?php if(!$_product->isGrouped()): ?>
|
20 |
+
<div class="qty-wrapper">
|
21 |
+
<label for="qty"><?php echo $this->__('Qty:') ?></label>
|
22 |
+
<input type="text" pattern="\d*" name="qty" id="qty" maxlength="12" value="<?php echo max($this->getProductDefaultQty() * 1, 1) ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
|
23 |
+
</div>
|
24 |
+
<?php endif; ?>
|
25 |
+
<div class="add-to-cart-buttons">
|
26 |
+
<button type="button" title="<?php echo $buttonTitle ?>" class="button btn-cart" onclick="productAddToCartForm.submit(this)"><span><span><?php echo $buttonTitle ?></span></span></button>
|
27 |
+
<?php echo $this->getChildHtml('', true, true) ?>
|
28 |
+
</div>
|
29 |
+
</div>
|
30 |
+
<?php endif; ?>
|
31 |
+
<?php endif; ?>
|
app/design/frontend/rwd/default/template/customergroup/product/list.phtml
ADDED
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
?>
|
13 |
+
<?php
|
14 |
+
/**
|
15 |
+
* Product list template
|
16 |
+
*
|
17 |
+
* @see Mage_Catalog_Block_Product_List
|
18 |
+
*/
|
19 |
+
/* @var $this Mage_Catalog_Block_Product_List */
|
20 |
+
?>
|
21 |
+
<?php
|
22 |
+
$_productCollection=$this->getLoadedProductCollection();
|
23 |
+
$_helper = $this->helper('catalog/output');
|
24 |
+
$category = Mage::registry('current_category');
|
25 |
+
?>
|
26 |
+
<?php if(!$_productCollection->count()): ?>
|
27 |
+
<p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p>
|
28 |
+
<?php else: ?>
|
29 |
+
<div class="category-products">
|
30 |
+
<?php echo $this->getToolbarHtml() ?>
|
31 |
+
<?php // List mode ?>
|
32 |
+
<?php if($this->getMode()!='grid'): ?>
|
33 |
+
<?php $_iterator = 0; ?>
|
34 |
+
<ol class="products-list" id="products-list">
|
35 |
+
<?php foreach ($_productCollection as $_product): ?>
|
36 |
+
<li class="item<?php if( ++$_iterator == sizeof($_productCollection) ): ?> last<?php endif; ?>">
|
37 |
+
<?php // Product Image ?>
|
38 |
+
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image">
|
39 |
+
<?php /* Based on the native RWD styling, product images are displayed at a max of ~400px wide when viewed on a
|
40 |
+
one column page layout with four product columns from a 1280px viewport. For bandwidth reasons,
|
41 |
+
we are going to serve a 300px image, as it will look fine at 400px and most of the times, the image
|
42 |
+
will be displayed at a smaller size (eg, if two column are being used or viewport is smaller than 1280px).
|
43 |
+
This $_imgSize value could even be decreased further, based on the page layout
|
44 |
+
(one column, two column, three column) and number of product columns. */ ?>
|
45 |
+
<?php $_imgSize = 300; ?>
|
46 |
+
<img id="product-collection-image-<?php echo $_product->getId(); ?>"
|
47 |
+
src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->keepFrame(false)->resize($_imgSize); ?>"
|
48 |
+
alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
|
49 |
+
</a>
|
50 |
+
<?php // Product description ?>
|
51 |
+
<div class="product-shop">
|
52 |
+
<div class="f-fix">
|
53 |
+
<div class="product-primary">
|
54 |
+
<?php $_productNameStripped = $this->stripTags($_product->getName(), null, true); ?>
|
55 |
+
<h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped; ?>"><?php echo $_helper->productAttribute($_product, $_product->getName() , 'name'); ?></a></h2>
|
56 |
+
<?php if($_product->getRatingSummary()): ?>
|
57 |
+
<?php echo $this->getReviewsSummaryHtml($_product) ?>
|
58 |
+
<?php endif; ?>
|
59 |
+
<?php
|
60 |
+
// Provides extra blocks on which to hang some features for products in the list
|
61 |
+
// Features providing UI elements targeting this block will display directly below the product name
|
62 |
+
if ($this->getChild('name.after')) {
|
63 |
+
$_nameAfterChildren = $this->getChild('name.after')->getSortedChildren();
|
64 |
+
foreach ($_nameAfterChildren as $_nameAfterChildName) {
|
65 |
+
$_nameAfterChild = $this->getChild('name.after')->getChild($_nameAfterChildName);
|
66 |
+
$_nameAfterChild->setProduct($_product);
|
67 |
+
echo $_nameAfterChild->toHtml();
|
68 |
+
}
|
69 |
+
}
|
70 |
+
?>
|
71 |
+
</div>
|
72 |
+
<div class="product-secondary">
|
73 |
+
<?php echo $this->getPriceHtml($_product, true) ?>
|
74 |
+
</div>
|
75 |
+
<div class="product-secondary">
|
76 |
+
<?php if($category->getAddtocart()): ?>
|
77 |
+
<?php if(!$_product->canConfigure() && $_product->isSaleable()): ?>
|
78 |
+
<p class="action"><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
|
79 |
+
<?php elseif($_product->getStockItem() && $_product->getStockItem()->getIsInStock()): ?>
|
80 |
+
<p class="action"><a title="<?php echo $this->__('View Details') ?>" class="button" href="<?php echo $_product->getProductUrl() ?>"><?php echo $this->__('View Details') ?></a></p>
|
81 |
+
<?php else: ?>
|
82 |
+
<p class="action availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
|
83 |
+
<?php endif; ?>
|
84 |
+
<?php endif; ?>
|
85 |
+
<ul class="add-to-links">
|
86 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
87 |
+
<li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
|
88 |
+
<?php endif; ?>
|
89 |
+
<?php if($category->getAddtocart()): ?>
|
90 |
+
<?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
|
91 |
+
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
|
92 |
+
<?php endif; ?>
|
93 |
+
<?php endif; ?>
|
94 |
+
</ul>
|
95 |
+
</div>
|
96 |
+
<div class="desc std">
|
97 |
+
<?php echo $_helper->productAttribute($_product, $_product->getShortDescription(), 'short_description') ?>
|
98 |
+
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $_productNameStripped ?>" class="link-learn"><?php echo $this->__('Learn More') ?></a>
|
99 |
+
</div>
|
100 |
+
</div>
|
101 |
+
</div>
|
102 |
+
</li>
|
103 |
+
<?php endforeach; ?>
|
104 |
+
</ol>
|
105 |
+
<script type="text/javascript">decorateList('products-list', 'none-recursive')</script>
|
106 |
+
|
107 |
+
<?php else: ?>
|
108 |
+
|
109 |
+
<?php // Grid Mode ?>
|
110 |
+
|
111 |
+
<?php $_collectionSize = $_productCollection->count() ?>
|
112 |
+
<?php $_columnCount = $this->getColumnCount(); ?>
|
113 |
+
<ul class="products-grid products-grid--max-<?php echo $_columnCount; ?>-col">
|
114 |
+
<?php $i=0; foreach ($_productCollection as $_product): ?>
|
115 |
+
<?php /*if ($i++%$_columnCount==0): ?>
|
116 |
+
<?php endif*/ ?>
|
117 |
+
<li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">
|
118 |
+
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image">
|
119 |
+
<?php $_imgSize = 210; ?>
|
120 |
+
<img id="product-collection-image-<?php echo $_product->getId(); ?>"
|
121 |
+
src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize($_imgSize); ?>"
|
122 |
+
alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
|
123 |
+
</a>
|
124 |
+
<div class="product-info">
|
125 |
+
<h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></a></h2>
|
126 |
+
<?php
|
127 |
+
// Provides extra blocks on which to hang some features for products in the list
|
128 |
+
// Features providing UI elements targeting this block will display directly below the product name
|
129 |
+
if ($this->getChild('name.after')) {
|
130 |
+
$_nameAfterChildren = $this->getChild('name.after')->getSortedChildren();
|
131 |
+
foreach ($_nameAfterChildren as $_nameAfterChildName) {
|
132 |
+
$_nameAfterChild = $this->getChild('name.after')->getChild($_nameAfterChildName);
|
133 |
+
$_nameAfterChild->setProduct($_product);
|
134 |
+
echo $_nameAfterChild->toHtml();
|
135 |
+
}
|
136 |
+
}
|
137 |
+
?>
|
138 |
+
<?php echo $this->getPriceHtml($_product, true) ?>
|
139 |
+
<?php if($_product->getRatingSummary()): ?>
|
140 |
+
<?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
|
141 |
+
<?php endif; ?>
|
142 |
+
<div class="actions">
|
143 |
+
<?php if($category->getAddtocart()): ?>
|
144 |
+
<?php if(!$_product->canConfigure() && $_product->isSaleable()): ?>
|
145 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
|
146 |
+
<?php elseif($_product->getStockItem() && $_product->getStockItem()->getIsInStock()): ?>
|
147 |
+
<a title="<?php echo $this->__('View Details') ?>" class="button" href="<?php echo $_product->getProductUrl() ?>"><?php echo $this->__('View Details') ?></a>
|
148 |
+
<?php else: ?>
|
149 |
+
<p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
|
150 |
+
<?php endif; ?>
|
151 |
+
<?php endif; ?>
|
152 |
+
<ul class="add-to-links">
|
153 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
154 |
+
<li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
|
155 |
+
<?php endif; ?>
|
156 |
+
<?php if($category->getAddtocart()): ?>
|
157 |
+
<?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
|
158 |
+
<li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
|
159 |
+
<?php endif; ?>
|
160 |
+
<?php endif; ?>
|
161 |
+
</ul>
|
162 |
+
</div>
|
163 |
+
</div>
|
164 |
+
</li>
|
165 |
+
<?php /*if ($i%$_columnCount==0 || $i==$_collectionSize): ?>
|
166 |
+
<?php endif*/ ?>
|
167 |
+
<?php endforeach ?>
|
168 |
+
</ul>
|
169 |
+
<script type="text/javascript">decorateGeneric($$('ul.products-grid'), ['odd','even','first','last'])</script>
|
170 |
+
<?php endif; ?>
|
171 |
+
|
172 |
+
<div class="toolbar-bottom">
|
173 |
+
<?php echo $this->getToolbarHtml() ?>
|
174 |
+
</div>
|
175 |
+
</div>
|
176 |
+
<?php endif; ?>
|
177 |
+
<?php
|
178 |
+
// Provides a block where additional page components may be attached, primarily good for in-page JavaScript
|
179 |
+
if ($this->getChild('after')) {
|
180 |
+
$_afterChildren = $this->getChild('after')->getSortedChildren();
|
181 |
+
foreach ($_afterChildren as $_afterChildName) {
|
182 |
+
$_afterChild = $this->getChild('after')->getChild($_afterChildName);
|
183 |
+
//set product collection on after blocks
|
184 |
+
$_afterChild->setProductCollection($_productCollection);
|
185 |
+
echo $_afterChild->toHtml();
|
186 |
+
}
|
187 |
+
}
|
188 |
+
?>
|
app/design/frontend/rwd/default/template/customergroup/wishlist/cart.phtml
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
|
13 |
+
/* @var $this Mage_Wishlist_Block_Customer_Wishlist_Item_Column_Cart */
|
14 |
+
/* @var Mage_Wishlist_Model_Item $item */
|
15 |
+
$item = $this->getItem();
|
16 |
+
$product = $item->getProduct();
|
17 |
+
$options = $this->getChild('customer.wishlist.item.options')
|
18 |
+
->setItem($item)
|
19 |
+
->getConfiguredOptions();
|
20 |
+
$isAllowed = Mage::helper('customergroup')->checkProductCustomerGroups($product);
|
21 |
+
$message = Mage::getStoreConfig('customergroup/setting/message') ? Mage::getStoreConfig('customergroup/setting/message') : "Invalid Group";
|
22 |
+
if(Mage::helper('customergroup')->checkMessage()) {
|
23 |
+
$message = '';
|
24 |
+
}
|
25 |
+
?>
|
26 |
+
<div class="cart-cell">
|
27 |
+
<?php if ($product->isSaleable()): ?>
|
28 |
+
<?php if ($isAllowed): ?>
|
29 |
+
<button type="button" title="<?php echo $this->__('Add to Cart') ?>" onclick="addWItemToCart(<?php echo $item->getId()?>);" class="button btn-cart"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
|
30 |
+
<?php else: ?>
|
31 |
+
<p class="availability out-of-stock"><span><?php echo $message;?></span></p>
|
32 |
+
<?php endif; ?>
|
33 |
+
<?php else: ?>
|
34 |
+
<?php if ($product->getIsSalable()): ?>
|
35 |
+
<p class="availability in-stock">
|
36 |
+
<span class="label"><?php echo $this->helper('catalog')->__('Availability:') ?></span>
|
37 |
+
<span class="value"><?php echo $this->helper('catalog')->__('In stock') ?></span>
|
38 |
+
</p>
|
39 |
+
<?php else: ?>
|
40 |
+
<p class="availability out-of-stock">
|
41 |
+
<span class="label"><?php echo $this->helper('catalog')->__('Availability:') ?></span>
|
42 |
+
<span class="value"><?php echo $this->helper('catalog')->__('Out of stock') ?></span>
|
43 |
+
</p>
|
44 |
+
<?php endif; ?>
|
45 |
+
<?php endif; ?>
|
46 |
+
</div>
|
47 |
+
<?php if ($product->isVisibleInSiteVisibility()): ?>
|
48 |
+
<?php if ($isAllowed): ?>
|
49 |
+
<p><a class="link-edit button button-secondary" href="<?php echo $this->getItemConfigureUrl($item) ?>"><?php echo $this->__('Edit') ?></a></p>
|
50 |
+
<?php endif ?>
|
51 |
+
<?php endif ?>
|
52 |
+
<?php foreach($this->getSortedChildren() as $childName):?>
|
53 |
+
<?php echo $this->getChildHtml($childName, false);?>
|
54 |
+
<?php endforeach;?>
|
55 |
+
</div>
|
app/design/frontend/rwd/default/template/customergroup/wishlist/sidebar.phtml
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Cybage Customer Group Specific Products Plugin
|
4 |
+
*
|
5 |
+
* @category Customer Group Specific Products Plugin
|
6 |
+
* @package Cybage_Customergroup
|
7 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
8 |
+
* http://www.cybage.com/coe/e-commerce
|
9 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
10 |
+
* @author Cybage Software Pvt. Ltd.
|
11 |
+
*/
|
12 |
+
/* @var $this Mage_Wishlist_Block_Customer_Sidebar */
|
13 |
+
?>
|
14 |
+
<?php $message = Mage::getStoreConfig('customergroup/setting/message') ? Mage::getStoreConfig('customergroup/setting/message') : "Invalid Group"; ?>
|
15 |
+
<?php if ($this->helper('wishlist')->isAllow()) : ?>
|
16 |
+
<div class="block block-wishlist">
|
17 |
+
<div class="block-title">
|
18 |
+
<strong><span><?php echo $this->getTitle(); ?></span></strong>
|
19 |
+
</div>
|
20 |
+
<div class="block-content">
|
21 |
+
<p class="block-subtitle"><?php echo $this->__('Last Added Items') ?></p>
|
22 |
+
<?php if ($this->hasWishlistItems()): ?>
|
23 |
+
<ol class="mini-products-list" id="wishlist-sidebar">
|
24 |
+
<?php foreach ($this->getWishlistItems() as $_item): ?>
|
25 |
+
<?php $product = $_item->getProduct(); ?>
|
26 |
+
<?php $isAllowed = Mage::helper('customergroup')->checkProductCustomerGroups($product); ?>
|
27 |
+
<?php
|
28 |
+
if(Mage::helper('customergroup')->checkMessage()) {
|
29 |
+
$message = '';
|
30 |
+
}
|
31 |
+
?>
|
32 |
+
<li class="item">
|
33 |
+
<a href="<?php echo $this->getProductUrl($_item) ?>" title="<?php echo $this->escapeHtml($product->getName()) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($product, 'thumbnail')->resize(50); ?>" width="50" height="50" alt="<?php echo $this->escapeHtml($product->getName()) ?>" /></a>
|
34 |
+
<div class="product-details">
|
35 |
+
<a href="<?php echo $this->getItemRemoveUrl($_item) ?>" title="<?php echo $this->__('Remove This Item') ?>" onclick="return confirm('<?php echo $this->__('Are you sure you would like to remove this item from the wishlist?') ?>');" class="btn-remove"><?php echo $this->__('Remove This Item') ?></a>
|
36 |
+
<p class="product-name"><a href="<?php echo $this->getProductUrl($_item) ?>"><?php echo $this->escapeHtml($product->getName()) ?></a></p>
|
37 |
+
<?php if ($product->isSaleable() && $product->isVisibleInSiteVisibility()): ?>
|
38 |
+
<?php if ($isAllowed): ?>
|
39 |
+
<a href="<?php echo $this->getItemAddToCartUrl($_item) ?>" class="link-cart"><?php echo $this->__('Add to Cart') ?></a>
|
40 |
+
<?php else: ?>
|
41 |
+
<p class="availability out-of-stock"><span><?php echo $message;?></span></p>
|
42 |
+
<?php endif; ?>
|
43 |
+
<?php endif; ?>
|
44 |
+
<?php echo $this->getPriceHtml($product, false, '-wishlist') ?>
|
45 |
+
</div>
|
46 |
+
</li>
|
47 |
+
<?php endforeach; ?>
|
48 |
+
</ol>
|
49 |
+
<script type="text/javascript">decorateList('wishlist-sidebar');</script>
|
50 |
+
<div class="actions">
|
51 |
+
<a href="<?php echo $this->helper('wishlist')->getListUrl() ?>"><?php echo $this->__('Go to Wishlist') ?></a>
|
52 |
+
</div>
|
53 |
+
<?php else: ?>
|
54 |
+
<p class="empty"><?php echo $this->__('You have no items in your wishlist.') ?></p>
|
55 |
+
<?php endif ?>
|
56 |
+
</div>
|
57 |
+
</div>
|
58 |
+
<?php endif ?>
|
app/etc/modules/Cybage_Customergroup.xml
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroup
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
<config>
|
15 |
+
<modules>
|
16 |
+
<Cybage_Customergroup>
|
17 |
+
<active>true</active>
|
18 |
+
<codePool>community</codePool>
|
19 |
+
<depends>
|
20 |
+
<Mage_Adminhtml/>
|
21 |
+
<Mage_Catalog/>
|
22 |
+
<Mage_CatalogSearch/>
|
23 |
+
<Mage_Sales/>
|
24 |
+
</depends>
|
25 |
+
</Cybage_Customergroup>
|
26 |
+
</modules>
|
27 |
+
</config>
|
app/etc/modules/Cybage_Customergroupcore.xml
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Cybage Customer Group Specific Products Plugin
|
5 |
+
*
|
6 |
+
* @category Customer Group Specific Products Plugin
|
7 |
+
* @package Cybage_Customergroupcore
|
8 |
+
* @copyright Copyright (c) 2015 Cybage Software Pvt. Ltd., India
|
9 |
+
* http://www.cybage.com/coe/e-commerce
|
10 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
11 |
+
* @author Cybage Software Pvt. Ltd.
|
12 |
+
*/
|
13 |
+
-->
|
14 |
+
<config>
|
15 |
+
<modules>
|
16 |
+
<Cybage_Customergroupcore>
|
17 |
+
<active>true</active>
|
18 |
+
<codePool>community</codePool>
|
19 |
+
</Cybage_Customergroupcore>
|
20 |
+
</modules>
|
21 |
+
</config>
|
js/customergroup/jquery-1.10.2.min.js
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
|
2 |
+
//@ sourceMappingURL=jquery.min.map
|
3 |
+
*/
|
4 |
+
(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
|
5 |
+
}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
|
6 |
+
u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
|
js/customergroup/jquery.noconflict.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
jQuery.noConflict();
|
package.xml
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Cybage_Catalag_Visibility</name>
|
4 |
+
<version>1.0.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Administrator can use the Catalogue Visibility plug-in to set visibility for different user groups at a product category as well as a product level. 
|
10 |
+
For example, one user can access a certain product category but other cannot. The plug-in is used to define which user groups would have access to certain categories and its mapped products.</summary>
|
11 |
+
<description>Administrator can use the Catalogue Visibility plug-in to set visibility for different users at a product category as well as at a product level. 
|
12 |
+
For example, one user can access a certain product category but other cannot. The plug-in is used to define which user groups would have access to certain categories and its mapped products.
|
13 |
+
Features
|
14 |
+
• Support mapping of multiple user groups to a single category as well as multiple categories to a single user group
|
15 |
+
• Easy management of user to category mapping 
|
16 |
+
• Parent child relationship handling at a category and product level
|
17 |
+
• Feature to disable ‘Add to cart’ for specific categories to showcase ‘To be launched’ products
|
18 |
+
Benefits
|
19 |
+
• Easy management of user group to category mapping 
|
20 |
+
• Configure categories easily to get appropriate access at a sub category level
|
21 |
+
• Open source implementation
|
22 |
+
• Feature to disable ‘Add to cart’ for different categories and corresponding sub categories</description>
|
23 |
+
<notes>After installation of the Catalog visibility plug-in, please clear the cache.</notes>
|
24 |
+
<authors><author><name>Cybage Software Pvt. Ltd.</name><user>cybage</user><email>tapasl@cybage.com</email></author></authors>
|
25 |
+
<date>2015-08-03</date>
|
26 |
+
<time>06:56:48</time>
|
27 |
+
<contents><target name="magecommunity"><dir name="Cybage"><dir name="Customergroup"><dir name="Block"><dir name="Adminhtml"><file name="Customergroup.php" hash="dec8c058e7a14688c3a88619ce5bd0ad"/><file name="Js.php" hash="2b6db4e3a94a4ea69bb85d2dc163dfa3"/><dir name="Renderer"><file name="Customergroup.php" hash="cfdcbb695969885188b46052b06b9eac"/></dir></dir></dir><dir name="Helper"><file name="Attribute.php" hash="7d5010fdef4de004d89cc8b31b1714d4"/><file name="Data.php" hash="b3e1558b6bcd0f34561e8c0a75595924"/></dir><dir name="Model"><file name="Observer.php" hash="0030fb7c414f398b19077fd691beb699"/></dir><dir name="controllers"><file name="CustomergroupController.php" hash="3ca583f665542e5b402858cf8681cf4d"/></dir><dir name="etc"><file name="adminhtml.xml" hash="1198a489df9ea85899a512536c1c337d"/><file name="config.xml" hash="2419e7494910850f5ebaae75cea13ab3"/><file name="system.xml" hash="34d55ed3cd54aba27f4282db34315768"/></dir><dir name="sql"><dir name="customergroup_setup"><file name="mysql4-install-0.1.0.php" hash="12701c08d4e4d9793c7c077cea34571f"/></dir></dir></dir><dir name="Customergroupcore"><dir name="Helper"><file name="Data.php" hash="db24f6d0122554081abfed5d7465dee4"/></dir><dir name="Model"><dir name="Category"><dir name="Attribute"><dir name="Backend"><file name="Customergroup.php" hash="cdacd77f2d042ae9fb4dd873caef1a8d"/></dir></dir><dir name="Entity"><file name="Customergroupcore.php" hash="37f15037fd6271283dea04db62883cd9"/></dir></dir><dir name="Product"><dir name="Entity"><file name="Customergroupcore.php" hash="e223a8d2f1a13f5cff4289e17097f3cf"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="077d1ccad92801b029762b986d1da5b4"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Cybage_Customergroup.xml" hash="13f72a7e25d9f030d72ff6d2fc97160e"/><file name="Cybage_Customergroupcore.xml" hash="606daa1e2077ad43edc581ac7b623b96"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="customergroup"><file name="customergroup.xml" hash="64a6570bb491022fd9064be9de8707b6"/></dir></dir><dir name="template"><dir name="customergroup"><dir name="category"><file name="js.phtml" hash="023c03f97b978e04937fdbb27e242216"/></dir><file name="customergroup.phtml" hash="768785d2c622c5779014408810145819"/><file name="js.phtml" hash="7de104d9325475e0a11acbf31548969a"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="customergroup"><file name="customergroup.xml" hash="0f80fbdae142f4442c3cb053bb003d22"/></dir></dir><dir name="template"><dir name="customergroup"><dir name="product"><file name="addto.phtml" hash="720ac3694d11a7f785d106738836ce04"/><file name="addtocart.phtml" hash="de44d9578e082d1a82a22d68c5783e89"/><file name="list.phtml" hash="6761b37087dfe5d027c6013daabee7f4"/></dir><dir name="wishlist"><file name="cart.phtml" hash="f4bbfb34378d88fb1e0f22d77e0b907f"/><file name="share.phtml" hash="57c40fad36ae890581e56a3f3c88f5bf"/><file name="sidebar.phtml" hash="c9279a53daae4fbbe0889c177ca69af2"/><file name="tocart.phtml" hash="290d70cee391e21fa2e3d074cb4cefc1"/></dir></dir></dir></dir></dir><dir name="rwd"><dir name="default"><dir name="layout"><dir name="customergroup"><file name="customergroup.xml" hash="ff4ffeb00f00e730d905e7ef8abd2ae3"/></dir></dir><dir name="template"><dir name="customergroup"><dir name="product"><file name="addto.phtml" hash="dbdb3643d52615fd197a182eb741ef34"/><file name="addtocart.phtml" hash="1e68c18c84f6f39b27475a59eb698fea"/><file name="list.phtml" hash="36ef6200d42c91df56885c4290dc2ef8"/></dir><dir name="wishlist"><file name="cart.phtml" hash="b8d810d105ad6ce14fd6df198fde1e64"/><file name="sidebar.phtml" hash="9cea2e670a05293b07d8d44ba691f344"/></dir></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="customergroup"><file name="jquery-1.10.2.min.js" hash="e0e0559014b222245deb26b6ae8bd940"/><file name="jquery.noconflict.js" hash="3179f2255b046d5f2e9a71e365287bef"/></dir></dir></target></contents>
|
28 |
+
<compatible/>
|
29 |
+
<dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
|
30 |
+
</package>
|