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.

332 lines
8.6 KiB

  1. <?php
  2. use Moxl\Xec\Action\Pubsub\GetItemsId;
  3. use Moxl\Xec\Action\Pubsub\GetMetadata;
  4. use Moxl\Xec\Action\Pubsub\GetAffiliations;
  5. use Moxl\Xec\Action\Pubsub\Subscribe;
  6. use Moxl\Xec\Action\Pubsub\Unsubscribe;
  7. use Moxl\Xec\Action\Pubsub\GetConfig;
  8. use Moxl\Xec\Action\Pubsub\SetConfig;
  9. use Respect\Validation\Validator;
  10. class Group extends WidgetCommon
  11. {
  12. private $_paging = 15;
  13. private $_role = null;
  14. function load()
  15. {
  16. $this->registerEvent('pubsub_getitem_handle', 'onItems', 'groups');
  17. $this->registerEvent('pubsub_getitems_handle', 'onItems', 'groups');
  18. $this->registerEvent('pubsub_getitemsid_handle', 'onItems', 'groups');
  19. $this->registerEvent('pubsub_getitems_error', 'onItemsError');
  20. $this->registerEvent('pubsub_subscribe_handle', 'onSubscribed');
  21. $this->registerEvent('pubsub_unsubscribe_handle', 'onUnsubscribed');
  22. $this->registerEvent('pubsub_getaffiliations_handle', 'onAffiliations');
  23. $this->registerEvent('pubsub_getconfig_handle', 'onConfig');
  24. $this->registerEvent('pubsub_setconfig_handle', 'onConfigSaved');
  25. $this->registerEvent('bookmark_set_handle', 'onBookmark');
  26. $this->addjs('group.js');
  27. }
  28. function onItems($packet)
  29. {
  30. $arr = $packet->content;
  31. $this->displayItems($arr['server'], $arr['node']);
  32. RPC::call('Group.clearLoad');
  33. RPC::call('MovimTpl.showPanel');
  34. }
  35. function onBookmark()
  36. {
  37. $this->ajaxClear();
  38. $g = new Groups;
  39. $g->ajaxHeader();
  40. $g->ajaxSubscriptions();
  41. }
  42. function onItemsError($packet)
  43. {
  44. $arr = $packet->content;
  45. Notification::append(false, $this->__('group.empty'));
  46. // Display an error message
  47. RPC::call('Group.clearLoad');
  48. }
  49. function onAffiliations($packet)
  50. {
  51. list($affiliations, $server, $node) = array_values($packet->content);
  52. foreach($affiliations as $r) {
  53. if($r[0] == $this->user->getLogin())
  54. $this->_role = (string)$r[1];
  55. }
  56. Header::fill($this->prepareHeader($server, $node));
  57. if(isset($this->_role)
  58. && ($this->_role == 'owner' || $this->_role == 'publisher')) {
  59. $view = $this->tpl();
  60. RPC::call('movim_append', 'group_widget', $view->draw('_group_publish', true));
  61. }
  62. }
  63. function onConfig($packet)
  64. {
  65. list($config, $server, $node) = array_values($packet->content);
  66. $view = $this->tpl();
  67. $xml = new \XMPPtoForm();
  68. $form = $xml->getHTML($config->x->asXML());
  69. $view->assign('form', $form);
  70. $view->assign('server', $server);
  71. $view->assign('node', $node);
  72. $view->assign('attributes', $config->attributes());
  73. Dialog::fill($view->draw('_group_config', true), true);
  74. }
  75. function onConfigSaved()
  76. {
  77. Notification::append(false, $this->__('group.config_saved'));
  78. }
  79. function onSubscribed($packet)
  80. {
  81. $arr = $packet->content;
  82. // Set the bookmark
  83. $r = new Rooms;
  84. $r->setBookmark();
  85. Notification::append(null, $this->__('group.subscribed'));
  86. // Set the public list
  87. /*
  88. //add the group to the public list (if checked)
  89. if($this->_data['listgroup'] == true){
  90. $add = new ListAdd();
  91. $add->setTo($this->_to)
  92. ->setNode($this->_node)
  93. ->setFrom($this->_from)
  94. ->setData($this->_data)
  95. ->request();
  96. }
  97. }*/
  98. }
  99. function onUnsubscribed($packet)
  100. {
  101. $arr = $packet->content;
  102. // Set the bookmark
  103. $r = new Rooms;
  104. $r->setBookmark();
  105. Notification::append(null, $this->__('group.unsubscribed'));
  106. }
  107. private function displayItems($server, $node)
  108. {
  109. if(!$this->validateServerNode($server, $node)) return;
  110. $html = $this->prepareGroup($server, $node);
  111. $header = $this->prepareHeader($server, $node);
  112. Header::fill($header);
  113. RPC::call('movim_fill', 'group_widget', $html);
  114. }
  115. function ajaxGetMetadata($server, $node)
  116. {
  117. if(!$this->validateServerNode($server, $node)) return;
  118. $r = new GetMetadata;
  119. $r->setTo($server)->setNode($node)
  120. ->request();
  121. }
  122. function ajaxGetConfig($server, $node){
  123. if(!$this->validateServerNode($server, $node)) return;
  124. $r = new GetConfig;
  125. $r->setTo($server)
  126. ->setNode($node)
  127. ->request();
  128. }
  129. function ajaxSetConfig($data, $server, $node){
  130. if(!$this->validateServerNode($server, $node)) return;
  131. $r = new SetConfig;
  132. $r->setTo($server)
  133. ->setNode($node)
  134. ->setData($data)
  135. ->request();
  136. }
  137. function ajaxGetItems($server, $node)
  138. {
  139. if(!$this->validateServerNode($server, $node)) return;
  140. $r = new GetItemsId;
  141. $r->setTo($server)
  142. ->setNode($node);
  143. /*$pd = new \Modl\PostnDAO();
  144. $posts = $pd->getNodeUnfiltered($server, $node, 0, 1);
  145. if(isset($posts[0])) {
  146. $r->setSince($posts[0]->updated);
  147. }*/
  148. $r->request();
  149. RPC::call('Group.addLoad');
  150. }
  151. function ajaxGetAffiliations($server, $node){
  152. if(!$this->validateServerNode($server, $node)) return;
  153. $r = new GetAffiliations;
  154. $r->setTo($server)->setNode($node)
  155. ->request();
  156. }
  157. function ajaxAskSubscribe($server, $node)
  158. {
  159. if(!$this->validateServerNode($server, $node)) return;
  160. $view = $this->tpl();
  161. $view->assign('server', $server);
  162. $view->assign('node', $node);
  163. $pd = new \Modl\ItemDAO;
  164. $item = $pd->getItem($server, $node);
  165. if(isset($item)) {
  166. $view->assign('item', $item);
  167. } else {
  168. $view->assign('item', null);
  169. }
  170. Dialog::fill($view->draw('_group_subscribe', true));
  171. }
  172. function ajaxSubscribe($form, $server, $node)
  173. {
  174. if(!$this->validateServerNode($server, $node)) return;
  175. $g = new Subscribe;
  176. $g->setTo($server)
  177. ->setNode($node)
  178. ->setFrom($this->user->getLogin())
  179. ->setData($form)
  180. ->request();
  181. }
  182. function ajaxAskUnsubscribe($server, $node)
  183. {
  184. if(!$this->validateServerNode($server, $node)) return;
  185. $view = $this->tpl();
  186. $view->assign('server', $server);
  187. $view->assign('node', $node);
  188. $pd = new \Modl\ItemDAO;
  189. $item = $pd->getItem($server, $node);
  190. if(isset($item)) {
  191. $view->assign('item', $item);
  192. } else {
  193. $view->assign('item', null);
  194. }
  195. Dialog::fill($view->draw('_group_unsubscribe', true));
  196. }
  197. function ajaxUnsubscribe($server, $node)
  198. {
  199. if(!$this->validateServerNode($server, $node)) return;
  200. $sd = new \Modl\SubscriptionDAO();
  201. foreach($sd->get($server, $node) as $s) {
  202. $g = new Unsubscribe;
  203. $g->setTo($server)
  204. ->setNode($node)
  205. ->setSubid($s->subid)
  206. ->setFrom($this->user->getLogin())
  207. ->request();
  208. }
  209. }
  210. function ajaxClear()
  211. {
  212. $html = $this->prepareEmpty();
  213. RPC::call('movim_fill', 'group_widget', $html);
  214. }
  215. function prepareEmpty()
  216. {
  217. $view = $this->tpl();
  218. $html = $view->draw('_group_empty', true);
  219. return $html;
  220. }
  221. private function prepareHeader($server, $node)
  222. {
  223. $pd = new \Modl\ItemDAO;
  224. $item = $pd->getItem($server, $node);
  225. $pd = new \Modl\SubscriptionDAO;
  226. $subscription = $pd->get($server, $node);
  227. $view = $this->tpl();
  228. $view->assign('item', $item);
  229. $view->assign('subscription', $subscription);
  230. $view->assign('role', $this->_role);
  231. return $view->draw('_group_header', true);
  232. }
  233. private function prepareGroup($server, $node)
  234. {
  235. $pd = new \Modl\PostnDAO();
  236. $posts = $pd->getNodeUnfiltered($server, $node, 0, $this->_paging);
  237. $view = $this->tpl();
  238. $view->assign('posts', $posts);
  239. $html = $view->draw('_group_posts', true);
  240. return $html;
  241. }
  242. private function validateServerNode($server, $node)
  243. {
  244. $validate_server = Validator::string()->noWhitespace()->length(6, 40);
  245. $validate_node = Validator::string()->length(3, 100);
  246. if(!$validate_server->validate($server)
  247. || !$validate_node->validate($node)
  248. ) return false;
  249. else return true;
  250. }
  251. function display()
  252. {
  253. }
  254. }