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);
 }