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.

124 lines
3.3 KiB

  1. <?php
  2. use Movim\Image;
  3. use Moxl\Xec\Action\Avatar\Get;
  4. use Moxl\Xec\Action\Avatar\Set;
  5. class Avatar extends \Movim\Widget\Base
  6. {
  7. public function load()
  8. {
  9. $this->addcss('avatar.css');
  10. $this->addjs('avatar.js');
  11. $this->registerEvent('avatar_get_handle', 'onGetAvatar');
  12. $this->registerEvent('avatar_set_handle', 'onSetAvatar');
  13. $this->registerEvent('avatar_set_pubsub', 'onSetBanner');
  14. $this->registerEvent('avatar_set_errorfeaturenotimplemented', 'onMyAvatarError');
  15. $this->registerEvent('avatar_set_errorbadrequest', 'onMyAvatarError');
  16. $this->registerEvent('avatar_set_errornotallowed', 'onMyAvatarError');
  17. }
  18. public function onSetAvatar($packet)
  19. {
  20. $this->ajaxGetAvatar();
  21. $this->rpc('MovimTpl.fill', '#avatar', $this->prepareForm());
  22. }
  23. public function onSetBanner($packet)
  24. {
  25. global $loop;
  26. $loop->addTimer(2, function () {
  27. $this->rpc('MovimTpl.fill', '#avatar', $this->prepareForm());
  28. });
  29. }
  30. public function onGetAvatar($packet)
  31. {
  32. $this->rpc('MovimTpl.fill', '#avatar', $this->prepareForm());
  33. $this->rpc('Dialog_ajaxClear');
  34. Toast::send($this->__('avatar.updated'));
  35. }
  36. public function onMyAvatarError()
  37. {
  38. $this->rpc('MovimTpl.fill', '#avatar', $this->prepareForm());
  39. Toast::send($this->__('avatar.not_updated'));
  40. }
  41. public function prepareForm()
  42. {
  43. $avatarform = $this->tpl();
  44. $avatarform->assign('me', \App\Contact::firstOrNew(['id' => $this->user->id]));
  45. return $avatarform->draw('_avatar');
  46. }
  47. public function ajaxGetForm()
  48. {
  49. $view = $this->tpl();
  50. $view->assign('me', \App\Contact::firstOrNew(['id' => $this->user->id]));
  51. Dialog::fill($view->draw('_avatar_form'));
  52. }
  53. public function ajaxGetBannerForm()
  54. {
  55. $view = $this->tpl();
  56. $view->assign('me', \App\Contact::firstOrNew(['id' => $this->user->id]));
  57. Dialog::fill($view->draw('_avatar_banner_form'));
  58. }
  59. public function ajaxGetAvatar()
  60. {
  61. $r = new Get;
  62. $r->setTo($this->user->id)
  63. ->request();
  64. }
  65. public function ajaxHttpGetCurrent()
  66. {
  67. $this->rpc('MovimTpl.fill', '#avatar', $this->prepareForm());
  68. }
  69. public function ajaxSubmit($avatar)
  70. {
  71. if (empty($avatar->photobin->value)) return;
  72. $p = new Image;
  73. $p->fromBase($avatar->photobin->value);
  74. $p->setKey($this->user->id.'avatar');
  75. $p->save(false, false, 'jpeg', 60);
  76. // Reload
  77. $p->load('jpeg');
  78. $r = new Set;
  79. $r->setData($p->toBase())->request();
  80. $p->remove();
  81. $p->remove('jpeg');
  82. }
  83. public function ajaxBannerSubmit($banner)
  84. {
  85. if (empty($banner->photobin->value)) return;
  86. $key = $this->user->id.'banner';
  87. $p = new Image;
  88. $p->fromBase($banner->photobin->value);
  89. $p->setKey($key);
  90. $p->save(false, false, 'jpeg', 60);
  91. // Reload
  92. $p->load('jpeg');
  93. $r = new Set;
  94. $r->setNode('urn:xmpp:movim-banner:0')
  95. ->setUrl(Image::getOrCreate($key, false, false, 'jpeg', true))
  96. ->setWidthMetadata(1280)
  97. ->setHeightMetadata(320)
  98. ->setData($p->toBase())
  99. ->request();
  100. }
  101. }