<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */

if (!isset($GLOBALS['DIRFUENTES'])) { 
    die("Debe incluir confcol.php");
}
require $GLOBALS['DIRFUENTES']."DataInd.php";

/**
 * Extracts login, birthdate and names of individuals.  Based on TeacherQuery
 * and SecPeriod
 * @package sigue
 * @author Vladimir Támara 
 * @since 31-12-2003
 *@copyright Given to the public domain.  No warranties. http://structio.sourceforge.net/sigue
 */
class GroupQuery {
   /** 
   * @var xmlparser
   */
  var $parser;

  /** Year */
  var $year;

  /**
   * @var info information read
   */
  var $info;

 /** 
  * @param string $file name of the file to be parsed
  */
  function GroupQuery($file,$year) {
      $this->info=array();
      $this->parser = xml_parser_create("ISO-8859-1");
      $this->year=$year;

      xml_set_object($this->parser, &$this);
      xml_set_element_handler($this->parser, "tag_open", "tag_close");
      if (!($fp = fopen("$file", "r"))) {
	die("El archivo de grupo ".$file." no pudo ser leído");
      }
      while ($data = fread($fp, 4096)) {
          if (!xml_parse($this->parser, $data, feof($fp))) {
	  die(sprintf("XML error: %s en la línea %d, por favor revise ".$file,
		      xml_error_string(xml_get_error_code($this->parser)),
		      xml_get_current_line_number($this->parser)));
	  }
      }
      xml_parser_free($this->parser);
      fclose($fp);
    }

  /**
  *  Decide si un profesor trabajó en un año.
  */
  function existeProfesor($login,$año) {
  	$gp=new GroupQuery($GLOBALS['DIRCOL']."/grupo/".$año."/profesores.grp",$año);
	$p=$gp->values();
    foreach ($p as $k => $v) {
        $l=explode(":",$k);
        if ($l[0]==$login) {
            return true;
        }
    }
    return false;
  }

/**
  *  Decide si un estudiante está en un año.
  */
  function existeEstudiante($login, $grado, $año) {
  	if ($grado>=1 && $grado<=5) {
		$n="bprimaria";
	} 
    else if ($grado>=6 && $grado<=9) {
        $n="bsecundaria"; 
    } 
    else {
        $n="media"; 
    }
    $g="$n/$grado.grp";
  	
    $gp=GroupQuery($GLOBALS['DIRCOL']."/grupo/$año/$g",$año);
	$p=$gp->values();
	return in_array($login, $p);
  }


  /**
   * function that process the start of an element
   * @param $parser xml parser
   * @param $name name of the element
   * @param $attrs attributes of the element 
   * @access private 
   */
  function tag_open($parser, $name, $attrs)
    { 
      if (strcmp($name,'REFIND')==0) {
	$dataind = new DataInd($GLOBALS["DIRCOL"]."/planest/".$this->year."/".$attrs['ARCH']);
	$data=$dataind->values();
	if (!isset($data['login'])) {
		die("Falta dato login en ".$attrs['ARCH']);
	}
	$l=$data['login'];
	if (!isset($data['Nombres'])) {
		die("Falta dato Nombres en ".$attrs['ARCH']);
	}
	$n=$data['Nombres'];
	if (!isset($data['Apellidos'])) {
		die("Falta dato Apellidos en ".$attrs['ARCH']);
	}
	$a=$data['Apellidos'];
	if (!isset($data['FechaNacimiento'])) {
		die("Falta dato 'FechaNacimiento' en ".$attrs['ARCH']);
	}
	$b=$data['FechaNacimiento'];
	$this->info["$l:$n $a:".$attrs['ARCH'].":$b"]=$n." ".$a;
      }
    }
  
  /**
   * function that process the end of an element
   * @param $parser xml parser
   * @param $name name of the element
   * @access private 
   */
  function tag_close($parser, $name)
    {
    }
  
  /**
   * Function that prints the data of this class as HTML
   */
  function display () {
	foreach ($this->info as $login => $name) {
        	print "<tr><td>$login : $name\n";
	} 
  }

  /**
   * Returns data organized by constructor.
   */
  function values() 
    {
      return $this->info;
    }  
} ?>
