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