PageRenderTime 41ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/application/modules/Event/controllers/EventController.php

https://github.com/grandison/budo16
PHP | 383 lines | 280 code | 62 blank | 41 comment | 39 complexity | 8bbdcd80fbc7d37e596a35c3f6bd4901 MD5 | raw file
  1. <?php
  2. /**
  3. * SocialEngine
  4. *
  5. * @category Application_Extensions
  6. * @package Event
  7. * @copyright Copyright 2006-2010 Webligo Developments
  8. * @license http://www.socialengine.net/license/
  9. * @version $Id: EventController.php 8015 2010-12-09 21:42:51Z jung $
  10. * @author John
  11. */
  12. /**
  13. * @category Application_Extensions
  14. * @package Event
  15. * @copyright Copyright 2006-2010 Webligo Developments
  16. * @license http://www.socialengine.net/license/
  17. */
  18. class Event_EventController extends Core_Controller_Action_Standard
  19. {
  20. public function init()
  21. {
  22. $id = $this->_getParam('event_id', $this->_getParam('id', null));
  23. if( $id )
  24. {
  25. $event = Engine_Api::_()->getItem('event', $id);
  26. if( $event )
  27. {
  28. Engine_Api::_()->core()->setSubject($event);
  29. }
  30. }
  31. }
  32. public function editAction()
  33. {
  34. $event_id = $this->getRequest()->getParam('event_id');
  35. $event = Engine_Api::_()->getItem('event', $event_id);
  36. $viewer = Engine_Api::_()->user()->getViewer();
  37. if( !($this->_helper->requireAuth()->setAuthParams(null, null, 'edit')->isValid() || $event->isOwner($viewer)) ) {
  38. return;
  39. }
  40. // Create form
  41. $event = Engine_Api::_()->core()->getSubject();
  42. $this->view->form = $form = new Event_Form_Edit(array('parent_type'=>$event->parent_type, 'parent_id'=>$event->parent_id));
  43. // Populate form options
  44. $categoryTable = Engine_Api::_()->getDbtable('categories', 'event');
  45. foreach( $categoryTable->fetchAll($categoryTable->select()->order('title ASC')) as $category ) {
  46. $form->category_id->addMultiOption($category->category_id, $category->title);
  47. }
  48. if( !$this->getRequest()->isPost() )
  49. {
  50. // Populate auth
  51. $auth = Engine_Api::_()->authorization()->context;
  52. if( $event->parent_type == 'group' ) {
  53. $roles = array('owner', 'member', 'parent_member', 'registered', 'everyone');
  54. } else {
  55. $roles = array('owner', 'member', 'owner_member', 'owner_member_member', 'owner_network', 'registered', 'everyone');
  56. }
  57. foreach( $roles as $role ) {
  58. if( isset($form->auth_view->options[$role]) && $auth->isAllowed($event, $role, 'view') ) {
  59. $form->auth_view->setValue($role);
  60. }
  61. if( isset($form->auth_comment->options[$role]) && $auth->isAllowed($event, $role, 'comment') ) {
  62. $form->auth_comment->setValue($role);
  63. }
  64. if( isset($form->auth_photo->options[$role]) && $auth->isAllowed($event, $role, 'photo') ) {
  65. $form->auth_photo->setValue($role);
  66. }
  67. }
  68. $form->auth_invite->setValue($auth->isAllowed($event, 'member', 'invite'));
  69. $form->populate($event->toArray());
  70. // Convert and re-populate times
  71. $start = strtotime($event->starttime);
  72. $end = strtotime($event->endtime);
  73. $oldTz = date_default_timezone_get();
  74. date_default_timezone_set($viewer->timezone);
  75. $start = date('Y-m-d H:i:s', $start);
  76. $end = date('Y-m-d H:i:s', $end);
  77. date_default_timezone_set($oldTz);
  78. $form->populate(array(
  79. 'starttime' => $start,
  80. 'endtime' => $end,
  81. ));
  82. return;
  83. }
  84. if( !$form->isValid($this->getRequest()->getPost()) )
  85. {
  86. return;
  87. }
  88. // Process
  89. $values = $form->getValues();
  90. // Convert times
  91. $oldTz = date_default_timezone_get();
  92. date_default_timezone_set($viewer->timezone);
  93. $start = strtotime($values['starttime']);
  94. $end = strtotime($values['endtime']);
  95. date_default_timezone_set($oldTz);
  96. $values['starttime'] = date('Y-m-d H:i:s', $start);
  97. $values['endtime'] = date('Y-m-d H:i:s', $end);
  98. // Check parent
  99. if( !isset($values['host']) && $event->parent_type == 'group' && Engine_Api::_()->hasItemType('group') ) {
  100. $group = Engine_Api::_()->getItem('group', $event->parent_id);
  101. $values['host'] = $group->getTitle();
  102. }
  103. // Process
  104. $db = Engine_Api::_()->getItemTable('event')->getAdapter();
  105. $db->beginTransaction();
  106. try
  107. {
  108. // Set event info
  109. $event->setFromArray($values);
  110. $event->save();
  111. if( !empty($values['photo']) ) {
  112. $event->setPhoto($form->photo);
  113. }
  114. // Process privacy
  115. $auth = Engine_Api::_()->authorization()->context;
  116. if( $event->parent_type == 'group' ) {
  117. $roles = array('owner', 'member', 'parent_member', 'registered', 'everyone');
  118. } else {
  119. $roles = array('owner', 'member', 'owner_member', 'owner_member_member', 'owner_network', 'registered', 'everyone');
  120. }
  121. $viewMax = array_search($values['auth_view'], $roles);
  122. $commentMax = array_search($values['auth_comment'], $roles);
  123. $photoMax = array_search($values['auth_photo'], $roles);
  124. foreach( $roles as $i => $role ) {
  125. $auth->setAllowed($event, $role, 'view', ($i <= $viewMax));
  126. $auth->setAllowed($event, $role, 'comment', ($i <= $commentMax));
  127. $auth->setAllowed($event, $role, 'photo', ($i <= $photoMax));
  128. }
  129. $auth->setAllowed($event, 'member', 'invite', $values['auth_invite']);
  130. // Commit
  131. $db->commit();
  132. }
  133. catch( Engine_Image_Exception $e )
  134. {
  135. $db->rollBack();
  136. $form->addError(Zend_Registry::get('Zend_Translate')->_('The image you selected was too large.'));
  137. }
  138. catch( Exception $e )
  139. {
  140. $db->rollBack();
  141. throw $e;
  142. }
  143. $db->beginTransaction();
  144. try {
  145. // Rebuild privacy
  146. $actionTable = Engine_Api::_()->getDbtable('actions', 'activity');
  147. foreach( $actionTable->getActionsByObject($event) as $action ) {
  148. $actionTable->resetActivityBindings($action);
  149. }
  150. $db->commit();
  151. }
  152. catch( Exception $e )
  153. {
  154. $db->rollBack();
  155. throw $e;
  156. }
  157. // Redirect
  158. if( $this->_getParam('ref') === 'profile' ) {
  159. $this->_redirectCustom($event);
  160. } else {
  161. $this->_redirectCustom(array('route' => 'event_general', 'action' => 'manage'));
  162. }
  163. }
  164. public function inviteAction()
  165. {
  166. if( !$this->_helper->requireUser()->isValid() ) return;
  167. if( !$this->_helper->requireSubject('event')->isValid() ) return;
  168. // @todo auth
  169. // Prepare data
  170. $viewer = Engine_Api::_()->user()->getViewer();
  171. $this->view->event = $event = Engine_Api::_()->core()->getSubject();
  172. $this->view->friends = $friends = $viewer->membership()->getMembers();
  173. // Prepare form
  174. $this->view->form = $form = new Event_Form_Invite();
  175. $count = 0;
  176. foreach( $friends as $friend )
  177. {
  178. if( $event->membership()->isMember($friend, null) ) continue;
  179. $form->users->addMultiOption($friend->getIdentity(), $friend->getTitle());
  180. $count++;
  181. }
  182. $this->view->count = $count;
  183. // Not posting
  184. if( !$this->getRequest()->isPost() )
  185. {
  186. return;
  187. }
  188. if( !$form->isValid($this->getRequest()->getPost()) )
  189. {
  190. return;
  191. }
  192. // Process
  193. $table = $event->getTable();
  194. $db = $table->getAdapter();
  195. $db->beginTransaction();
  196. try
  197. {
  198. $usersIds = $form->getValue('users');
  199. $notifyApi = Engine_Api::_()->getDbtable('notifications', 'activity');
  200. foreach( $friends as $friend )
  201. {
  202. if( !in_array($friend->getIdentity(), $usersIds) )
  203. {
  204. continue;
  205. }
  206. $event->membership()->addMember($friend)
  207. ->setResourceApproved($friend);
  208. $notifyApi->addNotification($friend, $viewer, $event, 'event_invite');
  209. }
  210. $db->commit();
  211. }
  212. catch( Exception $e )
  213. {
  214. $db->rollBack();
  215. throw $e;
  216. }
  217. return $this->_forward('success', 'utility', 'core', array(
  218. 'messages' => array(Zend_Registry::get('Zend_Translate')->_('Members invited')),
  219. 'layout' => 'default-simple',
  220. 'parentRefresh' => true,
  221. ));
  222. }
  223. public function styleAction()
  224. {
  225. if( !$this->_helper->requireAuth()->setAuthParams(null, null, 'edit')->isValid() ) return;
  226. if( !$this->_helper->requireAuth()->setAuthParams(null, null, 'style')->isValid() ) return;
  227. $user = Engine_Api::_()->user()->getViewer();
  228. $event = Engine_Api::_()->core()->getSubject('event');
  229. // Make form
  230. $this->view->form = $form = new Event_Form_Style();
  231. // Get current row
  232. $table = Engine_Api::_()->getDbtable('styles', 'core');
  233. $select = $table->select()
  234. ->where('type = ?', 'event')
  235. ->where('id = ?', $event->getIdentity())
  236. ->limit(1);
  237. $row = $table->fetchRow($select);
  238. // Check post
  239. if( !$this->getRequest()->isPost() )
  240. {
  241. $form->populate(array(
  242. 'style' => ( null === $row ? '' : $row->style )
  243. ));
  244. return;
  245. }
  246. if( !$form->isValid($this->getRequest()->getPost()) )
  247. {
  248. return;
  249. }
  250. // Cool! Process
  251. $style = $form->getValue('style');
  252. // Save
  253. if( null == $row )
  254. {
  255. $row = $table->createRow();
  256. $row->type = 'event';
  257. $row->id = $event->getIdentity();
  258. }
  259. $row->style = $style;
  260. $row->save();
  261. $this->view->draft = true;
  262. $this->view->message = Zend_Registry::get('Zend_Translate')->_('Your changes have been saved.');
  263. $this->_forward('success', 'utility', 'core', array(
  264. 'smoothboxClose' => true,
  265. 'parentRefresh' => false,
  266. 'messages' => array(Zend_Registry::get('Zend_Translate')->_('Your changes have been saved.'))
  267. ));
  268. }
  269. public function deleteAction()
  270. {
  271. $viewer = Engine_Api::_()->user()->getViewer();
  272. $event = Engine_Api::_()->getItem('event', $this->getRequest()->getParam('event_id'));
  273. if( !$this->_helper->requireAuth()->setAuthParams($event, null, 'delete')->isValid()) return;
  274. // In smoothbox
  275. $this->_helper->layout->setLayout('default-simple');
  276. // Make form
  277. $this->view->form = $form = new Event_Form_Delete();
  278. if( !$event )
  279. {
  280. $this->view->status = false;
  281. $this->view->error = Zend_Registry::get('Zend_Translate')->_("Event doesn't exists or not authorized to delete");
  282. return;
  283. }
  284. if( !$this->getRequest()->isPost() )
  285. {
  286. $this->view->status = false;
  287. $this->view->error = Zend_Registry::get('Zend_Translate')->_('Invalid request method');
  288. return;
  289. }
  290. $db = $event->getTable()->getAdapter();
  291. $db->beginTransaction();
  292. try
  293. {
  294. $event->delete();
  295. $db->commit();
  296. }
  297. catch( Exception $e )
  298. {
  299. $db->rollBack();
  300. throw $e;
  301. }
  302. $this->view->status = true;
  303. $this->view->message = Zend_Registry::get('Zend_Translate')->_('The selected event has been deleted.');
  304. return $this->_forward('success' ,'utility', 'core', array(
  305. 'parentRedirect' => Zend_Controller_Front::getInstance()->getRouter()->assemble(array('action' => 'manage'), 'event_general', true),
  306. 'messages' => Array($this->view->message)
  307. ));
  308. }
  309. }