Version Notes
- ToTheGame Feed Import Implement and Ready to Use
Download this release
Release Info
Developer | CyberNetikz |
Extension | Cybernetikz_ToTheGame |
Version | 0.1.0 |
Comparing to | |
See all releases |
Version 0.1.0
- app/code/local/Cybernetikz/ToTheGame/Block/Adminhtml/System/Config/Fieldset/Hint.php +24 -0
- app/code/local/Cybernetikz/ToTheGame/Helper/Data.php +49 -0
- app/code/local/Cybernetikz/ToTheGame/Model/Resource/Mysql4/Setup.php +12 -0
- app/code/local/Cybernetikz/ToTheGame/controllers/Adminhtml/ToTheGameController.php +810 -0
- app/code/local/Cybernetikz/ToTheGame/etc/adminhtml.xml +41 -0
- app/code/local/Cybernetikz/ToTheGame/etc/config.xml +95 -0
- app/code/local/Cybernetikz/ToTheGame/etc/system.xml +63 -0
- app/code/local/Cybernetikz/ToTheGame/sql/tothegame_setup/mysql4-install-0.1.0.php +146 -0
- app/design/adminhtml/default/default/layout/cybernetikz_tothegame.xml +8 -0
- app/design/adminhtml/default/default/template/cybernetikz/tothegame/gameimport.phtml +39 -0
- app/design/adminhtml/default/default/template/cybernetikz/tothegame/system/config/fieldset/hint.phtml +6 -0
- app/etc/modules/Cybernetikz_ToTheGame.xml +9 -0
- package.xml +19 -0
- skin/adminhtml/default/default/cybernetikz/tothegame/images/indicator.gif +0 -0
- skin/adminhtml/default/default/cybernetikz/tothegame/js/jquery.js +32 -0
app/code/local/Cybernetikz/ToTheGame/Block/Adminhtml/System/Config/Fieldset/Hint.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Renderer for ToTheGame Settings in System Configuration
|
5 |
+
* Author : Cybernetikz
|
6 |
+
* Author Email: info@cybernetikz.com
|
7 |
+
* Blog : http://blog.cybernetikz.com
|
8 |
+
* Website : http://www.cybernetikz.com
|
9 |
+
*/
|
10 |
+
|
11 |
+
class Cybernetikz_ToTheGame_Block_Adminhtml_System_Config_Fieldset_Hint extends Mage_Adminhtml_Block_Abstract implements Varien_Data_Form_Element_Renderer_Interface {
|
12 |
+
|
13 |
+
protected $_template = 'cybernetikz/tothegame/system/config/fieldset/hint.phtml';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Render fieldset html
|
17 |
+
*
|
18 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
19 |
+
* @return string
|
20 |
+
*/
|
21 |
+
public function render(Varien_Data_Form_Element_Abstract $element) {
|
22 |
+
return $this->toHtml();
|
23 |
+
}
|
24 |
+
}
|
app/code/local/Cybernetikz/ToTheGame/Helper/Data.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Author : Cybernetikz
|
4 |
+
* Author Email: info@cybernetikz.com
|
5 |
+
* Blog : http://blog.cybernetikz.com
|
6 |
+
* Website : http://www.cybernetikz.com
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Cybernetikz_ToTheGame_Helper_Data extends Mage_Core_Helper_Abstract
|
10 |
+
{
|
11 |
+
/* ToTheGame Settings */
|
12 |
+
const XML_SUBSCRIBER_ID = 'tothegame/setting/subscriberid';
|
13 |
+
const XML_IMPORT_CACHE_TTL = 'tothegame/setting/importcachettl';
|
14 |
+
|
15 |
+
public function getSubscriberId($store = null)
|
16 |
+
{
|
17 |
+
return Mage::getStoreConfig(self::XML_SUBSCRIBER_ID, $store);
|
18 |
+
}
|
19 |
+
|
20 |
+
public function getImportCacheTTL($store = null)
|
21 |
+
{
|
22 |
+
return Mage::getStoreConfig(self::XML_IMPORT_CACHE_TTL, $store);
|
23 |
+
}
|
24 |
+
|
25 |
+
public function getExtensionName(){
|
26 |
+
return "ToTheGame Feeder";
|
27 |
+
}
|
28 |
+
|
29 |
+
public function getCheckConfig(){
|
30 |
+
|
31 |
+
$extension_name = $this->getExtensionName();
|
32 |
+
|
33 |
+
if($this->getSubscriberId()=="" || $this->getImportCacheTTL()==""){
|
34 |
+
Mage::getSingleton('adminhtml/session')->addError($extension_name." is not configured. You need to configure before use the extension.");
|
35 |
+
$this->setRedirectUrl('adminhtml/system_config/edit/section/tothegame'); //Redirect to Extension System Configuration
|
36 |
+
}
|
37 |
+
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
public function setRedirectUrl($redirect_url){
|
42 |
+
$url = Mage::helper("adminhtml")->getUrl($redirect_url);
|
43 |
+
$response = Mage::app()->getFrontController()->getResponse();
|
44 |
+
$response->setRedirect($url);
|
45 |
+
$response->sendResponse();
|
46 |
+
exit;
|
47 |
+
}
|
48 |
+
|
49 |
+
}
|
app/code/local/Cybernetikz/ToTheGame/Model/Resource/Mysql4/Setup.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Author : Cybernetikz
|
4 |
+
* Author Email: info@cybernetikz.com
|
5 |
+
* Blog : http://blog.cybernetikz.com
|
6 |
+
* Website : http://www.cybernetikz.com
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Cybernetikz_ToTheGame_Model_Resource_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup{
|
10 |
+
|
11 |
+
}
|
12 |
+
?>
|
app/code/local/Cybernetikz/ToTheGame/controllers/Adminhtml/ToTheGameController.php
ADDED
@@ -0,0 +1,810 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Author : Cybernetikz
|
4 |
+
* Author Email: info@cybernetikz.com
|
5 |
+
* Blog : http://blog.cybernetikz.com
|
6 |
+
* Website : http://www.cybernetikz.com
|
7 |
+
*/
|
8 |
+
|
9 |
+
class Cybernetikz_ToTheGame_Adminhtml_ToTheGameController extends Mage_Adminhtml_Controller_Action
|
10 |
+
{
|
11 |
+
|
12 |
+
protected $_startTime;
|
13 |
+
protected $gameCount = 0;
|
14 |
+
|
15 |
+
/*
|
16 |
+
Diclar destruct
|
17 |
+
*/
|
18 |
+
/*function __destruct(){
|
19 |
+
$this->_PhpShutdown();
|
20 |
+
}*/
|
21 |
+
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Init actions
|
25 |
+
*
|
26 |
+
* @return Mage_Adminhtml_ToTheGameController
|
27 |
+
*/
|
28 |
+
protected function _initAction()
|
29 |
+
{
|
30 |
+
// load layout, set active menu and breadcrumbs
|
31 |
+
$this->loadLayout()
|
32 |
+
->_setActiveMenu('catalog/system_tothegame')
|
33 |
+
->_addBreadcrumb(
|
34 |
+
Mage::helper('catalog')->__('Catalog'),
|
35 |
+
Mage::helper('catalog')->__('Catalog'))
|
36 |
+
->_addBreadcrumb(
|
37 |
+
Mage::helper('cybernetikz_tothegame')->__('ToTheGame Feed Import'),
|
38 |
+
Mage::helper('cybernetikz_tothegame')->__('ToTheGame Import'))
|
39 |
+
;
|
40 |
+
return $this;
|
41 |
+
}
|
42 |
+
|
43 |
+
/*
|
44 |
+
Game Import Manage
|
45 |
+
*/
|
46 |
+
public function gameimportAction()
|
47 |
+
{
|
48 |
+
Mage::helper('cybernetikz_tothegame')->getCheckConfig(); // Check Configuration
|
49 |
+
|
50 |
+
$this->_title($this->__('Catalog'))->_title($this->__('ToTheGame Feed Import'));
|
51 |
+
|
52 |
+
$this->_initAction()->renderLayout();
|
53 |
+
}
|
54 |
+
|
55 |
+
/*
|
56 |
+
Single ToTheGame Feed Import
|
57 |
+
*/
|
58 |
+
public function singlegameimportAction()
|
59 |
+
{
|
60 |
+
|
61 |
+
$this->_startTime = microtime(true);
|
62 |
+
|
63 |
+
set_time_limit(0);
|
64 |
+
|
65 |
+
$req = array('game_id' => 'array');
|
66 |
+
$sent = array();
|
67 |
+
$error = false;
|
68 |
+
|
69 |
+
if (!$this->_ValidateData($_GET, $req, $sent) || $_GET['game_id'][0] == ""){
|
70 |
+
echo "<span style='color:red;'>Error: You need to provide ToTheGame Game ID for the game that needs to be imported.</span><br>";
|
71 |
+
$error = true;
|
72 |
+
}
|
73 |
+
|
74 |
+
if(!$error){
|
75 |
+
$gamesids=explode(",",$sent['game_id'][0]);
|
76 |
+
//print_r($gamesids);exit;
|
77 |
+
|
78 |
+
foreach($gamesids as $gameid){
|
79 |
+
echo 'Getting more info for GameId: ', $gameid, "<br>";
|
80 |
+
$this->importGame($gameid);
|
81 |
+
++$this->gameCount;
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
$this->_PhpShutdown();
|
86 |
+
}
|
87 |
+
|
88 |
+
/*
|
89 |
+
Import Single Game Process
|
90 |
+
*/
|
91 |
+
protected function importGame($gameId) {
|
92 |
+
|
93 |
+
$SUBSCRIBER_ID = Mage::helper('cybernetikz_tothegame')->getSubscriberId(); // Subscriber Id
|
94 |
+
$IMPORT_USE_CACHE = 1;
|
95 |
+
$IMPORT_CACHE_TTL = (Mage::helper('cybernetikz_tothegame')->getImportCacheTTL()*3600); // # of seconds when the cache is set to expire
|
96 |
+
$gameProducttId = "";
|
97 |
+
|
98 |
+
$gameUrl = 'http://export.tothegame.com/gamefeeder/v3/gamelookup.aspx?&subscriberid='.$SUBSCRIBER_ID.'&gameid='.$gameId;
|
99 |
+
|
100 |
+
$xml = new DOMDocument(); // Create new DOM object
|
101 |
+
|
102 |
+
$_product = Mage::getModel('catalog/product')->loadByAttribute('game_id', $gameId);
|
103 |
+
//print_r($_product);exit;
|
104 |
+
|
105 |
+
if(!empty($_product)){
|
106 |
+
$gameProducttId = (int)$_product->getId();
|
107 |
+
}
|
108 |
+
//echo $gameProducttId; exit;
|
109 |
+
|
110 |
+
try {
|
111 |
+
|
112 |
+
// Create Feed Upload Directtory
|
113 |
+
$upload_gamefeed = Mage::getBaseDir('media') . DS .'gamefeed';
|
114 |
+
if (!is_dir($upload_gamefeed)) {
|
115 |
+
if (!mkdir($upload_gamefeed, 0777, true)) {
|
116 |
+
echo "<span style='color:red;'>--Error: Failed to create folders...</span><br>";
|
117 |
+
return;
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
$gamefeed_file_path = $upload_gamefeed. DS .$gameId.".xml";
|
122 |
+
|
123 |
+
if (file_exists($gamefeed_file_path) && $IMPORT_USE_CACHE && time() - filectime($gamefeed_file_path) < $IMPORT_CACHE_TTL) {
|
124 |
+
echo "-- Loading game data from cache<br>";
|
125 |
+
$xml->load($gamefeed_file_path);
|
126 |
+
} else {
|
127 |
+
echo "-- Loading game data from publisher<br>";
|
128 |
+
$xml->load($gameUrl);
|
129 |
+
// cache the file
|
130 |
+
$xml->save($gamefeed_file_path);
|
131 |
+
}
|
132 |
+
|
133 |
+
// Check Product Availability
|
134 |
+
if(!$this->_getElementValue($xml, 'OfficialTitle')){
|
135 |
+
echo "<span style='color:red;'>--Error: Game Id not available. Please check Game Id and try again later.</span><br>";
|
136 |
+
return;
|
137 |
+
}
|
138 |
+
|
139 |
+
$_productData = array(
|
140 |
+
'name' => $this->_getElementValue($xml, 'OfficialTitle'),
|
141 |
+
'description' => '', // Factsheet in the XML, description of the game in english
|
142 |
+
'GameId' => $gameId,
|
143 |
+
'LastUpdated' => $this->_getElementValue($xml, 'LastUpdated'),
|
144 |
+
'EAN' => array(),
|
145 |
+
'PlatformId' => $this->_getElementValue($xml, 'PlatformId'),
|
146 |
+
'Platform' => $this->_getElementValue($xml, 'Platform'),
|
147 |
+
'LogoUrl' => $this->_getElementValue($xml, 'LogoUrl'),
|
148 |
+
'LocalizedTitle' => '',
|
149 |
+
'InGameLanguage' => array(),
|
150 |
+
'Releases' => array(),
|
151 |
+
'Packshots' => array(),
|
152 |
+
'PegiRating' => $this->_getElementValue($xml, 'PegiRating'),
|
153 |
+
'PegiRatingId' => $this->_getElementValue($xml, 'PegiRatingId'),
|
154 |
+
'Publisher' => array(),
|
155 |
+
'DeveloperId' => $this->_getElementValue($xml, 'DeveloperId'),
|
156 |
+
'DeveloperName' => $this->_getElementValue($xml, 'DeveloperName'),
|
157 |
+
'DeveloperHomepage' => $this->_getElementValue($xml, 'DeveloperHomepage'),
|
158 |
+
'MainGame' => $this->_getElementValue($xml, 'MainGame'),
|
159 |
+
'AlsoAvailableOn' => array(), // expansion pack IDs
|
160 |
+
'Editions' => array(), // IDs of the game editions
|
161 |
+
'Videos' => array(),
|
162 |
+
'Screenshots' => array(),
|
163 |
+
'Keywords' => $this->_getElementValue($xml, 'Keywords'),
|
164 |
+
'child_category' => $this->_getElementValue($xml, 'Category')
|
165 |
+
|
166 |
+
);
|
167 |
+
|
168 |
+
//EANs
|
169 |
+
$temp = $xml->getElementsByTagName('EAN');
|
170 |
+
|
171 |
+
if ($temp->length) {
|
172 |
+
foreach ($temp->item(0)->getElementsByTagName('string') as $i => $el)
|
173 |
+
$_productData['EAN'][] = $el->nodeValue;
|
174 |
+
}
|
175 |
+
|
176 |
+
//LocalizedTitle
|
177 |
+
$temp = $xml->getElementsByTagName('LocalizedTitles');
|
178 |
+
|
179 |
+
if ($temp->length) {
|
180 |
+
foreach ($temp->item(0)->childNodes as $i => $el) {
|
181 |
+
if ($el->nodeType == XML_ELEMENT_NODE && strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
182 |
+
$_productData['LocalizedTitle'] = $el->getElementsByTagName('Title')->item(0)->nodeValue;
|
183 |
+
break;
|
184 |
+
}
|
185 |
+
}
|
186 |
+
}
|
187 |
+
|
188 |
+
//InGameLanguage
|
189 |
+
$temp = $xml->getElementsByTagName('InGameLanguage');
|
190 |
+
|
191 |
+
if ($temp->length) {
|
192 |
+
foreach ($temp->item(0)->getElementsByTagName('string') as $i => $el)
|
193 |
+
$_productData['InGameLanguage'][] = $el->nodeValue;
|
194 |
+
}
|
195 |
+
|
196 |
+
//Releases
|
197 |
+
$temp = $xml->getElementsByTagName('Releases');
|
198 |
+
|
199 |
+
if ($temp->length) {
|
200 |
+
foreach ($temp->item(0)->getElementsByTagName('Release') as $i => $el) {
|
201 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
202 |
+
$_productData['Releases'] = array(
|
203 |
+
'ReleaseStatus' => $el->getElementsByTagName('ReleaseStatus')->item(0)->nodeValue,
|
204 |
+
'ReleaseDate' => $el->getElementsByTagName('ReleaseDate')->item(0)->nodeValue
|
205 |
+
);
|
206 |
+
$_productData['ReleaseDate'] = $_productData['Releases']['ReleaseDate'];
|
207 |
+
break;
|
208 |
+
}
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
//PackShots
|
213 |
+
$temp = $xml->getElementsByTagName('Packshots');
|
214 |
+
|
215 |
+
if ($temp->length) {
|
216 |
+
|
217 |
+
foreach ($temp->item(0)->getElementsByTagName('Packshot') as $i => $el) {
|
218 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
219 |
+
|
220 |
+
$_productData['Packshots']['UrlMedium'] = $el->getElementsByTagName('UrlMedium')->item(0)->nodeValue;
|
221 |
+
|
222 |
+
$elem = $el->getElementsByTagName('UrlHiRez');
|
223 |
+
if ($elem->length) {
|
224 |
+
$_productData['Packshots']['UrlHiRez'] = $elem->item(0)->nodeValue;
|
225 |
+
}
|
226 |
+
|
227 |
+
$elem = $el->getElementsByTagName('UrlThumb');
|
228 |
+
if ($elem->length) {
|
229 |
+
$_productData['Packshots']['UrlThumb'] = $elem->item(0)->nodeValue;
|
230 |
+
}
|
231 |
+
|
232 |
+
break;
|
233 |
+
}
|
234 |
+
}
|
235 |
+
}
|
236 |
+
|
237 |
+
//Factsheets
|
238 |
+
$temp = $xml->getElementsByTagName('Factsheets');
|
239 |
+
|
240 |
+
if ($temp->length) {
|
241 |
+
foreach ($temp->item(0)->getElementsByTagName('LocalizedDescription') as $i => $el) {
|
242 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
243 |
+
$_productData['description'] = $el->getElementsByTagName('Description')->item(0)->nodeValue;
|
244 |
+
break;
|
245 |
+
}
|
246 |
+
}
|
247 |
+
}
|
248 |
+
|
249 |
+
//Publisher
|
250 |
+
$temp = $xml->getElementsByTagName('Publishers');
|
251 |
+
|
252 |
+
if ($temp->length) {
|
253 |
+
foreach ($temp->item(0)->getElementsByTagName('Publisher') as $i => $el) {
|
254 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
255 |
+
$_productData['Publisher'] = array(
|
256 |
+
'PublisherId' => $el->getElementsByTagName('PublisherId')->item(0)->nodeValue,
|
257 |
+
'PublisherName' => $el->getElementsByTagName('PublisherName')->item(0)->nodeValue,
|
258 |
+
'PublisherHomepage' => $el->getElementsByTagName('PublisherHomepage')->item(0)->nodeValue
|
259 |
+
);
|
260 |
+
break;
|
261 |
+
}
|
262 |
+
}
|
263 |
+
}
|
264 |
+
|
265 |
+
//AlsoAvailableOn
|
266 |
+
//TODO maybe find and prepare the products that are related for easier fetching later?
|
267 |
+
$temp = $xml->getElementsByTagName('AlsoAvailableOn');
|
268 |
+
|
269 |
+
if ($temp->length) {
|
270 |
+
foreach ($temp->item(0)->getElementsByTagName('int') as $i => $el)
|
271 |
+
$_productData['AlsoAvailableOn'][] = $el->nodeValue;
|
272 |
+
}
|
273 |
+
|
274 |
+
//Editions
|
275 |
+
$temp = $xml->getElementsByTagName('Editions');
|
276 |
+
|
277 |
+
if ($temp->length) {
|
278 |
+
foreach ($temp->item(0)->getElementsByTagName('int') as $i => $el)
|
279 |
+
$_productData['Editions'][] = $el->nodeValue;
|
280 |
+
}
|
281 |
+
|
282 |
+
//Videos
|
283 |
+
$temp = $xml->getElementsByTagName('Videos');
|
284 |
+
|
285 |
+
if ($temp->length) {
|
286 |
+
|
287 |
+
foreach ($temp->item(0)->getElementsByTagName('Video') as $i => $el) {
|
288 |
+
$v = array(
|
289 |
+
'VideoId' => $el->getElementsByTagName('VideoId')->item(0)->nodeValue,
|
290 |
+
'Url' => $el->getElementsByTagName('Url')->item(0)->nodeValue,
|
291 |
+
'Title' => $el->getElementsByTagName('Title')->item(0)->nodeValue,
|
292 |
+
'AgeWarning' => $el->getElementsByTagName('AgeWarning')->item(0)->nodeValue,
|
293 |
+
'Timestamp' => $el->getElementsByTagName('Timestamp')->item(0)->nodeValue,
|
294 |
+
'PreviewFrameUrl' => $el->getElementsByTagName('PreviewFrameUrl')->item(0)->nodeValue
|
295 |
+
);
|
296 |
+
|
297 |
+
$_productData['Videos'][] = $v;
|
298 |
+
}
|
299 |
+
}
|
300 |
+
|
301 |
+
//Screenshots
|
302 |
+
$temp = $xml->getElementsByTagName('Screenshots');
|
303 |
+
|
304 |
+
if ($temp->length) {
|
305 |
+
|
306 |
+
foreach ($temp->item(0)->getElementsByTagName('Screenshot') as $i => $el) {
|
307 |
+
$s = array(
|
308 |
+
'UrlLarge' => $el->getElementsByTagName('UrlLarge')->item(0)->nodeValue,
|
309 |
+
'UrlThumb' => $el->getElementsByTagName('UrlThumb')->item(0)->nodeValue
|
310 |
+
);
|
311 |
+
|
312 |
+
$_productData['Screenshots'][] = $s;
|
313 |
+
}
|
314 |
+
}
|
315 |
+
|
316 |
+
/*------ Start Edition Game Info -------*/
|
317 |
+
$edition_temp = $xml->getElementsByTagName('Edition');
|
318 |
+
if($edition_temp->length){
|
319 |
+
$edition_temp = $edition_temp->item(0);
|
320 |
+
|
321 |
+
// Update Edition Title
|
322 |
+
$temp = $edition_temp->getElementsByTagName('Title');
|
323 |
+
|
324 |
+
if ($temp->length) {
|
325 |
+
$_productData['name']=$this->_getElementValue($edition_temp, 'Title');
|
326 |
+
}
|
327 |
+
|
328 |
+
// Update Edition Releases
|
329 |
+
$temp = $edition_temp->getElementsByTagName('Releases');
|
330 |
+
|
331 |
+
if ($temp->length) {
|
332 |
+
foreach ($temp->item(0)->getElementsByTagName('Release') as $i => $el) {
|
333 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
334 |
+
$_productData['Releases'] = array(
|
335 |
+
'ReleaseStatus' => $el->getElementsByTagName('ReleaseStatus')->item(0)->nodeValue,
|
336 |
+
'ReleaseDate' => $el->getElementsByTagName('ReleaseDate')->item(0)->nodeValue
|
337 |
+
);
|
338 |
+
$_productData['ReleaseDate'] = $_productData['Releases']['ReleaseDate'];
|
339 |
+
break;
|
340 |
+
}
|
341 |
+
}
|
342 |
+
}
|
343 |
+
|
344 |
+
//Update Edition Description
|
345 |
+
$temp = $edition_temp->getElementsByTagName('Extra');
|
346 |
+
|
347 |
+
if ($temp->length) {
|
348 |
+
foreach ($temp->item(0)->getElementsByTagName('LocalizedDescription') as $i => $el) {
|
349 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
350 |
+
$_productData['description'] = $el->getElementsByTagName('Description')->item(0)->nodeValue;
|
351 |
+
break;
|
352 |
+
}
|
353 |
+
}
|
354 |
+
}
|
355 |
+
|
356 |
+
//Update Edition Publisher
|
357 |
+
$temp = $edition_temp->getElementsByTagName('Publishers');
|
358 |
+
if ($temp->length) {
|
359 |
+
foreach ($temp->item(0)->getElementsByTagName('Publisher') as $i => $el) {
|
360 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
361 |
+
$_productData['Publisher'] = array(
|
362 |
+
'PublisherId' => $el->getElementsByTagName('PublisherId')->item(0)->nodeValue,
|
363 |
+
'PublisherName' => $el->getElementsByTagName('PublisherName')->item(0)->nodeValue,
|
364 |
+
'PublisherHomepage' => $el->getElementsByTagName('PublisherHomepage')->item(0)->nodeValue
|
365 |
+
);
|
366 |
+
break;
|
367 |
+
}
|
368 |
+
}
|
369 |
+
}
|
370 |
+
|
371 |
+
//Update Edition PackShots
|
372 |
+
$temp = $edition_temp->getElementsByTagName('Packshots');
|
373 |
+
|
374 |
+
if ($temp->length) {
|
375 |
+
|
376 |
+
foreach ($temp->item(0)->getElementsByTagName('Packshot') as $i => $el) {
|
377 |
+
if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
|
378 |
+
|
379 |
+
$_productData['Packshots']['UrlMedium'] = $el->getElementsByTagName('UrlMedium')->item(0)->nodeValue;
|
380 |
+
|
381 |
+
$elem = $el->getElementsByTagName('UrlHiRez');
|
382 |
+
if ($elem->length) {
|
383 |
+
$_productData['Packshots']['UrlHiRez'] = $elem->item(0)->nodeValue;
|
384 |
+
}
|
385 |
+
|
386 |
+
$elem = $el->getElementsByTagName('UrlThumb');
|
387 |
+
if ($elem->length) {
|
388 |
+
$_productData['Packshots']['UrlThumb'] = $elem->item(0)->nodeValue;
|
389 |
+
}
|
390 |
+
|
391 |
+
break;
|
392 |
+
}
|
393 |
+
}
|
394 |
+
}
|
395 |
+
|
396 |
+
}
|
397 |
+
|
398 |
+
//print_r($_productData); exit;
|
399 |
+
|
400 |
+
$genre_val = $this->_addAttributeValue("genre",$_productData['child_category']);
|
401 |
+
|
402 |
+
if(count($_productData['Publisher'])>0){
|
403 |
+
$publisher_val = $this->_addAttributeValue("publishers",$_productData['Publisher']['PublisherName']);
|
404 |
+
}
|
405 |
+
$shortDescription = substr(strip_tags($_productData['description']),0,200);
|
406 |
+
|
407 |
+
$parts= explode(" ",$_productData['PegiRating']);
|
408 |
+
$age_val = NULL;
|
409 |
+
if(is_int($parts[1])){
|
410 |
+
$age_val = $this->_addAttributeValue("age",$parts[1]);
|
411 |
+
}
|
412 |
+
|
413 |
+
$_productData['EAN'] = implode(",",$_productData['EAN']);
|
414 |
+
$_productData['AlsoAvailableOn'] = implode(',',$_productData['AlsoAvailableOn']);
|
415 |
+
|
416 |
+
if($_productData['LocalizedTitle'])
|
417 |
+
$_productData['LocalizedTitle'] = serialize($_productData['LocalizedTitle']);
|
418 |
+
|
419 |
+
if($_productData['Releases'])
|
420 |
+
$_productData['Releases'] = serialize($_productData['Releases']);
|
421 |
+
|
422 |
+
if($_productData['Publisher'])
|
423 |
+
$_productData['Publisher'] = serialize($_productData['Publisher']);
|
424 |
+
|
425 |
+
if($_productData['Editions'])
|
426 |
+
$_productData['Editions'] = serialize($_productData['Editions']);
|
427 |
+
|
428 |
+
if($_productData['Videos'])
|
429 |
+
$_productData['Videos'] = serialize($_productData['Videos']);
|
430 |
+
|
431 |
+
if($_productData['Keywords'])
|
432 |
+
$_productData['Keywords'] = implode(',',$_productData['Keywords']);
|
433 |
+
|
434 |
+
|
435 |
+
// Start Add Or Update Product
|
436 |
+
if ($gameProducttId) {
|
437 |
+
|
438 |
+
// Start Update Product Here
|
439 |
+
echo "-- updating ", $_productData['name'], " --productdata<br>";
|
440 |
+
$_product = Mage::getModel('catalog/product')->load($gameProducttId);
|
441 |
+
|
442 |
+
/*
|
443 |
+
Start Remove Old and Add New Images
|
444 |
+
*/
|
445 |
+
$mediaApi = Mage::getModel("catalog/product_attribute_media_api");
|
446 |
+
$mediaApiItems = $mediaApi->items($_product->getId());
|
447 |
+
foreach($mediaApiItems as $item) {
|
448 |
+
$datatemp=$mediaApi->remove($_product->getId(), $item['file']);
|
449 |
+
echo "-- rem. ", $item['file'], " from Local Server<br>";
|
450 |
+
}
|
451 |
+
$_product->save(); //before adding need to save product
|
452 |
+
$_product = Mage::getModel('catalog/product')->load($gameProducttId);
|
453 |
+
|
454 |
+
// Assign Packsthot Image as Product Images
|
455 |
+
foreach($_productData['Packshots'] as $type => $PackshotImage){
|
456 |
+
$importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
|
457 |
+
$image_name = $gameId."-packshot"."-".$type.".jpg";
|
458 |
+
$packImageUrl = $importDir. DS .$image_name;
|
459 |
+
// Copy Image from totheGame server to local server
|
460 |
+
if(copy($PackshotImage, $packImageUrl)){
|
461 |
+
echo "-- upl. ", $PackshotImage, " to Local Server<br>";
|
462 |
+
// Add three image sizes to media gallery
|
463 |
+
$_product->addImageToMediaGallery($packImageUrl, array('image','thumbnail','small_image'), false, false); // Assigning packshot image, thumb and small image to media gallery
|
464 |
+
break;
|
465 |
+
}
|
466 |
+
}
|
467 |
+
|
468 |
+
// Assign Screenshot Image as Product Images
|
469 |
+
foreach($_productData['Screenshots'] as $type => $screenshotImages){
|
470 |
+
$screenshotImage = $screenshotImages['UrlLarge'];
|
471 |
+
$importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
|
472 |
+
$image_name = $gameId."-screenshot"."-".$type.".jpg";
|
473 |
+
$screenshotImageUrl = $importDir. DS .$image_name;
|
474 |
+
// Copy Image from totheGame server to local server
|
475 |
+
if(copy($screenshotImage, $screenshotImageUrl)){
|
476 |
+
echo "-- upl. ", $screenshotImage, " to Local Server<br>";
|
477 |
+
// Add three image sizes to media gallery
|
478 |
+
$_product->addImageToMediaGallery($screenshotImageUrl, false, false, false); // Assigning screenshot image to media gallery
|
479 |
+
}
|
480 |
+
}
|
481 |
+
|
482 |
+
/*
|
483 |
+
End Remove Old and Add New Images
|
484 |
+
*/
|
485 |
+
|
486 |
+
$_product->setName($_productData['name']);
|
487 |
+
$_product->setDescription($_productData['description']);
|
488 |
+
$_product->setShortDescription($shortDescription);
|
489 |
+
$_product->setGenre($genre_val);
|
490 |
+
if(count($_productData['Publisher'])>0){
|
491 |
+
$_product->setPublishers($publisher_val);
|
492 |
+
}
|
493 |
+
if($age_val)
|
494 |
+
$_product->setAge($age_val);
|
495 |
+
|
496 |
+
$_product->setGameId($gameId);
|
497 |
+
$_product->setLastUpdated($_productData['LastUpdated']);
|
498 |
+
$_product->setEan($_productData['EAN']);
|
499 |
+
$_product->setPlatformId($_productData['PlatformId']);
|
500 |
+
$_product->setPlatform($_productData['Platform']);
|
501 |
+
$_product->setLogoUrl($_productData['LogoUrl']);
|
502 |
+
$_product->setLocalizedTitle($_productData['LocalizedTitle']);
|
503 |
+
$_product->setReleases($_productData['Releases']);
|
504 |
+
$_product->setPegiRating($_productData['PegiRating']);
|
505 |
+
$_product->setPegiRatingId($_productData['PegiRatingId']);
|
506 |
+
$_product->setPublisher($_productData['Publisher']);
|
507 |
+
$_product->setDeveloperId($_productData['DeveloperId']);
|
508 |
+
$_product->setDeveloperName($_productData['DeveloperName']);
|
509 |
+
$_product->setDeveloperHomepage($_productData['DeveloperHomepage']);
|
510 |
+
$_product->setMainGame($_productData['MainGame']);
|
511 |
+
$_product->setAlsoAvailableOn($_productData['AlsoAvailableOn']);
|
512 |
+
$_product->setEditions($_productData['Editions']);
|
513 |
+
$_product->setVideos($_productData['Videos']);
|
514 |
+
$_product->setKeywords($_productData['Keywords']);
|
515 |
+
|
516 |
+
try {
|
517 |
+
$_product->save();
|
518 |
+
echo "-- Updated --<br>";
|
519 |
+
}
|
520 |
+
catch (Exception $e) {
|
521 |
+
echo "--! update failed<br>";
|
522 |
+
return;
|
523 |
+
}
|
524 |
+
|
525 |
+
} else {
|
526 |
+
|
527 |
+
// Start Add Product Here
|
528 |
+
echo '-- importing ', $_productData['name'], " --productdata<br>";
|
529 |
+
|
530 |
+
$websiteids="";
|
531 |
+
foreach (Mage::app()->getWebsites() as $website) {
|
532 |
+
$websiteids[]=$website->getWebsiteId();
|
533 |
+
}
|
534 |
+
|
535 |
+
$storeids="";
|
536 |
+
$stores=Mage::getModel('core/store')->getCollection()->load()->getAllIds();
|
537 |
+
foreach($stores as $estoreid){
|
538 |
+
$storeids[]=$estoreid;
|
539 |
+
}
|
540 |
+
//print_r($websiteids);
|
541 |
+
//print_r($storeids);
|
542 |
+
//exit;
|
543 |
+
|
544 |
+
$product = new Mage_Catalog_Model_Product();
|
545 |
+
|
546 |
+
$product->setSku($gameId);
|
547 |
+
$product->setTypeId('simple');
|
548 |
+
$product->setPrice(0.00);
|
549 |
+
$product->setWeight(0.00);
|
550 |
+
$product->setAttributeSetId(4);
|
551 |
+
$product->setWebsiteIDs($websiteids);
|
552 |
+
$product->setStatus(2);
|
553 |
+
$product->setTaxClassId(0);
|
554 |
+
$product->setStockData(array(
|
555 |
+
'manage_stock'=>1,
|
556 |
+
'use_config_manage_stock'=>0,
|
557 |
+
'qty' => 0,
|
558 |
+
'is_in_stock'=>0
|
559 |
+
));
|
560 |
+
|
561 |
+
$product->setName($_productData['name']);
|
562 |
+
$product->setDescription($_productData['description']);
|
563 |
+
$product->setShortDescription($shortDescription);
|
564 |
+
|
565 |
+
$product->setGenre($genre_val);
|
566 |
+
if(count($_productData['Publisher'])>0){
|
567 |
+
$product->setPublishers($publisher_val);
|
568 |
+
}
|
569 |
+
if($age_val)
|
570 |
+
$_product->setAge($age_val);
|
571 |
+
|
572 |
+
$product->setGameId($gameId);
|
573 |
+
$product->setLastUpdated($_productData['LastUpdated']);
|
574 |
+
$product->setEan($_productData['EAN']);
|
575 |
+
$product->setPlatformId($_productData['PlatformId']);
|
576 |
+
$product->setPlatform($_productData['Platform']);
|
577 |
+
$product->setLogoUrl($_productData['LogoUrl']);
|
578 |
+
$product->setLocalizedTitle($_productData['LocalizedTitle']);
|
579 |
+
$product->setReleases($_productData['Releases']);
|
580 |
+
$product->setPegiRating($_productData['PegiRating']);
|
581 |
+
$product->setPegiRatingId($_productData['PegiRatingId']);
|
582 |
+
$product->setPublisher($_productData['Publisher']);
|
583 |
+
$product->setDeveloperId($_productData['DeveloperId']);
|
584 |
+
$product->setDeveloperName($_productData['DeveloperName']);
|
585 |
+
$product->setDeveloperHomepage($_productData['DeveloperHomepage']);
|
586 |
+
$product->setMainGame($_productData['MainGame']);
|
587 |
+
$product->setAlsoAvailableOn($_productData['AlsoAvailableOn']);
|
588 |
+
$product->setEditions($_productData['Editions']);
|
589 |
+
$product->setVideos($_productData['Videos']);
|
590 |
+
$product->setKeywords($_productData['Keywords']);
|
591 |
+
|
592 |
+
// Assign Packsthot Image as Product Images
|
593 |
+
foreach($_productData['Packshots'] as $type => $PackshotImage){
|
594 |
+
$importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
|
595 |
+
$image_name = $gameId."-packshot"."-".$type.".jpg";
|
596 |
+
$packImageUrl = $importDir. DS .$image_name;
|
597 |
+
// Copy Image from totheGame server to local server
|
598 |
+
if(copy($PackshotImage, $packImageUrl)){
|
599 |
+
echo "-- upl. ", $PackshotImage, " to Local Server<br>";
|
600 |
+
// Add three image sizes to media gallery
|
601 |
+
$product->addImageToMediaGallery($packImageUrl, array('image','thumbnail','small_image'), false, false); // Assigning packshot image, thumb and small image to media gallery
|
602 |
+
break;
|
603 |
+
}
|
604 |
+
}
|
605 |
+
|
606 |
+
// Assign Screenshot Image as Product Images
|
607 |
+
foreach($_productData['Screenshots'] as $type => $screenshotImages){
|
608 |
+
$screenshotImage = $screenshotImages['UrlLarge'];
|
609 |
+
$importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
|
610 |
+
$image_name = $gameId."-screenshot"."-".$type.".jpg";
|
611 |
+
$screenshotImageUrl = $importDir. DS .$image_name;
|
612 |
+
// Copy Image from totheGame server to local server
|
613 |
+
if(copy($screenshotImage, $screenshotImageUrl)){
|
614 |
+
echo "-- upl. ", $screenshotImage, " to Local Server<br>";
|
615 |
+
// Add three image sizes to media gallery
|
616 |
+
$product->addImageToMediaGallery($screenshotImageUrl, false, false, false); // Assigning screenshot image to media gallery
|
617 |
+
}
|
618 |
+
}
|
619 |
+
|
620 |
+
//print_r($product->getData()); exit;
|
621 |
+
|
622 |
+
try {
|
623 |
+
$product->save();
|
624 |
+
echo "-- Product success added<br>";
|
625 |
+
}
|
626 |
+
catch (Exception $e) {
|
627 |
+
echo "--! import failed<br>";
|
628 |
+
return;
|
629 |
+
}
|
630 |
+
}
|
631 |
+
|
632 |
+
/*$index_arr=array(1,4);
|
633 |
+
foreach($index_arr as $index){
|
634 |
+
$process = Mage::getModel('index/process')->load($index);
|
635 |
+
$process->reindexAll();
|
636 |
+
}*/
|
637 |
+
|
638 |
+
} catch (Exception $e) {
|
639 |
+
echo '--! exception: ', $e->getMessage(), "<br>";
|
640 |
+
}
|
641 |
+
|
642 |
+
$xml = null;
|
643 |
+
}
|
644 |
+
|
645 |
+
protected function _getElementValue(&$el, $nodeName) {
|
646 |
+
$ch = $el->getElementsByTagName($nodeName);
|
647 |
+
|
648 |
+
if ($ch->length == 0)
|
649 |
+
return '';
|
650 |
+
|
651 |
+
return $ch->item(0)->nodeValue;
|
652 |
+
}
|
653 |
+
|
654 |
+
/*
|
655 |
+
PHP Shutdown and calculate
|
656 |
+
*/
|
657 |
+
protected function _PhpShutdown() {
|
658 |
+
echo "<br>Import of ", $this->gameCount, ' items finished in ', (microtime(true)-$this->_startTime), 's; memory usage peak ', $this->_FormatBytes(memory_get_usage(true)), "<br>";
|
659 |
+
}
|
660 |
+
|
661 |
+
/*
|
662 |
+
Calculate Usages Memory
|
663 |
+
*/
|
664 |
+
protected function _FormatBytes($size){
|
665 |
+
$units = array(' B', ' KiB', ' MiB', ' GiB', ' TiB', ' PiB');
|
666 |
+
|
667 |
+
for ($i = 0; $size >= 1024 && $i < 6; $i++)
|
668 |
+
$size /= 1024;
|
669 |
+
|
670 |
+
return round($size, 2).$units[$i];
|
671 |
+
}
|
672 |
+
|
673 |
+
/* Validation Data */
|
674 |
+
protected function _ValidateData(&$data, $req, &$values, $escape = true) {
|
675 |
+
$ok = TRUE;
|
676 |
+
|
677 |
+
foreach ($req as $fieldName => $dataType) {
|
678 |
+
if (!isset($data[$fieldName])) {
|
679 |
+
$values[$fieldName] = '';
|
680 |
+
$data[$fieldName] = null;
|
681 |
+
$ok = FALSE;
|
682 |
+
}
|
683 |
+
|
684 |
+
switch ($dataType) {
|
685 |
+
case 'plain_text':
|
686 |
+
$values[$fieldName] = strip_tags(htmlspecialchars($data[$fieldName]));
|
687 |
+
|
688 |
+
if ($values[$fieldName] === '')
|
689 |
+
$ok = FALSE;
|
690 |
+
// handle character escapipng
|
691 |
+
if ($escape)
|
692 |
+
$values[$fieldName] = get_magic_quotes_gpc() ? $values[$fieldName] : addslashes($values[$fieldName]);
|
693 |
+
else
|
694 |
+
$values[$fieldName] = stripslashes($values[$fieldName]);
|
695 |
+
|
696 |
+
break;
|
697 |
+
|
698 |
+
case 'rich_text':
|
699 |
+
$values[$fieldName] = $data[$fieldName];
|
700 |
+
if ($values[$fieldName] === '')
|
701 |
+
$ok = FALSE;
|
702 |
+
// handle character escapipng
|
703 |
+
if ($escape)
|
704 |
+
$values[$fieldName] = get_magic_quotes_gpc() ? $values[$fieldName] : addslashes($values[$fieldName]);
|
705 |
+
else
|
706 |
+
$values[$fieldName] = stripslashes($values[$fieldName]);
|
707 |
+
|
708 |
+
break;
|
709 |
+
|
710 |
+
case 'integer':
|
711 |
+
if (!is_numeric($data[$fieldName])) {
|
712 |
+
$ok = FALSE;
|
713 |
+
$values[$fieldName] = '';
|
714 |
+
} else
|
715 |
+
$values[$fieldName] = (int)$data[$fieldName];
|
716 |
+
|
717 |
+
break;
|
718 |
+
|
719 |
+
case 'float':
|
720 |
+
if (!is_numeric($data[$fieldName])) {
|
721 |
+
$ok = FALSE;
|
722 |
+
$values[$fieldName] = '';
|
723 |
+
} else
|
724 |
+
$values[$fieldName] = (float)$data[$fieldName];
|
725 |
+
|
726 |
+
break;
|
727 |
+
|
728 |
+
case 'array':
|
729 |
+
if (!is_array($data[$fieldName])) {
|
730 |
+
$ok = FALSE;
|
731 |
+
$values[$fieldName] = array();
|
732 |
+
} else
|
733 |
+
$values[$fieldName] = $data[$fieldName];
|
734 |
+
|
735 |
+
break;
|
736 |
+
|
737 |
+
case 'date':
|
738 |
+
$values[$fieldName] = strip_tags($data[$fieldName]);
|
739 |
+
$values[$fieldName] = $this->_cncValidateDate($values[$fieldName], '.');
|
740 |
+
|
741 |
+
if (!$values[$fieldName]) {
|
742 |
+
$values[$fieldName] = '';
|
743 |
+
$ok = FALSE;
|
744 |
+
continue;
|
745 |
+
}
|
746 |
+
|
747 |
+
break;
|
748 |
+
}
|
749 |
+
}
|
750 |
+
return $ok;
|
751 |
+
}
|
752 |
+
|
753 |
+
/*
|
754 |
+
Add catalog drowdown attribute new option with check existing option value
|
755 |
+
*/
|
756 |
+
protected function _addAttributeValue($arg_attribute, $arg_value)
|
757 |
+
{
|
758 |
+
$attribute_model = Mage::getModel('eav/entity_attribute');
|
759 |
+
|
760 |
+
$attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
|
761 |
+
$attribute = $attribute_model->load($attribute_code);
|
762 |
+
|
763 |
+
if(!$this->_attributeValueExists($arg_attribute, $arg_value))
|
764 |
+
{
|
765 |
+
$value['option'] = array($arg_value,$arg_value);
|
766 |
+
$result = array('value' => $value);
|
767 |
+
$attribute->setData('option',$result);
|
768 |
+
$attribute->save();
|
769 |
+
}
|
770 |
+
|
771 |
+
$attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
|
772 |
+
$attribute_table = $attribute_options_model->setAttribute($attribute);
|
773 |
+
$options = $attribute_options_model->getAllOptions(false);
|
774 |
+
|
775 |
+
foreach($options as $option)
|
776 |
+
{
|
777 |
+
if ($option['label'] == $arg_value)
|
778 |
+
{
|
779 |
+
return $option['value'];
|
780 |
+
}
|
781 |
+
}
|
782 |
+
return false;
|
783 |
+
}
|
784 |
+
|
785 |
+
/*
|
786 |
+
Add check attribute existing option value
|
787 |
+
*/
|
788 |
+
protected function _attributeValueExists($arg_attribute, $arg_value)
|
789 |
+
{
|
790 |
+
$attribute_model = Mage::getModel('eav/entity_attribute');
|
791 |
+
$attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
|
792 |
+
|
793 |
+
$attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
|
794 |
+
$attribute = $attribute_model->load($attribute_code);
|
795 |
+
|
796 |
+
$attribute_table = $attribute_options_model->setAttribute($attribute);
|
797 |
+
$options = $attribute_options_model->getAllOptions(false);
|
798 |
+
|
799 |
+
foreach($options as $option)
|
800 |
+
{
|
801 |
+
if ($option['label'] == $arg_value)
|
802 |
+
{
|
803 |
+
return $option['value'];
|
804 |
+
}
|
805 |
+
}
|
806 |
+
|
807 |
+
return false;
|
808 |
+
}
|
809 |
+
|
810 |
+
}
|
app/code/local/Cybernetikz/ToTheGame/etc/adminhtml.xml
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<menu>
|
4 |
+
<catalog>
|
5 |
+
<children>
|
6 |
+
<tothegame translate="title" module="cybernetikz_tothegame">
|
7 |
+
<title>ToTheGame Feed Import</title>
|
8 |
+
<action>adminhtml/tothegame/gameimport</action>
|
9 |
+
<sort_order>25</sort_order>
|
10 |
+
</tothegame>
|
11 |
+
</children>
|
12 |
+
</catalog>
|
13 |
+
</menu>
|
14 |
+
|
15 |
+
<acl>
|
16 |
+
<resources>
|
17 |
+
<admin>
|
18 |
+
<children>
|
19 |
+
<catalog>
|
20 |
+
<children>
|
21 |
+
<tothegame translate="title" module="cybernetikz_tothegame">
|
22 |
+
<title>ToTheGame Feed Import</title>
|
23 |
+
</tothegame>
|
24 |
+
</children>
|
25 |
+
</catalog>
|
26 |
+
<system>
|
27 |
+
<children>
|
28 |
+
<config>
|
29 |
+
<children>
|
30 |
+
<tothegame translate="title" module="cybernetikz_tothegame">
|
31 |
+
<title>ToTheGame Settings</title>
|
32 |
+
</tothegame>
|
33 |
+
</children>
|
34 |
+
</config>
|
35 |
+
</children>
|
36 |
+
</system>
|
37 |
+
</children>
|
38 |
+
</admin>
|
39 |
+
</resources>
|
40 |
+
</acl>
|
41 |
+
</config>
|
app/code/local/Cybernetikz/ToTheGame/etc/config.xml
ADDED
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Cybernetikz_ToTheGame>
|
5 |
+
<version>0.1.0</version>
|
6 |
+
</Cybernetikz_ToTheGame>
|
7 |
+
</modules>
|
8 |
+
<global>
|
9 |
+
<helpers>
|
10 |
+
<cybernetikz_tothegame>
|
11 |
+
<class>Cybernetikz_ToTheGame_Helper</class>
|
12 |
+
</cybernetikz_tothegame>
|
13 |
+
</helpers>
|
14 |
+
<blocks>
|
15 |
+
<cybernetikz_tothegame>
|
16 |
+
<class>Cybernetikz_ToTheGame_Block</class>
|
17 |
+
</cybernetikz_tothegame>
|
18 |
+
</blocks>
|
19 |
+
<resources>
|
20 |
+
<tothegame_setup>
|
21 |
+
<setup>
|
22 |
+
<module>Cybernetikz_ToTheGame</module>
|
23 |
+
<class>Cybernetikz_ToTheGame_Model_Resource_Mysql4_Setup</class>
|
24 |
+
</setup>
|
25 |
+
<connection>
|
26 |
+
<use>core_setup</use>
|
27 |
+
</connection>
|
28 |
+
</tothegame_setup>
|
29 |
+
<tothegame_write>
|
30 |
+
<connection>
|
31 |
+
<use>core_write</use>
|
32 |
+
</connection>
|
33 |
+
</tothegame_write>
|
34 |
+
<tothegame_read>
|
35 |
+
<connection>
|
36 |
+
<use>core_read</use>
|
37 |
+
</connection>
|
38 |
+
</tothegame_read>
|
39 |
+
</resources>
|
40 |
+
</global>
|
41 |
+
<admin>
|
42 |
+
<routers>
|
43 |
+
<adminhtml>
|
44 |
+
<args>
|
45 |
+
<modules>
|
46 |
+
<Cybernetikz_ToTheGame before="Mage_Adminhtml">Cybernetikz_ToTheGame_Adminhtml</Cybernetikz_ToTheGame>
|
47 |
+
</modules>
|
48 |
+
</args>
|
49 |
+
</adminhtml>
|
50 |
+
</routers>
|
51 |
+
</admin>
|
52 |
+
<adminhtml>
|
53 |
+
<layout>
|
54 |
+
<updates>
|
55 |
+
<cybernetikz_tothegame>
|
56 |
+
<file>cybernetikz_tothegame.xml</file>
|
57 |
+
</cybernetikz_tothegame>
|
58 |
+
</updates>
|
59 |
+
</layout>
|
60 |
+
<acl>
|
61 |
+
<resources>
|
62 |
+
<all>
|
63 |
+
<title>Allow Everything</title>
|
64 |
+
</all>
|
65 |
+
<admin>
|
66 |
+
<children>
|
67 |
+
<system>
|
68 |
+
<children>
|
69 |
+
<config>
|
70 |
+
<children>
|
71 |
+
<tothegame translate="label" module="cybernetikz_tothegame">
|
72 |
+
<label>CyberNetikz - All</label>
|
73 |
+
<sort_order>10</sort_order>
|
74 |
+
</tothegame>
|
75 |
+
</children>
|
76 |
+
</config>
|
77 |
+
</children>
|
78 |
+
</system>
|
79 |
+
</children>
|
80 |
+
</admin>
|
81 |
+
</resources>
|
82 |
+
</acl>
|
83 |
+
</adminhtml>
|
84 |
+
|
85 |
+
<default>
|
86 |
+
<tothegame>
|
87 |
+
|
88 |
+
<setting>
|
89 |
+
<importcachettl>24</importcachettl>
|
90 |
+
</setting>
|
91 |
+
|
92 |
+
</tothegame>
|
93 |
+
</default>
|
94 |
+
|
95 |
+
</config>
|
app/code/local/Cybernetikz/ToTheGame/etc/system.xml
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<tabs>
|
4 |
+
<cybernetikz translate="label" module="cybernetikz_tothegame">
|
5 |
+
<label>Cybernetikz Extension</label>
|
6 |
+
<sort_order>200</sort_order>
|
7 |
+
<show_in_default>1</show_in_default>
|
8 |
+
<show_in_website>1</show_in_website>
|
9 |
+
<show_in_store>1</show_in_store>
|
10 |
+
</cybernetikz>
|
11 |
+
</tabs>
|
12 |
+
<sections>
|
13 |
+
<tothegame translate="label" module="cybernetikz_tothegame">
|
14 |
+
<label>ToTheGame Settings</label>
|
15 |
+
<tab>cybernetikz</tab>
|
16 |
+
<sort_order>10</sort_order>
|
17 |
+
<show_in_default>1</show_in_default>
|
18 |
+
<show_in_website>1</show_in_website>
|
19 |
+
<show_in_store>1</show_in_store>
|
20 |
+
|
21 |
+
<groups>
|
22 |
+
<hint>
|
23 |
+
<frontend_model>cybernetikz_tothegame/adminhtml_system_config_fieldset_hint</frontend_model>
|
24 |
+
<sort_order>0</sort_order>
|
25 |
+
<show_in_default>1</show_in_default>
|
26 |
+
<show_in_website>1</show_in_website>
|
27 |
+
<show_in_store>1</show_in_store>
|
28 |
+
</hint>
|
29 |
+
<setting translate="label" module="cybernetikz_tothegame">
|
30 |
+
<label>Settings</label>
|
31 |
+
<frontend_type>text</frontend_type>
|
32 |
+
<sort_order>10</sort_order>
|
33 |
+
<show_in_default>1</show_in_default>
|
34 |
+
<show_in_website>1</show_in_website>
|
35 |
+
<show_in_store>1</show_in_store>
|
36 |
+
<fields>
|
37 |
+
<subscriberid translate="label">
|
38 |
+
<label>Subscriber Id</label>
|
39 |
+
<frontend_type>text</frontend_type>
|
40 |
+
<comment>Please enter your ToTheGame Subscriber Id</comment>
|
41 |
+
<validate>required-entry</validate>
|
42 |
+
<sort_order>0</sort_order>
|
43 |
+
<show_in_default>1</show_in_default>
|
44 |
+
<show_in_website>1</show_in_website>
|
45 |
+
<show_in_store>1</show_in_store>
|
46 |
+
</subscriberid>
|
47 |
+
|
48 |
+
<importcachettl translate="label">
|
49 |
+
<label>Import Cache Time Limit</label>
|
50 |
+
<frontend_type>text</frontend_type>
|
51 |
+
<comment>Please enter feed file import cache time limit (hour)</comment>
|
52 |
+
<sort_order>20</sort_order>
|
53 |
+
<show_in_default>1</show_in_default>
|
54 |
+
<show_in_website>1</show_in_website>
|
55 |
+
<show_in_store>1</show_in_store>
|
56 |
+
</importcachettl>
|
57 |
+
</fields>
|
58 |
+
</setting>
|
59 |
+
</groups>
|
60 |
+
|
61 |
+
</tothegame>
|
62 |
+
</sections>
|
63 |
+
</config>
|
app/code/local/Cybernetikz/ToTheGame/sql/tothegame_setup/mysql4-install-0.1.0.php
ADDED
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @category CyberNetikz
|
5 |
+
* @package CyberNetikz_ToTheGame
|
6 |
+
* @author CyberNetikz
|
7 |
+
* @author_url http://www.cybernetikz.com/
|
8 |
+
*/
|
9 |
+
|
10 |
+
/** @var $installer Cybernetikz_ToTheGame_Model_Resource_Mysql4_Setup */
|
11 |
+
$installer = $this;
|
12 |
+
$installer->startSetup();
|
13 |
+
|
14 |
+
$select_attributes=array('genre','publishers','age','ean','platform_id','platform','release_date','publisher','editions','last_update','also_available_on','keywords','localized_title','main_game','company_logo_url','developer_homepage','developer_id','developer_name','pegi_rating','pegi_rating_id','in_game_language',/*'packshots','screenshots',*/'videos');
|
15 |
+
foreach($select_attributes as $attribute_label=>$attribute_code){
|
16 |
+
$type_model = Mage::getModel('eav/entity_type')->loadByCode('catalog_product');
|
17 |
+
$model = Mage::getModel('catalog/entity_attribute');
|
18 |
+
$model->loadByCode($type_model->getId(), $attribute_code);
|
19 |
+
if($model->getId()) {
|
20 |
+
$model->delete();
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
$attribute_set_group='Game Information';
|
25 |
+
|
26 |
+
$select_attributes=array('Genre'=>'genre','Publishers'=>'publishers');
|
27 |
+
$ap=0;
|
28 |
+
foreach($select_attributes as $attribute_label=>$attribute_code){
|
29 |
+
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, $attribute_code, array(
|
30 |
+
'group' => $attribute_set_group,
|
31 |
+
'backend' => '',
|
32 |
+
'frontend' => '',
|
33 |
+
'label' => $attribute_label,
|
34 |
+
'type' => 'int',
|
35 |
+
'input' => 'select',
|
36 |
+
'source' => 'eav/entity_attribute_source_table',
|
37 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
|
38 |
+
'visible' => true,
|
39 |
+
'required' => false,
|
40 |
+
'user_defined' => true,
|
41 |
+
'default' => '',
|
42 |
+
'searchable' => false,
|
43 |
+
'filterable' => true,
|
44 |
+
'comparable' => false,
|
45 |
+
'configurable' => false,
|
46 |
+
'visible_on_front' => false,
|
47 |
+
'position' => $ap
|
48 |
+
));
|
49 |
+
$ap+=10;
|
50 |
+
}
|
51 |
+
|
52 |
+
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'age', array(
|
53 |
+
'group' => $attribute_set_group,
|
54 |
+
'backend' => 'eav/entity_attribute_backend_array',
|
55 |
+
'frontend' => '',
|
56 |
+
'label' => 'Age',
|
57 |
+
'type' => 'varchar',
|
58 |
+
'input' => 'multiselect',
|
59 |
+
'source' => '',
|
60 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
|
61 |
+
'visible' => true,
|
62 |
+
'required' => false,
|
63 |
+
'user_defined' => true,
|
64 |
+
'default' => '',
|
65 |
+
'searchable' => false,
|
66 |
+
'filterable' => true,
|
67 |
+
'comparable' => false,
|
68 |
+
'configurable' => false,
|
69 |
+
'visible_on_front' => false,
|
70 |
+
'position' => 20
|
71 |
+
));
|
72 |
+
|
73 |
+
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'game_id', array(
|
74 |
+
'group' => $attribute_set_group,
|
75 |
+
'backend' => '',
|
76 |
+
'frontend' => '',
|
77 |
+
'label' => 'Game Id',
|
78 |
+
'type' => 'varchar',
|
79 |
+
'input' => 'text',
|
80 |
+
'source' => '',
|
81 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
|
82 |
+
'visible' => true,
|
83 |
+
'required' => false,
|
84 |
+
'user_defined' => true,
|
85 |
+
'default' => '',
|
86 |
+
'unique' => true,
|
87 |
+
'searchable' => false,
|
88 |
+
'filterable' => false,
|
89 |
+
'comparable' => false,
|
90 |
+
'configurable' => false,
|
91 |
+
'visible_on_front' => false,
|
92 |
+
'position' => 30
|
93 |
+
));
|
94 |
+
|
95 |
+
$text_attributes = array('EAN'=>'ean','Platform Id'=>'platform_id','Platform'=>'platform','Release Date'=>'release_date','Publisher'=>'publisher','Editions'=>'editions','Last Update'=>'last_update','Also Available On'=>'also_available_on','Keywords'=>'keywords','Localized Title'=>'localized_title','Main Game'=>'main_game','Company Logo URL'=>'company_logo_url','Developer Homepage'=>'developer_homepage','Developer Id'=>'developer_id','Developer Name'=>'developer_name','Pegi Rating'=>'pegi_rating','Pegi Rating Id'=>'pegi_rating_id','In Game Language'=>'in_game_language');
|
96 |
+
$ap=40;
|
97 |
+
foreach($text_attributes as $attribute_label=>$attribute_code){
|
98 |
+
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, $attribute_code, array(
|
99 |
+
'group' => $attribute_set_group,
|
100 |
+
'backend' => '',
|
101 |
+
'frontend' => '',
|
102 |
+
'label' => $attribute_label,
|
103 |
+
'type' => 'varchar',
|
104 |
+
'input' => 'text',
|
105 |
+
'source' => '',
|
106 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
|
107 |
+
'visible' => true,
|
108 |
+
'required' => false,
|
109 |
+
'user_defined' => true,
|
110 |
+
'default' => '',
|
111 |
+
'searchable' => false,
|
112 |
+
'filterable' => false,
|
113 |
+
'comparable' => false,
|
114 |
+
'configurable' => false,
|
115 |
+
'visible_on_front' => false,
|
116 |
+
'position' => $ap
|
117 |
+
));
|
118 |
+
$ap+=10;
|
119 |
+
}
|
120 |
+
|
121 |
+
$textarea_attributes = array(/*'Packshots'=>'packshots','Screenshots'=>'screenshots',*/'Videos'=>'videos');
|
122 |
+
foreach($textarea_attributes as $attribute_label=>$attribute_code){
|
123 |
+
$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, $attribute_code, array(
|
124 |
+
'group' => $attribute_set_group,
|
125 |
+
'backend' => '',
|
126 |
+
'frontend' => '',
|
127 |
+
'label' => $attribute_label,
|
128 |
+
'type' => 'text',
|
129 |
+
'input' => 'textarea',
|
130 |
+
'source' => '',
|
131 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
|
132 |
+
'visible' => true,
|
133 |
+
'required' => false,
|
134 |
+
'user_defined' => true,
|
135 |
+
'default' => '',
|
136 |
+
'searchable' => false,
|
137 |
+
'filterable' => false,
|
138 |
+
'comparable' => false,
|
139 |
+
'configurable' => false,
|
140 |
+
'visible_on_front' => false,
|
141 |
+
'position' => $ap
|
142 |
+
));
|
143 |
+
$ap+=10;
|
144 |
+
}
|
145 |
+
|
146 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/cybernetikz_tothegame.xml
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<layout>
|
3 |
+
<adminhtml_tothegame_gameimport>
|
4 |
+
<reference name="content">
|
5 |
+
<block type="adminhtml/template" name="tothegame" template="cybernetikz/tothegame/gameimport.phtml"/>
|
6 |
+
</reference>
|
7 |
+
</adminhtml_tothegame_gameimport>
|
8 |
+
</layout>
|
app/design/adminhtml/default/default/template/cybernetikz/tothegame/gameimport.phtml
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<script type="text/javascript" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);?>adminhtml/default/default/cybernetikz/tothegame/js/jquery.js"></script>
|
2 |
+
<script type="text/javascript">jQuery.noConflict();</script>
|
3 |
+
<div class="content-header">
|
4 |
+
<table cellspacing="0" class="grid-header">
|
5 |
+
<tr>
|
6 |
+
<td><h3><?php echo $this->__('Game Feed Import')?></h3></td>
|
7 |
+
</tr>
|
8 |
+
</table>
|
9 |
+
</div>
|
10 |
+
|
11 |
+
<div class="wrap">
|
12 |
+
<div style="width:80%; float:left; margin-right:1%;">
|
13 |
+
<h4><?php echo $this->__('Single Game Import')?></h4>
|
14 |
+
<form action="<?php echo Mage::helper("adminhtml")->getUrl("adminhtml/tothegame/singlegameimport");?>" method="get" target="sync_output_test" class="sync-form">
|
15 |
+
<p>
|
16 |
+
<label for="cnc_game_id">Game ID</label>
|
17 |
+
<input type="text" name="game_id[]" id="cnc_game_id" />
|
18 |
+
<button type="submit" class="scalable save">Run</button>
|
19 |
+
</p>
|
20 |
+
</form>
|
21 |
+
<p>
|
22 |
+
<small><?php echo $this->__('Only game with a given Game Id will be import. Please use comma(,) separator for muliple Game Ids.'); ?></small>
|
23 |
+
</p>
|
24 |
+
</div>
|
25 |
+
<div style="clear:both;"></div>
|
26 |
+
|
27 |
+
<h4>Report <img src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);?>adminhtml/default/default/cybernetikz/tothegame/images/indicator.gif" alt="Please wait…" title="Please wait…" class="work-indicator" style="display:none;" /></h4>
|
28 |
+
<iframe id="sync-output-test" name="sync_output_test" src="about:blank" frameborder="1" width="100%" height="500" style="border:1px solid #DADADA;"><?php echo $this->__('Your browser does not support floating frames (iframe HTML element). Please upgrade your browser and try again.'); ?></iframe>
|
29 |
+
</div>
|
30 |
+
<script type="text/javascript">
|
31 |
+
jQuery(function () {
|
32 |
+
jQuery('.sync-form').submit(function () {
|
33 |
+
jQuery('.work-indicator').show();
|
34 |
+
jQuery('#sync-output-test').load(function () {
|
35 |
+
jQuery('.work-indicator').hide();
|
36 |
+
});
|
37 |
+
});
|
38 |
+
});
|
39 |
+
</script>
|
app/design/adminhtml/default/default/template/cybernetikz/tothegame/system/config/fieldset/hint.phtml
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div style="padding:10px; border:1px solid #cccccc; background-color:#eaf0ee;margin-bottom:10px;">
|
2 |
+
<div style="padding-left:76px;"><a href="http://www.cybernetikz.com" target="_blank"><img src="http://www.cybernetikz.com/images/cn-logo.jpg" alt="Cybernetikz" /></a></div>
|
3 |
+
<p style="font-family:Arial, Helvetica, sans-serif; font-size:13px; font-weight:normal;padding:0px; margin:0px; padding-top:5px;"><strong>ToTheGame Feeder by <a href="http://www.cybernetikz.com" target="_blank">CyberNetikz</a></strong></p>
|
4 |
+
<p style="font-family:Arial, Helvetica, sans-serif; font-size:13px; font-weight:normal;padding:0px; margin:0px; padding-top:5px;"><a href="mailto:support@cybernetikz.com">Email Us</a> for any Customization of the Extension or Feedback.</p>
|
5 |
+
<p style="font-family:Arial, Helvetica, sans-serif; font-size:13px; font-weight:normal;padding:0px; margin:0px; padding-top:5px;">Call: +1-347-261-2888 ( NY, USA ) | <a href="http://www.cybernetikz.com/website/web-development/magento/" target="_blank">Browse Our Magento Projects</a></p>
|
6 |
+
</div>
|
app/etc/modules/Cybernetikz_ToTheGame.xml
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<config>
|
3 |
+
<modules>
|
4 |
+
<Cybernetikz_ToTheGame>
|
5 |
+
<active>true</active>
|
6 |
+
<codePool>local</codePool>
|
7 |
+
</Cybernetikz_ToTheGame>
|
8 |
+
</modules>
|
9 |
+
</config>
|
package.xml
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>Cybernetikz_ToTheGame</name>
|
4 |
+
<version>0.1.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL 3.0)</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Automatically import (add/update) product information from ToTheGame game feed for your store.</summary>
|
10 |
+
<description>- Allow You to Import Product from ToTheGame Feeder into Magento
|
11 |
+
- Allow You to Show All Products Info into Your Product Detail Page like Title, Descriptions, Platform, Boxshots, Screenshots, Videos, Genre, Publisher, Release Date, Developers etc</description>
|
12 |
+
<notes>- ToTheGame Feed Import Implement and Ready to Use</notes>
|
13 |
+
<authors><author><name>CyberNetikz</name><user>CyberNetikz</user><email>sales@cybernetikz.com</email></author></authors>
|
14 |
+
<date>2015-01-08</date>
|
15 |
+
<time>11:46:44</time>
|
16 |
+
<contents><target name="mageetc"><dir name="modules"><file name="Cybernetikz_ToTheGame.xml" hash="56a3597fb67967ea0407b087d251c4e3"/></dir></target><target name="magelocal"><dir name="Cybernetikz"><dir name="ToTheGame"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="595da4f66a0fe867d47c9cdd71015823"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="f86910ee11b8e1330cb9ea157ddacf76"/></dir><dir name="Model"><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="a30938317dace0f4c48832dfb06773d0"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ToTheGameController.php" hash="52ec51265f1b1a521d89105066461d6f"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="0667d87d1bcccac7d5f9f1cd3719432c"/><file name="config.xml" hash="9763bed945675a401751cb35d3eda237"/><file name="system.xml" hash="180d791b1f52a8bb78a901bb13499aed"/></dir><dir name="sql"><dir name="tothegame_setup"><file name="mysql4-install-0.1.0.php" hash="57ee1befe5d68afc4e7faa50487b8333"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="cybernetikz_tothegame.xml" hash="aa961d53d71288758b51cee8d3d155d3"/></dir><dir name="template"><dir name="cybernetikz"><dir name="tothegame"><file name="gameimport.phtml" hash="005fdd07c423b199f5a3661384fc8124"/><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="77c083d7b58e29bd9f6a4b432a9d5ce1"/></dir></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="cybernetikz"><dir name="tothegame"><dir name="images"><file name="indicator.gif" hash="86b1ac6d1c485d54efa3a53643e91ceb"/></dir><dir name="js"><file name="jquery.js" hash="a9331828c517ac5d97f93b3cfdbcc9bc"/></dir></dir></dir></dir></dir></dir></target></contents>
|
17 |
+
<compatible/>
|
18 |
+
<dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
|
19 |
+
</package>
|
skin/adminhtml/default/default/cybernetikz/tothegame/images/indicator.gif
ADDED
Binary file
|
skin/adminhtml/default/default/cybernetikz/tothegame/js/jquery.js
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery 1.2.6 - New Wave Javascript
|
3 |
+
*
|
4 |
+
* Copyright (c) 2008 John Resig (jquery.com)
|
5 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
6 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
7 |
+
*
|
8 |
+
* $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
|
9 |
+
* $Rev: 5685 $
|
10 |
+
*/
|
11 |
+
(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
|
12 |
+
return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
|
13 |
+
return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
|
14 |
+
selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
|
15 |
+
return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
|
16 |
+
this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
|
17 |
+
return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
|
18 |
+
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&©&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
|
19 |
+
script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
|
20 |
+
for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
|
21 |
+
for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
|
22 |
+
jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
|
23 |
+
ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
|
24 |
+
while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
|
25 |
+
while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
|
26 |
+
for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
|
27 |
+
jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
|
28 |
+
xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
|
29 |
+
jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
|
30 |
+
for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
|
31 |
+
s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
|
32 |
+
e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
|