source: branches/1.2/workflow/js/userinterface/inbox.js @ 1349

Revision 1349, 21.2 KB checked in by niltonneto, 15 years ago (diff)

Ticket #561 - Inclusão do módulo Workflow faltante nessa versão.

  • Property svn:executable set to *
Line 
1/* armazena os parâmetro passados para a construção da caixa de entrada */
2var workflowInboxParams;
3
4/* um digest (MD5) das instâncias exibidas (para saber quando ocorreu a última atualização */
5var workflowInstancesDigest = null;
6
7/* armazena os nomes dos usuários que possuem as instâncias */
8var workflowInboxUserNames;
9
10/* armazena informações dos processos */
11var workflowInboxProcessesInfo;
12
13/* armazena os nomes das atividades */
14var workflowInboxActivityNames;
15
16/* armazena os conjuntos de ações */
17var workflowInboxActions;
18
19/* armazena a lista de processos cujas instâncias o usuário pode acessar */
20var workflowInboxProcesses;
21
22/* indica se o usuário utiliza a versão leve da interface */
23var workflowInboxLightVersion;
24
25/* indica se a interface está configurada para auto atualização */
26var workflowInboxAutoRefresh = true;
27
28/* armazena o tempo entre cada atualização, em milisegundos */
29var workflowInboxRefreshTimeInterval = 120000;
30
31/* armazena a referência do "interval" utilizado para atualização */
32var workflowInboxRefreshInterval = null;
33
34/* armazena a função (e parâmetros) que deve ser chamada para a atualização */
35var workflowInboxRefreshFunction = '';
36
37/* número de atividades view abertas na interface (usado para evitar atualização no caso de alguma view estar aberta) */
38var workflowInboxOpenedViewActivities = 0;
39
40
41/**
42 * Recria os headers da caixa de entrada sem a necessidade de
43 * recarregar todos os dados. É utilizado para o caso do resultado
44 * ser igual ao conjunto de dados mostrados
45 * @params string sortParam Nome da coluna do banco que é o parâmetro order by
46 * @params object Paging Objeto de paginação
47 * @return null
48 * @access public
49 */
50function redrawInboxHeaders(sortParam, paging)
51{
52        workflowInboxParams['sort'] = sortParam;
53
54        content = '<th width="13%" align="left">' + createSortingHeaders('Data', 'wf_act_started') + '</th>';
55        content += '<th width="20%" align="left">' + createSortingHeaders('Processo', 'wf_procname') + '</th>';
56        content += '<th width="10%" align="left">' + createSortingHeaders('Identificador', 'insname') + '</th>';
57        content += '<th width="3%" align="left">' + createSortingHeaders('P', 'wf_priority') + '</th>';
58        content += '<th width="20%" align="left">' + createSortingHeaders('Atividade', 'wf_name') + '</th>';
59        content += '<th width="20%" align="left">Atribuído a</th>';
60        content += '<th width="7%" align="left">Ações</th>';
61
62        $('table_elements_inbox').firstChild.firstChild.innerHTML = content;
63        $('td_tools_inbox_3').innerHTML = createPagingLinks(paging);
64
65        return;
66}
67
68/**
69 * Recebe os dados do Ajax e chama os métodos para construção da interface
70 * @param array data Os dados retornados por Ajax
71 * @return void
72 */
73function inbox(data)
74{
75        if (_checkError(data))
76                return;
77
78        if (workflowInstancesDigest == data['instancesDigest']){
79                if(workflowInboxParams && (workflowInboxParams['sort'] != data['sort_param'])){
80                        redrawInboxHeaders(data['sort_param'], data['paging_links']);
81                }
82                return;
83        }
84
85        workflowInstancesDigest = data['instancesDigest'];
86
87        var currentSearchField = '';
88        var busca = $('busca');
89        if (busca)
90                currentSearchField = busca.value;
91        var flagSearchPerformed = false;
92
93        if (data['params']['search_term'])
94                if (data['params']['search_term'] != '')
95                        flagSearchPerformed = true;
96
97        workflowInboxUserNames = data['userNames'];
98        workflowInboxProcessesInfo = data['processesInfo'];
99        workflowInboxActivityNames = data['activityNames'];
100        workflowInboxProcesses = data['processes'];
101        workflowInboxActions = data['actions'];
102        workflowInboxParams = data['params'];
103        workflowInboxLightVersion = data['light'];
104
105        var information = $('workflowInboxInformation');
106        if (information)
107                information.remove();
108
109        var currentInboxMenu = $('table_tools_inbox');
110        var currentInboxElements = $('table_elements_inbox');
111        if (currentInboxElements)
112                currentInboxElements.remove();
113
114        if (data['instances'].length > 0)
115        {
116                if (!currentInboxMenu)
117                        createInboxMenu();
118                createInbox(data['instances'], data['paging_links']);
119        }
120        else
121        {
122                if ((!flagSearchPerformed) && currentInboxMenu)
123                        currentInboxMenu.remove();
124                var pagingContainer = $('td_tools_inbox_3');
125                if (pagingContainer)
126                        pagingContainer.innerHTML = '';
127                $('content_id_0').innerHTML += '<p class="text_dsp" id="workflowInboxInformation">Não existem atividades a serem executadas</p>';
128        }
129
130        busca = $('busca');
131        if (busca)
132        {
133                if (flagSearchPerformed)
134                        busca.value = data['params']['search_term'];
135                else
136                        if (currentSearchField != '')
137                                busca.value = currentSearchField;
138                busca.focus();
139        }
140}
141
142/**
143 * Cria o menu da interface
144 * @return void
145 */
146function createInboxMenu()
147{
148        var content = '<div id="extraContent"></div>';
149        content += '<table id="table_tools_inbox" width="100%">';
150        content += '<td id="td_tools_inbox_1" width="470">';
151        content += '<ul class="horizontalMenu">';
152        content += '<li><a href="javascript:group_inbox()">' + ((workflowInboxLightVersion) ? '' : '<img src="templateFile.php?file=images/group.png"/>&nbsp;') + 'Agrupar</a></li>';
153        content += '<li id="processFilterButton"><a href="javascript:showProcessFilter()">' + ((workflowInboxLightVersion) ? '' : '<img src="templateFile.php?file=images/filter.png"/>&nbsp;') + 'Filtrar por Processo...</a></li>';
154        content += '<li><a href="doc/manual_do_usuario.pdf">' + ((workflowInboxLightVersion) ? '' : '<img src="templateFile.php?file=images/help.png"/>&nbsp;') + 'Ajuda</a></li>';
155        content += '<li id="refreshButton"><a href="javascript:workflowInboxRefreshNow()" id="refreshLink"' + (((!workflowInboxAutoRefresh) && workflowInboxLightVersion) ? ' style="color: gray !important"' : '') + '>' + ((workflowInboxLightVersion) ? '' : '<img id="reloadImage" src="templateFile.php?file=images/reload' + ((workflowInboxAutoRefresh) ? '' : '_bw') + '.png"/>&nbsp;') + 'Atualizar</a><a href="javascript:showRefreshMenu()" style="padding: 0px;"><img src="templateFile.php?file=images/arrow_ascendant.gif" style="padding-top: 11px"/></a></li>';
156        content += '</ul>';
157        content += '</td>';
158        content += '<td id="td_tools_inbox_2" valign="middle" align="left" width="270">';
159        content += '&nbsp;Busca: <input type="text" size="15" id="busca" name="busca" onkeypress="if (((window.Event) ? event.which : event.keyCode) == 13) $(\'searchInboxButton\').onclick(); return true;"/>&nbsp;<a href="#" id="searchInboxButton" onclick="searchInbox($F(\'busca\')); $(\'show_all\').show(); return false;">filtrar</a>&nbsp;&nbsp;<a href="#" id="show_all" onclick="$(\'busca\').value = \'\'; searchInbox(\'\'); this.hide(); return false;" style="display: none;">todos</a>';
160        content += '</td>';
161        content += '<td id="td_tools_inbox_3" align="right"></td>';
162        content += '</tr>';
163        content += '</table>';
164
165        $('content_id_0').innerHTML = content;
166}
167
168/**
169 * Cria a tabela das instâncias
170 * @param array data As instâncias que serão listadas
171 * @param array paging Dados da paginação
172 * @return void
173 */
174function createInbox(data, paging)
175{
176        var content = '';
177        content += '<table id="table_elements_inbox" cellpadding="2" class="inboxElements">';
178        content += '<tr>';
179        content += '<th width="13%" align="left">' + createSortingHeaders('Data', 'wf_act_started') + '</th>';
180        content += '<th width="20%" align="left">' + createSortingHeaders('Processo', 'wf_procname') + '</th>';
181        content += '<th width="10%" align="left">' + createSortingHeaders('Identificador', 'insname') + '</th>';
182        content += '<th width="3%" align="left">' + createSortingHeaders('P', 'wf_priority') + '</th>';
183        content += '<th width="20%" align="left">' + createSortingHeaders('Atividade', 'wf_name') + '</th>';
184        content += '<th width="20%" align="left">Atribuído a</th>';
185        content += '<th width="7%" align="left">Ações</th>';
186        content += '</tr>';
187
188        var inboxLimit = data.length;
189        var current;
190        for (var i = 0; i < inboxLimit; i++)
191        {
192                current = data[i];
193                content += '<tr>';
194                content += '<td>' + current['wf_act_started'] + '</td>';
195                if (current['viewRunAction'])
196                        content += '<td onclick="toggleHiddenView(\'inbox\', ' + current['wf_instance_id'] + ', ' + current['wf_activity_id'] + ', ' + current['viewRunAction']['viewActivityID'] + ', ' + workflowInboxProcessesInfo[current['wf_p_id']]['useHTTPS'] + ');" style="cursor: pointer;">' + workflowInboxProcessesInfo[current['wf_p_id']]['name'] + '</td>';
197                else
198                        content += '<td>' + workflowInboxProcessesInfo[current['wf_p_id']]['name'] + '</td>';
199                content += '<td>' + current['insname'] + '</td>';
200
201                content += '<td>';
202                content += ((workflowInboxLightVersion) ? workflowInboxPriority[current['wf_priority']] : ('<img src="templateFile.php?file=images/pr' + current['wf_priority'] + '.png"/>&nbsp;'));
203                if (current['wf_status'] != 'active')
204                        content += ((workflowInboxLightVersion) ? '<font color="red">Exc.</font>' : '<img src="templateFile.php?file=images/exception.png"/></td>') + '&nbsp;';
205                content += '<td>'+workflowInboxActivityNames[current['wf_activity_id']] + '</td>';
206
207                content += '<td>' + workflowInboxUserNames[current['wf_user']] + '</td>';
208                content += '<td>' + constructActions(current['wf_instance_id'], current['wf_activity_id'], current['wf_p_id'], current['wf_actions']) + '</td>';
209                content += '</tr>';
210                if (current['viewRunAction'])
211                        content += constructHiddenView('inbox', 6, current['wf_instance_id'], current['wf_activity_id'], current['viewRunAction']['height']);
212        }
213
214        $('content_id_0').innerHTML += content;
215        $('td_tools_inbox_3').innerHTML = createPagingLinks(paging);
216}
217
218/**
219 * Cria os links para ordenação das instâncias
220 * @param string O texto do link
221 * @param string A ordenação esperada
222 * @return string O link criado
223 */
224function createSortingHeaders(text, expectedSort)
225{
226        workflowInboxParams['sort'] = workflowInboxParams['sort'].split(',').shift();
227        var currentSort = workflowInboxParams['sort'].split('__');
228        var theSame = (expectedSort == currentSort[0]);
229        direction = false;
230
231        var output = '';
232        if (theSame)
233        {
234                output += '<strong>';
235                direction = (currentSort[1] == 'ASC');
236        }
237
238        output += '<a href="javascript:sortInbox(\'' + expectedSort + '__' + (direction ? 'DESC' : 'ASC') + '\');">' + text + '</a>';
239
240        if (theSame)
241                output += '<img src="templateFile.php?file=images/arrow_' + (direction ? 'ascendant' : 'descendant') + '.gif"/></strong>';
242
243        return output;
244}
245
246/**
247 * Cria e exibe o menu listando os processos das instâncias que o usuário pode ver
248 * @return void
249 */
250function showProcessFilter()
251{
252        hideExtraContents();
253        /* se o menu já existe, apenas o exibe */
254        if ($('processFilter'))
255        {
256                $('divProcessFilter').style.display = '';
257                $('extraContent').style.display = '';
258                return;
259        }
260
261        /* coleta informações sobre posicionamento */
262        var li = $('processFilterButton');
263        var offset = Position.cumulativeOffset(li);
264        var height = li.getHeight() - 1;
265
266        /* cria as opções do menu */
267        var content = '<div id="divProcessFilter"><ul id="processFilter" onmouseover="$(\'divProcessFilter\').style.display = \'\'; $(\'extraContent\').style.display = \'\'" onmouseout="$(\'divProcessFilter\').style.display = \'none\'; $(\'extraContent\').style.display = \'none\'" class="submenu" style="top: ' + (offset[1] + height) + 'px; left: ' + offset[0] + 'px;">';
268        /* insere manualmente a linha para exibir todos os processos */
269        content += '<li><a href="javascript:$(\'divProcessFilter\').style.display = \'none\';filterInbox(0)">Todos</a></li>';
270        var size = workflowInboxProcesses.length;
271        for (var i = 0; i < size; i++)
272                content += '<li><a href="javascript:$(\'divProcessFilter\').style.display = \'none\';filterInbox(' + workflowInboxProcesses[i].pid +')">' + workflowInboxProcesses[i].name + '</a></li>';
273        content += '</ul>';
274
275        /* insere o novo conteúdo */
276        var extraContent = $('extraContent');
277        extraContent.innerHTML += content;
278        extraContent.style.display = '';
279}
280
281/**
282 * Cria e exibe o menu de atualização da interface de Tarefas Pendentes
283 * @return void
284 */
285function showRefreshMenu()
286{
287        hideExtraContents();
288
289        /* se o menu já existe, apenas o exibe */
290        if ($('refreshMenu'))
291        {
292                $('divRefreshMenu').style.display = '';
293                $('extraContent').style.display = '';
294                return;
295        }
296
297        /* coleta informações sobre posicionamento */
298        var li = $('refreshButton');
299        var offset = Position.cumulativeOffset(li);
300        var height = li.getHeight() - 1;
301
302        /* cria as opções do menu */
303        var content = '<div id="divRefreshMenu"><ul id="refreshMenu" onmouseover="$(\'divRefreshMenu\').style.display = \'\'; $(\'extraContent\').style.display = \'\'" onmouseout="$(\'divRefreshMenu\').style.display = \'none\'; $(\'extraContent\').style.display = \'none\'" class="submenu" style="top: ' + (offset[1] + height) + 'px; left: ' + offset[0] + 'px;">';
304        /* insere manualmente a linha para exibir todos os processos */
305        content += '<li><a href="javascript:$(\'divRefreshMenu\').style.display = \'none\';workflowInboxStopAutoRefresh()">Interromper Atualização Automática</a></li>';
306        content += '<li><a href="javascript:$(\'divRefreshMenu\').style.display = \'none\';workflowInboxStartAutoRefresh()">Ativar Atualização Automática</a></li>';
307        content += '<li><a href="javascript:$(\'divRefreshMenu\').style.display = \'none\';workflowInboxRefreshNow();">Atualizar Agora</a></li>';
308
309        /* insere o novo conteúdo */
310        var extraContent = $('extraContent');
311        extraContent.innerHTML += content;
312        extraContent.style.display = '';
313}
314
315/**
316 * Oculta todos os elementos dentro do div 'extraContent'
317 * @return void
318 */
319function hideExtraContents()
320{
321        $A($('extraContent').childNodes).each(function(item)
322                {
323                        item.style.display = 'none';
324                });
325}
326
327/**
328 * Constrói o menu de ações de acordo com a permissão do usuário
329 * @param int instanceID O ID da instância
330 * @param int activityID O ID da atividade
331 * @param int processID O ID do processo
332 * @param int actionID O ID do conjunto de ações
333 * @return string O código XHTML do menu de ações
334 */
335function constructActions(instanceID, activityID, processID, actionID)
336{
337        var actions = workflowInboxActions[actionID];
338        var content = '';
339
340        var instanceURL = getInstanceURL(instanceID, activityID, workflowInboxProcessesInfo[processID]['useHTTPS']);
341
342        if (workflowInboxLightVersion)
343        {
344                if (actions[0]['value'])
345                        content += '<a href="' + instanceURL + '">Exec.</a>';
346                else
347                        content += 'Exec';
348                content += '&nbsp;<a href="javascript:constructMoreActions(' + instanceID + ', ' + activityID + ', ' + actionID + ');">Mais</a>';
349        }
350        else
351        {
352                content += '<a href="' + instanceURL + '"><img src="templateFile.php?file=images/actions/' + ((actions[0].value) ? '' : 'no_') + 'run.png" alt="' + actions[0].text + '" title="' + actions[0].text + '"/></a>&nbsp;';
353                for (var i = 0; i < actions.length; i++)
354                        if (actions[i].name == 'view')
355                        content += '<a href="javascript:workflowInboxAction' + actions[i].name.charAt(0).capitalize() + actions[i].name.substr(1) + '(' + instanceID + ', ' + activityID + ');"><img src="templateFile.php?file=images/actions/' + ((actions[i].value) ? '' : 'no_') + actions[i].name + '.png" alt="' + actions[i].text + '" title="' + actions[i].text + '"/></a>&nbsp;';
356                content += '<a href="javascript:constructMoreActions(' + instanceID + ', ' + activityID + ', ' + actionID + ');"><img src="templateFile.php?file=images/more_down.png" alt="Mais Ações" title="Mais Ações"/></a>';
357        }
358        content += '<div id="advancedActionsMenu_' + instanceID + '_' + activityID + '" onmouseout="this.hide();" onmouseover="this.show();" style="display: none; width: 150px;" class="advancedActions"></div>';
359
360        return content;
361}
362
363/**
364 * Constrói o menu de ações avançadas de acordo com a permissão do usuário
365 * @param int instanceID O ID da instância
366 * @param int activityID O ID da atividade
367 * @param int actionID O ID do conjunto de ações
368 * @return string O código XHTML do menu de ações avançadas
369 */
370function constructMoreActions(instanceID, activityID, actionID)
371{
372        var content = '';
373        var div = $('advancedActionsMenu_' + instanceID + '_' + activityID);
374
375        if (!div.innerHTML)
376        {
377                var actions = workflowInboxActions[actionID];
378                if (workflowInboxLightVersion)
379                {
380                        for (var i = 0; i < actions.length; i++)
381                                if ((actions[i].name != 'run') && (actions[i].name != 'viewrun'))
382                                        if (actions[i].value)
383                                                content += '<a href="javascript:workflowInboxAction' + actions[i].name.charAt(0).capitalize() + actions[i].name.substr(1) + '(' + instanceID + ', ' + activityID + ');">&nbsp;' + actions[i].text + '</a><br/>';
384                                        else
385                                                content += '&nbsp;' + actions[i].text + '<br/>';
386                }
387                else
388                {
389                        for (var i = 0; i < actions.length; i++)
390                                if ((actions[i].name != 'run') && (actions[i].name != 'viewrun') && (actions[i].name != 'view'))
391                                        if (actions[i].value)
392                                                content += '<a href="javascript:workflowInboxAction' + actions[i].name.charAt(0).capitalize() + actions[i].name.substr(1) + '(' + instanceID + ', ' + activityID + ');"><img src="templateFile.php?file=images/actions/' + actions[i].name + '.png"/>&nbsp;' + actions[i].text + '</a><br/>';
393                                        else
394                                                content += '<img src="templateFile.php?file=images/actions/no_' + actions[i].name + '.png"/>&nbsp;' + actions[i].text + '<br/>';
395                }
396                div.innerHTML = content;
397        }
398
399        var offset = Position.cumulativeOffset(div.parentNode);
400        div.style.top = (offset[1] + 20) + 'px';
401        div.style.left = (offset[0] - 80) + 'px';
402
403        if (div.visible())
404                div.hide();
405        else
406                div.show();
407}
408
409/**
410 * Cria os links de paginação
411 * @param array paging Dados da paginação
412 * @return string O código XHTML dos links de paginação
413 */
414function createPagingLinks(pagingData)
415{
416        var output = '';
417        if (pagingData)
418        {
419                var pagingSize = pagingData.length;
420                for (var i = 0; i < pagingSize; i++)
421                {
422                        if (pagingData[i].do_link == true)
423                                output += '<a href="javascript:draw_inbox_folder(' + pagingData[i].p_page + ', \'' + workflowInboxParams['sort'] + '\', ' + workflowInboxParams['pid'] + ', \'' + workflowInboxParams['search_term'] + '\');">' + pagingData[i].name + '</a>&nbsp;';
424                        else
425                                output += '<strong>' + pagingData[i].name + '</strong>&nbsp;';
426                }
427        }
428
429        return output;
430}
431
432/**
433 * Ordena as instâncias da interface
434 * @param string sort A ordenação selecionada
435 * @return void
436 */
437function sortInbox(sort)
438{
439        draw_inbox_folder(0, sort, workflowInboxParams['pid'], workflowInboxParams['search_term']);
440}
441
442/**
443 * Faz uma busca nas instâncias da interface
444 * @param string search_term A string que será procurada
445 * @return void
446 */
447function searchInbox(search_term)
448{
449        draw_inbox_folder(0, workflowInboxParams['sort'], workflowInboxParams['pid'], escape(search_term));
450}
451
452/**
453 * Filtra a interface para exibir somente as instâncias de um determinado processo
454 * @param int pid O ID do processo que se quer filtrar (ao utilizar 0 (zero), todos os processos serão exibidos
455 * @return void
456 */
457function filterInbox(pid)
458{
459        draw_inbox_folder(null, workflowInboxParams['sort'], pid, workflowInboxParams['search_term']);
460}
461
462/**
463 * Busca os dados, por Ajax, para a reconstrução da interface
464 * @param int p_page O número da página (quando houver paginação) que está sendo exibida
465 * @param string sort A ordenação selecionada
466 * @param int pid O ID do processo que se quer filtrar (ao utilizar 0 (zero), todos os processos serão exibidos
467 * @param string search_term A string que será procurada
468 * @return void
469 */
470function draw_inbox_folder(p_page, sort, pid, search_term)
471{
472        var p_page = (p_page == null) ? 0 : p_page;
473        var sort = (sort == null) ? 0 : sort;
474        var pid = (pid == null) ? 0 : pid;
475        var search_term = (search_term == null) ? '' : search_term;
476
477        workflowInboxRefreshFunction = 'cExecute("$this.bo_userinterface.inbox", inbox, "sort=' + sort + '&pid=' + pid + '&p_page=' + p_page + '&search_term=' + search_term + '")';
478        if (workflowInboxAutoRefresh)
479                workflowInboxStartRefreshInterval();
480
481        cExecute("$this.bo_userinterface.inbox", inbox, "sort=" + sort + "&pid=" + pid + "&p_page=" + p_page + "&search_term=" + search_term);
482}
483
484/**
485 * Atualiza a lista de instâncias
486 * @return void
487 */
488function workflowInboxRefreshNow()
489{
490        if (workflowInboxRefreshFunction != '')
491                eval(workflowInboxRefreshFunction);
492        else
493                draw_inbox_folder();
494}
495
496/**
497 * Pára o "interval" que chama a função de atualização
498 * @return void
499 */
500function workflowInboxStopRefreshInterval()
501{
502        if (workflowInboxRefreshInterval)
503        {
504                clearInterval(workflowInboxRefreshInterval);
505                workflowInboxRefreshInterval = null;
506        }
507}
508
509/**
510 * Inicia o "interval" que chama a função de atualização
511 * @return void
512 */
513function workflowInboxStartRefreshInterval()
514{
515        workflowInboxStopRefreshInterval();
516        workflowInboxRefreshInterval = setInterval('workflowInboxRefresh()', workflowInboxRefreshTimeInterval);
517}
518
519/**
520 * Pára a atualização automática
521 * @return void
522 */
523function workflowInboxStopAutoRefresh()
524{
525        workflowInboxAutoRefresh = false;
526        workflowInboxStopRefreshInterval();
527        if (workflowInboxLightVersion)
528                $('refreshLink').style.setProperty('color', 'gray', 'important');
529        else
530                $('reloadImage').src = 'templateFile.php?file=images/reload_bw.png';
531}
532
533/**
534 * Inicia a atualização automática
535 * @return void
536 */
537function workflowInboxStartAutoRefresh()
538{
539        workflowInboxAutoRefresh = true;
540        workflowInboxStartRefreshInterval();
541        if (workflowInboxLightVersion)
542                $('refreshLink').style.setProperty('color', 'black', 'important');
543        else
544                $('reloadImage').src = 'templateFile.php?file=images/reload.png';
545}
546
547/**
548 * Função que é chamada pelo "interval" para atualizar, automaticamente, a lista de instâncias
549 * @return void
550 */
551function workflowInboxRefresh()
552{
553        /* verifica se a aba aberta é a de "Tarefas Pendentes" */
554        if (tabStack[tabStack.length - 1] != 0)
555                return;
556
557        if ($('divProgressBar').style.visibility == 'visible')
558                return;
559
560        if (workflowInboxOpenedViewActivities > 0)
561                return;
562
563        /* atualiza a lista de instâncias */
564        workflowInboxRefreshNow();
565}
Note: See TracBrowser for help on using the repository browser.