View source
<?php
function og_subgroups_add_group_select_form(&$form, $node) {
if (!og_subgroups_can_edit_hierarchy($node)) {
return;
}
if (!$node->nid) {
$pid = isset($_GET['og_parent']) && is_numeric($_GET['og_parent']) ? $_GET['og_parent'] : 0;
if ($pid) {
if ($parent = node_load($pid)) {
if (og_is_group_type($parent->type)) {
if (og_is_group_member($parent->nid)) {
og_set_group_context($parent);
$parent_id = $parent->nid;
}
}
}
}
}
else {
$parent_id = isset($node->og_parent->nid) ? $node->og_parent->nid : 0;
}
$title = t('Parent');
$description = t('The parent group for this group node.');
$form['og_subgroups'] = array(
'#type' => 'fieldset',
'#title' => $title,
'#collapsible' => TRUE,
'#collapsed' => FALSE,
);
if (module_exists('og_subgroups_hs')) {
$form['og_subgroups']['og_parent'] = array(
'#type' => 'hierarchical_select',
'#title' => $title,
'#size' => 1,
'#config' => array(
'module' => 'og_subgroups_hs',
'params' => array(
'nid' => isset($node->nid) ? $node->nid : NULL,
'optional' => 0,
),
'save_lineage' => 0,
'enforce_deepest' => 0,
'entity_count' => 0,
'resizable' => 0,
),
'#default_value' => $parent_id,
'#description' => $description,
);
}
else {
$form['og_subgroups']['og_parent'] = array(
'#type' => 'select',
'#title' => $title,
'#default_value' => $parent_id,
'#options' => og_subgroups_group_select_options(TRUE),
'#description' => $description,
);
}
array_unshift($form['#validate'], 'og_subgroups_node_form_validate');
}
function og_subgroups_group_select_options($only_enabled = FALSE, $indent = '--') {
og_subgroups_include('tree');
$options = array();
if ($tree = og_subgroups_get_tree()) {
foreach ($tree as $branch) {
if (!og_subgroups_mask_group($branch, TRUE)) {
$options[$branch->nid] = $branch->title;
}
_og_subgroups_group_select_options_recursive($options, $branch->children, $indent);
}
}
$options += _og_subgroups_group_select_options_without_family($only_enabled);
$options = array(
t('<No parent group>'),
) + $options;
return $options;
}
function _og_subgroups_group_select_options_recursive(&$options, $branch, $indent) {
foreach ($branch as $child) {
if (!og_subgroups_mask_group($child, TRUE)) {
$options[$child->nid] = $indent . ' ' . $child->title;
}
if (!empty($child->children)) {
_og_subgroups_group_select_options_recursive($options, $child->children, $indent . $indent);
}
}
}
function _og_subgroups_group_select_options_without_family($only_enabled = FALSE) {
og_subgroups_include('tree');
$options = array();
$groups = og_subgroups_get_groups_without_family();
foreach ($groups as $group) {
if ($only_enabled && !og_subgroups_is_subgroup_type($group->type)) {
continue;
}
if (!og_subgroups_mask_group($group, TRUE)) {
$options[$group->nid] = $group->title;
}
}
return $options;
}