public function confirmAction() { if (!$this->_helper->requireUser()->isValid()) { return; } // Get viewer and other user $viewer = Engine_Api::_()->user()->getViewer(); if (null == ($user_id = $this->_getParam('user_id')) || null == ($user = Engine_Api::_()->getItem('user', $user_id))) { $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('No member specified'); return; } // Make form $this->view->form = $form = new User_Form_Friends_Confirm(); if (!$this->getRequest()->isPost()) { $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('No action taken'); return; } if (!$form->isValid($this->getRequest()->getPost())) { $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('Invalid data'); return; } $friendship = $viewer->membership()->getRow($user); if ($friendship->active) { $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('Already friends'); return; } // Process $db = Engine_Api::_()->getDbtable('membership', 'user')->getAdapter(); $db->beginTransaction(); try { $viewer->membership()->setResourceApproved($user); // Add activity if (!$user->membership()->isReciprocal()) { Engine_Api::_()->getDbtable('actions', 'activity')->addActivity($user, $viewer, 'friends_follow', '{item:$subject} is now following {item:$object}.'); } else { Engine_Api::_()->getDbtable('actions', 'activity')->addActivity($user, $viewer, 'friends', '{item:$object} is now friends with {item:$subject}.'); Engine_Api::_()->getDbtable('actions', 'activity')->addActivity($viewer, $user, 'friends', '{item:$object} is now friends with {item:$subject}.'); } // Add notification if (!$user->membership()->isReciprocal()) { Engine_Api::_()->getDbtable('notifications', 'activity')->addNotification($user, $viewer, $user, 'friend_follow_accepted'); } else { Engine_Api::_()->getDbtable('notifications', 'activity')->addNotification($user, $viewer, $user, 'friend_accepted'); } // Set the requests as handled $notification = Engine_Api::_()->getDbtable('notifications', 'activity')->getNotificationBySubjectAndType($viewer, $user, 'friend_request'); if ($notification) { $notification->mitigated = true; $notification->read = 1; $notification->save(); } $notification = Engine_Api::_()->getDbtable('notifications', 'activity')->getNotificationBySubjectAndType($viewer, $user, 'friend_follow_request'); if ($notification) { $notification->mitigated = true; $notification->read = 1; $notification->save(); } // Increment friends counter Engine_Api::_()->getDbtable('statistics', 'core')->increment('user.friendships'); $db->commit(); $message = Zend_Registry::get('Zend_Translate')->_('You are now friends with %s'); $message = sprintf($message, $user->__toString()); $this->view->status = true; $this->view->message = $message; return $this->_forward('success', 'utility', 'core', array('smoothboxClose' => true, 'parentRefresh' => true, 'messages' => array($message))); } catch (Exception $e) { $db->rollBack(); $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('An error has occurred.'); $this->view->exception = $e->__toString(); } }
public function followAction() { if (!$this->_helper->requireUser()->isValid()) { return; } // Get id of friend to add $user_id = $this->_getParam('user_id', null); if (null == $user_id) { $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('No member specified'); return; } // Make form $this->view->form = $form = new User_Form_Friends_Confirm(); if (!$this->getRequest()->isPost()) { $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('No action taken'); return; } if (!$form->isValid($this->getRequest()->getPost())) { $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('Invalid data'); return; } // Process $db = Engine_Api::_()->getDbtable('membership', 'user')->getAdapter(); $db->beginTransaction(); try { $viewer = $this->_helper->api()->user()->getViewer(); $user = $this->_helper->api()->user()->getUser($user_id); $user->membership()->setFollowApproved($viewer); // Add activity Engine_Api::_()->getDbtable('actions', 'activity')->addActivity($user, $viewer, 'friends_follow', '{item:$object} is now following {item:$subject}.'); // Add notification Engine_Api::_()->getDbtable('notifications', 'activity')->addNotification($user, $viewer, $user, 'friend_follow_accepted'); // Set the request as handled $notification = Engine_Api::_()->getDbtable('notifications', 'activity')->getNotificationBySubjectAndType($viewer, $user, 'friend_follow_request'); if ($notification) { $notification->mitigated = true; $notification->read = 1; $notification->save(); } $db->commit(); $message = Zend_Registry::get('Zend_Translate')->_('%s is now following you'); $message = sprintf($message, $user->__toString()); $this->view->status = true; $this->view->message = $message; $this->_forward('success', 'utility', 'core', array('smoothboxClose' => true, 'parentRefresh' => true, 'messages' => array($message))); } catch (Exception $e) { $db->rollBack(); $this->view->status = false; $this->view->error = Zend_Registry::get('Zend_Translate')->_('An error has occurred.'); $this->view->exception = $e->__toString(); } }