protected function updateServiceLock(AlmanacService $service, $lock) { $almanac_phid = id(new PhabricatorAlmanacApplication())->getPHID(); $xaction = id(new AlmanacServiceTransaction())->setTransactionType(AlmanacServiceTransaction::TYPE_LOCK)->setNewValue((int) $lock); $editor = id(new AlmanacServiceEditor())->setActor($this->getViewer())->setActingAsPHID($almanac_phid)->setContentSource(PhabricatorContentSource::newConsoleSource())->setContinueOnMissingFields(true); $editor->applyTransactions($service, array($xaction)); }
public function generate() { $title = $this->generateTitle(); // Prepend or append 'Sprint' $title = mt_rand(0, 1) ? $title . ' Sprint' : 'Sprint ' . $title; $author = $this->loadPhabrictorUser(); $authorPHID = $author->getPHID(); $project = PhabricatorProject::initializeNewProject($author); $this->addTransaction(PhabricatorProjectTransaction::TYPE_NAME, $title); $this->addTransaction(PhabricatorProjectTransaction::TYPE_ICON, 'fa-briefcase'); $this->addTransaction(PhabricatorProjectTransaction::TYPE_COLOR, 'blue'); // $this->addTransaction( // PhabricatorProjectTransaction::TYPE_MEMBERS, // $this->loadMembersWithAuthor($authorPHID)); $this->addTransaction(PhabricatorTransactions::TYPE_VIEW_POLICY, PhabricatorPolicies::POLICY_PUBLIC); $this->addTransaction(PhabricatorTransactions::TYPE_EDIT_POLICY, PhabricatorPolicies::POLICY_PUBLIC); $this->addTransaction(PhabricatorTransactions::TYPE_JOIN_POLICY, PhabricatorPolicies::POLICY_PUBLIC); // Pick a date to be the start date for the sprint // Random between 4 weeks ago and one week from now $start = mt_rand(time() - 28 * 24 * 60 * 60, time() + 7 * 24 * 60 * 60); $this->xactions[] = id(new ManiphestTransaction())->setTransactionType(PhabricatorTransactions::TYPE_CUSTOMFIELD)->setMetadataValue('customfield:key', 'isdc:sprint:startdate')->setOldValue(null)->setNewValue($start); // Pick a date to be the end date for the sprint // Sprint is between 3 days and 3 weeks long $end = $start + mt_rand(3 * 24 * 60 * 60, 21 * 24 * 60 * 60); $this->xactions[] = id(new ManiphestTransaction())->setTransactionType(PhabricatorTransactions::TYPE_CUSTOMFIELD)->setMetadataValue('customfield:key', 'isdc:sprint:enddate')->setOldValue(null)->setNewValue($end); $editor = id(new PhabricatorProjectTransactionEditor())->setActor($author)->setContentSource(PhabricatorContentSource::newConsoleSource())->setContinueOnNoEffect(true)->setContinueOnMissingFields(true)->applyTransactions($project, $this->xactions); $project->save(); // Generate a bunch of tasks created the before the sprint starts for ($i = 0, $num = mt_rand(5, 40); $i <= $num; $i++) { echo "."; $this->generateTask($project, $start, $end); } return $project; }
protected function addMessageWithFile(PhabricatorUser $actor, ConpherenceThread $conpherence) { $file = $this->generateTestFile($actor); $message = Filesystem::readRandomCharacters(64) . sprintf(' {%s} ', $file->getMonogram()); $editor = id(new ConpherenceEditor())->setActor($actor)->setContentSource(PhabricatorContentSource::newConsoleSource()); $xactions = $editor->generateTransactionsFromText($actor, $conpherence, $message); return $editor->applyTransactions($conpherence, $xactions); }
public function generate() { $title = $this->generateTitle(); $author = $this->loadPhabrictorUser(); $authorPHID = $author->getPHID(); $project = id(new PhabricatorProject())->setName($title)->setAuthorPHID($authorPHID); $this->addTransaction(PhabricatorProjectTransaction::TYPE_NAME, $title); $this->addTransaction(PhabricatorProjectTransaction::TYPE_MEMBERS, $this->loadMembersWithAuthor($authorPHID)); $this->addTransaction(PhabricatorProjectTransaction::TYPE_STATUS, $this->generateProjectStatus()); $this->addTransaction(PhabricatorTransactions::TYPE_VIEW_POLICY, PhabricatorPolicies::POLICY_PUBLIC); $this->addTransaction(PhabricatorTransactions::TYPE_EDIT_POLICY, PhabricatorPolicies::POLICY_PUBLIC); $this->addTransaction(PhabricatorTransactions::TYPE_JOIN_POLICY, PhabricatorPolicies::POLICY_PUBLIC); $editor = id(new PhabricatorProjectTransactionEditor())->setActor($author)->setContentSource(PhabricatorContentSource::newConsoleSource())->applyTransactions($project, $this->xactions); return $project->save(); }
public function execute(PhutilArgumentParser $args) { $repos = $this->loadRepositories($args, 'repos'); if (!$repos) { throw new PhutilArgumentUsageException(pht('Specify one or more repositories to edit.')); } $console = PhutilConsole::getConsole(); // TODO: It would be nice to just take this action as "Administrator" or // similar, since that would make it easier to use this script, harder to // impersonate users, and more clear to viewers what happened. However, // the omnipotent user doesn't have a PHID right now, can't be loaded, // doesn't have a handle, etc. Adding all of that is fairly involved, and // I want to wait for stronger use cases first. $username = $args->getArg('as'); if (!$username) { throw new PhutilArgumentUsageException(pht('Specify a user to edit as with %s.', '--as <username>')); } $actor = id(new PhabricatorPeopleQuery())->setViewer($this->getViewer())->withUsernames(array($username))->executeOne(); if (!$actor) { throw new PhutilArgumentUsageException(pht("No such user '%s'!", $username)); } foreach ($repos as $repo) { $console->writeOut("%s\n", pht('Editing "%s"...', $repo->getDisplayName())); $xactions = array(); $type_local_path = PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH; $type_protocol_http = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP; $type_protocol_ssh = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH; $allowed_serve_modes = array(PhabricatorRepository::SERVE_OFF, PhabricatorRepository::SERVE_READONLY, PhabricatorRepository::SERVE_READWRITE); if ($args->getArg('local-path')) { $xactions[] = id(new PhabricatorRepositoryTransaction())->setTransactionType($type_local_path)->setNewValue($args->getArg('local-path')); } $serve_http = $args->getArg('serve-http'); if ($serve_http && in_array($serve_http, $allowed_serve_modes)) { $xactions[] = id(new PhabricatorRepositoryTransaction())->setTransactionType($type_protocol_http)->setNewValue($serve_http); } $serve_ssh = $args->getArg('serve-ssh'); if ($serve_ssh && in_array($serve_ssh, $allowed_serve_modes)) { $xactions[] = id(new PhabricatorRepositoryTransaction())->setTransactionType($type_protocol_ssh)->setNewValue($serve_ssh); } if (!$xactions) { throw new PhutilArgumentUsageException(pht('Specify one or more fields to edit!')); } $content_source = PhabricatorContentSource::newConsoleSource(); $editor = id(new PhabricatorRepositoryEditor())->setActor($actor)->setContentSource($content_source)->setContinueOnNoEffect(true)->setContinueOnMissingFields(true)->applyTransactions($repo, $xactions); } $console->writeOut("%s\n", pht('Done.')); return 0; }
public function execute(PhutilArgumentParser $args) { $repos = $this->loadRepositories($args, 'repos'); if (!$repos) { throw new PhutilArgumentUsageException('Specify one or more repositories to edit, by callsign.'); } $console = PhutilConsole::getConsole(); // TODO: It would be nice to just take this action as "Administrator" or // similar, since that would make it easier to use this script, harder to // impersonate users, and more clear to viewers what happened. However, // the omnipotent user doesn't have a PHID right now, can't be loaded, // doesn't have a handle, etc. Adding all of that is fairly involved, and // I want to wait for stronger use cases first. $username = $args->getArg('as'); if (!$username) { throw new PhutilArgumentUsageException(pht('Specify a user to edit as with --as <username>.')); } $actor = id(new PhabricatorPeopleQuery())->setViewer($this->getViewer())->withUsernames(array($username))->executeOne(); if (!$actor) { throw new PhutilArgumentUsageException(pht("No such user '%s'!", $username)); } foreach ($repos as $repo) { $console->writeOut("Editing '%s'...\n", $repo->getCallsign()); $xactions = array(); $type_local_path = PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH; if ($args->getArg('local-path')) { $xactions[] = id(new PhabricatorRepositoryTransaction())->setTransactionType($type_local_path)->setNewValue($args->getArg('local-path')); } if (!$xactions) { throw new PhutilArgumentUsageException(pht('Specify one or more fields to edit!')); } $content_source = PhabricatorContentSource::newConsoleSource(); $editor = id(new PhabricatorRepositoryEditor())->setActor($actor)->setContentSource($content_source)->setContinueOnNoEffect(true)->setContinueOnMissingFields(true)->applyTransactions($repo, $xactions); } $console->writeOut("Done.\n"); return 0; }
private function applyTransactions(PhabricatorProject $project, PhabricatorUser $user, array $xactions) { $editor = id(new PhabricatorProjectTransactionEditor())->setActor($user)->setContentSource(PhabricatorContentSource::newConsoleSource())->setContinueOnNoEffect(true)->applyTransactions($project, $xactions); }
private function joinOrLeaveProject(PhabricatorProject $project, PhabricatorUser $user, $operation) { $spec = array($operation => array($user->getPHID() => $user->getPHID())); $xactions = array(); $xactions[] = id(new PhabricatorProjectTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDGE)->setMetadataValue('edge:type', PhabricatorProjectProjectHasMemberEdgeType::EDGECONST)->setNewValue($spec); $editor = id(new PhabricatorProjectTransactionEditor())->setActor($user)->setContentSource(PhabricatorContentSource::newConsoleSource())->setContinueOnNoEffect(true)->applyTransactions($project, $xactions); }
private function changeEditPolicy(PhabricatorUser $actor, ConpherenceThread $room, $policy) { $xactions = array(); $xactions[] = id(new ConpherenceTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)->setNewValue($policy); id(new ConpherenceEditor())->setActor($actor)->setContentSource(PhabricatorContentSource::newConsoleSource())->setContinueOnNoEffect(true)->applyTransactions($room, $xactions); }
private function newSpace(PhabricatorUser $actor, $name, $is_default, array $options = array()) { $space = PhabricatorSpacesNamespace::initializeNewNamespace($actor); $type_name = PhabricatorSpacesNamespaceTransaction::TYPE_NAME; $type_default = PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT; $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; $xactions = array(); $xactions[] = id(new PhabricatorSpacesNamespaceTransaction())->setTransactionType($type_name)->setNewValue($name); $xactions[] = id(new PhabricatorSpacesNamespaceTransaction())->setTransactionType($type_view)->setNewValue($actor->getPHID()); $xactions[] = id(new PhabricatorSpacesNamespaceTransaction())->setTransactionType($type_edit)->setNewValue($actor->getPHID()); if ($is_default) { $xactions[] = id(new PhabricatorSpacesNamespaceTransaction())->setTransactionType($type_default)->setNewValue($is_default); } $content_source = PhabricatorContentSource::newConsoleSource(); $editor = id(new PhabricatorSpacesNamespaceEditor())->setActor($actor)->setContentSource($content_source); if (isset($options['continueOnNoEffect'])) { $editor->setContinueOnNoEffect(true); } $editor->applyTransactions($space, $xactions); return $space; }
private function applyTaskTransactions(PhabricatorUser $viewer, ManiphestTask $task, array $xactions) { $content_source = PhabricatorContentSource::newConsoleSource(); $editor = id(new ManiphestTransactionEditor())->setActor($viewer)->setContentSource($content_source)->setContinueOnNoEffect(true)->applyTransactions($task, $xactions); return $task; }
private function createThread(PhabricatorUser $creator, array $participant_phids) { list($errors, $conpherence) = ConpherenceEditor::createThread($creator, $participant_phids, pht('Test'), pht('Test'), PhabricatorContentSource::newConsoleSource()); return $conpherence; }
function modifyProjectMembers($project, $members_diff, $viewer) { $projectname = $project->getName(); if (DEBUG && !empty($members_diff['+'])) { debug("Will add members to project '" . $projectname . "':\n"); foreach ($members_diff['+'] as $memberphid) { $user = id(new PhabricatorPeopleQuery())->setViewer($viewer)->withPHIDs(array($memberphid))->executeOne(); $username = $user->getUserName(); debug(" " . $username . " (" . $memberphid . ")\n"); } } if (DEBUG && !empty($members_diff['-'])) { debug("Will remove members from project '" . $projectname . "':\n"); foreach ($members_diff['-'] as $memberphid) { $user = id(new PhabricatorPeopleQuery())->setViewer($viewer)->withPHIDs(array($memberphid))->executeOne(); $username = $user->getUserName(); debug(" " . $username . " (" . $memberphid . ")\n"); } } if (!DRY_RUN) { $type_member = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; $xactions = array(); $xactions[] = id(new PhabricatorProjectTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDGE)->setMetadataValue('edge:type', $type_member)->setNewValue($members_diff); $editor = id(new PhabricatorProjectTransactionEditor())->setActor($viewer)->setContentSource(PhabricatorContentSource::newConsoleSource())->setContinueOnNoEffect(true)->setContinueOnMissingFields(true)->applyTransactions($project, $xactions); } }