<?php
// vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker:
/**
 * Página del multi-formulario para capturar caso (captura_caso.php). 
 * 
 * PHP version 5
 *
 * @category  SIVeL
 * @package   SIVeL
 * @author    Vladimir Támara <vtamara@pasosdeJesus.org>
 * @copyright 2004 Dominio público. Sin garantías.
 * @license   http://creativecommons.org/licenses/publicdomain/ Dominio Público. Sin garantías.
 * @version   $Id: PagVictimaColectiva.php,v 1.60 2009/05/03 12:23:21 vtamara Exp $
 * @link      http://sivel.sf.net
 */

/** 
 * Pestaña Víctima Colectiva de la ficha de captura de caso 
 */

require_once 'PagBaseMultiple.php';
require_once 'ResConsulta.php';

/**
 * Víctima Colectiva.
 * Ver documentación de funciones en clase base.
 *
 * @category SIVeL
 * @package  SIVeL
 * @author   Vladimir Támara <vtamara@pasosdeJesus.org>
 * @license  http://creativecommons.org/licenses/publicdomain/ Dominio Público.
 * @link     http://sivel.sf.net/tec
 * @see      PagBaseMultiple
 */
class PagVictimaColectiva extends PagBaseMultiple
{

    /** Víctima colectiva (independiente de caso) */
    var $bvictima_colectiva ;
    /** Asociación entre victima colectiva y caso */
    var $bvictima_colectiva_caso ;
    /** Categorias */
    var $bcategoria_comunidad ;
    /** Antecedentes */
    var $bantecedente_comunidad;
    /** Presuntos responsables */
    var $bp_responsable_agrede_comunidad ;
    /** Rangos de edad */
    var $brango_edad_comunidad;
    /** Sectores sociales */
    var $bsector_social_comunidad;
    /** Vínculos con estado */
    var $bvinculo_estado_comunidad;
    /** Filiaciones */
    var $bfiliacion_comunidad;
    /** Profesiones */
    var $bprofesion_comunidad;
    /** Organizaciones */
    var $borganizacion_comunidad;

    /** Titulo completo  */
    var $titulo = 'Víctima Colectiva';

    /** Titulo corto */
    var $tcorto = 'Vic. colectiva';

    /** Prefijo para variables de sesión */
    var $pref = "fvc";

    /** Nueva Copia */
    var $nuevaCopia = false;

    /** Clase modelo para pestaña */
    var $clase_modelo = 'victima_colectiva';

    /**
     * Pone en null variables asociadas a tablas de la pestaña.
     *
     * @return null
     */
    function nullVar() 
    {
        $this->bvictima_colectiva_caso = null;
        $this->bvictima_colectiva = null;
        $this->bcategoria_comunidad = null;
        $this->bantecedente_comunidad = null;
        $this->brango_edad_comunidad = null;
        $this->bp_responsable_agrede_comunidad = null;
        $this->bsector_social_comunidad = null;
        $this->bvinculo_estado_comunidad = null;
        $this->bfiliacion_comunidad = null;
        $this->bprofesion_comunidad = null;
        $this->borganizacion_comunidad = null;
    }

    /**
     * Retorna una identificación del registro actual. 
     *
     * @return string Identifación
     */
    function copiaId()
    {
        return $this->bvictima_colectiva->_do->id;
    }

    /**
     * Elimina de base de datos el registro actual.
     *
     * @param array &$valores Valores enviados por formulario.
     *                         
     * @return null 
     */
    function elimina(&$valores) 
    {
        $this->iniVar();
        if (isset($this->bvictima_colectiva->_do->id)) {
            $this->eliminaVic($this->bvictima_colectiva_caso->_do,
                $this->bvictima_colectiva->_do);
            $_SESSION['fvc_total']--;
        }
    }

    var $tablasrel = array(
        'victima_colectiva_caso',
        'victima_colectiva',
        'categoria_comunidad',
        'antecedente_comunidad',
        'rango_edad_comunidad',
        'p_responsable_agrede_comunidad',
        'sector_social_comunidad',
        'vinculo_estado_comunidad',
        'filiacion_comunidad',
        'profesion_comunidad',
        'organizacion_comunidad',
    );



    /**
     * Inicializa variables.
     * 
     * @param integer $id_v_colectiva Id  de víctima colectiva
     *
     * @return handle  Conexión a base de datos
     */
    function iniVar($id_v_colectiva = null)
    {

        $dvictima_colectiva_caso =& 
            DB_DataObject::factory('victima_colectiva_caso');
        $dvictima_colectiva =& DB_DataObject::factory('victima_colectiva');
        $dcategoria_comunidad =& 
            DB_DataObject::factory('categoria_comunidad', $this);
        $dantecedente_comunidad=& 
            DB_DataObject::factory('antecedente_comunidad', $this);
        $drango_edad_comunidad=& DB_DataObject::factory('rango_edad_comunidad');
        $dp_responsable_agrede_comunidad =& 
            DB_DataObject::factory('p_responsable_agrede_comunidad');
        $dsector_social_comunidad=& 
            DB_DataObject::factory('sector_social_comunidad');
        $dvinculo_estado_comunidad=& 
            DB_DataObject::factory('vinculo_estado_comunidad');
        $dfiliacion_comunidad=& DB_DataObject::factory('filiacion_comunidad');
        $dprofesion_comunidad=& DB_DataObject::factory('profesion_comunidad');
        $dorganizacion_comunidad=& 
            DB_DataObject::factory('organizacion_comunidad');
        $db =& $dvictima_colectiva_caso->getDatabaseConnection();

        $idcaso =& $_SESSION['basicos_id'];
        if (!isset($idcaso) || $idcaso == null) {
            die("Bug: idcaso no debería ser null");
        }

        $idp = $ndp = $cdp = array();
        $indid = -1;
        $tot = 0;
        ResConsulta::extrae_colectivas($idcaso, $db, $idp, $ndp, $cdp,
            $id_v_colectiva, $indid, $tot);
        $_SESSION['fvc_total'] = $tot;
        if ($indid >= 0) {
            $_SESSION['fvc_pag'] = $indid;
        }
        $dvictima_colectiva_caso->id_caso= $idcaso;
        if ($_SESSION['fvc_pag'] < 0 || $_SESSION['fvc_pag'] >= $tot) {
            $dvictima_colectiva_caso->id_v_colectiva = null;
            $dvictima_colectiva->id = null;
        } else {
            $dvictima_colectiva_caso->id_v_colectiva = 
                $idp[$_SESSION['fvc_pag']];
            $dvictima_colectiva_caso->find();
            $dvictima_colectiva_caso->fetch();
            $dvictima_colectiva->id = $idp[$_SESSION['fvc_pag']];
            $dvictima_colectiva->find();
            $dvictima_colectiva->fetch();
        }
        $dcategoria_comunidad ->id_v_colectiva = $dvictima_colectiva->id;
        $dcategoria_comunidad ->id_caso = $idcaso;
        $dantecedente_comunidad->id_v_colectiva = $dvictima_colectiva->id;
        $drango_edad_comunidad->id_v_colectiva = $dvictima_colectiva->id;
        $dp_responsable_agrede_comunidad ->id_v_colectiva = 
            $dvictima_colectiva->id;
        $dp_responsable_agrede_comunidad ->id_caso = $idcaso;
        $dsector_social_comunidad->id_v_colectiva = $dvictima_colectiva->id;
        $dvinculo_estado_comunidad->id_v_colectiva = $dvictima_colectiva->id;
        $dfiliacion_comunidad->id_v_colectiva = $dvictima_colectiva->id;
        $dprofesion_comunidad->id_v_colectiva = $dvictima_colectiva->id;
        $dorganizacion_comunidad->id_v_colectiva = $dvictima_colectiva->id;


        $this->bvictima_colectiva_caso  =& 
            DB_DataObject_FormBuilder::create($dvictima_colectiva_caso, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bvictima_colectiva  =& 
            DB_DataObject_FormBuilder::create($dvictima_colectiva, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bvictima_colectiva->useMutators = true;
        $this->bcategoria_comunidad  =& 
            DB_DataObject_FormBuilder::create($dcategoria_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bantecedente_comunidad =& 
            DB_DataObject_FormBuilder::create($dantecedente_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->brango_edad_comunidad =& 
            DB_DataObject_FormBuilder::create($drango_edad_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bp_responsable_agrede_comunidad  =& 
            DB_DataObject_FormBuilder::create($dp_responsable_agrede_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bsector_social_comunidad =& 
            DB_DataObject_FormBuilder::create($dsector_social_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bvinculo_estado_comunidad =& 
            DB_DataObject_FormBuilder::create($dvinculo_estado_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bfiliacion_comunidad =& 
            DB_DataObject_FormBuilder::create($dfiliacion_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->bprofesion_comunidad =& 
            DB_DataObject_FormBuilder::create($dprofesion_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        $this->borganizacion_comunidad =& 
            DB_DataObject_FormBuilder::create($dorganizacion_comunidad, 
            array('requiredRuleMessage' => $GLOBALS['mreglareq'], 
                'ruleViolationMessage' => $GLOBALS['mreglavio'] ));
        return $db;
    }


    /**
     * Constructora.
     * Ver documentación completa en clase base.
     *
     * @param string $nomForma Nombre 
     * @param string $mreq     Mensaje de dato requerido
     *                          
     * @return void  
     * @see    PagBaseMultiple
     */
    function PagVictimaColectiva($nomForma, $mreq)
    {
        parent::PagBaseMultiple($nomForma, $mreq, 'Victima Colectiva',
            'Vic. colectiva', 'fvc', 'victima_colectiva');
        $this->addAction('siguiente', new Siguiente());
        $this->addAction('anterior', new Anterior());
    }


    /**
     * Agrega elementos al formulario.
     * Ver documentación completa en clase base.
     *
     * @param handle &$db    Conexión a base de datos
     * @param string $idcaso Id del caso
     *                        
     * @return void  
     * @see    PagBaseSimple
     */
    function formularioAgrega(&$db, $idcaso)
    {
        $vv= isset($this->bvictima_colectiva->_do->id) ? 
            $this->bvictima_colectiva->_do->id : '';
        $this->addElement('hidden', 'id', $vv);
 
        $this->bvictima_colectiva->createSubmit = 0;
        $this->bvictima_colectiva->useForm($this);
        $this->bvictima_colectiva->getForm();

        $sel =& $this->addElement('select', 'id_categoria',
            'Tipo Violencia');
        $sel->setMultiple(true);
        ResConsulta::llenaSelCategoria($db,
            "SELECT id_tipo_violencia, id_supracategoria, " .
            "id_categoria FROM categoria_caso " .
            "WHERE id_caso='" .
            $this->bvictima_colectiva_caso->_do->id_caso . "';", $sel);

        $this->bantecedente_comunidad->createSubmit = 0;
        $this->bantecedente_comunidad->useForm($this);
        $this->bantecedente_comunidad->getForm();

        $this->bp_responsable_agrede_comunidad->createSubmit = 0;
        $this->bp_responsable_agrede_comunidad->useForm($this);
        $this->bp_responsable_agrede_comunidad->getForm();

        $this->brango_edad_comunidad->createSubmit = 0;
        $this->brango_edad_comunidad->useForm($this);
        $this->brango_edad_comunidad->getForm();

        $this->bsector_social_comunidad->createSubmit = 0;
        $this->bsector_social_comunidad->useForm($this);
        $this->bsector_social_comunidad->getForm();

        $this->bvinculo_estado_comunidad->createSubmit = 0;
        $this->bvinculo_estado_comunidad->useForm($this);
        $this->bvinculo_estado_comunidad->getForm();

        $this->bfiliacion_comunidad->createSubmit = 0;
        $this->bfiliacion_comunidad->useForm($this);
        $this->bfiliacion_comunidad->getForm();

        $this->bprofesion_comunidad->createSubmit = 0;
        $this->bprofesion_comunidad->useForm($this);
        $this->bprofesion_comunidad->getForm();

        $this->borganizacion_comunidad->createSubmit = 0;
        $this->borganizacion_comunidad->useForm($this);
        $this->borganizacion_comunidad->getForm();

        $_SESSION['sin_csrf'] = mt_rand(0, 1000);
        $this->addElement('hidden', 'evita_csrf', $_SESSION['sin_csrf']);

    }

    /**
     * Llena valores del formulario.  
     * Ver documentación completa en clase base.
     *
     * @param handle  &$db    Conexión a base de datos
     * @param integer $idcaso Id del caso
     *                         
     * @return void   
     * @see    PagBaseSimple
     */
    function formularioValores(&$db, $idcaso) 
    {
        $campos = array_merge($this->bvictima_colectiva->
            _do->fb_fieldsToRender, array('id_categoria', 
            'id_antecedente', 'id_p_responsable', 'id_rango', 
            'id_sector', 'id_vinculo_estado', 'id_filiacion', 
            'id_profesion', 'id_organizacion'));

        $vv= isset($this->bvictima_colectiva->_do->id) ? 
            $this->bvictima_colectiva->_do->id : '';
        $v = array(); 
        if (isset($_SESSION['recuperaErrorValida'])) {
            $v = $_SESSION['recuperaErrorValida'];
        } elseif ($vv != '') {
            $valscc = array();
            $valsca = array();
            $valscp = array();
            $valscre = array();
            $valscss = array();
            $valscve = array();
            $valscfc = array();
            $valscpro = array();
            $valscoc = array();


            $this->bcategoria_comunidad->_do->find();
            while ($this->bcategoria_comunidad->_do->fetch()) {
                $valscc[] = 
                    $this->bcategoria_comunidad->_do->id_tipo_violencia .
                ":" . $this->bcategoria_comunidad->_do->id_supracategoria .
                ":" . $this->bcategoria_comunidad->_do->id_categoria;
            }

            $this->bantecedente_comunidad->_do->find();
            while ($this->bantecedente_comunidad->_do->fetch()) {
                $valsca[] = $this->bantecedente_comunidad->_do->id_antecedente;
            }

            $this->bp_responsable_agrede_comunidad->_do->find();
            while ($this->bp_responsable_agrede_comunidad->_do->fetch()) {
                $valscp[] = $this->bp_responsable_agrede_comunidad->
                    _do->id_p_responsable;
            }

            $n = $this->brango_edad_comunidad->_do->find();
            while ($this->brango_edad_comunidad->_do->fetch()) {
                $valscre[] = $this->brango_edad_comunidad->_do->id_rango;
            }

            $this->bsector_social_comunidad->_do->find();
            while ($this->bsector_social_comunidad->_do->fetch()) {
                $valscss[] = $this->bsector_social_comunidad->_do->id_sector;
            }

            $this->bvinculo_estado_comunidad->_do->find();
            while ($this->bvinculo_estado_comunidad->_do->fetch()) {
                $valscve[] = $this->bvinculo_estado_comunidad->
                    _do->id_vinculo_estado;
            }

            $this->bfiliacion_comunidad->_do->find();
            while ($this->bfiliacion_comunidad->_do->fetch()) {
                $valscfc[] = $this->bfiliacion_comunidad->_do->id_filiacion;
            }

            $this->bprofesion_comunidad->_do->find();
            while ($this->bprofesion_comunidad->_do->fetch()) {
                $valscpro[] = $this->bprofesion_comunidad->_do->id_profesion;
            }

            $this->borganizacion_comunidad->_do->find();
            while ($this->borganizacion_comunidad->_do->fetch()) {
                $valscoc[] = $this->borganizacion_comunidad->_do->id_organizacion;
            }
            $v['id_categoria'] = $valscc;
            $v['id_antecedente'] = $valsca;
            $v['id_p_responsable'] = $valscp;
            $v['id_rango'] = $valscre;
            $v['id_sector'] = $valscss;
            $v['id_vinculo_estado'] = $valscve;
            $v['id_filiacion'] = $valscfc;
            $v['id_profesion'] = $valscpro;
            $v['id_organizacion'] = $valscoc;
        } else if (isset($_SESSION['nuevo_copia_id'])) {
            $id = $_SESSION['nuevo_copia_id'];
            unset($_SESSION['nuevo_copia_id']);

            $d =& DB_DataObject::factory('victima_colectiva');
            $d->get('id', $id);
            foreach ($d->fb_fieldsToRender as $c) {
                $v[$c] = $d->$c;
/*                $cq = $this->getElement($c);
$cq->setValue($d->$c); */
            }

            $scc =& $this->getElement('id_categoria');
            $valscc = array();
            $d =& DB_DataObject::factory('categoria_comunidad');
            $d->id_v_colectiva = $id;
            $d->find();
            while ($d->fetch()) {
                $valscc[] = $d->id_tipo_violencia.
                ":" . $d->id_supracategoria.
                ":" . $d->id_categoria;
            }
            $v['id_categoria'] = $valscc;
            //$scc->setValue($valscc); 

            $r = array('antecedente_comunidad' => 'id_antecedente',
                'p_responsable_agrede_comunidad' => 'id_p_responsable',
                'rango_edad_comunidad' =>  'id_rango',
                'sector_social_comunidad' =>  'id_sector',
                'vinculo_estado_comunidad' =>  'id_vinculo_estado',
                'filiacion_comunidad' =>  'id_filiacion',
                'profesion_comunidad' =>  'id_profesion',
                'organizacion_comunidad' =>  'id_organizacion'
            );
            foreach ($r as $nt => $ca) {
             //   $el =& $this->getElement($ca);
                $valel = array();
                $d =& DB_DataObject::factory($nt);
                $d->id_v_colectiva = $id;
                $d->find();
                while ($d->fetch()) {
                    $valel[] = $d->$ca;
                }
                //   $el->setValue($valel); 
                $v[$ca] = $valel;
            }

            $this->removeElement('id');
        }
        formularioValoresEstablece($this, $campos, $v);

        if (isset($_SESSION['recuperaErrorValida'])) {
            unset($_SESSION['recuperaErrorValida']);
        }

    }


    /**
     * Elimina una víctima
     * 
     * @param mixed  $dvcolectivacaso Objeto con vic. col. caso
     * @param object $dvcolectiva     Objeto con vic. col
     *
     * @return void  
     */
    function eliminaVic($dvcolectivacaso, $dvcolectiva) 
    {
        if ($dvcolectivacaso->id_v_colectiva != null) {
            $db =& $dvcolectivacaso->getDatabaseConnection();
            $idvcol = $dvcolectivacaso->id_v_colectiva;
            $idcaso = $dvcolectivacaso->id_caso;
            $result = $db->query("DELETE FROM " .
            "categoria_comunidad WHERE " .
            "id_v_colectiva='$idvcol' AND " .
            "id_caso='$idcaso'");
            $result = $db->query("DELETE FROM " .
            "antecedente_comunidad WHERE " .
            "id_v_colectiva='$idvcol'");
            $result = $db->query("DELETE FROM " .
            "rango_edad_comunidad WHERE " .
            "id_v_colectiva='$idvcol'");
            $result = $db->query("DELETE FROM " .
            "p_responsable_agrede_comunidad WHERE " .
            "id_v_colectiva='$idvcol' AND " .
            "id_caso='$idcaso'");
            $result = $db->query("DELETE FROM " .
            "sector_social_comunidad WHERE " .
            "id_v_colectiva='$idvcol'");
            $result = $db->query("DELETE FROM " .
            "vinculo_estado_comunidad WHERE " .
            "id_v_colectiva='$idvcol'");
            $result = $db->query("DELETE FROM " .
            "filiacion_comunidad WHERE " .
            "id_v_colectiva='$idvcol'");
            $result = $db->query("DELETE FROM " .
            "profesion_comunidad WHERE " .
            "id_v_colectiva='$idvcol'");
            $result = $db->query("DELETE FROM " .
            "organizacion_comunidad WHERE " .
            "id_v_colectiva='$idvcol'");

            $dvcolectivacaso->delete();
            $dvcolectiva->delete();
        }
    }


    /**
     * Elimina registros de tablas relacionadas con caso de este formulario.
     * Ver documentación completa en clase base.
     *
     * @param handle  &$db    Conexión a base de datos
     * @param integer $idcaso Id del caso
     *                         
     * @return void   
     * @see    PagBaseSimple
     */
    static function eliminaDep(&$db, $idcaso) 
    {
        assert($db != null);
        assert(isset($idcaso));
        $dvcolectivacaso =& DB_DataObject::factory('victima_colectiva_caso');
        $dvcolectiva=& DB_DataObject::factory('victima_colectiva');
        $dvcolectivacaso->id_caso = $idcaso;
        $dvcolectivacaso->find();
        $cp = array();
        while ($dvcolectivacaso->fetch()) {
            $cp[] = $dvcolectivacaso->id_v_colectiva;
        }
        foreach ($cp as $idv) {
            $dvcolectivacaso =& DB_DataObject::factory('victima_colectiva_caso');
            $dvcolectivacaso->id_caso = $idcaso;
            $dvcolectivacaso->id_v_colectiva = $idv;
            $dvcolectivacaso->find(1);
            $dvcolectiva->get('id', $idv);
            PagVictimaColectiva::eliminaVic($dvcolectivacaso, $dvcolectiva);
        }
    }


    /**
     * Procesa valores del formulario enviados por el usuario.
     * Ver documentación completa en clase base.
     *
     * @param handle &$valores Valores ingresados por usuario
     *                          
     * @return bool   Verdadero si y solo si puede completarlo con éxito
     * @see    PagBaseSimple
     */
    function procesa(&$valores) 
    {
        $es_vacio = (!isset($valores['nombre']) || $valores['nombre'] == '') &&
            (!isset($valores['anotacion']) || $valores['anotacion'] == '') &&
            (!isset($valores['personas_aprox']) || 
            $valores['personas_aprox'] == '') &&
            (!isset($valores['id_categoria']) || 
            $valores['id_categoria'] == array()) &&
            (!isset($valores['id_antecedente']) || 
            $valores['id_antecedente'] == array()) &&
            (!isset($valores['id_p_responsable']) || 
            $valores['id_p_responsable'] == array()) &&
            (!isset($valores['id_rango']) || 
            $valores['id_rango'] == array()) &&
            (!isset($valores['id_sector']) || 
            $valores['id_sector'] == array()) &&
            (!isset($valores['id_vinculo_estado']) || 
            $valores['id_vinculo_estado'] == array()) &&
            (!isset($valores['id_filiacion']) || 
            $valores['id_filiacion'] == array()) &&
            (!isset($valores['id_profesion']) || 
            $valores['id_profesion'] == array()) &&
            (!isset($valores['id_organizacion']) || 
            $valores['id_organizacion'] == array())
        ;

        if ($es_vacio) {
            return true;
        }
        if (!$this->validate() ) {
            return false;
        }

         if (!isset($valores['evita_csrf']) || 
            $valores['evita_csrf'] != $_SESSION['sin_csrf']) {
            die("Datos enviados no pasaron verificación CSRF (" .
                $_SESSION['sin_csrf'] . ", " . $valores['evita_csrf'] . ")");
        }
        if ((isset($_SESSION['forma_modo']) ||
            $_SESSION['forma_modo'] != 'busqueda') && (
            !isset($valores['id_p_responsable']) ||
            $valores['id_p_responsable'] == array())) {
            errorValida('Falta especificar presunto responsable', $valores);
            return false;
        }

        if ((isset($_SESSION['forma_modo']) ||
            $_SESSION['forma_modo'] != 'busqueda') && (
            !isset($valores['id_categoria']) ||
            $valores['id_categoria'] == array())) {
            errorValida('Falta especificar tipo de violencia', $valores);
            return false;
        }
        if ((!isset($_SESSION['forma_modo'])
            || $_SESSION['forma_modo'] != 'busqueda') && (
            !isset($valores['nombre']) ||
            trim($valores['nombre'])=='')) {
                errorValida('Falta nombre de víctima', $valores);
                return false;
        }

        if (!isset($valores['id']) || $valores['id'] == '') {
            $valores['id'] = null;
            $db = $this->iniVar();
        } else {
            $db = $this->iniVar((int)$valores['id']);
        }


        $idcaso = $this->bvictima_colectiva_caso->_do->id_caso;
        $ret = $this->process(array(&$this->bvictima_colectiva, 'processForm'), 
            false);
        if (PEAR::isError($ret)) {
            die($ret->getMessage());
        }

        if (isset($this->bvictima_colectiva->_do->id)) {
            $idvictima = $this->bvictima_colectiva->_do->id;
            $this->bvictima_colectiva_caso->_do->id_v_colectiva = $idvictima;
            $auxvcc =& DB_DataObject::factory('victima_colectiva_caso');
            $auxvcc->id_v_colectiva = $idvictima;
            $auxvcc->id_caso = $idcaso;
            if ($auxvcc->find()==0) {
                $_SESSION['fvc_total']++;
                $this->bvictima_colectiva_caso->_do->insert();
            }

            $q = "DELETE FROM categoria_comunidad WHERE " .
                "id_v_colectiva='$idvictima' AND id_caso='$idcaso'";
            $result = $db->query($q);
            if (isset($valores['id_categoria'])) {
                foreach ($valores['id_categoria'] as $k => $v) {
                    $t = explode(":", varEscapa($v, $db));
                    $this->bcategoria_comunidad->_do->id_caso = $idcaso;
                    $this->bcategoria_comunidad->_do->id_v_colectiva = 
                        $idvictima;
                    $this->bcategoria_comunidad->_do->id_tipo_violencia = $t[0];
                    $this->bcategoria_comunidad->_do->id_supracategoria = $t[1];
                    $this->bcategoria_comunidad->_do->id_categoria = $t[2];
                    $this->bcategoria_comunidad->_do->insert();
                }
            }

            $result = $db->query("DELETE FROM " .
                "antecedente_comunidad WHERE " .
                "id_v_colectiva='$idvictima'");
            if (isset($valores['id_antecedente'])) {
                foreach ($valores['id_antecedente'] as $k => $v) {
                    $this->bantecedente_comunidad->_do->id_v_colectiva = 
                        $idvictima;
                    $this->bantecedente_comunidad->_do->id_antecedente = 
                        varEscapa($v, $db);
                    $this->bantecedente_comunidad->_do->insert();
                }
            }


            $result = $db->query("DELETE FROM " .
            "p_responsable_agrede_comunidad WHERE " .
            "id_v_colectiva='$idvictima' AND id_caso='$idcaso'");
            if (isset($valores['id_p_responsable'])) {
                foreach ($valores['id_p_responsable'] as $k => $v) {
                    $this->bp_responsable_agrede_comunidad->_do->id_caso = 
                        $idcaso;
                    $this->bp_responsable_agrede_comunidad->
                        _do->id_v_colectiva = $idvictima;
                    $this->bp_responsable_agrede_comunidad->
                        _do->id_p_responsable = varEscapa($v, $db);
                    $this->bp_responsable_agrede_comunidad->_do->insert();
                }
            }

            $result = $db->query("DELETE FROM " .
            "rango_edad_comunidad WHERE " .
            "id_v_colectiva='$idvictima'");
            if (isset($valores['id_rango'])) {
                foreach ($valores['id_rango'] as $k => $v) {
                    $this->brango_edad_comunidad->_do->id_v_colectiva = 
                        $idvictima;
                    $this->brango_edad_comunidad->_do->id_rango = 
                        varEscapa($v, $db);
                    $this->brango_edad_comunidad->_do->insert();
                }
            }

            $result = $db->query("DELETE FROM " .
            "sector_social_comunidad WHERE " .
            "id_v_colectiva='$idvictima'");
            if (isset($valores['id_sector'])) {
                foreach ($valores['id_sector'] as $k => $v) {
                    $this->bsector_social_comunidad->_do->id_v_colectiva = 
                        $idvictima;
                    $this->bsector_social_comunidad->_do->id_sector = 
                        varEscapa($v, $db);
                    $this->bsector_social_comunidad->_do->insert();
                }
            }

            $result = $db->query("DELETE FROM " .
            "vinculo_estado_comunidad WHERE " .
            "id_v_colectiva='$idvictima'");
            if (isset($valores['id_vinculo_estado'])) {
                foreach ($valores['id_vinculo_estado'] as $k => $v) {
                    $this->bvinculo_estado_comunidad->_do->id_v_colectiva = 
                        $idvictima;
                    $this->bvinculo_estado_comunidad->_do->id_vinculo_estado = 
                        varEscapa($v, $db);
                    $this->bvinculo_estado_comunidad->_do->insert();
                }
            }

            $result = $db->query("DELETE FROM " .
            "filiacion_comunidad WHERE " .
            "id_v_colectiva='$idvictima'");
            if (isset($valores['id_filiacion'])) {
                foreach ($valores['id_filiacion'] as $k => $v) {
                    $this->bfiliacion_comunidad->_do->id_v_colectiva = 
                        $idvictima;
                    $this->bfiliacion_comunidad->_do->id_filiacion = 
                        varEscapa($v, $db);
                    $this->bfiliacion_comunidad->_do->insert();
                }
            }

            $result = $db->query("DELETE FROM " .
            "profesion_comunidad WHERE " .
            "id_v_colectiva='$idvictima'");
            if (isset($valores['id_profesion'])) {
                foreach ($valores['id_profesion'] as $k => $v) {
                    $this->bprofesion_comunidad->_do->id_v_colectiva = $idvictima;
                    $this->bprofesion_comunidad->_do->id_profesion = 
                        varEscapa($v, $db);
                    $this->bprofesion_comunidad->_do->insert();
                }
            }

            $result = $db->query("DELETE FROM " .
            "organizacion_comunidad WHERE " .
            "id_v_colectiva='$idvictima'");
            if (isset($valores['id_organizacion'])) {
                foreach ($valores['id_organizacion'] as $k => $v) {
                    $this->borganizacion_comunidad->_do->id_v_colectiva = 
                        $idvictima;
                    $this->borganizacion_comunidad->_do->id_organizacion = 
                        varEscapa($v, $db);
                    $this->borganizacion_comunidad->_do->insert();
                }
            }
        }
        funcionario_caso($_SESSION['basicos_id']);
        return  $ret;
    }


    /**
     * Prepara consulta SQL para buscar datos de este formulario.
     * Ver documentación completa en clase base.
     *
     * @param string &$w       Consulta que se construye
     * @param string &$t       Tablas
     * @param object &$dCaso   Objeto con caso
     * @param string &$subcons Subconsulta
     *                          
     * @return void  
     * @see    PagBaseSimple
     */
    function datosBusqueda(&$w, &$t, &$dCaso, &$subcons) 
    {
//        busor_muchos($w, $t, 'victima_colectiva_caso');

        $db = $dCaso->getDatabaseConnection();
        $duc=& DB_DataObject::factory('victima_colectiva_caso');
        $duc->id_caso = (int)($dCaso->id);
        if ($duc->find()>0) {
            $t .= ", victima_colectiva_caso, victima_colectiva";
            busand_sinap($w, "victima_colectiva_caso.id_caso", 
                "caso.id", "=", "AND");
            busand_sinap($w, "victima_colectiva_caso.id_v_colectiva", 
                "victima_colectiva.id", "=", "AND");
            $w3="";
            while ($duc->fetch()) {
                $w2="";
                
                foreach ($duc->fb_fieldsToRender as $c) {
                    if (isset($duc->$c) && $duc->$c != '') {
                        busand($db, $w2, "victima_colectiva_caso . $c", 
                            $duc->$c, "=", "AND");
                    }
                }
                $dv=& DB_DataObject::factory('victima_colectiva');
                $dv->get((int)$duc->id_v_colectiva);
                foreach ($dv->fb_fieldsToRender as $c) {
                    if (isset($dv->$c) && $dv->$c != '') {
                        busand($db, $w2, "victima_colectiva . $c", 
                            $dv->$c, "=", "AND");
                    }
                }

                foreach (array('categoria_comunidad',
                    'antecedente_comunidad', 'p_responsable_agrede_comunidad',
                    'rango_edad_comunidad', 'sector_social_comunidad',
                    'vinculo_estado_comunidad', 'filiacion_comunidad',
                    'profesion_comunidad', 'organizacion_comunidad')  as $st) {
                        busor_muchos($w2, $t, $st, "AND", 'id_v_colectiva',
                            (int)($duc->id_v_colectiva), 
                            'victima_colectiva.id');
                }

                if ($w2!="") {
                    $w3 = $w3=="" ? "($w2)" : "$w3 OR ($w2)";
                }
            }
            if ($w3!="") {
                $w .= " AND ($w3)";
            }    
        }
    }


}

?>
