You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

233 lines
6.1 KiB

  1. <?php
  2. /**
  3. * @package Widgets
  4. *
  5. * @file Logout.php
  6. * This file is part of MOVIM.
  7. *
  8. * @brief The little logout widget.
  9. *
  10. * @author Guillaume Pasquet <etenil@etenilsrealm.nl>
  11. *
  12. * @version 1.0
  13. * @date 20 October 2010
  14. *
  15. * Copyright (C)2010 MOVIM project
  16. *
  17. * See COPYING for licensing information.
  18. */
  19. use Moxl\Xec\Action\Presence\Chat;
  20. use Moxl\Xec\Action\Presence\Away;
  21. use Moxl\Xec\Action\Presence\DND;
  22. use Moxl\Xec\Action\Presence\XA;
  23. use Moxl\Xec\Action\Presence\Unavailable;
  24. use Moxl\Xec\Action\Pubsub\GetItems;
  25. use Moxl\Stanza\Stream;
  26. use Moxl\Xec\Action\Storage\Get;
  27. class Presence extends WidgetBase
  28. {
  29. function load()
  30. {
  31. $this->addcss('presence.css');
  32. $this->addjs('presence.js');
  33. $this->registerEvent('mypresence', 'onMyPresence');
  34. }
  35. function onMyPresence($packet)
  36. {
  37. $html = $this->preparePresence();
  38. RPC::call('movim_fill', 'presence_widget', $html);
  39. Notification::append(null, $this->__('status.updated'));
  40. RPC::call('Presence.refresh');
  41. RPC::call('movim_remove_class', '#presence_widget', 'unfolded');
  42. }
  43. function onPostDisconnect($data)
  44. {
  45. RPC::call('movim_reload',
  46. BASE_URI."index.php?q=disconnect");
  47. }
  48. function ajaxSet($form = false)
  49. {
  50. if($form == false) {
  51. // We update the cache with our status and presence
  52. $presence = Cache::c('presence');
  53. $value = $presence['show'];
  54. $status = $presence['status'];
  55. if($presence == null || !isset($presence['show']) || $presence['show'] == '')
  56. $value = 'chat';
  57. if($presence == null|| !isset($presence['status']) || $presence['status'] == '')
  58. $status = 'Online with Movim';
  59. } else {
  60. $status = $form['status'];
  61. $value = $form['value'];
  62. }
  63. if(in_array($value, array('chat', 'away', 'dnd', 'xa'))) {
  64. switch($value) {
  65. case 'chat':
  66. $p = new Chat;
  67. $p->setStatus($status)->request();
  68. break;
  69. case 'away':
  70. $p = new Away;
  71. $p->setStatus($status)->request();
  72. break;
  73. case 'dnd':
  74. $p = new DND;
  75. $p->setStatus($status)->request();
  76. break;
  77. case 'xa':
  78. $p = new XA;
  79. $p->setStatus($status)->request();
  80. break;
  81. }
  82. }
  83. Cache::c(
  84. 'presence',
  85. array(
  86. 'status' => $status,
  87. 'show' => $value
  88. )
  89. );
  90. }
  91. function ajaxLogout()
  92. {
  93. $pd = new \Modl\PresenceDAO();
  94. $session = \Sessionx::start();
  95. $pd->clearPresence($session->username.'@'.$session->host);
  96. $session = \Sessionx::start();
  97. $p = new Unavailable;
  98. $p->setType('terminate')
  99. ->setResource($session->resource)
  100. ->setTo($this->user->getLogin())
  101. ->request();
  102. Stream::end();
  103. }
  104. function ajaxConfigGet() {
  105. $s = new Get;
  106. $s->setXmlns('movim:prefs')
  107. ->request();
  108. }
  109. // We get the server capabilities
  110. function ajaxServerCapsGet()
  111. {
  112. $session = \Sessionx::start();
  113. $c = new \Moxl\Xec\Action\Disco\Request;
  114. $c->setTo($session->host)
  115. ->request();
  116. }
  117. // We refresh the bookmarks
  118. function ajaxBookmarksGet()
  119. {
  120. $session = \Sessionx::start();
  121. $b = new \Moxl\Xec\Action\Bookmark\Get;
  122. $b->setTo($session->user.'@'.$session->host)
  123. ->request();
  124. }
  125. // We refresh the user (local) configuration
  126. function ajaxUserRefresh()
  127. {
  128. $language = $this->user->getConfig('language');
  129. if(isset($language)) {
  130. loadLanguage($language);
  131. }
  132. }
  133. // We refresh our personnal feed
  134. function ajaxFeedRefresh()
  135. {
  136. $r = new GetItems;
  137. $r->setTo($this->user->getLogin())
  138. ->setNode('urn:xmpp:microblog:0')
  139. ->request();
  140. }
  141. function ajaxOpenDialog()
  142. {
  143. Dialog::fill($this->preparePresenceList());
  144. RPC::call('Presence.refresh');
  145. }
  146. function preparePresence()
  147. {
  148. $cd = new \Modl\ContactDAO();
  149. $pd = new \Modl\PresenceDAO();
  150. $session = \Sessionx::start();
  151. $presence = $pd->getPresence($this->user->getLogin(), $session->resource);
  152. $presencetpl = $this->tpl();
  153. $contact = $cd->get();
  154. if($contact == null) {
  155. $contact = new \Modl\Contact;
  156. }
  157. if($presence == null) {
  158. $presence = new \Modl\Presence;
  159. }
  160. $presencetpl->assign('me', $contact);
  161. $presencetpl->assign('presence', $presence);
  162. $presencetpl->assign('presencetxt', getPresencesTxt());
  163. $presencetpl->assign('dialog', $this->call('ajaxOpenDialog'));
  164. $html = $presencetpl->draw('_presence', true);
  165. return $html;
  166. }
  167. function preparePresenceList()
  168. {
  169. $txt = getPresences();
  170. $txts = getPresencesTxt();
  171. $session = \Sessionx::start();
  172. $pd = new \Modl\PresenceDAO();
  173. $p = $pd->getPresence($this->user->getLogin(), $session->resource);
  174. $cd = new \Modl\ContactDAO();
  175. $contact = $cd->get($this->user->getLogin());
  176. if($contact == null) {
  177. $contact = new \Modl\Contact;
  178. }
  179. $presencetpl = $this->tpl();
  180. $presencetpl->assign('contact', $contact);
  181. $presencetpl->assign('p', $p);
  182. $presencetpl->assign('txt', $txt);
  183. $presencetpl->assign('txts', $txts);
  184. $presencetpl->assign('calllogout', $this->call('ajaxLogout'));
  185. $html = $presencetpl->draw('_presence_list', true);
  186. return $html;
  187. }
  188. function display()
  189. {
  190. $this->view->assign('presence', $this->preparePresence());
  191. }
  192. }
  193. ?>