'Chat', // Plugin Name 'author' => 'CauseFX', // Who wrote the plugin 'category' => 'Utilities', // One to Two Word Description 'link' => '', // Link to plugin info 'license' => 'personal,business', // License Type use , for multiple 'idPrefix' => 'CHAT', // html element id prefix 'configPrefix' => 'CHAT', // config file prefix for array items without the hypen 'version' => '1.0.0', // SemVer of plugin 'image' => 'api/plugins/chat/logo.png', // 1:1 non transparent image for plugin 'settings' => true, // does plugin need a settings modal? 'bind' => true, // use default bind to make settings page - true or false 'api' => 'api/v2/plugins/chat/settings', // api route for settings page 'homepage' => false // Is plugin for use on homepage? true or false ); class Chat extends Organizr { public function _chatPluginGetSettings() { return array( 'custom' => '
Notice
  • Signup for Pusher [FREE]
  • Create an App called whatever you like and choose a cluster (Close to you)
  • Frontend (JQuery) - Backend (PHP)
  • Click the overview tab on top left
  • Copy and paste the 4 values into Organizr
  • Save and reload!
', 'Options' => array( array( 'type' => 'select', 'name' => 'CHAT-Auth-include', 'label' => 'Minimum Authentication', 'value' => $this->config['CHAT-Auth-include'], 'options' => $this->groupSelect() ), array( 'type' => 'number', 'name' => 'CHAT-messageLoadLimit', 'label' => '# of Previous Messages', 'value' => $this->config['CHAT-messageLoadLimit'], 'placeholder' => '' ), array( 'type' => 'select', 'name' => 'CHAT-userRefreshTimeout', 'label' => 'Refresh Seconds', 'value' => $this->config['CHAT-userRefreshTimeout'], 'options' => $this->timeOptions() ), array( 'type' => 'select', 'name' => 'CHAT-newMessageSound-include', 'label' => 'Message Sound', 'value' => $this->config['CHAT-newMessageSound-include'], 'options' => $this->getSounds() ), array( 'type' => 'switch', 'name' => 'CHAT-useSSL', 'label' => 'Use Pusher SSL', 'help' => 'If messages get stuck sending, please turn this option off.', 'value' => $this->config['CHAT-useSSL'] ) ), 'Connection' => array( array( 'type' => 'password-alt', 'name' => 'CHAT-authKey-include', 'label' => 'Auth Key', 'value' => $this->config['CHAT-authKey-include'] ), array( 'type' => 'password-alt', 'name' => 'CHAT-secret', 'label' => 'API Secret', 'value' => $this->config['CHAT-secret'] ), array( 'type' => 'input', 'name' => 'CHAT-appID-include', 'label' => 'App ID', 'value' => $this->config['CHAT-appID-include'] ), array( 'type' => 'input', 'name' => 'CHAT-cluster-include', 'label' => 'App Cluster', 'value' => $this->config['CHAT-cluster-include'] ), ) ); } public function _chatPluginSendChatMessage($array) { $message = isset($array['message']) ? $array['message'] : null; if (!$message) { $this->setAPIResponse('error', 'No message supplied', 409); return false; } $message = htmlspecialchars($message, ENT_QUOTES); $now = date("Y-m-d H:i:s"); $currentIP = $this->userIP(); $newMessage = [ 'username' => $this->user['username'], 'gravatar' => $this->user['image'], 'uid' => $this->user['uid'], 'date' => $now, 'ip' => $currentIP, 'message' => $message ]; $response = [ array( 'function' => 'query', 'query' => array( 'INSERT INTO [chatroom]', $newMessage ) ), ]; $query = $this->processQueries($response); if ($query) { $options = array( 'cluster' => $this->config['CHAT-cluster-include'], 'useTLS' => $this->config['CHAT-useSSL'] ); try { $pusher = new Pusher\Pusher( $this->config['CHAT-authKey-include'], $this->config['CHAT-secret'], $this->config['CHAT-appID-include'], $options ); $pusher->trigger('org_channel', 'my-event', $newMessage); $this->setAPIResponse('success', 'Chat message accepted', 200); return true; } catch (PusherException $e) { $this->setAPIResponse('error', 'Chat message error', 500); } } $this->setAPIResponse('error', 'Chat error occurred', 409); return false; } public function _chatPluginGetChatMessages() { $response = [ array( 'function' => 'fetchAll', 'query' => array( 'SELECT `username`, `gravatar`, `uid`, `date`, `message` FROM (SELECT `username`, `gravatar`, `uid`, `date`, `message` FROM chatroom ORDER BY date DESC LIMIT ?) ORDER BY date ASC', $this->config['CHAT-messageLoadLimit'] ) ), ]; return $this->processQueries($response); } }