✏️ 正在编辑: PushBrowser.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Notificacao/PushBrowser.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Yuppie_Service_WebSocket as WebSocket; class Core_Notificacao_PushBrowser { /** * @var array $channels * O indice do array refencia tanto o nome do canal quanto o método declarado * no js e vinculado ao websocket quando o cliente se inscreve em um canal. */ static protected $channels = [ "chamados" => [ "descricao" => "Notificação push", "controller" => "chamado", "action" => "notificar-chamado", ], "propostas" => [ "descricao" => "Notificação push", "controller" => "proposta", "action" => "notificar-proposta" ], "agenda" => [ "descricao" => "Notificação push de agendados", "controller" => "callcenter-base", "action" => "notificar-agenda" ], "discador" => [ "descricao" => "Redirecionar discador", "controller" => "callcenter-discador", "action" => "redirecionar-discador" ], "simulacao" => [ "descricao" => "Notificação push", "controller" => "callcenter", "action" => "notificar-simulacao" ] ]; private $usuario; private $configs = []; public function __construct($usuario) { $this->usuario = $usuario; $this->setConfigs(); } public function getAllowedChannels() { return $this->configs; } private static function secureChannelName($channel) { return md5(Yuppie_Auth::getSiteKey() . $channel); } public static function findChannel($channel) { if(!empty(self::$channels[$channel])){ return self::secureChannelName($channel); } } /** * Define quais canais o usuário tem permissão de receber mensagens. */ public function setConfigs() { foreach (self::$channels as $channel => $config){ if ($this->checkGroupPermission($config)){ $this->configs[$channel]["id"] = self::secureChannelName($channel); } } return $this; } /** * Envia a mensagem para o servico de websocket que fara a distribuição * através do canal solicitado. * * @param string $channelName * @param string $titulo * @param string $mensagem * @param array @args * * @return bool * * @throws ZMQException * @throws Core_Exception */ public static function notify($channelName, $titulo, $mensagem, array $args = []) { $channel = self::findChannel($channelName); if (!empty($channel)){ $data = [ 'titulo' => $titulo, 'mensagem' => $mensagem, ]; WebSocket::getContext()->sendMessage($channel, array_merge($data, $args) ); return true; } throw new Core_Exception("Canal não encontrado"); } /** * Verifica as permissões de grupo do usuário. * * @param $config * @return bool * * @throws Zend_Session_Exception */ private function checkGroupPermission($config) { $acl = (new Zend_Session_Namespace)->acl; $resource = $config['controller']; $privilege = $config['action']; if( !$acl ){ return false; } return $acl->isAllowed($this->usuario->grupo, $resource, $privilege); } /** * Cria as permissões necessárias para cada canal * * @param $currentResources */ public static function createChannelResources(&$currentResources) { foreach (self::$channels as $channelData) { $resource = $channelData['controller']; $privilege = $channelData['action']; $rule = "{$resource}_{$privilege}"; if(empty($currentResources[$rule])){ $ruleData = [ 'descricao' => $channelData['descricao'], 'resource' => $resource, 'privilege' => $privilege, 'excluido' => 0, 'extra' => 0 ]; $ruleData['id'] = (new Model_Resource($ruleData))->salvar(); $currentResources[$rule] = $ruleData; } } } }
💾 保存文件
← 返回文件管理器