[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/phriction/conduit/ -> PhrictionCreateConduitAPIMethod.php (source)

   1  <?php
   2  
   3  final class PhrictionCreateConduitAPIMethod extends PhrictionConduitAPIMethod {
   4    public function getAPIMethodName() {
   5      return 'phriction.create';
   6    }
   7    public function getMethodDescription() {
   8      return pht('Create a Phriction document.');
   9    }
  10    public function defineParamTypes() {
  11      return array(
  12        'slug'          => 'required string',
  13        'title'         => 'required string',
  14        'content'       => 'required string',
  15        'description'   => 'optional string',
  16      );
  17    }
  18    public function defineReturnType() {
  19      return 'nonempty dict';
  20    }
  21    public function defineErrorTypes() {
  22      return array(
  23      );
  24    }
  25    protected function execute(ConduitAPIRequest $request) {
  26      $slug = $request->getValue('slug');
  27      if (!strlen($slug)) {
  28        throw new Exception(pht('No such document.'));
  29      }
  30      $doc = id(new PhrictionDocumentQuery())
  31        ->setViewer($request->getUser())
  32        ->withSlugs(array(PhabricatorSlug::normalize($slug)))
  33        ->requireCapabilities(
  34          array(
  35            PhabricatorPolicyCapability::CAN_VIEW,
  36            PhabricatorPolicyCapability::CAN_EDIT,
  37          ))
  38        ->executeOne();
  39      if ($doc) {
  40        throw new Exception(pht('Document already exists!'));
  41      }
  42  
  43      $doc = PhrictionDocument::initializeNewDocument(
  44        $request->getUser(),
  45        $slug);
  46  
  47      $xactions = array();
  48      $xactions[] = id(new PhrictionTransaction())
  49        ->setTransactionType(PhrictionTransaction::TYPE_TITLE)
  50        ->setNewValue($request->getValue('title'));
  51      $xactions[] = id(new PhrictionTransaction())
  52        ->setTransactionType(PhrictionTransaction::TYPE_CONTENT)
  53        ->setNewValue($request->getValue('content'));
  54  
  55      $editor = id(new PhrictionTransactionEditor())
  56        ->setActor($request->getUser())
  57        ->setContentSourceFromConduitRequest($request)
  58        ->setContinueOnNoEffect(true)
  59        ->setDescription($request->getValue('description'));
  60  
  61      try {
  62        $editor->applyTransactions($doc, $xactions);
  63      } catch (PhabricatorApplicationTransactionValidationException $ex) {
  64        // TODO - some magical hotness via T5873
  65        throw $ex;
  66      }
  67  
  68      return $this->buildDocumentInfoDictionary($doc);
  69    }
  70  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1