protected function buildPasteInfoDictionary(PhabricatorPaste $paste)
 {
     $content = null;
     $file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $paste->getFilePHID());
     if ($file) {
         $content = $file->loadFileData();
     }
     return array('id' => $paste->getID(), 'objectName' => 'P' . $paste->getID(), 'phid' => $paste->getPHID(), 'authorPHID' => $paste->getAuthorPHID(), 'filePHID' => $paste->getFilePHID(), 'title' => $paste->getTitle(), 'dateCreated' => $paste->getDateCreated(), 'language' => $paste->getLanguage(), 'uri' => PhabricatorEnv::getProductionURI('/P' . $paste->getID()), 'parentPHID' => $paste->getParentPHID(), 'content' => $content);
 }
 public function buildSideNavView(PhabricatorPaste $paste = null)
 {
     $nav = new AphrontSideNavFilterView();
     $nav->setBaseURI(new PhutilURI($this->getApplicationURI('filter/')));
     if ($paste) {
         $nav->addFilter('paste', 'P' . $paste->getID(), '/P' . $paste->getID());
         $nav->addSpacer();
     }
     $nav->addLabel('Create');
     $nav->addFilter('create', 'New Paste');
     $nav->addSpacer();
     $nav->addLabel('Pastes');
     $nav->addFilter('my', 'My Pastes');
     $nav->addFilter('all', 'All Pastes');
     return $nav;
 }
 public function buildSideNavView(PhabricatorPaste $paste = null)
 {
     $user = $this->getRequest()->getUser();
     $nav = new AphrontSideNavFilterView();
     $nav->setBaseURI(new PhutilURI($this->getApplicationURI('filter/')));
     if ($paste) {
         $nav->addFilter('paste', 'P' . $paste->getID(), '/P' . $paste->getID());
         $nav->addSpacer();
     }
     $nav->addLabel('Create');
     $nav->addFilter('edit', 'New Paste', $this->getApplicationURI(), $relative = false, $class = $user->isLoggedIn() ? null : 'disabled');
     $nav->addSpacer();
     $nav->addLabel('Pastes');
     if ($user->isLoggedIn()) {
         $nav->addFilter('my', 'My Pastes');
     }
     $nav->addFilter('all', 'All Pastes');
     return $nav;
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $paste = new PhabricatorPaste();
     $error_view = null;
     $e_text = true;
     $fork = $request->getInt('fork');
     $paste_text = null;
     $paste_parent = null;
     if ($request->isFormPost()) {
         $errors = array();
         $title = $request->getStr('title');
         $paste_language = $request->getStr('language');
         $text = $request->getStr('text');
         if (!strlen($text)) {
             $e_text = 'Required';
             $errors[] = 'The paste may not be blank.';
         } else {
             $e_text = null;
         }
         $parent = id(new PhabricatorPaste())->loadOneWhere('phid = %s', $request->getStr('parent'));
         if ($parent) {
             $paste->setParentPHID($parent->getPHID());
         }
         $paste->setTitle($title);
         if (!$errors) {
             if ($paste_language == 'infer') {
                 // If it's infer, store an empty string. Otherwise, store the
                 // language name. We do this so we can refer to 'infer' elsewhere
                 // in the code (such as default value) while retaining backwards
                 // compatibility with old posts with no language stored.
                 $paste_language = '';
             }
             $paste->setLanguage($paste_language);
             $paste_file = PhabricatorFile::newFromFileData($text, array('name' => $title, 'mime-type' => 'text/plain; charset=utf-8', 'authorPHID' => $user->getPHID()));
             $paste->setFilePHID($paste_file->getPHID());
             $paste->setAuthorPHID($user->getPHID());
             $paste->save();
             return id(new AphrontRedirectResponse())->setURI('/P' . $paste->getID());
         } else {
             $error_view = new AphrontErrorView();
             $error_view->setErrors($errors);
             $error_view->setTitle('A problem has occurred!');
         }
     } else {
         if ($fork) {
             $fork_paste = id(new PhabricatorPaste())->load($fork);
             if ($fork_paste) {
                 $paste->setTitle('Fork of ' . $fork_paste->getID() . ': ' . $fork_paste->getTitle());
                 $fork_file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $fork_paste->getFilePHID());
                 $paste_text = $fork_file->loadFileData();
                 $paste_language = nonempty($fork_paste->getLanguage(), 'infer');
                 $paste_parent = $fork_paste->getPHID();
             }
         } else {
             $paste_language = PhabricatorEnv::getEnvConfig('pygments.dropdown-default');
         }
     }
     $form = new AphrontFormView();
     $available_languages = PhabricatorEnv::getEnvConfig('pygments.dropdown-choices');
     asort($available_languages);
     $language_select = id(new AphrontFormSelectControl())->setLabel('Language')->setName('language')->setValue($paste_language)->setOptions($available_languages);
     $form->setUser($user)->setAction($request->getRequestURI()->getPath())->addHiddenInput('parent', $paste_parent)->appendChild(id(new AphrontFormTextControl())->setLabel('Title')->setValue($paste->getTitle())->setName('title'))->appendChild($language_select)->appendChild(id(new AphrontFormTextAreaControl())->setLabel('Text')->setError($e_text)->setValue($paste_text)->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)->setName('text'))->appendChild(id(new AphrontFormSubmitControl())->addCancelButton('/paste/')->setValue('Create Paste'));
     $panel = new AphrontPanelView();
     $panel->setWidth(AphrontPanelView::WIDTH_FORM);
     $panel->setHeader('Create a Paste');
     $panel->appendChild($form);
     return $this->buildStandardPageResponse(array($error_view, $panel), array('title' => 'Paste Creation', 'tab' => 'create'));
 }
 private function processCreateRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $fork = $request->getInt('fork');
     $error_view = null;
     $e_text = true;
     $new_paste = new PhabricatorPaste();
     $new_paste_text = null;
     $new_paste_language = PhabricatorEnv::getEnvConfig('pygments.dropdown-default');
     if ($request->isFormPost()) {
         $errors = array();
         $text = $request->getStr('text');
         if (!strlen($text)) {
             $e_text = 'Required';
             $errors[] = 'The paste may not be blank.';
         } else {
             $e_text = null;
         }
         $parent_phid = $request->getStr('parent');
         if ($parent_phid) {
             $parent = id(new PhabricatorPaste())->loadOneWhere('phid = %s', $parent_phid);
             if ($parent) {
                 $new_paste->setParentPHID($parent->getPHID());
             }
         }
         $title = $request->getStr('title');
         $new_paste->setTitle($title);
         $new_paste_language = $request->getStr('language');
         if (!$errors) {
             if ($new_paste_language == 'infer') {
                 // If it's infer, store an empty string. Otherwise, store the
                 // language name. We do this so we can refer to 'infer' elsewhere
                 // in the code (such as default value) while retaining backwards
                 // compatibility with old posts with no language stored.
                 $new_paste_language = '';
             }
             $new_paste->setLanguage($new_paste_language);
             $new_paste_file = PhabricatorFile::newFromFileData($text, array('name' => $title, 'mime-type' => 'text/plain; charset=utf-8', 'authorPHID' => $user->getPHID()));
             $new_paste->setFilePHID($new_paste_file->getPHID());
             $new_paste->setAuthorPHID($user->getPHID());
             $new_paste->save();
             return id(new AphrontRedirectResponse())->setURI('/P' . $new_paste->getID());
         } else {
             $error_view = new AphrontErrorView();
             $error_view->setErrors($errors);
             $error_view->setTitle('A problem has occurred!');
         }
     } else {
         if ($fork) {
             $fork_paste = id(new PhabricatorPaste())->load($fork);
             if ($fork_paste) {
                 $new_paste->setTitle('Fork of ' . $fork_paste->getID() . ': ' . $fork_paste->getTitle());
                 $fork_file = id(new PhabricatorFile())->loadOneWhere('phid = %s', $fork_paste->getFilePHID());
                 $new_paste_text = $fork_file->loadFileData();
                 $new_paste_language = nonempty($fork_paste->getLanguage(), 'infer');
                 $new_paste->setParentPHID($fork_paste->getPHID());
             }
         }
     }
     $this->setErrorView($error_view);
     $this->setErrorText($e_text);
     $this->setPasteText($new_paste_text);
     $new_paste->setLanguage($new_paste_language);
     $this->setPaste($new_paste);
 }
 private function buildActionView(PhabricatorPaste $paste, PhabricatorFile $file)
 {
     return id(new PhabricatorActionListView())->addAction(id(new PhabricatorActionView())->setName(pht('Fork This Paste'))->setIcon('fork')->setHref($this->getApplicationURI('?fork=' . $paste->getID())))->addAction(id(new PhabricatorActionView())->setName(pht('View Raw File'))->setIcon('file')->setHref($file->getBestURI()));
 }
 protected function buildPasteInfoDictionary(PhabricatorPaste $paste)
 {
     return array('id' => $paste->getID(), 'objectName' => 'P' . $paste->getID(), 'phid' => $paste->getPHID(), 'authorPHID' => $paste->getAuthorPHID(), 'filePHID' => $paste->getFilePHID(), 'title' => $paste->getTitle(), 'dateCreated' => $paste->getDateCreated(), 'language' => $paste->getLanguage(), 'uri' => PhabricatorEnv::getProductionURI('/P' . $paste->getID()), 'parentPHID' => $paste->getParentPHID(), 'content' => $paste->getRawContent());
 }
 private function getContentCacheKey(PhabricatorPaste $paste)
 {
     return implode(':', array('P' . $paste->getID(), $paste->getFilePHID(), $paste->getLanguage()));
 }
 private function buildHeaderView(PhabricatorPaste $paste)
 {
     return id(new PhabricatorHeaderView())->setObjectName('P' . $paste->getID())->setHeader($paste->getTitle());
 }
 private function getSnippetCacheKey(PhabricatorPaste $paste)
 {
     return implode(':', array('P' . $paste->getID(), $paste->getFilePHID(), $paste->getLanguage(), 'snippet', PhabricatorHash::digestForIndex($paste->getTitle())));
 }