/** * returns an array containing the categories and the fields ordered by category and field order */ function profile_manager_get_categorized_fields($user = null, $edit = false, $register = false, $profile_type_limit = false, $profile_type_guid = false) { $result = array(); $profile_type = null; if ($register == true) { // failsafe for edit $edit = true; } if (!empty($user) && $user instanceof ElggUser) { $user_metadata = profile_manager_get_user_profile_data($user); $profile_type_guid = profile_manager_get_user_profile_data_value($user_metadata, "custom_profile_type"); if (!empty($profile_type_guid)) { $profile_type = get_entity($profile_type_guid); // check if profile type is a REAL profile type if (!empty($profile_type) && $profile_type instanceof ProfileManagerCustomProfileType) { if ($profile_type->getSubtype() != CUSTOM_PROFILE_FIELDS_PROFILE_TYPE_SUBTYPE) { $profile_type = null; } } } } elseif (!empty($profile_type_guid)) { $profile_type = get_entity($profile_type_guid); } $result["categories"] = array(); $result["categories"][0] = array(); $result["fields"] = array(); $ordered_cats = array(); $options = array("type" => "object", "subtype" => CUSTOM_PROFILE_FIELDS_CATEGORY_SUBTYPE, "limit" => false, "owner_guid" => elgg_get_config("site_guid"), "site_guid" => elgg_get_config("site_guid")); // get ordered categories if ($cats = elgg_get_entities($options)) { foreach ($cats as $cat) { $ordered_cats[$cat->order] = $cat; } ksort($ordered_cats); } // get filtered categories $filtered_ordered_cats = array(); // default category at index 0 $filtered_ordered_cats[0] = array(); if (!empty($ordered_cats)) { foreach ($ordered_cats as $key => $cat) { if (!$edit || $profile_type_limit) { $options = array("type" => "object", "subtype" => CUSTOM_PROFILE_FIELDS_PROFILE_TYPE_SUBTYPE, "count" => true, "owner_guid" => $cat->getOwnerGUID(), "site_guid" => $cat->site_guid, "relationship" => CUSTOM_PROFILE_FIELDS_PROFILE_TYPE_CATEGORY_RELATIONSHIP, "relationship_guid" => $cat->getGUID(), "inverse_relationship" => true); $rel_count = elgg_get_entities_from_relationship($options); if ($rel_count == 0) { $filtered_ordered_cats[$cat->guid] = array(); $result["categories"][$cat->guid] = $cat; } elseif (!empty($profile_type) && check_entity_relationship($profile_type->guid, CUSTOM_PROFILE_FIELDS_PROFILE_TYPE_CATEGORY_RELATIONSHIP, $cat->guid)) { $filtered_ordered_cats[$cat->guid] = array(); $result["categories"][$cat->guid] = $cat; } } else { $filtered_ordered_cats[$cat->guid] = array(); $result["categories"][$cat->guid] = $cat; } } } $options = array("type" => "object", "subtype" => CUSTOM_PROFILE_FIELDS_PROFILE_SUBTYPE, "limit" => false, "owner_guid" => elgg_get_config("site_guid"), "site_guid" => elgg_get_config("site_guid")); // adding fields to categories if ($fields = elgg_get_entities($options)) { foreach ($fields as $field) { if (!($cat_guid = $field->category_guid)) { $cat_guid = 0; // 0 is default } $admin_only = $field->admin_only; if ($admin_only != "yes" || elgg_is_admin_logged_in()) { if ($edit) { if (!$register || $field->show_on_register == "yes") { $filtered_ordered_cats[$cat_guid][$field->order] = $field; } } else { // only add if value exists $metadata_name = $field->metadata_name; $user_value = profile_manager_get_user_profile_data_value($user_metadata, $metadata_name); if (!empty($user_value) || $user_value === 0) { $filtered_ordered_cats[$cat_guid][$field->order] = $field; } } } } } // sorting fields and filtering empty categories foreach ($filtered_ordered_cats as $cat_guid => $fields) { if (!empty($fields)) { ksort($fields); $result["fields"][$cat_guid] = $fields; } else { unset($result["categories"][$cat_guid]); } } // fire hook to see if other plugins have extra fields $hook_params = array("user" => $user, "edit" => $edit, "register" => $register, "profile_type_limit" => $profile_type_limit, "profile_type_guid" => $profile_type_guid); $result = elgg_trigger_plugin_hook("categorized_profile_fields", "profile_manager", $hook_params, $result); return $result; }
<div> <label><?php echo elgg_echo('user:name:label'); ?> </label> <?php echo elgg_view('input/text', array('name' => 'name', 'value' => $vars['entity']->name)); ?> </div> <?php // Build fields $categorized_fields = profile_manager_get_categorized_fields($vars['entity'], true); $cats = $categorized_fields['categories']; $fields = $categorized_fields['fields']; $user_metadata = profile_manager_get_user_profile_data($vars['entity']); $edit_profile_mode = elgg_get_plugin_setting("edit_profile_mode", "profile_manager"); $simple_access_control = elgg_get_plugin_setting("simple_access_control", "profile_manager"); if (!empty($cats)) { // Profile type selector $setting = elgg_get_plugin_setting("profile_type_selection", "profile_manager"); if (empty($setting)) { // default value $setting = "user"; } // can user edit? or just admins if ($setting == "user" || elgg_is_admin_logged_in()) { // get profile types $options = array("type" => "object", "subtype" => CUSTOM_PROFILE_FIELDS_PROFILE_TYPE_SUBTYPE, "limit" => false, "owner_guid" => $CONFIG->site_guid); if ($types = elgg_get_entities($options)) { $pulldown_options = array();