]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #1854. Group owners can delegate the ownership to another group member.
authorSem <sembrestels@riseup.net>
Sun, 8 Jul 2012 17:31:39 +0000 (19:31 +0200)
committerSteve Clay <steve@mrclay.org>
Mon, 19 Nov 2012 13:01:01 +0000 (08:01 -0500)
mod/groups/actions/groups/edit.php
mod/groups/languages/en.php
mod/groups/views/default/forms/groups/edit.php
mod/groups/views/default/groups/js.php

index 2d7e1f023a5149dd480a83fdb9825712585c2f93..fa96345e0e164c751c316e33f48b0734545f3652 100644 (file)
@@ -92,6 +92,18 @@ if ($new_group_flag) {
        $group->access_id = ACCESS_PUBLIC;
 }
 
+$owner_guid = (int) get_input('owner_guid');
+$loggedin_guid = elgg_get_logged_in_user_guid();
+$is_admin = elgg_is_admin_logged_in();
+
+if (!$new_group_flag && $owner_guid && $owner_guid != $group->owner_guid) {
+       if($group->isMember($owner_guid) && ($group->owner_guid == $loggedin_guid || $is_admin)) {
+               $old_owner_guid = $group->owner_guid;
+               $group->owner_guid = $owner_guid;
+               $owner_changed_flag = true;
+       }
+}
+
 $group->save();
 
 // Invisible group support
@@ -167,6 +179,27 @@ if ((isset($_FILES['icon'])) && (substr_count($_FILES['icon']['type'],'image/'))
 
                $group->icontime = time();
        }
+       
+       if ($owner_changed_flag) {
+               // @todo remove other user's pictures
+       }
+       
+} elseif ($owner_changed_flag) {
+       
+       $filehandler = new ElggFile();
+       $filehandler->setFilename('groups');
+
+       $filehandler->owner_guid = $old_owner_guid;
+       $old_path = $filehandler->getFilenameOnFilestore();
+       
+       $filehandler->owner_guid = $group->owner_guid;
+       $new_path = $filehandler->getFilenameOnFilestore();
+       
+       $sizes = array('', 'tiny', 'small', 'medium', 'large');
+       
+       foreach($sizes as $size) {
+               rename("$old_path/{$group_guid}{$size}.jpg", "$new_path/{$group_guid}{$size}.jpg");
+       }
 }
 
 system_message(elgg_echo("groups:saved"));
index 0ca9801087d16f6b4ba9a00fcfd16a7368fb73b6..67b0bbb893b00974b40b8cc33804f53e94df5f7d 100644 (file)
@@ -19,6 +19,7 @@ $english = array(
        'groups:add' => "Create a new group",
        'groups:edit' => "Edit group",
        'groups:delete' => 'Delete group',
+       'groups:handover' => 'Hand over',
        'groups:membershiprequests' => 'Manage join requests',
        'groups:invitations' => 'Group invitations',
 
index 532e89c354534f9ab175f676c87def1aad701219..52900d2d95ffcfdfe1bfe2fcf0d615d9ee60f0eb 100644 (file)
@@ -83,6 +83,37 @@ if (elgg_get_plugin_setting('hidden_groups', 'groups') == 'yes') {
 <?php  
 }
 
+if (isset($vars['entity'])) {
+       $entity     = $vars['entity'];
+       $owner_guid = $vars['entity']->owner_guid;
+} else {
+       $entity = false;
+}
+
+if ($entity && ($owner_guid == elgg_get_logged_in_user_guid() || elgg_is_admin_logged_in())) {
+       $owner_guid = $vars['entity']->owner_guid;
+       $members = array();
+       foreach ($vars['entity']->getMembers(0) as $member) {
+               $members[$member->guid] = "$member->name (@$member->username)";
+       }
+?>
+
+<div>
+       <label>
+                       <?php echo elgg_echo('groups:owner'); ?><br />
+                       <?php echo elgg_view('input/dropdown', array(
+                               'name' => 'owner_guid',
+                               'value' =>  $owner_guid,
+                               'options_values' => $members,
+                               'class' => 'groups-owner-input',
+                       ));
+                       ?>
+       </label>
+</div>
+
+<?php  
+}
+
 $tools = elgg_get_config('group_tool_options');
 if ($tools) {
        usort($tools, create_function('$a,$b', 'return strcmp($a->label,$b->label);'));
index 1b4d33f32690e97592142b0c8389aa55756073d3..c3698aadc7f290c4e5ec1307d1bbb6268771c537 100644 (file)
@@ -1,6 +1,31 @@
+<?php
+/**
+ * Javascript for Groups forms
+ *
+ * @package ElggGroups
+ */
+?>
 
 // this adds a class to support IE8 and older
 elgg.register_hook_handler('init', 'system', function() {
        // jQuery uses 0-based indexing
        $('#groups-tools').children('li:even').addClass('odd');
 });
+
+// Hide group owner dropdown
+elgg.register_hook_handler('init', 'system', function() {
+       $('.groups-owner-input').hide().each(function(){
+               $(this).after($(
+                       '<?php
+                               echo elgg_view('output/url', array(
+                                       'text' => elgg_echo('groups:handover'),
+                                       'rel' => 'toggle',
+                                       'class' => 'elgg-button elgg-button-delete',
+                               ));
+                       ?>'
+               ).click(function(){
+                       $(this).hide()
+                       .prev().show();
+               }));
+       });
+});