/** * * @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; }