chat.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. // PLUGIN INFORMATION
  3. use Pusher\PusherException;
  4. $GLOBALS['plugins'][]['chat'] = array( // Plugin Name
  5. 'name' => 'Chat', // Plugin Name
  6. 'author' => 'CauseFX', // Who wrote the plugin
  7. 'category' => 'Utilities', // One to Two Word Description
  8. 'link' => '', // Link to plugin info
  9. 'license' => 'personal,business', // License Type use , for multiple
  10. 'idPrefix' => 'CHAT', // html element id prefix
  11. 'configPrefix' => 'CHAT', // config file prefix for array items without the hypen
  12. 'version' => '1.0.0', // SemVer of plugin
  13. 'image' => 'plugins/images/chat.png', // 1:1 non transparent image for plugin
  14. 'settings' => true, // does plugin need a settings page? true or false
  15. 'homepage' => false // Is plugin for use on homepage? true or false
  16. );
  17. class Chat extends Organizr
  18. {
  19. public function _chatPluginGetSettings()
  20. {
  21. return array(
  22. 'custom' => '
  23. <div class="row">
  24. <div class="col-lg-12">
  25. <div class="panel panel-info">
  26. <div class="panel-heading">
  27. <span lang="en">Notice</span>
  28. </div>
  29. <div class="panel-wrapper collapse in" aria-expanded="true">
  30. <div class="panel-body">
  31. <ul class="list-icons">
  32. <li><i class="fa fa-chevron-right text-danger"></i> <a href="https://dashboard.pusher.com/accounts/sign_up" target="_blank">Signup for Pusher [FREE]</a></li>
  33. <li><i class="fa fa-chevron-right text-danger"></i> Create an App called whatever you like and choose a cluster (Close to you)</li>
  34. <li><i class="fa fa-chevron-right text-danger"></i> Frontend (JQuery) - Backend (PHP)</li>
  35. <li><i class="fa fa-chevron-right text-danger"></i> Click the overview tab on top left</li>
  36. <li><i class="fa fa-chevron-right text-danger"></i> Copy and paste the 4 values into Organizr</li>
  37. <li><i class="fa fa-chevron-right text-danger"></i> Save and reload!</li>
  38. </ul>
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. ',
  45. 'Options' => array(
  46. array(
  47. 'type' => 'select',
  48. 'name' => 'CHAT-Auth-include',
  49. 'label' => 'Minimum Authentication',
  50. 'value' => $this->config['CHAT-Auth-include'],
  51. 'options' => $this->groupSelect()
  52. ),
  53. array(
  54. 'type' => 'number',
  55. 'name' => 'CHAT-messageLoadLimit',
  56. 'label' => '# of Previous Messages',
  57. 'value' => $this->config['CHAT-messageLoadLimit'],
  58. 'placeholder' => ''
  59. ),
  60. array(
  61. 'type' => 'select',
  62. 'name' => 'CHAT-userRefreshTimeout',
  63. 'label' => 'Refresh Seconds',
  64. 'value' => $this->config['CHAT-userRefreshTimeout'],
  65. 'options' => $this->timeOptions()
  66. ),
  67. array(
  68. 'type' => 'select',
  69. 'name' => 'CHAT-newMessageSound-include',
  70. 'label' => 'Message Sound',
  71. 'value' => $this->config['CHAT-newMessageSound-include'],
  72. 'options' => $this->getSounds()
  73. ),
  74. array(
  75. 'type' => 'switch',
  76. 'name' => 'CHAT-useSSL',
  77. 'label' => 'Use Pusher SSL',
  78. 'help' => 'If messages get stuck sending, please turn this option off.',
  79. 'value' => $this->config['CHAT-useSSL']
  80. )
  81. ),
  82. 'Connection' => array(
  83. array(
  84. 'type' => 'password-alt',
  85. 'name' => 'CHAT-authKey-include',
  86. 'label' => 'Auth Key',
  87. 'value' => $this->config['CHAT-authKey-include']
  88. ),
  89. array(
  90. 'type' => 'password-alt',
  91. 'name' => 'CHAT-secret',
  92. 'label' => 'API Secret',
  93. 'value' => $this->config['CHAT-secret']
  94. ),
  95. array(
  96. 'type' => 'input',
  97. 'name' => 'CHAT-appID-include',
  98. 'label' => 'App ID',
  99. 'value' => $this->config['CHAT-appID-include']
  100. ),
  101. array(
  102. 'type' => 'input',
  103. 'name' => 'CHAT-cluster-include',
  104. 'label' => 'App Cluster',
  105. 'value' => $this->config['CHAT-cluster-include']
  106. ),
  107. )
  108. );
  109. }
  110. public function _chatPluginSendChatMessage($array)
  111. {
  112. $message = isset($array['message']) ? $array['message'] : null;
  113. if (!$message) {
  114. $this->setAPIResponse('error', 'No message supplied', 409);
  115. return false;
  116. }
  117. $message = htmlspecialchars($message, ENT_QUOTES);
  118. $now = date("Y-m-d H:i:s");
  119. $currentIP = $this->userIP();
  120. $newMessage = [
  121. 'username' => $this->user['username'],
  122. 'gravatar' => $this->user['image'],
  123. 'uid' => $this->user['uid'],
  124. 'date' => $now,
  125. 'ip' => $currentIP,
  126. 'message' => $message
  127. ];
  128. $response = [
  129. array(
  130. 'function' => 'query',
  131. 'query' => array(
  132. 'INSERT INTO [chatroom]',
  133. $newMessage
  134. )
  135. ),
  136. ];
  137. $query = $this->processQueries($response);
  138. if ($query) {
  139. $options = array(
  140. 'cluster' => $this->config['CHAT-cluster-include'],
  141. 'useTLS' => $this->config['CHAT-useSSL']
  142. );
  143. try {
  144. $pusher = new Pusher\Pusher(
  145. $this->config['CHAT-authKey-include'],
  146. $this->config['CHAT-secret'],
  147. $this->config['CHAT-appID-include'],
  148. $options
  149. );
  150. $pusher->trigger('org_channel', 'my-event', $newMessage);
  151. $this->setAPIResponse('success', 'Chat message accepted', 200);
  152. return true;
  153. } catch (PusherException $e) {
  154. $this->setAPIResponse('error', 'Chat message error', 500);
  155. }
  156. }
  157. $this->setAPIResponse('error', 'Chat error occurred', 409);
  158. return false;
  159. }
  160. public function _chatPluginGetChatMessages()
  161. {
  162. $response = [
  163. array(
  164. 'function' => 'fetchAll',
  165. 'query' => array(
  166. 'SELECT `username`, `gravatar`, `uid`, `date`, `message` FROM (SELECT `username`, `gravatar`, `uid`, `date`, `message` FROM chatroom ORDER BY date DESC LIMIT ?) ORDER BY date ASC',
  167. $this->config['CHAT-messageLoadLimit']
  168. )
  169. ),
  170. ];
  171. return $this->processQueries($response);
  172. }
  173. }