unbxd_feedconnector - Version 1.0.5

Version Notes

Supporting v2 type of unbxd field

Download this release

Release Info

Developer ananthesh
Extension unbxd_feedconnector
Version 1.0.5
Comparing to
See all releases


Code changes from version 1.0.4 to 1.0.5

app/code/local/Unbxd/Datafeeder/Helper/AnalyticsHelper.php CHANGED
@@ -88,5 +88,18 @@ class Unbxd_Datafeeder_Helper_AnalyticsHelper extends Mage_Core_Helper_Abstract{
88
  }
89
  return 'unbxdattr="order" unbxdparam_sku="'.$product->getData('store_id').'"';
90
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  }
92
  ?>
88
  }
89
  return 'unbxdattr="order" unbxdparam_sku="'.$product->getData('store_id').'"';
90
  }
91
+
92
+ /**
93
+ * Checks whether request is a navigation
94
+ *
95
+ * @param Mage_Catalog_Model_Resource_Eav_Attribute $attribute
96
+ * @return bool
97
+ */
98
+ public function isNavigation() {
99
+ if(Mage::app()->getRequest()->getControllerName() == "category") {
100
+ return true;
101
+ }
102
+ return false;
103
+ }
104
  }
105
  ?>
app/code/local/Unbxd/Datafeeder/Helper/Data.php CHANGED
@@ -7,8 +7,6 @@ class Unbxd_Datafeeder_Helper_Data extends Mage_Core_Helper_Abstract
7
  {
8
  $params=$this->_getRequest()->getParams();
9
  return $params;
10
- }
11
-
12
-
13
 
14
  }
7
  {
8
  $params=$this->_getRequest()->getParams();
9
  return $params;
10
+ }
 
 
11
 
12
  }
app/code/local/Unbxd/Datafeeder/Helper/UnbxdIndexingHelper.php CHANGED
@@ -28,6 +28,7 @@
28
  $this->file = Mage::getBaseDir('tmp').DS.'unbxdFeed.xml';
29
  $this-log("calling setfeilds method");
30
  $this->fields = [];
 
31
  }
32
 
33
  public function setFields($site) {
@@ -156,7 +157,7 @@
156
  */
157
  private function writeXmlProductContents($fromdate,$todate,$site,$operation,$ids){
158
 
159
- $this-> setFieldType();
160
  $collection=$this->getCatalogCollection($fromdate,$todate,$site,$operation,$ids);
161
  // get total size
162
  //set the time limit to infinite
@@ -168,6 +169,7 @@
168
  $collection->clear();
169
  $collection->getSelect()->limit($this->PAGE_SIZE, ($pageNum++) * $this->PAGE_SIZE);
170
  $collection->load();
 
171
  if(count($collection) == 0){
172
  if($pageNum == 1){
173
  $this->log("No products found");
@@ -214,9 +216,6 @@
214
  if($operation != "add"){
215
  return $this->getAttributesInXML('uniqueId',$product->getData('entity_id'));
216
  }
217
- $spsPrice = $product->getData('special_price');
218
- $spsPrice = isset($spsPrice)? $spsPrice :0;
219
- $content = $content.$this->getAttributesInXML('saving',(int)$product->getData('price') - (int)$spsPrice);
220
 
221
  foreach($product->getData('') as $columnHeader=>$columndata){
222
 
@@ -291,12 +290,20 @@
291
  * This is optimized method, where it doesn't make a database call to get fieldType
292
  * where it fetches from the local variable, which holds the information of field to fieldType mapping
293
  */
294
- private function isMultiSelect($attributeName = ""){
295
  if($this->getFieldType($attributeName) == "select" || $this->getFieldType($attributeName) == "multiselect" ){
296
  return true;
297
  }
298
  return false;
299
  }
 
 
 
 
 
 
 
 
300
 
301
  /**
302
  * function to get Category from the category id,
@@ -360,7 +367,6 @@
360
  $content='';
361
 
362
  foreach($columndata as $element){
363
-
364
  $content=$content.$this->getAttributesInXML($columnHeader,$element);
365
  }
366
 
@@ -432,7 +438,7 @@
432
  if ($operation == "add") {
433
  // select all the attributes
434
  $website =Mage::getModel("core/website")->setName($site);
435
- $visiblityCondition = array('in' => array(2,3,4));
436
 
437
  $collection = Mage::getResourceModel('catalog/product_collection')
438
  ->addWebsiteFilter($this->validateSite($site))
@@ -449,7 +455,7 @@
449
  $collection = Mage::getResourceModel('catalog/product_collection');
450
  if(sizeof($ids) > 0) {
451
  $condition = array('in' => $ids);
452
- $collection= $collection->addAttributeToFilter('entity_id',$condition)->addAttributeToSelect('entity_id');
453
  }
454
  }
455
 
@@ -500,7 +506,7 @@
500
  /**
501
  * method to create the feed
502
  **/
503
- public function createFeed($fromdate,$todate,$site,$operation,$ids){
504
  if($this->createXmlFile()){
505
  $this->log("started writing header");
506
  if(!$this->writeXmlHeaderContents($operation)){
28
  $this->file = Mage::getBaseDir('tmp').DS.'unbxdFeed.xml';
29
  $this-log("calling setfeilds method");
30
  $this->fields = [];
31
+ $this-> setFieldType();
32
  }
33
 
34
  public function setFields($site) {
157
  */
158
  private function writeXmlProductContents($fromdate,$todate,$site,$operation,$ids){
159
 
160
+
161
  $collection=$this->getCatalogCollection($fromdate,$todate,$site,$operation,$ids);
162
  // get total size
163
  //set the time limit to infinite
169
  $collection->clear();
170
  $collection->getSelect()->limit($this->PAGE_SIZE, ($pageNum++) * $this->PAGE_SIZE);
171
  $collection->load();
172
+ echo "<pre>";print_r($collection);echo "</pre>";
173
  if(count($collection) == 0){
174
  if($pageNum == 1){
175
  $this->log("No products found");
216
  if($operation != "add"){
217
  return $this->getAttributesInXML('uniqueId',$product->getData('entity_id'));
218
  }
 
 
 
219
 
220
  foreach($product->getData('') as $columnHeader=>$columndata){
221
 
290
  * This is optimized method, where it doesn't make a database call to get fieldType
291
  * where it fetches from the local variable, which holds the information of field to fieldType mapping
292
  */
293
+ public function isMultiSelect($attributeName = ""){
294
  if($this->getFieldType($attributeName) == "select" || $this->getFieldType($attributeName) == "multiselect" ){
295
  return true;
296
  }
297
  return false;
298
  }
299
+
300
+
301
+ public function isImage($attributeName = "") {
302
+ if($this->getFieldType($attributeName) == "media_image") {
303
+ return true;
304
+ }
305
+ return false;
306
+ }
307
 
308
  /**
309
  * function to get Category from the category id,
367
  $content='';
368
 
369
  foreach($columndata as $element){
 
370
  $content=$content.$this->getAttributesInXML($columnHeader,$element);
371
  }
372
 
438
  if ($operation == "add") {
439
  // select all the attributes
440
  $website =Mage::getModel("core/website")->setName($site);
441
+ $visiblityCondition = array('in' => array(4));
442
 
443
  $collection = Mage::getResourceModel('catalog/product_collection')
444
  ->addWebsiteFilter($this->validateSite($site))
455
  $collection = Mage::getResourceModel('catalog/product_collection');
456
  if(sizeof($ids) > 0) {
457
  $condition = array('in' => $ids);
458
+ $collection = $collection->addAttributeToFilter('entity_id',$condition)->addAttributeToSelect('entity_id');
459
  }
460
  }
461
 
506
  /**
507
  * method to create the feed
508
  **/
509
+ public function createFeed($fromdate,$todate,$site,$operation,$ids){
510
  if($this->createXmlFile()){
511
  $this->log("started writing header");
512
  if(!$this->writeXmlHeaderContents($operation)){
app/code/local/Unbxd/Datafeeder/Model/Feed/Feedcreator.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Datafeeder_Model_Feed_Feedcreator {
4
+
5
+ var $fileName;
6
+
7
+ var $fields;
8
+
9
+ const STATUS = 'status';
10
+ const DATA_TYPE = 'data_type';
11
+ const AUTOSUGGEST = 'autosuggest';
12
+
13
+
14
+ const PAGE_SIZE = 500;
15
+ public function __construct(){
16
+ }
17
+
18
+ public function init($site, $fileName) {
19
+ Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->setLog(str_replace(' ', '_',$site)."_Datafeeder.log");
20
+ $this->setFields($site);
21
+ $this->fileName = $fileName;
22
+ }
23
+
24
+
25
+ /**
26
+ * method to create the feed
27
+ **/
28
+ public function createFeed($fileName, $fromdate,$todate,$site,$operation,$ids){
29
+ $this->init($site, $fileName);
30
+ if($this->createFile()){
31
+ $this->log("started writing header");
32
+
33
+ if(!$this->writeFeedContent($fromdate,$todate,$site,$operation,$ids)){
34
+ return false;
35
+ }
36
+
37
+ } else {
38
+ return false;
39
+ }
40
+ return true;
41
+ }
42
+
43
+ private function writeFeedContent($fromdate,$todate,$site,$operation,$ids) {
44
+ if(!$this->appendTofile('{"feed":')) {
45
+ $this->log("Error writing feed tag");
46
+ return false;
47
+ }
48
+
49
+ if(!$this->writeCatalogContent($fromdate,$todate,$site,$operation,$ids)) {
50
+ $this->log("Error writing catalog tag");
51
+ return false;
52
+ }
53
+
54
+ if(!$this->appendTofile("}")) {
55
+ $this->log("Error writing closing feed tag");
56
+ return false;
57
+ }
58
+
59
+ return true;
60
+ }
61
+
62
+ private function writeCatalogContent($fromdate,$todate,$site,$operation,$ids) {
63
+ if(!$this->appendTofile('{"catalog":{')) {
64
+ $this->log("Error writing closing catalog tag");
65
+ return false;
66
+ }
67
+ if(!$this->writeSchemaContent()) {
68
+ return false;
69
+ }
70
+
71
+ if(!$this->appendTofile(",")) {
72
+ $this->log("Error while adding comma in catalog");
73
+ return false;
74
+ }
75
+
76
+ if(!$this->writeProductsContent($fromdate,$todate,$site,$operation,$ids)) {
77
+ return false;
78
+ }
79
+
80
+ if(!$this->appendTofile("}}")) {
81
+ $this->log("Error writing closing catalog tag");
82
+ return false;
83
+ }
84
+ return true;
85
+ }
86
+
87
+ private function writeSchemaContent() {
88
+ return $this->appendTofile('"schema":'.Mage::getSingleton('unbxd_datafeeder/feed_jsonbuilder_schemabuilder')->getSchema($this->fields));
89
+ }
90
+
91
+ private function writeProductsContent($fromdate,$todate,$site,$operation,$ids) {
92
+
93
+ $collection=$this->getCatalogCollection($fromdate,$todate,$site,$operation,$ids);
94
+ // get total size
95
+ //set the time limit to infinite
96
+ set_time_limit(0);
97
+ $pageNum = 0;
98
+ $this->log('started writing products');
99
+
100
+ if(!$this->appendTofile('"'. $operation . '":{ "items":[')) {
101
+ $this->log("Error while adding items tag");
102
+ return false;
103
+ }
104
+
105
+ $firstLoop = true;
106
+
107
+ while(true){
108
+ $collection->clear();
109
+ $collection->getSelect()->limit(self::PAGE_SIZE, ($pageNum++) * self::PAGE_SIZE);
110
+ $collection->load();
111
+ if(count($collection) == 0){
112
+ if($pageNum == 1){
113
+ $this->log("No products found");
114
+ return false;
115
+ }
116
+ break;
117
+ }
118
+
119
+ if(!$firstLoop) {
120
+ if(!$this->appendTofile( ',')) {
121
+ $this->log("Error while addings items separator");
122
+ return false;
123
+ }
124
+ }
125
+ $content=Mage::getSingleton('unbxd_datafeeder/feed_jsonbuilder_productbuilder')->getProducts($collection, $this->fields);
126
+ $status=$this->appendTofile($content);
127
+ if(!$status){
128
+ $this->log("Error while addings items");
129
+ return false;
130
+ }
131
+ $this->log('Added '.($pageNum) * $pageSize.' products');
132
+ $firstLoop = false;
133
+ }
134
+
135
+ if(!$this->appendTofile("]}")) {
136
+ $this->log("Error writing closing items tag");
137
+ return false;
138
+ }
139
+
140
+
141
+ $this->log('Added all products');
142
+ return true;
143
+ }
144
+
145
+
146
+ private function setFields($site) {
147
+ $this->fields = Mage::getResourceSingleton('datafeeder/field')->getFieldMapping($site, true);
148
+ $this->log("fields are set" );
149
+ $this->fields["type_id"] = array(self::STATUS => 1,
150
+ self::DATA_TYPE => "longText",
151
+ self::AUTOSUGGEST => 0 );
152
+ $this->fields["entity_id"] = array(self::STATUS => 1,
153
+ self::DATA_TYPE => "text",
154
+ self::AUTOSUGGEST => 0 );
155
+ $this->fields = array_merge($this->fields, Mage::getResourceSingleton("datafeeder/field")->getFeaturedFields());
156
+ }
157
+
158
+ /**
159
+ * method to get the catalog collection
160
+ *
161
+ */
162
+ public function getCatalogCollection($fromdate,$todate,$site,$operation,$ids) {
163
+ try{
164
+ if ($operation == "add") {
165
+ // select all the attributes
166
+ $website =Mage::getModel("core/website")->setName($site);
167
+ $visiblityCondition = array('in' => array(4));
168
+
169
+ $collection = Mage::getResourceModel('catalog/product_collection')
170
+ ->addWebsiteFilter($this->validateSite($site))
171
+ ->addAttributeToFilter('status',1)
172
+ ->joinField("qty", "cataloginventory_stock_item", 'qty', 'product_id=entity_id', null, 'left')
173
+ ->addAttributeToSelect('*')
174
+ ->addAttributeToFilter('visibility',$visiblityCondition);
175
+
176
+ if(sizeof($ids) > 0){
177
+ $condition = array('in' => $ids);
178
+ $collection=$collection->addAttributeToFilter('entity_id',$condition);
179
+ }
180
+ } else {
181
+ $collection = Mage::getResourceModel('catalog/product_collection');
182
+ if(sizeof($ids) > 0) {
183
+ $condition = array('in' => $ids);
184
+ $collection= $collection->addAttributeToFilter('entity_id',$condition)->addAttributeToSelect('entity_id');
185
+ }
186
+ }
187
+
188
+ $this->log($collection->getSelect());
189
+ return $collection;
190
+ } catch(Exception $e) {
191
+ $this->log($e->getMessage());
192
+ }
193
+ }
194
+
195
+
196
+ /**
197
+ * Function to initialize to feed creation process
198
+ */
199
+ private function createFile(){
200
+ return Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->createFile($this->fileName);
201
+ }
202
+
203
+ private function appendTofile($data){
204
+ return Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->appendTofile($this->fileName, $data);
205
+ }
206
+
207
+ public function log($message) {
208
+ Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->log($message);
209
+ }
210
+
211
+ /**
212
+ * method to validate whether the site exists or not
213
+ **/
214
+ public function validateSite($site){
215
+ $sites=Mage::app()->getWebsites();
216
+ if( !isset($site) || $site == "") {
217
+ return false;
218
+ }
219
+ foreach( $sites as $eachSite){
220
+ if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){
221
+ return $eachSite->getWebsiteId();
222
+ }
223
+ }
224
+ return -1;
225
+ }
226
+ }
227
+ ?>
app/code/local/Unbxd/Datafeeder/Model/Feed/Feedmanager.php ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Datafeeder_Model_Feed_Feedmanager {
4
+
5
+
6
+ /**
7
+ * method to push the feed to the Unbxd server
8
+ **/
9
+ public function pushFeed($site){
10
+ $fields=array('file'=>'@'.$this->fileName.';filename=unbxdFeedRenamed.json');
11
+ $header = array('Content-Type: multipart/form-data');
12
+
13
+ $url="http://feed.unbxdapi.com/upload/v2/".$this->key."/".$this->siteName;
14
+
15
+ $ch = curl_init();
16
+ curl_setopt($ch, CURLOPT_URL,$url);
17
+ curl_setopt($ch, CURLOPT_POST,true);
18
+ curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
19
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
20
+ try{
21
+ $this->log('pushing the feed');
22
+ // push the feed to the server
23
+ $response = $this->exec($ch);
24
+ }catch(Exception $Ex){
25
+ $this->log($Ex->getMessage());
26
+ return false;
27
+ }
28
+ $this->log(json_encode($response));
29
+ curl_close($ch);
30
+ return true;
31
+ }
32
+
33
+ public function exec($ch)
34
+ {
35
+ $response = curl_exec($ch);
36
+ $error = curl_error($ch);
37
+ $result = array( 'header' => '',
38
+ 'body' => '',
39
+ 'curl_error' => '',
40
+ 'http_code' => '',
41
+ 'last_url' => '');
42
+ if ( $error != "" )
43
+ {
44
+ $result['curl_error'] = $error;
45
+ return $result;
46
+ }
47
+
48
+ $header_size = curl_getinfo($ch,CURLINFO_HEADER_SIZE);
49
+ $result['header'] = substr($response, 0, $header_size);
50
+ $result['body'] = substr( $response, $header_size );
51
+ $result['http_code'] = curl_getinfo($this -> ch,CURLINFO_HTTP_CODE);
52
+ $result['last_url'] = curl_getinfo($this -> ch,CURLINFO_EFFECTIVE_URL);
53
+ return $result;
54
+ }
55
+
56
+ /**
57
+ * method to set the feedName, log, apikey based on site Name
58
+ **/
59
+ public function init($site)
60
+ {
61
+ $this->fileName = Mage::getBaseDir('tmp').DS.str_replace(' ', '_',$site). "_Feed.json";
62
+ $this->key = Mage::getResourceSingleton("datafeeder/conf")->getValue("apiKey");
63
+ $this->siteName = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/siteName");
64
+ if(!isset($this->key) || $this->key == "" || $this->key == "empty"){
65
+ $this->log("api key not set");
66
+ return false;
67
+ }
68
+ if(!isset($this->siteName) || $this->siteName == "" || $this->siteName == "empty"){
69
+ $this->log("site Name not set");
70
+ return false;
71
+ }
72
+ return true;
73
+ }
74
+
75
+ /**
76
+ * method to validate whether the site exists or not
77
+ **/
78
+ public function validateSite($site){
79
+ $sites=Mage::app()->getWebsites();
80
+ if( !isset($site) || $site == "") {
81
+ return false;
82
+ }
83
+ foreach( $sites as $eachSite){
84
+ if(strcasecmp ( $eachSite->getName(), $site ) == 0 ){
85
+ return $eachSite->getWebsiteId();
86
+ }
87
+ }
88
+ return -1;
89
+ }
90
+
91
+ /**
92
+ * method to initiate feed uploading to the unbxd servers
93
+ **/
94
+ public function process($fromdate,$site,$operation = "add", $ids=array()){
95
+
96
+ $this->log('unbxd Datafeeder initiated');
97
+ // validatest the site
98
+ if($this->validateSite($site) == -1){
99
+ $this->log("Invalid site Name".$site);
100
+ return;
101
+ }
102
+ // set the basic
103
+ if(! $this->init($site)){
104
+ return;
105
+ }
106
+ $todate =date('Y-m-d H:i:s');
107
+
108
+ // check the lock, that if already indexing is happening
109
+ if($this->checkSiteLock($site)){
110
+ $this->log('site '. $site.' has been locked');
111
+ $action=$site.'/status';
112
+ // lock the feed
113
+ Mage::getResourceSingleton("datafeeder/conf")->updateAction($action,'1');
114
+ // create the feed
115
+
116
+ $status=Mage::getSingleton('unbxd_datafeeder/feed_feedcreator')
117
+ ->createFeed($this->fileName, $fromdate,$todate,$site,$operation,$ids);
118
+ $this->log('unbxd Datafeeder finished creating file');
119
+
120
+ if($status){
121
+ try{
122
+ // if successful push it to unbxd servers
123
+ $status=$this->pushFeed($site);
124
+ }catch(Exception $e){
125
+ $this->log($e->getMessage());
126
+
127
+ }
128
+ if($status){
129
+ Mage::getResourceSingleton("datafeeder/conf")->updateAction('Lastindex',$todate);
130
+ }
131
+ }
132
+ // unlock the feed once everything is completed
133
+ Mage::getResourceSingleton("datafeeder/conf")->updateAction($action,'0');
134
+ $this->log('site '. $site.' has been unlocked');
135
+ } else {
136
+ $this->log('Feed Uploading failed because site has been locked');
137
+ }
138
+ }
139
+
140
+ /**
141
+ * method to check the status of the uploading
142
+ **/
143
+ public function checkSiteLock($site)
144
+ {
145
+ $value = Mage::getResourceSingleton("datafeeder/conf")->getValue($site."/status");
146
+ if($value == '0' || $value == 'empty'){
147
+ $this->log("true");
148
+ return true;
149
+ }else{
150
+ $this->log("false". $value);
151
+ return false;
152
+ }
153
+ }
154
+
155
+ public function log($message) {
156
+ Mage::getSingleton('unbxd_datafeeder/feed_filemanager')->log($message);
157
+ }
158
+ }
159
+ ?>
app/code/local/Unbxd/Datafeeder/Model/Feed/Filemanager.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Datafeeder_Model_Feed_Filemanager {
4
+
5
+
6
+ var $logFileName;
7
+
8
+ public function __construct(){
9
+ $this->logFileName = Mage::getBaseDir('log').DS.'generic.log';
10
+ }
11
+
12
+ public function setLog($logFileName) {
13
+ $this->logFileName = Mage::getBaseDir('log').DS.$logFileName;
14
+ }
15
+
16
+ /**
17
+ * Function to create a file
18
+ */
19
+ public function createFile($file){
20
+ try{
21
+ $f=fopen($file,'w');
22
+
23
+ fclose($f);
24
+ if(!file_exists($file)) {
25
+ $this->log("UNBXD_MODULE:Couldn't create the file");
26
+ return false;
27
+ }
28
+ $this->log("UNBXD_MODULE: created the file");
29
+ return true;
30
+ } catch (Exception $ex) {
31
+ $this->log("UNBXD_MODULE:Error while creating the file");
32
+ $this->log($ex->getMessage());
33
+ return false;
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Function to append the contents to the file
39
+ */
40
+ public function appendTofile($fileName, $content){
41
+ try {
42
+ if(file_put_contents($fileName, $content, FILE_APPEND)) {
43
+ return true;
44
+ } else {
45
+ return false;
46
+ }
47
+ } catch(Exception $ex) {
48
+ $this->log("UNBXD_MODULE:Error while appending the contents to feed file");
49
+ $this->log($ex->getMessage());
50
+ return false;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Function to appened the contents to the file
56
+ */
57
+ public function log($content){
58
+ try{
59
+ $resp = file_put_contents($this->logFileName, date('Y-m-d H:i:s').$content."\n", FILE_APPEND);
60
+ if($resp){
61
+ return true;
62
+ } else {
63
+ error_log("UNBXD_MODULE:Error while appending the contents to log file");
64
+ return false;
65
+ }
66
+ return true;
67
+ }catch(Exception $ex) {
68
+ error_log("UNBXD_MODULE:Error while appending the contents to log file");
69
+ Mage::throwException($ex->getMessage());
70
+ return false;
71
+ }
72
+ }
73
+ }
74
+ ?>
app/code/local/Unbxd/Datafeeder/Model/Feed/Jsonbuilder/Jsonbuilder.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Jsonbuilder {
4
+
5
+
6
+
7
+ }
8
+
9
+ ?>
app/code/local/Unbxd/Datafeeder/Model/Feed/Jsonbuilder/Productbuilder.php ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Productbuilder extends Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Jsonbuilder {
4
+
5
+ const DATA_TYPE = "dataType";
6
+ const MULTIVALUED = "multiValued";
7
+ const NUMBER = "number";
8
+ const DECIMAL = "decimal";
9
+ const DATE = "date";
10
+ const IMAGE_HEIGHT = "image_height";
11
+ const IMAGE_WIDTH = "image_width";
12
+ const GENERATE_IMAGE = "generate_image";
13
+
14
+ public function getProducts($collection, $fields) {
15
+ $content='';
16
+ $firstLoop = true;
17
+ foreach($collection as $product) {
18
+ if(!$firstLoop) {
19
+ $content = $content . ",";
20
+ }
21
+
22
+ $productArray = $this->getProduct($product, $fields);
23
+ $productArray = $this->postProcessProduct($productArray, $fields, false);
24
+ $content=$content.json_encode($productArray);
25
+
26
+ $firstLoop = false;
27
+ }
28
+
29
+ return rtrim($content, ",");
30
+ }
31
+
32
+ public function getProduct($product, $fields, $childProduct = false) {
33
+
34
+ $productArray =array();
35
+
36
+ foreach($product->getData('') as $columnHeader=>$columndata){
37
+
38
+ if($childProduct) {
39
+ $unbxdFieldName = $columnHeader . "Associated";
40
+ if ($columnHeader == "gender") {
41
+ $unbxdFieldName = "_gender";
42
+ }
43
+ } else {
44
+ $unbxdFieldName = $columnHeader;
45
+ if ($columnHeader == "gender") {
46
+ $unbxdFieldName = "_gender";
47
+ }
48
+ }
49
+ if(!array_key_exists($unbxdFieldName, $fields)) {
50
+ continue;
51
+ }
52
+
53
+ if($columnHeader=="entity_id"){
54
+ $productArray['uniqueId'] = $columndata;
55
+ }
56
+
57
+ if($columnHeader=="url_path"){
58
+ // handling the url
59
+ $productArray['url_path'.($childProduct?"Associated":"")] = Mage::getUrl('').$columndata;
60
+ } else if (Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->isImage($columnHeader)) {
61
+ if($fields[$unbxdFieldName][self::GENERATE_IMAGE] == "1") {
62
+ try {
63
+ $productArray[$unbxdFieldName] = (string)Mage::helper('catalog/image')->init($product, $columnHeader)
64
+ ->resize($fields[$unbxdFieldName][self::IMAGE_WIDTH],$fields[$unbxdFieldName][self::IMAGE_HEIGHT]);
65
+ } catch (Exception $e) {
66
+
67
+ error_log("Error while fetching the image" . $e->getTraceAsString());
68
+ }
69
+ } else {
70
+ $productArray[$unbxdFieldName] = $columndata;
71
+ }
72
+ } else if( Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->isMultiSelect($columnHeader)){
73
+ // handling the array
74
+ $data = explode(",", $columndata);
75
+ $attributeModel = Mage::getResourceSingleton("datafeeder/attribute");
76
+ foreach( $data as $eachdata){
77
+ $attributeValue = $attributeModel ->getAttributeValue($columnHeader, trim($eachdata), $product);
78
+ $valueArray = array();;
79
+ $valueArray[] = $attributeModel ->getAttributeValue($columnHeader, trim($eachdata), $product);
80
+ $productArray[$unbxdFieldName] = $valueArray;
81
+ }
82
+ } else if($columnHeader == "category_id"){
83
+ if(!isset($columndata)){
84
+ continue;
85
+ }
86
+ $categoryIds = explode(",",$columndata);
87
+ foreach($categoryIds as $categoryId){
88
+ $productArray[$unbxdFieldName] = trim($categoryId);
89
+ $productArray["category".($childProduct?"Associated":"")] = $this->getCategoryName(trim($categoryId));
90
+ }
91
+
92
+ } else if (is_array($columndata)){
93
+ $productArray[$unbxdFieldName] = $columndata;
94
+ } else if ($columndata instanceof Varien_Object){
95
+ $productArray[$unbxdFieldName] = $columndata->getData();
96
+ } else {
97
+ $productArray[$unbxdFieldName] = $columndata;
98
+ }
99
+ }
100
+ if(!$childProduct) {
101
+ $productArray = $this->addChildrens($product, $fields, $productArray);
102
+ }
103
+ return $productArray;
104
+ }
105
+
106
+ public function addChildrens($product, $fields, $productArray) {
107
+ $type = $product->getData('type_id');
108
+ if ($type == "configurable" || $type == "grouped" ) {
109
+ $associatedProducts = [];
110
+ $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($product);
111
+ $simple_collection = $conf->getUsedProductCollection()->addAttributeToSelect('*')->addFilterByRequiredOptions();
112
+ foreach ($simple_collection as $sp)
113
+ {
114
+ $childProduct = $this->getProduct($sp, $fields, true);
115
+ $childProduct = $this->postProcessProduct($childProduct, $fields, true);
116
+ $associatedProducts[] = $childProduct;
117
+ }
118
+
119
+ $productArray["associatedProducts"] = $associatedProducts;
120
+ return $productArray;
121
+ } else {
122
+ return $productArray;
123
+ }
124
+ }
125
+
126
+ public function postProcessProduct($product, $fields, $childExists=false) {
127
+ if($childExists) {
128
+ $product = $this->convertMultivalued($product);
129
+ } else {
130
+ $product = $this->convertMultivalued($product, $fields);
131
+ }
132
+ $product = $this->convertDataType($product, $fields, $childExists);
133
+ return $product;
134
+ }
135
+
136
+ public function convertDataType($product, $fields, $childExists) {
137
+ foreach($product as $field => $value) {
138
+ if($field != "associatedProducts") {
139
+ $product[$field] = $this->convertDataTypeByValue($fields[$field], $fieldName, $value);
140
+ }
141
+ }
142
+ return $product;
143
+ }
144
+
145
+ public function convertDataTypeByValue($data_type, $fieldName, $value) {
146
+ if($data_type[self::DATA_TYPE] == self::DECIMAL) {
147
+ if(is_array($value)) {
148
+ $valueAsAnArray = array();
149
+ foreach ($value as $eachValue) {
150
+ $valueAsAnArray[] = floatval($eachValue);
151
+ }
152
+ return $valueAsAnArray;
153
+ } else {
154
+ return floatval($value);
155
+ }
156
+ } else if ($data_type[self::DATA_TYPE] == self::NUMBER) {
157
+ if(is_array($value)) {
158
+ $valueAsAnArray = array();
159
+ foreach ($value as $eachValue) {
160
+ $valueAsAnArray[] = intval($eachValue);
161
+ }
162
+ return $valueAsAnArray;
163
+ } else {
164
+ return intval($value);
165
+ }
166
+ } else if ($data_type[self::DATA_TYPE] == self::DATE) {
167
+ $tokens = explode(" ",$value);
168
+ $value = $tokens[0].'T'.$tokens[1].'Z';
169
+ return $value;
170
+ }
171
+ return $value;
172
+ }
173
+
174
+ public function convertMultivalued($product, $fields = null) {
175
+ foreach($product as $field=>$value) {
176
+ if((is_null($fields) || ($fields[$field][self::MULTIVALUED] && $fields[$field][self::MULTIVALUED]))
177
+ && !is_array($value) && ($field != "associatedProducts")) {
178
+ $valueAsAnArray = array();
179
+ $valueAsAnArray[] = $value;
180
+ $product[$field] = $valueAsAnArray;
181
+ }
182
+ }
183
+ return $product;
184
+ }
185
+
186
+ }
187
+
188
+ ?>
app/code/local/Unbxd/Datafeeder/Model/Feed/Jsonbuilder/Schemabuilder.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Schemabuilder extends Unbxd_Datafeeder_Model_Feed_Jsonbuilder_Jsonbuilder {
4
+
5
+
6
+ const SCHEMA = 'schema';
7
+ const FIELD_NAME = "fieldName";
8
+ const DATA_TYPE = "dataType";
9
+ const MULTIVALUED = "multiValued";
10
+ const AUTOSUGGEST = "autoSuggest";
11
+ const TRUE = "true";
12
+ const FALSE = "false";
13
+
14
+ const FIELD_STATUS = 'status';
15
+ const FIELD_DATA_TYPE = 'data_type';
16
+ const FIELD_AUTOSUGGEST = 'autosuggest';
17
+
18
+ public function getSchema($fields) {
19
+ $jsonString = "";
20
+ $fieldList = array();
21
+ $featuredFields = Mage::getResourceSingleton("datafeeder/field")->getFeaturedFields();
22
+ foreach($fields as $fieldName=>$values ) {
23
+ if($values[self::FIELD_STATUS] == 1 || !array_key_exists($fieldName, $featuredFields) ) {
24
+ $fieldList[] = array(self::FIELD_NAME => $fieldName,
25
+ self::DATA_TYPE => $values[self::FIELD_DATA_TYPE],
26
+ self::MULTIVALUED => ($this->endsWith($fieldName, "Associated")?self::TRUE:(Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->isMultiSelect(($fieldName == "_gender")?"gender":$fieldName)?
27
+ self::TRUE:self::FALSE)),
28
+ self::AUTOSUGGEST => ($values[self::FIELD_AUTOSUGGEST] == 1?
29
+ self::TRUE: self::FALSE));
30
+ }
31
+ }
32
+ return json_encode($fieldList);
33
+ }
34
+
35
+
36
+ function endsWith($haystack, $needle)
37
+ {
38
+ return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
39
+ }
40
+ }
41
+
42
+ ?>
app/code/local/Unbxd/Datafeeder/Model/Mysql4/Field.php CHANGED
@@ -2,6 +2,18 @@
2
 
3
  class Unbxd_Datafeeder_Model_Mysql4_Field extends Mage_Core_Model_Mysql4_Abstract
4
  {
 
 
 
 
 
 
 
 
 
 
 
 
5
  protected function _construct()
6
  {
7
  $this->_init('datafeeder/field', 'field_id');
@@ -10,19 +22,29 @@ class Unbxd_Datafeeder_Model_Mysql4_Field extends Mage_Core_Model_Mysql4_Abstrac
10
  /*
11
  * Method to get Unbxd Fields Configuration as Mapping give the site
12
  */
13
- public function getFieldMapping($site) {
14
- $results = Mage::getModel('datafeeder/field')->getCollection()->addFieldToFilter("site", $site);
15
  $fieldMapping = [];
16
  $_reader = Mage::getSingleton('core/resource')->getConnection('core_read');
17
- $table = $_reader->getTableName('unbxd_search_field');
18
  $select = $_reader->select();
19
  $select->from($table);
20
- $select->where("site = '" . $site. "'");
 
 
 
21
 
 
22
  $results = $_reader->fetchAll($select);
23
 
24
  foreach($results as $eachResult) {
25
- $fieldMapping[$eachResult["name"]]=$eachResult['status'];
 
 
 
 
 
 
26
  }
27
  return $fieldMapping;
28
  }
@@ -35,10 +57,28 @@ class Unbxd_Datafeeder_Model_Mysql4_Field extends Mage_Core_Model_Mysql4_Abstrac
35
  $deltaUpdate =[];
36
  $attributes = Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->getAttributes();
37
  foreach($attributes as $attribute){
38
- if (!array_key_exists($attribute->getAttributeCode(), $fieldMapping)) {
39
- $deltaUpdate[$attribute->getAttributeCode()] = "1";
40
- $fieldMapping[$attribute->getAttributeCode()] = "1";
 
 
 
 
 
 
 
 
 
41
  }
 
 
 
 
 
 
 
 
 
42
  }
43
  if(sizeof($deltaUpdate) > 0) {
44
  $this->saveField($deltaUpdate, $site);
@@ -51,8 +91,20 @@ class Unbxd_Datafeeder_Model_Mysql4_Field extends Mage_Core_Model_Mysql4_Abstrac
51
  */
52
  public function updateFields($fieldMapping, $site) {
53
  $write = Mage::getSingleton('core/resource')->getConnection('core_write');
54
- foreach($fieldMapping as $fieldName=>$status) {
55
- $write->update($write->getTableName("unbxd_search_field"), array("status" => $status), "site='".$site."' AND name='".$fieldName."'");
 
 
 
 
 
 
 
 
 
 
 
 
56
  }
57
  }
58
 
@@ -64,31 +116,59 @@ class Unbxd_Datafeeder_Model_Mysql4_Field extends Mage_Core_Model_Mysql4_Abstrac
64
  $insertingRequestArray = [];
65
  foreach($fieldMapping as $field=>$value) {
66
  $insertingRequest = [];
67
- $insertingRequest["name"] = $field;
68
- $insertingRequest["status"] = $value;
69
- $insertingRequest["site"] = $site;
 
 
 
 
 
70
  $insertingRequestArray[] = $insertingRequest;
71
  }
72
 
73
- $write->insertMultiple($write->getTableName("unbxd_search_field"), $insertingRequestArray);
74
  }
75
 
76
  /*
77
- * method to get All Enabled fields
78
  */
79
- public function getEnabledFields($site) {
80
- $results = Mage::getModel('datafeeder/field')->getCollection()->addFieldToFilter("site", $site);
81
- $fields = [];
82
- $_reader = Mage::getSingleton('core/resource')->getConnection('core_read');
83
- $table = $_reader->getTableName('unbxd_search_field');
84
- $select = $_reader->select();
85
- $select->from($table);
86
- $select->where("site = '" . $site. "' AND status='1'");
87
- $results = $_reader->fetchAll($select);
88
- foreach($results as $eachResult) {
89
- $fields[]=$eachResult["name"];
90
- }
91
- return $fields;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  }
93
  }
94
- ?>
2
 
3
  class Unbxd_Datafeeder_Model_Mysql4_Field extends Mage_Core_Model_Mysql4_Abstract
4
  {
5
+
6
+ const STATUS = 'status';
7
+ const DATA_TYPE = 'data_type';
8
+ const SITE = 'site';
9
+ const FIELD_NAME = "name";
10
+ const TABLE_NAME = 'unbxd_field';
11
+ const AUTOSUGGEST = 'autosuggest';
12
+ const MULTIVALUED = 'multiValued';
13
+ const IMAGE_HEIGHT = "image_height";
14
+ const IMAGE_WIDTH = "image_width";
15
+ const GENERATE_IMAGE = "generate_image";
16
+
17
  protected function _construct()
18
  {
19
  $this->_init('datafeeder/field', 'field_id');
22
  /*
23
  * Method to get Unbxd Fields Configuration as Mapping give the site
24
  */
25
+ public function getFieldMapping($site, $enabledFields = false) {
26
+ $results = Mage::getModel('datafeeder/field')->getCollection()->addFieldToFilter(self::SITE, $site);
27
  $fieldMapping = [];
28
  $_reader = Mage::getSingleton('core/resource')->getConnection('core_read');
29
+ $table = $_reader->getTableName(self::TABLE_NAME);
30
  $select = $_reader->select();
31
  $select->from($table);
32
+ $filterCond = self::SITE . " = '" . $site . "'";
33
+ if($enabledFields) {
34
+ $filterCond = $filterCond . " AND " . self::STATUS ."='1'";
35
+ }
36
 
37
+ $select->where($filterCond);
38
  $results = $_reader->fetchAll($select);
39
 
40
  foreach($results as $eachResult) {
41
+ $fieldMapping[$eachResult[self::FIELD_NAME]] = array(self::STATUS => $eachResult[self::STATUS],
42
+ self::DATA_TYPE => $eachResult[self::DATA_TYPE],
43
+ self::AUTOSUGGEST => $eachResult[self::AUTOSUGGEST],
44
+ self::IMAGE_HEIGHT =>$eachResult[self::IMAGE_HEIGHT],
45
+ self::IMAGE_WIDTH => $eachResult[self::IMAGE_WIDTH],
46
+ self::GENERATE_IMAGE =>$eachResult[self::GENERATE_IMAGE]
47
+ );
48
  }
49
  return $fieldMapping;
50
  }
57
  $deltaUpdate =[];
58
  $attributes = Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->getAttributes();
59
  foreach($attributes as $attribute){
60
+ $fieldName = $attribute->getAttributeCode();
61
+ if ($fieldName == "gender") {
62
+ $fieldName = "_gender";
63
+ }
64
+ if (!array_key_exists($fieldName, $fieldMapping)) {
65
+ $deltaUpdate[$fieldName] = array(self::STATUS => 1, self::DATA_TYPE => 'longText');
66
+ $fieldMapping[$fieldName] = array(self::STATUS => 1,
67
+ self::DATA_TYPE => 'longText',
68
+ self::AUTOSUGGEST => 1,
69
+ self::IMAGE_HEIGHT => 0,
70
+ self::IMAGE_WIDTH =>0,
71
+ self::GENERATE_IMAGE =>0);
72
  }
73
+ if(!array_key_exists($fieldName."Associated", $fieldMapping)) {
74
+ $deltaUpdate[$fieldName."Associated"] = array(self::STATUS => 0, self::DATA_TYPE => 'longText');
75
+ $fieldMapping[$fieldName."Associated"] = array(self::STATUS => 0,
76
+ self::DATA_TYPE => 'longText',
77
+ self::AUTOSUGGEST => 1,
78
+ self::IMAGE_HEIGHT => 0,
79
+ self::IMAGE_WIDTH =>0,
80
+ self::GENERATE_IMAGE =>0);
81
+ }
82
  }
83
  if(sizeof($deltaUpdate) > 0) {
84
  $this->saveField($deltaUpdate, $site);
91
  */
92
  public function updateFields($fieldMapping, $site) {
93
  $write = Mage::getSingleton('core/resource')->getConnection('core_write');
94
+ foreach($fieldMapping as $fieldName=>$values) {
95
+ $values = json_decode($values, true);
96
+ if (!isset($values[self::STATUS]) || !isset($values[self::DATA_TYPE]) ||
97
+ !($values[self::STATUS] == 0 || $values[self::STATUS] == 1)) {
98
+ throw new Exception("Invalid data with field " . $fieldName);
99
+ }
100
+ $write->update($write->getTableName(self::TABLE_NAME),
101
+ array(self::STATUS => $values[self::STATUS],
102
+ self::DATA_TYPE => $values[self::DATA_TYPE],
103
+ self::AUTOSUGGEST => $values[self::AUTOSUGGEST],
104
+ self::IMAGE_HEIGHT => $values[self::IMAGE_HEIGHT],
105
+ self::IMAGE_WIDTH =>$values[self::IMAGE_WIDTH],
106
+ self::GENERATE_IMAGE =>$values[self::GENERATE_IMAGE]),
107
+ self::SITE . "='". $site . "' AND " . self::FIELD_NAME . "='".$fieldName."'");
108
  }
109
  }
110
 
116
  $insertingRequestArray = [];
117
  foreach($fieldMapping as $field=>$value) {
118
  $insertingRequest = [];
119
+ $insertingRequest[self::FIELD_NAME] = $field;
120
+ $insertingRequest[self::STATUS] = $value[self::STATUS];
121
+ $insertingRequest[self::SITE] = $site;
122
+ $insertingRequest[self::DATA_TYPE] = $value[self::DATA_TYPE];
123
+ $insertingRequest[self::AUTOSUGGEST] = $value[self::AUTOSUGGEST];
124
+ $insertingRequest[self::IMAGE_HEIGHT] = $value[self::IMAGE_HEIGHT];
125
+ $insertingRequest[self::IMAGE_WIDTH] = $value[self::IMAGE_WIDTH];
126
+ $insertingRequest[self::GENERATE_IMAGE] = $value[self::GENERATE_IMAGE];
127
  $insertingRequestArray[] = $insertingRequest;
128
  }
129
 
130
+ $write->insertMultiple($write->getTableName(self::TABLE_NAME), $insertingRequestArray);
131
  }
132
 
133
  /*
134
+ * method to get the featured fields
135
  */
136
+ public function getFeaturedFields() {
137
+ $featuredFields = array();
138
+ $featuredFields["uniqueId"]=$this->getField("text", "false", "false");
139
+ $featuredFields["sellingPrice"]=$this->getField("decimal", "false", "false");
140
+ $featuredFields["discount"]=$this->getField("decimal", "false", "false");
141
+ $featuredFields["rating"]=$this->getField("decimal", "false", "false");
142
+ $featuredFields["brandId"]=$this->getField("text", "false", "false");
143
+ $featuredFields["catlevel1Name"]=$this->getField("text", "false", "false");
144
+ $featuredFields["catlevel2Name"]=$this->getField("text", "false", "false");
145
+ $featuredFields["catlevel3Name"]=$this->getField("text", "false", "false");
146
+ $featuredFields["catlevel4Name"]=$this->getField("text", "false", "false");
147
+ $featuredFields["catlevel1Id"]=$this->getField("text", "false", "false");
148
+ $featuredFields["catlevel2Id"]=$this->getField("text", "false", "false");
149
+ $featuredFields["catlevel3Id"]=$this->getField("text", "false", "false");
150
+ $featuredFields["catlevel4Id"]=$this->getField("text", "false", "false");
151
+ $featuredFields["category"]=$this->getField("text", "true", "true");
152
+ $featuredFields["subCategory"]=$this->getField("text", "true", "true");
153
+ $featuredFields["color"]=$this->getField("text", "true", "false");
154
+ $featuredFields["size"]=$this->getField("text", "true", "false");
155
+ $featuredFields["availability"]=$this->getField("bool", "false", "false");
156
+ $featuredFields["description"]=$this->getField("longText", "false", "false");
157
+ $featuredFields["imageUrl"]=$this->getField("link", "true", "false");
158
+ $featuredFields["productUrl"]=$this->getField("link", "false", "false");
159
+ $featuredFields["brand"]=$this->getField("text", "false", "true");
160
+ $featuredFields["price"]=$this->getField("decimal", "false", "false");
161
+ $featuredFields["title"]=$this->getField("text", "false", "true");
162
+ $featuredFields["gender"]=$this->getField("text", "false", "false");
163
+ $featuredFields["unbxdVisibility"]=$this->getField("text", "false", "false");
164
+ return $featuredFields;
165
+ }
166
+
167
+ private function getField($dataType, $multiValued, $autosuggest) {
168
+ return array( self::DATA_TYPE => $dataType,
169
+ self::MULTIVALUED => ($multiValued=="true")?1:0,
170
+ self::AUTOSUGGEST => ($autosuggest=="true")?1:0 );
171
+
172
  }
173
  }
174
+ ?>
app/code/local/Unbxd/Datafeeder/controllers/FieldController.php CHANGED
@@ -8,23 +8,43 @@ class Unbxd_Datafeeder_FieldController extends Mage_Core_Controller_Front_Actio
8
  public function configAction() {
9
  $site=$this->getRequest()->getParam("site");
10
  if(!isset($site)){
11
- $site="Main Website";
 
12
  }
13
  $fields = Mage::getResourceSingleton(self::FIELD_MODEL)->getFields($site);
 
 
 
 
 
 
 
14
  echo json_encode($fields);
15
  }
16
 
17
  public function saveAction()
18
  {
19
  $params=$this->getRequest()->getParams();
20
- if(!isset($params["site_name"])) {
21
- echo json_encode(array("success"=>"false", "message"=>"Site doesnt exists"));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  return;
23
  }
24
- $site = $params["site_name"];
25
- unset($params["site_name"]);
26
- unset($params["form_key"]);
27
- $fields = Mage::getResourceSingleton(self::FIELD_MODEL)->updateFields($params,$site);
28
  echo json_encode(array("success"=>"true"));
29
  }
30
  }
8
  public function configAction() {
9
  $site=$this->getRequest()->getParam("site");
10
  if(!isset($site)){
11
+ echo '{"failed": "no site sent"}';
12
+ return;
13
  }
14
  $fields = Mage::getResourceSingleton(self::FIELD_MODEL)->getFields($site);
15
+ foreach ($fields as $field => $value) {
16
+ if (Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper')->isImage($field)) {
17
+
18
+ $value["is_image"] = "true";
19
+ $fields[$field] = $value;
20
+ }
21
+ }
22
  echo json_encode($fields);
23
  }
24
 
25
  public function saveAction()
26
  {
27
  $params=$this->getRequest()->getParams();
28
+ if(!isset($params) || count($params) == 0) {
29
+ echo json_encode(array("success"=>"false", "message"=>"No Fields Passed"));
30
+ return;
31
+ }
32
+ $singleProductData = json_decode(reset($params), true);
33
+ if(!isset($singleProductData)) {
34
+ echo json_encode(array("success"=>"false", "message"=>"Improper Data format"));
35
+ return;
36
+ }
37
+ $site = $singleProductData["site_name"];
38
+ if (!isset($site)) {
39
+ echo json_encode(array("success"=>"false", "message"=>"site needed"));
40
+ return;
41
+ }
42
+ try {
43
+ $fields = Mage::getResourceSingleton(self::FIELD_MODEL)->updateFields($params,$site);
44
+ } catch(Exception $ex) {
45
+ echo json_encode(array("success"=>"false", "message" => $ex));
46
  return;
47
  }
 
 
 
 
48
  echo json_encode(array("success"=>"true"));
49
  }
50
  }
app/code/local/Unbxd/Datafeeder/controllers/IndexController.php CHANGED
@@ -27,7 +27,6 @@ class Unbxd_Datafeeder_IndexController extends Mage_Adminhtml_Controller_Action
27
 
28
  public function indexAction()
29
  {
30
- error_log("index actions");
31
  $this->loadLayout();
32
  $this->_addContent($this->getLayout()->createBlock('unbxd_datafeeder/index')->setTemplate('datafeeder/conf.phtml'));
33
  $this->renderLayout();
@@ -37,7 +36,8 @@ class Unbxd_Datafeeder_IndexController extends Mage_Adminhtml_Controller_Action
37
  $_helper=Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper');
38
  $fromdate="1970-01-01 00:00:00";
39
  $site=$this->getRequest()->getPost("site");
40
- $_helper->indexUnbxdFeed($fromdate,$site);
 
41
  echo "Done";
42
  }
43
 
@@ -58,4 +58,4 @@ class Unbxd_Datafeeder_IndexController extends Mage_Adminhtml_Controller_Action
58
  $_helper->indexUnbxdFeed($fromdate,$site);
59
  echo "Done";
60
  }
61
- } ?>
27
 
28
  public function indexAction()
29
  {
 
30
  $this->loadLayout();
31
  $this->_addContent($this->getLayout()->createBlock('unbxd_datafeeder/index')->setTemplate('datafeeder/conf.phtml'));
32
  $this->renderLayout();
36
  $_helper=Mage::helper('unbxd_datafeeder/UnbxdIndexingHelper');
37
  $fromdate="1970-01-01 00:00:00";
38
  $site=$this->getRequest()->getPost("site");
39
+ //$_helper->indexUnbxdFeed($fromdate,$site);
40
+ Mage::getSingleton('unbxd_datafeeder/feed_feedmanager')->process($fromdate,$site);
41
  echo "Done";
42
  }
43
 
58
  $_helper->indexUnbxdFeed($fromdate,$site);
59
  echo "Done";
60
  }
61
+ } ?>
app/code/local/Unbxd/Datafeeder/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Unbxd_Datafeeder>
5
- <version>0.1.0</version>
6
  </Unbxd_Datafeeder>
7
  </modules>
8
  <frontend>
@@ -90,7 +90,7 @@
90
  <table>unbxd_datafeeder_conf</table>
91
  </conf>
92
  <field>
93
- <table>unbxd_search_field</table>
94
  </field>
95
  </entities>
96
  </datafeeder_mysql4>
2
  <config>
3
  <modules>
4
  <Unbxd_Datafeeder>
5
+ <version>1.0.5</version>
6
  </Unbxd_Datafeeder>
7
  </modules>
8
  <frontend>
90
  <table>unbxd_datafeeder_conf</table>
91
  </conf>
92
  <field>
93
+ <table>unbxd_field</table>
94
  </field>
95
  </entities>
96
  </datafeeder_mysql4>
app/code/local/Unbxd/Datafeeder/sql/datafeeder_setup/mysql4-install-0.1.0.php DELETED
@@ -1,36 +0,0 @@
1
- <?php
2
-
3
-
4
- $installer = $this;
5
- /* @var $installer Mage_Core_Model_Resource_Setup */
6
-
7
- $installer->startSetup();
8
-
9
- $installer->run("
10
-
11
- DROP TABLE IF EXISTS `{$installer->getTable('unbxd_search_field')}`;
12
-
13
- CREATE TABLE `{$installer->getTable('unbxd_search_field')}` (
14
- `field_id` int(10) unsigned NOT NULL auto_increment,
15
- `name` varchar(255) NOT NULL default '',
16
- `status` varchar(255),
17
- `site` varchar(255) NOT NULL default '',
18
- PRIMARY KEY (`field_id`)
19
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
20
-
21
-
22
-
23
- DROP TABLE IF EXISTS `{$installer->getTable('unbxd_datafeeder_conf')}`;
24
-
25
- CREATE TABLE `{$installer->getTable('unbxd_datafeeder_conf')}` (
26
- `uconfig_id` int(10) unsigned NOT NULL auto_increment,
27
- `action` varchar(255) NOT NULL default '',
28
- `value` varchar(255),
29
- PRIMARY KEY (`uconfig_id`)
30
-
31
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
32
-
33
- ");
34
- $installer->endSetup();
35
-
36
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/local/Unbxd/Datafeeder/sql/datafeeder_setup/mysql4-install-1.0.5.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ $installer = $this;
5
+ /* @var $installer Mage_Core_Model_Resource_Setup */
6
+
7
+ $installer->startSetup();
8
+
9
+ $installer->run("
10
+
11
+ DROP TABLE IF EXISTS `{$installer->getTable('unbxd_field')}`;
12
+
13
+ CREATE TABLE `{$installer->getTable('unbxd_field')}` (
14
+ `field_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
15
+ `name` varchar(100) NOT NULL DEFAULT '',
16
+ `status` int(1) NOT NULL DEFAULT '1',
17
+ `site` varchar(100) NOT NULL DEFAULT '',
18
+ `data_type` varchar(20) NOT NULL DEFAULT 'longText',
19
+ `autosuggest` int(1) NOT NULL DEFAULT '0',
20
+ `image_height` int(5) NOT NULL DEFAULT '0',
21
+ `image_width` int(5) NOT NULL DEFAULT '0',
22
+ `generate_image` int(1) NOT NULL DEFAULT '0',
23
+ PRIMARY KEY (`field_id`)
24
+ ) ENGINE=InnoDB AUTO_INCREMENT=1670 DEFAULT CHARSET=utf8;
25
+
26
+ DROP TABLE IF EXISTS `{$installer->getTable('unbxd_datafeeder_conf')}`;
27
+
28
+ CREATE TABLE `{$installer->getTable('unbxd_datafeeder_conf')}` (
29
+ `uconfig_id` int(10) unsigned NOT NULL auto_increment,
30
+ `action` varchar(255) NOT NULL default '',
31
+ `value` varchar(255),
32
+ PRIMARY KEY (`uconfig_id`)
33
+
34
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
35
+
36
+ ");
37
+ $installer->endSetup();
38
+
39
+
app/code/local/Unbxd/Datafeeder/sql/datafeeder_setup/mysql4-upgrade-0.1.0-1.0.5.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ $installer = $this;
5
+ /* @var $installer Mage_Core_Model_Resource_Setup */
6
+
7
+ $installer->startSetup();
8
+
9
+ $installer->run("
10
+
11
+ DROP TABLE IF EXISTS `{$installer->getTable('unbxd_field')}`;
12
+
13
+ CREATE TABLE `{$installer->getTable('unbxd_field')}` (
14
+ `field_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
15
+ `name` varchar(100) NOT NULL DEFAULT '',
16
+ `status` int(1) NOT NULL DEFAULT '1',
17
+ `site` varchar(100) NOT NULL DEFAULT '',
18
+ `data_type` varchar(20) NOT NULL DEFAULT 'longText',
19
+ `autosuggest` int(1) NOT NULL DEFAULT '0',
20
+ `image_height` int(5) NOT NULL DEFAULT '0',
21
+ `image_width` int(5) NOT NULL DEFAULT '0',
22
+ `generate_image` int(1) NOT NULL DEFAULT '0',
23
+ PRIMARY KEY (`field_id`)
24
+ ) ENGINE=InnoDB AUTO_INCREMENT=1670 DEFAULT CHARSET=utf8;
25
+
26
+ DROP TABLE IF EXISTS `{$installer->getTable('unbxd_datafeeder_conf')}`;
27
+
28
+ CREATE TABLE `{$installer->getTable('unbxd_datafeeder_conf')}` (
29
+ `uconfig_id` int(10) unsigned NOT NULL auto_increment,
30
+ `action` varchar(255) NOT NULL default '',
31
+ `value` varchar(255),
32
+ PRIMARY KEY (`uconfig_id`)
33
+
34
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
35
+
36
+ ");
37
+ $installer->endSetup();
38
+
39
+
app/design/adminhtml/base/default/template/datafeeder/conf.phtml CHANGED
@@ -10,6 +10,40 @@
10
  .datafeeder-form input[type="text"] {
11
  width: 300px;
12
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  </style>
14
  <script type="text/javascript">
15
  var $jq = jQuery.noConflict();
@@ -36,19 +70,10 @@
36
  </p>
37
 
38
 
39
- <table class="form-list" onload="allset()" id="form-list" name="form-list" cellspacing="0" style="background:none repeat scroll 0 0 #FAFAFA;border=1px solid #D6D6D6;width: 100%;" width="5000px">
40
  <div class="datafeeder-form" width="parent" style="background:none repeat scroll 0 0 #6F8992;padding:5px 10px; color: white;">
41
  FEED CONFIGURATION
42
  </div>
43
- <tr>
44
- <td class="label">
45
- <b>Unbxd Site Name: </b>
46
- </td>
47
- <td class="value">
48
- <input type="text" id="feedName" name="feedName" value="" disabled/>
49
- </td>
50
- </tr>
51
- </tr>
52
  <tr>
53
  <td class="label">
54
  <b>Unbxd Site Key: </b>
@@ -106,7 +131,6 @@
106
  }
107
 
108
  function newajaxcall(ajaxurl){
109
- //createTable('<?php echo $this->getEditUrl();?>');
110
  $jq.ajax({
111
 
112
  url: ajaxurl,
@@ -121,8 +145,6 @@
121
 
122
  if(data.feed !== "empty") $jq('[name=feedName]').val(data.feed); else $jq('[name=feedName]').val("");
123
  if(data.feed !== "empty") $jq('[name=siteName]').val(data.siteName); else $jq('[name=siteName]').val("");
124
-
125
-
126
  },
127
 
128
  fail: function(XMLHttpRequest, textStatus, errorThrown) {
@@ -155,21 +177,214 @@
155
  });
156
  }
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  setInterval(progressbar,10000);
159
  </script>
160
 
161
 
162
- <table class="form-list" width="parent" id="form-list" name="form-list" cellspacing="0" style="background:none repeat scroll 0 0 #FAFAFA;border=1px solid #D6D6D6;width: 100%;">
163
  <div class="datafeeder-form" width="parent" style="background:none repeat scroll 0 0 #6F8992;padding:5px 10px;color: white;">
164
  <div class="refreshDiv" style="float: right;"><span id="ProgressBar"></span><input type="button" id="refresh" onclick="progressbar()" value="REFRESH" style="margin-left: 10px;vertical-align: top;"></div>
165
  <b>UPLOAD &amp; INDEX (manual)</b>
166
  </div>
167
-
168
- <tr>
169
- <td class="label"><b>TAXONOMY UPLOAD: </b></td>
170
- <td class="value"><input type="button" id="taxonomyupload" onclick="makeajaxcall('<?php echo $this->getTaxonomyUploadFormAction(); ?>')" value="START"/></td>
171
- </tr>
172
-
173
 
174
  <tr>
175
  <td class="label"><b>PRODUCT FEED UPLOAD: </b></td>
@@ -185,47 +400,6 @@
185
  <frame name="login_frame"></frame>
186
  </frameset>
187
 
188
- <!-- FIELD CONFIGURATION -->
189
- <script type="text/javascript">
190
- $jq('#config_edit_form').ready(function(){
191
- createTable('<?php echo $this->getEditUrl();?>');
192
- });
193
-
194
- function formSubmit()
195
- {
196
- $jq('[name=site_name]').val($jq('[name=site]').val());
197
- $jq('#config_edit_form').ajaxSubmit();
198
- }
199
-
200
- function createTable(ajaxurl)
201
- {
202
- site= $jq("#site").val();
203
- $jq.ajax({
204
- url: ajaxurl,
205
- type:"POST",
206
- data:{"site":site},
207
- }).done( function(data) {
208
- jarray = $jq.parseJSON(data);
209
- tableString="<tbody>";
210
- $jq("#field-list").find("tr").remove();
211
- $jq.each(jarray, function(key, value) {
212
- tableString+='<tr><td class="label">'+key+"</td>"+'<td class="value">'+'<select name="'+key+'">'+"<option";
213
- if(value=="0"){
214
- tableString+=' selected="selected"';
215
- }
216
- tableString+=' value="0">Disabled</option><option';
217
- if(value!="0"){
218
- tableString+=' selected="selected"';
219
- }
220
- tableString+=' value="1">Enabled</option></select></td>';
221
- tableString+='<td class="scope-label"></td><td class=""></td></tr>'
222
- });
223
- tableString+="</tbody>";
224
- $jq('#field-list').append(tableString)
225
- });
226
- }
227
- </script>
228
-
229
  <div class="editconfig">
230
  <div class="content-header">
231
  <table cellspacing="0">
@@ -237,7 +411,7 @@
237
  </h3>
238
  </td>
239
  <td class="form-buttons">
240
- <input type="button" style='background:url("images/btn_bg.gif") repeat-x scroll 0 100% #FFAC47;border-color:#ED6502 #A04300 #A04300 #ED6502;border-style:solid;border-width:1px;color:#FFFFFF;font:bold 12px arial,helvetica,sans-serif;text-align:center !important;white-space:nowrap;padding: 3px;' onclick="formSubmit()" value="SAVE"/>
241
  </td>
242
  </tr>
243
  </table>
@@ -253,7 +427,7 @@
253
  </p>
254
 
255
  <table class="form-list" id="field-list" name="form-list" cellspacing="0" style="color: #2F2F2F;
256
- font: 12px/1.5em Arial,Helvetica,sans-serif; margin-left: 10%;">
257
  </table>
258
 
259
  <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
10
  .datafeeder-form input[type="text"] {
11
  width: 300px;
12
  }
13
+
14
+ .fieldRowSelected {
15
+ background-color: #45b5c1;
16
+ }
17
+
18
+ .text_td {
19
+ padding-top: 6px;
20
+ width: 117px;
21
+ }
22
+
23
+ .plus {
24
+ background:url('http://unbxd.com/img/CircledPlus.png') no-repeat;
25
+ height: 24px;
26
+ width: 24px;
27
+ }
28
+
29
+ .minus {
30
+ background:url('http://unbxd.com/img/CircledMinus.png') no-repeat;
31
+ height: 24px;
32
+ width: 24px;
33
+ }
34
+
35
+ .hidden_image_textBox {
36
+ display: none;
37
+ }
38
+
39
+ .form-list td.value select {
40
+ width: 110px;
41
+ }
42
+
43
+ #field-list td {
44
+ width: 120px;
45
+ }
46
+
47
  </style>
48
  <script type="text/javascript">
49
  var $jq = jQuery.noConflict();
70
  </p>
71
 
72
 
73
+ <table class="form-list" onload="allset()" id="form-list1" name="form-list" cellspacing="0" style="background:none repeat scroll 0 0 #FAFAFA;border=1px solid #D6D6D6;width: 100%;" width="5000px">
74
  <div class="datafeeder-form" width="parent" style="background:none repeat scroll 0 0 #6F8992;padding:5px 10px; color: white;">
75
  FEED CONFIGURATION
76
  </div>
 
 
 
 
 
 
 
 
 
77
  <tr>
78
  <td class="label">
79
  <b>Unbxd Site Key: </b>
131
  }
132
 
133
  function newajaxcall(ajaxurl){
 
134
  $jq.ajax({
135
 
136
  url: ajaxurl,
145
 
146
  if(data.feed !== "empty") $jq('[name=feedName]').val(data.feed); else $jq('[name=feedName]').val("");
147
  if(data.feed !== "empty") $jq('[name=siteName]').val(data.siteName); else $jq('[name=siteName]').val("");
 
 
148
  },
149
 
150
  fail: function(XMLHttpRequest, textStatus, errorThrown) {
177
  });
178
  }
179
 
180
+ $jq('#config_edit_form').ready(function(){
181
+ createTable('<?php echo $this->getEditUrl();?>');
182
+ });
183
+
184
+ function saveFieldConf()
185
+ {
186
+ site = $jq('[name=site]').val();
187
+ fields = {}
188
+ $jq("#field-list").find("tr").each( function() {
189
+ var field = {};
190
+ if ($jq(this).find(".label").text() != "") {
191
+ field["status"] = ($jq(this).find('[name=status]').find(":selected").text() == "Enabled") ? 1 :0;
192
+ field["autosuggest"] = ($jq(this).find('[name=autosuggest]').find(":selected").text() == "Enabled") ? 1 :0;
193
+ field["data_type"] = $jq(this).find('[name=dataType]').find(":selected").text();
194
+ field["site_name"] = $jq('[name=site]').val();
195
+ field["generate_image"] = $jq(this).find('[id=generate_image]').is(':checked')?1:0;
196
+ element = this.querySelector('#image_height');
197
+ if(element) {
198
+ field["image_height"] = element.value;
199
+ }
200
+ element = this.querySelector('#image_width') ;
201
+ if (element) {
202
+ field["image_width"] = element.value;
203
+ }
204
+ fields[$jq(this).find(".label").text()] = JSON.stringify(field);
205
+
206
+ childProductField = {};
207
+ if (this.className == "fieldRowSelected"){
208
+ childProductField["status"] = field["status"];
209
+ } else {
210
+ childProductField["status"] = 0;
211
+ }
212
+ childProductField["autosuggest"] = field["autosuggest"];
213
+ childProductField["data_type"] = field["data_type"];
214
+ childProductField["site_name"] = field["site_name"];
215
+ childProductField["generate_image"] = field["generate_image"];
216
+ childProductField["image_width"] = field["image_width"];
217
+ childProductField["image_height"] = field["image_height"];
218
+ fields[$jq(this).find(".label").text() + "Associated"] = JSON.stringify(childProductField);
219
+
220
+ }
221
+ });
222
+ $jq.ajax({
223
+ url: "<?php echo $this->getSaveFieldUrl();?>",
224
+ timeout:3000,
225
+ type:"POST",
226
+ dataType: "json",
227
+ data:fields
228
+ });
229
+ createTable('<?php echo $this->getEditUrl();?>');
230
+ }
231
+
232
+ function createTable(ajaxurl)
233
+ {
234
+ site= $jq("#site").val();
235
+ $jq.ajax({
236
+ url: ajaxurl,
237
+ type:"POST",
238
+ data:{"site":site},
239
+ }).done( function(data) {
240
+ jarray = $jq.parseJSON(data);
241
+ tableHtml="<tbody>";
242
+ $jq("#field-list").find("tr").remove();
243
+ tableHtml += addFieldConfTableHeader();
244
+ $jq.each(jarray, function(key, value) {
245
+ childExists = false;
246
+ if ((key + "Associated") in jarray && jarray[key + "Associated"]["status"] == "1") {
247
+ childExists = true
248
+ }
249
+ if( key.substr(-10) != "Associated" ) {
250
+ tableHtml += constructRow(key, value, childExists);
251
+ }
252
+ });
253
+ tableHtml+="</tbody>";
254
+ $jq('#field-list').append(tableHtml)
255
+ });
256
+ }
257
+
258
+ function addFieldConfTableHeader() {
259
+ return "<tr>" +
260
+ "<th>Field Name</th>" +
261
+ "<th>Status</th>" +
262
+ "<th>Data Type</th>" +
263
+ "<th>Autosuggest</th>" +
264
+ "<th>Add to configurable product</th>" +
265
+ "<th>Image configuration</th>" +
266
+ '<td class="scope-label"></td>' +
267
+ "</tr>";
268
+ }
269
+
270
+ function constructRow(key, value, childExists) {
271
+ tableString = "";
272
+ tableString += '<tr ' + (childExists?'class="fieldRowSelected"':"") + '>';
273
+ tableString += '<td class="label" name="fieldName"><div class="text_td">'+key+"</div></td>";
274
+ tableString += constructBooleanSelect("status", value);
275
+ tableString += constructDataType(key, value);
276
+ tableString += constructBooleanSelect("autosuggest", value);
277
+ tableString += constructAddToConfigurableFieldList(childExists);
278
+ tableString += constructImageConf(key, value);
279
+ tableString +='</tr>';
280
+ return tableString;
281
+ }
282
+
283
+ function constructImageConf(key, value) {
284
+ if(!("is_image" in value) || value["is_image"] != "true") {
285
+ return "";
286
+ }
287
+ tableString = "";
288
+ tableString += '<td><input type="button" value="EDIT" onclick="editImageConf(this)"/>'
289
+ tableString += '<div class="hidden_image_textBox">';
290
+ image_generation_enabled = (value["generate_image"] == 1)? true : false;
291
+ tableString += '<input id="generate_image" onchange="toggleTextBox(this)" type="checkbox" ' + ((image_generation_enabled)?'checked':'')+'/>';
292
+ tableString += '<input id="image_height" type="text" value="' + value["image_height"]+ '" '+ (image_generation_enabled? '':'disabled')+'"/>';
293
+ tableString += '<input id="image_width" type="text" value="' + value["image_width"]+ '" '+ (image_generation_enabled? '':'disabled')+'"/>';
294
+ tableString += '<input value = "update" type="button" onclick="hideDiv(this);"/>';
295
+ tableString += '</div>';
296
+ tableString += '</td>';
297
+ return tableString;
298
+ }
299
+
300
+ function toggleTextBox(element) {
301
+ active = element.checked ? false: true;
302
+ element.parentElement.children[1].disabled = active;
303
+ element.parentElement.children[2].disabled = active;
304
+ }
305
+
306
+ function hideDiv(element) {
307
+ element.parentElement.parentElement.children[1].className = "hidden_image_textBox";
308
+ element.parentElement.parentElement.children[0].className = "";
309
+ }
310
+
311
+ function editImageConf(element) {
312
+ element.parentElement.children[1].className = "";
313
+ element.className = "hidden_image_textBox";
314
+ }
315
+
316
+ function getRowSelected(element) {
317
+ if(element.parentElement.parentElement.className == "fieldRowSelected") {
318
+ element.parentElement.parentElement.className = "";
319
+ element.children[0].className = "plus";
320
+ return;
321
+ }
322
+ if($jq.find(".fieldRowSelected").length > 10) {
323
+ alert("Cant select more than 10 fields");
324
+ return;
325
+ }
326
+ element.children[0].className = "minus";
327
+ element.parentElement.parentElement.addClassName("fieldRowSelected");
328
+ }
329
+
330
+ function constructAddToConfigurableFieldList(childExists) {
331
+ tableString = '<td><a href="javascript:void(0)" onclick="getRowSelected(this)" title="Add this field in configurable/grouped product">';
332
+ tableString += '<div ';
333
+ if(!childExists) {
334
+ tableString += 'class="plus"';
335
+ } else {
336
+ tableString += 'class="minus"';
337
+ }
338
+ tableString += "/></a></td>";
339
+ return tableString;
340
+ }
341
+
342
+ function constructBooleanSelect(key, value) {
343
+ tableString = '<td class="value"><div class="text_td"><select name=' + key + '>'+"<option";
344
+ if(value[key]=="0"){
345
+ tableString +=' selected="selected"';
346
+ }
347
+ tableString+=' value="0">Disabled</option><option';
348
+ if(value[key]!="0"){
349
+ tableString +=' selected="selected"';
350
+ }
351
+ tableString +=' value="1">Enabled</option></select></div></td>';
352
+ return tableString;
353
+ }
354
+
355
+ function constructDataTypeOption(data_type, compare_data_type) {
356
+ tableString = "<option";
357
+
358
+ if(data_type == compare_data_type){
359
+ tableString +=' selected="selected"';
360
+ }
361
+ tableString+=' value="' + compare_data_type + '">' + compare_data_type + '</option>';
362
+ return tableString;
363
+ }
364
+
365
+ function constructDataType(key, value) {
366
+ tableString = '<td class="value"><div class="text_td"><select name="dataType">';
367
+ tableString += constructDataTypeOption(value["data_type"], "text");
368
+ tableString += constructDataTypeOption(value["data_type"], "longText");
369
+ tableString += constructDataTypeOption(value["data_type"], "link");
370
+ tableString += constructDataTypeOption(value["data_type"], "decimal");
371
+ tableString += constructDataTypeOption(value["data_type"], "number");
372
+ tableString += constructDataTypeOption(value["data_type"], "date");
373
+ //tableString += constructDataTypeOption(value["data_type"], "bool");
374
+
375
+ tableString +='</select></div></td>';
376
+ return tableString;
377
+ }
378
+
379
  setInterval(progressbar,10000);
380
  </script>
381
 
382
 
383
+ <table class="form-list" width="parent" id="form-list2" name="form-list" cellspacing="0" style="background:none repeat scroll 0 0 #FAFAFA;border=1px solid #D6D6D6;width: 100%;">
384
  <div class="datafeeder-form" width="parent" style="background:none repeat scroll 0 0 #6F8992;padding:5px 10px;color: white;">
385
  <div class="refreshDiv" style="float: right;"><span id="ProgressBar"></span><input type="button" id="refresh" onclick="progressbar()" value="REFRESH" style="margin-left: 10px;vertical-align: top;"></div>
386
  <b>UPLOAD &amp; INDEX (manual)</b>
387
  </div>
 
 
 
 
 
 
388
 
389
  <tr>
390
  <td class="label"><b>PRODUCT FEED UPLOAD: </b></td>
400
  <frame name="login_frame"></frame>
401
  </frameset>
402
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
403
  <div class="editconfig">
404
  <div class="content-header">
405
  <table cellspacing="0">
411
  </h3>
412
  </td>
413
  <td class="form-buttons">
414
+ <input type="button" style='background:url("images/btn_bg.gif") repeat-x scroll 0 100% #FFAC47;border-color:#ED6502 #A04300 #A04300 #ED6502;border-style:solid;border-width:1px;color:#FFFFFF;font:bold 12px arial,helvetica,sans-serif;text-align:center !important;white-space:nowrap;padding: 3px;' onclick="saveFieldConf()" value="SAVE"/>
415
  </td>
416
  </tr>
417
  </table>
427
  </p>
428
 
429
  <table class="form-list" id="field-list" name="form-list" cellspacing="0" style="color: #2F2F2F;
430
+ font: 12px/1.5em Arial,Helvetica,sans-serif; margin-left: 1%;">
431
  </table>
432
 
433
  <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
package.xml CHANGED
@@ -1,18 +1,18 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>unbxd_feedconnector</name>
4
- <version>1.0.4</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>pushes the products from the magento to unbxd servers</summary>
10
  <description>pushes the products from the magento to unbxd servers</description>
11
- <notes>Fields Configuration With Custom Site Name issue</notes>
12
  <authors><author><name>ananthesh</name><user>ananthesh</user><email>ananthesh@unbxd.com</email></author></authors>
13
- <date>2014-06-30</date>
14
- <time>11:59:05</time>
15
- <contents><target name="magelocal"><dir name="Unbxd"><dir name="Datafeeder"><dir name="Block"><file name="Edit.php" hash="6cc7e0396c298656c2529d2651bc0ae1"/><file name="Index.php" hash="9114009eae54970145fbb849cfc22dfd"/></dir><dir name="Helper"><file name="AnalyticsHelper.php" hash="5fa89f30aad516326aa623da63de0d25"/><file name="Data.php" hash="2371995c98ae9cd5350f1a27fba7e61f"/><file name="UnbxdIndexingHelper.php" hash="96f78750c5caff618c0123fb8baedbca"/><file name="UnbxdTaxonomyHelper.php" hash="9c16f370fa44807d8524c549c1ddb017"/><file name=".DS_Store" hash="801d9a1a1f478b210726cfc656cec74f"/></dir><dir name="Model"><file name="Attribute.php" hash="88512f545001b669638f6677b3f8b33a"/><file name="Conf.php" hash="b9a9627d779f473b7ab1696fd44a877b"/><file name="Facet.php" hash="a778acee165d1ff0162be6664f4ecf1a"/><file name="Field.php" hash="4206919e3762907aba7d38b39733deba"/><dir name="Mysql4"><file name="Attribute.php" hash="7ec9732a1399db03dec0b6002d1aeb58"/><dir name="Conf"><file name="Collection.php" hash="fa30f58432618d2822ce0e3fe1483efe"/></dir><file name="Conf.php" hash="fc7785946f92585d05005df6ea78cbcb"/><dir name="Field"><file name="Collection.php" hash="5c9a40a3f2df168531c1af18be63bf16"/></dir><file name="Field.php" hash="91e25919139668b47156896f80ef3657"/><dir name="Resource"><file name="Attribute.php" hash="9353baa4f14eeb342de93d20c566bfee"/></dir></dir></dir><dir name="controllers"><file name="ConfigController.php" hash="1ebf102b9a8a97f16e4e57a3d345632d"/><file name="FieldController.php" hash="8407e4c7e059c2b3a6b2ac61f2cf5c7d"/><file name="IndexController.php" hash="5ccbcc94597d5ee53a3b53ff85888cb8"/></dir><dir name="etc"><file name="adminhtml.xml" hash="243eca656901fd022f8119a3ad46b569"/><file name="config.xml" hash="54fc7541334bc64135c471f716129f83"/></dir><dir name="scripts"><file name="Cron.php" hash="087a021cf47794f337e4ce0130b2d3b7"/><file name="abstract.php" hash="757e66bc99da02c274a0d9723923329e"/></dir><dir name="sql"><dir name="datafeeder_setup"><file name="mysql4-install-0.1.0.php" hash="d7d0aae31e449eadd83d83ae2d3d6e68"/></dir></dir><file name=".DS_Store" hash="b4a356bd7741138b66aa79afcc4abd2f"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="template"><dir name="datafeeder"><file name="conf.phtml" hash="ba83184ada65bf4d9117981295457234"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="shell"><file name="UnbxdFeed.php" hash="2b70f51b04c4b62b4a51aca0efae7050"/></dir></target><target name="mageetc"><dir name="modules"><file name="Unbxd_Datafeeder.xml" hash="73f1469ef7c4f5c4eef05900302239de"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>unbxd_feedconnector</name>
4
+ <version>1.0.5</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>pushes the products from the magento to unbxd servers</summary>
10
  <description>pushes the products from the magento to unbxd servers</description>
11
+ <notes>Supporting v2 type of unbxd field</notes>
12
  <authors><author><name>ananthesh</name><user>ananthesh</user><email>ananthesh@unbxd.com</email></author></authors>
13
+ <date>2014-07-03</date>
14
+ <time>19:23:15</time>
15
+ <contents><target name="magelocal"><dir name="Unbxd"><dir name="Datafeeder"><dir name="Block"><file name="Edit.php" hash="6cc7e0396c298656c2529d2651bc0ae1"/><file name="Index.php" hash="9114009eae54970145fbb849cfc22dfd"/></dir><dir name="Helper"><file name="AnalyticsHelper.php" hash="2ede09269c6a5dc4125d06207e740402"/><file name="Data.php" hash="cc32188ca72c365a3177b8439188f4b0"/><file name="UnbxdIndexingHelper.php" hash="116982d19c4dfb3e295a795ad2773a02"/><file name="UnbxdTaxonomyHelper.php" hash="9c16f370fa44807d8524c549c1ddb017"/><file name=".DS_Store" hash="801d9a1a1f478b210726cfc656cec74f"/></dir><dir name="Model"><file name="Attribute.php" hash="88512f545001b669638f6677b3f8b33a"/><file name="Conf.php" hash="b9a9627d779f473b7ab1696fd44a877b"/><file name="Facet.php" hash="a778acee165d1ff0162be6664f4ecf1a"/><dir name="Feed"><file name="Feedcreator.php" hash="3535e6104be33d541011b2b89597199e"/><file name="Feedmanager.php" hash="7480e546e88038163624e61459124848"/><file name="Filemanager.php" hash="5200abf7349679edec7e617619c8d8b3"/><dir name="Jsonbuilder"><file name="Jsonbuilder.php" hash="7e0b5958dd814a7b204317ef4bd487f3"/><file name="Productbuilder.php" hash="e2323a8de707e12c58b1a87c00aeb8b9"/><file name="Schemabuilder.php" hash="57be152e56d6ed90332aaf1350d4b398"/></dir></dir><file name="Field.php" hash="4206919e3762907aba7d38b39733deba"/><dir name="Mysql4"><file name="Attribute.php" hash="7ec9732a1399db03dec0b6002d1aeb58"/><dir name="Conf"><file name="Collection.php" hash="fa30f58432618d2822ce0e3fe1483efe"/></dir><file name="Conf.php" hash="fc7785946f92585d05005df6ea78cbcb"/><dir name="Field"><file name="Collection.php" hash="5c9a40a3f2df168531c1af18be63bf16"/></dir><file name="Field.php" hash="5429c26e0a0955595a72a05b49069641"/><dir name="Resource"><file name="Attribute.php" hash="9353baa4f14eeb342de93d20c566bfee"/></dir></dir></dir><dir name="controllers"><file name="ConfigController.php" hash="1ebf102b9a8a97f16e4e57a3d345632d"/><file name="FieldController.php" hash="675af9d5a98acc39e80a1bd0919b2393"/><file name="IndexController.php" hash="90a2150b94caa81fd598d01f3e0c124b"/></dir><dir name="etc"><file name="adminhtml.xml" hash="243eca656901fd022f8119a3ad46b569"/><file name="config.xml" hash="7c26ae17786870ee2536d68f8d9d868c"/></dir><dir name="scripts"><file name="Cron.php" hash="087a021cf47794f337e4ce0130b2d3b7"/><file name="abstract.php" hash="757e66bc99da02c274a0d9723923329e"/></dir><dir name="sql"><dir name="datafeeder_setup"><file name="mysql4-install-1.0.5.php" hash="f489e0f632f103f372e83b710c810157"/><file name="mysql4-upgrade-0.1.0-1.0.5.php" hash="f489e0f632f103f372e83b710c810157"/></dir></dir><file name=".DS_Store" hash="b4a356bd7741138b66aa79afcc4abd2f"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="template"><dir name="datafeeder"><file name="conf.phtml" hash="d187b3adc64569d84034ffb2c388bad6"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="shell"><file name="UnbxdFeed.php" hash="2b70f51b04c4b62b4a51aca0efae7050"/></dir></target><target name="mageetc"><dir name="modules"><file name="Unbxd_Datafeeder.xml" hash="73f1469ef7c4f5c4eef05900302239de"/></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
  </package>