Version Notes
first release
Download this release
Release Info
Developer | Atol C |
Extension | Atol_Productfeedgenerator |
Version | 1.0.0 |
Comparing to | |
See all releases |
Version 1.0.0
- app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow.php +18 -0
- app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Edit.php +58 -0
- app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Edit/Categories.php +98 -0
- app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Grid.php +63 -0
- app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Renderer/Linkscolumn.php +16 -0
- app/code/local/Atol/Productfeedgenerator/Block/Frontdisplay.php +35 -0
- app/code/local/Atol/Productfeedgenerator/Block/Productflow/Rss.php +107 -0
- app/code/local/Atol/Productfeedgenerator/Helper/Data.php +194 -0
- app/code/local/Atol/Productfeedgenerator/Model/Mysql4/Productflow.php +14 -0
- app/code/local/Atol/Productfeedgenerator/Model/Mysql4/Productflow/Collection.php +15 -0
- app/code/local/Atol/Productfeedgenerator/Model/Productflow.php +41 -0
- app/code/local/Atol/Productfeedgenerator/Model/System/Config/Source/Orderbytype.php +41 -0
- app/code/local/Atol/Productfeedgenerator/Model/System/Config/Source/Productflowtype.php +34 -0
- app/code/local/Atol/Productfeedgenerator/controllers/Adminhtml/ProductflowController.php +183 -0
- app/code/local/Atol/Productfeedgenerator/controllers/IndexController.php +41 -0
- app/code/local/Atol/Productfeedgenerator/controllers/ProductflowController.php +43 -0
- app/code/local/Atol/Productfeedgenerator/etc/adminhtml.xml +36 -0
- app/code/local/Atol/Productfeedgenerator/etc/config.xml +119 -0
- app/code/local/Atol/Productfeedgenerator/etc/system.xml +54 -0
- app/code/local/Atol/Productfeedgenerator/etc/widget.xml +36 -0
- app/code/local/Atol/Productfeedgenerator/sql/productfeedgenerator_setup/mysql4-install-0.1.0.php +24 -0
- app/etc/modules/Atol_Productfeedgenerator.xml +12 -0
- app/locale/fr_FR/Atol_Productfeedgenerator.csv +33 -0
- js/jquery/jquery-1.4.4.min.js +168 -0
- package.xml +53 -0
- skin/adminhtml/default/default/css/productfeedgenerator/styles.css +50 -0
app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Productfeedgenerator
|
6 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Block_Adminhtml_Productflow extends Mage_Adminhtml_Block_Widget_Grid_Container
|
9 |
+
{
|
10 |
+
public function __construct()
|
11 |
+
{
|
12 |
+
parent::__construct();
|
13 |
+
$this->_controller = 'adminhtml_productflow';
|
14 |
+
$this->_blockGroup = 'productfeedgenerator';
|
15 |
+
$this->_headerText = Mage::helper('productfeedgenerator')->__('Product flow management');
|
16 |
+
$this->_addButtonLabel = Mage::helper('productfeedgenerator')->__('Add a Product flow');
|
17 |
+
}
|
18 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Edit.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Quotationplus
|
6 |
+
* @copyright Copyright (c) 2012 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Block_Adminhtml_Productflow_Edit extends Mage_Adminhtml_Block_Widget_Form_Container {
|
9 |
+
|
10 |
+
private $operators;
|
11 |
+
|
12 |
+
function __construct() {
|
13 |
+
parent::__construct();
|
14 |
+
$this->operators = array(
|
15 |
+
"multiselect" => array('one' => $this->__('at least one of them operator'), 'all' => $this->__('all of them operator')),
|
16 |
+
"select" => array('eq' => $this->__('equal operator'), 'neq' => $this->__('not equal operator'), 'or' => $this->__('or operator')),
|
17 |
+
"boolean" => array('eq' => $this->__('equal operator'), 'neq' => $this->__('not equal operator')),
|
18 |
+
"text" => array('eq' => $this->__('equal operator'), 'neq' => $this->__('not equal operator'), 'in' => $this->__('in operator'))
|
19 |
+
|
20 |
+
);
|
21 |
+
}
|
22 |
+
|
23 |
+
public function getHeaderText() {
|
24 |
+
if( Mage::registry('productflow_data') && Mage::registry('productflow_data')->getId()) {
|
25 |
+
return Mage::helper('productfeedgenerator')->__('Edit the product flow');
|
26 |
+
}
|
27 |
+
else {
|
28 |
+
return Mage::helper('productfeedgenerator')->__('Add a product flow');
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
public function getProductAttributes() {
|
33 |
+
$attributes = Mage::getResourceModel('catalog/product_attribute_collection')
|
34 |
+
->setItemObjectClass('catalog/resource_eav_attribute');
|
35 |
+
$attributes->getSelect()
|
36 |
+
->distinct(true)
|
37 |
+
->where("frontend_input in ('select','multiselect','boolean')");
|
38 |
+
$attributes->addStoreLabel(Mage::app()->getStore()->getId())
|
39 |
+
->setOrder('position', 'ASC')
|
40 |
+
->load();
|
41 |
+
|
42 |
+
foreach ($attributes as $a)
|
43 |
+
{
|
44 |
+
$a->setIsRequired(false);
|
45 |
+
}
|
46 |
+
|
47 |
+
return $attributes;
|
48 |
+
}
|
49 |
+
|
50 |
+
public function getOperators($inputType) {
|
51 |
+
return (isset($this->operators[$inputType])) ? $this->operators[$inputType] : Array();
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getCurrentProductflow() {
|
55 |
+
return Mage::registry('productflow_data');
|
56 |
+
}
|
57 |
+
|
58 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Edit/Categories.php
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category Atol
|
4 |
+
* @package Atol_Productfeedgenerator
|
5 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
6 |
+
*/
|
7 |
+
class Atol_Productfeedgenerator_Block_Adminhtml_Productflow_Edit_Categories extends Mage_Adminhtml_Block_Catalog_Category_Tree
|
8 |
+
{
|
9 |
+
private $json_data;
|
10 |
+
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
parent::__construct();
|
14 |
+
$this->setTemplate('productflow/edit/categories.phtml');
|
15 |
+
}
|
16 |
+
|
17 |
+
public function getCategoryCollection()
|
18 |
+
{
|
19 |
+
$storeId = $this->getRequest()->getParam('store', $this->_getDefaultStoreId());
|
20 |
+
$collection = $this->getData('category_collection');
|
21 |
+
if (is_null($collection)) {
|
22 |
+
$collection = Mage::getModel('catalog/category')->getCollection();
|
23 |
+
|
24 |
+
/* @var $collection Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */
|
25 |
+
$collection->addAttributeToSelect('name')
|
26 |
+
->addAttributeToSelect('is_active')
|
27 |
+
->setProductStoreId($storeId)
|
28 |
+
->setLoadProductCount($this->_withProductCount)
|
29 |
+
->setStoreId($storeId);
|
30 |
+
|
31 |
+
$this->setData('category_collection', $collection);
|
32 |
+
}
|
33 |
+
$collection->addFieldToFilter('include_in_menu', array('eq' => true));
|
34 |
+
return $collection;
|
35 |
+
}
|
36 |
+
|
37 |
+
protected function _getNodeJson($node, $level=1)
|
38 |
+
{
|
39 |
+
$item = parent::_getNodeJson($node, $level);
|
40 |
+
|
41 |
+
$isParent = $this->_isParentSelectedCategory($node);
|
42 |
+
|
43 |
+
if ($isParent) {
|
44 |
+
$item['expanded'] = true;
|
45 |
+
}
|
46 |
+
|
47 |
+
if (in_array($node->getId(), $this->getCategoryIds())) {
|
48 |
+
$item['checked'] = true;
|
49 |
+
}
|
50 |
+
|
51 |
+
return $item;
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getCategoryChildrenJson($categoryId)
|
55 |
+
{
|
56 |
+
$category = Mage::getModel('catalog/category')->load($categoryId);
|
57 |
+
$node = $this->getRoot($category, 1)->getTree()->getNodeById($categoryId);
|
58 |
+
|
59 |
+
if (!$node || !$node->hasChildren()) {
|
60 |
+
return '[]';
|
61 |
+
}
|
62 |
+
|
63 |
+
$children = array();
|
64 |
+
foreach ($node->getChildren() as $child) {
|
65 |
+
$children[] = $this->_getNodeJson($child);
|
66 |
+
}
|
67 |
+
|
68 |
+
return Mage::helper('core')->jsonEncode($children);
|
69 |
+
}
|
70 |
+
|
71 |
+
protected function getCategoryIds()
|
72 |
+
{
|
73 |
+
$data = $this->getJsonData();
|
74 |
+
return (isset($data) && isset($data['categories'])) ? $data['categories'] : Array();
|
75 |
+
}
|
76 |
+
|
77 |
+
public function getIdsString()
|
78 |
+
{
|
79 |
+
return implode(',', $this->getCategoryIds());
|
80 |
+
}
|
81 |
+
|
82 |
+
public function getProductflowId() {
|
83 |
+
$model = Mage::registry('productflow_data');
|
84 |
+
$id = null;
|
85 |
+
if($model) {
|
86 |
+
$id = $model->getData('flow_id');
|
87 |
+
}
|
88 |
+
return $id;
|
89 |
+
}
|
90 |
+
|
91 |
+
protected function getJsonData() {
|
92 |
+
if(!$this->json_data) {
|
93 |
+
$model = Mage::registry('productflow_data');
|
94 |
+
$this->json_data = (($model) ? Mage::helper('core')->jsonDecode($model->getData('json_data')) : null);
|
95 |
+
}
|
96 |
+
return $this->json_data;
|
97 |
+
}
|
98 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Grid.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Productfeedgenerator
|
6 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Block_Adminhtml_Productflow_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
9 |
+
{
|
10 |
+
public function __construct()
|
11 |
+
{
|
12 |
+
parent::__construct();
|
13 |
+
$this->setId('productfeedgeneratorGrid');
|
14 |
+
$this->setDefaultSort('type_id');
|
15 |
+
$this->setDefaultDir('DESC');
|
16 |
+
$this->setSaveParametersInSession(true);
|
17 |
+
}
|
18 |
+
|
19 |
+
protected function _prepareCollection()
|
20 |
+
{
|
21 |
+
$collection = Mage::getModel('productfeedgenerator/productflow')->getCollection()
|
22 |
+
->addFieldToFilter('deleted_at', array('null' => true))
|
23 |
+
->addOrder('flow_id',Varien_Data_Collection::SORT_ORDER_ASC);
|
24 |
+
$this->setCollection($collection);
|
25 |
+
return parent::_prepareCollection();
|
26 |
+
}
|
27 |
+
|
28 |
+
protected function _prepareColumns()
|
29 |
+
{
|
30 |
+
$this->addColumn('flow_id',
|
31 |
+
array(
|
32 |
+
'header' => Mage::helper('productfeedgenerator')->__('ID'),
|
33 |
+
'align' => 'right',
|
34 |
+
'width' => '50px',
|
35 |
+
'index' => 'flow_id',
|
36 |
+
));
|
37 |
+
$this->addColumn('title',
|
38 |
+
array(
|
39 |
+
'header' => Mage::helper('productfeedgenerator')->__('Title'),
|
40 |
+
'align' => 'left',
|
41 |
+
'index' => 'title',
|
42 |
+
));
|
43 |
+
$this->addColumn('note',
|
44 |
+
array(
|
45 |
+
'header' => Mage::helper('productfeedgenerator')->__('Comment'),
|
46 |
+
'align' => 'left',
|
47 |
+
'index' => 'note',
|
48 |
+
));
|
49 |
+
$this->addColumn('links',
|
50 |
+
array(
|
51 |
+
'header' => Mage::helper('productfeedgenerator')->__('Links'),
|
52 |
+
'align' => 'left',
|
53 |
+
'index' => 'flow_id',
|
54 |
+
'renderer' => 'Atol_Productfeedgenerator_Block_Adminhtml_Productflow_Renderer_Linkscolumn'
|
55 |
+
));
|
56 |
+
return parent::_prepareColumns();
|
57 |
+
}
|
58 |
+
|
59 |
+
public function getRowUrl($row)
|
60 |
+
{
|
61 |
+
return $this->getUrl('*/*/edit', array('id' => $row->getId()));
|
62 |
+
}
|
63 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Block/Adminhtml/Productflow/Renderer/Linkscolumn.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Productfeedgenerator
|
6 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Block_Adminhtml_Productflow_Renderer_Linkscolumn extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
|
9 |
+
|
10 |
+
public function render(Varien_Object $row)
|
11 |
+
{
|
12 |
+
$id = $row->getData($this->getColumn()->getIndex());
|
13 |
+
return '<a href="' . Mage::getUrl('productfeedgenerator_front/productflow/rss', array('id' => $id, '_store' => 1)) . '" target="_blank" class="rss_link" title="'.Mage::helper('productfeedgenerator')->__('RSS Feed').'"></a>';
|
14 |
+
}
|
15 |
+
|
16 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Block/Frontdisplay.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Atol_Productfeedgenerator_Block_Frontdisplay
|
3 |
+
extends Mage_Catalog_Block_Product_List
|
4 |
+
implements Mage_Widget_Block_Interface
|
5 |
+
{
|
6 |
+
|
7 |
+
protected function _toHtml()
|
8 |
+
{
|
9 |
+
$columns = self::getData('columns');
|
10 |
+
|
11 |
+
$template = 'catalog/product/list.phtml';
|
12 |
+
/* Pour ne pas avoir le bug des puces apparantes dans la liste de produits, ajouter le code suivant dans Page/Design/Page Layout/Layout Update XML
|
13 |
+
* <reference name="content"><remove name="cms.wrapper" /><block type="core/template" name="home-content"
|
14 |
+
* template="test.phtml" /><block type="cms/page" name="cms_page"/></reference>
|
15 |
+
*/
|
16 |
+
|
17 |
+
$this->setColumnCount($columns);
|
18 |
+
$this->setTemplate($template);
|
19 |
+
|
20 |
+
return parent::_toHtml();
|
21 |
+
}
|
22 |
+
|
23 |
+
protected function _getProductCollection()
|
24 |
+
{
|
25 |
+
$productFlowId = self::getData('flux_id');
|
26 |
+
$productFlow = Mage::getModel('productfeedgenerator/productflow')->load($productFlowId);
|
27 |
+
$json = $productFlow->getData('json_data');
|
28 |
+
|
29 |
+
|
30 |
+
$this->_productCollection = Mage::helper('productfeedgenerator')->getProductCollectionFromJson($json);
|
31 |
+
|
32 |
+
return $this->_productCollection;
|
33 |
+
}
|
34 |
+
|
35 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Block/Productflow/Rss.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category Atol
|
4 |
+
* @package Atol_Productfeedgenerator
|
5 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
6 |
+
*/
|
7 |
+
|
8 |
+
class Atol_Productfeedgenerator_Block_Productflow_Rss extends Mage_Rss_Block_Catalog_New
|
9 |
+
{
|
10 |
+
protected function _construct()
|
11 |
+
{
|
12 |
+
/*
|
13 |
+
* setting cache to save the rss for 10 minutes
|
14 |
+
*/
|
15 |
+
$this->setCacheKey('rss_catalog_new_'.$this->_getStoreId());
|
16 |
+
$this->setCacheLifetime(600);
|
17 |
+
}
|
18 |
+
|
19 |
+
protected function _toHtml()
|
20 |
+
{
|
21 |
+
$productFlow = Mage::registry('product_flow');
|
22 |
+
if($productFlow) {
|
23 |
+
$rssObj = Mage::getModel('rss/rss');
|
24 |
+
$data = array('title' => Mage::helper('productfeedgenerator')->__('Products list from %s',$productFlow->getTitle()),
|
25 |
+
'description' => $productFlow->getNote(),
|
26 |
+
'link' => Mage::getUrl('productfeedgenerator/catalog/products'),
|
27 |
+
'charset' => 'UTF-8',
|
28 |
+
'language' => Mage::getStoreConfig('general/locale/code')
|
29 |
+
);
|
30 |
+
$rssObj->_addHeader($data);
|
31 |
+
|
32 |
+
$products = ($productFlow) ? Mage::helper('productfeedgenerator')->getProductCollectionFromJson($productFlow->getData('json_data')) : null;
|
33 |
+
|
34 |
+
$product = Mage::getModel('catalog/product');
|
35 |
+
|
36 |
+
Mage::getSingleton('core/resource_iterator')->walk(
|
37 |
+
$products->getSelect(),
|
38 |
+
array(array($this, 'addNewItemXmlCallback')),
|
39 |
+
array('rssObj'=> $rssObj, 'product'=> $product)
|
40 |
+
);
|
41 |
+
|
42 |
+
return $rssObj->createRssXml();
|
43 |
+
} else {
|
44 |
+
return '';
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Preparing data and adding to rss object
|
50 |
+
*
|
51 |
+
* @param array $args
|
52 |
+
*/
|
53 |
+
public function addNewItemXmlCallback($args)
|
54 |
+
{
|
55 |
+
$_coreHelper = Mage::helper('core');
|
56 |
+
$_taxHelper = Mage::helper('tax');
|
57 |
+
|
58 |
+
$product = $args['product'];
|
59 |
+
$product->setData($args['row']);
|
60 |
+
|
61 |
+
$_price = $_taxHelper->getPrice($product, $product->getPrice());
|
62 |
+
$_finalPrice = $_taxHelper->getPrice($product, $product->getData('product_final_price'));
|
63 |
+
|
64 |
+
$product->setAllowedInRss(true);
|
65 |
+
$product->setAllowedPriceInRss(false);
|
66 |
+
Mage::dispatchEvent('rss_catalog_new_xml_callback', $args);
|
67 |
+
|
68 |
+
if (!$product->getAllowedInRss()) {
|
69 |
+
//Skip adding product to RSS
|
70 |
+
return;
|
71 |
+
}
|
72 |
+
$url = Mage::getUrl('catalog/product/view',array("id" => $product->getId()));
|
73 |
+
$allowedPriceInRss = $product->getAllowedPriceInRss();
|
74 |
+
|
75 |
+
|
76 |
+
$description =
|
77 |
+
'<table>'.
|
78 |
+
'<tr>'.
|
79 |
+
'<td>'.
|
80 |
+
'<a href="'.$url.'">'.
|
81 |
+
'<img src="'. $this->helper('catalog/image')->init($product, 'thumbnail')->resize(75, 75).'" border="0" align="left" height="75" width="75">' .
|
82 |
+
'</a>'.
|
83 |
+
'</td>'.
|
84 |
+
'<td style="text-decoration:none;">'
|
85 |
+
. $product->getDescription() . '<br /><br />'
|
86 |
+
. $this->__('Price : ') . $_coreHelper->currency($_price,true,false) . '<br />'
|
87 |
+
. $this->__('Final price : ') . $_coreHelper->currency($_finalPrice,true,false) ;
|
88 |
+
|
89 |
+
|
90 |
+
if ($allowedPriceInRss) {
|
91 |
+
$description .= $this->getPriceHtml($product,true);
|
92 |
+
}
|
93 |
+
|
94 |
+
$description .=
|
95 |
+
'</td>'.
|
96 |
+
'</tr>'.
|
97 |
+
'</table>';
|
98 |
+
|
99 |
+
$rssObj = $args['rssObj'];
|
100 |
+
$data = array(
|
101 |
+
'title' => $product->getName(),
|
102 |
+
'link' => $url,
|
103 |
+
'description' => $description,
|
104 |
+
);
|
105 |
+
$rssObj->_addEntry($data);
|
106 |
+
}
|
107 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Helper/Data.php
ADDED
@@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Productfeedgenerator
|
6 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Helper_Data extends Mage_Core_Helper_Abstract
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* Return all products concerned by all parameters
|
12 |
+
*
|
13 |
+
* @var $attributes array
|
14 |
+
* $attributes is an array containing the list of attributes to filter
|
15 |
+
* Each attribute is linked to an array containing the operator with the value
|
16 |
+
* If an attribute is not referenced in the $AUTHORIZED_ATTRIBUTES list, it will be ignored
|
17 |
+
* For example : $attributes = array("price" => array("eq" => 2.0))
|
18 |
+
* @var $filters array
|
19 |
+
* $filters indicates if discounted or new products should be considered by the query
|
20 |
+
* For example : $filters = array('new','discounted')
|
21 |
+
* @var $categoriesId array
|
22 |
+
* $categoriesId contains all categories id whose products belongs to
|
23 |
+
* For example : $categoriesId = [1, 5, 10, 70]
|
24 |
+
* @var $orders array
|
25 |
+
* $orders is an array indicating the orders of the data flow
|
26 |
+
* For example, $orders = array(array('attribute' => 'price', 'direction' => 'desc'), array('attribute' => 'name', 'direction' => 'asc'))
|
27 |
+
* @var $limit
|
28 |
+
* $limit indicates the number of products returned by the query
|
29 |
+
*/
|
30 |
+
public function getProductCollection(Array $attributes, Array $filters = null, $categoriesId = null, Array $orders = null, $limit = null) {
|
31 |
+
$product = Mage::getModel('catalog/product');
|
32 |
+
|
33 |
+
$products = $product->getCollection()
|
34 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
35 |
+
->addStoreFilter()
|
36 |
+
->addAttributeToFilter('visibility', 4)
|
37 |
+
->addAttributeToSelect(array('name', 'short_description', 'description', 'thumbnail'), 'inner')
|
38 |
+
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
|
39 |
+
->addAttributeToSelect(
|
40 |
+
array(
|
41 |
+
'price', 'special_price', 'special_from_date', 'special_to_date', 'news_from_date', 'news_to_date',
|
42 |
+
'msrp_enabled', 'msrp_display_actual_price_type', 'msrp'
|
43 |
+
),
|
44 |
+
'left'
|
45 |
+
)
|
46 |
+
;
|
47 |
+
$products->getSelect()
|
48 |
+
->join('catalog_product_index_price','e.entity_id = catalog_product_index_price.entity_id', array('product_price' => 'price', 'product_final_price' => 'final_price'))
|
49 |
+
->where('catalog_product_index_price.customer_group_id = 0')
|
50 |
+
->group('e.entity_id');
|
51 |
+
|
52 |
+
|
53 |
+
if($filters) {
|
54 |
+
$todayDate = $product->getResource()->formatDate(time());
|
55 |
+
foreach($filters as $filter){
|
56 |
+
switch($filter) {
|
57 |
+
case 'discounted' :
|
58 |
+
$products->addPriceDataFieldFilter('%s < %s', array('special_price','price'));
|
59 |
+
$products->addAttributeToFilter('special_from_date', array('date'=>true, 'to'=> $todayDate))
|
60 |
+
->addAttributeToFilter(
|
61 |
+
array(
|
62 |
+
array('attribute'=>'special_to_date', 'date'=>true, 'from'=>$todayDate),
|
63 |
+
array('attribute'=>'special_to_date', 'is' => new Zend_Db_Expr('null'))
|
64 |
+
),
|
65 |
+
'',
|
66 |
+
'left'
|
67 |
+
);
|
68 |
+
break;
|
69 |
+
case 'new' :
|
70 |
+
$products->addAttributeToFilter('news_from_date', array('date'=>true, 'to'=> $todayDate))
|
71 |
+
->addAttributeToFilter(
|
72 |
+
array(
|
73 |
+
array('attribute'=>'news_to_date', 'date'=>true, 'from'=>$todayDate),
|
74 |
+
array('attribute'=>'news_to_date', 'is' => new Zend_Db_Expr('null'))
|
75 |
+
),
|
76 |
+
'',
|
77 |
+
'left'
|
78 |
+
)
|
79 |
+
->addAttributeToSort('news_from_date','desc');
|
80 |
+
break;
|
81 |
+
default :
|
82 |
+
break;
|
83 |
+
}
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
87 |
+
if($categoriesId) {
|
88 |
+
$cats = implode(',', $categoriesId);
|
89 |
+
$products->joinTable('catalog/category_product', 'product_id=entity_id', array('product_id' => 'product_id') , '{{table}}.category_id IN ( '. $cats .' )' );
|
90 |
+
}
|
91 |
+
|
92 |
+
foreach($attributes as $attribute) {
|
93 |
+
$attributeCode = $attribute['attribute_code'];
|
94 |
+
$expr = $attribute['expr'];
|
95 |
+
$products->addAttributeToFilter($attributeCode, $expr);
|
96 |
+
}
|
97 |
+
|
98 |
+
if($limit) {
|
99 |
+
$products->getSelect()->limit($limit, 0);
|
100 |
+
}
|
101 |
+
|
102 |
+
if($orders) {
|
103 |
+
foreach($orders as $orderby) {
|
104 |
+
if(isset($orderby['attribute']) && $orderby['attribute'] && isset($orderby['direction'])) {
|
105 |
+
$products->getSelect()->order($orderby['attribute'], $orderby['direction']);
|
106 |
+
}
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
return $products;
|
111 |
+
}
|
112 |
+
|
113 |
+
public function getProductCollectionFromJson($json) {
|
114 |
+
try {
|
115 |
+
$data = Mage::helper('core')->jsonDecode($json);
|
116 |
+
} catch(Exception $e) {
|
117 |
+
Mage::logException($e);
|
118 |
+
return null;
|
119 |
+
}
|
120 |
+
|
121 |
+
if($data && isset($data['attributes']) && isset($data['categories']) && isset($data['filters']) && isset($data['others'])) {
|
122 |
+
$attributes = $data['attributes'];
|
123 |
+
$attributesQuery = Array();
|
124 |
+
foreach($attributes as $attribute) {
|
125 |
+
$attributeModel = Mage::getModel('eav/entity_attribute')->load($attribute['id']);
|
126 |
+
$attributeCode = $attributeModel->getData('attribute_code');
|
127 |
+
if($attributeCode && isset($attribute['operator']) && isset($attribute['values']) && count($attribute['values']) > 0) {
|
128 |
+
$expr = null;
|
129 |
+
switch($attribute['operator']) {
|
130 |
+
case 'or' :
|
131 |
+
$attributesQuery[] = array("attribute_code" => $attributeCode, "expr" => array('in' => $attribute['values']));
|
132 |
+
break;
|
133 |
+
case 'one' :
|
134 |
+
foreach($attribute['values'] as $value) {
|
135 |
+
$expr[] = array('finset' => $value);
|
136 |
+
}
|
137 |
+
$attributesQuery[] = array("attribute_code" => $attributeCode, "expr" => $expr);
|
138 |
+
break;
|
139 |
+
case 'all' :
|
140 |
+
foreach($attribute['values'] as $value) {
|
141 |
+
$attributesQuery[] = array("attribute_code" => $attributeCode, "expr" => array('finset' => $value));
|
142 |
+
}
|
143 |
+
break;
|
144 |
+
case 'eq' :
|
145 |
+
case 'neq' :
|
146 |
+
default :
|
147 |
+
$attributesQuery[] = array("attribute_code" => $attributeCode, "expr" => array($attribute['operator'] => $attribute['values'][0]));
|
148 |
+
}
|
149 |
+
}
|
150 |
+
}
|
151 |
+
|
152 |
+
$filters = $data['filters'];
|
153 |
+
$filtersQuery = Array();
|
154 |
+
foreach($filters as $key => $value) {
|
155 |
+
if($value) {
|
156 |
+
$filtersQuery[] = $key;
|
157 |
+
}
|
158 |
+
}
|
159 |
+
|
160 |
+
$categoriesId = $data['categories'];
|
161 |
+
$categoriesQuery = Array();
|
162 |
+
foreach($categoriesId as $categoryId) {
|
163 |
+
if($categoryId && !in_array($categoryId, $categoriesQuery)) {
|
164 |
+
$categoriesQuery[] = $categoryId;
|
165 |
+
}
|
166 |
+
}
|
167 |
+
|
168 |
+
$orderQueryTmp = $data['orderBy'];
|
169 |
+
$orderQuery = Array();
|
170 |
+
foreach($orderQueryTmp as $orderBy) {
|
171 |
+
if(isset($orderBy['attribute']) && isset($orderBy['direction']) && ($orderBy['direction'] == 'asc' || $orderBy['direction'] == 'desc')) {
|
172 |
+
$orderQuery[] = $orderBy;
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
$limitQuery = null;
|
177 |
+
if(isset($data['others']['limit'])) {
|
178 |
+
$limitQuery = $data['others']['limit'];
|
179 |
+
}
|
180 |
+
|
181 |
+
return $this->getProductCollection($attributesQuery, $filtersQuery, $categoriesQuery, $orderQuery, $limitQuery);
|
182 |
+
} else {
|
183 |
+
return null;
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
public function getProductCollectionFromId()
|
188 |
+
{
|
189 |
+
$id = Mage::app()->getRequest()->getParam('id');
|
190 |
+
$productFlow = Mage::getModel('productfeedgenerator/productflow')->load($id);
|
191 |
+
$json = $productFlow->getData('json_data');
|
192 |
+
return $this->getProductCollectionFromJson($json);
|
193 |
+
}
|
194 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Model/Mysql4/Productflow.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Productfeedgenerator
|
6 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Model_Mysql4_Productflow extends Mage_Core_Model_Mysql4_Abstract
|
9 |
+
{
|
10 |
+
public function _construct()
|
11 |
+
{
|
12 |
+
$this->_init('productfeedgenerator/productflow', 'flow_id');
|
13 |
+
}
|
14 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Model/Mysql4/Productflow/Collection.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Productfeedgenerator
|
6 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Model_Mysql4_Productflow_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
9 |
+
{
|
10 |
+
public function _construct()
|
11 |
+
{
|
12 |
+
parent::_construct();
|
13 |
+
$this->_init('productfeedgenerator/productflow');
|
14 |
+
}
|
15 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Model/Productflow.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Productfeedgenerator
|
6 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Model_Productflow extends Mage_Core_Model_Abstract
|
9 |
+
{
|
10 |
+
protected $_attributes;
|
11 |
+
protected $_filters;
|
12 |
+
protected $_categories;
|
13 |
+
protected $_limit;
|
14 |
+
protected $_order;
|
15 |
+
|
16 |
+
public function _construct()
|
17 |
+
{
|
18 |
+
parent::_construct();
|
19 |
+
$this->_init('productfeedgenerator/productflow');
|
20 |
+
}
|
21 |
+
|
22 |
+
public function getAttributes() {
|
23 |
+
return $_attributes;
|
24 |
+
}
|
25 |
+
|
26 |
+
public function getSpecial() {
|
27 |
+
return $_filters;
|
28 |
+
}
|
29 |
+
|
30 |
+
public function getCategories() {
|
31 |
+
return $_categories;
|
32 |
+
}
|
33 |
+
|
34 |
+
public function getOrder() {
|
35 |
+
return $_order;
|
36 |
+
}
|
37 |
+
|
38 |
+
public function getLimit() {
|
39 |
+
return $_limit;
|
40 |
+
}
|
41 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Model/System/Config/Source/Orderbytype.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Quotationplus
|
6 |
+
* @copyright Copyright (c) 2012 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Model_System_Config_Source_Orderbytype
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* Options getter
|
12 |
+
*
|
13 |
+
* @return array
|
14 |
+
*/
|
15 |
+
public function toOptionArray()
|
16 |
+
{
|
17 |
+
return array(
|
18 |
+
array(
|
19 |
+
"value" => 0,
|
20 |
+
"label" => Mage::helper('productfeedgenerator')->__('No order')
|
21 |
+
),
|
22 |
+
array(
|
23 |
+
"value" => "product_final_price", //final_price attribute is renamed in the query
|
24 |
+
"label" => Mage::helper('productfeedgenerator')->__('Price')
|
25 |
+
),
|
26 |
+
array(
|
27 |
+
"value" => "name",
|
28 |
+
"label" => Mage::helper('productfeedgenerator')->__('Name')
|
29 |
+
),
|
30 |
+
array(
|
31 |
+
"value" => "news_from_date",
|
32 |
+
"label" => Mage::helper('productfeedgenerator')->__('News from date')
|
33 |
+
),
|
34 |
+
array(
|
35 |
+
"value" => "news_to_date",
|
36 |
+
"label" => Mage::helper('productfeedgenerator')->__('News to date')
|
37 |
+
)
|
38 |
+
);
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
app/code/local/Atol/Productfeedgenerator/Model/System/Config/Source/Productflowtype.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Quotationplus
|
6 |
+
* @copyright Copyright (c) 2012 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Model_System_Config_Source_Productflowtype
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* Options getter
|
12 |
+
*
|
13 |
+
* @return array
|
14 |
+
*/
|
15 |
+
public function toOptionArray()
|
16 |
+
{
|
17 |
+
$collection = Mage::getModel('productfeedgenerator/productflow')->getCollection()
|
18 |
+
->addFieldToFilter('deleted_at', array('null' => true))
|
19 |
+
->addOrder('flow_id',Varien_Data_Collection::SORT_ORDER_ASC);
|
20 |
+
|
21 |
+
$options = array_map(
|
22 |
+
function($pf) {
|
23 |
+
return array(
|
24 |
+
"value" => $pf->getData('flow_id'),
|
25 |
+
"label" => $pf->getTitle()
|
26 |
+
);
|
27 |
+
},
|
28 |
+
iterator_to_array($collection->getIterator())
|
29 |
+
);
|
30 |
+
|
31 |
+
return $options;
|
32 |
+
}
|
33 |
+
|
34 |
+
}
|
app/code/local/Atol/Productfeedgenerator/controllers/Adminhtml/ProductflowController.php
ADDED
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category Atol
|
5 |
+
* @package Atol_Quotationplus
|
6 |
+
* @copyright Copyright (c) 2012 Atol C&D (http://www.atolcd.com)
|
7 |
+
*/
|
8 |
+
class Atol_Productfeedgenerator_Adminhtml_ProductflowController extends Mage_Adminhtml_Controller_Action
|
9 |
+
{
|
10 |
+
protected function _initAction() {
|
11 |
+
$this->loadLayout()
|
12 |
+
->_setActiveMenu('catalog/productflow')
|
13 |
+
->_addBreadcrumb(Mage::helper('productfeedgenerator')->__('Product flow Manager'), Mage::helper('productfeedgenerator')->__('Product flow Manager'));
|
14 |
+
|
15 |
+
return $this;
|
16 |
+
}
|
17 |
+
|
18 |
+
public function indexAction() {
|
19 |
+
$this->_initAction()
|
20 |
+
->renderLayout();
|
21 |
+
}
|
22 |
+
|
23 |
+
public function editAction() {
|
24 |
+
$id = $this->getRequest()->getParam('id', null);
|
25 |
+
$model = Mage::getModel('productfeedgenerator/productflow');
|
26 |
+
if ($id) {
|
27 |
+
$model->load((int) $id);
|
28 |
+
if (!$model->getId()) {
|
29 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('productfeedgenerator')->__('The product flow does not exist'));
|
30 |
+
$this->_redirect('*/*/');
|
31 |
+
}
|
32 |
+
}
|
33 |
+
Mage::register('productflow_data', $model);
|
34 |
+
|
35 |
+
$this->loadLayout();
|
36 |
+
$this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
|
37 |
+
$this->renderLayout();
|
38 |
+
}
|
39 |
+
|
40 |
+
public function newAction() {
|
41 |
+
$this->_forward('edit');
|
42 |
+
}
|
43 |
+
|
44 |
+
public function saveAction() {
|
45 |
+
if ($this->getRequest()->isPost() && $this->getRequest()->isXmlHttpRequest()) {
|
46 |
+
$request = $this->getRequest();
|
47 |
+
$id = $request->getPost('id');
|
48 |
+
$name = Mage::helper('core')->escapeHtml($request->getPost('name'));
|
49 |
+
$comment = Mage::helper('core')->escapeHtml($request->getPost('comment'));
|
50 |
+
$data = Mage::helper('core')->jsonDecode($request->getPost('data'));
|
51 |
+
|
52 |
+
|
53 |
+
if($name && $data && isset($data['attributes']) && isset($data['categories']) && isset($data['filters']) && isset($data['others'])) {
|
54 |
+
try {
|
55 |
+
$now = date('Y-M-d H:i:s');
|
56 |
+
$productFlow = Mage::getModel('productfeedgenerator/productflow');
|
57 |
+
if($id) {
|
58 |
+
$productFlow = $productFlow->load($id);
|
59 |
+
} else {
|
60 |
+
$productFlow->setData('created_at', $now);
|
61 |
+
}
|
62 |
+
$productFlow->setData('title', $name);
|
63 |
+
$productFlow->setData('note', $comment);
|
64 |
+
$productFlow->setData('json_data', $request->getPost('data'));
|
65 |
+
$productFlow->setData('updated_at', $now);
|
66 |
+
|
67 |
+
$productFlow->save();
|
68 |
+
|
69 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('productfeedgenerator')->__('The product flow was successfully updated'));
|
70 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array("success" => Mage::helper('productfeedgenerator')->__('The product flow was successfully updated'))));
|
71 |
+
} catch(Exception $e) {
|
72 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array("error" => $e->getMessage())));
|
73 |
+
}
|
74 |
+
} else {
|
75 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array("error" => Mage::helper('productfeedgenerator')->__('Invalid data'))));
|
76 |
+
}
|
77 |
+
} else {
|
78 |
+
return $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
|
79 |
+
}
|
80 |
+
}
|
81 |
+
|
82 |
+
public function deleteAction() {
|
83 |
+
if ($this->getRequest()->isPost() && $this->getRequest()->isXmlHttpRequest()) {
|
84 |
+
$id = $this->getRequest()->getPost('id');
|
85 |
+
if( $id > 0 ) {
|
86 |
+
try {
|
87 |
+
$productFlow = Mage::getModel('productfeedgenerator/productflow')->load($id);
|
88 |
+
|
89 |
+
$now = date('Y-M-d H:i:s');
|
90 |
+
$productFlow->setData('deleted_at', $now);
|
91 |
+
$productFlow->setData('updated_at', $now);
|
92 |
+
|
93 |
+
$productFlow->save();
|
94 |
+
|
95 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('productfeedgenerator')->__('The product flow was successfully deleted'));
|
96 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array("success" => Mage::helper('productfeedgenerator')->__('The product flow was successfully deleted'))));
|
97 |
+
} catch(Exception $e) {
|
98 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array("error" => $e->getMessage())));
|
99 |
+
}
|
100 |
+
} else {
|
101 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array("error" => Mage::helper('productfeedgenerator')->__('Invalid data'))));
|
102 |
+
}
|
103 |
+
} else {
|
104 |
+
return $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
public function testAction() {
|
109 |
+
if ($this->getRequest()->isPost() && $this->getRequest()->isXmlHttpRequest()) {
|
110 |
+
$request = $this->getRequest();
|
111 |
+
$collection = Mage::helper('productfeedgenerator')->getProductCollectionFromJson($request->getPost('data'));
|
112 |
+
|
113 |
+
if($collection) {
|
114 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array('count' => $collection->count())));
|
115 |
+
} else {
|
116 |
+
return $this->getResponse()->setBody(Mage::helper('core')->jsonEncode(array('error' => Mage::helper('productfeedgenerator')->__('Invalid data'))));
|
117 |
+
}
|
118 |
+
} else {
|
119 |
+
return $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Initialize requested category and put it into registry.
|
125 |
+
* Root category can be returned, if inappropriate store/category is specified
|
126 |
+
*
|
127 |
+
* @param bool $getRootInstead
|
128 |
+
* @return Mage_Catalog_Model_Category
|
129 |
+
*/
|
130 |
+
protected function _initCategory($getRootInstead = false)
|
131 |
+
{
|
132 |
+
$this->_title($this->__('Catalog'))
|
133 |
+
->_title($this->__('Categories'))
|
134 |
+
->_title($this->__('Manage Categories'));
|
135 |
+
|
136 |
+
$categoryId = (int) $this->getRequest()->getParam('id',false);
|
137 |
+
$storeId = (int) $this->getRequest()->getParam('store');
|
138 |
+
$category = Mage::getModel('catalog/category');
|
139 |
+
$category->setStoreId($storeId);
|
140 |
+
|
141 |
+
if ($categoryId) {
|
142 |
+
$category->load($categoryId);
|
143 |
+
if ($storeId) {
|
144 |
+
$rootId = Mage::app()->getStore($storeId)->getRootCategoryId();
|
145 |
+
if (!in_array($rootId, $category->getPathIds())) {
|
146 |
+
// load root category instead wrong one
|
147 |
+
if ($getRootInstead) {
|
148 |
+
$category->load($rootId);
|
149 |
+
}
|
150 |
+
else {
|
151 |
+
$this->_redirect('*/*/', array('_current'=>true, 'id'=>null));
|
152 |
+
return false;
|
153 |
+
}
|
154 |
+
}
|
155 |
+
}
|
156 |
+
}
|
157 |
+
|
158 |
+
if ($activeTabId = (string) $this->getRequest()->getParam('active_tab_id')) {
|
159 |
+
Mage::getSingleton('admin/session')->setActiveTabId($activeTabId);
|
160 |
+
}
|
161 |
+
|
162 |
+
Mage::register('category', $category);
|
163 |
+
Mage::register('current_category', $category);
|
164 |
+
Mage::getSingleton('cms/wysiwyg_config')->setStoreId($this->getRequest()->getParam('store'));
|
165 |
+
return $category;
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Get tree node (Ajax version)
|
170 |
+
*/
|
171 |
+
public function categoriesJsonAction()
|
172 |
+
{
|
173 |
+
$productFlowId = (int) $this->getRequest()->getPost('productflow',false);
|
174 |
+
if($productFlowId) {
|
175 |
+
$productFlow = Mage::getModel('productfeedgenerator/productflow')->load($productFlowId);
|
176 |
+
Mage::register('productflow_data',$productFlow);
|
177 |
+
}
|
178 |
+
$this->getResponse()->setBody(
|
179 |
+
$this->getLayout()->createBlock('productfeedgenerator/adminhtml_productflow_edit_categories')
|
180 |
+
->getCategoryChildrenJson($this->getRequest()->getParam('category'))
|
181 |
+
);
|
182 |
+
}
|
183 |
+
}
|
app/code/local/Atol/Productfeedgenerator/controllers/IndexController.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Marko Martinović
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Please do not edit or add to this file if you wish to upgrade
|
18 |
+
* Magento or this extension to newer versions in the future.
|
19 |
+
* I give my best to conform to "non-obtrusive, best Magento practices"
|
20 |
+
* style of coding. However, I do not guarantee functional accuracy of specific
|
21 |
+
* extension behavior.Additionally Itake no responsibility for any possible
|
22 |
+
* issue(s) resulting from extension usage. I reserve the full right not to
|
23 |
+
* provide any kind of support for my free code. Thank you for your understanding.
|
24 |
+
*
|
25 |
+
* @category Mmartinovic
|
26 |
+
* @package Productlist
|
27 |
+
* @author Marko Martinović <marko.martinovic@inchoo.net>
|
28 |
+
* @copyright Copyright (c) Marko Martinović (http://www.techytalk.info/)
|
29 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
30 |
+
*/
|
31 |
+
|
32 |
+
class Atol_Productfeedgenerator_IndexController extends Mage_Core_Controller_Front_Action
|
33 |
+
{
|
34 |
+
|
35 |
+
public function indexAction()
|
36 |
+
{
|
37 |
+
$this->loadLayout();
|
38 |
+
$this->renderLayout();
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
app/code/local/Atol/Productfeedgenerator/controllers/ProductflowController.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category Atol
|
4 |
+
* @package Atol_Productfeedgenerator
|
5 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
6 |
+
*/
|
7 |
+
|
8 |
+
class Atol_Productfeedgenerator_ProductflowController extends Mage_Core_Controller_Front_Action {
|
9 |
+
|
10 |
+
protected function isFeedEnable()
|
11 |
+
{
|
12 |
+
return Mage::getStoreConfig('rss/productfeedgenerator/active');
|
13 |
+
}
|
14 |
+
|
15 |
+
protected function checkFeedEnable()
|
16 |
+
{
|
17 |
+
if ($this->isFeedEnable()) {
|
18 |
+
$this->getResponse()->setHeader('Content-type', 'text/xml; charset=UTF-8');
|
19 |
+
return true;
|
20 |
+
} else {
|
21 |
+
return $this->getResponse()->setHeader('HTTP/1.1','403 Forbidden');
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
public function rssAction() {
|
26 |
+
$productFlowId = (int) $this->getRequest()->getParam('id',false);
|
27 |
+
if($productFlowId) {
|
28 |
+
$productFlow = Mage::getModel('productfeedgenerator/productflow')->load($productFlowId);
|
29 |
+
|
30 |
+
if($productFlow && $productFlow->getData('flow_id') && !$productFlow->getData('deleted_at')) {
|
31 |
+
Mage::register('product_flow', $productFlow);
|
32 |
+
$this->checkFeedEnable();
|
33 |
+
//$this->checkSecurity();
|
34 |
+
$this->loadLayout(false);
|
35 |
+
$this->renderLayout();
|
36 |
+
} else {
|
37 |
+
return $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
|
38 |
+
}
|
39 |
+
} else {
|
40 |
+
return $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
|
41 |
+
}
|
42 |
+
}
|
43 |
+
}
|
app/code/local/Atol/Productfeedgenerator/etc/adminhtml.xml
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<menu>
|
4 |
+
<catalog>
|
5 |
+
<children>
|
6 |
+
<productflow module="productfeedgenerator">
|
7 |
+
<title>Product flow</title>
|
8 |
+
<sort_order>10</sort_order>
|
9 |
+
<action>adminhtml/productflow</action>
|
10 |
+
</productflow>
|
11 |
+
</children>
|
12 |
+
</catalog>
|
13 |
+
</menu>
|
14 |
+
<layout>
|
15 |
+
<updates>
|
16 |
+
<productfeedgenerator>
|
17 |
+
<file>productfeedgenerator.xml</file>
|
18 |
+
</productfeedgenerator>
|
19 |
+
</updates>
|
20 |
+
</layout>
|
21 |
+
<acl>
|
22 |
+
<resources>
|
23 |
+
<admin translate="title" module="productfeedgenerator">
|
24 |
+
<children>
|
25 |
+
<catalog>
|
26 |
+
<children>
|
27 |
+
<productflow module="productfeedgenerator">
|
28 |
+
<title>Product flow</title>
|
29 |
+
</productflow>
|
30 |
+
</children>
|
31 |
+
</catalog>
|
32 |
+
</children>
|
33 |
+
</admin>
|
34 |
+
</resources>
|
35 |
+
</acl>
|
36 |
+
</config>
|
app/code/local/Atol/Productfeedgenerator/etc/config.xml
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Atol_Productfeedgenerator>
|
5 |
+
<version>0.1.0</version>
|
6 |
+
</Atol_Productfeedgenerator>
|
7 |
+
</modules>
|
8 |
+
<frontend>
|
9 |
+
<routers>
|
10 |
+
<productfeedgenerator>
|
11 |
+
<use>standard</use>
|
12 |
+
<args>
|
13 |
+
<module>Atol_Productfeedgenerator</module>
|
14 |
+
<frontName>productfeedgenerator_front</frontName>
|
15 |
+
</args>
|
16 |
+
</productfeedgenerator>
|
17 |
+
</routers>
|
18 |
+
<layout>
|
19 |
+
<updates>
|
20 |
+
<productfeedgenerator module="Atol_Productfeedgenerator">
|
21 |
+
<file>productfeedgenerator.xml</file>
|
22 |
+
</productfeedgenerator>
|
23 |
+
</updates>
|
24 |
+
</layout>
|
25 |
+
<translate>
|
26 |
+
<modules>
|
27 |
+
<Atol_Productfeedgenerator>
|
28 |
+
<files>
|
29 |
+
<default>Atol_Productfeedgenerator.csv</default>
|
30 |
+
</files>
|
31 |
+
</Atol_Productfeedgenerator>
|
32 |
+
</modules>
|
33 |
+
</translate>
|
34 |
+
</frontend>
|
35 |
+
<admin>
|
36 |
+
<routers>
|
37 |
+
<adminhtml>
|
38 |
+
<args>
|
39 |
+
<modules>
|
40 |
+
<atol_productfeedgenerator before="Mage_Adminhtml">Atol_Productfeedgenerator_Adminhtml</atol_productfeedgenerator>
|
41 |
+
</modules>
|
42 |
+
</args>
|
43 |
+
</adminhtml>
|
44 |
+
</routers>
|
45 |
+
</admin>
|
46 |
+
<adminhtml>
|
47 |
+
<layout>
|
48 |
+
<updates>
|
49 |
+
<productfeedgenerator>
|
50 |
+
<file>productfeedgenerator.xml</file>
|
51 |
+
</productfeedgenerator>
|
52 |
+
</updates>
|
53 |
+
</layout>
|
54 |
+
|
55 |
+
<translate>
|
56 |
+
<modules>
|
57 |
+
<Atol_Productfeedgenerator>
|
58 |
+
<files>
|
59 |
+
<default>Atol_Productfeedgenerator.csv</default>
|
60 |
+
</files>
|
61 |
+
</Atol_Productfeedgenerator>
|
62 |
+
</modules>
|
63 |
+
</translate>
|
64 |
+
</adminhtml>
|
65 |
+
<global>
|
66 |
+
<blocks>
|
67 |
+
<productfeedgenerator>
|
68 |
+
<class>Atol_Productfeedgenerator_Block</class>
|
69 |
+
</productfeedgenerator>
|
70 |
+
</blocks>
|
71 |
+
<models>
|
72 |
+
<productfeedgenerator>
|
73 |
+
<class>Atol_Productfeedgenerator_Model</class>
|
74 |
+
<resourceModel>productfeedgenerator_mysql4</resourceModel>
|
75 |
+
</productfeedgenerator>
|
76 |
+
<productfeedgenerator_mysql4>
|
77 |
+
<class>Atol_Productfeedgenerator_Model_Mysql4</class>
|
78 |
+
<entities>
|
79 |
+
<productflow>
|
80 |
+
<table>productflow</table>
|
81 |
+
</productflow>
|
82 |
+
</entities>
|
83 |
+
</productfeedgenerator_mysql4>
|
84 |
+
</models>
|
85 |
+
<resources>
|
86 |
+
<productfeedgenerator_setup>
|
87 |
+
<setup>
|
88 |
+
<module>Atol_Productfeedgenerator</module>
|
89 |
+
<class>Mage_Customer_Model_Entity_Setup</class>
|
90 |
+
</setup>
|
91 |
+
<connection>
|
92 |
+
<use>core_setup</use>
|
93 |
+
</connection>
|
94 |
+
</productfeedgenerator_setup>
|
95 |
+
<productfeedgenerator_write>
|
96 |
+
<connection>
|
97 |
+
<use>core_write</use>
|
98 |
+
</connection>
|
99 |
+
</productfeedgenerator_write>
|
100 |
+
<productfeedgenerator_read>
|
101 |
+
<connection>
|
102 |
+
<use>core_read</use>
|
103 |
+
</connection>
|
104 |
+
</productfeedgenerator_read>
|
105 |
+
</resources>
|
106 |
+
<helpers>
|
107 |
+
<productfeedgenerator>
|
108 |
+
<class>Atol_Productfeedgenerator_Helper</class>
|
109 |
+
</productfeedgenerator>
|
110 |
+
</helpers>
|
111 |
+
</global>
|
112 |
+
<default>
|
113 |
+
<rss>
|
114 |
+
<productfeedgenerator>
|
115 |
+
<active>0</active>
|
116 |
+
</productfeedgenerator>
|
117 |
+
</rss>
|
118 |
+
</default>
|
119 |
+
</config>
|
app/code/local/Atol/Productfeedgenerator/etc/system.xml
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/**
|
4 |
+
* Magento
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/afl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* DISCLAIMER
|
17 |
+
*
|
18 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
19 |
+
* versions in the future. If you wish to customize Magento for your
|
20 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
21 |
+
*
|
22 |
+
* @category Mage
|
23 |
+
* @package Mage_Rss
|
24 |
+
* @copyright Copyright (c) 2011 Magento Inc. (http://www.magentocommerce.com)
|
25 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
26 |
+
*/
|
27 |
+
-->
|
28 |
+
<config>
|
29 |
+
<sections>
|
30 |
+
<rss translate="label" module="rss">
|
31 |
+
<groups>
|
32 |
+
<productfeedgenerator translate="label">
|
33 |
+
<label>Generic RSS for products</label>
|
34 |
+
<frontend_type>text</frontend_type>
|
35 |
+
<sort_order>5</sort_order>
|
36 |
+
<show_in_default>1</show_in_default>
|
37 |
+
<show_in_website>1</show_in_website>
|
38 |
+
<show_in_store>1</show_in_store>
|
39 |
+
<fields>
|
40 |
+
<active translate="label">
|
41 |
+
<label>Enable RSS</label>
|
42 |
+
<frontend_type>select</frontend_type>
|
43 |
+
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
44 |
+
<sort_order>1</sort_order>
|
45 |
+
<show_in_default>1</show_in_default>
|
46 |
+
<show_in_website>1</show_in_website>
|
47 |
+
<show_in_store>1</show_in_store>
|
48 |
+
</active>
|
49 |
+
</fields>
|
50 |
+
</productfeedgenerator>
|
51 |
+
</groups>
|
52 |
+
</rss>
|
53 |
+
</sections>
|
54 |
+
</config>
|
app/code/local/Atol/Productfeedgenerator/etc/widget.xml
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<widgets>
|
3 |
+
<frontdisplay type="productfeedgenerator/frontdisplay">
|
4 |
+
<name>Flux de Produits</name>
|
5 |
+
<description type="desc">Flux de produits configurable</description>
|
6 |
+
<parameters>
|
7 |
+
<flux_id>
|
8 |
+
<label>Link Options</label>
|
9 |
+
<visible>1</visible>
|
10 |
+
<required>1</required>
|
11 |
+
<type>select</type>
|
12 |
+
<source_model>productfeedgenerator/system_config_source_productflowtype</source_model>
|
13 |
+
</flux_id>
|
14 |
+
<columns>
|
15 |
+
<required>0</required>
|
16 |
+
<visible>1</visible>
|
17 |
+
<label>Nombre de colonnes</label>
|
18 |
+
<type>select</type>
|
19 |
+
<values>
|
20 |
+
<list translate="label">
|
21 |
+
<value>3</value>
|
22 |
+
<label>3</label>
|
23 |
+
</list>
|
24 |
+
<list translate="label">
|
25 |
+
<value>4</value>
|
26 |
+
<label>4</label>
|
27 |
+
</list>
|
28 |
+
<default translate="label">
|
29 |
+
<value>5</value>
|
30 |
+
<label>5</label>
|
31 |
+
</default>
|
32 |
+
</values>
|
33 |
+
</columns>
|
34 |
+
</parameters>
|
35 |
+
</frontdisplay>
|
36 |
+
</widgets>
|
app/code/local/Atol/Productfeedgenerator/sql/productfeedgenerator_setup/mysql4-install-0.1.0.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @category Atol
|
4 |
+
* @package Atol_Productfeedgenerator
|
5 |
+
* @copyright Copyright (c) 2013 Atol C&D (http://www.atolcd.com)
|
6 |
+
*/
|
7 |
+
|
8 |
+
$this->startSetup();
|
9 |
+
|
10 |
+
$this->run("
|
11 |
+
DROP TABLE IF EXISTS {$this->getTable('productflow')};
|
12 |
+
CREATE TABLE {$this->getTable('productflow')} (
|
13 |
+
`flow_id` int(11) unsigned NOT NULL auto_increment,
|
14 |
+
`title` varchar(255) NOT NULL default '',
|
15 |
+
`note` text,
|
16 |
+
`json_data` text,
|
17 |
+
`created_at` datetime NOT NULL,
|
18 |
+
`updated_at` datetime NOT NULL,
|
19 |
+
`deleted_at` datetime,
|
20 |
+
PRIMARY KEY (`flow_id`)
|
21 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
22 |
+
");
|
23 |
+
|
24 |
+
$this->endSetup();
|
app/etc/modules/Atol_Productfeedgenerator.xml
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Atol_Productfeedgenerator>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>local</codePool>
|
7 |
+
<depends>
|
8 |
+
<Mage_Cms />
|
9 |
+
</depends>
|
10 |
+
</Atol_Productfeedgenerator>
|
11 |
+
</modules>
|
12 |
+
</config>
|
app/locale/fr_FR/Atol_Productfeedgenerator.csv
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"Add an attribute to filter","Ajouter un attribut à filtrer"
|
2 |
+
"all of them operator","égal à toutes les valeurs sélectionnées"
|
3 |
+
"asc","Tri ascendant"
|
4 |
+
"at least one of them operator","au minimum égal à une des valeurs sélectionnées"
|
5 |
+
"Attribute filters","Filtre sur les attributs"
|
6 |
+
"Attribute list","Liste des attributs filtrés"
|
7 |
+
"Category filters","Filtre sur les catégories"
|
8 |
+
"Collection management","Gestion de la liste"
|
9 |
+
"Comment :","Commentaires :"
|
10 |
+
"desc","Tri descendant"
|
11 |
+
"equal operator","égal à"
|
12 |
+
"Filter only discounted products ?","Filtre sur les produits en promotion"
|
13 |
+
"Filter only new products ?","Filtre sur les nouveaux produits"
|
14 |
+
"General informations","Informations générales"
|
15 |
+
"Generic RSS for products","RSS des flux de produits"
|
16 |
+
"Invalid data","Données invalides"
|
17 |
+
"Limit :","Limite :"
|
18 |
+
"Name :","Nom :"
|
19 |
+
"News from date","Date de début de nouvauté"
|
20 |
+
"News to date","Date de fin de nouvauté"
|
21 |
+
"No order","Pas d'ordre"
|
22 |
+
"not equal operator","différent de"
|
23 |
+
"or operator","égal à une des valeurs sélectionnées"
|
24 |
+
"Order %s :","Tri n°%s :"
|
25 |
+
"Other filters","Filtres spéciaux"
|
26 |
+
"Product flow","Flux de produits"
|
27 |
+
"Product flow edition","Edition d'un flux de produits"
|
28 |
+
"Product flow management","Gestion des flux de produits"
|
29 |
+
"Products list from %s","Liste de produits depuis %s"
|
30 |
+
"Server error","Erreur interne du serveur"
|
31 |
+
"The product flow does not exist","Le flux de produits recherché n'existe pas"
|
32 |
+
"The product flow was successfully deleted","Le flux de produits a été supprimé avec succès."
|
33 |
+
"The product flow was successfully updated","Le flux de produits a été mis à jour avec succès."
|
js/jquery/jquery-1.4.4.min.js
ADDED
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* jQuery JavaScript Library v1.4.4
|
3 |
+
* http://jquery.com/
|
4 |
+
*
|
5 |
+
* Copyright 2010, John Resig
|
6 |
+
* Dual licensed under the MIT or GPL Version 2 licenses.
|
7 |
+
* http://jquery.org/license
|
8 |
+
*
|
9 |
+
* Includes Sizzle.js
|
10 |
+
* http://sizzlejs.com/
|
11 |
+
* Copyright 2010, The Dojo Foundation
|
12 |
+
* Released under the MIT, BSD, and GPL Licenses.
|
13 |
+
*
|
14 |
+
* Date: Thu Nov 11 19:04:53 2010 -0500
|
15 |
+
*/
|
16 |
+
(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
|
17 |
+
h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
|
18 |
+
h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
|
19 |
+
"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
|
20 |
+
e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
|
21 |
+
"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
|
22 |
+
a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
|
23 |
+
C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
|
24 |
+
s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
|
25 |
+
j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
|
26 |
+
toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
|
27 |
+
-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
|
28 |
+
if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
|
29 |
+
if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
|
30 |
+
b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
|
31 |
+
!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
|
32 |
+
l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
|
33 |
+
z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
|
34 |
+
s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
|
35 |
+
s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
|
36 |
+
[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
|
37 |
+
false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
|
38 |
+
k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
|
39 |
+
scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
|
40 |
+
false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
|
41 |
+
1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
|
42 |
+
"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
|
43 |
+
c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
|
44 |
+
else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
|
45 |
+
a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
|
46 |
+
c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
|
47 |
+
a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
|
48 |
+
colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
|
49 |
+
1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
|
50 |
+
l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
|
51 |
+
"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
|
52 |
+
if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
|
53 |
+
a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
|
54 |
+
attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
|
55 |
+
b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
|
56 |
+
c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
|
57 |
+
arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
|
58 |
+
d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
|
59 |
+
c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
|
60 |
+
w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
|
61 |
+
8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
|
62 |
+
"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
|
63 |
+
d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
64 |
+
fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
|
65 |
+
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
|
66 |
+
Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
|
67 |
+
c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
|
68 |
+
var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
|
69 |
+
"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
|
70 |
+
xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
|
71 |
+
B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
|
72 |
+
"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
|
73 |
+
0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
|
74 |
+
a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
|
75 |
+
1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
|
76 |
+
"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
|
77 |
+
c.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".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
|
78 |
+
(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
|
79 |
+
[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
|
80 |
+
break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
|
81 |
+
q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
|
82 |
+
l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
|
83 |
+
return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
|
84 |
+
B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
|
85 |
+
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
|
86 |
+
i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
|
87 |
+
i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
|
88 |
+
"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
|
89 |
+
m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
|
90 |
+
true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
|
91 |
+
g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
|
92 |
+
0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
|
93 |
+
"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
|
94 |
+
i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
|
95 |
+
if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
|
96 |
+
g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
|
97 |
+
for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
|
98 |
+
i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
|
99 |
+
n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
|
100 |
+
function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
|
101 |
+
p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
|
102 |
+
t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
|
103 |
+
function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
|
104 |
+
c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
|
105 |
+
not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
|
106 |
+
h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
|
107 |
+
c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
|
108 |
+
2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
|
109 |
+
b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
|
110 |
+
e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
|
111 |
+
"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
|
112 |
+
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
|
113 |
+
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
|
114 |
+
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
|
115 |
+
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
|
116 |
+
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
|
117 |
+
else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
|
118 |
+
c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
|
119 |
+
b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
|
120 |
+
this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
|
121 |
+
prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
|
122 |
+
b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
|
123 |
+
1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
|
124 |
+
d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
|
125 |
+
jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
|
126 |
+
zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
|
127 |
+
h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
|
128 |
+
if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
|
129 |
+
d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
|
130 |
+
e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
|
131 |
+
ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
|
132 |
+
"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
|
133 |
+
!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
|
134 |
+
getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
|
135 |
+
script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
|
136 |
+
!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
|
137 |
+
false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
|
138 |
+
A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
|
139 |
+
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
|
140 |
+
c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
|
141 |
+
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
|
142 |
+
encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
|
143 |
+
[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
|
144 |
+
e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
|
145 |
+
if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
|
146 |
+
3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
|
147 |
+
d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
|
148 |
+
d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
|
149 |
+
"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
|
150 |
+
1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
|
151 |
+
d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
|
152 |
+
Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
|
153 |
+
var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
|
154 |
+
this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
|
155 |
+
this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
|
156 |
+
c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
|
157 |
+
b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
|
158 |
+
h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
|
159 |
+
for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
|
160 |
+
parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
|
161 |
+
height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
|
162 |
+
f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
|
163 |
+
"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
|
164 |
+
e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
|
165 |
+
c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
|
166 |
+
c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
|
167 |
+
b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
|
168 |
+
jQuery.noConflict();
|
package.xml
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Atol_Productfeedgenerator</name>
|
4 |
+
<version>1.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license>GNU General Public License (GPL)</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Create custom product collections and display them through a widget or create a rss feed.</summary>
|
10 |
+
<description>You want to create product collections based on their categories , some of their attributes , perform sorting display, all three at once ? This extension is made for you! 
|
11 |
+
The setup is easy and user friendly. 
|
12 |
+
First you enter a title and a description for your feed. 
|
13 |
+
The rest of the job is simply to select the desired filters : categories , attributes, special filters.
|
14 |
+
You can even sort the results.
|
15 |
+
Couldn't be easier!
|
16 |
+
<br /><br />
|
17 |
+
Managing your web store becomes a lot easier with this extension. Using the product feed generator with its integrated widget you can display a custom collection of products filtered attributes as :
|
18 |
+
<br /><br />
|
19 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- categories<br />
|
20 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- attributes<br />
|
21 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- promotions<br />
|
22 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- recently added<br />
|
23 |
+
<br />
|
24 |
+
You can use several filter at once.
|
25 |
+
<br /><br />
|
26 |
+
The included widget enables you to add this product collection to any cms page.
|
27 |
+
<br /><br />
|
28 |
+
Want to know more about our company check out <a href="http://atolcd.com">www.atolcd.com</a>
|
29 |
+
<hr />
|
30 |
+
De façon native Magento vous limite quant aux listes de produits à afficher en Frontend ? C'est effectivement un fait. Avec cette extension vous pouvez désormais choisir des critères bien plus complets et proposer des flux RSS de produits ciblés. Générer des pages listant des produits devient un jeu d'enfant.
|
31 |
+
<br /><br />
|
32 |
+
L'animation d'une boutique en ligne se trouve simplifiée grâce à cette extension. En utilisant le « Product Feed Generator » (production de flux de produits) + un widget intégré dans une page CMS (pour rappel le widget est une fonction native dans Magento) vous pouvez afficher, sous forme de grille ou de liste, des produits en fonction de critères précis qui peuvent être :
|
33 |
+
<br /><br />
|
34 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- des catégories d'appartenance,<br />
|
35 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- des attributs,<br />
|
36 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- des produits en promotion (oui/non),<br />
|
37 |
+
&nbsp;&nbsp;&nbsp;&nbsp;- des produits nouveaux (oui/non).<br />
|
38 |
+
<br />
|
39 |
+
L'imbrication de règles et de critères permet d'aboutir à la liste souhaitée.
|
40 |
+
<br /><br />
|
41 |
+
L'utilisation du système de widget vous permet d'ajouter facilement votre flux dans une page CMS.
|
42 |
+
<br /><br />
|
43 |
+
Pour en savoir plus sur notre société, n'hésitez pas à consulter <a href="http://www.atolcd.com">www.atolcd.com</a>
|
44 |
+

|
45 |
+
</description>
|
46 |
+
<notes>first release</notes>
|
47 |
+
<authors><author><name>AtolCD</name><user>AtolCD</user><email>magento@atolcd.com</email></author><author><name>Antoine Trapet</name><user>atr</user><email>atr@atolcd.com</email></author><author><name>Aurélien Ponçon</name><user>apo</user><email>apo@atolcd.com</email></author><author><name>Antoine Chevaldonné</name><user>ach</user><email>ach@atolcd.com</email></author></authors>
|
48 |
+
<date>2016-03-10</date>
|
49 |
+
<time>10:51:45</time>
|
50 |
+
<contents><target name="magelocal"><dir name="Atol"><dir name="Productfeedgenerator"><dir name="Block"><dir name="Adminhtml"><dir name="Productflow"><dir name="Edit"><file name="Categories.php" hash="1dab18a40a30827f9b1ab3001f04d13a"/></dir><file name="Edit.php" hash="000b7dc9137a5e92e7b503ff13713006"/><file name="Grid.php" hash="cc7def146fe698de4249b252eeb3c63e"/><dir name="Renderer"><file name="Linkscolumn.php" hash="d831799203369be2586698559aabf161"/></dir></dir><file name="Productflow.php" hash="827fd19128b6f6b03febbbb5387be50f"/></dir><file name="Frontdisplay.php" hash="ab7997b46c7391e0a0e5b24c6070beb8"/><dir name="Productflow"><file name="Rss.php" hash="a4caa2e3ac07511634be1bc5ee0267da"/></dir></dir><dir name="Helper"><file name="Data.php" hash="7795364cf1483083b9594d95c34bc660"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Productflow"><file name="Collection.php" hash="0d8056368d6c4599a00e3b3dd4f69722"/></dir><file name="Productflow.php" hash="e68259670802fa7f84571b19b0a030cb"/></dir><file name="Productflow.php" hash="aa0fb13c57acb92c3b3855dd6b115e1c"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Orderbytype.php" hash="1a390fda30c5c9d1ca9f5a8c2bf1bb6f"/><file name="Productflowtype.php" hash="967ca8318947473e696612ceb8b9f2c6"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ProductflowController.php" hash="787a5ec0239348658787be719de4574b"/></dir><file name="IndexController.php" hash="39e2e2cf9354c35b32e5a738840b6d87"/><file name="ProductflowController.php" hash="5125ac0325a8f2fc62deb8c89d097111"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c8d2bb91591aae5a80941ef44e19dcc9"/><file name="config.xml" hash="8c2136b71a9c5e306fbf815455a5b443"/><file name="system.xml" hash="511c6ea6cbd55527dfc278b83a44eccb"/><file name="widget.xml" hash="b29e594a7912a2244c1d6fd01912d1c0"/></dir><dir name="sql"><dir name="productfeedgenerator_setup"><file name="mysql4-install-0.1.0.php" hash="178841fb1c45d4fd7e70abc5054ad0ce"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><file name="layout.productfeedgenerator.xml" hash=""/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Atol_Productfeedgenerator.xml" hash="21350607b70c31828328ba4e41f8bd04"/></dir></target><target name="magelocale"><dir name="fr_FR"><file name="Atol_Productfeedgenerator.csv" hash="9e1bfbad6d620a09811cdbd9c1a5abfb"/></dir></target><target name="mageweb"><dir name="js"><dir name="jquery"><file name="jquery-1.4.4.min.js" hash="eef9a6a171184899b08ebd61f1a03425"/></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="productfeedgenerator"><file name="styles.css" hash="8a550d9db1fcf37915a96e67919de9da"/></dir></dir></dir></dir></dir></target></contents>
|
51 |
+
<compatible/>
|
52 |
+
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
53 |
+
</package>
|
skin/adminhtml/default/default/css/productfeedgenerator/styles.css
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.entry-edit fieldset .input_section {
|
2 |
+
display: block;
|
3 |
+
margin-bottom: 10px;
|
4 |
+
margin-top: 10px;
|
5 |
+
}
|
6 |
+
|
7 |
+
.entry-edit fieldset .input_section label {
|
8 |
+
display: inline-block;
|
9 |
+
position:relative\9;
|
10 |
+
zoom:1\9;
|
11 |
+
width: 200px;
|
12 |
+
}
|
13 |
+
|
14 |
+
.entry-edit fieldset .input_section select, .entry-edit fieldset .input_section input[type="text"], .entry-edit fieldset .input_section textarea {
|
15 |
+
width: 250px;
|
16 |
+
-moz-box-sizing: border-box;
|
17 |
+
-ms-box-sizing: border-box;
|
18 |
+
-webkit-box-sizing: border-box;
|
19 |
+
box-sizing: border-box;
|
20 |
+
}
|
21 |
+
|
22 |
+
.entry-edit fieldset .input_section input[type="radio"], .entry-edit fieldset .input_section input[type="checkbox"] {
|
23 |
+
margin: 5px;
|
24 |
+
}
|
25 |
+
|
26 |
+
.entry-edit fieldset .input_section #productflow_order_direction, .entry-edit fieldset .input_section .attribute_item.filtered .value {
|
27 |
+
width: 100px;
|
28 |
+
margin-left: 20px;
|
29 |
+
}
|
30 |
+
|
31 |
+
.entry-edit fieldset .input_section button {
|
32 |
+
margin-left: 20px;
|
33 |
+
}
|
34 |
+
|
35 |
+
.entry-edit fieldset .input_section .attribute_item.filtered {
|
36 |
+
margin-bottom: 10px;
|
37 |
+
margin-top: 10px;
|
38 |
+
}
|
39 |
+
|
40 |
+
.entry-edit fieldset .input_section select.direction {
|
41 |
+
margin-left: 10px;
|
42 |
+
width: 150px;
|
43 |
+
}
|
44 |
+
|
45 |
+
#productfeedgeneratorGrid_table a.rss_link {
|
46 |
+
background-image: url("../../../../../frontend/default/default/images/i_rss-big.png");
|
47 |
+
display: block;
|
48 |
+
height: 20px;
|
49 |
+
width: 20px;
|
50 |
+
}
|