public function sendMessageToAllDepartmentOperators($params) { if ($this->settings['enabled'] == true) { // Determine what operators should receive this message $db = ezcDbInstance::get(); $stmt = $db->prepare("SELECT user_id FROM lh_userdep WHERE dep_id = 0 OR dep_id = :dep_id AND lh_userdep.last_activity > :last_activity"); $stmt->bindValue(':dep_id', $params['chat']->dep_id, PDO::PARAM_INT); $stmt->bindValue(':last_activity', time() - (int) erLhcoreClassModelChatConfig::fetch('sync_sound_settings')->data['online_timeout'], PDO::PARAM_INT); $stmt->execute(); $usersId = $stmt->fetchAll(PDO::FETCH_COLUMN); if (!empty($usersId)) { $accountsXMPP = erLhcoreClassModelXMPPAccount::getList(array('filter' => array('type' => erLhcoreClassModelXMPPAccount::USER_TYPE_OPERATOR, 'sendmessage' => 1), 'filterin' => array('user_id' => $usersId))); // Change user nick to proper one $rpc = new \GameNet\Jabber\RpcClient(array('server' => $this->settings['rpc_server'], 'host' => $this->settings['xmpp_host'], 'account_host' => $this->settings['rpc_account_host'], 'username' => $this->settings['rpc_username'], 'password' => $this->settings['rpc_password'])); $paramsOnlineUser = erLhcoreClassExtensionXmppserviceHandler::getNickAndStatusByChat($params['chat']); // Nick $rpc->setNick($params['xmpp_account']->username_plain, $paramsOnlineUser['nick'], $paramsOnlineUser['status']); // Send messages foreach ($accountsXMPP as $xmppAccountOpetrator) { if ($params['msg'] === false) { $params['msg'] = new stdClass(); $params['msg']->msg = 'New chat request from visitor. Reply to accept a chat'; } erLhcoreClassExtensionXmppserviceHandler::sendMessageStartChat(array('xmpp_account' => $params['xmpp_account'], 'xmpp_account_operator' => $xmppAccountOpetrator, 'host_login' => $this->settings['host_login'], 'node_api_server' => $this->settings['node_api_server'], 'chat' => $params['chat'], 'msg' => $params['msg'], 'handler' => $this->settings['handler'], 'rpc_server' => $this->settings['rpc_server'], 'rpc_username' => $this->settings['rpc_username'], 'rpc_password' => $this->settings['rpc_password'], 'rpc_account_host' => $this->settings['rpc_account_host'], 'xmpp_host' => $this->settings['xmpp_host'])); } } } }
/** * Creates required shared roasters * * @todo add support for RPC * * */ public static function registerInstanceRoasters($params) { // First register visitors shared roaster $data[] = array("group" => "visitors." . $params['subdomain'], "host" => $params['xmpp_host'], "name" => "Visitors", "desc" => "Visitors", "display" => '\\"\\"', "display_array" => array()); // Register operators shared roaster $data[] = array("group" => "operators." . $params['subdomain'], "host" => $params['xmpp_host'], "name" => "Operators", "desc" => "Operators", "display" => '\\"operators.' . $params['subdomain'] . '\\\\nvisitors.' . $params['subdomain'] . '\\"', "display_array" => array('operators.' . $params['subdomain'], 'visitors.' . $params['subdomain'])); if ($params['handler'] == 'rpc') { try { $rpc = new \GameNet\Jabber\RpcClient(array('server' => $params['rpc_server'], 'host' => $params['xmpp_host'], 'account_host' => $params['rpc_account_host'], 'username' => $params['rpc_username'], 'password' => $params['rpc_password'])); foreach ($data as $groupData) { $infoSharedRoaster = $rpc->getInfoSharedRosterGroup($groupData['group']); if (empty($infoSharedRoaster)) { $rpc->createSharedRosterGroup($groupData['group'], $groupData['name'], $groupData['desc'], $groupData['display_array']); } } } catch (Exception $e) { if (erLhcoreClassModule::getExtensionInstance('erLhcoreClassExtensionXmppservice')->settings['debug'] == true) { erLhcoreClassLog::write(print_r($e, true)); } } } else { foreach ($data as $groupData) { try { $response = self::sendRequest($params['node_api_server'] . '/xmpp-setup-instance-roasters', $groupData); if ($response['error'] == true) { throw new Exception($response['msg']); } } catch (Exception $e) { if (erLhcoreClassModule::getExtensionInstance('erLhcoreClassExtensionXmppservice')->settings['debug'] == true) { erLhcoreClassLog::write(print_r($e, true)); } } } } }