protected function get_query_clauses($query_elements) { $query_clauses = array(); $tables = array(); // Clause from $query_clauses['from'] = ' from ' . $query_elements['table']; $tables[] = $query_elements['table']; foreach ($query_elements['join'] as $join) { $query_clauses['from'] .= ' join ' . $join['table']; $tables[] = $join['table']; $query_clauses['from'] .= ' on ' . $query_elements['table'] . '.' . $join['referencefield'] . ' = ' . $join['table'] . '.' . $join['externalfield']; if ($join['condition']) { $query_clauses['from'] .= ' and ' . $join['condition']; } } // Clause where $query_clauses['where'] = ''; foreach ($query_elements['elementfield'] as $elementfield) { if (!$query_clauses['where']) { $query_clauses['where'] .= ' where ('; } else { $query_clauses['where'] .= ' or'; } $query_clauses['where'] .= ' ' . $query_elements['table'] . '.' . $elementfield . ' = ' . $this->authority->get_num_object(); } if ($query_clauses['where']) { $query_clauses['where'] .= ')'; } foreach ($query_elements['condition'] as $condition) { if (!$query_clauses['where']) { $query_clauses['where'] .= ' where'; } else { $query_clauses['where'] .= ' and'; } $query_clauses['where'] .= ' ' . $condition; } if ($query_elements['getconcepts'] == 'true') { $concepts_ids = $this->authority->get_concepts_ids(); if (count($concepts_ids)) { if (!$query_clauses['where']) { $query_clauses['where'] .= ' where'; } else { $query_clauses['where'] .= ' and'; } $query_clauses['where'] .= ' ' . $query_elements['conceptfield'] . ' in (' . implode(',', $concepts_ids) . ')'; } } // Clause order $query_clauses['order'] = ''; if ($query_elements['order']) { // On commence par faire une jointure si nécessaire if ($query_elements['order']['table'] && !in_array($query_elements['order']['table'], $tables)) { $query_clauses['from'] .= ' join ' . $query_elements['order']['table']; $query_clauses['from'] .= ' on ' . $query_elements['table'] . '.' . $query_elements['order']['referencefield'] . ' = ' . $query_elements['order']['table'] . '.' . $query_elements['order']['externalfield']; } $query_clauses['order'] .= ' order by ' . ($query_elements['order']['table'] ? $query_elements['order']['table'] : $query_elements['table']) . '.' . $query_elements['order']['field']; } return $query_clauses; }