diff --git a/main/admin/group_edit.php b/main/admin/group_edit.php old mode 100755 new mode 100644 index 855951922e..c055d1c859 --- a/main/admin/group_edit.php +++ b/main/admin/group_edit.php @@ -82,9 +82,14 @@ if (strlen($group_data['picture_uri']) > 0) { // Status $status = array(); +$groups = array(); +$groups = GroupPortalManager::get_groups_list($group_id); +$groups[0] = get_lang('NoParentship'); +$group_data['parent_group'] = GroupPortalManager::get_parent_group($group_id); $status[GROUP_PERMISSION_OPEN] = get_lang('Open'); $status[GROUP_PERMISSION_CLOSED] = get_lang('Closed'); +$form->addElement('select', 'parent_group', get_lang('GroupParentship'), $groups, array()); $form->addElement('select', 'visibility', get_lang('GroupPermissions'), $status, array()); // Submit button @@ -112,8 +117,11 @@ if ( $form->validate()) { $description = $group['description']; $url = $group['url']; $status = intval($group['visibility']); + $parent_group_id = intval($group['parent_group']); GroupPortalManager::update($group_id, $name, $description, $url, $status, $picture_uri); + GroupPortalManager::set_parent_group($group_id,$parent_group_id); + $tok = Security::get_token(); header('Location: group_list.php?action=show_message&message='.urlencode(get_lang('GroupUpdated')).'&sec_token='.$tok); exit(); diff --git a/main/inc/lib/database.lib.php b/main/inc/lib/database.lib.php old mode 100755 new mode 100644 index 1076ec469c..5b60e24160 --- a/main/inc/lib/database.lib.php +++ b/main/inc/lib/database.lib.php @@ -64,6 +64,7 @@ define('TABLE_MAIN_USER_REL_TAG', 'user_rel_tag'); //User groups define('TABLE_MAIN_GROUP', 'groups'); define('TABLE_MAIN_USER_REL_GROUP', 'group_rel_user'); +define('TABLE_MAIN_GROUP_REL_GROUP', 'group_rel_group'); define('TABLE_MAIN_GROUP_REL_TAG', 'group_rel_tag'); // Search engine @@ -1312,4 +1313,4 @@ class Database { return mysql_insert_id(); } } -//end class Database \ No newline at end of file +//end class Database diff --git a/main/inc/lib/group_portal_manager.lib.php b/main/inc/lib/group_portal_manager.lib.php index eabe398a9c..a11afc4b86 100644 --- a/main/inc/lib/group_portal_manager.lib.php +++ b/main/inc/lib/group_portal_manager.lib.php @@ -123,6 +123,26 @@ class GroupPortalManager } return $data; } + /** + * Gets a list of all group + * @param id of a group to not include + * @return array : id => name + **/ + public static function get_groups_list($without_this_one = NULL ) + { + $where=''; + if ( isset($without_this_one) && (intval($without_this_one) == $without_this_one) ) { + $where = "WHERE id <> $without_this_one"; + } + $table = Database :: get_main_table(TABLE_MAIN_GROUP); + $sql = "SELECT id, name FROM $table $where order by name"; + $res = Database::query($sql); + $list = array (); + while ($item = Database::fetch_assoc($res)) { + $list[$item['id']] = $item['name']; + } + return $list; + } /** * Gets the group data @@ -143,6 +163,53 @@ class GroupPortalManager return $item; } + /** + * Set a parent group + * @param group_id + * @param parent_group, if 0, we delete the parent_group association + * @param relation_type + * @return true or false + **/ + public static function set_parent_group($group_id, $parent_group_id, $relation_type = 1){ + $table = Database :: get_main_table(TABLE_MAIN_GROUP_REL_GROUP); + $group_id = intval($group_id); + $parent_group_id = intval($parent_group_id); + if ($parent_group_id == 0) { + $sql = "DELETE FROM $table WHERE subgroup_id = $group_id"; + } + else { + $sql = "SELECT group_id FROM $table WHERE subgroup_id = $group_id"; + $res = Database::query($sql); + if (Database::num_rows($res)==0) { + $sql = "INSERT INTO $table SET group_id = $parent_group_id, subgroup_id = $group_id, relation_type = $relation_type"; + } else { + $sql = "UPDATE $table SET group_id = $parent_group_id, relation_type = $relation_type WHERE subgroup_id = $group_id"; + } + } + $res = Database::query($sql); + return($res); + } + /** + * Get the parent group + * @param group_id + * @param relation_type + * @return int parent_group_id or false + **/ + public static function get_parent_group($group_id, $relation_type=1){ + $table = Database :: get_main_table(TABLE_MAIN_GROUP_REL_GROUP); + $group_id=intval($group_id); + $parent_group_id=intval($parent_group_id); + $sql = "SELECT group_id FROM $table WHERE subgroup_id = $group_id"; + $res = Database::query($sql); + if (Database::num_rows($res)==0) { + return 0; + } + else { + $arr = Database::fetch_assoc($res); + return $arr['group_id']; + } + } + /** * Gets the tags from a given group * @param int group id @@ -1032,4 +1099,4 @@ class GroupPortalManager */ } } -?> \ No newline at end of file +?> diff --git a/main/install/db_main.sql b/main/install/db_main.sql index 742cf44de3..1331c0a053 100644 --- a/main/install/db_main.sql +++ b/main/install/db_main.sql @@ -2400,6 +2400,17 @@ CREATE TABLE group_rel_user ( ALTER TABLE group_rel_user ADD INDEX ( group_id ); ALTER TABLE group_rel_user ADD INDEX ( user_id ); ALTER TABLE group_rel_user ADD INDEX ( relation_type ); + +CREATE TABLE group_rel_group ( + id int NOT NULL AUTO_INCREMENT, + group_id int NOT NULL, + subgroup_id int NOT NULL, + relation_type int NOT NULL, + PRIMARY KEY (id) +); +ALTER TABLE group_rel_group ADD INDEX ( group_id ); +ALTER TABLE group_rel_group ADD INDEX ( subgroup_id ); +ALTER TABLE group_rel_group ADD INDEX ( relation_type ); -- -- Table structure for table message attachment -- diff --git a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql index 7615479013..16cd4394bf 100644 --- a/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql +++ b/main/install/migrate-db-1.8.6.2-1.8.7-pre.sql @@ -129,6 +129,11 @@ ALTER TABLE track_e_attempt_recording ADD session_id INT NOT NULL DEFAULT 0; ALTER TABLE track_e_attempt_recording ADD INDEX (question_id); ALTER TABLE track_e_attempt_recording ADD INDEX (session_id); ALTER TABLE track_e_online ADD COLUMN access_url_id INT NOT NULL DEFAULT 1; +-- Groups can have subgroups +CREATE TABLE group_rel_group ( id int NOT NULL AUTO_INCREMENT, group_id int NOT NULL, subgroup_id int NOT NULL, relation_type int NOT NULL, PRIMARY KEY (id)); +ALTER TABLE group_rel_group ADD INDEX ( group_id ); +ALTER TABLE group_rel_group ADD INDEX ( subgroup_id ); +ALTER TABLE group_rel_group ADD INDEX ( relation_type ); -- xxUSERxx