WF/implantacaoexemplo: Music_CD_Loans_32.xml

File Music_CD_Loans_32.xml, 30.3 KB (added by pedroerp, 14 years ago)
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<process>
3  <name>Music CD Loans</name>
4  <isValid>y</isValid>
5  <version>3.2</version>
6  <isActive>y</isActive>
7   <description>Alugar cds, consultar catálogo de cds, etc...</description>
8  <lastModif>05/03/2008 [02:48:14]</lastModif>
9  <sharedCode><![CDATA[<?php
10/**
11 * @brief Arquivo de configuração do processo.
12 * @author Carlos Eduardo Nogueira Gonçalves
13 * @package Workflow
14 * @version 1.0
15 */
16
17/* Início da definicao de constantes da aplicacao */
18/* Fim da definicao de constantes da aplicacao */
19
20/* Início da importacao/inclusao de classes */
21
22//camada de controle do processo
23wf_include('class.controller.inc.php');
24wf_include('class.concluir.controller.inc.php');
25wf_include('class.aprovar.controller.inc.php');
26wf_include('class.solicitar.controller.inc.php');
27wf_include('class.consultar.controller.inc.php');
28//camada da logica de negocios
29wf_include('class.model.inc.php');
30wf_include('class.concluir.model.inc.php');
31wf_include('class.aprovar.model.inc.php');
32wf_include('class.solicitar.model.inc.php');;
33wf_include('class.consultar.model.inc.php');
34//classes de negocio/auxiliares
35
36/* Fim da importacao/inclusao de classes */
37?>
38  ]]></sharedCode>
39  <configs>
40    <config>
41      <wf_config_name>execute_activities_in_debug_mode</wf_config_name>
42      <wf_config_value></wf_config_value>
43      <wf_config_value_int>1</wf_config_value_int>
44    </config>
45    <config>
46      <wf_config_name>mail_smtp_profile</wf_config_name>
47      <wf_config_value>default</wf_config_value>
48      <wf_config_value_int></wf_config_value_int>
49    </config>
50  </configs>
51  <activities>
52    <activity>
53      <name>Aprovar</name>
54      <type>activity</type>
55      <description>Aprovar ou reprovar a solicitação do cd.</description>
56      <menuPath></menuPath>
57      <lastModif>05/03/2008 [02:27:27]</lastModif>
58      <isInteractive>y</isInteractive>
59      <isAutoRouted>y</isAutoRouted>
60      <roles>
61        <role>admin</role>
62      </roles>
63      <agents>
64      </agents>
65      <code><![CDATA[<?php
66/**
67 * @brief Aprovação de cds do catálogo.
68 * @author Carlos Eduardo Nogueira Gonçalves
69 * @name Aprovar
70 */             
71       
72/* instanciação de classe da camada Controller */
73$application = new AprovarController ( new AprovarModel ( $env ) , $env );
74$application->run ( $_REQUEST['action'] );
75?>      ]]></code>      <template><![CDATA[      ]]></template>    </activity>
76    <activity>
77      <name>Concluir</name>
78      <type>activity</type>
79      <description>O usuário recebe a resposta e conclui o processo.</description>
80      <menuPath></menuPath>
81      <lastModif>05/03/2008 [02:27:26]</lastModif>
82      <isInteractive>y</isInteractive>
83      <isAutoRouted>y</isAutoRouted>
84      <roles>
85        <role>user</role>
86      </roles>
87      <agents>
88      </agents>
89      <code><![CDATA[<?php
90/**
91 * @brief Informa resultado do processo.
92 * @author Carlos Eduardo Nogueira Gonçalves
93 * @name Concluir
94 */             
95       
96/* instanciação de classe da camada Controller */
97$application = new ConcluirController ( new ConcluirModel ( $env ) , $env );
98$application->run ( $_REQUEST['action'] );
99?>      ]]></code>      <template><![CDATA[      ]]></template>    </activity>
100    <activity>
101      <name>Consultar</name>
102      <type>standalone</type>
103      <description>O usuário pode consultar o catálogo de cds. O título e o status é exibido para cada cd. Um botão para solicitar o cd também é exibido.</description>
104      <menuPath></menuPath>
105      <lastModif>05/03/2008 [02:27:26]</lastModif>
106      <isInteractive>y</isInteractive>
107      <isAutoRouted>n</isAutoRouted>
108      <roles>
109        <role>user</role>
110      </roles>
111      <agents>
112      </agents>
113      <code><![CDATA[<?php
114/**
115 * @brief Consulta de catálogo de cds.
116 * @author Carlos Eduardo Nogueira Gonçalves
117 * @name Consultar
118 */             
119       
120/* instanciação de classe da camada Model */
121$application = new ConsultarController ( new ConsultarModel ( $env ) , $env );
122$application->run ( $_REQUEST['action'] );
123?>
124      ]]></code>      <template><![CDATA[      ]]></template>    </activity>
125    <activity>
126      <name>end</name>
127      <type>end</type>
128      <description>Atividade final padrão.</description>
129      <menuPath></menuPath>
130      <lastModif>05/03/2008 [02:27:26]</lastModif>
131      <isInteractive>n</isInteractive>
132      <isAutoRouted>y</isAutoRouted>
133      <roles>
134      </roles>
135      <agents>
136      </agents>
137      <code><![CDATA[<?php
138/**
139 * @brief Atividade final em branco.
140 * @author Carlos Eduardo Nogueira Gonçalves
141 * @name end
142 */             
143?>      ]]></code>    </activity>
144    <activity>
145      <name>Solicitar</name>
146      <type>start</type>
147      <description>O usuário solicita um cd.</description>
148      <menuPath></menuPath>
149      <lastModif>05/03/2008 [02:27:27]</lastModif>
150      <isInteractive>y</isInteractive>
151      <isAutoRouted>y</isAutoRouted>
152      <roles>
153        <role>user</role>
154      </roles>
155      <agents>
156      </agents>
157      <code><![CDATA[<?php
158/**
159 * @brief Solicitação de cds do catálogo.
160 * @author Carlos Eduardo Nogueira Gonçalves
161 * @name Solicitar
162 */             
163       
164/* instanciação de classe da camada Controller */
165$application = new SolicitarController ( new SolicitarModel ( $env ) , $env );
166$application->run ( $_REQUEST['action'] );
167?>      ]]></code>      <template><![CDATA[      ]]></template>    </activity>
168  </activities>
169  <templates>
170    <template>
171      <name>Solicitar.tpl</name>
172      <code><![CDATA[{wf_default_template}
173<div id="conteudo_corpo">
174<h2>Solicitar Empréstimo</h2>
175<table class="form_tabela" width="100%" cellspacing="0" border="0" align="center">
176        <tr>
177                <td width="100%">
178                        <table id="list_tabela_clara" width="60%" cellspacing="0">
179                                <tr>
180                                        <th>CD Desejado:</th>
181                                </tr>
182                                <tr>
183                                        <td>
184                                        <select id="cdsel">
185                                        {section name=ix loop=$cds}
186                                        <option value="{$cds[ix].cdid}">{$cds[ix].title}</option>
187                                        {/section}
188                                        </select>                               
189                                        </td>
190                                </tr>
191                                <tr>
192                                        <td>
193                                        <input type="button" class="form_botao" onclick="dispatch('Solicitar',
194                                                document.getElementById('cdsel').options[document.getElementById('cdsel').selectedIndex].value )"
195                                                 value="Solicitar"  />
196                                        </td>
197                                </tr>
198                        </table>
199                </td>
200        </tr>   
201</table>
202</div>
203      ]]></code>    </template>
204    <template>
205      <name>Consultar.tpl</name>
206      <code><![CDATA[{wf_default_template}
207<div id="conteudo_corpo">
208<h2>Consultar</h2>
209<table class="form_tabela" width="100%" cellspacing="0" border="0" align="center">
210        <tr>
211                <td width="100%">
212                        <table id="list_tabela_clara" width="60%" cellspacing="0">
213                        <tr>
214                                <th width="30%">Título</th>
215                                <th width="10%">Status</th>
216                                <th width="10%">Ação</th>
217                        </tr>
218                        {section name=ix loop=$cds}
219                        <tr>
220                                <td>{$cds[ix].title}</td>
221                                <td>{$cds[ix].status}</td>
222                                <td>
223                                        <input type="button" class="form_botao" onclick="dispatch('Inverter', '{$cds[ix].cdid}')" value="Alternar Status"  />
224                                </td>
225                        </tr>
226                        {/section}
227                        </table>               
228                </td>
229        </tr>
230</table>
231</div>
232      ]]></code>    </template>
233    <template>
234      <name>Aprovar.tpl</name>
235      <code><![CDATA[{wf_default_template}
236<div id="conteudo_corpo">
237<h2>Aprovar Empréstimo</h2>
238<table class="form_tabela" width="100%" cellspacing="0" border="0" align="center">
239        <tr>
240                <td width="100%">
241                        <table id="list_tabela_clara" width="60%" cellspacing="0">
242                                <tr>
243                                        <th width="30%">Título</th>
244                                        <th width="10%">Status</th>
245                                        <th width="20%">Ação</th>
246                                </tr>
247                                <tr>
248                                        <td>{$info.title}</td>
249                                        <td>{$info.status}</td>
250                                        <td>
251                                        <input type="button" class="form_botao" onclick="dispatch('Aprovar')" value="Aprovar"  />
252                                        <input type="button" class="form_botao" onclick="dispatch('Rejeitar')" value="Rejeitar"  />
253                                        </td>
254                                </tr>
255                        </table>
256                </td>
257        </tr>   
258</table>       
259</div>
260      ]]></code>    </template>
261    <template>
262      <name>Concluir.tpl</name>
263      <code><![CDATA[{wf_default_template}
264<div id="conteudo_corpo">
265<h2>Consultar</h2>
266<table class="form_tabela" width="100%" cellspacing="0" border="0" align="center">
267        <tr>
268                <td width="100%">
269                        <table id="list_tabela_clara" width="60%" cellspacing="0">
270                                <tr>
271                                        <td>
272                                                Seu pedido de empréstimo do CD <b>{$title}</b> foi {$status}
273                                        </td>
274                                </tr>
275                                <tr>
276                                        <td>
277                                                <input type="button" class="form_botao" onclick="dispatch('Ok')" value="Ok"  />
278                                        </td>
279                                </tr>
280                        </table>
281                </td>
282        </tr>
283</table>
284</form>
285      ]]></code>    </template>
286  </templates>
287  <includes>
288    <include>
289      <name>class.consultar.controller.inc.php</name>
290      <code><![CDATA[<?php
291
292/**
293 * @brief Gerencia atividade de consulta ao catálogo de cds.
294 * @author Carlos Eduardo Nogueira Gonçalves.
295 * @class ConsultarController
296 * @version 1.1
297 */
298class ConsultarController extends Controller
299{       
300        /**
301         * Chama a implementação da ação de inversão de status.
302         *
303         * @return boolean
304         * @access private
305         */
306        function inverter ( )
307        {       
308                $this->model->inverterStatusAction ( );         
309                $this->__default ( );
310        }       
311       
312        /**
313         * Ação padrão da atividade.
314         *
315         * @return boolean
316         * @access private
317         */
318        function __default ( )
319        {               
320                $this->model->defaultAction ( );
321                $this->loadViewVars ( );
322        }       
323       
324        /**
325         * Execução da aplicação.
326         *
327         * @return void
328         * @access public
329         */   
330        function run ( $action )
331        {       
332                //abre conexão com o banco para todas as ações
333                //evitando duplicação de codigo, pois ambas necessitam
334                //acessar o banco de dados
335                $this->model->DAO->connect ( );
336       
337                $this->dispatch($action);
338               
339                //fecha a conexão com o banco   
340                $this->model->DAO->disconnect ( );
341        }
342}
343
344?>
345      ]]></code>    </include>
346    <include>
347      <name>class.concluir.controller.inc.php</name>
348      <code><![CDATA[<?php
349
350/**
351 * @brief Gerencia atividade de exibição de resultado.
352 * @author Carlos Eduardo Nogueira Goncalves.
353 * @class ConcluirController
354 * @version 1.1
355 */
356class ConcluirController extends Controller
357{               
358        /**
359         * Chama implementação da acao ok (usuário confirma que recebeu o cd).
360         *
361         * @return boolean
362         * @access private
363         */
364        function ok ( )
365        {               
366                $this->model->okayAction ( );
367        }       
368               
369        /**
370         * Ação padrão da atividade.
371         *
372         * @return boolean
373         * @access private
374         */
375        function __default ( )
376        {               
377                $this->model->defaultAction ( );               
378                $this->loadViewVars ( );
379        }       
380       
381        /**
382         * Execução da atividade.
383         *
384         * @return void
385         * @access public
386         */   
387        function run ( $action )
388        {               
389                //chama o método de controle que irá normalizar o nome da ação,
390                //verificar se existe método para a ação e fazer a chamada
391                $this->dispatch($action);
392        }               
393}
394
395?>
396      ]]></code>    </include>
397    <include>
398      <name>class.solicitar.model.inc.php</name>
399      <code><![CDATA[<?php
400/**
401 * @brief Implementa atividade de solicitação de cd.
402 * @author Carlos Eduardo Nogueira Gonçalves.
403 * @class SolicitarModel
404 * @version 1.1
405 */
406class SolicitarModel extends Model
407{
408        /**
409         * @brief Implementação para a ação de solicitar um cd.
410         * @public.
411         * @return boolean.
412         */
413        function solicitarAction ( )
414        {       
415                /* substituir true abaixo por chamada a algum metodo validador, caso haja necessidade */
416                if ( true )
417                {
418                        //guarda identificação do cd no atributo do processo
419                        $this->_cdId = $this->request['params'];
420                        //atualiza os valores guardados pelo engine workflow
421                        $this->updateInstance ( );
422                        //indica que a atividade está completada
423                        $this->instance->complete ( );
424                        //retorna true indicando ao controlador que houve sucesso na operação
425                        return true;
426                }
427                else
428                        // nunca vai rodar, indicaria ao controlador que houve falha
429                        //caso houvesse alguma validação a ser feita
430                        return false;
431        }       
432       
433        /**
434         * @brief Implementação para a ação padrão da atividade.
435         * @public.
436         * @return boolean.
437         */
438        function defaultAction ( )
439        {       
440                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
441                if ( true )
442                {
443                        //armazena consulta no atributo de comandos SQL
444                        //note que as palavras reservadas do SQL estão em maiusculas
445                        //e as outras em minusculas                     
446                        $this->commandText = "SELECT * FROM cds.cdcollection WHERE status = 'disponivel' ";
447
448                        //armazena resultado da consulta no atributo adequado
449                        $this->resultSet = $this->DAO->query($this->commandText);
450                       
451                        $ret = array();
452                       
453                        //recupera os valores da consulta
454                        while ( $res = $this->resultSet->fetchRow ( DB_FETCHMODE_ASSOC ) )
455                                $ret[] = $res;
456                       
457                        //salva os valores da consulta no atributo de variáveis da camada view 
458                        $this->addViewVar('cds' , $ret );
459                        $this->addViewVar("activity_title", "Music CD Loans");
460                                                                       
461                        //retorna true indicando ao controlador que houve sucesso na operacao
462                        return true;
463                }
464                else
465                        // nunca vai rodar, indicaria ao controlador que houve falha
466                        //caso houvesse alguma validação a ser feita
467                        return false;
468        }
469}
470
471?>
472      ]]></code>    </include>
473    <include>
474      <name>class.consultar.model.inc.php</name>
475      <code><![CDATA[<?php
476/**
477 * @brief Implementa atividade de consulta ao catálogo de cds.
478 * @author Carlos Eduardo Nogueira Gonçalves.
479 * @name ConsultarModel
480 * @version 1.1
481 */
482class ConsultarModel extends Model
483{
484        /**
485         * @brief Implementação para a ação de inversao de status dos cds.
486         * @public.
487         * @return boolean.
488         */
489        function inverterStatusAction ( )
490        {       
491                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
492                if ( true )
493                {
494
495                        // obtem o id do cd solicitado no formulário e passado por post no atributo params
496                        $bindvars = array($this->request['params']);
497       
498                        // pega o registro do cd no banco e separa o campo status.     
499                        $this->commandText =
500                        "SELECT status from cds.cdcollection where cdid = ?";
501                        $this->resultSet = $this->DAO->query($this->commandText, $bindvars);
502                        $linha = $this->resultSet->fetchRow ( DB_FETCHMODE_ASSOC );
503                        $status_atual = $linha['status'];
504                                       
505                        //caso o status do cd esteja como disponivel                   
506                        if ( $status_atual == 'disponivel' )
507                        {
508                                //armazena consulta no atributo de comandos SQL
509                                //note que as palavras reservadas do SQL estão em maiusculas
510                                //e as outras em minúsculas
511                                $this->commandText =
512                                "UPDATE cds.cdcollection SET status = 'indisponivel' WHERE cdid = ?";   
513                                //armazena resultado da consulta no atributo adequado
514                                //altera o status para indisponivel
515                                $this->resultSet = $this->DAO->query($this->commandText, $bindvars);                           
516                        }
517                       
518                        //caso o status do cd esteja como indisponivel
519                        if ( $status_atual == 'indisponivel' )
520                        {
521                                //armazena consulta no atributo de comandos SQL
522                                //note que as palavras reservadas do SQL estão em maiúsculas
523                                //e as outras em minusculas
524                                $this->commandText =
525                                "UPDATE cds.cdcollection SET status = 'disponivel' WHERE cdid = ?";
526       
527                                //armazena resultado da consulta no atributo adequado
528                                //altera o status para disponivel
529                                $this->resultSet = $this->DAO->query($this->commandText, $bindvars);                           
530                        }
531                       
532                        //retorna true indicando ao controlador que houve sucesso na operacao
533                        return true;
534                }
535                else
536                        // nunca vai rodar, indicaria ao controlador que houve falha
537                        //caso houvesse alguma validacao a ser feita
538                        return false;
539               
540        }       
541       
542        /**
543         * @brief Implementação para a ação padrão da atividade.
544         * @public.
545         * @return boolean.
546         */
547        function defaultAction ( )
548        {       
549                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
550                if ( true )
551                {
552                        //armazena consulta no atributo de comandos SQL
553                        //note que as palavras reservadas do SQL estão em maiusculas
554                        //e as outras em minusculas                     
555                        $this->commandText = "SELECT * FROM cds.cdcollection order by title";
556
557                        //armazena resultado da consulta no atributo adequado
558                        $this->resultSet = $this->DAO->query($this->commandText);
559                       
560                        $ret = array();
561                       
562                        //recupera os valores da consulta
563                        while ( $res = $this->resultSet->fetchRow ( DB_FETCHMODE_ASSOC ) )
564                                $ret[] = $res;
565                       
566                        //salva os valores da consulta no atributo de variáveis da camada view 
567                        $this->addViewVar( 'cds' , $ret );
568                        $this->addViewVar("activity_title", "Music CD Loans");
569                                               
570                        //retorna true indicando ao controlador que houve sucesso na operação
571                        return true;
572                }
573                else
574                        // nunca vai rodar, indicaria ao controlador que houve falha
575                        //caso houvesse alguma validacao a ser feita
576                        return false;
577        }
578}
579
580?>
581      ]]></code>    </include>
582    <include>
583      <name>class.aprovar.model.inc.php</name>
584      <code><![CDATA[<?php
585/**
586 * @brief Implementa atividade de aprovação de solicitação de cds do catálogo.
587 * @author Carlos Eduardo Nogueira Gonçalves.
588 * @class AprovarModel
589 * @version 1.1
590 */
591class AprovarModel extends Model
592{
593        /**
594         * @brief Implementação da ação de aprovar solicitação de cd.
595         * @public.
596         * @return boolean.
597         */
598        function aprovarAction ( )
599        {       
600                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
601                if ( true )
602                {
603                        //atualiza atributos com dados vindos do engine workflow
604                        $this->updateAttributes ( );
605                       
606                        //atualiza atributo
607                        $this->_cdStatus = 'aprovado';
608                       
609                        //atualiza dados do engine workflow
610                        $this->updateInstance ( );
611                       
612                        //armazena consulta no atributo de comandos SQL
613                        //note que as palavras reservadas do SQL estão em maiusculas
614                        //e as outras em minusculas                     
615                        $this->commandText = "UPDATE cds.cdcollection SET status = 'indisponivel' WHERE cdid = " . $this->_cdId;
616
617                        //armazena resultado da consulta no atributo adequado
618                        $this->resultSet = $this->DAO->query($this->commandText);
619                       
620                        //indica que a atividade atual está completada
621                        $this->instance->complete ( );
622                       
623                        //retorna true indicando ao controlador que houve sucesso na operação
624                        return true;
625                }
626                else
627                        // nunca vai rodar, indicaria ao controlador que houve falha
628                        //caso houvesse alguma validação a ser feita
629                        return false;
630        }       
631       
632        /**
633         * @brief Implementação da ação de rejeitar solicitação de cd.
634         * @public.
635         * @return boolean.
636         */
637        function rejeitarAction ( )
638        {       
639                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
640                if ( true )
641                {
642                        //atualiza atributos com dados vindos do engine workflow
643                        $this->updateAttributes ( );
644                       
645                        //atualiza atributo
646                        $this->_cdStatus = 'rejeitado';
647                       
648                        //atualiza dados do engine workflow
649                        $this->updateInstance ( );
650                       
651                        //indica que a atividade atual está completada
652                        $this->instance->complete ( );
653                       
654                        //retorna true indicando ao controlador que houve sucesso na operação
655                        return true;           
656                }
657                else
658                        // nunca vai rodar, indicaria ao controlador que houve falha
659                        //caso houvesse alguma validacao a ser feita
660                        return false;
661        }       
662       
663        /**
664         * @brief Implementação para a ação padrão da atividade.
665         * @public.
666         * @return boolean.
667         */
668        function defaultAction ( )
669        {       
670                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
671                if ( true )
672                {
673                        //atualiza atributos com dados vindos do engine workflow
674                        $this->updateAttributes ( );
675
676                        //armazena consulta no atributo de comandos SQL
677                        //note que as palavras reservadas do SQL estão em maiusculas
678                        //e as outras em minusculas                     
679                        $this->commandText = "SELECT * FROM cds.cdcollection WHERE cdid = " . $this->_cdId;
680
681                        //armazena resultado da consulta no atributo adequado
682                        $this->resultSet = $this->DAO->query($this->commandText);
683                       
684                        //recupera os valores da consulta
685                        $row = $this->resultSet->fetchRow ( DB_FETCHMODE_ASSOC );
686                       
687                        //salva os valores da consulta no atributo de variáveis da camada view 
688                        $this->addViewVar ( 'info' , $row );
689                        $this->addViewVar ( 'activity_title', "Music CD Loans");
690
691                        //atualiza atributo com dados vindos da consulta
692                        $this->_cdTitle = $row['title'];
693                        $this->_cdStatus = $row['status'];
694
695                        //atualiza dados do engine workflow
696                        $this->updateInstance ( );
697                                               
698                        //retorna true indicando ao controlador que houve sucesso na operação
699                        return true;
700                }
701                else
702                        // nunca vai rodar, indicaria ao controlador que houve falha
703                        //caso houvesse alguma validação a ser feita
704                        return false;
705        }
706}
707
708?>
709      ]]></code>    </include>
710    <include>
711      <name>class.model.inc.php</name>
712      <code><![CDATA[<?php
713/**
714 * @brief Implementa processo de empréstimo de cds.
715 * @author Carlos Eduardo Nogueira Gonçalves
716 * @class Model
717 * @version 1.1
718 */
719class Model extends BaseModel
720{
721        /* Inicio declaração de atributos */
722
723        /**
724         * @brief Identificação do cd.
725         * @var int
726         * @protected
727         */                                         
728        var $_cdId = 0;
729       
730        /**
731         * @brief Título do cd.
732         * @var string
733         * @protected
734         */                                         
735        var $_cdTitle = "";     
736   
737        /**
738         * @brief Status do cd.
739         * @var string
740         * @protected
741         */                                         
742        var $_cdStatus = "";   
743           
744        /* Fim declaração de atributos */       
745       
746               
747        /**
748        * Construtor da camada Model em nivel de processo
749        *
750        * @return Model
751        * @param array $env Configuracao MVC
752        * @param boolean $autoAssign Preenche automaticamente os atributos com os valores de $_REQUEST
753        * @public 
754        * @attention Sobrescrita opcional do construtor da classe BaseModel
755        * @attention O construtor deverá executar OBRIGATORIAMENTE o método BaseModel::super(&$env, $autoAssign)
756        * @warning O valor padrão de $autoAssign em BaseModel é false
757        */
758        function Model(&$env) {
759                $this->super(&$env);
760        }
761   
762}
763?>
764      ]]></code>    </include>
765    <include>
766      <name>class.controller.inc.php</name>
767      <code><![CDATA[<?php
768/**
769 * @brief Gerencia processo de empréstimo de cds.
770 * @author Carlos Eduardo Nogueira Gonçalves
771 * @class Controller
772 * @version 1.1
773 */
774class Controller extends BaseController
775{       
776        /* Início declaração de constantes */
777       
778        /**
779         * @brief Template da atividade Consultar
780         * @var string
781         * @protected
782         */     
783        var $BROWSE = 'Browse_CDs.tpl';
784       
785        /**
786         * @brief Template da atividade Aprovar
787         * @var string
788         * @protected
789         */     
790        var $APPROVE = 'Approve_CD_request.tpl';       
791       
792        /**
793         * @brief Template da atividade Solicitar
794         * @var string
795         * @protected
796         */     
797        var $REQUEST = 'Request_CD.tpl';
798       
799        /**
800         * @brief Template da atividade Concluir
801         * @var string
802         * @protected
803         */     
804        var $ACK = 'Ack_result.tpl';   
805       
806        /* Fim declaração de constantes */
807   
808       
809        /**
810        * Process startup settings
811        *
812        * @return object
813        * @param object $model Model layer instance for activities business logic
814        * @param array $env MVC environment settings
815        * @access protected
816        */
817        function Controller(&$model , &$env)
818        {
819                $this->super(&$model , &$env);
820        }               
821}
822?>
823      ]]></code>    </include>
824    <include>
825      <name>class.aprovar.controller.inc.php</name>
826      <code><![CDATA[<?php
827
828/**
829 * @brief Gerencia atividade de aprovação de solicitação de cds do catálogo.
830 * @author Carlos Eduardo Nogueira Gonçalves.
831 * @class AprovarController
832 * @version 1.1
833 */
834class AprovarController extends Controller
835{       
836        /**
837         * Chama a implementação da ação de aprovar solicitação de cd.
838         *
839         * @return boolean
840         * @access private
841         */
842        function aprovar ( )
843        {               
844                $this->model->aprovarAction ( );
845        }       
846
847        /**
848         * Chama a implementação da ação de rejeitar solicitação de cd.
849         *
850         * @return boolean
851         * @access private
852         */
853        function rejeitar ( )
854        {               
855                $this->model->rejeitarAction ( );
856        }               
857       
858        /**
859         * Ação padrão da atividade.
860         *
861         * @return boolean
862         * @access private
863         */
864        function __default ( )
865        {               
866                $this->model->defaultAction ( );
867                $this->loadViewVars ( );
868        }       
869       
870        /**
871         * Execução da atividade.
872         *
873         * @return void
874         * @access public
875         */   
876        function run ( $action )
877        {       
878                //abre conexão com o banco para todas as ações
879                //evitando duplicação de código, pois ambas necessitam
880                //acessar o banco de dados
881                $this->model->DAO->connect ( );
882       
883                $this->dispatch($action);
884               
885                //fecha a conexão com o banco   
886                $this->model->DAO->disconnect ( );
887        }
888}
889
890?>
891      ]]></code>    </include>
892    <include>
893      <name>class.solicitar.controller.inc.php</name>
894      <code><![CDATA[<?php
895
896/**
897 * @brief Gerencia atividade de solicitação de cds do catálogo.
898 * @author Carlos Eduardo Nogueira Gonçalves.
899 * @class SolicitarController
900 * @version 1.1
901 */
902class SolicitarController extends Controller
903{       
904        /**
905         * Chama a implementação da ação de solicitação de cd.
906         *
907         * @return boolean
908         * @access private
909         */
910        function solicitar ( )
911        {               
912                $this->model->solicitarAction ( );
913        }       
914       
915        /**
916         * Ação padrão da atividade.
917         *
918         * @return boolean
919         * @access private
920         */
921        function __default ( )
922        {
923                $this->model->defaultAction ( );
924                $this->loadViewVars ( );
925        }       
926       
927        /**
928         * Execução da atividade.
929         *
930         * @return void
931         * @access public
932         */   
933        function run ( $action )
934        {       
935                //abre conexão com o banco para todas as ações
936                //evitando duplicação de código, pois ambas necessitam
937                //acessar o banco de dados
938                $this->model->DAO->connect ( );
939       
940                $this->dispatch($action);
941               
942                //fecha a conexao com o banco   
943                $this->model->DAO->disconnect ( );
944        }
945}
946
947?>
948      ]]></code>    </include>
949    <include>
950      <name>class.concluir.model.inc.php</name>
951      <code><![CDATA[<?php
952/**
953 * @brief Implementa atividade de exibição de resultado.
954 * @author Carlos Eduardo Nogueira Gonçalves.
955 * @class ConcluirModel
956 * @version 1.1
957 */
958class ConcluirModel extends Model
959{
960        /**
961         * @brief Implementação para a ação ok (usuário confirma que recebeu o cd).
962         * @public.
963         * @return boolean.
964         */
965        function okayAction ( )
966        {       
967                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
968                if ( true )
969                {       
970                        //indica que a atividade atual está completada
971                        $this->instance->complete ( );
972                       
973                        //retorna true indicando ao controlador que houve sucesso na operação
974                        return true;
975                }
976                else
977                        // nunca vai rodar, indicaria ao controlador que houve falha
978                        //caso houvesse alguma validação a ser feita
979                        return false;
980        }       
981       
982        /**
983         * @brief Implementação para a ação padrão da atividade.
984         * @public.
985         * @return boolean.
986         */
987        function defaultAction ( )
988        {       
989                /* substituir true abaixo por chamada a algum método validador, caso haja necessidade */
990                if ( true )
991                {       
992                        //salva os valores do engine workflow no atributo de variáveis da camada view
993                        $this->updateAttributes();
994                        $this->addViewVar( 'status' , $this->_cdStatus);                       
995                        $this->addViewVar( 'title' , $this->_cdTitle);                 
996                        $this->addViewVar( 'activity_title' , "Music CD Loans" );
997                       
998                        //retorna true indicando ao controlador que houve sucesso na operação
999                        return true;
1000                }
1001                else
1002                        // nunca vai rodar, indicaria ao controlador que houve falha
1003                        //caso houvesse alguma validação a ser feita
1004                        return false;
1005        }
1006}
1007
1008?>
1009      ]]></code>    </include>
1010  </includes>
1011  <resources>
1012    <resource>
1013      <name>icon.png</name>
1014      <bindata><![CDATA[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
1055fdmwP+RfAAAAAElFTkSuQmCC
1056 ]]></bindata>    </resource>
1057  </resources>
1058  <transitions>
1059     <transition>
1060       <from>Solicitar</from>
1061       <to>Aprovar</to>
1062     </transition>
1063     <transition>
1064       <from>Aprovar</from>
1065       <to>Concluir</to>
1066     </transition>
1067     <transition>
1068       <from>Concluir</from>
1069       <to>end</to>
1070     </transition>
1071  </transitions>
1072</process>