visual-merchandising-product-listing-campaign-creator - Version 1.5.0

Version Notes

Any questions or concerns, please email cs@tagalys.com and we will get back to you in less than 24 hours.

Download this release

Release Info

Developer Palani
Extension visual-merchandising-product-listing-campaign-creator
Version 1.5.0
Comparing to
See all releases


Code changes from version 1.4.2 to 1.5.0

app/code/community/Tagalys/Core/Block/Adminhtml/Tagalys/Edit.php CHANGED
@@ -24,9 +24,9 @@ class Tagalys_Core_Block_Adminhtml_Tagalys_Edit extends Mage_Adminhtml_Block_Wid
24
 
25
  $setup_status = Mage::getModel('tagalys_core/config')->getTagalysConfig('setup_status');
26
  if ($setup_status == 'completed') {
27
- return $this->__('Configuration');
28
  } else {
29
- return $this->__('Setup');
30
  }
31
  }
32
 
24
 
25
  $setup_status = Mage::getModel('tagalys_core/config')->getTagalysConfig('setup_status');
26
  if ($setup_status == 'completed') {
27
+ return $this->__('Configuration - Need help? Visit <a href="http://support.tagalys.com" target="_blank">http://support.tagalys.com</a>');
28
  } else {
29
+ return $this->__('Setup - Need help? Visit <a href="http://support.tagalys.com" target="_blank">http://support.tagalys.com</a>');
30
  }
31
  }
32
 
app/code/community/Tagalys/Core/Block/Adminhtml/Tagalys/Edit/Tab/Sync.php CHANGED
@@ -23,104 +23,41 @@ class Tagalys_Core_Block_Adminhtml_Tagalys_Edit_Tab_Sync extends Mage_Adminhtml_
23
  'style' => "width:100%",
24
  ));
25
  $init_email->addField('email_note', 'note', array(
26
- 'after_element_html' =>'<b>You can close this screen now. Once setup is complete for all selected stores, you will be notified by email and Tagalys features will be enabled automatically.<br><br>If you have any issues, please <a href="mailto:cs@tagalys.com">email us</a></b>'
27
  ));
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  foreach (Mage::helper('tagalys_core')->getStoresForTagalys() as $key => $store_id) {
31
  $store_sync_fieldset = $form->addFieldset("store_{$store_id}_fieldset", array('legend' => $this->__("Store: " . Mage::getModel('core/store')->load($store_id)->getName())));
32
- $store_setup_complete = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:setup_complete");
33
- $store_sync_fieldset->addField("store_{$store_id}_setup_complete", 'note', array(
34
  'label' => 'Setup complete',
35
- 'text' => (($store_setup_complete == '1') ? 'Yes' : 'No')
 
 
 
 
36
  ));
37
- $store_feed_status = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:feed_status", true);
38
- if ($store_feed_status != null) {
39
- $status_for_client = '';
40
- switch($store_feed_status['status']) {
41
- case 'pending':
42
- $status_for_client = 'Waiting for Cron';
43
- break;
44
- case 'processing':
45
- $status_for_client = 'Processing';
46
- break;
47
- case 'generated_file':
48
- $status_for_client = 'Generated file. Sending to Tagalys.';
49
- break;
50
- case 'sent_to_tagalys':
51
- $status_for_client = 'Waiting for Tagalys';
52
- break;
53
- case 'finished':
54
- $status_for_client = 'Finished';
55
- break;
56
- }
57
- $store_resync_required = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:resync_required");
58
- if ($store_resync_required == '1' && $status_for_client == 'Finished') {
59
- $status_for_client = 'Scheduled';
60
- }
61
- if ($status_for_client == 'Waiting for Cron' && $store_feed_status['completed_count'] > 0) {
62
- $status_for_client = 'In progress. Waiting for Cron.';
63
- }
64
- $store_sync_fieldset->addField("store_{$store_id}_feed_status", 'note', array(
65
- 'label' => 'Feed status',
66
- 'text' => $status_for_client
67
- ));
68
- $updated_at = new DateTime((string)$store_feed_status['updated_at']);
69
- $updated_at->setTimeZone(new DateTimeZone(Mage::getStoreConfig('general/locale/timezone')));
70
- $store_sync_fieldset->addField("store_{$store_id}_feed_updated_at", 'note', array(
71
- 'label' => 'Feed status last changed at',
72
- 'text' => $updated_at->format("F j, Y, g:i a")
73
- ));
74
- }
75
- if ($store_setup_complete == '1') {
76
- $store_updates_status = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:updates_status", true);
77
- $remaining_updates = Mage::getModel('tagalys_core/queue')->getCollection()->count();
78
- if ($store_updates_status != null) {
79
- $status_for_client = '';
80
- switch($store_updates_status['status']) {
81
- case 'pending':
82
- $status_for_client = 'Waiting for Cron';
83
- break;
84
- case 'processing':
85
- $status_for_client = 'Processing';
86
- break;
87
- case 'generated_file':
88
- $status_for_client = 'Generated file. Sending to Tagalys.';
89
- break;
90
- case 'sent_to_tagalys':
91
- $status_for_client = 'Waiting for Tagalys';
92
- break;
93
- case 'finished':
94
- $status_for_client = 'Finished';
95
- break;
96
- }
97
- if (in_array($status_for_client, array('Finished')) && $remaining_updates > 0) {
98
- $status_for_client = 'Waiting for Cron';
99
- }
100
- $store_sync_fieldset->addField("store_{$store_id}_updates_status", 'note', array(
101
- 'label' => 'Updates status',
102
- 'text' => $status_for_client
103
- ));
104
- $updated_at = new DateTime((string)$store_updates_status['updated_at']);
105
- $updated_at->setTimeZone(new DateTimeZone(Mage::getStoreConfig('general/locale/timezone')));
106
- $store_sync_fieldset->addField("store_{$store_id}_updates_updated_at", 'note', array(
107
- 'label' => 'Updates status last changed at',
108
- 'text' => $updated_at->format("F j, Y, g:i a")
109
- ));
110
- } else {
111
- if ($remaining_updates == 0) {
112
- $status_for_client = 'Finished';
113
- } else {
114
- $status_for_client = 'Waiting for Cron';
115
- }
116
- $store_sync_fieldset->addField("store_{$store_id}_updates_status", 'note', array(
117
- 'label' => 'Updates Status',
118
- 'text' => $status_for_client
119
- ));
120
- }
121
- }
122
- $store_sync_fieldset->addField("store_{$store_id}_refresh_status", 'note', array(
123
- 'text' => '<a href="#" class="tagalys-btn" onclick="location.reload(); return false;">Refresh Status</a>'
124
  ));
125
  }
126
 
23
  'style' => "width:100%",
24
  ));
25
  $init_email->addField('email_note', 'note', array(
26
+ 'after_element_html' =>'<b>If you have Cron enabled, sync is automatic. If not, please use the manual sync option and keep this browser window open.<br><br>Once all stores are synced, Tagalys features will be enabled automatically.<br><br>If you have any issues, please <a href="mailto:cs@tagalys.com">email us</a></b>'
27
  ));
28
  }
29
 
30
+ $sync_control_fieldset = $form->addFieldset("sync_control_fieldset", array('legend' => 'Sync'));
31
+ $sync_control_fieldset->addField("sync_status_note", 'note', array(
32
+ 'label' => 'Status',
33
+ 'text' => '<span id="note_sync_status"></span>'
34
+ ));
35
+ $sync_control_fieldset->addField("sync_control_manual_note", 'note', array(
36
+ 'label' => 'Sync Manually',
37
+ 'text' => '<strong>You\'ll have to keep this browser window open and stay connected to the Internet for manual sync to work.</strong>'
38
+ ));
39
+ $sync_control_fieldset->addField("sync_control_manual", 'note', array(
40
+ 'text' => '<a id="tagalys-toggle-manual-sync" href="#" target="_blank" class="tagalys-btn" onclick="tagalysToggleManualSync(); return false;">Sync Now</a>'
41
+ ));
42
+ $sync_control_fieldset->addField("sync_control_auto_note", 'note', array(
43
+ 'label' => 'Sync via Cron',
44
+ 'text' => 'If you have Cron enabled, sync is automatic.'
45
+ ));
46
+
47
+
48
  foreach (Mage::helper('tagalys_core')->getStoresForTagalys() as $key => $store_id) {
49
  $store_sync_fieldset = $form->addFieldset("store_{$store_id}_fieldset", array('legend' => $this->__("Store: " . Mage::getModel('core/store')->load($store_id)->getName())));
50
+ $store_sync_fieldset->addField("store_{$store_id}_note_setup_complete", 'note', array(
 
51
  'label' => 'Setup complete',
52
+ 'text' => '<span id="store_'.$store_id.'_note_setup_complete"></span>'
53
+ ));
54
+ $store_sync_fieldset->addField("store_{$store_id}_note_feed_status", 'note', array(
55
+ 'label' => 'Feed Status',
56
+ 'text' => '<span id="store_'.$store_id.'_note_feed_status"></span>'
57
  ));
58
+ $store_sync_fieldset->addField("store_{$store_id}_note_updates_status", 'note', array(
59
+ 'label' => 'Updates Status',
60
+ 'text' => '<span id="store_'.$store_id.'_note_updates_status"></span>'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  ));
62
  }
63
 
app/code/community/Tagalys/Core/Block/Adminhtml/Tagalys/Edit/Tab/Syncsettings.php CHANGED
@@ -36,43 +36,15 @@ class Tagalys_Core_Block_Adminhtml_Tagalys_Edit_Tab_Syncsettings extends Mage_Ad
36
  'tabindex' => 1
37
  ));
38
 
39
- $setup_status = Mage::getModel('tagalys_core/config')->getTagalysConfig('setup_status');
40
- if ($setup_status == 'complete') {
41
- } else {
42
- $fieldset->addField('agree_cron_enabled', 'checkbox', array(
43
- 'name' => 'Checkbox',
44
- 'checked' => false,
45
- 'onclick' => 'this.value = this.checked ? 1 : 0;',
46
- 'disabled' => false,
47
- 'after_element_html' => '<small>Cron is enabled on this Magento installation.<br><em><b><a target=_blank href="http://devdocs.magento.com/guides/m1x/install/installing_install.html#install-cron">Cron Documentation</a></b></em></small>',
48
- 'tabindex' => 1
49
- ));
50
-
51
- $fieldset->addField('agree_start_sync', 'checkbox', array(
52
- 'name' => 'Checkbox',
53
- 'checked' => false,
54
- 'onclick' => 'this.value = this.checked ? 1 : 0;',
55
- 'disabled' => false,
56
- 'after_element_html' => '<small>I agree to start syncing the selected stores.<br><em><b>We recommend you to do this at low traffic hours.</b></em></small>',
57
- 'tabindex' => 1
58
- ));
59
-
60
- $fieldset->addField('note_checkboxes', 'note', array(
61
- 'text' => $this->__('<em>Please check both checkboxes to continue.</em>'),
62
- ));
63
-
64
- $fieldset->addField('submit', 'submit', array(
65
- 'name' => 'tagalys_submit_action',
66
- 'value' => 'Save & Start Sync',
67
- 'class'=> "tagalys-btn",
68
- 'disabled' => true,
69
- 'style' => "width:100%",
70
- 'onclick' => 'if(this.classList.contains(\'clicked\')) { return false; } else { this.className += \' clicked\'; var that = this; setTimeout(function(){ that.value=\'Please wait…\'; that.disabled=true; }, 50); return true; }',
71
- 'after_element_html' => '<small><em></em></small>',
72
- 'tabindex' => 1
73
- ));
74
-
75
- }
76
 
77
  $this->setForm($form);
78
  return parent::_prepareForm();
36
  'tabindex' => 1
37
  ));
38
 
39
+ $fieldset->addField('submit', 'submit', array(
40
+ 'name' => 'tagalys_submit_action',
41
+ 'value' => 'Save & Continue to Sync',
42
+ 'class'=> "tagalys-btn",
43
+ 'style' => "width:100%",
44
+ 'onclick' => 'if(this.classList.contains(\'clicked\')) { return false; } else { this.className += \' clicked\'; var that = this; setTimeout(function(){ that.value=\'Please wait…\'; that.disabled=true; }, 50); return true; }',
45
+ 'after_element_html' => '<small><em></em></small>',
46
+ 'tabindex' => 1
47
+ ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
  $this->setForm($form);
50
  return parent::_prepareForm();
app/code/community/Tagalys/Core/Helper/SyncFile.php CHANGED
@@ -41,31 +41,11 @@ class Tagalys_Core_Helper_SyncFile extends Varien_Io_File {
41
  }
42
  }
43
 
44
- public function resyncCron() {
45
- $utc_now = new DateTime("now", new DateTimeZone('UTC'));
46
- $time_now = $utc_now->format(DateTime::ATOM);
47
- Mage::getModel('tagalys_core/config')->setTagalysConfig("heartbeat:resyncCron", $time_now);
48
- $stores = Mage::getModel('tagalys_core/config')->getTagalysConfig("stores", true);
49
- if ($stores != NULL) {
50
- foreach ($stores as $i => $store_id) {
51
- $resync_required = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:resync_required");
52
- if ($resync_required == '1') {
53
- $this->triggerFeedForStore($store_id);
54
- Mage::getModel('tagalys_core/config')->setTagalysConfig("store:$store_id:resync_required", '0');
55
- }
56
- }
57
- }
58
- }
59
-
60
- public function cron() {
61
- $utc_now = new DateTime("now", new DateTimeZone('UTC'));
62
- $time_now = $utc_now->format(DateTime::ATOM);
63
- $cron_heartbeat_sent = Mage::getModel('tagalys_core/config')->getTagalysConfig("cron_heartbeat_sent");
64
- if ($cron_heartbeat_sent == false) {
65
- Mage::getSingleton('tagalys_core/client')->log('info', 'Cron heartbeat');
66
- $cron_heartbeat_sent = Mage::getModel('tagalys_core/config')->setTagalysConfig("cron_heartbeat_sent", true);
67
  }
68
- Mage::getModel('tagalys_core/config')->setTagalysConfig("heartbeat:cron", $time_now);
69
  $stores = Mage::getModel('tagalys_core/config')->getTagalysConfig("stores", true);
70
  if ($stores != NULL) {
71
  $this->_checkAndSyncConfig();
@@ -77,7 +57,7 @@ class Tagalys_Core_Helper_SyncFile extends Varien_Io_File {
77
  }
78
  $updates_performed = array();
79
  foreach($stores as $i => $store_id) {
80
- $updates_performed[$store_id] = $this->_cronForStore($store_id, $product_ids_from_updates_queue_for_cron_instance);
81
  }
82
  $updates_performed_for_all_stores = true;
83
  foreach ($stores as $i => $store_id) {
@@ -199,7 +179,7 @@ class Tagalys_Core_Helper_SyncFile extends Varien_Io_File {
199
  return $collection;
200
  }
201
 
202
- public function _cronForStore($store_id, $product_ids_from_updates_queue_for_cron_instance) {
203
  $updates_performed = false;
204
  $feed_response = $this->_generateFilePart($store_id, 'feed');
205
  $sync_file_status = $feed_response['sync_file_status'];
41
  }
42
  }
43
 
44
+ public function sync($max_products = 500) {
45
+ $this->cron_instance_max_products = $max_products;
46
+ if ($this->per_page > $max_products) {
47
+ $this->per_page = $max_products;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  }
 
49
  $stores = Mage::getModel('tagalys_core/config')->getTagalysConfig("stores", true);
50
  if ($stores != NULL) {
51
  $this->_checkAndSyncConfig();
57
  }
58
  $updates_performed = array();
59
  foreach($stores as $i => $store_id) {
60
+ $updates_performed[$store_id] = $this->_syncForStore($store_id, $product_ids_from_updates_queue_for_cron_instance);
61
  }
62
  $updates_performed_for_all_stores = true;
63
  foreach ($stores as $i => $store_id) {
179
  return $collection;
180
  }
181
 
182
+ public function _syncForStore($store_id, $product_ids_from_updates_queue_for_cron_instance) {
183
  $updates_performed = false;
184
  $feed_response = $this->_generateFilePart($store_id, 'feed');
185
  $sync_file_status = $feed_response['sync_file_status'];
app/code/community/Tagalys/Core/Model/Observer.php CHANGED
@@ -24,11 +24,31 @@ class Tagalys_Core_Model_Observer extends Varien_Object {
24
  }
25
 
26
  public function syncCron() {
27
- Mage::helper("tagalys_core/SyncFile")->cron();
 
 
 
 
 
 
 
 
28
  }
29
 
30
  public function resyncCron() {
31
- Mage::helper("tagalys_core/SyncFile")->resyncCron();
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
 
34
  // create / update / delete from admin
24
  }
25
 
26
  public function syncCron() {
27
+ $utc_now = new DateTime("now", new DateTimeZone('UTC'));
28
+ $time_now = $utc_now->format(DateTime::ATOM);
29
+ $cron_heartbeat_sent = Mage::getModel('tagalys_core/config')->getTagalysConfig("cron_heartbeat_sent");
30
+ if ($cron_heartbeat_sent == false) {
31
+ Mage::getSingleton('tagalys_core/client')->log('info', 'Cron heartbeat');
32
+ $cron_heartbeat_sent = Mage::getModel('tagalys_core/config')->setTagalysConfig("cron_heartbeat_sent", true);
33
+ }
34
+ Mage::getModel('tagalys_core/config')->setTagalysConfig("heartbeat:cron", $time_now);
35
+ Mage::helper("tagalys_core/SyncFile")->sync();
36
  }
37
 
38
  public function resyncCron() {
39
+ $utc_now = new DateTime("now", new DateTimeZone('UTC'));
40
+ $time_now = $utc_now->format(DateTime::ATOM);
41
+ Mage::getModel('tagalys_core/config')->setTagalysConfig("heartbeat:resyncCron", $time_now);
42
+ $stores = Mage::getModel('tagalys_core/config')->getTagalysConfig("stores", true);
43
+ if ($stores != NULL) {
44
+ foreach ($stores as $i => $store_id) {
45
+ $resync_required = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:resync_required");
46
+ if ($resync_required == '1') {
47
+ $this->triggerFeedForStore($store_id);
48
+ Mage::getModel('tagalys_core/config')->setTagalysConfig("store:$store_id:resync_required", '0');
49
+ }
50
+ }
51
+ }
52
  }
53
 
54
  // create / update / delete from admin
app/code/community/Tagalys/Core/controllers/Adminhtml/TagalysController.php CHANGED
@@ -8,6 +8,7 @@ class Tagalys_Core_Adminhtml_TagalysController extends Mage_Adminhtml_Controller
8
 
9
  public function indexAction() {
10
  $this->_title('Tagalys Configuration');
 
11
  $this->loadLayout();
12
  $this->_setActiveMenu('Tagalys/core');
13
  $this->renderLayout();
@@ -37,7 +38,7 @@ class Tagalys_Core_Adminhtml_TagalysController extends Mage_Adminhtml_Controller
37
  $redirect_to_tab = 'api_credentials';
38
  }
39
  break;
40
- case 'Save & Start Sync':
41
  try {
42
  if (count($params['stores_for_tagalys']) > 0) {
43
  Mage::getSingleton('tagalys_core/client')->log('info', 'Starting configuration sync', array('stores_for_tagalys' => $params['stores_for_tagalys']));
@@ -112,6 +113,138 @@ class Tagalys_Core_Adminhtml_TagalysController extends Mage_Adminhtml_Controller
112
  }
113
  }
114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  protected function _saveApiCredentials($params) {
116
  $tagalys_api_client = Mage::getSingleton("tagalys_core/client");
117
  $result = $tagalys_api_client->identificationCheck(json_decode($params['api_credentials'], true));
8
 
9
  public function indexAction() {
10
  $this->_title('Tagalys Configuration');
11
+ // $this->_getSession()->addNotice($this->__('Need help? Visit <a href="http://support.tagalys.com" target="_blank">http://support.tagalys.com</a>'));
12
  $this->loadLayout();
13
  $this->_setActiveMenu('Tagalys/core');
14
  $this->renderLayout();
38
  $redirect_to_tab = 'api_credentials';
39
  }
40
  break;
41
+ case 'Save & Continue to Sync':
42
  try {
43
  if (count($params['stores_for_tagalys']) > 0) {
44
  Mage::getSingleton('tagalys_core/client')->log('info', 'Starting configuration sync', array('stores_for_tagalys' => $params['stores_for_tagalys']));
113
  }
114
  }
115
 
116
+ public function syncmanuallyAction() {
117
+ Mage::helper("tagalys_core/SyncFile")->sync(25);
118
+ $syncStatus = $this->getSyncStatus();
119
+ $this->getResponse()->setBody(json_encode($syncStatus));
120
+ }
121
+ public function syncstatusAction() {
122
+ $syncStatus = $this->getSyncStatus();
123
+ $this->getResponse()->setBody(json_encode($syncStatus));
124
+ }
125
+
126
+ protected function getSyncStatus() {
127
+ $storesSyncRequired = false;
128
+ $waitingForTagalys = false;
129
+ $resyncScheduled = false;
130
+ $syncStatus = array();
131
+ $setup_status = Mage::getModel('tagalys_core/config')->getTagalysConfig('setup_status');
132
+ $setup_complete = ($setup_status == 'completed');
133
+ $syncStatus['setup_complete'] = $setup_complete;
134
+ $syncStatus['stores'] = array();
135
+ foreach (Mage::helper('tagalys_core')->getStoresForTagalys() as $key => $store_id) {
136
+ $this_store = array();
137
+
138
+ $this_store['name'] = Mage::getModel('core/store')->load($store_id)->getName();
139
+
140
+ $store_setup_complete = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:setup_complete");
141
+ $this_store['setup_complete'] = ($store_setup_complete == '1');
142
+
143
+ $store_feed_status = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:feed_status", true);
144
+ if ($store_feed_status != null) {
145
+ $status_for_client = '';
146
+ switch($store_feed_status['status']) {
147
+ case 'pending':
148
+ $status_for_client = 'Waiting to write to file';
149
+ $storesSyncRequired = true;
150
+ break;
151
+ case 'processing':
152
+ $status_for_client = 'Writing to file';
153
+ $storesSyncRequired = true;
154
+ break;
155
+ case 'generated_file':
156
+ $status_for_client = 'Generated file. Sending to Tagalys.';
157
+ $storesSyncRequired = true;
158
+ break;
159
+ case 'sent_to_tagalys':
160
+ $status_for_client = 'Waiting for Tagalys';
161
+ $waitingForTagalys = true;
162
+ break;
163
+ case 'finished':
164
+ $status_for_client = 'Finished';
165
+ break;
166
+ }
167
+ $store_resync_required = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:resync_required");
168
+ if ($store_resync_required == '1') {
169
+ $resyncScheduled = true;
170
+ if ($status_for_client == 'Finished') {
171
+ $status_for_client = 'Scheduled at 1 AM';
172
+ }
173
+ }
174
+ if ($status_for_client == 'Writing to file' || $status_for_client == 'Waiting to write to file') {
175
+ $completed_percentage = round(((int)$store_feed_status['completed_count'] / (int)$store_feed_status['products_count']) * 100, 2);
176
+ $status_for_client = $status_for_client . ' (completed '.$completed_percentage.'%)';
177
+ }
178
+ $this_store['feed_status'] = $status_for_client;
179
+ } else {
180
+ $storesSyncRequired = true;
181
+ }
182
+
183
+ $store_updates_status = Mage::getModel('tagalys_core/config')->getTagalysConfig("store:$store_id:updates_status", true);
184
+ $remaining_updates = Mage::getModel('tagalys_core/queue')->getCollection()->count();
185
+ if ($this_store['setup_complete']) {
186
+ if ($remaining_updates > 0) {
187
+ $storesSyncRequired = true;
188
+ $this_store['updates_status'] = $remaining_updates . ' remaining';
189
+ } else {
190
+ if ($store_updates_status == null) {
191
+ $this_store['updates_status'] = 'Nothing to update';
192
+ } else {
193
+ switch($store_updates_status['status']) {
194
+ case 'generated_file':
195
+ $this_store['updates_status'] = 'Generated file. Sending to Tagalys.';
196
+ $storesSyncRequired = true;
197
+ break;
198
+ case 'sent_to_tagalys':
199
+ $this_store['updates_status'] = 'Waiting for Tagalys';
200
+ $waitingForTagalys = true;
201
+ break;
202
+ case 'finished':
203
+ $this_store['updates_status'] = 'Finished';
204
+ break;
205
+ }
206
+ }
207
+ }
208
+ } else {
209
+ if ($remaining_updates > 0) {
210
+ $this_store['updates_status'] = 'Waiting for feed sync';
211
+ } else {
212
+ $this_store['updates_status'] = 'Nothing to update';
213
+ }
214
+ }
215
+
216
+ $syncStatus['stores'][$store_id] = $this_store;
217
+ }
218
+ $syncStatus['client_side_work_completed'] = false;
219
+ $config_sync_required = Mage::getModel('tagalys_core/config')->getTagalysConfig('config_sync_required');
220
+ if ($storesSyncRequired == true || $config_sync_required == '1') {
221
+ if ($storesSyncRequired == true) {
222
+ $syncStatus['status'] = 'Stores Sync Pending';
223
+ } else {
224
+ if ($config_sync_required == '1') {
225
+ $syncStatus['status'] = 'Configuration Sync Pending';
226
+ } else {
227
+ // should never come here
228
+ $syncStatus['status'] = 'Pending';
229
+ }
230
+ }
231
+ } else {
232
+ $syncStatus['client_side_work_completed'] = true;
233
+ if ($waitingForTagalys) {
234
+ $syncStatus['waiting_for_tagalys'] = true;
235
+ $syncStatus['status'] = 'Waiting for Tagalys';
236
+ } else {
237
+ $syncStatus['status'] = 'Fully synced';
238
+ }
239
+ }
240
+
241
+ if ($resyncScheduled) {
242
+ $syncStatus['status'] = $syncStatus['status'] . '. Resync scheduled at 1 AM. You can resync manually by using the <strong>Trigger full products resync now</strong> option in the <strong>Support & Troubleshooting</strong> tab and then clicking on the <strong>Sync Manually</strong> button that will show below.';
243
+ }
244
+
245
+ return $syncStatus;
246
+ }
247
+
248
  protected function _saveApiCredentials($params) {
249
  $tagalys_api_client = Mage::getSingleton("tagalys_core/client");
250
  $result = $tagalys_api_client->identificationCheck(json_decode($params['api_credentials'], true));
app/code/community/Tagalys/Core/etc/config.xml CHANGED
@@ -6,7 +6,7 @@
6
  <tagalys>
7
  <package>
8
  <name>Mpages</name>
9
- <version>1.4.2</version>
10
  </package>
11
  </tagalys>
12
  </default>
6
  <tagalys>
7
  <package>
8
  <name>Mpages</name>
9
+ <version>1.5.0</version>
10
  </package>
11
  </tagalys>
12
  </default>
app/design/adminhtml/default/default/layout/tagalys_core.xml CHANGED
@@ -2,14 +2,15 @@
2
  <layout version="0.1.0">
3
  <adminhtml_tagalys_index>
4
  <reference name="head">
5
- <action method="addCss"><name>css/tagalys/tagalys-configuration.css</name></action>
6
- <action method="addJs"><script>tagalys-configuration.js</script></action>
7
  </reference>
8
  <reference name="left">
9
  <block type="tagalys_core/adminhtml_tagalys_edit_tabs" name="tagalys_settings_tabs"/>
10
  </reference>
11
  <reference name="content">
12
  <block type="tagalys_core/adminhtml_tagalys_edit" name="tagalys_settings"/>
 
13
  </reference>
14
  </adminhtml_tagalys_index>
15
  </layout>
2
  <layout version="0.1.0">
3
  <adminhtml_tagalys_index>
4
  <reference name="head">
5
+ <action method="addCss"><name>css/tagalys/tagalys-configuration-v1.css</name></action>
6
+ <action method="addJs"><script>tagalys-configuration-v2.js</script></action>
7
  </reference>
8
  <reference name="left">
9
  <block type="tagalys_core/adminhtml_tagalys_edit_tabs" name="tagalys_settings_tabs"/>
10
  </reference>
11
  <reference name="content">
12
  <block type="tagalys_core/adminhtml_tagalys_edit" name="tagalys_settings"/>
13
+ <block type="core/template" name="tagalys_configuration" output="toHtml" template="tagalys/configuration.phtml"/>
14
  </reference>
15
  </adminhtml_tagalys_index>
16
  </layout>
app/design/adminhtml/default/default/template/tagalys/configuration.phtml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <script>
2
+ var syncManuallyUrl = '<?php echo Mage::helper('adminhtml')->getUrl('adminhtml/tagalys/syncmanually/'); ?>';
3
+ var syncStatusUrl = '<?php echo Mage::helper('adminhtml')->getUrl('adminhtml/tagalys/syncstatus/'); ?>';
4
+ </script>
js/tagalys-configuration-v2.js ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var tagalysManualSyncStarted = false;
2
+ var tagalysClientSideWorkCompleted = false;
3
+ var tagalysWaitingForTagalys = false;
4
+ var tagalysSyncing = false;
5
+ var tagalysLabelStartManualSync = 'Sync Manually';
6
+ var tagalysLabelNothingToSync = 'Nothing to sync';
7
+ var tagalysLabelSyncing = 'Manual sync in progress - do not close browser (click to pause)';
8
+ var tagalysLabelManualSyncWaitingForTagalys = 'Waiting for Tagalys. You can close the browser.';
9
+ var tagalysLabelManualSyncFinished = 'Finished syncing. You can close the browser.';
10
+
11
+ function tagalysInterval(fn, time) {
12
+ var timer = false;
13
+ this.start = function () {
14
+ if (!this.isRunning())
15
+ timer = setInterval(fn, time);
16
+ };
17
+ this.stop = function () {
18
+ clearInterval(timer);
19
+ timer = false;
20
+ };
21
+ this.isRunning = function () {
22
+ return timer !== false;
23
+ };
24
+ }
25
+ var tagalysStatusUpdateInterval = new tagalysInterval(tagalysGetAndUpdateSyncStatus, 5000);
26
+ var tagalysManualSyncIndicatorInterval = new tagalysInterval(tagalysUpdateManualSyncIndicator, 2000);
27
+ var tagalysManualSyncTimeout = false;
28
+
29
+ document.addEventListener("DOMContentLoaded", function (e) {
30
+ tagalysGetAndUpdateSyncStatus();
31
+ });
32
+
33
+ // monitoring
34
+ var tagalysMonitorInterval = new tagalysInterval(tagalysMonitorTimers, 5000);
35
+ tagalysMonitorInterval.start();
36
+ function tagalysMonitorTimers() {
37
+ if (tagalysSyncing) {
38
+ tagalysManualSyncIndicatorInterval.start();
39
+ if (tagalysManualSyncTimeout === false) {
40
+ tagalysManualSyncTimeout = setTimeout(tagalysSyncManually, 100);
41
+ }
42
+ } else {
43
+ tagalysManualSyncIndicatorInterval.stop();
44
+ tagalysStatusUpdateInterval.start();
45
+ }
46
+ }
47
+
48
+
49
+ function tagalysToggleManualSync() {
50
+ if (tagalysSyncing) {
51
+ tagalysStopManualSync();
52
+ } else {
53
+ tagalysStartManualSync();
54
+ }
55
+ }
56
+ function tagalysStopManualSync() {
57
+ tagalysSyncing = false;
58
+
59
+ // stop timer
60
+ if (tagalysManualSyncTimeout === false) {
61
+ // not running. nothing to do.
62
+ } else {
63
+ clearTimeout(tagalysManualSyncTimeout);
64
+ tagalysManualSyncTimeout = false;
65
+ }
66
+ tagalysManualSyncIndicatorInterval.stop();
67
+
68
+ tagalysUpdateSyncButtonLabel();
69
+
70
+ // start updates
71
+ tagalysStatusUpdateInterval.start();
72
+ }
73
+ function tagalysStartManualSync() {
74
+ // stop timer if running
75
+ if (tagalysManualSyncTimeout === false) {
76
+ // not running. nothing to do.
77
+ } else {
78
+ clearTimeout(tagalysManualSyncTimeout);
79
+ tagalysManualSyncTimeout = false;
80
+ }
81
+
82
+ // stop updates
83
+ tagalysStatusUpdateInterval.stop();
84
+
85
+ // start manual sync
86
+ tagalysSyncing = true;
87
+ tagalysManualSyncTimeout = setTimeout(tagalysSyncManually, 100);
88
+ tagalysManualSyncIndicatorInterval.start();
89
+ tagalysUpdateSyncButtonLabel();
90
+ }
91
+ function tagalysUpdateSyncButtonLabel() {
92
+ var toggleButton = document.getElementById('tagalys-toggle-manual-sync');
93
+ if (tagalysSyncing) {
94
+ toggleButton.innerHTML = tagalysLabelSyncing;
95
+ } else {
96
+ if (tagalysClientSideWorkCompleted) {
97
+ if (tagalysWaitingForTagalys) {
98
+ toggleButton.innerHTML = tagalysLabelManualSyncWaitingForTagalys;
99
+ } else {
100
+ if (tagalysManualSyncStarted) {
101
+ toggleButton.innerHTML = tagalysLabelManualSyncFinished;
102
+ } else {
103
+ toggleButton.innerHTML = tagalysLabelNothingToSync;
104
+ }
105
+ }
106
+ } else {
107
+ toggleButton.innerHTML = tagalysLabelStartManualSync;
108
+ }
109
+ }
110
+ }
111
+ function tagalysUpdateManualSyncIndicator() {
112
+ if (tagalysSyncing) {
113
+ var toggleButton = document.getElementById('tagalys-toggle-manual-sync');
114
+ var currentIndicator = toggleButton.innerHTML;
115
+ var currentDotStr = currentIndicator.substr(tagalysLabelSyncing.length, 3);
116
+ var nextDotStr = '...';
117
+ switch(currentDotStr) {
118
+ case '.':
119
+ nextDotStr = '..';
120
+ break;
121
+ case '..':
122
+ nextDotStr = '...';
123
+ break;
124
+ case '...':
125
+ nextDotStr = '.';
126
+ break;
127
+ }
128
+ toggleButton.innerHTML = tagalysLabelSyncing + nextDotStr;
129
+ }
130
+ }
131
+ function tagalysSyncManually() {
132
+ tagalysManualSyncStarted = true;
133
+ if (tagalysSyncing) {
134
+ new Ajax.Request(
135
+ syncManuallyUrl,
136
+ {
137
+ method: 'GET',
138
+ loaderArea: false,
139
+ onSuccess: function(transport) {
140
+ var syncStatus = JSON.parse(transport.responseText);
141
+ updateSyncStatus(syncStatus);
142
+ if (syncStatus.client_side_work_completed == true) {
143
+ tagalysStopManualSync();
144
+ } else {
145
+ tagalysManualSyncTimeout = setTimeout(tagalysSyncManually, 100);
146
+ }
147
+ },
148
+ onFailure : function() {
149
+ tagalysManualSyncTimeout = false;
150
+ }
151
+ }
152
+ );
153
+ } else {
154
+ // don't do anything
155
+ tagalysManualSyncTimeout = false;
156
+ }
157
+ }
158
+ function tagalysGetAndUpdateSyncStatus() {
159
+ if (tagalysSyncing == false) {
160
+ new Ajax.Request(
161
+ syncStatusUrl,
162
+ {
163
+ method: 'GET',
164
+ loaderArea: false,
165
+ onSuccess: function(transport) {
166
+ var syncStatus = JSON.parse(transport.responseText);
167
+ updateSyncStatus(syncStatus);
168
+ }
169
+ // onFailure : failure
170
+ }
171
+ );
172
+ }
173
+ }
174
+ function updateSyncStatus(syncStatus) {
175
+ tagalysClientSideWorkCompleted = syncStatus.client_side_work_completed;
176
+ if (syncStatus.waiting_for_tagalys == true) {
177
+ tagalysWaitingForTagalys = true;
178
+ } else {
179
+ tagalysWaitingForTagalys = false;
180
+ }
181
+ tagalysUpdateSyncButtonLabel();
182
+ document.getElementById('note_sync_status').innerHTML = syncStatus.status;
183
+ for (store_id in syncStatus.stores) {
184
+ document.getElementById('admin_tagalys_core_store_' + store_id + '_note_setup_complete').innerHTML = (syncStatus.stores[store_id].setup_complete ? 'Yes' : 'No');
185
+ var toggleButton = document.getElementById('tagalys-toggle-manual-sync');
186
+ if (toggleButton.innerHTML == 'Sync Now') {
187
+ var feed_status = syncStatus.stores[store_id].feed_status;
188
+ } else {
189
+ var feed_status = syncStatus.stores[store_id].feed_status.replace('Waiting to write', 'Writing');
190
+ }
191
+ document.getElementById('admin_tagalys_core_store_' + store_id + '_note_feed_status').innerHTML = feed_status;
192
+ document.getElementById('admin_tagalys_core_store_' + store_id + '_note_updates_status').innerHTML = syncStatus.stores[store_id].updates_status;
193
+ }
194
+ }
js/tagalys-configuration.js DELETED
@@ -1,13 +0,0 @@
1
- document.addEventListener("DOMContentLoaded", function (e) {
2
- if(typeof($$("#tagalys_admin_core_agree_cron_enabled")[0]) != "undefined" && typeof($$("#tagalys_admin_core_agree_start_sync")[0]) != "undefined") {
3
- document.getElementById('tagalys_admin_core_agree_cron_enabled').onclick = tagalysCheckAndEnableSyncButton;
4
- document.getElementById('tagalys_admin_core_agree_start_sync').onclick = tagalysCheckAndEnableSyncButton;
5
- // $$("#tagalys_admin_core_agree_start_sync")[0].on("change", function () {
6
- // // alert($$("#tagalys_admin_core_agree_start_sync")[0].value);
7
- // document.getElementById('tagalys_admin_core_submit').disabled = !document.getElementById('tagalys_admin_core_submit').disabled;
8
- // });
9
- }
10
- });
11
- function tagalysCheckAndEnableSyncButton() {
12
- document.getElementById('tagalys_admin_core_submit').disabled = !(document.getElementById('tagalys_admin_core_agree_cron_enabled').checked && document.getElementById('tagalys_admin_core_agree_start_sync').checked);
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>visual-merchandising-product-listing-campaign-creator</name>
4
- <version>1.4.2</version>
5
  <stability>stable</stability>
6
  <license>Tagalys</license>
7
  <channel>community</channel>
@@ -12,9 +12,9 @@
12
  Visual Merchandising allows you to to create, modify or delete product listing pages that can be used from campaigns in SEO, SEM, Social Media and show collections at your online store. Visual Merchandisers do not require any assistance from IT or Tech teams allowing them to focus on managing the platform.</description>
13
  <notes>Any questions or concerns, please email cs@tagalys.com and we will get back to you in less than 24 hours. </notes>
14
  <authors><author><name>Palani</name><user>Palani</user><email>pc@tagalys.com</email></author></authors>
15
- <date>2017-05-16</date>
16
- <time>05:48:49</time>
17
- <contents><target name="mageetc"><dir><dir name="modules"><file name="Tagalys_Core.xml" hash="7576ed5aa125c580f0b791018f24a0e9"/><file name="Tagalys_SearchSuggestions.xml" hash="dbf6f4ff1859ef2df72560c9282af435"/><file name="Tagalys_Search.xml" hash="820b96f53d2f0e86cb49906a4dda7f41"/><file name="Tagalys_Mpages.xml" hash="6ccb4f45669c98fd746c6abd92ab32ca"/><file name="Tagalys_Analytics.xml" hash="59ce2628610a4624235a5c820beac2d2"/></dir></dir></target><target name="magecommunity"><dir><dir name="Tagalys"><dir name="Core"><dir name="Block"><dir name="Adminhtml"><dir name="Tagalys"><dir name="Edit"><file name="Form.php" hash="31cae34d1e9bd5cb0c881ae5a6fc03c0"/><dir name="Tab"><file name="Apicredentials.php" hash="9005c30790a51ad077cb4be46a07b766"/><file name="Mpages.php" hash="ba526eb77efd4000ae96404bd04aa638"/><file name="Search.php" hash="fef14680d0feb63bb4e928296c3b9032"/><file name="Searchsuggestions.php" hash="1fa634f35204a06d06fa4c7f762c3259"/><file name="Similarproducts.php" hash="390c3a93c5851a6d784e82650be20ae5"/><file name="Support.php" hash="c68547cfe57cbccdcbcf7c3eb35ed6b3"/><file name="Sync.php" hash="849f7bb77ff568e7f29cf63d54e7faa8"/><file name="Syncsettings.php" hash="77ecb1594c7b409e2055ff8394b85aa8"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name="Tabs.php" hash="6868651b592381ff8081c8247ebf5214"/><file name=".DS_Store" hash="711f187349473a2c6e6d564d4a2faeb9"/></dir><file name="Edit.php" hash="9da04e9a4aec76ce5f5bd88c453390cd"/><file name=".DS_Store" hash="2f95379345a665b8fd261ff7c2f5a7af"/></dir><file name=".DS_Store" hash="96cf5cac0d87be80da73c36e96971923"/></dir><file name=".DS_Store" hash="8c5a4cb1f6f8e10ade87d78ff4d0bfe4"/></dir><dir name="Helper"><file name="Data.php" hash="d50fec78e8a30b7f4d019fd6d0e5c7ed"/><file name="Service.php" hash="c633adf3d5bd356a04b24a791854130c"/><file name="SyncFile.php" hash="5373a774fe2452d068be0ae2806dd01a"/></dir><dir name="Model"><file name="Client.php" hash="962269bc508298338b86b48601a7854c"/><file name="Config.php" hash="135012904392f8d26f5c5eaedd3d9c71"/><dir name="Mysql4"><dir name="Config"><file name="Collection.php" hash="0967ac6ac1a049d9e09288641d2b4a58"/></dir><file name="Config.php" hash="3562b9ffdf260e34945f9e7830facc1b"/><dir name="Queue"><file name="Collection.php" hash="db01d5b412ca3f8cbc1cbbe8b1ed3d0d"/></dir><file name="Queue.php" hash="50fd814880c6adf02dcb9babe5874811"/><file name=".DS_Store" hash="d3dec31675796dca442be9f6076210df"/></dir><file name="Observer.php" hash="9197f6fb573484db244c141607872b95"/><file name="ProductDetails.php" hash="885c41230182aafb4157ea28262a3230"/><file name="Queue.php" hash="459a74e66f2a7ccd146f480701574464"/><file name=".DS_Store" hash="3db11e65f616ba2524ebf71cf1300fa5"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="TagalysController.php" hash="67e746a969ad1b43dcc2268c15ce8f26"/></dir><file name="SyncfilesController.php" hash="1b8476cbb4d02ec87b7742e4dc9fff4b"/><file name=".DS_Store" hash="db462bf5da1a15c73197a0fefd3f5b51"/></dir><dir name="etc"><file name="config.xml" hash="e1124ae35dc5d649413144419249e68b"/></dir><dir name="sql"><dir name="tagalys_core_setup"><file name="mysql4-install-0.3.0.php" hash="fca9f934db6850d950dfdcd71dba7dcd"/><file name="mysql4-upgrade-0.1.0-0.3.0.php" hash="1eb2da3bdf0753b6f4904f1fd62af32f"/><file name="mysql4-upgrade-0.2.0-0.3.0.php" hash="1eb2da3bdf0753b6f4904f1fd62af32f"/></dir><file name=".DS_Store" hash="d87f0e93ae82377a5ceeda9bd58740e8"/></dir><file name=".DS_Store" hash="d1024e81b6252a3d102a906452f53021"/></dir><dir name="SearchSuggestions"><dir name="Helper"><file name="Data.php" hash="a88adfc9f92bb01b4fdb851ea4f265d3"/></dir><dir name="Model"><file name="Observer.php" hash="73e90449054eac498e3b4dfd55db33f1"/></dir><dir name="etc"><file name="config.xml" hash="1e1ee26e326c03473e5854f5dae06c59"/></dir></dir><dir name="Search"><dir name="controllers"><file name="IndexController.php" hash="baaeb347db3b8d32d09a83d3369388a8"/></dir><dir name="etc"><file name="config.xml" hash="5e5a0a2d2de927241c1e97f435a382f7"/></dir><file name=".DS_Store" hash="822777d708619165d544d3256174adc2"/></dir><dir name="Mpages"><dir name="controllers"><file name="IndexController.php" hash="1d80e73a3e3d2a51cff12ebbe1b1364e"/></dir><dir name="etc"><file name="config.xml" hash="80d1b3c82d4da93c271376881f663db5"/></dir><file name=".DS_Store" hash="822777d708619165d544d3256174adc2"/></dir><dir name="Analytics"><dir name="Block"><file name="Productview.php" hash="117109f50c13a14efc4d5740d9e1eace"/></dir><dir name="Model"><file name="Observer.php" hash="650e1c3bacab113e25958af98195de51"/></dir><dir name="controllers"><file name="IndexController.php" hash="3eee2034348dc00d06d91f0f849b7796"/></dir><dir name="etc"><file name="config.xml" hash="ad31a8918cafb214865a7e55fad09383"/></dir></dir></dir></dir></target><target name="magedesign"><dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="tagalys_core.xml" hash="a0875951441399a46dfb5cb3d346b7d8"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="tagalys_search_suggestions.xml" hash="3d3e59b076a4e39c924e122810555b72"/><file name="tagalys_analytics.xml" hash="3d669cedf80245f91745b9e4de5d6012"/></dir><dir name="template"><dir name="tagalys_search_suggestions"><file name="search_suggestions.phtml" hash="d453c441c48c930bea5e2861e4179b3b"/></dir><dir name="tagalys_search"><file name="index.phtml" hash="0b22a6ca318a194c77e945e937dc11cd"/></dir><dir name="tagalys_mpages"><file name="index.phtml" hash="95a99380caaf01e9190517371d5dc225"/></dir><dir name="tagalys_analytics"><file name="product_view.phtml" hash="08d97d2aaafb09b868bde334b9a5942d"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="tagalys"><file name="tagalys-configuration.css" hash="fa3b8f3a4d1bebbbcef261f10e4652b7"/></dir></dir><dir name="images"><dir name="tagalys"><file name="tagalys-logo.png" hash="b26278b173e29b21edc16ddd06ca0192"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir><dir name="js"><file name="tagalys-configuration.js" hash="e32466267eb8e54a32119ac8e49c6589"/></dir></dir></target></contents>
18
  <compatible/>
19
  <dependencies><required><php><min>5.3.0</min><max>7.0.10</max></php></required></dependencies>
20
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>visual-merchandising-product-listing-campaign-creator</name>
4
+ <version>1.5.0</version>
5
  <stability>stable</stability>
6
  <license>Tagalys</license>
7
  <channel>community</channel>
12
  Visual Merchandising allows you to to create, modify or delete product listing pages that can be used from campaigns in SEO, SEM, Social Media and show collections at your online store. Visual Merchandisers do not require any assistance from IT or Tech teams allowing them to focus on managing the platform.</description>
13
  <notes>Any questions or concerns, please email cs@tagalys.com and we will get back to you in less than 24 hours. </notes>
14
  <authors><author><name>Palani</name><user>Palani</user><email>pc@tagalys.com</email></author></authors>
15
+ <date>2017-05-22</date>
16
+ <time>15:43:02</time>
17
+ <contents><target name="mageetc"><dir><dir name="modules"><file name="Tagalys_Core.xml" hash="7576ed5aa125c580f0b791018f24a0e9"/><file name="Tagalys_SearchSuggestions.xml" hash="dbf6f4ff1859ef2df72560c9282af435"/><file name="Tagalys_Search.xml" hash="820b96f53d2f0e86cb49906a4dda7f41"/><file name="Tagalys_Mpages.xml" hash="6ccb4f45669c98fd746c6abd92ab32ca"/><file name="Tagalys_Analytics.xml" hash="59ce2628610a4624235a5c820beac2d2"/></dir></dir></target><target name="magecommunity"><dir><dir name="Tagalys"><dir name="Core"><dir name="Block"><dir name="Adminhtml"><dir name="Tagalys"><dir name="Edit"><file name="Form.php" hash="31cae34d1e9bd5cb0c881ae5a6fc03c0"/><dir name="Tab"><file name="Apicredentials.php" hash="9005c30790a51ad077cb4be46a07b766"/><file name="Mpages.php" hash="ba526eb77efd4000ae96404bd04aa638"/><file name="Search.php" hash="fef14680d0feb63bb4e928296c3b9032"/><file name="Searchsuggestions.php" hash="1fa634f35204a06d06fa4c7f762c3259"/><file name="Similarproducts.php" hash="390c3a93c5851a6d784e82650be20ae5"/><file name="Support.php" hash="c68547cfe57cbccdcbcf7c3eb35ed6b3"/><file name="Sync.php" hash="3216b0e207a11e8d16cf789eb3c7307d"/><file name="Syncsettings.php" hash="6f32c0fff8996c126889e05b8f8c7adb"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name="Tabs.php" hash="6868651b592381ff8081c8247ebf5214"/><file name=".DS_Store" hash="711f187349473a2c6e6d564d4a2faeb9"/></dir><file name="Edit.php" hash="226c9294905b6583588734b7aaace3e3"/><file name=".DS_Store" hash="2f95379345a665b8fd261ff7c2f5a7af"/></dir><file name=".DS_Store" hash="96cf5cac0d87be80da73c36e96971923"/></dir><file name=".DS_Store" hash="8c5a4cb1f6f8e10ade87d78ff4d0bfe4"/></dir><dir name="Helper"><file name="Data.php" hash="d50fec78e8a30b7f4d019fd6d0e5c7ed"/><file name="Service.php" hash="c633adf3d5bd356a04b24a791854130c"/><file name="SyncFile.php" hash="f1346cb21bb4ea73ba2fcf96a7d43fb8"/></dir><dir name="Model"><file name="Client.php" hash="962269bc508298338b86b48601a7854c"/><file name="Config.php" hash="135012904392f8d26f5c5eaedd3d9c71"/><dir name="Mysql4"><dir name="Config"><file name="Collection.php" hash="0967ac6ac1a049d9e09288641d2b4a58"/></dir><file name="Config.php" hash="3562b9ffdf260e34945f9e7830facc1b"/><dir name="Queue"><file name="Collection.php" hash="db01d5b412ca3f8cbc1cbbe8b1ed3d0d"/></dir><file name="Queue.php" hash="50fd814880c6adf02dcb9babe5874811"/><file name=".DS_Store" hash="d3dec31675796dca442be9f6076210df"/></dir><file name="Observer.php" hash="11df34f6c933d433a5d5352f80869c08"/><file name="ProductDetails.php" hash="885c41230182aafb4157ea28262a3230"/><file name="Queue.php" hash="459a74e66f2a7ccd146f480701574464"/><file name=".DS_Store" hash="3db11e65f616ba2524ebf71cf1300fa5"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="TagalysController.php" hash="a76d08c29208912d8c090aa5205a71c2"/></dir><file name="SyncfilesController.php" hash="1b8476cbb4d02ec87b7742e4dc9fff4b"/><file name=".DS_Store" hash="db462bf5da1a15c73197a0fefd3f5b51"/></dir><dir name="etc"><file name="config.xml" hash="3461b2e8211cf57fb584431dc33125d7"/></dir><dir name="sql"><dir name="tagalys_core_setup"><file name="mysql4-install-0.3.0.php" hash="fca9f934db6850d950dfdcd71dba7dcd"/><file name="mysql4-upgrade-0.1.0-0.3.0.php" hash="1eb2da3bdf0753b6f4904f1fd62af32f"/><file name="mysql4-upgrade-0.2.0-0.3.0.php" hash="1eb2da3bdf0753b6f4904f1fd62af32f"/></dir><file name=".DS_Store" hash="d87f0e93ae82377a5ceeda9bd58740e8"/></dir><file name=".DS_Store" hash="d1024e81b6252a3d102a906452f53021"/></dir><dir name="SearchSuggestions"><dir name="Helper"><file name="Data.php" hash="a88adfc9f92bb01b4fdb851ea4f265d3"/></dir><dir name="Model"><file name="Observer.php" hash="73e90449054eac498e3b4dfd55db33f1"/></dir><dir name="etc"><file name="config.xml" hash="1e1ee26e326c03473e5854f5dae06c59"/></dir></dir><dir name="Search"><dir name="controllers"><file name="IndexController.php" hash="baaeb347db3b8d32d09a83d3369388a8"/></dir><dir name="etc"><file name="config.xml" hash="5e5a0a2d2de927241c1e97f435a382f7"/></dir><file name=".DS_Store" hash="822777d708619165d544d3256174adc2"/></dir><dir name="Mpages"><dir name="controllers"><file name="IndexController.php" hash="1d80e73a3e3d2a51cff12ebbe1b1364e"/></dir><dir name="etc"><file name="config.xml" hash="80d1b3c82d4da93c271376881f663db5"/></dir><file name=".DS_Store" hash="822777d708619165d544d3256174adc2"/></dir><dir name="Analytics"><dir name="Block"><file name="Productview.php" hash="117109f50c13a14efc4d5740d9e1eace"/></dir><dir name="Model"><file name="Observer.php" hash="650e1c3bacab113e25958af98195de51"/></dir><dir name="controllers"><file name="IndexController.php" hash="3eee2034348dc00d06d91f0f849b7796"/></dir><dir name="etc"><file name="config.xml" hash="ad31a8918cafb214865a7e55fad09383"/></dir></dir></dir></dir></target><target name="magedesign"><dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="tagalys_core.xml" hash="a7e019882e6b031018b7955df50330c8"/></dir><dir name="template"><dir name="tagalys"><file name="configuration.phtml" hash="97c1d46ae5793f974ece62371258a324"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="tagalys_search_suggestions.xml" hash="3d3e59b076a4e39c924e122810555b72"/><file name="tagalys_analytics.xml" hash="3d669cedf80245f91745b9e4de5d6012"/></dir><dir name="template"><dir name="tagalys_search_suggestions"><file name="search_suggestions.phtml" hash="d453c441c48c930bea5e2861e4179b3b"/></dir><dir name="tagalys_search"><file name="index.phtml" hash="0b22a6ca318a194c77e945e937dc11cd"/></dir><dir name="tagalys_mpages"><file name="index.phtml" hash="95a99380caaf01e9190517371d5dc225"/></dir><dir name="tagalys_analytics"><file name="product_view.phtml" hash="08d97d2aaafb09b868bde334b9a5942d"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="tagalys"><file name="tagalys-configuration-v1.css" hash="d387a2c115f65a0702d6e00e62c0d6f1"/></dir></dir><dir name="images"><dir name="tagalys"><file name="tagalys-logo.png" hash="b26278b173e29b21edc16ddd06ca0192"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir><dir name="js"><file name="tagalys-configuration-v2.js" hash="5bdf8c88a7e2ae844db7773f7e037057"/></dir></dir></target></contents>
18
  <compatible/>
19
  <dependencies><required><php><min>5.3.0</min><max>7.0.10</max></php></required></dependencies>
20
  </package>
skin/adminhtml/default/default/css/tagalys/{tagalys-configuration.css → tagalys-configuration-v1.css} RENAMED
@@ -1,7 +1,10 @@
1
- .tagalys-progress-bar{
2
- float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease
 
 
3
  }
4
- .tagalys-progress-bar{
 
5
  background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px
6
  }
7
  #admin_tagalys_sync_feed_fieldset , th, td {
@@ -25,8 +28,9 @@
25
  text-decoration: none;
26
  }
27
 
28
- .tagalys-btn:disabled {
29
  background: #dddddd;
 
30
  }
31
 
32
  .tagalys-progress-inline {
1
+ .tagalys-progressbar {
2
+ width: 100%;
3
+ height: 20px;
4
+ background: #ccc;
5
  }
6
+ .tagalys-progressbar-completed{
7
+ float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease;
8
  background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px
9
  }
10
  #admin_tagalys_sync_feed_fieldset , th, td {
28
  text-decoration: none;
29
  }
30
 
31
+ .tagalys-btn:disabled, .tagalys-btn.disabled {
32
  background: #dddddd;
33
+ color: #ed6502;
34
  }
35
 
36
  .tagalys-progress-inline {