Commit 901ba3f34364b1d8b6be8aff28dccde97220b5a0

Authored by Elena.Budnik
1 parent 08eee02f

upload catalog

js/app/views/CatalogUI.js
... ... @@ -195,11 +195,11 @@ Ext.define('amdaUI.CatalogUI', {
195 195 this.status = null;
196 196  
197 197 if (this.object.get('fromPlugin'))
198   - {
  198 + {
199 199 if (this.object.get('objFormat') && this.object.get('objFormat') != '')
200 200 {
201 201 //From uploaded file
202   - //AmdaAction.initTTCacheFromUploadedFile(this.object.get('objName'), this.object.get('objFormat'), this.onAfterInit, this);
  202 + AmdaAction.initTTCacheFromUploadedFile(this.object.get('objName'), this.object.get('objFormat'), this.isCatalog, this.onAfterInit, this);
203 203 }
204 204 else
205 205 {
... ...
js/app/views/TimeTableUI.js
... ... @@ -47,7 +47,8 @@ Ext.define('amdaUI.TimeTableUI', {
47 47 this.loadObject();
48 48  
49 49 // show the default duration column
50   - this.TTGrid.headerCt.getGridColumns()
  50 + this.TTGrid.headerCt.getGridColumns();
  51 +
51 52 Ext.Array.each(this.TTGrid.headerCt.getGridColumns(), function(item,index,all){
52 53 // if item is the default duration column
53 54 if ( item.id == amdaUI.TimeTableUI.COL_TO_HIDE+'2' ) {
... ...
js/app/views/UploadPanelUI.js
... ... @@ -2,527 +2,594 @@
2 2 * Project  : AMDA-NG
3 3 * Name : UploadUI.js
4 4 * @class amdaUI.UploadUI
5   - * @extends Ext.panel.Panel
  5 + * @extends Ext.form.Panel
6 6 * @brief Upload Panel UI definition (View)
7 7 * @author Elena
8 8 * @version $Id: UploadPanelUI.js 2831 2015-03-26 10:33:42Z elena $
9 9 */
10 10  
11 11 Ext.define('amdaUI.UploadPanelUI', {
12   - extend: 'Ext.form.Panel',
13   - alias: 'widget.panelUpload',
14   -
15   - requires : [
16   - 'amdaUI.RemoteSearchPlugin'
17   - ],
  12 + extend: 'Ext.form.Panel',
  13 + alias: 'widget.panelUpload',
  14 +
  15 + requires : [
  16 + 'amdaUI.RemoteSearchPlugin'
  17 + ],
18 18  
19   - isFile : true,
20   - tmpNode : null,
21   -
22   - constructor: function(config) {
23   - this.init(config);
24   - this.callParent(arguments);
25   - },
  19 + isFile : true,
  20 + isTimeTable : false,
  21 + tmpNode : null,
  22 +
  23 + constructor: function(config)
  24 + {
  25 + this.init(config);
  26 + this.callParent(arguments);
  27 + },
26 28  
27   - /*
28   - * create MyData linked node and edit in module MyData
29   - * update myDataParams info if needed
30   - */
31   - getObjectCallback : function(result,remoteEvent)
32   - {
33   - var t = remoteEvent.getTransaction();
34   - if (result && !result.error) {
35   - // set parameter into node
36   - var me = this;
37   - myDesktopApp.getLoadedModule(this.tmpNode.get('moduleId'), true, function (module) {
38   - // myData
39   - if (me.tmpNode.get('nodeType') == amdaModel.MyDataParamNode.nodeType) {
40   - var linkedFile = Ext.create('amdaModel.MyDataNode', {leaf : true, text : me.tmpNode.get('text')});
41   -
42   - linkedFile.create(result.mask, result.description, result.maskDesc);
43   - linkedFile.updateMyDataParam(result.mask,result.maskDesc);
44   -
45   - if (!linkedFile.get('id'))
46   - linkedFile.set('id',me.tmpNode.get('text'));
47   -
48   - var paramObj = Ext.create(linkedFile.get('objectDataModel'), result);
49   - linkedFile.set('object',paramObj);
50   - me.tmpNode.set('fileObject',paramObj);
51   - }
52   - else {
53   - // Time Table
54   - var paramObj = Ext.create(me.tmpNode.get('objectDataModel'), result);
55   -
56   - paramObj.set('fromPlugin',true);
57   - if (result.intervals) {
58   - paramObj.set('intervals',result.intervals);
59   - paramObj.set('nbIntervals',result.intervals.length);
60   - }
61   - me.tmpNode.set('object',paramObj);
62   - }
63   - if (module)
64   - {
65   - module.setLinkedNode(me.tmpNode);
66   - module.linkedNode.editInModule();
67   - }
68   - });
69   - }
70   - else {
71   - // EXCEPTION : parameter not found !
72   - myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"
73   - +this.tmpNode.get('text')+"' found!");
74   - }
75   - loadMask.hide();
76   - },
  29 + /*
  30 + * create MyData linked node and edit in module MyData
  31 + * update myDataParams info if needed
  32 + */
  33 + getObjectCallback : function(result,remoteEvent)
  34 + {
  35 + var t = remoteEvent.getTransaction();
  36 + if (result && !result.error)
  37 + {
  38 + // set parameter into node
  39 + var me = this;
  40 + myDesktopApp.getLoadedModule(this.tmpNode.get('moduleId'), true, function (module){
  41 + // myData
  42 + if (me.tmpNode.get('nodeType') == amdaModel.MyDataParamNode.nodeType)
  43 + {
  44 + var linkedFile = Ext.create('amdaModel.MyDataNode', {leaf : true, text : me.tmpNode.get('text')});
  45 +
  46 + linkedFile.create(result.mask, result.description, result.maskDesc);
  47 + linkedFile.updateMyDataParam(result.mask,result.maskDesc);
  48 +
  49 + if (!linkedFile.get('id'))
  50 + linkedFile.set('id',me.tmpNode.get('text'));
  51 +
  52 + var paramObj = Ext.create(linkedFile.get('objectDataModel'), result);
  53 + linkedFile.set('object',paramObj);
  54 + me.tmpNode.set('fileObject',paramObj);
  55 + }
  56 + else
  57 + {
  58 + // Time Table or Catalog
  59 + var paramObj = Ext.create(me.tmpNode.get('objectDataModel'), result);
  60 +
  61 + paramObj.set('fromPlugin',true);
  62 + if (result.intervals)
  63 + {
  64 + paramObj.set('intervals',result.intervals);
  65 + paramObj.set('nbIntervals',result.intervals.length);
  66 + }
  67 + me.tmpNode.set('object',paramObj);
  68 + }
  69 + if (module)
  70 + {
  71 + module.setLinkedNode(me.tmpNode);
  72 + module.linkedNode.editInModule();
  73 + }
  74 + });
  75 + }
  76 + else
  77 + {
  78 + // EXCEPTION : parameter not found !
  79 + myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"+this.tmpNode.get('text')+"' found!");
  80 + }
  81 + loadMask.hide();
  82 + },
77 83  
78   - /*
79   - * form validation
80   - * TODO markInvalid()?
81   - */
82   - validate : function()
83   - {
84   - var values = this.getForm().getValues();
  84 +/*
  85 +* form validation
  86 +* TODO markInvalid()?
  87 +*/
  88 + validate : function()
  89 + {
  90 + var values = this.getForm().getValues();
85 91  
86   - if (values['filesrc'] == 'LOCAL') {
87   - var locFile = this.isFile ? this.getForm().findField('localFileName').getValue() :
88   - this.getForm().findField('localTTName').getValue();
89   -
90   - if (!locFile) {
91   - myDesktopApp.warningMsg("Select File to Upload");
92   - return false;
93   - }
94   - }
95   - else {
96   - if (!values['remoteFile'] && !values['remoteTT']) {
97   - myDesktopApp.warningMsg("Select File to Upload");
98   - return false;
99   - }
100   - }
101   - return true;
102   - },
  92 + if (values['filesrc'] == 'LOCAL')
  93 + {
  94 + if (this.isFile) var locFile = this.getForm().findField('localFileName').getValue();
  95 + else if (this.isTimeTable) var locFile = this.getForm().findField('localTTName').getValue();
  96 + else var locFile = this.getForm().findField('localCatName').getValue();
  97 +
  98 + if (!locFile)
  99 + {
  100 + myDesktopApp.warningMsg("Select File to Upload");
  101 + return false;
  102 + }
  103 + }
  104 + else
  105 + {
  106 + if (!values['remoteFile'] && !values['remoteTT'] && !values['remoteCat'])
  107 + {
  108 + myDesktopApp.warningMsg("Select File to Upload");
  109 + return false;
  110 + }
  111 + }
  112 + return true;
  113 + },
103 114  
104 115  
105   - //TODO proper parsing
106   - updateFormat: function(value)
107   - {
108   - var arrayOfStr = value.split('.');
109   - //TODO use down method?
110   - if (this.isFile) {
111   - var radios = Ext.getCmp('filefrmt');
112   - var user_format_obj = radios.getValue();
113   - var user_format = user_format_obj.filefrmt;
114   - }
115   - else {
116   - var radios = Ext.getCmp('ttfrmt');
117   - var user_format_obj = radios.getValue();
118   - var user_format = user_format_obj.ttfrmt;
119   - }
120   -
121   - var auto_format = user_format;
122   -
123   - // auto define format in some special cases
124   - //TODO name without extention => ASCII?
125   - if (arrayOfStr.length == 1) auto_format = 'ASCII';
126   - else {
127   - var suffix = arrayOfStr[arrayOfStr.length - 1].toLowerCase();
128   - if (suffix == 'gz')
129   - suffix = arrayOfStr[arrayOfStr.length - 2].toLowerCase() + '.gz';
  116 + //TODO proper parsing
  117 + updateFormat: function(value)
  118 + {
  119 + var arrayOfStr = value.split('.');
  120 + //TODO use down method?
  121 + if (this.isFile)
  122 + {
  123 + var radios = Ext.getCmp('filefrmt');
  124 + var user_format_obj = radios.getValue();
  125 + var user_format = user_format_obj.filefrmt;
  126 + }
  127 + else if (this.TimeTable)
  128 + {
  129 + var radios = Ext.getCmp('ttfrmt');
  130 + var user_format_obj = radios.getValue();
  131 + var user_format = user_format_obj.ttfrmt;
  132 + }
  133 + else
  134 + {
  135 + var radios = Ext.getCmp('catfrmt');
  136 + var user_format_obj = radios.getValue();
  137 + var user_format = user_format_obj.catfrmt;
  138 + }
  139 +
  140 + var auto_format = user_format;
  141 +
  142 + // auto define format in some special cases
  143 + //TODO name without extention => ASCII?
  144 + if (arrayOfStr.length == 1) auto_format = 'ASCII';
  145 + else
  146 + {
  147 + var suffix = arrayOfStr[arrayOfStr.length - 1].toLowerCase();
  148 + if (suffix == 'gz')
  149 + suffix = arrayOfStr[arrayOfStr.length - 2].toLowerCase() + '.gz';
130 150  
131   - switch (suffix)
132   - {
133   - case 'cdf' : auto_format = 'CDF'; break;
134   - case 'cef.gz' :
135   - case 'cef' : auto_format = 'CEF'; break;
136   - case 'xml' : auto_format = 'VOT';
137   - case 'vot' : auto_format = 'VOT'; break;
138   - case 'nc' : auto_format = 'NC'; break;
139   - case 'asc' :
140   - case 'txt' :
141   - default : auto_format = 'ASCII';
142   - }
143   - }
  151 + switch (suffix)
  152 + {
  153 + case 'cdf' : auto_format = 'CDF'; break;
  154 + case 'cef.gz' :
  155 + case 'cef' : auto_format = 'CEF'; break;
  156 + case 'xml' : auto_format = 'VOT';
  157 + case 'vot' : auto_format = 'VOT'; break;
  158 + case 'nc' : auto_format = 'NC'; break;
  159 + case 'asc' :
  160 + case 'txt' :
  161 + default : auto_format = 'ASCII';
  162 + }
  163 + }
  164 + // set auto format : case when format was not set by user before
  165 + if (this.isFile && user_format !== auto_format) {
  166 + user_format_obj.filefrmt = auto_format;
  167 + } else if (this.isTimeTable && user_format !== auto_format) {
  168 + user_format_obj.ttfrmt = auto_format;
  169 + } else if (!this.File && !this.TimeTable && user_format !== auto_format) {
  170 + user_format_obj.catfrmt = auto_format;
  171 + }
  172 +
  173 + radios.setValue(user_format_obj);
  174 + },
144 175  
145   - // set auto format : case when format was not set by user before
146   - if (this.isFile && user_format !== auto_format) {
147   - user_format_obj.filefrmt = auto_format;
148   - } else if (!this.isFile && user_format !== auto_format) {
149   - user_format_obj.ttfrmt = auto_format;
150   - }
151   - radios.setValue(user_format_obj);
152   - },
153   -
154   - /*
155   - *
156   - */
157   - forceUpload : function (url,format)
158   - {
159   - this.getForm().findField('filesrc').setValue('URL');
160   -
161   - switch (format)
162   - {
163   - case 'votable' :
164   - this.getForm().findField('filefrmt').setValue('VOT');
165   - break;
166   - case 'cdf' :
167   - this.getForm().findField('filefrmt').setValue('CDF');
168   - break;
169   - default :
170   - //ToDo Error - unknown format
171   - return;
172   - }
173   - this.getForm().findField('remoteFile').setValue(url);
174   -
175   - this.postUpload();
176   - },
  176 + /*
  177 + *
  178 + */
  179 + forceUpload : function (url,format)
  180 + {
  181 + this.getForm().findField('filesrc').setValue('URL');
  182 +
  183 + switch (format)
  184 + {
  185 + case 'votable' :
  186 + this.getForm().findField('filefrmt').setValue('VOT');
  187 + break;
  188 + case 'cdf' :
  189 + this.getForm().findField('filefrmt').setValue('CDF');
  190 + break;
  191 + default :
  192 + //ToDo Error - unknown format
  193 + return;
  194 + }
  195 + this.getForm().findField('remoteFile').setValue(url);
  196 +
  197 + this.postUpload();
  198 + },
177 199  
178   - /*
179   - *
180   - */
181   - postUpload : function()
182   - {
183   - // 'global' form containing 'partial' forms
184   - var form = this.getForm();
185   -
186   - // special validation
187   - if(this.validate()){
188   - form.submit({
189   - scope: this,
190   - url: 'php/uploadFile.php',
191   - waitMsg: 'Uploading your file...',
192   - success: function(form, o){
193   - this.tmpNode = Ext.create(this.nodeType,{leaf : true, text : o.result.file});
194   - loadMask.show();
195   - AmdaAction.getUploadedObject(o.result.file, o.result.format, this.tmpNode.get('nodeType'), this.getObjectCallback, this);
196   - },
197   - failure: function(form, o) {
198   - loadMask.hide();
199   - myDesktopApp.errorMsg('Error '+o.result.error);
200   - }
201   - });
202   - }
203   - },
  200 + /*
  201 + *
  202 + */
  203 + postUpload : function()
  204 + {
  205 + // 'global' form containing 'partial' forms
  206 + var form = this.getForm();
  207 +
  208 + // special validation
  209 + if(this.validate())
  210 + {
  211 + form.submit({
  212 + scope: this,
  213 + url: 'php/uploadFile.php',
  214 + waitMsg: 'Uploading your file...',
  215 + success: function(form, o)
  216 + {
  217 + this.tmpNode = Ext.create(this.nodeType,{leaf : true, text : o.result.file});
  218 + loadMask.show();
  219 + AmdaAction.getUploadedObject(o.result.file, o.result.format, this.tmpNode.get('nodeType'), this.getObjectCallback, this);
  220 + },
  221 + failure: function(form, o)
  222 + {
  223 + loadMask.hide();
  224 + myDesktopApp.errorMsg('Error '+o.result.error);
  225 + }
  226 + });
  227 + }
  228 + },
204 229  
205   - /*
206   - * panel config
207   - */
208   - init : function(config)
209   - {
210   - this.isFile = config.panelType == 'file'? true : false;
211   -
212   - // file/time table settings
213   - if (this.isFile) {
214   - var title = 'Upload File';
215   - var items = [
216   - { boxLabel: 'ASCII', name: 'filefrmt', inputValue: 'ASCII', checked: true,
217   - listeners: {
218   - change: function (cb, nv, ov) {
219   - if (nv) Ext.getCmp('tf').show();
220   - else Ext.getCmp('tf').hide();
221   - }
222   - }
223   - },
224   - { boxLabel: 'netCDF&nbsp;<img amda_clicktip="ncTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'filefrmt', inputValue: 'NC' },
225   - { boxLabel: 'CDF&nbsp;<img amda_clicktip="cdfTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'filefrmt', inputValue: 'CDF' },
226   - // { boxLabel: 'CEF[GZ]', name: 'filefrmt', inputValue: 'CEF' },
227   - { boxLabel: 'VOTable', name: 'filefrmt', inputValue: 'VOT' }
228   - ];
229   - var timeFormatId = 'tf';
230   - this.formatId = 'nsf';
231   - this.localUploadId = 'form-uploadfile';
232   - var localUploadName ='localFileName';
233   - var remoteUploadName ='remoteFile';
234   - this.remoteUploadId = 'form-uploadurl';
235   - this.nodeType = 'amdaModel.MyDataParamNode';
236   - //TODO load XML
237   - var store = Ext.create('Ext.data.Store', {
238   - fields: ['value', 'name'],
239   - data : [
240   - {"value":"ftp://cdaweb.gsfc.nasa.gov/pub/data/", "name":"CDAWEB/FTP"},
241   - {"value":"ftp://ftp.ngdc.noaa.gov/STP/SOLAR_DATA/", "name":"Solar Data"}
242   - ]
243   - });
244   - }
245   - else {
246   -
247   - var title = 'Upload Time Table';
248   - var items = [
249   - {boxLabel: 'ASCII', name: 'ttfrmt', inputValue: 'ASCII', checked: true,
250   - listeners: {
251   - change: function (cb, nv, ov) {
252   - if (nv) Ext.getCmp('tf_tt').show();
253   - else Ext.getCmp('tf_tt').hide();
254   - }
255   - }
256   - },
257   - {boxLabel: 'VOTable', name: 'ttfrmt', inputValue: 'VOT'}
258   - ];
259   -
260   - var timeFormatId = 'tf_tt';
261   - this.formatId = 'nsf_tt';
262   - this.localUploadId = 'form-uploadtt';
263   - var localUploadName ='localTTName';
264   - var remoteUploadName ='remoteTT';
265   - this.remoteUploadId = 'form-uploadtturl';
266   - this.nodeType = 'amdaModel.TimeTableNode';
267   - //TODO load XML
268   - var store = Ext.create('Ext.data.Store', {
269   - fields: ['value', 'name'],
270   - data : []
271   - });
272   - }
273   -
274   - var combo = Ext.create('Ext.form.ComboBox', {
275   - flex : 4,
276   - store: store,
277   - emptyText: 'Enter Remote Site URL (ftp)',
278   - queryMode: 'local',
279   - displayField: 'name',
280   - valueField: 'value'
281   - });
  230 + /*
  231 + * panel config
  232 + */
  233 + init : function(config)
  234 + {
  235 + this.isFile = config.panelType == 'file'? true : false;
  236 + this.isTimeTable = config.panelType == 'timetable'? true : false;
  237 +
  238 + // file / time table / catalog settings
  239 + if (this.isFile)
  240 + {
  241 + var title = 'File';
  242 + var items = [
  243 + { boxLabel: 'ASCII', name: 'filefrmt', inputValue: 'ASCII', checked: true,
  244 + listeners:
  245 + {
  246 + change: function (cb, nv, ov) {
  247 + if (nv) Ext.getCmp('tf').show();
  248 + else Ext.getCmp('tf').hide();
  249 + }
  250 + }
  251 + },
  252 + // { boxLabel: 'netCDF&nbsp;<img amda_clicktip="ncTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'filefrmt', inputValue: 'NC' },
  253 + { boxLabel: 'CDF&nbsp;<img amda_clicktip="cdfTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'filefrmt', inputValue: 'CDF' },
  254 + // { boxLabel: 'CEF[GZ]', name: 'filefrmt', inputValue: 'CEF' },
  255 + { boxLabel: 'VOTable', name: 'filefrmt', inputValue: 'VOT' }];
  256 + var timeFormatId = 'tf';
  257 + this.formatId = 'nsf';
  258 + this.localUploadId = 'form-uploadfile';
  259 + var localUploadName ='localFileName';
  260 + var remoteUploadName ='remoteFile';
  261 + this.remoteUploadId = 'form-uploadurl';
  262 + this.nodeType = 'amdaModel.MyDataParamNode';
  263 + //TODO load XML
  264 + var store = Ext.create('Ext.data.Store', {
  265 + fields: ['value', 'name'],
  266 + data : [
  267 + {"value":"ftp://cdaweb.gsfc.nasa.gov/pub/data/", "name":"CDAWEB/FTP"}/*,
  268 + {"value":"ftp://ftp.ngdc.noaa.gov/STP/SOLAR_DATA/", "name":"Solar Data"}*/]
  269 + });
  270 + }
  271 + else if (this.isTimeTable)
  272 + {
  273 + var title = 'Time Table';
  274 + var items = [
  275 + { boxLabel: 'ASCII', name: 'ttfrmt', inputValue: 'ASCII', checked: true,
  276 + listeners: {
  277 + change: function (cb, nv, ov) {
  278 + if (nv) Ext.getCmp('tf_tt').show();
  279 + else Ext.getCmp('tf_tt').hide();
  280 + }
  281 + }
  282 + },
  283 + { boxLabel: 'VOTable', name: 'ttfrmt', inputValue: 'VOT'}];
  284 +
  285 + var timeFormatId = 'tf_tt';
  286 + this.formatId = 'nsf_tt';
  287 + this.localUploadId = 'form-uploadtt';
  288 + var localUploadName ='localTTName';
  289 + var remoteUploadName ='remoteTT';
  290 + this.remoteUploadId = 'form-uploadtturl';
  291 + this.nodeType = 'amdaModel.TimeTableNode';
  292 + //TODO load XML
  293 + var store = Ext.create('Ext.data.Store', {
  294 + fields: ['value', 'name'],
  295 + data : []
  296 + });
  297 + }
  298 + else
  299 + {
  300 + var title = 'Catalog';
  301 + var items = [
  302 + { boxLabel: 'VOTable', name: 'catfrmt', inputValue: 'VOT', checked: true }];
  303 +
  304 + var timeFormatId = 'tf_cat';
  305 + this.formatId = 'nsf_cat';
  306 + this.localUploadId = 'form-uploadcat';
  307 + var localUploadName ='localCatName';
  308 + var remoteUploadName ='remoteCat';
  309 +
  310 + this.remoteUploadId = 'form-uploadcaturl';
  311 + this.nodeType = 'amdaModel.CatalogNode';
  312 + //TODO load XML
  313 + var store = Ext.create('Ext.data.Store', {
  314 + fields: ['value', 'name'],
  315 + data : []
  316 + });
  317 + }
  318 +
  319 + var combo = Ext.create('Ext.form.ComboBox', {
  320 + flex : 4,
  321 + store: store,
  322 + emptyText: 'Enter Remote Site URL (ftp)',
  323 + queryMode: 'local',
  324 + displayField: 'name',
  325 + valueField: 'value'
  326 + });
282 327  
283   - var fieldcontainer = { xtype: 'fieldcontainer',
284   - fieldLabel: ' ', labelWidth: 0, labelSeparator : '', labelPad : 0,
285   - layout: 'hbox',
286   - items: [
287   - combo,
288   - {
289   - xtype : 'button',
290   - flex : 1,
291   - text: 'Browse It',
292   - handler: function(){
293   - var form = this.up('form').getForm();
294   - var site = form.getFields().getAt(0).getValue();
295   - if (site)
296   - this.up('form').ownerCt.fireEvent('open', site);
297   - else
298   - myDesktopApp.warningMsg("Please Enter Remote Site URL");
299   - }
300   - }
301   - ]
302   - };
303   - var radioId = this.isFile ? 'filefrmt' : 'ttfrmt';
304   - var fileFormat = Ext.create('Ext.form.FieldSet', {
305   - title: 'File Format',
306   - items : [ {
307   - xtype: 'radiogroup',
308   - id : radioId,
309   - columns: 3,
310   - cls: 'x-check-group-alt',
311   - items: items
312   - }
313   - ]
314   - });
  328 + var fieldcontainer =
  329 + {
  330 + xtype: 'fieldcontainer',
  331 + fieldLabel: ' ', labelWidth: 0, labelSeparator : '', labelPad : 0,
  332 + layout: 'hbox',
  333 + items: [
  334 + combo,
  335 + {
  336 + xtype : 'button',
  337 + flex : 1,
  338 + text: 'Browse It',
  339 + handler: function()
  340 + {
  341 + var form = this.up('form').getForm();
  342 + var site = form.getFields().getAt(0).getValue();
  343 + if (site)
  344 + this.up('form').ownerCt.fireEvent('open', site);
  345 + else
  346 + myDesktopApp.warningMsg("Please Enter Remote Site URL");
  347 + }
  348 + }]
  349 + };
  350 +
  351 + if (this.isFile) var radioId = 'filefrmt';
  352 + else if (this.isTimeTable) var radioId = 'ttfrmt';
  353 + else var radioId = 'catfrmt';
  354 +
  355 + var fileFormat = Ext.create('Ext.form.FieldSet', {
  356 + title: 'File Format',
  357 + items : [{
  358 + xtype: 'radiogroup',
  359 + id : radioId,
  360 + columns: 3,
  361 + cls: 'x-check-group-alt',
  362 + items: items
  363 + }]
  364 + });
315 365  
316   - var Sampling = { xtype: 'radiogroup',
317   - fieldLabel: 'Time Sampling',
318   - labelWidth: 90,
319   - cls: 'x-check-group-alt',
320   - hidden : !this.isFile,
321   - defaults : {name : 'timesmpl'},
322   - items: [
323   - {boxLabel: 'constant', inputValue: 'constant', checked: true},
324   - {boxLabel: 'variable&nbsp;<img amda_clicktip="variableSampling" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'variable'}
325   - ]
326   - };
  366 + var Sampling =
  367 + {
  368 + xtype: 'radiogroup',
  369 + fieldLabel: 'Time Sampling',
  370 + labelWidth: 90,
  371 + cls: 'x-check-group-alt',
  372 + hidden : !this.isFile,
  373 + defaults : {name : 'timesmpl'},
  374 + items: [
  375 + {boxLabel: 'constant', inputValue: 'constant', checked: true},
  376 + {boxLabel: 'variable&nbsp;<img amda_clicktip="variableSampling" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'variable'}
  377 + ]
  378 + };
327 379  
328   - var dayStart = { xtype: 'checkbox',
329   - name : 'doy',
330   - hidden : true,
331   - fieldLabel: 'DOY starts from 1',
332   - inputValue: '1'
333   - };
334   -
335   - var nonStandardFormat =
336   - {
337   - xtype: 'fieldcontainer',
338   - defaultType: 'textfield',
339   - layout: 'anchor',
340   - defaults: {
341   - layout: '100%',
342   - labelWidth : 150
343   - },
344   - id : this.formatId,
345   - hidden : true,
346   - items: [
347   - {
348   - fieldLabel : 'define time format',
349   - name : 'nonstd',
350   - value: 'Y-m-d H:i:s',
351   - enableKeyEvents: true,
352   - listeners : {
353   - keyUp : function() {
354   - if (this.getValue().indexOf('z') > 0) {
355   - this.nextSibling().show();
356   - }
357   - if (this.getValue().indexOf('d') > 0) {
358   - this.nextSibling().hide();
359   - }
360   - }
361   - }
362   - },
363   - dayStart,
364   - {
365   - fieldLabel : 'define max time length',
366   - name : 'timelength',
367   - value: 'auto'
368   - }
369   - ],
370   - listeners : {
371   - hide : function() {
372   - this.items.getAt(1).hide();
373   - }
374   - }
375   - };
  380 + var dayStart =
  381 + {
  382 + xtype: 'checkbox',
  383 + name : 'doy',
  384 + hidden : true,
  385 + fieldLabel: 'DOY starts from 1',
  386 + inputValue: '1'
  387 + };
  388 +
  389 + var nonStandardFormat =
  390 + {
  391 + xtype: 'fieldcontainer',
  392 + defaultType: 'textfield',
  393 + layout: 'anchor',
  394 + defaults:
  395 + {
  396 + layout: '100%',
  397 + labelWidth : 150
  398 + },
  399 + id : this.formatId,
  400 + hidden : true,
  401 + items: [
  402 + {
  403 + fieldLabel : 'define time format',
  404 + name : 'nonstd',
  405 + value: 'Y-m-d H:i:s',
  406 + enableKeyEvents: true,
  407 + listeners :
  408 + {
  409 + keyUp : function() {
  410 + if (this.getValue().indexOf('z') > 0) {
  411 + this.nextSibling().show();
  412 + }
  413 + if (this.getValue().indexOf('d') > 0) {
  414 + this.nextSibling().hide();
  415 + }
  416 + }
  417 + }
  418 + },
  419 + dayStart,
  420 + {
  421 + fieldLabel : 'define max time length',
  422 + name : 'timelength',
  423 + value: 'auto'
  424 + }],
  425 + listeners :
  426 + {
  427 + hide : function() {
  428 + this.items.getAt(1).hide();
  429 + }
  430 + }
  431 + };
  432 + var isCatalog = !(this.isFile || this.isTimeTable);
376 433  
377   - var timeFormat = Ext.create('Ext.form.FieldSet', {
378   - id: timeFormatId,
379   - title: 'Time Settings',
380   - items : [{
381   - xtype: 'radiogroup',
382   - fieldLabel: 'Time Format',
383   - labelWidth: 90,
384   - cls: 'x-check-group-alt',
385   - defaults : { name : 'timefrmt'},
386   - items: [
387   - {boxLabel: 'standard&nbsp;<img amda_clicktip="standardTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'standard', checked: true},
388   - {boxLabel: 'no&nbsp;<img amda_clicktip="userTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'user',
389   - listeners: {
390   - scope : this,
391   - change: function (cb, nv, ov) {
392   - if (nv)
393   - Ext.getCmp(this.formatId).show();
394   - else
395   - Ext.getCmp(this.formatId).hide();
396   - }
397   - }
398   - }
399   - ]
400   - },
401   - nonStandardFormat,
402   - Sampling
403   - ]
404   - });
405   -
406   - var localFile = Ext.create('Ext.form.Panel', {
407   - id: this.localUploadId,
408   - fileUpload: true,
409   - hideLabels: true,
410   - frame: true,
411   - items: [{
412   - xtype: 'fileuploadfield',
413   - emptyText: 'Select Your File',
414   - width: 300,
415   - name: localUploadName,
416   - buttonText: 'Browse',
417   - listeners: {
418   - scope : this,
419   - change: function (field, value, e) {
420   - this.updateFormat(value);
421   - }
422   - }
423   - },
424   - {
425   - // it is common setting for Local and Remote files
426   - xtype : 'hiddenfield',
427   - name: 'MAX_FILE_SIZE',
428   - value: myDesktopApp.MAX_UPLOADED_FILE_SIZE // 30MB
429   - }
430   - ]
431   - });
432   -
433   - var remoteFile = Ext.create('Ext.form.Panel', {
434   - id: this.remoteUploadId,
435   - hideLabels: true,
436   - autoHeight: true,
437   - frame: true,
438   - hidden : true,
439   - items: [ fieldcontainer,
440   - { xtype : 'textfield',
441   - name : remoteUploadName,
442   - emptyText: 'Enter Remote File URL (http or ftp)',
443   - width: 310,
444   - listeners: {
445   - scope : this,
446   - change: function (field, value, e) {
447   - this.updateFormat(value);
448   - }
449   - }
450   - }
451   - ]
452   - });
  434 + var timeFormat = Ext.create('Ext.form.FieldSet', {
  435 + id: timeFormatId,
  436 + title: 'Time Settings',
  437 + hidden : isCatalog,
  438 + items : [
  439 + {
  440 + xtype: 'radiogroup',
  441 + fieldLabel: 'Time Format',
  442 + labelWidth: 90,
  443 + cls: 'x-check-group-alt',
  444 + defaults : { name : 'timefrmt'},
  445 + items: [
  446 + { boxLabel: 'standard&nbsp;<img amda_clicktip="standardTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'standard', checked: true},
  447 + { boxLabel: 'no&nbsp;<img amda_clicktip="userTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'user',
  448 + listeners:
  449 + {
  450 + scope : this,
  451 + change: function (cb, nv, ov) {
  452 + if (nv)
  453 + Ext.getCmp(this.formatId).show();
  454 + else
  455 + Ext.getCmp(this.formatId).hide();
  456 + }
  457 + }
  458 + }]
  459 + },
  460 + nonStandardFormat,
  461 + Sampling ]
  462 + });
  463 +
  464 + var localFile = Ext.create('Ext.form.Panel', {
  465 + id: this.localUploadId,
  466 + fileUpload: true,
  467 + hideLabels: true,
  468 + frame: true,
  469 + items: [
  470 + {
  471 + xtype: 'fileuploadfield',
  472 + emptyText: 'Select Your File',
  473 + width: 300,
  474 + name: localUploadName,
  475 + buttonText: 'Browse',
  476 + listeners:
  477 + {
  478 + scope : this,
  479 + change: function (field, value, e) {
  480 + this.updateFormat(value);
  481 + }
  482 + }
  483 + },
  484 + {
  485 + // it is common setting for Local and Remote files
  486 + xtype : 'hiddenfield',
  487 + name: 'MAX_FILE_SIZE',
  488 + value: myDesktopApp.MAX_UPLOADED_FILE_SIZE // 30MB
  489 + }]
  490 + });
  491 +
  492 + var remoteFile = Ext.create('Ext.form.Panel', {
  493 + id: this.remoteUploadId,
  494 + hideLabels: true,
  495 + autoHeight: true,
  496 + frame: true,
  497 + hidden : true,
  498 + items: [
  499 + fieldcontainer,
  500 + {
  501 + xtype : 'textfield',
  502 + name : remoteUploadName,
  503 + emptyText: 'Enter Remote File URL (http or ftp)',
  504 + width: 310,
  505 + listeners:
  506 + {
  507 + scope : this,
  508 + change: function (field, value, e) {
  509 + this.updateFormat(value);
  510 + }
  511 + }
  512 + }]
  513 + });
453 514  
454   - var uploadForm = Ext.create('Ext.form.FieldSet',{
455   - title: 'File Source',
456   - items : [{ xtype: 'radiogroup',
457   - cls: 'x-check-group-alt',
458   - items: [
459   - {boxLabel: 'Local', name: 'filesrc', inputValue: 'LOCAL', checked: true,
460   - listeners: {
461   - scope : this,
462   - change: function (cb, nv, ov) {
463   - if (nv == ov) return;
464   - var local = Ext.getCmp(this.localUploadId);
465   - var remote = Ext.getCmp(this.remoteUploadId);
466   - if (nv) {
467   - remote.hide();
468   - local.show();
469   - }
470   - else {
471   - local.hide();
472   - remote.show();
473   - }
474   - }
475   - }
476   - },
477   - {boxLabel: 'URL', name: 'filesrc', inputValue: 'URL'},
478   - ]}]
479   - });
480   -
481   - var myConf = {
482   - title : title,
483   - layout: {type: 'vbox', align: 'stretch'},
484   - bodyStyle: { background : '#dfe8f6'},
485   - items : [
486   - uploadForm,
487   - localFile,
488   - remoteFile,
489   - fileFormat,
490   - timeFormat
491   - ],
492   - buttons: [
493   - {
494   - text: 'Upload',
495   - handler: function()
496   - {
497   - this.postUpload();
498   - },
499   - scope : this
500   - },
501   - {
502   - text: 'Reset',
503   - handler: function(){
504   - this.up('form').getForm().reset();
505   - }
506   - }
507   - ],
508   - plugins: [{ptype: 'remoteSearchPlugin'}],
509   - listeners: {
510   - click: {
511   - element: 'el',
512   - fn: function(e,t) {
513   - var me = t,
514   - text = me.getAttribute('amda_clicktip');
515   - if (text) {
516   - e.preventDefault();
517   - AmdaAction.getInfo({name : text}, function(res,e) {
518   - if (res.success) myDesktopApp.infoMsg(res.result);
519   - });
520   - }
521   - }
522   - }
523   - }
524   - };
525   -
526   - Ext.apply (this, Ext.apply(arguments, myConf));
527   - }
  515 + var uploadForm = Ext.create('Ext.form.FieldSet',{
  516 + title: 'File Source',
  517 + items : [
  518 + {
  519 + xtype: 'radiogroup',
  520 + cls: 'x-check-group-alt',
  521 + items: [
  522 + { boxLabel: 'Local', name: 'filesrc', inputValue: 'LOCAL', checked: true,
  523 + listeners:
  524 + {
  525 + scope : this,
  526 + change: function (cb, nv, ov) {
  527 + if (nv == ov) return;
  528 + var local = Ext.getCmp(this.localUploadId);
  529 + var remote = Ext.getCmp(this.remoteUploadId);
  530 + if (nv) {
  531 + remote.hide();
  532 + local.show();
  533 + }
  534 + else {
  535 + local.hide();
  536 + remote.show();
  537 + }
  538 + }
  539 + }
  540 + },
  541 + { boxLabel: 'URL', name: 'filesrc', inputValue: 'URL'} ]
  542 + }]
  543 + });
  544 +
  545 + var myConf =
  546 + {
  547 + title : title,
  548 + layout: {type: 'vbox', align: 'stretch'},
  549 + bodyStyle: { background : '#dfe8f6'},
  550 + items : [
  551 + uploadForm,
  552 + localFile,
  553 + remoteFile,
  554 + fileFormat,
  555 + timeFormat
  556 + ],
  557 + buttons: [
  558 + {
  559 + text: 'Upload',
  560 + handler: function()
  561 + {
  562 + this.postUpload();
  563 + },
  564 + scope : this
  565 + },
  566 + {
  567 + text: 'Reset',
  568 + handler: function(){
  569 + this.up('form').getForm().reset();
  570 + }
  571 + }],
  572 + plugins: [{ptype: 'remoteSearchPlugin'}],
  573 + listeners:
  574 + {
  575 + click:
  576 + {
  577 + element: 'el',
  578 + fn: function(e,t) {
  579 + var me = t,
  580 + text = me.getAttribute('amda_clicktip');
  581 + if (text)
  582 + {
  583 + e.preventDefault();
  584 + AmdaAction.getInfo({name : text}, function(res,e) {
  585 + if (res.success) myDesktopApp.infoMsg(res.result);
  586 + });
  587 + }
  588 + }
  589 + }
  590 + }
  591 + };
  592 +
  593 + Ext.apply (this, Ext.apply(arguments, myConf));
  594 + }
528 595 });
... ...
js/app/views/UploadUI.js
... ... @@ -14,7 +14,7 @@ Ext.define(&#39;amdaUI.UploadUI&#39;, {
14 14 alias: 'widget.panelTabUpload',
15 15  
16 16 requires: [
17   - 'amdaUI.UploadPanelUI'
  17 + 'amdaUI.UploadPanelUI'
18 18 ],
19 19  
20 20 constructor: function(config) {
... ... @@ -22,43 +22,43 @@ Ext.define(&#39;amdaUI.UploadUI&#39;, {
22 22 this.callParent(arguments);
23 23 },
24 24  
25   - init : function(config) {
26   -
27   - var myConf = {
28   - layout: 'border',
29   - items: [ {
30   - xtype: 'tabpanel',
31   - region: 'center',
32   - activeTab : 0,
33   - items :
34   - [
35   - { xtype: 'panelUpload', panelType : 'file'},
36   - { xtype: 'panelUpload', panelType : 'timetable'}
37   - ]
38   - },
39   - {
40   - xtype: 'panel',
41   - region: 'south',
42   - title: 'Information',
43   - collapsible: true,
44   - height: 100,
45   - autoHide: false,
46   - iconCls: 'icon-information',
47   - html: 'Select local or remote file (time table) to upload<br/>File size is limited to <b><i>'
48   - + myDesktopApp.MAX_UPLOADED_FILE_SIZE/1000000+'MB</i></b><br/>Milliseconds are ignored for the moment',
49   - autoScroll : true,
50   - loader: {}
51   - }
52   - ]
53   - };
  25 + init : function(config)
  26 + {
  27 + var myConf =
  28 + {
  29 + layout: 'border',
  30 + items: [
  31 + {
  32 + xtype: 'tabpanel',
  33 + region: 'center',
  34 + activeTab : 0,
  35 + items : [
  36 + { xtype: 'panelUpload', panelType : 'file'},
  37 + { xtype: 'panelUpload', panelType : 'timetable'},
  38 + { xtype: 'panelUpload', panelType : 'catalog'}]
  39 + },
  40 + {
  41 + xtype: 'panel',
  42 + region: 'south',
  43 + title: 'Information',
  44 + collapsible: true,
  45 + height: 100,
  46 + autoHide: false,
  47 + iconCls: 'icon-information',
  48 + html: 'Select local or remote file (time table, catalog) to upload<br/>File size is limited to <b><i>'
  49 + + myDesktopApp.MAX_UPLOADED_FILE_SIZE/1000000+'MB</i></b><br/>Milliseconds are ignored for the moment',
  50 + autoScroll : true,
  51 + loader: {}
  52 + }]
  53 + };
54 54  
55   - Ext.apply (this, Ext.apply(arguments, myConf));
56   - },
  55 + Ext.apply (this, Ext.apply(arguments, myConf));
  56 + },
57 57  
58   - forceUpload : function(url,format) {
59   - //this.setDisabled(true);
60   - this.items.items[0].items.items[0].forceUpload(url,format);
61   - //this.setDisabled(false);
62   - }
63   -
  58 + forceUpload : function(url,format)
  59 + {
  60 + //this.setDisabled(true);
  61 + this.items.items[0].items.items[0].forceUpload(url,format);
  62 + //this.setDisabled(false);
  63 + }
64 64 });
... ...
php/classes/AmdaAction.php
... ... @@ -602,9 +602,13 @@ class AmdaAction
602 602 case 'myDataParam' :
603 603 $objectMgr = new FilesMgr();
604 604 break;
  605 + case 'catalog' :
  606 + $objectMgr = new CatalogMgr();
  607 + break;
605 608 default:
606 609 return array("error" => $nodeType." NOT_IMPLEMENTED_YET");
607 610 }
  611 +
608 612 return $objectMgr->getUploadedObject($name, $format, true);
609 613  
610 614 }
... ... @@ -1017,16 +1021,17 @@ class AmdaAction
1017 1021  
1018 1022 public function initTTCacheFromTmpObject($folderId, $name, $isCatalog = false)
1019 1023 {
1020   - if (!$isCatalog) $cacheMgr = new TimeTableCacheMgr();
1021   -
  1024 + if (!$isCatalog) $cacheMgr = new TimeTableCacheMgr();
1022 1025 else $cacheMgr = new CatalogCacheMgr();
1023 1026  
1024 1027 return $cacheMgr->initFromTmpObject($folderId, $name);
1025 1028 }
1026 1029  
1027   - public function initTTCacheFromUploadedFile($name, $format)
  1030 + public function initTTCacheFromUploadedFile($name, $format, $isCatalog = false)
1028 1031 {
1029   - $cacheMgr = new TimeTableCacheMgr();
  1032 + if (!$isCatalog) $cacheMgr = new TimeTableCacheMgr();
  1033 + else $cacheMgr = new CatalogCacheMgr();
  1034 +
1030 1035 return $cacheMgr->initFromUploadedFile($name, $format);
1031 1036 }
1032 1037  
... ...
php/classes/CatalogCacheMgr.php
... ... @@ -45,7 +45,7 @@ class CatIntervalCacheObject extends IntervalCacheObject
45 45 {
46 46 fwrite($handle,pack('L6',$this->id,$this->index,$this->start,$this->stop,$this->isNew,$this->isModified));
47 47 for ($i = 0; $i < $paramsNumber; $i++) {
48   - $paramString = $this->params[$i];
  48 + $paramString = $this->params[$i];
49 49 $paramArray = explode(',',$this->params[$i]);
50 50 for ($j = 0; $j < $paramsSizes[$i]; $j++) fwrite($handle,pack('d', $paramArray[$j]));
51 51 }
... ... @@ -63,11 +63,12 @@ class CatIntervalCacheObject extends IntervalCacheObject
63 63  
64 64 for ($i = 0; $i < $paramsNumber; $i++) {
65 65 $this->params[$i] = null;
66   - for ($j = 0; $j < $paramsSizes[$i]; $j++) {
67   - $val = unpack('dval',fread($handle,8));
68   - $this->params[$i] .= $val['val'];
69   - if ($j != $paramsSizes[$i] - 1) $this->params[$i] .= ',';
70   - }
  66 + for ($j = 0; $j < $paramsSizes[$i]; $j++)
  67 + {
  68 + $val = unpack('dval',fread($handle,8));
  69 + $this->params[$i] .= $val['val'];
  70 + if ($j != $paramsSizes[$i] - 1) $this->params[$i] .= ',';
  71 + }
71 72 }
72 73  
73 74 }
... ... @@ -306,8 +307,44 @@ class CatalogCacheMgr extends TimeTableCacheMgr
306 307 $this->cache->updateIndexes();
307 308  
308 309 //Save cache file
309   - return array('success' => $this->saveToFile(), 'token' => $this->cache->getToken(),
310   - 'status' => $this->cache->getStatus(), 'parameters' => $paramHeaders);
  310 + return array('success'=>$this->saveToFile(), 'token'=>$this->cache->getToken(),
  311 + 'status'=>$this->cache->getStatus(), 'parameters'=>$paramHeaders);
  312 + }
  313 +
  314 + public function initFromUploadedFile($name, $format)
  315 + {
  316 + //Create new cache
  317 + $this->cache = new CatalogCacheObject();
  318 +
  319 + //Load intervals from uploaded file
  320 + $intervals_res = $this->ttMgr->getUploadedObject($name, $format);
  321 +
  322 + if (!isset($intervals_res))
  323 + return array('success' => false, 'message' => 'Cannot get Uploaded Object');
  324 +
  325 + if (array_key_exists('intervals', $intervals_res))
  326 + {
  327 + foreach ($intervals_res['intervals'] as $interval)
  328 + {
  329 + //Add interval
  330 + $this->cache->addInterval($interval['start'], $interval['stop'], $interval['paramTable']);
  331 + }
  332 + }
  333 +
  334 + $this->cache->setIsModified(true);
  335 + $paramHeaders = $intervals_res['parameters'];
  336 +
  337 + $this->cache->setParamsNumber(count($paramHeaders));
  338 + $this->cache->setParamsSizes($paramHeaders);
  339 +
  340 + unset($intervals_res);
  341 +
  342 + //Update cache
  343 + $this->cache->updateIndexes();
  344 +
  345 + //Save cache file
  346 + return array('success'=>$this->saveToFile(), 'token'=>$this->cache->getToken(),
  347 + 'status'=>$this->cache->getStatus(), 'parameters'=>$paramHeaders);
311 348 }
312 349  
313 350 public function initFromTT($id, $typeTT)
... ...
php/classes/CatalogMgr.php
... ... @@ -4,8 +4,8 @@
4 4 * @class CatalogMgr
5 5 */
6 6  
7   -class CatalogMgr extends TimeTableMgr {
8   -
  7 +class CatalogMgr extends TimeTableMgr
  8 +{
9 9 function __construct($sharedObject = FALSE) {
10 10 parent::__construct('Tt.xml', $sharedObject);
11 11 $this->contentRootId = 'catalog-treeRootNode';
... ... @@ -20,9 +20,21 @@ class CatalogMgr extends TimeTableMgr {
20 20 $this->xp = new domxpath($this->contentDom);
21 21 }
22 22 }
23   -
24   - public function getTmpObject($folderId, $name, $onlyDescription = false) {
25 23  
  24 + public function getUploadedObject($name, $format, $onlyDescription = false)
  25 + {
  26 + if ($format == 'VOT')
  27 + {
  28 + $attributesToReturn = $this->vot2amda(USERTEMPDIR.$name, $onlyDescription);
  29 + }
  30 + $attributesToReturn['objName'] = $name;
  31 + $attributesToReturn['objFormat'] = $format;
  32 +
  33 + return $attributesToReturn;
  34 + }
  35 +
  36 + public function getTmpObject($folderId, $name, $onlyDescription = false)
  37 + {
26 38 $filePath = USERWORKINGDIR.$folderId.'/'.$name.'.xml';
27 39  
28 40 if (!file_exists($filePath))
... ... @@ -415,5 +427,78 @@ class CatalogMgr extends TimeTableMgr {
415 427 // return array ('error' => $e->getMessage());
416 428 // }
417 429 // }
  430 +
  431 +/*
  432 +* Uploaded vot catalog => convert to AMDA tmp
  433 +*/
  434 + protected function vot2amda($tmp_file, $onlyDescription = false)
  435 + {
  436 + // Load Catalog
  437 + $this->objectDom->load($tmp_file);
  438 + $objToGet = $this->objectDom->getElementsByTagName('TABLEDATA')->item(0);
  439 +
  440 + $attributes = $objToGet->childNodes;
  441 + $paramsNodes = $this->objectDom->getElementsByTagName('FIELD');
  442 + $paramsNumber = $paramsNodes->length;
  443 +
  444 + foreach($attributes as $attribute)
  445 + {
  446 + if ($attribute->tagName == 'TR')
  447 + {
  448 + $start = $attribute->getElementsByTagName('TD')->item(0)->nodeValue;
  449 + $stop = $attribute->getElementsByTagName('TD')->item(1)->nodeValue;
  450 + $params = array();
  451 +
  452 + for ($i = 2; $i < $paramsNumber; $i++)
  453 + {
  454 + $param = $attribute->getElementsByTagName('TD')->item($i)->nodeValue;
  455 +
  456 + if ($paramsNodes->item($i)->hasAttribute('arraysize'))
  457 + {
  458 + $param = join(",",explode(" ",trim($param)));
  459 + }
  460 + $params[] = $param;
  461 + }
  462 + if (!$onlyDescription)
  463 + $attributesToReturn['intervals'][] = array('start' => $start, 'stop' => $stop, 'paramTable' => $params);
  464 + }
  465 + }
  466 +
  467 + if ($paramsNumber > 2)
  468 + {
  469 + $paramsArray = array();
  470 + for ($i = 2; $i < $paramsNumber; $i++)
  471 + {
  472 + $oneParam = array();
  473 + $paramNode = $paramsNodes->item($i);
  474 +
  475 + if ($paramNode->hasAttribute('arraysize'))
  476 + {
  477 + $oneParam['size'] = $paramNode->getAttribute('arraysize');
  478 + }
  479 + else
  480 + {
  481 + $oneParam['size'] = 1;
  482 + }
  483 + foreach ($paramNode->attributes as $attr)
  484 + {
  485 + if ($attr->nodeName == 'datatype')
  486 + $oneParam['type'] = $attr->nodeValue;//'Double';
  487 + else if ($attr->nodeName != 'arraysize')
  488 + $oneParam[$attr->nodeName] = $attr->nodeValue;
  489 + }
  490 + $paramsArray[] = $oneParam;
  491 + }
  492 + $attributesToReturn['success'] = true;
  493 + $attributesToReturn['parameters'] = $paramsArray;
  494 + }
  495 +
  496 + $suffix = explode('.', basename($tmp_file));
  497 + $attributesToReturn['name'] = basename($tmp_file, '.'.$suffix[1]);
  498 + $attributesToReturn['created'] = date('Y-m-d')."T".date('H:i:s');
  499 + $attributesToReturn['description'] = htmlspecialchars($this->objectDom->getElementsByTagName('DESCRIPTION')->item(0)->nodeValue);
  500 +
  501 + return($attributesToReturn);
  502 + }
418 503 }
419 504 ?>
... ...
php/config.php
... ... @@ -170,7 +170,7 @@ $API = array(
170 170 'initTTCacheFromTT'=>array('len'=>2),
171 171 'initForChart'=>array('len'=>4),
172 172 'initTTCacheFromTmpObject'=>array('len'=>3),
173   - 'initTTCacheFromUploadedFile'=>array('len'=>2),
  173 + 'initTTCacheFromUploadedFile'=>array('len'=>3),
174 174 'readTTCacheIntervals'=>array('len'=>1),
175 175 'readIntervalsForChart'=>array('len'=>1),
176 176 'addTTCacheInterval'=>array('len'=>1),
... ...
php/uploadFile.php
... ... @@ -7,296 +7,300 @@
7 7 *
8 8 */
9 9  
10   - function file_upload_error_message($error_code) {
11   -
12   - switch ($error_code) {
13   - case UPLOAD_ERR_INI_SIZE:
14   - return 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
15   - case UPLOAD_ERR_FORM_SIZE:
16   - return 'The uploaded file exceeds max file size of '.maxSize;
17   - case UPLOAD_ERR_PARTIAL:
18   - return 'The uploaded file was only partially uploaded';
19   - case UPLOAD_ERR_NO_FILE:
20   - return 'No file was uploaded';
21   - case UPLOAD_ERR_NO_TMP_DIR:
22   - return 'Missing a temporary folder';
23   - case UPLOAD_ERR_CANT_WRITE:
24   - return 'Failed to write file to disk';
25   - case UPLOAD_ERR_EXTENSION:
26   - return 'File upload stopped by extension';
27   - case UPLOAD_ERR_EMPTY:
28   - return 'File is empty';
29   - default:
30   - return 'Unknown upload error';
31   - }
32   - }
33   -
34   - function getUrlFileSize($URL) {
35   - $ch = curl_init($URL);
36   - curl_setopt($ch, CURLOPT_NOBODY, true);
37   - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
38   - curl_setopt($ch, CURLOPT_HEADER, true);
39   - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
40   - $data = curl_exec($ch);
41   - curl_close($ch);
  10 + function file_upload_error_message($error_code)
  11 + {
  12 + switch ($error_code)
  13 + {
  14 + case UPLOAD_ERR_INI_SIZE:
  15 + return 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
  16 + case UPLOAD_ERR_FORM_SIZE:
  17 + return 'The uploaded file exceeds max file size of '.maxSize;
  18 + case UPLOAD_ERR_PARTIAL:
  19 + return 'The uploaded file was only partially uploaded';
  20 + case UPLOAD_ERR_NO_FILE:
  21 + return 'No file was uploaded';
  22 + case UPLOAD_ERR_NO_TMP_DIR:
  23 + return 'Missing a temporary folder';
  24 + case UPLOAD_ERR_CANT_WRITE:
  25 + return 'Failed to write file to disk';
  26 + case UPLOAD_ERR_EXTENSION:
  27 + return 'File upload stopped by extension';
  28 + case UPLOAD_ERR_EMPTY:
  29 + return 'File is empty';
  30 + default:
  31 + return 'Unknown upload error';
  32 + }
  33 + }
42 34  
43   - $ContentLength = 1000000000000000000;
44   - if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
45   - $ContentLength = (int)$matches[1];
46   - }
47   - return $ContentLength;
48   - }
  35 + function getUrlFileSize($URL)
  36 + {
  37 + $ch = curl_init($URL);
  38 + curl_setopt($ch, CURLOPT_NOBODY, true);
  39 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  40 + curl_setopt($ch, CURLOPT_HEADER, true);
  41 + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  42 + $data = curl_exec($ch);
  43 + curl_close($ch);
49 44  
50   - /**
51   - * Main
52   - */
53   - define("UPLOAD_ERR_EMPTY",5);
  45 + $ContentLength = 1000000000000000000;
  46 + if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
  47 + $ContentLength = (int)$matches[1];
  48 + }
  49 +
  50 + return $ContentLength;
  51 + }
54 52  
55   - require_once 'config.php';
  53 + /**
  54 + * Main
  55 + */
  56 + define("UPLOAD_ERR_EMPTY",5);
56 57  
57   - // error_reporting(E_ERROR | E_WARNING | E_PARSE);
  58 + require_once 'config.php';
58 59  
59   - if (!isset($_POST['sessionID']))
60   - {
61   - $response = array( 'success' => false, 'error' => ': Check that uploaded file size is less than '.ini_get('upload_max_filesize'));
62   - die(json_encode($response));
63   - }
  60 + // error_reporting(E_ERROR | E_WARNING | E_PARSE);
64 61  
65   - define('USERDATADIR', USERPATH."/".$_POST['sessionID']."/DATA/");
66   - define('USERTEMPDIR', USERPATH."/".$_POST['sessionID']."/TEMP/");
67   - define('USERWSDIR', USERPATH."/".$_POST['sessionID']."/WS/");
68   - define('USERWORKINGDIR', USERPATH."/".$_POST['sessionID']."/RES/");
69   - define('ATTACHMENTDIR', DATAPATH."/Feedback/Attach/");
70   - define('maxSize',$_POST['MAX_FILE_SIZE'] < ini_get('upload_max_filesize'));
  62 + if (!isset($_POST['sessionID']))
  63 + {
  64 + $response = array( 'success' => false, 'error' => ': Check that uploaded file size is less than '.ini_get('upload_max_filesize'));
  65 + die(json_encode($response));
  66 + }
71 67  
72   - if (!is_dir(USERTEMPDIR)) mkdir(USERTEMPDIR.'/', 0755, true);
73   - if (!is_dir(ATTACHMENTDIR)) mkdir(ATTACHMENTDIR.'/', 0755, true);
  68 + define('USERDATADIR', USERPATH."/".$_POST['sessionID']."/DATA/");
  69 + define('USERTEMPDIR', USERPATH."/".$_POST['sessionID']."/TEMP/");
  70 + define('USERWSDIR', USERPATH."/".$_POST['sessionID']."/WS/");
  71 + define('USERWORKINGDIR', USERPATH."/".$_POST['sessionID']."/RES/");
  72 + define('ATTACHMENTDIR', DATAPATH."/Feedback/Attach/");
  73 + define('maxSize',$_POST['MAX_FILE_SIZE'] < ini_get('upload_max_filesize'));
74 74  
75   - if (!$_FILES['attachment'] && !$_FILES['localFileName'] && !$_FILES['localTTName'] &&
76   - !$_POST['remoteFile'] && !$_POST['remoteTT'])
77   - {
78   - $response = array( 'success' => false, 'error' => 'UNDEFINED ACTION');
79   - die(json_encode($response));
80   - }
81   -
82   - $fileFrmt = $_POST['filefrmt'];
83   - $timeFrmt = $_POST['timefrmt'] ? $_POST['timefrmt'] : null;
84   - $timeSmplg = $_POST['timesmpl'] ? $_POST['timesmpl'] : null;
85   - $nonStd = $_POST['nonstd'] ? $_POST['nonstd'] : null;
86   - $timeLength = $_POST['timelength'] ? $_POST['timelength'] : null;
87   - $doy = $_POST['doy'] ? $_POST['doy'] : null;
  75 + if (!is_dir(USERTEMPDIR)) mkdir(USERTEMPDIR.'/', 0755, true);
  76 + if (!is_dir(ATTACHMENTDIR)) mkdir(ATTACHMENTDIR.'/', 0755, true);
88 77  
89   - $allFormats = array('fileFormat' => $fileFrmt, 'timeFormat' => $timeFrmt, 'doy' => $doy,
90   - 'timeSampling' => $timeSmplg, 'nonStandard' => $nonStd, 'timeLength' => $timeLength);
  78 + if (!$_FILES['attachment'] && !$_FILES['localFileName'] && !$_FILES['localTTName'] && !$_FILES['localCatName'] &&
  79 + !$_POST['remoteFile'] && !$_POST['remoteTT'] && !$_POST['remoteCat'])
  80 + {
  81 + $response = array( 'success' => false, 'error' => 'UNDEFINED ACTION');
  82 + die(json_encode($response));
  83 + }
91 84  
92   - if ($_POST['filesrc'] == 'URL')
93   - $fromURL = true;
94   - else
95   - $fromURL = false;
96   - // to check ws sizw
97   - $wsMgr = new UserMgr();
  85 + $fileFrmt = $_POST['filefrmt'];
  86 + $timeFrmt = $_POST['timefrmt'] ? $_POST['timefrmt'] : null;
  87 + $timeSmplg = $_POST['timesmpl'] ? $_POST['timesmpl'] : null;
  88 + $nonStd = $_POST['nonstd'] ? $_POST['nonstd'] : null;
  89 + $timeLength = $_POST['timelength'] ? $_POST['timelength'] : null;
  90 + $doy = $_POST['doy'] ? $_POST['doy'] : null;
  91 +
  92 + $allFormats = array('fileFormat' => $fileFrmt, 'timeFormat' => $timeFrmt, 'doy' => $doy,
  93 + 'timeSampling' => $timeSmplg, 'nonStandard' => $nonStd, 'timeLength' => $timeLength);
98 94  
99   - if ($fromURL)
100   - {
101   - // url files check
102   - if ($_POST['remoteFile'])
103   - {
104   - $remoteName = $_POST['remoteFile'];
105   - $fileName = substr(strrchr($remoteName,"/"),1);
106   - $localName = USERDATADIR.$fileName;
107   - $isFile = true;
108   - }
109   - else
110   - {
111   - $remoteName = $_POST['remoteTT'];
112   - $fileName = substr(strrchr($remoteName,"/"),1);
113   - $localName = USERTEMPDIR.$fileName;
114   - $isFile = false;
115   - }
  95 + if ($_POST['filesrc'] == 'URL') $fromURL = true;
  96 + else $fromURL = false;
  97 +
  98 + // to check ws sizw
  99 + $wsMgr = new UserMgr();
  100 +
  101 + if ($fromURL)
  102 + {
  103 + // url files check
  104 + if ($_POST['remoteFile'])
  105 + {
  106 + $remoteName = $_POST['remoteFile'];
  107 + $fileName = substr(strrchr($remoteName,"/"),1);
  108 + $localName = USERDATADIR.$fileName;
  109 + $isFile = true;
  110 + }
  111 + else
  112 + {
  113 + $isTimeTable = $_POST['remoteTT'] ? true : false;
  114 + $remoteName = $isTimeTable ? $_POST['remoteTT'] : $_POST['remoteCat'];
  115 + $fileName = substr(strrchr($remoteName,"/"),1);
  116 + $localName = USERTEMPDIR.$fileName;
  117 + $isFile = false;
  118 + }
116 119  
117   - $url = null;
  120 + $url = null;
118 121  
119   - if (substr($remoteName,0,4) == 'http')
120   - $url = 'http';
121   - if (substr($remoteName,0,3) == 'ftp')
122   - $url = 'ftp';
  122 + if (substr($remoteName,0,4) == 'http') $url = 'http';
  123 + if (substr($remoteName,0,3) == 'ftp') $url = 'ftp';
123 124  
124   - if (!$url)
125   - {
126   - $response = array( 'success' => false, 'error' => 'Unknown net protocol');
127   - die(json_encode($response));
128   - }
  125 + if (!$url)
  126 + {
  127 + $response = array( 'success' => false, 'error' => 'Unknown net protocol');
  128 + die(json_encode($response));
  129 + }
129 130  
130   - if (file_exists($localName) && $isFile)
131   - {
132   - $response = array( 'success' => false, 'error' => 'File '.$fileName.' exists');
133   - die(json_encode($response));
134   - }
  131 + if (file_exists($localName) && $isFile)
  132 + {
  133 + $response = array( 'success' => false, 'error' => 'File '.$fileName.' exists');
  134 + die(json_encode($response));
  135 + }
135 136  
136   - if ($url == 'ftp')
137   - $fileSize = filesize($remoteName);
138   - else
139   - $fileSize = getUrlFileSize($remoteName);
  137 + if ($url == 'ftp') $fileSize = filesize($remoteName);
  138 + else $fileSize = getUrlFileSize($remoteName);
140 139  
141   - if (!$fileSize)
142   - {
143   - $response = array( 'success' => false, 'error' => 'Can\'t estimate file size '.$fileName);
144   - die(json_encode($response));
145   - }
  140 + if (!$fileSize)
  141 + {
  142 + $response = array( 'success' => false, 'error' => 'Can\'t estimate file size '.$fileName);
  143 + die(json_encode($response));
  144 + }
146 145  
147   - if ($file['size'] > DISK_QUOTA)
148   - {
149   - $response = array( 'success' => false, 'error' => 'The file you selected is too big for allowed disk quota');
150   - die(json_encode($response));
151   - }
152   -
153   - if ($wsMgr->getWsSize() + $fileSize > DISK_QUOTA && $isFile)
154   - {
155   - $response = array( 'success' => false, 'error' => 'Please clean up you workspace. You are about to exceed available disk space');
156   - die(json_encode($response));
157   - }
  146 + if ($file['size'] > DISK_QUOTA)
  147 + {
  148 + $response = array( 'success' => false, 'error' => 'The file you selected is too big for allowed disk quota');
  149 + die(json_encode($response));
  150 + }
  151 +
  152 + if ($wsMgr->getWsSize() + $fileSize > DISK_QUOTA && $isFile)
  153 + {
  154 + $response = array( 'success' => false, 'error' => 'Please clean up you workspace. You are about to exceed available disk space');
  155 + die(json_encode($response));
  156 + }
158 157  
159   - if ($fileSize > maxSize)
160   - {
161   - $response = array( 'success' => false, 'error' => 'The uploaded file exceeds '.maxSize);
162   - die(json_encode($response));
163   - }
  158 + if ($fileSize > maxSize)
  159 + {
  160 + $response = array( 'success' => false, 'error' => 'The uploaded file exceeds '.maxSize);
  161 + die(json_encode($response));
  162 + }
164 163  
165   - if (!copy($remoteName, $localName))
166   - {
167   - $response = array( 'success' => false, 'error' => 'Can\'t copy '.$fileName);
168   - die(json_encode($response));
169   - }
  164 + if (!copy($remoteName, $localName))
  165 + {
  166 + $response = array( 'success' => false, 'error' => 'Can\'t copy '.$fileName);
  167 + die(json_encode($response));
  168 + }
170 169  
171   - if (is_executable($localName))
172   - {
173   - $response = array( 'success' => false, 'error' => 'File '.$fileName.' is executable');
174   - unlink($localName);
175   - die(json_encode($response));
176   - }
  170 + if (is_executable($localName))
  171 + {
  172 + $response = array( 'success' => false, 'error' => 'File '.$fileName.' is executable');
  173 + unlink($localName);
  174 + die(json_encode($response));
  175 + }
177 176  
178   - if ($isFile)
179   - {
180   - $fileMgr = new FilesMgr();
181   - $amdaStat = new AmdaStats($_POST['sessionID']);
182   - if ($amdaStat->success)
183   - $amdaStat->addTask('upload', $_POST['sessionID'], null);
184   - }
185   - // Time Table
186   - else
187   - {
188   - $response = array( 'success' => true, 'file' => $fileName, 'format' => $_POST['ttfrmt'] );
189   - die(json_encode($response));
190   - }
191   - }
192   - else
193   - {
194   - // local files check
195   - if ($_FILES['localFileName'])
196   - {
197   - $file = $_FILES['localFileName'];
198   - $localName = USERDATADIR.$file['name'];
199   - $isFile = true;
200   - }
201   - else if ($_FILES['attachment'])
202   - {
203   - if (!is_dir(ATTACHMENTDIR))
204   - mkdir(ATTACHMENTDIR,755);
  177 + if ($isFile)
  178 + {
  179 + $fileMgr = new FilesMgr();
  180 + $amdaStat = new AmdaStats($_POST['sessionID']);
  181 + if ($amdaStat->success) $amdaStat->addTask('upload', $_POST['sessionID'], null);
  182 + }
  183 + // Time Table
  184 + else if ($isTimeTable)
  185 + {
  186 + $response = array( 'success'=>true, 'file'=>$fileName, 'format'=>$_POST['ttfrmt'] );
  187 + die(json_encode($response));
  188 + }
  189 + else
  190 + {
  191 + $response = array( 'success'=>true, 'file'=>$fileName, 'format'=>$_POST['catfrmt'] );
  192 + die(json_encode($response));
  193 + }
  194 + }
  195 + else
  196 + {
  197 + // local files check
  198 + if ($_FILES['localFileName'])
  199 + {
  200 + $file = $_FILES['localFileName'];
  201 + $localName = USERDATADIR.$file['name'];
  202 + $isFile = true;
  203 + }
  204 + else if ($_FILES['attachment'])
  205 + {
  206 + if (!is_dir(ATTACHMENTDIR)) mkdir(ATTACHMENTDIR,755);
205 207  
206   - $file = $_FILES['attachment'];
207   - $file['name'] = str_replace(" ","_",$file['name']);
208   - $file['name'] = $_POST['sessionID'].'_'.date("Y-m-d\TH:i:s").'_'.$file['name'];
209   - $localName = ATTACHMENTDIR.$file['name'];
210   - $isFile = false;
211   - }
212   - else
213   - {
214   - $file = $_FILES['localTTName'];
215   - $localName = USERTEMPDIR.$file['name'];
216   - $isFile = false;
217   - }
  208 + $file = $_FILES['attachment'];
  209 + $file['name'] = str_replace(" ","_",$file['name']);
  210 + $file['name'] = $_POST['sessionID'].'_'.date("Y-m-d\TH:i:s").'_'.$file['name'];
  211 + $localName = ATTACHMENTDIR.$file['name'];
  212 + $isFile = false;
  213 + }
  214 + else
  215 + {
  216 + $isTimeTable = $_FILES['localTTName'] ? true : false;
  217 + $file = $isTimeTable ? $_FILES['localTTName'] : $_FILES['localCatName'];
  218 + $localName = USERTEMPDIR.$file['name'];
  219 + $isFile = false;
  220 + }
218 221  
219   - if($file['size'] === 0 && $file['error'] === 0){
220   - $file['error'] = 5;
221   - }
  222 + if($file['size'] === 0 && $file['error'] === 0)
  223 + {
  224 + $file['error'] = 5;
  225 + }
222 226  
223   - if ($file['error'] !== 0)
224   - {
225   - $response = array( 'success' => false, 'error' => file_upload_error_message($file['error']));
226   - die(json_encode($response));
227   - }
  227 + if ($file['error'] !== 0)
  228 + {
  229 + $response = array( 'success'=>false, 'error'=>file_upload_error_message($file['error']));
  230 + die(json_encode($response));
  231 + }
228 232  
229   - if (file_exists($localName) && $isFile)
230   - {
231   - $response = array( 'success' => false, 'error' => 'File '.$file['name'].' exists');
232   - die(json_encode($response));
233   - }
  233 + if (file_exists($localName) && $isFile)
  234 + {
  235 + $response = array( 'success'=>false, 'error'=>'File '.$file['name'].' exists');
  236 + die(json_encode($response));
  237 + }
234 238  
235   - if (is_executable($file['tmp_name']))
236   - {
237   - $response = array( 'success' => false, 'error' => 'File '.$file['name'].' is executable');
238   - unlink($file['tmp_name']);
239   - die(json_encode($response));
240   - }
  239 + if (is_executable($file['tmp_name']))
  240 + {
  241 + $response = array( 'success'=>false, 'error'=>'File '.$file['name'].' is executable');
  242 + unlink($file['tmp_name']);
  243 + die(json_encode($response));
  244 + }
241 245  
242   - if (!is_uploaded_file($file['tmp_name']))
243   - {
244   - $response = array( 'success' => false, 'error' => 'File '.$file['name'].' WASN\'T UPLOADED');
245   - unlink($file['tmp_name']);
246   - die(json_encode($response));
247   - }
  246 + if (!is_uploaded_file($file['tmp_name']))
  247 + {
  248 + $response = array( 'success'=>false, 'error'=>'File '.$file['name'].' WASN\'T UPLOADED');
  249 + unlink($file['tmp_name']);
  250 + die(json_encode($response));
  251 + }
248 252  
249   - if ($file['size'] > DISK_QUOTA)
250   - {
251   - $response = array( 'success' => false, 'error' => 'The file you selected is too big for allowed disk quota');
252   - die(json_encode($response));
253   - }
  253 + if ($file['size'] > DISK_QUOTA)
  254 + {
  255 + $response = array( 'success'=>false, 'error'=>'The file you selected is too big for allowed disk quota');
  256 + die(json_encode($response));
  257 + }
254 258  
255   - if ($wsMgr->getWsSize() + $file['size'] > DISK_QUOTA)
256   - {
257   - $response = array( 'success' => false, 'error' => 'Please clean up your workspace. You are about to exceed available disk space');
258   - die(json_encode($response));
259   - }
  259 + if ($wsMgr->getWsSize() + $file['size'] > DISK_QUOTA)
  260 + {
  261 + $response = array( 'success'=>false, 'error'=>'Please clean up your workspace. You are about to exceed available disk space');
  262 + die(json_encode($response));
  263 + }
260 264  
261   - if (!rename($file['tmp_name'], $localName))
262   - {
263   - $response = array( 'success' => false, 'error' => 'Cannot copy file '.$file['name']);
264   - unlink($file['tmp_name']);
265   - die(json_encode($response));
266   - }
  265 + if (!rename($file['tmp_name'], $localName))
  266 + {
  267 + $response = array( 'success'=>false, 'error'=>'Cannot copy file '.$file['name']);
  268 + unlink($file['tmp_name']);
  269 + die(json_encode($response));
  270 + }
267 271  
268   - if (file_exists($localName) && !$isFile)
269   - {
270   - if ($_POST['ttfrmt'] == 'VOT')
271   - {
272   - $votMgr = new VOTableMgr();
273   - if (!$votMgr->load($localName) || !$votMgr->isValidSchema())
274   - {
275   - $response = array( 'success' => false, 'error' => 'File '.$file['name'].' is not valid');
276   - unlink($localName);
277   - die(json_encode($response));
278   - }
279   - }
280   - }
  272 + if (file_exists($localName) && !$isFile)
  273 + {
  274 + if ($_POST['ttfrmt'] == 'VOT' || $_POST['catfrmt'] == 'VOT')
  275 + {
  276 + $votMgr = new VOTableMgr();
  277 + if (!$votMgr->load($localName) || !$votMgr->isValidSchema())
  278 + {
  279 + $response = array( 'success'=>false, 'error'=>'File '.$file['name'].' is not valid');
  280 + unlink($localName);
  281 + die(json_encode($response));
  282 + }
  283 + }
  284 + }
281 285  
282   - $fileName = $file['name'];
  286 + $fileName = $file['name'];
283 287  
284   - if ($isFile)
285   - {
286   - $fileMgr = new FilesMgr();
287   - $amdaStat = new AmdaStats($_POST['sessionID']);
288   - if ($amdaStat->success)
289   - $amdaStat->addTask('upload', $_POST['sessionID'], null);
290   - }
291   - // Time Table
292   - else
293   - {
294   - $response = array( 'success' => true, 'file' => $fileName, 'format' => $_POST['ttfrmt'] );
295   - die(json_encode($response));
296   - }
297   - }
  288 + if ($isFile)
  289 + {
  290 + $fileMgr = new FilesMgr();
  291 + $amdaStat = new AmdaStats($_POST['sessionID']);
  292 + if ($amdaStat->success) $amdaStat->addTask('upload', $_POST['sessionID'], null);
  293 + }
  294 + // Time Table or Catalog
  295 + else
  296 + {
  297 + $format = $isTimeTable ? $_POST['ttfrmt'] : $_POST['catfrmt'];
  298 + $response = array( 'success'=>true, 'file'=>$fileName, 'format'=>$format );
  299 + die(json_encode($response));
  300 + }
  301 + }
298 302  
299   - $response = $fileMgr->addFile($fileName, $allFormats);
  303 + $response = $fileMgr->addFile($fileName, $allFormats);
300 304  
301   - echo json_encode($response);
  305 + echo json_encode($response);
302 306 ?>
... ...