Пример #1
0
 /**
  * Extracts attribute contents FROM a parent tree object
  *
  * @param array  $tree an array containing an array FROM which the
  *                     object data should be extracted
  * @param string $ver  represents the version of the GEDCOM standard
  *                     data is being extracted from
  *
  * @return void
  *
  * @access public
  * @since Method available since Release 0.0.1
  */
 public function parse_tree_to_array($tree, $ver)
 {
     $facts = array();
     $keys = array_keys($this->_TYPES);
     foreach ($keys as $tag) {
         $off = 0;
         while (($i1 = parent::find_tag($tree, $tag, $off)) !== false) {
             $fact = new RP_Fact();
             $fact->ver = $ver;
             $fact->tag = $tag;
             $fact->descr = parent::parse_text($tree[$i1], $tag);
             //$tmp = $fact->TYPES;
             //$fact->Type = $tmp[$tag];
             if (isset($tree[$i1][1])) {
                 $fact->parse_tree_detail($tree[$i1][1], $ver);
             }
             $facts[] = $fact;
             $off = $i1 + 1;
         }
     }
     return $facts;
 }
 /**
  * Extracts attribute contents FROM a parent tree object
  *
  * @param array  $tree an array containing an array FROM which the
  *                     object data should be extracted
  * @param string $ver  represents the version of the GEDCOM standard
  *                     data is being extracted from
  *
  * @return void
  *
  * @access public
  * @since Method available since Release 0.0.1
  */
 public function parse_tree($tree, $ver)
 {
     $this->ver = $ver;
     $this->id = parent::parse_ref_id($tree[0], Rp_Tags::INDIVIDUAL);
     if (isset($tree[0][1])) {
         $sub2 = $tree[0][1];
         if (($i1 = parent::find_tag($sub2, Rp_Tags::RESTRICTION)) !== false) {
             $this->restriction = parent::parse_text($sub2[$i1], Rp_Tags::RESTRICTION);
         }
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::FULL, $off)) !== false) {
             $tmp = new RP_Personal_Name();
             $tmp->parse_tree(array($sub2[$i1]), $ver);
             $this->names[] = $tmp;
             $off = $i1 + 1;
         }
         if (($i1 = parent::find_tag($sub2, Rp_Tags::GENDER)) !== false) {
             $this->gender = parent::parse_text($sub2[$i1], Rp_Tags::GENDER);
         }
         $tmp = new RP_Event();
         $this->events = $tmp->parse_tree_to_array($sub2, $ver);
         $tmp = new RP_Fact();
         $this->attributes = $tmp->parse_tree_to_array($sub2, $ver);
         //TODO add support for LdsOrdinances
         //$this->LdsOrdinances = LdsOrdinance::parseTreeToArray($sub2, $ver);
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::CHILDFAMILY, $off)) !== false) {
             $tmp = new RP_Family_Link();
             $tmp->parse_tree(array($sub2[$i1]), $ver, Rp_Tags::CHILDFAMILY);
             $this->child_family_links[] = $tmp;
             $off = $i1 + 1;
         }
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::SPOUSEFAMILY, $off)) !== false) {
             $tmp = new RP_Family_Link();
             $tmp->parse_tree(array($sub2[$i1]), $ver, Rp_Tags::SPOUSEFAMILY);
             $this->spouse_family_links[] = $tmp;
             $off = $i1 + 1;
         }
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::SUBMITTER, $off)) !== false) {
             $this->submitter_links[] = parent::parse_ptr_id($sub2[$i1], Rp_Tags::SUBMITTER);
             $off = $i1 + 1;
         }
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::ASSOCIATION, $off)) !== false) {
             $tmp = new RP_Association();
             $tmp->parse_tree(array($sub2[$i1]), $ver);
             $this->associations[] = $tmp;
             $off = $i1 + 1;
         }
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::ALIAS, $off)) !== false) {
             $this->aliases[] = parent::parse_ptr_id($sub2[$i1], Rp_Tags::ALIAS);
             $off = $i1 + 1;
         }
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::ANCI, $off)) !== false) {
             $this->ancestor_interests[] = parent::parse_ptr_id($sub2[$i1], Rp_Tags::ANCI);
             $off = $i1 + 1;
         }
         $off = 0;
         while (($i1 = parent::find_tag($sub2, Rp_Tags::DESI, $off)) !== false) {
             $this->descendant_interests[] = parent::parse_ptr_id($sub2[$i1], Rp_Tags::DESI);
             $off = $i1 + 1;
         }
         if (($i1 = parent::find_tag($sub2, Rp_Tags::PERMFILE)) !== false) {
             $this->perm_rec_file_nbr = parent::parse_text($sub2[$i1], Rp_Tags::PERMFILE);
         }
         if (($i1 = parent::find_tag($sub2, Rp_Tags::ANCFILE)) !== false) {
             $this->anc_file_nbr = parent::parse_text($sub2[$i1], Rp_Tags::ANCFILE);
         }
         $this->common_parse_tree($sub2, $ver);
     }
 }