public function executeSend(sfWebRequest $request) { $this->forward404Unless($request->isMethod('post')); if ($this->getUser()->getApiUserId()) { sfConfig::set('app_recaptcha_active', false); } $this->form = new FeedbackForm(); if ($this->getUser()->getApiUserId()) { unset($this->form['name']); unset($this->form['email']); } $requestData = $request->getParameter($this->form->getName()); if (sfConfig::get('app_recaptcha_active', false)) { $requestData['challenge'] = $this->getRequestParameter('recaptcha_challenge_field'); $requestData['response'] = $this->getRequestParameter('recaptcha_response_field'); } $this->form->bind($requestData); if ($this->form->isValid()) { if ($this->getUser()->getApiUserId()) { $user_data = Api::getInstance()->get('user/' . $this->getUser()->getApiUserId(), true); $user = ApiDoctrine::createQuickObject($user_data['body']); } else { $user = null; } $values = $this->form->getValues(); $name = $this->getUser()->getApiUserId() ? $user->getPreferredName() ? $user->getPreferredName() : $user->getFullName() : $this->form->getValue('name'); $email = $this->getUser()->getApiUserId() ? $user->getEmailAddress() : $this->form->getValue('email'); $signinUrl = $this->getUser()->getReferer($request->getReferer()); $message = $name . ' ' . $email . "\n" . $values['message'] . "\nReferer:" . $signinUrl; $to = ProjectConfiguration::getApplicationFeedbackAddress(); $subjects = sfConfig::get('app_feedback_subjects', array()); $subject = ProjectConfiguration::getApplicationName() . ': ' . (array_key_exists($values['subject'], $subjects) ? $subjects[$values['subject']] : $values['subject']); $from_address = $this->getUser()->getApiUserId() ? "{$name} <{$email}>" : ProjectConfiguration::getApplicationEmailAddress(); AppMail::sendMail($to, $from_address, $subject, $message); $this->getUser()->setFlash('notice', 'Your message has been sent to ' . ProjectConfiguration::getApplicationName() . '.'); return $this->redirect('' != $signinUrl ? $signinUrl : '@homepage'); } $this->getUser()->setReferer($this->getContext()->getActionStack()->getSize() > 1 ? $request->getUri() : $request->getReferer()); $this->setTemplate('feedback'); }
public function executeUpdate(sfWebRequest $request) { // Clear pluploader session variables $this->getUser()->getAttributeHolder()->remove('valid_episode'); $this->getUser()->getAttributeHolder()->remove('valid_episode_id'); $this->getUser()->getAttributeHolder()->remove('valid_episode_user_id'); $this->getUser()->getAttributeHolder()->remove('valid_episode_audio_file_hash'); $this->getUser()->getAttributeHolder()->remove('valid_episode_image_file_hash'); $this->getUser()->getAttributeHolder()->remove('valid_episode_user_id'); $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT)); $auth_key = $this->getUser()->getApiAuthKey(); $episode_data = Api::getInstance()->setUser($auth_key)->get('episode/' . $request->getParameter('id'), true); $episode = ApiDoctrine::createObject('Episode', $episode_data['body']); $quick_episode = ApiDoctrine::createQuickObject($episode_data['body']); $this->forward404Unless($episode && $episode->getId()); $permission = $this->verifyPermissionsForCurrentUser($quick_episode->getSubredditId(), array('admin')); $assignment_data = Api::getInstance()->setUser($auth_key)->get('episodeassignment/' . $quick_episode->getEpisodeAssignmentId(), true); $assignment = ApiDoctrine::createQuickObject($assignment_data['body']); $this->forward404Unless($permission || $assignment && $assignment->getSfGuardUserId() == $this->getUser()->getApiUserId()); $episode->setIsNsfw($quick_episode->getIsNsfw()); $phone_data = Api::getInstance()->setUser($auth_key)->get('subreddittropo?subreddit_id=' . $episode->getSubredditId(), true); $this->phone_numbers = ApiDoctrine::createQuickObjectArray($phone_data['body']); $this->form = new EpisodeForm($episode); $this->form->setDefault('is_nsfw', $quick_episode->getIsNsfw()); unset($this->form['sf_guard_user_id']); unset($this->form['file_is_remote']); unset($this->form['remote_url']); unset($this->form['approved_at']); unset($this->form['nice_filename']); if (!$permission && $this->form->getObject()->getApprovedAt()) { unset($this->form['title'], $this->form['description']); } if (!$permission && !$this->form->getObject()->getApprovedAt()) { unset($this->form['reddit_post_url']); } $this->processForm($request, $this->form); $this->setTemplate('edit'); }
public function executeEpisodes(sfWebRequest $request) { $user_id = $this->getUser()->getApiUserId(); $this->forward404Unless($user_id); $user_data = Api::getInstance()->get('user/' . $user_id); $this->user = ApiDoctrine::createQuickObject($user_data['body']); $page = $this->page = (int) $request->getParameter('page', 1); $this->forward404Unless(is_integer($page)); $page = $page == 1 || $page == 0 ? '' : '&page=' . $page; $subreddit_ids = array(); $released_data = Api::getInstance()->get('episodeassignment/released?sf_guard_user_id=' . $user_id . $page); $this->released = ApiDoctrine::createObjectArray('EpisodeAssignment', $released_data['body']); $future_data = Api::getInstance()->get('episodeassignment/future?sf_guard_user_id=' . $user_id); $this->future = ApiDoctrine::createObjectArray('EpisodeAssignment', $future_data['body']); $current_data = Api::getInstance()->get('episodeassignment/current?sf_guard_user_id=' . $user_id); $this->current = ApiDoctrine::createObjectArray('EpisodeAssignment', $current_data['body']); foreach ($this->future as $assignment) { if (!in_array($assignment->getEpisode()->getSubredditId(), $subreddit_ids)) { $subreddit_ids[] = $assignment->getEpisode()->getSubredditId(); } } foreach ($this->current as $assignment) { if (!in_array($assignment->getEpisode()->getSubredditId(), $subreddit_ids)) { $subreddit_ids[] = $assignment->getEpisode()->getSubredditId(); } } foreach ($this->released as $assignment) { if (!in_array($assignment->getEpisode()->getSubredditId(), $subreddit_ids)) { $subreddit_ids[] = $assignment->getEpisode()->getSubredditId(); } } $memberships = array(); $moderator_data = Api::getInstance()->get('membershiptype?type=moderator', true); $membership_objects = ApiDoctrine::createQuickObjectArray($moderator_data['body']); foreach ($membership_objects as $membershiptype) { $memberships[] = $membershiptype->getIncremented(); } $admin_data = Api::getInstance()->get('membershiptype?type=admin', true); $membership_objects = ApiDoctrine::createQuickObjectArray($admin_data['body']); foreach ($membership_objects as $membershiptype) { $memberships[] = $membershiptype->getIncremented(); } $approval_data = Api::getInstance()->get('subredditmembership?sf_guard_user_id=' . $this->getUser()->getApiUserId() . '&membership_id=' . implode(',', $memberships), true); $approval_memberships = ApiDoctrine::createQuickObjectArray($approval_data['body']); $this->approvals = array(); if (count($approval_memberships)) { $approval_subreddits = array(); foreach ($approval_memberships as $membership) { $approval_subreddits[] = $membership->getSubredditId(); if (!in_array($membership->getSubredditId(), $subreddit_ids)) { $subreddit_ids[] = $membership->getSubredditId(); } } $approval_episode_data = Api::getInstance()->get('episode/future?is_submitted=1&is_approved=0&subreddit_id=' . implode(',', $approval_subreddits)); $this->approvals = ApiDoctrine::createQuickObjectArray($approval_episode_data['body']); } $subreddit_data = Api::getInstance()->get('subreddit?id=' . implode(',', $subreddit_ids), true); $subreddits = ApiDoctrine::createQuickObjectArray($subreddit_data['body']); $this->subreddits = array(); foreach ($subreddits as $subreddit) { $this->subreddits[$subreddit->getId()] = $subreddit; } $deadline_data = Api::getInstance()->get('subredditdeadline?subreddit_id=' . implode(',', $subreddit_ids), true); $deadlines = ApiDoctrine::createQuickObjectArray($deadline_data['body']); $this->deadlines = array(); foreach ($deadlines as $deadline) { if (!array_key_exists($deadline->getSubredditId(), $this->deadlines)) { $this->deadlines[$deadline->getSubredditId()] = array(); } $this->deadlines[$deadline->getSubredditId()][$deadline->getAuthorTypeId()] = $deadline->getSeconds(); } }
public function executeSend(sfWebRequest $request) { $this->forward404Unless($request->getParameter('id')); $auth_key = $this->getUser()->getApiAuthKey(); $message = new Message(); $user_data = Api::getInstance()->setUser($auth_key)->get('user/' . $request->getParameter('id'), true); $this->recipient = ApiDoctrine::createQuickObject($user_data['body']); $message->setRecipientId($request->getParameter('id')); if ($request->getParameter('previous', false)) { $message->setPreviousMessageId($request->getParameter('previous')); } $this->form = new MessageForm($message); }
public function validateUpload($payload, sfWebRequest $request = null) { if (!$request->hasParameter('id')) { throw new sfException('No subreddit given.', 400); } $this->object = SurbedditTable::getInstance()->find($request->hasParameter('id')); if (!$this->object) { throw new sfException('Cannot find subreddit.', 404); } $content_file = $request->getFiles('filename'); $this->_temporary_file_location = array_key_exists('tmp_name', $content_file) ? $content_file['tmp_name'] : null; $this->_nice_filename = array_key_exists('name', $content_file) ? $content_file['name'] : null; /* Check that the current user is an admin of the Subreddit or otherwise * has permission to upload. */ $membership_data = Api::getInstance()->setUser($auth_key)->get('subredditmembership?' . 'sf_guard_user_id=' . $this->getUser()->getGuardUser()->getIncremented() . '&subreddit_id=' . $this->object->getIncremented(), true); $membership = is_array($membership_data['body']) && array_key_exists(0, $membership_data['body']) ? ApiDoctrine::createQuickObject($membership_data['body'][0]) : null; $valid_admin = (bool) ($membership && in_array($membership->getMembership()->getType(), array('admin'))); if (!$this->getUser()->isSuperAdmin() && !$valid_admin) { throw new sfException('Your user does not have permissions to ' . 'upload audio for this Subreddit.', 403); } }
protected function processDeadlineForm(sfWebRequest $request, sfForm $form) { $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); if ($form->isValid()) { $auth_key = $this->getUser()->getApiAuthKey(); if ($form->getValue('id')) { // Update existing item. $values = $form->getValues(); $id = $form->getValue('id'); $deadline = $form->getObject(); $deadline_array = $deadline->toArray(); foreach ($deadline_array as $key => $value) { if (array_key_exists($key, $values) && $values[$key] == $deadline_array[$key]) { unset($values[$key]); } } if (array_key_exists('restricted_until_previous_misses_deadline', $values)) { $values['restricted_until_previous_misses_deadline'] = (bool) $values['restricted_until_previous_misses_deadline'] ? 1 : 0; } if (count($values)) { $result = Api::getInstance()->setUser($auth_key)->put('subredditdeadline/' . $id, $values); $success = $this->checkHttpCode($result, 'put', 'subredditdeadline/' . $id, json_encode($values)); if ($success) { $this->getUser()->setFlash('notice', 'Deadline was edited successfully.'); } } } else { // Create new item $values = $form->getValues(); $deadline = $form->getObject(); $subreddit_id = $request->getParameter('subreddit_id'); foreach ($values as $key => $value) { if (is_null($value)) { unset($values[$key]); } } $values['subreddit_id'] = $subreddit_id; $result = Api::getInstance()->setUser($auth_key)->post('subredditdeadline', $values); $success = $this->checkHttpCode($result, 'post', 'subredditdeadline', json_encode($values)); if ($success) { $this->getUser()->setFlash('notice', 'Deadline was created successfully.'); } $deadline = ApiDoctrine::createQuickObject($result['body']); if (!$deadline || !$deadline->getIncremented()) { $this->redirect('subreddit/deadlines?id=' . $subreddit_id); } } $this->redirect('subreddit/edit_deadline?id=' . $id); } }
protected function validateSubredditForOutroUpload($id, $filename) { if (is_null($this->getUser()->getAttribute('valid_subreddit', null))) { // Base value is false $this->getUser()->setAttribute('valid_subreddit', false); $subreddit = EpisodeTable::getInstance()->find($id); if ($subreddit) { // Check if the current user has permission to edit the deadline. $membership_data = Api::getInstance()->setUser($auth_key)->get('subredditmembership?sf_guard_user_id=' . $this->getUser()->getApiUserId() . '&subreddit_id=' . $id, true); $membership = is_array($membership_data['body']) && array_key_exists(0, $membership_data['body']) ? ApiDoctrine::createQuickObject($membership_data['body'][0]) : null; $valid_admin = (bool) ($membership && in_array($membership->getMembership()->getType(), array('admin'))); if ($valid_admin || $this->getUser()->isSuperAdmin()) { $valid_subreddit = true; $this->getUser()->setAttribute('valid_subreddit', true); $this->getUser()->setAttribute('valid_subreddit_id', $id); $this->getUser()->setAttribute('valid_subreddit_domain', $subreddit->getDomain()); $this->getUser()->setAttribute('valid_subreddit_audio_file_hash', $this->generateFilenameHashForSubredditOutro($filename)); $subreddit->setEpisodeOutro($this->generateFilenameHashForSubredditOutro($filename)); $subreddit->setSkipBackup(true); $subreddit->save(); } } } return $this->getUser()->getAttribute('valid_subreddit', false); }