format 75
"security" // iplan::security
  revision 48
  modified_by 5 "jviqueira"
  // class settings
  //class diagram settings
  draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
  //use case diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default class_drawing_mode default shadow default show_stereotype_properties default
  //sequence diagram settings
  show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
  //collaboration diagram settings
  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
  //object diagram settings
   write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
  //component diagram settings
  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //deployment diagram settings
  package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
  draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
  //state diagram settings
  package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
  show_activities default region_horizontally default drawing_language default show_stereotype_properties default
  //activity diagram settings
  package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
  show_infonote default drawing_language default show_stereotype_properties default
  
  php_dir "iplan/security"
  classview 167173 "Security Diagram"
    //class diagram settings
    draw_all_relations default hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
    //collaboration diagram settings
    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default show_msg_context default draw_all_relations default shadow default show_stereotype_properties default
    //object diagram settings
     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
    //sequence diagram settings
    show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default show_class_context_mode default show_msg_context_mode default
    //state diagram settings
    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
    show_activities default region_horizontally default drawing_language default show_stereotype_properties default
    //class settings
    //activity diagram settings
    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
    show_infonote default drawing_language default show_stereotype_properties default
    associated_deployment_view deploymentview_ref 167429 // Security Deployment
    classdiagram 160773 "Security Classes"
      draw_all_relations no hide_attributes default hide_operations default hide_getset_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_context default show_members_multiplicity default show_members_initialization default show_attribute_modifiers default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_relation_modifiers default show_relation_visibility default show_infonote default shadow default show_stereotype_properties default
      comment "La idea de las clases de seguridad es administrar usuarios, mdulos (por ahora no existen como tal pero un Facade y sus incumbencias se le parece) y permisos del sistema; as como tambin provee el objeto central que \"pega\" toda la aplicacin y provee de un contexto

Hay un conjunto de entidades que son persistentes: User, Profile, Action y Facade; las otras son propias de la aplicacin web. Todas las representaciones se contrajeron a su mnima expresin, es decir que no cuentan con informacin de metadata como \"fecha de creacin\", \"fecha de modificacin\", etc..., ni de histricos dado que eso se deja para una mejora posterior o su implementacin en ORMObject (en forma uniforme para todo).

Un usuario puede tener varios perfiles asociados, dichos perfiles tienen \"acciones\". La misma accin puede formar parte de ms de un perfil, de modo que queda:
User <- M:N -> Profile <- M:N -> Action

La Accin:
Al final se consolid como una sola cosa que consta de un nombre \"humano\", una descripcin ms detallada y un cdigo de URL que es una abreviatura a usar en la URL para dicho comando. La accin se puede llamar para que devuelva un HTML o se puede llamar como AJAX, para que devuelva un XML vlido.
En realidad en ambos casos lo que obtiene es un \"Renderable\" sobre el cual se llama a ->display() para HTML o ->parse() para XML.

El urlCode lo autogenera el sistema de modo tal que no se repita y que desde afuera de la aplicacin no se sepa de que se trata. En los templates se puede usar el alias del Facade \".method\" para indicar la accin del sistema. Nota: los urlCode NO PUEDEN modificarse, dado que el hacerlo hara necesario limpiar toda la cach de templates para que efectivamente las referencias se refresquen.

Si se mira desde el punto de vista de HTML, el concepto sobre el cual se basa la accin es que cualquier cosa que se haga en la aplicacin muestra una pantalla (aunque sea de error) y que algo similar sucede en el AJAX, pero en vez de devolver HTML es un XML ms sencillo. Volviendo al HTML un ejemplo sera:

URL-> index.php		se instancia una Application y al no haber accin en forma predeterminada llama a la Action predeterminada: login
Action:login->do()		hace un 
	require_once(facade->file)
			luego llama a 
	facade->class:method()	retorna un Renderable
			retorna el Renderable obtenido
Context:set(Renderable::params);
Dependiendo de:
case AJAX:
	templateXML->setContent(Renderable->template); END
case HTML:
	templateHTML->setContent(Renderable->template); END

El Facade:
Lo que en otros frameworks sera un mdulo ac no existe, pero hay un \"Facade\" que se puede registrar indicando un archivo PHP donde se define una clase hija de AbstractManager. Dicha implementacin define una funcin listMethods() que se emplea al crear (registrar) acciones nuevas. El listMethods() se usa porque dentro del Facade pueden existir mtodos que sean de uso interno.

Se puede agregar un Facade y luego las acciones de dicho Facade estarn disponibles para optarse desde la lista de acciones.
La \"Application\" es responsable de cargar todos los Facade que puede ver el usuario y obtener los alias.
Obviamente algunos datos iniciales deben ser cargados en la base de datos tales como el \"Admin\" y sus permisos bsicos.


"
      size A4
    end

    class 396165 "User"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 437509 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $name el nombre real del usuario"
      end

      attribute 437637 "surname"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $surname el apellido real del usuario"
      end

      attribute 437765 "username"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $username el nombre de usuario escogido por o para el usuario"
      end

      attribute 437893 "password"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $password el hash de la clave del usuario"
      end

      classrelation 574725 // provider (<unidirectional association>)
	relation 572677 --->
	  a role_name "provider" multiplicity "1" protected
	    comment "@var Provider el proveedor al que pertenece el usuario"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 574725 // provider (<unidirectional association>)
	  b parent class_ref 443269 // Provider
      end

      classrelation 506629 // <generalisation>
	relation 504837 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 506629 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 507141 // profiles (<unidirectional association>)
	relation 505349 --->
	  a role_name "profiles" multiplicity "*" protected
	    comment "@var array $profiles la lista de perfiles que tiene habilitado el usuario"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 507141 // profiles (<unidirectional association>)
	  b parent class_ref 396293 // Profile
      end

      operation 679813 "define"
	class_operation preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.
@param iplan\\orm\\ORM $orm el manejador de objetos para el cual se registra la definicin
@return ORMDefinition la definicin default"
      end
    end

    class 396293 "Profile"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 438149 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 438277 "description"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      classrelation 541317 // users (<unidirectional association>)
	relation 539397 --->
	  a role_name "users" multiplicity "*" protected
	    comment "@var array $users la lista de usuarios del perfil"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 541317 // users (<unidirectional association>)
	  b parent class_ref 396165 // User
      end

      classrelation 506757 // <generalisation>
	relation 504965 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 506757 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 507013 // actions (<directional aggregation>)
	relation 505221 o-->
	  a role_name "actions" multiplicity "*" protected
	    comment "@var array $actions la lista de acciones relacionadas al perfil
"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 507013 // actions (<directional aggregation>)
	  b parent class_ref 396421 // Action
      end

      classrelation 581893 // provider (<unidirectional association>)
	relation 579717 --->
	  a role_name "provider" multiplicity "1" protected
	    comment "@var \\iplan\\security\\Provider el proveedor que configur el grupo"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 581893 // provider (<unidirectional association>)
	  b parent class_ref 443269 // Provider
      end

      operation 679941 "define"
	class_operation preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.
@param iplan\\orm\\ORM $orm el manejador de objetos para el cual se registra la definicin
@return ORMDefinition la definicin default"
      end
    end

    class 443269 "Provider"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 492421 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el nombre del proveedor del servicio"
      end

      attribute 492549 "alias"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string un nombre de una sola palabra que sea utilizado para identificar al proveedor"
      end

      attribute 499205 "baseURL"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string la URL base del sistema de gestin del proveedor."
      end

      classrelation 589061 // menus (<composition>)
	relation 586885 *---
	  a role_name "menus" multiplicity "*" protected
	    comment "@var array la lista de menues que pertenecen al provider"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 589061 // menus (<composition>)
	  b role_name "provider" multiplicity "1" protected
	    comment "@var iplan\\security\\Provider la lista de proveedores que tienen configurado este menu"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 589189 // provider (<composition>)
      end

      classrelation 574981 // users (<unidirectional association>)
	relation 572805 --->
	  a role_name "users" multiplicity "*" protected
	    comment "@var array una coleccin de los usuarios que pertenecen al proveedor de servicio en cuestin"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 574981 // users (<unidirectional association>)
	  b parent class_ref 396165 // User
      end

      classrelation 582021 // profiles (<unidirectional association>)
	relation 579845 --->
	  a role_name "profiles" multiplicity "*" protected
	    comment "@var array la lista de perfiles asociados al proveedor"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 582021 // profiles (<unidirectional association>)
	  b parent class_ref 396293 // Profile
      end

      classrelation 582277 // facades (<unidirectional association>)
	relation 580101 --->
	  a role_name "facades" multiplicity "*" protected
	    comment "@var array la lista de Facades habilitados al provider"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 582277 // facades (<unidirectional association>)
	  b parent class_ref 410245 // Facade
      end

      classrelation 608773 // anonymous (<unidirectional association>)
	relation 606469 --->
	  a role_name "anonymous" multiplicity "0..1" protected
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 608773 // anonymous (<unidirectional association>)
	  b parent class_ref 396165 // User
      end

      classrelation 568197 // <generalisation>
	relation 566149 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 568197 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      operation 734469 "define"
	class_operation preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.
@param iplan\\orm\\ORM $orm el manejador de objetos para el cual se registra la definicin
@return ORMDefinition la definicin default"
      end

      classrelation 622597 // owner (<directional aggregation>)
	relation 620293 o-->
	  a role_name "owner" multiplicity "0..1" protected
	    comment "Quin es el propietario directo del Provider. El nico que debera ser null en este atributo es iPlan."
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 622597 // owner (<directional aggregation>)
	  b parent class_ref 443269 // Provider
      end
    end

    class 396421 "Action"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 438533 "description"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 438405 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 445829 "method"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $method el mtodo a llamar"
      end

      attribute 438661 "urlCode"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string un cdigo textual del comando"
      end

      attribute 465925 "hint"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string un texto para mostrar en los componentes que realicen o ejecuten esta accin"
      end

      attribute 505989 "icon"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el nombre del estilo que marca el cono de la accin"
      end

      classrelation 602245 // <generalisation>
	relation 599941 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 602245 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 513797 // <dependency>
	relation 512005 -_->
	  a default
	    php "${type}"
	    classrelation_ref 513797 // <dependency>
	  b parent class_ref 410117 // Renderable
      end

      classrelation 514053 // facade (<unidirectional association>)
	relation 512261 --->
	  a role_name "facade" multiplicity "1" protected
	    comment "@var Facade $facade Una representacin de la clase a ser invocada y su definicin"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 514053 // facade (<unidirectional association>)
	  b parent class_ref 410245 // Facade
      end

      classrelation 541445 // profiles (<unidirectional association>)
	relation 539525 --->
	  a role_name "profiles" multiplicity "*" protected
	    comment "@var array $profiles la lista de perfiles que utilizan la accin"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 541445 // profiles (<unidirectional association>)
	  b parent class_ref 396293 // Profile
      end

      operation 658181 "execute"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "boolean"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Invoca a las funciones que realizan la accin y retorna un Renderable con el resultado.
No me dej ponerle \"do()\" porque \"do\" est reservado :S
@param iplan\\security\\Context $context el contexto sobre el que se ejecuta la accin.
@param boolean $ajax indica si se invoc va ajax.
@return Renderable el objeto que renderiza la salida."
      end

      operation 680069 "define"
	class_operation preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.
@param iplan\\orm\\ORM $orm el manejador de objetos para el cual se registra la definicin
@return ORMDefinition la definicin default"
      end
    end

    class 410117 "Renderable"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 445189 "template"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	get_oper operation_ref 727813 // getTemplate
      end

      operation 664837 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "templateName" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "@param string $templateName el nombre o alias del template definido en el Facade
@return Renderable Una clase capaz de renderizar el template."
      end

      operation 727813 "getTemplate"
	force_body_gen const cpp_inline public explicit_return_type "string"
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->template;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_attribute attribute_ref 445189 // template
      end
    end

    class 410245 "Facade"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 445445 "class"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $class el nombre de la clase \"Facade\""
      end

      attribute 445573 "file"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string file el archivo donde se encuentra el facade"
      end

      classrelation 514181 // <generalisation>
	relation 512389 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 514181 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      attribute 452613 "alias"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string $alias un ttulo descriptivo para el usuario"
      end

      classrelation 561413 // actions (<unidirectional association>)
	relation 559365 --->
	  a role_name "actions" multiplicity "*" protected
	    comment "@var array la lista de acciones actualmente autorizadas del facade"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 561413 // actions (<unidirectional association>)
	  b parent class_ref 396421 // Action
      end

      classrelation 582149 // providers (<unidirectional association>)
	relation 579973 --->
	  a role_name "providers" multiplicity "*" protected
	    comment "@var array la coleccin de Proveedores que tienen habilitado el Facade"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 582149 // providers (<unidirectional association>)
	  b parent class_ref 443269 // Provider
      end

      operation 680197 "define"
	class_operation preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.
@param iplan\\orm\\ORM $orm el manejador de objetos para el cual se registra la definicin
@return iplan\\orm\\ORMDefinition la definicin default"
      end
    end

    class 417029 "ApplicationContext"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 554885 // application (<unidirectional association>)
	relation 552837 --->
	  a role_name "application" multiplicity "1" private
	    comment "@var \\iplan\\security\\Application la aplicacin a la que pertenece el contexto"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 554885 // application (<unidirectional association>)
	  b parent class_ref 423557 // Application
      end

      classrelation 581509 // user (<directional aggregation>)
	relation 579333 o-->
	  a role_name "user" multiplicity "1" private
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 581509 // user (<directional aggregation>)
	  b parent class_ref 396165 // User
	get_oper operation_ref 754181 // getUser
      end

      attribute 452869 "globals"
	private explicit_type "array"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@param array $globals un arreglo donde se almacenan las variables de sesin y otros que se quieran pasar globalmente a travs de la sesin"
      end

      classrelation 554757 // managers (<directional aggregation>)
	relation 552709 o-->
	  a role_name "managers" multiplicity "1..*" private
	    comment "@var array la lista de descendientes de AbstractManagers que tiene habilitado el usuario."
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 554757 // managers (<directional aggregation>)
	  b parent class_ref 416901 // AbstractManager
      end

      classrelation 581637 // provider (<directional aggregation>)
	relation 579461 o-->
	  a role_name "provider" multiplicity "1" private
	    comment "@var \\iplan\\security\\Provider el proveedor en el que est logueado el usuario"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 581637 // provider (<directional aggregation>)
	  b parent class_ref 443269 // Provider
	get_oper operation_ref 754309 // getProvider
      end

      operation 713733 "__construct"
	preserve_cpp_body_indent public return_type class_ref 417029 // ApplicationContext
	nparams 3
	  param inout name "application" type class_ref 423557 // Application
	  param inout name "user" type class_ref 396165 // User
	  param in name "provider" type class_ref 443269 // Provider
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea un contexto de la aplicacin, cargando las facilidades que el usuario tiene para el proveedor del servicio indicado."
      end

      operation 672389 "set"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 2
	  param in name "name" explicit_type "string"
	  param in name "value" explicit_type "mixed"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Guarda un valor en la sesin activa.

@param string $name el nombre de la variable de sesin cuyo valor se quiere establecer
@param mixed $value el valor de dicha variable

@return boolean Un indicador del resultado de la operacin. Si es False quiere decir que no se efectu."
      end

      operation 794245 "get"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 1
	  param in name "name" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve el valor de una variable de contexto.
@param string el nombre de la variable cuyo valor se quiere recuperar
@return mixed El valor de la variable solicitada si es que la misma existe."
      end

      operation 672517 "reset"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 1
	  param in name "name" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Quita un valor de la sesin
@param string $name el nombre de la variable a quitar
@return boolean Un indicador del resultado de la operacin, FALSE si hubo algn problema."
      end

      operation 713861 "addManager"
	preserve_cpp_body_indent public return_type class_ref 417029 // ApplicationContext
	nparams 2
	  param in name "alias" explicit_type "string"
	  param inout name "manager" type class_ref 416901 // AbstractManager
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un Facade al contexto utilizable por el usuario.
@param string $alias el nombre con el cual se referir al manager desde los templates
@param iplan\\security\\AbstractManager $manager El manejador a ser agregado al contexto
@return iplan\\security\\Context El contexto configurado"
      end

      operation 727557 "getManager"
	preserve_cpp_body_indent public return_type class_ref 416901 // AbstractManager
	nparams 1
	  param in name "alias" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera un manager del contexto de la aplicacin

@param string $alias el alias del manager

@return iplan\\security\\AbstractManager|FALSE retorna el manager solicitado o FALSE si el usuario actual no tiene permiso o si el manager no existe."
      end

      operation 740997 "getParam"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 3
	  param in name "name" explicit_type "string"
	  param in name "default" explicit_type "mixed"
	    defaultvalue "null"
	  param in name "where" explicit_type "string"
	    defaultvalue "'PGRC'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Wrapper de la homnima de la aplicacin con el agregado de que busca en el contexto:
Recupera un parmetro pasado al script.
@param string $name el nombre del parmetro
@param mixed $default el valor a devolver en caso que el parmetro no se encuentre
@param string $where un string que indica en qu contexto buscar: P=POST, G=GET, R=REQUEST y C=Context (variables globales)

@return mixed El valor recuperado"
      end

      operation 754181 "getUser"
	force_body_gen const cpp_inline public return_type class_ref 396165 // User
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->user;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_relation classrelation_ref 581509 // user (<directional aggregation>)
      end

      operation 800773 "setUser"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param in name "user" type class_ref 396165 // User
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Asigna el usuario. Este mtodo slo debe ser empleado para cambiar el usuario activo en acciones tales como el \"login\".
@param User $user el nuevo usuario del contexto
@return ApplicationContext El contexto modificado"
      end

      operation 754309 "getProvider"
	force_body_gen const cpp_inline public return_type class_ref 443269 // Provider
	nparams 0
	
	cpp_name_spec "get_${name}"
	final 
	java_name_spec "get${Name}"
	php_final php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  return $this->provider;
}
"
	php_name_spec "get${Name}"
	
	python_name_spec "get${Name}"
	
	idl_name_spec "get_${name}"
	get_of_relation classrelation_ref 581637 // provider (<directional aggregation>)
      end

      operation 727685 "toTwigArguments"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte los datos de la sesin en variables de Twig.

@return array Un arreglo con los objetos al estilo Twig."
      end
    end

    class 423557 "Application"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      ncouples 1
      key "uses" value "use \\iplan\\orm\\ORM;"
      attribute 472709 "instance"
	class_attribute private type class_ref 423557 // Application
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var Application variable que alberga la instancia de la aplicacin"
      end

      attribute 459397 "orm"
	private type class_ref 167685 // ORM
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var ORM la instancia del manejador de objetos de la aplicacin"
      end

      attribute 472581 "twig"
	private explicit_type ""
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var Twig_Environment la instancia del motor de templates"
      end

      classrelation 527365 // context (<unidirectional association>)
	relation 525573 --->
	  a role_name "context" multiplicity "1" private
	    comment "@var Enviroment una instancia con los valores globales registrados por los usuarios"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 527365 // context (<unidirectional association>)
	  b parent class_ref 417029 // ApplicationContext
      end

      classrelation 541573 // menus (<directional composition>)
	relation 539653 *-->
	  a role_name "menus" multiplicity "1..*" private
	    comment "@var array la lista de menus de la aplicacin"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 541573 // menus (<directional composition>)
	  b parent class_ref 430085 // Menu
      end

      operation 693253 "__construct"
	preserve_cpp_body_indent private explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 807429 "reset"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param in name "provider_id" explicit_type "int"
	    defaultvalue "null"
	  param in name "user_id" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Resetea los datos de sesin y vuelve a cargar la informacin de la aplicacin (permisos, etc).
TODO: Este mtodo nunca debera ser tocado desde los templates."
      end

      operation 693381 "getInstance"
	class_operation preserve_cpp_body_indent public return_type class_ref 423557 // Application
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la aplicacin actual o, en caso de no existir, genera una nueva.

@return Application La instancia de la aplicacin"
      end

      classrelation 527877 // <dependency>
	relation 526085 -_->
	  a default
	    php "${type}"
	    classrelation_ref 527877 // <dependency>
	  b parent class_ref 416901 // AbstractManager
      end

      operation 747653 "getContext"
	preserve_cpp_body_indent public return_type class_ref 417029 // ApplicationContext
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el contexto de la aplicacin.

@return \\iplan\\security\\Context El contexto de la aplicacin en curso"
      end

      operation 679301 "getParam"
	preserve_cpp_body_indent public explicit_return_type "mixed"
	nparams 3
	  param in name "name" explicit_type "string"
	  param in name "default" explicit_type "mixed"
	    defaultvalue "null"
	  param in name "where" explicit_type "string"
	    defaultvalue "'PGR'"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera un parmetro pasado al script.

@param string $name el nombre del parmetro
@param mixed $default el valor a devolver en caso que el parmetro no se encuentre
@param string $where un string que indica en qu contexto buscar: P=POST, G=GET, R=REQUEST

@return mixed El valor recuperado"
      end

      operation 747525 "getORM"
	preserve_cpp_body_indent public return_type class_ref 167685 // ORM
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera el ORM de la aplicacin.

@return ORM El ORM de la aplicacin."
      end

      operation 679045 "parseParams"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 1
	  param in name "isAjax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Verifica qu se debe hacer segn los parmetros de la URL.
@param Boolean $isAjax indica si el cdigo debe ser devuelto como cdigo Ajax o como HTML
@return boolean True si todo anda bien, False sino."
      end

      operation 767621 "destroy_session"
	preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Destruye las variables de sesin.
Nota: La sesin se destruye pero SE CREA de nuevo inmediatamente y se guarda el id del Provider.

@return boolean un boleano indicando con TRUE que la operacin fue realizada con xito"
      end

      operation 693509 "install"
	class_operation preserve_cpp_body_indent public explicit_return_type "bool"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "ATENCIN: DROPEA TODAS LAS TABLAS, RELACIONES, CONTRAINTS Y GENERADORES.

Mtodo para generar los valores iniciales en las tablas:
- Usuarios: Admin, Client
- Profiles: Administrator, Client
- Actions: Login, Logout
- Facades: GeneralManager, UserManager

@return boolean retorna true para el caso que todo salga bien"
      end
    end

    class 430085 "Menu"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      attribute 466053 "name"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
      end

      attribute 505733 "params"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string parmetros adicionales para pasar por GET a la accin"
      end

      attribute 505861 "icon"
	protected explicit_type "string"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var string el nombre del estilo del cono"
      end

      attribute 512517 "order"
	protected explicit_type "int"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "@var int El nmero de orden de aparicin del menu"
      end

      attribute 519045 "dynamic"
	protected explicit_type "boolean"
	cpp_decl ""
	java_decl ""
	php_decl "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	python_decl ""
	idl_decl ""
	comment "Indica si este men se carga preferentemente a travs de AJAH o si directamente redirige el sitio a otro lado."
      end

      classrelation 534405 // <generalisation>
	relation 532613 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 534405 // <generalisation>
	  b parent class_ref 141317 // ORMObject
      end

      classrelation 534533 // action (<directional aggregation>)
	relation 532741 o-->
	  a role_name "action" multiplicity "1" protected
	    comment "@var Action $action la accin que ejecuta el men"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 534533 // action (<directional aggregation>)
	  b parent class_ref 396421 // Action
      end

      classrelation 548101 // submenus (<aggregation>)
	relation 546181 o---
	  a role_name "submenus" multiplicity "*" protected
	    comment "@var array la lista de submenues del men actual"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 548101 // submenus (<aggregation>)
	  b role_name "parent" multiplicity "0..1" protected
	    comment "@var iplan\\security\\Menu el menu padre del actual."
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 548229 // parent (<aggregation>)
      end

      classrelation 589189 // provider (<composition>)
	relation_ref 586885 // <composition>
      end

      classrelation 548229 // parent (<aggregation>)
	relation_ref 546181 // <aggregation>
      end

      operation 767365 "define"
	class_operation preserve_cpp_body_indent public return_type class_ref 236293 // ORMDefinition
	nparams 1
	  param inout name "orm" type class_ref 167685 // ORM
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna un objeto de definicin predeterminado al cual hay que agregarle los mapeos pertinentes.
@param iplan\\orm\\ORM $orm el manejador de objetos para el cual se registra la definicin
@return iplan\\orm\\ORMDefinition la definicin default"
      end
    end

    class 416901 "AbstractManager"
      abstract visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 527749 // application (<unidirectional association>)
	relation 525957 --->
	  a role_name "application" protected
	    comment "@var Application la instancia de la aplicacin que maneja la clase"
	    php "  ${comment}${visibility}${const}${static}${var}${name}${value};
"
	    classrelation_ref 527749 // application (<unidirectional association>)
	  b parent class_ref 423557 // Application
      end

      operation 713989 "__construct"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 1
	  param inout name "application" type class_ref 423557 // Application
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea una instancia del Manager y configura la aplicacin

@param iplan\\security\\Application la aplicacin que es la propietaria del manager
@return iplan\\security\\AbstractManager Una instancia del Manager en cuestin"
      end

      operation 679685 "__listActions"
	abstract preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una lista de mtodos que pueden ser invocados desde la aplicacin.

@return array Un arreglo (clave, valor) donde la clave es un string con el nombre ficticio de la operacin y el valor el nombre del mtodo que le corresponde."
      end

      classrelation 561669 // <dependency>
	relation 559621 -_->
	  a default
	    php "${type}"
	    classrelation_ref 561669 // <dependency>
	  b parent class_ref 410117 // Renderable
      end

      operation 849541 "group"
	preserve_cpp_body_indent protected explicit_return_type "array"
	nparams 2
	  param in name "by" explicit_type "array"
	  param inout name "items" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrupa una lista de elementos segn los valores de las claves indicadas.

@param array $by una lista de las claves por las cuales agrupar los datos.
@param array $items   la lista de items que deben ser agrupados.

@return array otra lista donde los valores de los campos agrupados no se repiten."
      end

      operation 849797 "combine_recursive"
	preserve_cpp_body_indent protected explicit_return_type ""
	nparams 3
	  param inout name "collection" explicit_type "array"
	  param in name "groups" explicit_type "array"
	  param in name "head" explicit_type "array"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Usado internamente por group(); esta funcin reconstruye los conjuntos agrupados en su representacin final."
      end

      operation 849669 "merge"
	preserve_cpp_body_indent protected explicit_return_type "bool"
	nparams 4
	  param inout name "first" explicit_type "array"
	  param in name "by" explicit_type "array"
	  param inout name "second" explicit_type "array"
	  param in name "rename" explicit_type "array"
	    defaultvalue "array()"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Une al primer arreglo los elementos del segundo siempre que las columnas especificadas de ambos coincidan.

@param array $first la lista sobre la que se adicionarn los elementos
@param array $by un arreglo donde cada clave y valor corresponden a las columnas de filtro del arreglo principal y el secundario respectivamente.
@param array $second la lista que se va a adicionar a la primera
@param array $rename otro arreglo donde las claves son los nombres de las columnas del $secondaryList que se desean renombrar al pasar a $mainList. (La clave es la key original y el valor es la key \"nueva\")

@return boolean true si la unin se hizo con xito en todos los elementos o false si hubo elementos que no combinaban.
"
      end
    end

    class 430213 "GeneralManager"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 534661 // <generalisation>
	relation 532869 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 534661 // <generalisation>
	  b parent class_ref 416901 // AbstractManager
      end

      operation 707077 "__listActions"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una lista de mtodos que pueden ser invocados desde la aplicacin.

@return array Un arreglo (clave, valor) donde la clave es un string con el nombre ficticio de la operacin y el valor el nombre del mtodo que le corresponde."
      end

      operation 774405 "listMethods"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una lista de mtodos que pueden ser invocados desde la aplicacin.

@return array Un arreglo (clave, valor) donde la clave es un string con el nombre ficticio de la operacin y el valor el nombre del mtodo que le corresponde."
      end

      operation 774149 "getMenus"
	preserve_cpp_body_indent public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Recupera la un arreglos con los datos necesarios para crear el menu de la aplicacin.
@return array La lista de los menues de la aplicacin.
"
      end

      operation 781189 "buildMenuTree"
	preserve_cpp_body_indent private explicit_return_type "array"
	nparams 3
	  param in name "nodes" explicit_type "array"
	  param inout name "menu" explicit_type "array"
	  param in name "parent" explicit_type "int"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
      end

      operation 686725 "mailTo"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 6
	  param in name "from" explicit_type "string"
	  param in name "to" explicit_type "array"
	  param in name "title" explicit_type "string"
	  param in name "body" explicit_type "string"
	  param in name "cc" explicit_type "array"
	    defaultvalue "null"
	  param in name "bcc" explicit_type "array"
	    defaultvalue "null"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}, ${p2}${v2}, ${p3}${v3}, ${p4}${v4}, ${p5}${v5}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Enva un email a travs del smtp del sistema.

@param string $from la direccin de correo remitente. Puede usarse el formato \"Nombre\" <mail@dominio> (el nombre incluye las comillas)
@param array $to una lista de direcciones a las cuales enviar el mensaje, cada direccin de correo destino se rigue bajo las mismas reglas de formato de $from
@param string $title el ttulo del mensaje
@param string $body el cuerpo del mensaje, puede ser cdigo html
@param array $cc la lista de destinatarios con copia, puede usar formato \"Nombre\" <mail@dominio>
@param array $bcc la lista de destinatarios con copia oculta, puede usar el formato anterior
"
      end

      operation 706949 "toHTML"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 1
	  param in name "text" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Transforma acentos y caracteres especiales a un formato compatible HTML
@param string $text el texto a convertir
@result string Un texto equivalente en HTML al original."
      end

      operation 727941 "url"
	preserve_cpp_body_indent public explicit_return_type "string"
	nparams 1
	  param in name "url" explicit_type "string"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Convierte una URL dada en otra que sirve para obtener el archivo deseado de acuerdo al contexto.
@param string $url la url del recurso
@return string una direccin"
      end

      operation 807301 "sessionData"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Devuelve la informacin de los datos de sesin mediante un vardump()
"
      end
    end

    class 436741 "SecurityManager"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
      classrelation 561541 // <generalisation>
	relation 559493 ---|>
	  a public
	    php "${type}"
	    classrelation_ref 561541 // <generalisation>
	  b parent class_ref 416901 // AbstractManager
      end

      operation 720517 "__listActions"
	preserve_cpp_body_indent cpp_virtual public explicit_return_type "array"
	nparams 0
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna una lista de mtodos que pueden ser invocados desde la aplicacin.

@return array Un arreglo (clave, valor) donde la clave es un string con el nombre ficticio de la operacin y el valor el nombre del mtodo que le corresponde."
      end

      operation 720645 "defaultPage"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Muesta la home page que se ve sin iniciar sesin
@param iplan\\security\\Context $context el contexto donde se solicit la accin.
@return iplan\\security\\renderable La pgina en cuestin."
      end

      operation 720773 "login"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Accin que intenta autenticar un usuario en el sistema o, en caso que se llame sin parmetros, devuelve el formulario de login.
@param iplan\\security\\Context $context el contexto donde se solicit la accin
@param boolean $ajax un flag que indica si el llamado requiere una respuesta por AJAX/AJAH
@return Renderable Si la autenticacin es concretada correctamente retorna un Renderable con la pgina principal de la aplicacin, sino remite de nuevo al login (si hubo error con un mensaje, sino vaco).
"
      end

      operation 721029 "logout"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Termina la sesin y vuelve a la defaultPage.
@param iplan\\security\\Context $context el contexto donde se solicit la accin.
@return iplan\\security\\Renderable La home page que corresponde cuando no se inici sesin."
      end

      operation 720901 "mainPage"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	    defaultvalue "false"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Retorna la pgina principal.
@param iplan\\security\\Context $context el contexto donde se solicit la accin.
@return iplan\\security\\Renderable El objeto que permite mostrar la pgina principal."
      end

      operation 767493 "redirect"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Redirige a una pgina pasada por GET como \"url\".
@param iplan\\security\\Context $context el contexto donde se solicit la accin.
@return iplan\\security\\Renderable El objeto que permite mostrar la pgina principal."
      end

      operation 814085 "listUsers"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Lista los usuarios del sistema.
@param ApplicationContext $context el contexto de la aplicacin
@param boolean $ajax indica si el llamado es para pgina completa o para ser devuelto en background

@return Renderable el template a devolver"
      end

      operation 814213 "saveUser"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Agrega un usuario al sistema, bajo el dominio del provider o presenta un formulario para dar de alta un usuario nuevo.

@param ApplicationContext $context el contexto de la aplicacin
@param boolean $ajax indica si el llamado es para pgina completa o para ser devuelto en background
"
      end

      operation 814341 "deleteUser"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra el usuario identificado por \"user_id\"."
      end

      operation 814469 "changePassword"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Cambia la contrasea del usuario actual"
      end

      operation 814597 "listProfiles"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 1
	  param inout name "context" type class_ref 417029 // ApplicationContext
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Lista los perfiles relacionados al provider"
      end

      operation 814725 "saveProfile"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Guarda o modifica el perfil indicado"
      end

      operation 814853 "deleteProfile"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra el perfil especificado"
      end

      operation 814981 "listActions"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Lista las acciones relacionadas al provider"
      end

      operation 815109 "saveAction"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Crea o guarda la accin indicada"
      end

      operation 815237 "deleteAction"
	preserve_cpp_body_indent public return_type class_ref 410117 // Renderable
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Borra la accin indicada"
      end

      operation 856325 "showError"
	preserve_cpp_body_indent public explicit_return_type ""
	nparams 2
	  param inout name "context" type class_ref 417029 // ApplicationContext
	  param in name "ajax" explicit_type "bool"
	
	preserve_java_body_indent 
	preserve_php_body_indent php_def "  ${comment}${final}${visibility}${abstract}${static}function ${name}${(}${p0}${v0}, ${p1}${v1}${)}
{
  ${body}}
"
	preserve_python_body_indent 
	
	comment "Muestra un mensaje de error personalizado"
      end
    end

    class 449925 "Nada"
      visibility package 
      cpp_decl ""
      java_decl ""
      php_decl "${comment}${final}${abstract}class ${name}${extends}${implements} {
${members}}
"
      python_2_2 python_decl ""
      idl_decl ""
      explicit_switch_type ""
      
    end
  end

  deploymentview 167429 "Security Deployment"
    //deployment diagram settings
    package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
    draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
    ncouples 1
    key "uses" value ""
    artifact 311429 "Application"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 423557 // Application
      end
      ncouples 1
      key "uses" value "require_once \"iplan/orm/ORM.php\";
require_once 'iplan/orm/OracleDatabase.php';

require_once 'lib/Twig/Autoloader.php';
require_once 'iplan/twig/IPlanExtension.php';"
    end

    artifact 304773 "AbstractManager"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 416901 // AbstractManager
      end
    end

    artifact 311557 "ApplicationContext"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 417029 // ApplicationContext
	class_ref 449925 // Nada
      end
    end

    artifact 318085 "GeneralManager"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 430213 // GeneralManager
      end
    end

    artifact 304517 "Renderable"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 410117 // Renderable
      end
    end

    artifact 331141 "SecurityManager"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 436741 // SecurityManager
      end
    end
  end

  deploymentview 173957 "Security Data Deployment"
    //deployment diagram settings
    package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
    draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
    ncouples 1
    key "uses" value "require_once \"iplan/orm/ORMDefinition.php\";
"
    artifact 344197 "Action"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 396421 // Action
      end
    end

    artifact 304389 "Facade"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 410245 // Facade
      end
    end

    artifact 324613 "Menu"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 430085 // Menu
      end
    end

    artifact 297733 "Profile"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 396293 // Profile
      end
    end

    artifact 337669 "Provider"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 443269 // Provider
      end
    end

    artifact 297605 "User"
      stereotype "source"
      php_src "<?php
${require_once}
@{uses}

/**
* Author: Jorge Alexis Viqueira
* ${description}
*/
${definition}
?>"
      associated_classes
	class_ref 396165 // User
      end
    end
  end
end
