1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4/**
5 * Group Pool listener. Listens to events of other components.
6 *
7 * @author Stefan Meyer <smeyer.ilias@gmx.de>
8 * @version $Id$
9 * @ingroup ModulesGroup
10 */
11class ilGroupAppEventListener
12{
13    private $logger = null;
14
15    /**
16     * Constructor
17     */
18    public function __construct()
19    {
20        $this->logger = ilLoggerFactory::getInstance()->getLogger('grp');
21    }
22
23    /**
24     * @return ilLogger
25     */
26    public function getLogger()
27    {
28        return $this->logger;
29    }
30
31    /**
32     * handle user assignments
33     * @param type $a_event
34     * @param type $a_parameters
35     */
36    protected function handleUserAssignments($a_event, $a_parameters)
37    {
38        if ($a_parameters['type'] != 'grp') {
39            $this->getLogger()->debug('Ignoring event for type ' . $a_parameters['type']);
40            return true;
41        }
42
43        if ($a_event == 'assignUser') {
44            $this->getLogger()->debug('Handling assign user event for type grp.');
45            $new_status = 1;
46        } elseif ($a_event == 'deassignUser') {
47            $this->getLogger()->debug('Handling assign user event for type grp.');
48            $new_status = 0;
49        }
50
51        ilLoggerFactory::getInstance()->getLogger('grp')->debug(print_r($a_parameters, true));
52        ilLoggerFactory::getInstance()->getLogger('grp')->debug(print_r($new_status, true));
53
54        include_once './Services/Membership/classes/class.ilParticipant.php';
55
56        ilParticipant::updateMemberRoles(
57            $a_parameters['obj_id'],
58            $a_parameters['usr_id'],
59            $a_parameters['role_id'],
60            $new_status
61        );
62
63        if ($a_event == 'deassignUser') {
64            $self = new self();
65            $self->doAutoFill($a_parameters['obj_id']);
66        }
67    }
68
69    /**
70     * Trigger autofill from waiting list
71     *
72     * @param int $a_obj_id
73     */
74    protected static function doAutoFill($a_obj_id)
75    {
76        global $DIC;
77
78        $logger = $DIC->logger()->grp();
79
80        $ref_id = array_pop(ilObject::_getAllReferences($a_obj_id));
81
82        $group = \ilObjectFactory::getInstanceByRefId($ref_id, false);
83        if (!$group instanceof ilObjGroup) {
84            $logger->warning('Cannot handle event deassign user since passed obj_id is not of type group: ' . $a_obj_id);
85        }
86
87        $group->handleAutoFill();
88    }
89
90    /**
91    * Handle an event in a listener.
92    *
93    * @param	string	$a_component	component, e.g. "Modules/Forum" or "Services/User"
94    * @param	string	$a_event		event e.g. "createUser", "updateUser", "deleteUser", ...
95    * @param	array	$a_parameter	parameter array (assoc), array("name" => ..., "phone_office" => ...)
96    */
97    public static function handleEvent($a_component, $a_event, $a_parameter)
98    {
99        if ($a_component == 'Services/AccessControl') {
100            $listener = new self();
101            $listener->handleUserAssignments($a_event, $a_parameter);
102        }
103    }
104}
105