Commit fa5a398d4b2a141bb423f4c3bd87f21ee52ef009
Exists in
master
and in
6 other branches
Merge amdadev into master
Showing
12 changed files
with
104 additions
and
22 deletions
Show diff stats
generic_data/Functions/functions.xml
... | ... | @@ -327,6 +327,10 @@ |
327 | 327 | <info_brief>Closest integer greater than or equal to its argument</info_brief> |
328 | 328 | <new_kernel>Ceil</new_kernel> |
329 | 329 | </function> |
330 | + <function name="isNaN()" kind="math" group="math"> | |
331 | + <info_brief>Checks if there is a NaN value</info_brief> | |
332 | + <new_kernel>IsNaN</new_kernel> | |
333 | + </function> | |
330 | 334 | <function name="cos()" kind="math" group="math"> |
331 | 335 | <info_brief>cosine</info_brief> |
332 | 336 | <new_kernel>cos</new_kernel> | ... | ... |
help/ttTimeFormat
1 | 1 | <h3>ASCII Time Table Time Format</h3> |
2 | -<li><i>Year Month Day Hour Minute Second</i> => with different separators ("-", ":", "/", " ") used in a standard way. | |
3 | -<br/><i>Milliseconds</i> are not taken in to account. | |
2 | +<li><i>Year Month Day Hour Minute Second Millisecond</i> => with different separators ("-", ":", "/", " ") used in a standard way. | |
4 | 3 | <br/><br/> |
5 | 4 | Examples: |
6 | 5 | <ul> |
7 | - <li> 2001-01-01T00:00:00 | |
8 | - <li> 2001-01-01 00:00:00 | |
9 | - <li> 2001 01 01 00 00 00 | |
10 | - <li> 2001/01/01 00:00:00 | |
6 | + <li> 2001-01-01T00:00:00.000 | |
7 | + <li> 2001-01-01 00:00:00.000 | |
8 | + <li> 2001 01 01 00 00 00.000 | |
9 | + <li> 2001/01/01 00:00:00.000 | |
11 | 10 | </ul> |
12 | -<li> <i>Year Day-Of-Year Hour Minute Second</i> => with different separators ("-", ":", "/", " "). | |
11 | +<li> <i>Year Day-Of-Year Hour Minute Second Millisecond</i> => with different separators ("-", ":", "/", " ", "."). | |
13 | 12 | <i>Day-Of-Year</i> (three letters !!!) starts from 0, i.e. the 1st of January is 0. |
14 | 13 | <br/><br/> |
15 | 14 | <li>If you plan to use uploaded time table to work with data note that :<br/> | ... | ... |
js/app/AmdaApp.js
... | ... | @@ -440,6 +440,7 @@ Ext.define('amdaApp.AmdaApp', { |
440 | 440 | text : 'Reset password', |
441 | 441 | iconCls : 'icon-resetpwd', |
442 | 442 | id : 'resetpwd-win-tool', |
443 | + disabled: isGuest || (sessionID == 'impex'), | |
443 | 444 | handler : function(obj, e) { |
444 | 445 | e.stopEvent(); |
445 | 446 | var moduleId = obj.el.id; | ... | ... |
js/app/models/PlotObjects/PlotPanelObject.js
... | ... | @@ -52,6 +52,7 @@ Ext.define('amdaPlotObj.PlotPanelObject', { |
52 | 52 | {name: 'panel-title-font-size', type: 'int'}, |
53 | 53 | {name: 'panel-title-font-bold', type: 'boolean'}, |
54 | 54 | {name: 'panel-title-font-italic', type: 'boolean'}, |
55 | + {name: 'panel-showint-info', type: 'boolean'}, | |
55 | 56 | {name: 'panel-plot-type', type: 'string'}, |
56 | 57 | {name: 'panel-font-activated', type: 'boolean'}, |
57 | 58 | {name: 'panel-font-name', type: 'string'}, |
... | ... | @@ -571,6 +572,9 @@ Ext.define('amdaPlotObj.PlotPanelObject', { |
571 | 572 | this.set('panel-title-font-bold', false); |
572 | 573 | this.set('panel-title-font-italic', false); |
573 | 574 | |
575 | + | |
576 | + this.set('panel-showint-info', false); | |
577 | + | |
574 | 578 | this.set('panel-font-activated', false); |
575 | 579 | this.set('panel-font-name', amdaDefaultValues.plot.panel.font.name); |
576 | 580 | this.set('panel-font-size', amdaDefaultValues.plot.panel.font.size); |
... | ... | @@ -710,6 +714,9 @@ Ext.define('amdaPlotObj.PlotPanelObject', { |
710 | 714 | panelValues['panel-title-font-size'] = this.get('panel-title-font-size'); |
711 | 715 | panelValues['panel-title-font-bold'] = this.get('panel-title-font-bold'); |
712 | 716 | panelValues['panel-title-font-italic'] = this.get('panel-title-font-italic'); |
717 | + | |
718 | + panelValues['panel-showint-info'] = this.get('panel-showint-info'); | |
719 | + | |
713 | 720 | panelValues['panel-plot-type'] = this.get('panel-plot-type'); |
714 | 721 | panelValues['panel-font-activated'] = this.get('panel-font-activated'); |
715 | 722 | panelValues['panel-font-name'] = this.get('panel-font-name'); | ... | ... |
js/app/views/PlotComponents/PlotPanelForm.js
... | ... | @@ -152,6 +152,12 @@ Ext.define('amdaPlotComp.PlotPanelForm', { |
152 | 152 | this.addStandardFieldSet('Manual Margins', '', marginItems), |
153 | 153 | this.addStandardFieldSet('Preferred Dimensions', '', preferedDimItems), |
154 | 154 | this.addStandardFieldSet('Title', '', titleItems), |
155 | + | |
156 | + this.addStandardCheck('panel-showint-info', 'Show interval number', function(name, value, oldValue) { | |
157 | + me.object.set('panel-showint-info', value); | |
158 | + me.crtTree.refresh(); | |
159 | + }, 'When this option is selected, the number of the interval on the TT/Catalog is shown on plot.'), | |
160 | + | |
155 | 161 | this.addStandardFont('panel-font'), |
156 | 162 | this.addStandardFieldSet('Status Bars', '', statusItems), |
157 | 163 | this.addStandardFieldSet('Ticks Bars', '', tickItems) | ... | ... |
js/app/views/TimeTableUI.js
... | ... | @@ -197,7 +197,7 @@ Ext.define('amdaUI.TimeTableUI', { |
197 | 197 | // synchronisation of objects |
198 | 198 | this.object = ttobj; |
199 | 199 | timeTableModule.linkedNode.create(); |
200 | - } else if (this.fclose() || this.status && (this.status.nbFiltered > 0)) /*TimeTable object has been modified*/ | |
200 | + } else if (this.fclose() || this.status ) /*TimeTable object has been modified*/ | |
201 | 201 | { |
202 | 202 | if (this.object.isModified('name') || this.object.get('fromPlugin')) |
203 | 203 | { | ... | ... |
js/app/views/UploadUI.js
... | ... | @@ -47,7 +47,7 @@ Ext.define('amdaUI.UploadUI', { |
47 | 47 | autoHide: false, |
48 | 48 | iconCls: 'icon-information', |
49 | 49 | html: 'Select local or remote file (time table, catalog) to upload<br/>File size is limited to <b><i>' |
50 | - + myDesktopApp.MAX_UPLOADED_FILE_SIZE/1000000+'MB</i></b><br/>Milliseconds are ignored for the moment', | |
50 | + + myDesktopApp.MAX_UPLOADED_FILE_SIZE/1000000+'MB</i></b><br/>Milliseconds are taken into account', | |
51 | 51 | autoScroll : true, |
52 | 52 | loader: {} |
53 | 53 | }] | ... | ... |
php/WebServices/WebServer.php
... | ... | @@ -50,7 +50,11 @@ class WebServer |
50 | 50 | $this->userPWD = $vars['password']; |
51 | 51 | else |
52 | 52 | $this->userPWD = WSConfigClass::getAnonymousUserPwd(); |
53 | - | |
53 | + | |
54 | + if (isset($vars['referenceTime'])) | |
55 | + $this->referenceTime = $vars['referenceTime']; | |
56 | + else | |
57 | + $this->referenceTime = NULL; | |
54 | 58 | return array('success' => true, 'vars' => $vars); |
55 | 59 | } |
56 | 60 | |
... | ... | @@ -114,6 +118,12 @@ class WebServer |
114 | 118 | |
115 | 119 | return $dataSetDom; |
116 | 120 | } |
121 | + | |
122 | + private function getUserInfo($data) | |
123 | + { | |
124 | + $res = $this->init($data); | |
125 | + $this->initUserMgr(); | |
126 | + } | |
117 | 127 | |
118 | 128 | /* |
119 | 129 | * get user TimeTables list; Shared for anonymous user ('impex') |
... | ... | @@ -327,6 +337,42 @@ class WebServer |
327 | 337 | if (!$locParamSrcDom->save(WSConfigClass::getWsResultDir().$locParamDst)) |
328 | 338 | $this->throwError('workspaceError', 'Cannot save Amda Local DataBase Parameters description file'.$this->userID); |
329 | 339 | } |
340 | + | |
341 | + private function injectTemplateInfo($locParamFile) { | |
342 | + $paramTemplateListFile = WSConfigClass::getParamTemplateListFilePath(); | |
343 | + | |
344 | + $paramTemplateListFileDom = new DomDocument("1.0"); | |
345 | + if (!@$paramTemplateListFileDom->load($paramTemplateListFile)) | |
346 | + $this->throwError("getObsDataTree", "Cannot load Amda Templated Parameters description file".$this->userID); | |
347 | + | |
348 | + $paramTemplateNodes = $paramTemplateListFileDom->getElementsByTagName('paramTemplate'); | |
349 | + | |
350 | + $locParamFileDom = new DomDocument("1.0"); | |
351 | + $locParamFileDom->preserveWhiteSpace = FALSE; /// Important !!! otherwise removeChild() leaves empty text nodes | |
352 | + | |
353 | + if (!@$locParamFileDom->load(WSConfigClass::getWsResultDir().$locParamFile)) | |
354 | + $this->throwError("getObsDataTree", "Cannot load Amda Local DataBase Parameters description file ".$this->userID); | |
355 | + | |
356 | + $xp = new domxpath($locParamFileDom); | |
357 | + | |
358 | + foreach ($paramTemplateNodes as $paramTemplateNode) { | |
359 | + $paramTemplateId = $paramTemplateNode->getAttribute('paramId'); | |
360 | + $paramFileName = $paramTemplateNode->getAttribute('fileName'); | |
361 | + $parameterNodes = $xp->query("//parameter[@template='$paramFileName']"); | |
362 | + $argumentsNodes = $paramTemplateNode->getElementsByTagName("arguments"); | |
363 | + if ($argumentsNodes->length < 1) | |
364 | + continue; | |
365 | + $argumentsNode = $argumentsNodes->item(0); | |
366 | + foreach ($parameterNodes as $parameterNode) { | |
367 | + $node = $locParamFileDom->importNode($argumentsNode, TRUE); | |
368 | + $parameterNode->appendChild($node); | |
369 | + } | |
370 | + } | |
371 | + | |
372 | + | |
373 | + if (!$locParamFileDom->save(WSConfigClass::getWsResultDir().$locParamFile)) | |
374 | + $this->throwError('workspaceError', 'Cannot save Amda Local DataBase Parameters description file'.$this->userID); | |
375 | + } | |
330 | 376 | |
331 | 377 | private function checkInputTime($startTime, $stopTime) |
332 | 378 | { |
... | ... | @@ -349,19 +395,26 @@ class WebServer |
349 | 395 | /* |
350 | 396 | * public data only : anonymous user (impex) |
351 | 397 | */ |
352 | - public function getObsDataTree() | |
398 | + public function getObsDataTree($data) | |
353 | 399 | { |
354 | - $res = $this->init(); | |
400 | + $res = $this->init($data); | |
355 | 401 | $this->initUserMgr(); |
402 | + | |
403 | + $injectTemplateInfo = array_key_exists('templateInfo', $data) && (!empty($data["templateInfo"])); | |
356 | 404 | |
357 | 405 | $locParamSrc = USERWSDIR.'LocalParams.xml'; |
358 | 406 | |
359 | - $locParamDst = substr(strtolower(__FUNCTION__),3).'_'.$this->userID.'_'.$this->requestTime.'_AmdaLocalDataBaseParameters.xml'; | |
407 | + $locParamDst = substr(strtolower(__FUNCTION__),3).'_'.$this->userID.'_'.($injectTemplateInfo ? 'withtemplate_' : '').$this->requestTime.'_AmdaLocalDataBaseParameters.xml'; | |
360 | 408 | |
361 | 409 | // if (!copy($locParamSrc,WSConfigClass::getWsResultDir().$locParamDst)) |
362 | 410 | // $this->throwError('workspaceError', 'No Amda Local DataBase Parameters description file'); |
363 | 411 | |
364 | 412 | $this->excludePrivateNodes($locParamSrc,$locParamDst); |
413 | + | |
414 | + if ($injectTemplateInfo) { | |
415 | + $this->injectTemplateInfo($locParamDst); | |
416 | + } | |
417 | + | |
365 | 418 | return array('success' => true,'WorkSpace' => array("LocalDataBaseParameters" => WSConfigClass::getUrl().$locParamDst)); |
366 | 419 | } |
367 | 420 | ... | ... |
php/classes/AmdaAction.php
... | ... | @@ -299,10 +299,10 @@ class AmdaAction |
299 | 299 | |
300 | 300 | if ($child->tagName == 'parameter') { |
301 | 301 | $isParameter = true; |
302 | - if ($child->hasAttribute('TemplatedParameter')) | |
302 | + if ($child->hasAttribute('template')) | |
303 | 303 | $needsArgs = true; |
304 | 304 | |
305 | - if ($child->hasAttribute('PredefinedTemplatedParameter')) | |
305 | + if ($child->hasAttribute('predefined')) | |
306 | 306 | $predefinedArgs = true; |
307 | 307 | |
308 | 308 | if ($child->parentNode->hasAttribute('dataStart')) { | ... | ... |
php/classes/AmdaClient.php
... | ... | @@ -249,6 +249,9 @@ class AmdaClient { |
249 | 249 | } |
250 | 250 | |
251 | 251 | public function resetUserPwd($login, $crt_pwd, $new_pwd) { |
252 | + if ($login == "impex" || (strpos($login, 'guest') === 0)) { | |
253 | + return array('success' => false, 'message' => "You are not authorised to change this password"); | |
254 | + } | |
252 | 255 | try { |
253 | 256 | $data_array = array( |
254 | 257 | "login" => $login, | ... | ... |
php/classes/UserMgr.php
... | ... | @@ -23,7 +23,7 @@ class UserMgr |
23 | 23 | 'USERTEMPDIR' => 'TEMP'); |
24 | 24 | protected $userGrps; |
25 | 25 | protected $userGrpsCheckSum; //use to know if there is a modification in user groups |
26 | - protected $amdaClient; //client to dd webservice | |
26 | + protected $amdaClient = NULL; //client to dd webservice | |
27 | 27 | protected $paramMgr, $baseExtXml; |
28 | 28 | protected $datasetsTimeRestriction; |
29 | 29 | protected $datasetsTimeRestrictionCheckSum; |
... | ... | @@ -75,10 +75,15 @@ class UserMgr |
75 | 75 | $this->user = $_GET['sessionID']; |
76 | 76 | else if (isset($sessionID)) |
77 | 77 | $this->user = $sessionID; |
78 | - //TODO if AmdaClient is needed ? | |
79 | - $this->amdaClient = new AmdaClient(); | |
80 | 78 | } |
81 | 79 | |
80 | + private function getAmdaClient() { | |
81 | + if (!isset($this->amdaClient)) { | |
82 | + $this->amdaClient = new AmdaClient(); | |
83 | + } | |
84 | + return $this->amdaClient; | |
85 | + } | |
86 | + | |
82 | 87 | //TODO if needed?? set session ID |
83 | 88 | protected function setID() {} |
84 | 89 | |
... | ... | @@ -119,7 +124,7 @@ class UserMgr |
119 | 124 | // "email" => ($theUser->length > 0) ? $theUser->item(0)->getAttribute("email") : "undefined", |
120 | 125 | // "date" => ($theUser->length > 0) ? $theUser->item(0)->getAttribute("date") : "undefined", |
121 | 126 | // "news" => ($theUser->length > 0) ? $theUser->item(0)->getAttribute("news") : "0"); |
122 | - $info = $this->amdaClient->getUserInfo($this->user); | |
127 | + $info = $this->getAmdaClient()->getUserInfo($this->user); | |
123 | 128 | $wsSize = intval($this->getWsSize()/1024./1024.); |
124 | 129 | $quota = intval($this->getSpecialSettings()/1024./1024.); |
125 | 130 | $info['total'] = $quota; |
... | ... | @@ -131,7 +136,7 @@ class UserMgr |
131 | 136 | |
132 | 137 | public function resetPwd($crt_pwd, $new_pwd) |
133 | 138 | { |
134 | - return $this->amdaClient->resetUserPwd($this->user, $crt_pwd, $new_pwd); | |
139 | + return $this->getAmdaClient()->resetUserPwd($this->user, $crt_pwd, $new_pwd); | |
135 | 140 | } |
136 | 141 | |
137 | 142 | public function createDir() |
... | ... | @@ -149,7 +154,7 @@ class UserMgr |
149 | 154 | if (isset($this->userGrps)) { |
150 | 155 | return; |
151 | 156 | } |
152 | - $info = $this->amdaClient->getUserInfo($this->user); | |
157 | + $info = $this->getAmdaClient()->getUserInfo($this->user); | |
153 | 158 | |
154 | 159 | $this->userGrpsCheckSum = ''; |
155 | 160 | if (!empty($info['group'])) { |
... | ... | @@ -179,7 +184,7 @@ class UserMgr |
179 | 184 | } |
180 | 185 | |
181 | 186 | $this->datasetsTimeRestrictionCheckSum = ''; |
182 | - $this->datasetsTimeRestriction = $this->amdaClient->getDatasetsWithTimeRestriction(); | |
187 | + $this->datasetsTimeRestriction = $this->getAmdaClient()->getDatasetsWithTimeRestriction(); | |
183 | 188 | |
184 | 189 | if ($this->datasetsTimeRestriction !== FALSE) { |
185 | 190 | foreach ($this->datasetsTimeRestriction as &$datasetTimeRestriction) { | ... | ... |
php/rest/getObsDataTree.php
... | ... | @@ -5,6 +5,10 @@ |
5 | 5 | * @apiDescription Provides the hierarchy of public access data in AMDA. |
6 | 6 | * @apiName getObsDataTree |
7 | 7 | * @apiGroup webservices |
8 | + * | |
9 | + * @apiParam {String} [userID] Identifier of the user in AMDA (*mandatory for user owned data*) | |
10 | + * @apiParam {String} [password] Password of the user in AMDA (*mandatory for user owned data*) | |
11 | + * @apiParam {Boolean} [templateInfo] `1` to include info about templated parameters - Default `0`. | |
8 | 12 | * |
9 | 13 | * @apiSuccess {String} success true. |
10 | 14 | * @apiSuccess {String} workspace URL of the XML file containing the list of "public" parameters in AMDA. | ... | ... |