private function getMapItems() { // check for overriding options $this->checkOptions(); // get info about database setting $maxInfo = $this->getMaxInfo(); switch ($this->params['selection']) { case "person": $query = self::getQueryPerson(); break; case "tree": // continue // continue case "location": // continue // continue default: $query = self::getQueryTree(); break; } $this->_db->setQuery($query); $mapItems = $this->_db->loadObjectList(); // prepare information for interactive map if ($this->params['service'] == 'interactivemap') { $menus = JoaktreeHelper::getMenus('joaktree'); $linkBase = 'index.php?option=com_joaktree' . '&view=joaktree' . '&tech=' . JoaktreeHelper::getTechnology() . '&Itemid=' . $menus[$this->params['tree_id']]; $robot = JoaktreeHelper::getTechnology() == 'a' ? '' : 'rel="noindex, nofollow"'; for ($i = 0; $i < count($mapItems); $i++) { $indMore = strlen($mapItems[$i]->information) > $maxInfo; $tmps1 = explode('|', $mapItems[$i]->information); if ($indMore) { // remove the last element array_pop($tmps1); } $info = array(); foreach ($tmps1 as $tmp1) { $tmps2 = explode('#', $tmp1); $name = count($tmps2) ? htmlspecialchars(array_shift($tmps2), ENT_QUOTES) : '....'; $id = count($tmps2) ? array_shift($tmps2) : null; $event = count($tmps2) ? JText::_(array_shift($tmps2)) : ''; //$dateRaw = (count($tmps2)) ? array_shift($tmps2) : null); $date = count($tmps2) ? ' ' . JoaktreeHelper::displayDate(array_shift($tmps2)) : ''; $def_tree = count($tmps2) ? array_shift($tmps2) : null; if ($id && ($this->params['selection'] == 'tree' || $this->params['selection'] == 'location')) { $href = JRoute::_($linkBase . '&treeId=' . $this->params['tree_id'] . '&personId=' . $this->params['app_id'] . '!' . $id); $info[] = '<a href="' . $href . '" target="_top" ' . $robot . ' >' . $name . '</a> (' . $event . $date . ')'; } else { if ($id && $this->params['selection'] == 'person' && $def_tree) { $href = JRoute::_($linkBase . '&treeId=' . (int) $def_tree . '&personId=' . $this->params['app_id'] . '!' . $id); $info[] = '<a href="' . $href . '" target="_top" ' . $robot . ' >' . $name . '</a> (' . $event . $date . ')'; } else { $info[] = $name . ' (' . $event . $date . ')'; } } } if ($indMore) { // add text $info[] = JText::_('JT_ANDMORE'); } $mapItems[$i]->information = implode('<br />', $info); unset($info); } } return $mapItems; }
$html .= ' </a>'; } } else { $html .= '<span class="jt-empty-icon"> </span>'; } $html .= '</span>'; // end of jt-iconlabel // show actual value $html .= '<span class="jt-high-row jt-valuelabel">'; if ($event->value != null) { $html .= $event->value . ' '; } if ($event->value != null and ($event->eventDate != null or $event->location != null)) { $html .= '( '; } $html .= JoaktreeHelper::displayDate($event->eventDate) . ' '; if ($event->location != null) { $html .= JText::_('JT_IN') . ' ' . $event->location . ' '; } if ($event->value != null and ($event->eventDate != null or $event->location != null)) { $html .= ') '; } $html .= '</span>'; // end of jt-valuelabel } $html .= '</div>'; if ($event->indNote == true) { if ($this->lists['technology'] != 'b') { if ($this->lists['technology'] == 'j' or $event->indAltNote == true) { $html .= '<div id="' . $njtid2 . '" class="jt-hide" style="position: absolute; z-index: 50;">'; } else {
private function getRelations($query, $type = 'basic') { $relations = array(); $this->_db->setQuery($query); $relations_id = $this->_db->loadAssocList(); // loop through result and fill tmp-array foreach ($relations_id as $i => $relation_id) { // retrieve person $id['app_id'] = $this->app_id; $id['person_id'] = $relation_id['pid']; $id['tree_id'] = $this->tree_id; //$tmp = new joaktreeperson($id); $tmp = new Person($id, $type); if (empty($relation_id['orderNr']) || $relation_id['secondParent_id'] != '0') { $key = $i; } else { $key = $relation_id['orderNr']; } // check whether this person can be displayed if ($tmp->indNameDisplay) { $relations[$key] = $tmp; $relations[$key]->orderNr = $relation_id['orderNr']; $relations[$key]->birthDate = JoaktreeHelper::displayDate($relation_id['birthDate']); $relations[$key]->deathDate = JoaktreeHelper::displayDate($relation_id['deathDate']); $relations[$key]->secondParent_id = $relation_id['secondParent_id']; $relations[$key]->family_id = $relation_id['family_id']; $relations[$key]->relationtype = !empty($relation_id['subtype']) && $relation_id['subtype'] != 'natural' ? $relation_id['subtype'] : null; } } return $relations; }
public function getList($moduleId) { $moduleId = (int) $moduleId; $params = $this->getModuleParams($moduleId); $periodType = $params->get('periodType'); $limit = (int) $params->get('searchlimit', 10); $userAccessLevels = JoaktreeHelper::getUserAccessLevels(); $personStatus = $params->get('personStatus', 0); $showTitle = $params->get('showHeading', 1); $today = getdate(); if ($params->get('freeChoice')) { // only when user is allowed to enter a day/month we are checking these values. $day = JoaktreeHelper::getDay(); $month = JoaktreeHelper::getMonth(); } // for titles we want to know if we have day and/or months from the front end $indUI = !isset($day) && !isset($month) || $day == 0 && $month == 0 ? false : true; // if day and/or month is not set, we use today's info $day = !isset($day) || $day == 0 ? $today['mday'] : $day; $month = !isset($month) || $month == 0 ? $today['mon'] : $month; if ($showTitle == 1) { if (!$indUI) { // nothing from front end -> use standard titles switch ($periodType) { case 2: // continue // continue case 3: $this->_title = JText::_('JTMOD_TMYA_HEADING_THISMONTH'); break; case 4: // continue // continue case 5: $this->_title = JText::_('JTMOD_TMYA_HEADING_THISWEEK'); break; case 0: // continue // continue case 1: // continue // continue default: $this->_title = JText::_('JTMOD_TMYA_HEADING_TODAY'); break; } } else { // use information from front end switch ($periodType) { case 2: // continue // continue case 3: $this->_title = JText::_($this->getMonthName($month)); break; case 4: // continue // continue case 5: // continue // continue case 0: // continue // continue case 1: // continue // continue default: $this->_title = $day . ' ' . JText::_($this->getMonthName($month)); break; } } } else { $this->_title = null; } switch ($periodType) { case 2: // continue // continue case 3: $this->_buttonText = JText::_('JTMOD_TMYA_HEADING_THISMONTH'); break; case 4: // continue // continue case 5: $this->_buttonText = JText::_('JTMOD_TMYA_HEADING_THISWEEK'); break; case 0: // continue // continue case 1: // continue // continue default: $this->_buttonText = JText::_('JTMOD_TMYA_HEADING_TODAY'); break; } $result = array(); $displayAccess = JoaktreeHelper::getDisplayAccess(); $userAccess = JoaktreeHelper::getUserAccess(); $where = $this->_buildContentWhere($day, $month, $today['year']); $order = $this->_buildOrderBy(); // retrieve person events $query = '( SELECT CONCAT_WS(' . $this->_db->quote(' ') . ' ' . ' , jpn.firstName ' . ' , jpn.namePreposition ' . ' , jpn.familyName ' . ' ) AS name ' . ', jet.app_id AS appId ' . ', jet.person_id AS personId ' . ', jan.default_tree_id AS treeId ' . ', IF ( ( jet.code = ' . $this->_db->Quote('EVEN') . ' ) ' . ' , IFNULL( jet.type, jet.code ) ' . ' , jet.code ' . ' ) AS code ' . ', jet.eventdate ' . ', DATE_FORMAT(STR_TO_DATE(eventdate, "%d %M %Y"), "%m%d") AS sortingdate ' . ', SUBSTR( RTRIM(jet.eventdate), -4 ) AS eventyear ' . ', jpn.familyName AS familyName ' . 'FROM #__joaktree_person_events jet ' . 'JOIN #__joaktree_persons jpn ' . 'ON ( jpn.app_id = jet.app_id ' . ' AND jpn.id = jet.person_id ' . ' ) ' . 'JOIN #__joaktree_admin_persons jan ' . 'ON ( jan.app_id = jpn.app_id ' . ' AND jan.id = jpn.id ' . ' AND jan.published = true ' . ($personStatus == 0 ? 'AND jan.living = false ' : ' ') . ($personStatus == 1 ? 'AND jan.living = true ' : ' ') . ' AND ( (jan.living = false AND ' . $displayAccess['NAMEname']->notLiving . ' = 2 ) ' . ' OR (jan.living = true AND ' . $displayAccess['NAMEname']->living . ' = 2 ) ' . ' ) ' . ' ) ' . 'JOIN #__joaktree_trees jte ' . 'ON ( jte.app_id = jan.app_id ' . ' AND jte.id = jan.default_tree_id ' . ' AND jte.published = true ' . ' AND jte.access IN ' . $userAccessLevels . ' ' . ' ) ' . 'JOIN #__joaktree_display_settings jds ' . 'ON ( jds.code = jet.code ' . ' AND jds.level = ' . $this->_db->quote('person') . ' ' . ' AND jds.published = true ' . ' AND ( (jan.living = false AND jds.access IN ' . $userAccessLevels . ') ' . ' OR (jan.living = true AND jds.accessLiving IN ' . $userAccessLevels . ') ' . ' ) ' . ' ) ' . $where . ' ) ' . 'UNION ' . '( SELECT CONCAT_WS(' . $this->_db->quote(' + ') . ' ' . ' , CONCAT_WS(' . $this->_db->quote(' ') . ' ' . ' , jpn1.firstName ' . ' , jpn1.namePreposition ' . ' , jpn1.familyName ' . ' ) ' . ' , CONCAT_WS(' . $this->_db->quote(' ') . ' ' . ' , jpn2.firstName ' . ' , jpn2.namePreposition ' . ' , jpn2.familyName ' . ' ) ' . ' ) AS name ' . ', jet.app_id AS appId ' . ', jet.person_id_1 AS personId ' . ', jan1.default_tree_id AS treeId ' . ', IF ( ( jet.code = ' . $this->_db->Quote('EVEN') . ' ) ' . ' , IFNULL( jet.type, jet.code ) ' . ' , jet.code ' . ' ) AS code ' . ', jet.eventdate ' . ', DATE_FORMAT(STR_TO_DATE(eventdate, "%d %M %Y"), "%m%d") AS sortingdate ' . ', SUBSTR( RTRIM(jet.eventdate), -4 ) AS eventyear ' . ', jpn1.familyName AS familyName ' . 'FROM #__joaktree_relation_events jet ' . 'JOIN #__joaktree_persons jpn1 ' . 'ON ( jpn1.app_id = jet.app_id ' . ' AND jpn1.id = jet.person_id_1 ' . ' ) ' . 'JOIN #__joaktree_admin_persons jan1 ' . 'ON ( jan1.app_id = jpn1.app_id ' . ' AND jan1.id = jpn1.id ' . ' AND jan1.published = true ' . ($personStatus == 0 ? 'AND jan1.living = false ' : ' ') . ($personStatus == 1 ? 'AND jan1.living = true ' : ' ') . ' AND ( (jan1.living = false AND ' . $displayAccess['NAMEname']->notLiving . ' = 2 ) ' . ' OR (jan1.living = true AND ' . $displayAccess['NAMEname']->living . ' = 2 ) ' . ' ) ' . ' ) ' . 'JOIN #__joaktree_trees jte1 ' . 'ON ( jte1.app_id = jan1.app_id ' . ' AND jte1.id = jan1.default_tree_id ' . ' AND jte1.published = true ' . ' AND jte1.access IN ' . $userAccessLevels . ' ' . ' ) ' . 'JOIN #__joaktree_persons jpn2 ' . 'ON ( jpn2.app_id = jet.app_id ' . ' AND jpn2.id = jet.person_id_2 ' . ' ) ' . 'JOIN #__joaktree_admin_persons jan2 ' . 'ON ( jan2.app_id = jpn2.app_id ' . ' AND jan2.id = jpn2.id ' . ' AND jan2.published = true ' . ($personStatus == 0 ? 'AND jan2.living = false ' : ' ') . ($personStatus == 1 ? 'AND jan2.living = true ' : ' ') . ' AND ( (jan2.living = false AND ' . $displayAccess['NAMEname']->notLiving . ' = 2 ) ' . ' OR (jan2.living = true AND ' . $displayAccess['NAMEname']->living . ' = 2 ) ' . ' ) ' . ' ) ' . 'JOIN #__joaktree_trees jte2 ' . 'ON ( jte2.app_id = jan2.app_id ' . ' AND jte2.id = jan2.default_tree_id ' . ' AND jte2.published = true ' . ' AND jte2.access IN ' . $userAccessLevels . ' ' . ' ) ' . 'JOIN #__joaktree_display_settings jds ' . 'ON ( jds.code = jet.code ' . ' AND jds.level = ' . $this->_db->quote('relation') . ' ' . ' AND jds.published = true ' . ' AND ( ( jan1.living = false ' . ' AND jan2.living = false ' . ' AND jds.access IN ' . $userAccessLevels . ' ' . ' ) ' . ' OR ( ( jan1.living = true ' . ' OR jan2.living = true ' . ' ) ' . ' AND jds.accessLiving IN ' . $userAccessLevels . ' ' . ' ) ' . ' ) ' . ' ) ' . $where . ' ) ' . $order . ' '; $this->_db->setQuery($query, 0, $limit); $temp = $this->_db->loadObjectList(); if (count($temp)) { // get menuId & technology $menus = JoaktreeHelper::getMenus('joaktree'); $technology = JoaktreeHelper::getTechnology(); $linkBase = 'index.php?option=com_joaktree&view=joaktree&tech=' . $technology . ''; $robot = $technology == 'a' ? '' : 'rel="noindex, nofollow"'; foreach ($temp as $row) { $menuItemId = $menus[$row->treeId]; $row->route = JRoute::_($linkBase . '&Itemid=' . $menuItemId . '&treeId=' . $row->treeId . '&personId=' . $row->appId . '!' . $row->personId); $row->robot = $robot; $row->yearsago = $today['year'] - (int) $row->eventyear; $tmp = ucwords(strtolower($row->eventdate)); $row->eventday = substr(JoaktreeHelper::convertDateTime($tmp), 0, -4); $row->eventdate = JoaktreeHelper::displayDate($row->eventdate); $row->code = JText::_($row->code); $result[] = $row; } } unset($temp); return $result; }
function onContentSearch($text, $phrase = '', $ordering = '', $areas = null) { $db =& JFactory::getDBO(); $linkBase = 'index.php?option=com_joaktree&view=joaktree'; //If the array is not correct, return it: if (is_array($areas)) { if (!array_intersect($areas, array_keys($this->onContentSearchAreas()))) { return array(); } } //And define the parameters. For example like this.. $limit = $this->params->def('search_limit', 50); if (is_array($areas)) { // check whether names are searched $names = in_array('joaktreeName', $areas) ? 1 : 0; $patronym = in_array('joaktreeName', $areas) ? $this->params->def('search_patronyms', 0) : 0; // check whether notes are searched $notes = in_array('joaktreeNote', $areas) ? $this->params->def('search_notes', 0) : 0; } else { $names = 1; $notes = $this->params->def('search_notes', 0); $patronym = $this->params->def('search_patronyms', 0); } $linkType = $this->params->def('link_option', 1); //Use the function trim to delete spaces in front of or at the back of the searching terms $text = trim($text); //Return Array when nothing was filled in if ($text == '') { return array(); } //replace joaktree $searchJoaktree = JText::_('JTSRCH_GENEALOGY'); $searchNotes = JText::_('JTSRCH_NOTES'); // user access $userAccessLevels = JoaktreeHelper::getUserAccessLevels(); $displayAccess = JoaktreeHelper::getDisplayAccess(); //After this, you have to add the database part. $wheres = array(); switch ($phrase) { //search exact case 'exact': $text = $db->Quote('%' . $db->escape($text, true) . '%', false); // search in names table $whereNames = array(); $whereNames[] = 'LOWER(CONCAT_WS(' . $db->Quote(' ') . ',jpn.firstName,jpn.namePreposition,jpn.familyName)) LIKE ' . $text; $whereNames[] = 'LOWER(CONCAT_WS(' . $db->Quote(' ') . ',jpn.firstName,jpn.patronym,jpn.namePreposition,jpn.familyName)) LIKE ' . $text; $whereName = '(' . implode(') OR (', $whereNames) . ')'; // search in person-notes table $wherePerNote = 'LOWER(jpe.value) LIKE ' . $text . ' OR LOWER(jne.value) LIKE ' . $text; // search in person-notes table $whereRelNote = 'LOWER(jre.value) LIKE ' . $text . ' OR LOWER(jne.value) LIKE ' . $text; break; //search all or any //search all or any case 'all': case 'any': //set default //set default default: $words = explode(' ', $text); $whereNames = array(); $whereNotes = array(); $wherePerNotes = array(); $whereRelNotes = array(); foreach ($words as $word) { $word = $db->Quote('%' . $db->escape($word, true) . '%', false); if ($patronym == 1) { $whereNames[] = 'LOWER(jpn.firstName) LIKE ' . $word . 'OR LOWER(jpn.patronym) LIKE ' . $word . 'OR LOWER(jpn.namePreposition) LIKE ' . $word . 'OR LOWER(jpn.familyName) LIKE ' . $word; } else { $whereNames[] = 'LOWER(jpn.firstName) LIKE ' . $word . 'OR LOWER(jpn.namePreposition) LIKE ' . $word . 'OR LOWER(jpn.familyName) LIKE ' . $word; } $wherePerNotes[] = 'LOWER(jpe.value) LIKE ' . $word . ' OR LOWER(jne.value) LIKE ' . $word; $whereRelNotes[] = 'LOWER(jre.value) LIKE ' . $word . ' OR LOWER(jne.value) LIKE ' . $word; } $whereName = '(' . implode($phrase == 'all' ? ') AND (' : ') OR (', $whereNames) . ')'; $wherePerNote = '(' . implode($phrase == 'all' ? ') AND (' : ') OR (', $wherePerNotes) . ')'; $whereRelNote = '(' . implode($phrase == 'all' ? ') AND (' : ') OR (', $whereRelNotes) . ')'; break; } //ordering of the results switch ($ordering) { //alphabetic, ascending case 'alpha': $order = 'jpn.familyName ASC, jpn.firstName ASC'; break; //oldest first //oldest first case 'oldest': //popular first //popular first case 'popular': //newest first //newest first case 'newest': //default setting: alphabetic, ascending //default setting: alphabetic, ascending default: $order = 'jpn.familyName ASC, jpn.firstName ASC'; } //the database query; $query = ''; if ($names == 1 && $notes == 1) { $query .= '( '; } if ($names == 1) { $query .= 'SELECT CONCAT_WS(' . $db->Quote(' ') . ' ' . ' , jpn.firstName ' . ($patronym == 1 ? ', jpn.patronym ' : '') . ' , jpn.namePreposition ' . ' , jpn.familyName ' . ' ) AS title ' . ', CONCAT_WS( " / " ' . ' , ' . $db->Quote($searchJoaktree) . ' ' . ' , jte.name ' . ' ) AS section ' . ', jpn.lastUpdateTimeStamp AS created ' . ', "' . $linkType . '" AS browsernav ' . ', jpn.app_id AS app_id ' . ', jpn.id AS person_id ' . ', jte.id AS tree_id ' . ', IF ( (jan.living = true AND ' . $displayAccess['BIRTperson']->living . ' = 1) ' . ' , ' . $db->Quote(JText::_('JTSRCH_ALTERNATIVE')) . ' ' . ' , birth.eventDate ' . ' ) AS birthDate ' . ', IF ( (jan.living = true AND ' . $displayAccess['DEATperson']->living . ' = 1) ' . ' , ' . $db->Quote(JText::_('JTSRCH_ALTERNATIVE')) . ' ' . ' , death.eventDate ' . ' ) AS deathDate ' . ', NULL AS value ' . 'FROM #__joaktree_persons AS jpn ' . 'JOIN #__joaktree_admin_persons AS jan ' . 'ON ( jan.app_id = jpn.app_id ' . ' AND jan.id = jpn.id ' . ' AND jan.published = true ' . ' AND ( (jan.living = false AND ' . $displayAccess['NAMEname']->notLiving . ' = 2 ) ' . ' OR (jan.living = true AND ' . $displayAccess['NAMEname']->living . ' = 2 ) ' . ' ) ' . ' ) ' . 'LEFT JOIN #__joaktree_trees AS jte ' . 'ON ( jte.app_id = jan.app_id ' . ' AND jte.id = jan.default_tree_id ' . ' AND jte.published = true ' . ' AND jte.access IN ' . $userAccessLevels . ' ) ' . 'LEFT JOIN #__joaktree_person_events birth ' . 'ON ( birth.app_id = jpn.app_id ' . ' AND birth.person_id = jpn.id ' . ' AND birth.code = ' . $db->Quote('BIRT') . ' ' . ' AND ( (jan.living = false AND ' . $displayAccess['BIRTperson']->notLiving . ' > 0 ) ' . ' OR (jan.living = true AND ' . $displayAccess['BIRTperson']->living . ' > 0 ) ' . ' ) ' . ' ) ' . 'LEFT JOIN #__joaktree_person_events death ' . 'ON ( death.app_id = jpn.app_id ' . ' AND death.person_id = jpn.id ' . ' AND death.code = ' . $db->Quote('DEAT') . ' ' . ' AND ( (jan.living = false AND ' . $displayAccess['DEATperson']->notLiving . ' > 0 ) ' . ' OR (jan.living = true AND ' . $displayAccess['DEATperson']->living . ' > 0 ) ' . ' ) ' . ' ) ' . 'WHERE ( ' . $whereName . ' ) ' . ' '; } if ($names == 1 && $notes == 1) { $query .= ') UNION ( '; } if ($notes == 1) { // person notes $query .= 'SELECT CONCAT_WS(' . $db->Quote(' ') . ' ' . ' , jpn.firstName ' . ($patronym == 1 ? ', jpn.patronym ' : '') . ' , jpn.namePreposition ' . ' , jpn.familyName ' . ' ) AS title ' . ', CONCAT_WS( " / " ' . ' , ' . $db->Quote($searchJoaktree) . ' ' . ' , jte.name ' . ' , CONCAT_WS(' . $db->Quote(' ') . ' ' . ' , jpn.firstName ' . ($patronym == 1 ? ', jpn.patronym ' : '') . ' , jpn.namePreposition ' . ' , jpn.familyName ' . ' ) ' . ' , ' . $db->Quote($searchNotes) . ' ' . ' ) AS section ' . ', jpn.lastUpdateTimeStamp AS created ' . ', "' . $linkType . '" AS browsernav ' . ', jpn.app_id AS app_id ' . ', jpn.id AS person_id ' . ', jte.id AS tree_id ' . ', NULL AS birthDate ' . ', NULL AS deathDate ' . ', IF( jne.value IS NOT NULL ' . ' , jne.value ' . ' , jpe.value ' . ' ) AS value ' . 'FROM #__joaktree_person_notes AS jpe ' . 'JOIN #__joaktree_persons AS jpn ' . 'ON ( jpn.app_id = jpe.app_id ' . ' AND jpn.id = jpe.person_id ' . ' ) ' . 'JOIN #__joaktree_admin_persons AS jan ' . 'ON ( jan.app_id = jpn.app_id ' . ' AND jan.id = jpn.id ' . ' AND jan.published = true ' . ' AND ( ( jan.living = false ' . ' AND ' . $displayAccess['NAMEname']->notLiving . ' = 2 ' . ' AND ' . $displayAccess['NOTEperson']->notLiving . ' = 2 ' . ' ) ' . ' OR ( jan.living = true ' . ' AND ' . $displayAccess['NAMEname']->living . ' = 2 ' . ' AND ' . $displayAccess['NOTEperson']->living . ' = 2 ' . ' ) ' . ' ) ' . ' ) ' . 'JOIN #__joaktree_trees AS jte ' . 'ON ( jte.app_id = jan.app_id ' . ' AND jte.id = jan.default_tree_id ' . ' AND jte.published = true ' . ' AND jte.access IN ' . $userAccessLevels . ' ) ' . 'LEFT JOIN #__joaktree_notes AS jne ' . 'ON ( jne.app_id = jpe.app_id ' . ' AND jne.id = jpe.note_id ' . ' ) ' . 'WHERE ( ' . $wherePerNote . ' ) '; } // Order by name if ($names == 1 && $notes == 1) { $query .= ') '; } $query .= 'ORDER BY title '; //. $order; //Set query $db->setQuery($query, 0, $limit); $rows = $db->loadObjectList(); $menuJoaktree = JoaktreeHelper::getMenus('joaktree'); $menu =& JSite::getMenu(); $menuActive =& $menu->getActive(); $menuActId = isset($menuActive) ? $menuActive->id : null; foreach ($rows as $key => $row) { $tmp = ''; //The 'output' of the displayed link if (!empty($rows[$key]->tree_id)) { $rows[$key]->href = JRoute::_($linkBase . '&Itemid=' . $menuJoaktree[$rows[$key]->tree_id] . '&treeId=' . $rows[$key]->tree_id . '&personId=' . $rows[$key]->app_id . '!' . $rows[$key]->person_id); } else { // look for first child $query = 'SELECT jrn.app_id AS app_id ' . ', jrn.person_id_1 AS person_id ' . ', jte.id AS tree_id ' . ', jrn.type AS relation ' . 'FROM #__joaktree_relations AS jrn ' . 'JOIN #__joaktree_admin_persons AS jan ' . 'ON ( jan.app_id = jrn.app_id ' . ' AND jan.id = jrn.person_id_1 ' . ' AND jan.published = true ' . ' AND ( ( jan.living = false ' . ' AND ' . $displayAccess['NAMEname']->notLiving . ' = 2 ' . ' ) ' . ' OR ( jan.living = true ' . ' AND ' . $displayAccess['NAMEname']->living . ' = 2 ' . ' ) ' . ' ) ' . ' ) ' . 'JOIN #__joaktree_trees AS jte ' . 'ON ( jte.app_id = jan.app_id ' . ' AND jte.id = jan.default_tree_id ' . ' AND jte.published = true ' . ' AND jte.access IN ' . $userAccessLevels . ' ) ' . 'WHERE jrn.app_id = ' . $rows[$key]->app_id . ' ' . 'AND jrn.person_id_2 = ' . $db->Quote($rows[$key]->person_id) . ' ' . 'AND jrn.orderNumber_2 = 1 '; //Set query $db->setQuery($query); $child = $db->loadObject(); if ($child) { $rows[$key]->href = JRoute::_($linkBase . '&Itemid=' . (!empty($child->tree_id) ? $menuJoaktree[$child->tree_id] : $menuActId) . '&treeId=' . (!empty($child->tree_id) ? $child->tree_id : '') . '&personId=' . $child->app_id . '!' . $child->person_id); } else { // situation that the child is still living ... $rows[$key]->href = '#'; } } if (!empty($rows[$key]->birthDate)) { $tmp .= JText::_('JTSRCH_BORN') . ': '; $tmp .= JoaktreeHelper::displayDate($rows[$key]->birthDate) . '; '; } if (!empty($rows[$key]->deathDate)) { $tmp .= JText::_('JTSRCH_DIED') . ': '; $tmp .= JoaktreeHelper::displayDate($rows[$key]->deathDate) . '; '; } if (!empty($rows[$key]->value)) { $tmp .= $rows[$key]->value; } $rows[$key]->text = $tmp; } return $rows; }