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.

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