/**
  *
  * @param RP_Persona $persona
  * @param array $options
  * @return array
  */
 public function get_ancestors($persona, $options)
 {
     $uscore = $options['uscore'];
     $ancestors = array();
     $ancestors[1] = $persona;
     if (!empty($persona->father)) {
         $ancestors[2] = $this->get_persona($persona->father, $persona->batch_id, $uscore, $options);
     }
     if (!empty($persona->mother)) {
         $ancestors[3] = $this->get_persona($persona->mother, $persona->batch_id, $uscore, $options);
     }
     if (!empty($ancestors[2])) {
         if (!empty($ancestors[2]->father)) {
             $ancestors[4] = $this->get_persona($ancestors[2]->father, $persona->batch_id, $uscore, $options);
         }
         if (!empty($ancestors[2]->mother)) {
             $ancestors[5] = $this->get_persona($ancestors[2]->mother, $persona->batch_id, $uscore, $options);
         }
     }
     if (!empty($ancestors[3])) {
         if (!empty($ancestors[3]->father)) {
             $ancestors[6] = $this->get_persona($ancestors[3]->father, $persona->batch_id, $uscore, $options);
         }
         if (!empty($ancestors[3]->mother)) {
             $ancestors[7] = $this->get_persona($ancestors[3]->mother, $persona->batch_id, $uscore, $options);
         }
     }
     $isSOR = $options['is_system_of_record'] == '1' ? true : false;
     for ($idx = 1; $idx <= 7; $idx++) {
         if (!isset($ancestors[$idx]) || empty($ancestors[$idx])) {
             $ancestors[$idx] = RP_Persona_Helper::get_unknown($persona, false);
             if ($isSOR === true) {
                 // need to setup edit page logged in
             }
         }
         if (empty($ancestors[$idx]->page)) {
             $ancestors[$idx]->page = $ancestors[1]->page;
         }
     }
     return $ancestors;
 }
 /**
  * @todo Description of function getPersona
  * @param  $id
  * @param  $batchId
  * @return
  */
 public function get_persona($id, $batch_id)
 {
     $persona = null;
     if (!isset($id) || empty($id) || $id == '0') {
         $persona = RP_Persona_Helper::get_unknown();
     } else {
         if (isset(self::$_pcache[$batch_id]) && isset(self::$_pcache[$batch_id][$id])) {
             $persona =& self::$_pcache[$batch_id][$id];
         } else {
             $sql1 = "SELECT ri.id AS id, ri.batch_id AS batch_id," . "IFNULL(rio.privacy_code,'Def') AS privacy" . ",CONCAT_WS(' ', (trim(replace(rnp.personal_name,'/',' '))), NULLIF(rnp.suffix,'')) AS full_name" . ",rnp.prefix AS prefix" . ",rnp.surname AS surname" . ",rnp.given AS given" . ",rnp.nickname AS nickname" . ",rnp.surname_prefix AS surname_prefix" . ",rnp.suffix AS suffix" . ",ri.gender AS gender" . ",rf.spouse1 AS father" . ",rf.spouse2 AS mother" . ",rfc.fam_id AS famc" . ",ri.wp_page_id AS page" . " FROM rp_indi ri" . " LEFT OUTER JOIN rp_indi_option rio ON rio.indi_id = ri.id AND rio.indi_batch_id = ri.batch_id" . " JOIN rp_indi_name rip ON ri.id = rip.indi_id AND ri.batch_id = rip.indi_batch_id AND rip.seq_nbr = 1" . " JOIN rp_name_personal rnp ON rip.name_id = rnp.id" . " LEFT OUTER JOIN rp_fam_child rfc ON ri.id = rfc.child_id AND ri.batch_id = rfc.indi_batch_id" . " LEFT OUTER JOIN rp_fam rf ON rfc.fam_id = rf.id AND rfc.fam_batch_id = rf.batch_id" . " WHERE ri.id = ? AND ri.batch_id = ? " . " AND IFNULL(rio.privacy_code,'Def') != '" . RP_Persona_Helper::EXC . "'";
             $sql_query = new RP_Sql_Query($sql1, $this->prefix);
             $sql_query->set($id);
             $sql_query->set_number($batch_id);
             $persona = $this->get_row($sql_query);
             if (!isset($persona) || empty($persona)) {
                 $persona = RP_Persona_Helper::get_unknown();
             } else {
                 $rows = $this->get_birth_and_death_dates($batch_id, $id);
                 if (isset($rows[0])) {
                     if ($rows[0]['type'] == 'birth') {
                         $persona->birth_date = $rows[0]['date'];
                         $persona->birth_place = $rows[0]['place'];
                         if (isset($rows[1])) {
                             $persona->death_date = $rows[1]['date'];
                             $persona->death_place = $rows[1]['place'];
                         }
                     } else {
                         $persona->death_date = $rows[0]['date'];
                         $persona->death_place = $rows[0]['place'];
                         if (isset($rows[1])) {
                             $persona->birth_date = $rows[1]['date'];
                             $persona->birth_place = $rows[1]['place'];
                         }
                     }
                 }
             }
             if (!isset(self::$_pcache[$batch_id])) {
                 self::$_pcache[$batch_id] = array();
             }
             self::$_pcache[$batch_id][$id] = $persona;
             $persona =& self::$_pcache[$batch_id][$id];
         }
     }
     return $persona;
 }