/** * Returns an SQL fragment needed to connect a context entity table to its * CM custom fields data in the CM system * * @param string $contextlevel Shortname of the context level we are looking for fields * related to * @param array $fieldids List of ids of field records we are displaying * @param string $instancefield Database field representing the context id * @return string The appropriate SQL fragment */ function get_custom_field_sql($fieldids, $instancefields) { global $CURMAN; $contexts = $CURMAN->db->get_records_list('crlm_field_contextlevel', 'fieldid', implode(',', $fieldids), 'contextlevel'); $levels = context_level_base::get_all_context_levels(); $contextlevel = ''; $fragment = array(); if (!empty($contexts)) { //add a join for each profile field foreach ($contexts as $context) { if ($contextlevel != $context->contextlevel) { $contextlevel = $context->contextlevel; $contextname = $levels[$contextlevel]->get_component_string('', ''); $instancefield = $instancefields[$contextname]; //have one ot more profile field we're joining, so join the context table at the top level $context_level = context_level_base::get_custom_context_level($contextlevel, 'block_curr_admin'); $fragment[] .= " LEFT JOIN {$CURMAN->db->prefix_table('context')} {$contextname}context\n ON {$instancefield} = {$contextname}context.instanceid\n AND {$contextname}context.contextlevel = {$contextlevel}"; } $field = new field($context->fieldid); $identifier = "customfielddata_{$context->fieldid}"; $fragment[] .= " LEFT JOIN {$CURMAN->db->prefix_table($field->data_table())} {$identifier}" . " ON {$contextname}context.id = {$identifier}.contextid" . " AND {$identifier}.fieldid = {$context->fieldid}"; } } return implode("\n", $fragment); }