config = $config + array('enable_for_supervisors' => false); } /** * The plugin does not need extra initialization thus it is always ready to * work. * * @return boolean */ public function initialized() { return true; } /** * Specify version of the plugin. * * @return string Plugin's version. */ public static function getVersion() { return '0.1.0'; } /** * The main entry point of a plugin. */ public function run() { $dispatcher = EventDispatcher::getInstance(); $dispatcher->attachListener(Events::USERS_UPDATE_THREADS_ALTER, $this, 'alterThreads'); } /** * Event listener for "usersUpdateThreadsAlter" event. */ public function alterThreads(&$args) { // Get actual operator if (array_key_exists(SESSION_PREFIX . 'operator', $_SESSION)) { $operator = operator_by_id($_SESSION[SESSION_PREFIX . 'operator']['operatorid']); } else { return; } // Do not hide threads for operators which can view all threads if (is_capable(CAN_VIEWTHREADS, $operator) && !$this->config['enable_for_supervisors']) { return; } // Process threads list to exclude those started with an operator's code foreach($args['threads'] as $key => $thread_info) { if ($thread_info['state'] != Thread::STATE_QUEUE) { continue; } $thread = Thread::load($thread_info['id']); if ($thread->nextAgent && ($thread->nextAgent != $operator['operatorid'])) { unset($args['threads'][$key]); } } // Make keys consequent to avoid problems with JSON conversion. If there // will be gaps in keys JSON Object will be produced instead of an Array. $args['threads'] = array_values($args['threads']); } }