public function handleRequest(AphrontRequest $request) { $viewer = $this->getViewer(); $configs = id(new PhabricatorAuthProviderConfigQuery())->setViewer($viewer)->execute(); $list = new PHUIObjectItemListView(); $can_manage = $this->hasApplicationCapability(AuthManageProvidersCapability::CAPABILITY); foreach ($configs as $config) { $item = new PHUIObjectItemView(); $id = $config->getID(); $edit_uri = $this->getApplicationURI('config/edit/' . $id . '/'); $enable_uri = $this->getApplicationURI('config/enable/' . $id . '/'); $disable_uri = $this->getApplicationURI('config/disable/' . $id . '/'); $provider = $config->getProvider(); if ($provider) { $name = $provider->getProviderName(); } else { $name = $config->getProviderType() . ' (' . $config->getProviderClass() . ')'; } $item->setHeader($name); if ($provider) { $item->setHref($edit_uri); } else { $item->addAttribute(pht('Provider Implementation Missing!')); } $domain = null; if ($provider) { $domain = $provider->getProviderDomain(); if ($domain !== 'self') { $item->addAttribute($domain); } } if ($config->getShouldAllowRegistration()) { $item->addAttribute(pht('Allows Registration')); } else { $item->addAttribute(pht('Does Not Allow Registration')); } if ($config->getIsEnabled()) { $item->setStatusIcon('fa-check-circle green'); $item->addAction(id(new PHUIListItemView())->setIcon('fa-times')->setHref($disable_uri)->setDisabled(!$can_manage)->addSigil('workflow')); } else { $item->setStatusIcon('fa-ban red'); $item->addIcon('fa-ban grey', pht('Disabled')); $item->addAction(id(new PHUIListItemView())->setIcon('fa-plus')->setHref($enable_uri)->setDisabled(!$can_manage)->addSigil('workflow')); } $list->addItem($item); } $list->setNoDataString(pht('%s You have not added authentication providers yet. Use "%s" to add ' . 'a provider, which will let users register new Phabricator accounts ' . 'and log in.', phutil_tag('strong', array(), pht('No Providers Configured:')), phutil_tag('a', array('href' => $this->getApplicationURI('config/new/')), pht('Add Authentication Provider')))); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Auth Providers')); $crumbs->setBorder(true); $guidance_context = new PhabricatorAuthProvidersGuidanceContext(); $guidance = id(new PhabricatorGuidanceEngine())->setViewer($viewer)->setGuidanceContext($guidance_context)->newInfoView(); $button = id(new PHUIButtonView())->setTag('a')->setColor(PHUIButtonView::SIMPLE)->setHref($this->getApplicationURI('config/new/'))->setIcon('fa-plus')->setDisabled(!$can_manage)->setText(pht('Add Provider')); $list->setFlush(true); $list = id(new PHUIObjectBoxView())->setHeaderText(pht('Providers'))->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->appendChild($list); $title = pht('Auth Providers'); $header = id(new PHUIHeaderView())->setHeader($title)->setHeaderIcon('fa-key')->addActionLink($button); $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter(array($guidance, $list)); return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view); }
public function render() { $list = new PHUIObjectItemListView(); $list->setFlush(true); foreach ($this->edits as $edit) { $name = nonempty($edit->getRuleName(), 'Unknown Rule'); $rule_name = phutil_tag('strong', array(), $name); switch ($edit->getAction()) { case 'create': $details = pht("Created rule '%s'.", $rule_name); break; case 'delete': $details = pht("Deleted rule '%s'.", $rule_name); break; case 'edit': default: $details = pht("Edited rule '%s'.", $rule_name); break; } $editor = $this->handles[$edit->getEditorPHID()]->renderLink(); $date = phabricator_datetime($edit->getDateCreated(), $this->user); $item = id(new PHUIObjectItemView())->setObjectName(pht('Rule %d', $edit->getRuleID()))->setSubHead($details)->addIcon('none', $date)->addByLine(pht('Editor: %s', $editor)); $list->addItem($item); } $list->setNoDataString(pht('No edits for rule.')); return $list; }
public function handleRequest(AphrontRequest $request) { $viewer = $this->getViewer(); $pager = new AphrontCursorPagerView(); $pager->readFromRequest($request); $query = id(new PhluxVariableQuery())->setViewer($viewer); $vars = $query->executeWithCursorPager($pager); $view = new PHUIObjectItemListView(); $view->setFlush(true); foreach ($vars as $var) { $key = $var->getVariableKey(); $item = new PHUIObjectItemView(); $item->setHeader($key); $item->setHref($this->getApplicationURI('/view/' . $key . '/')); $item->addIcon('none', phabricator_datetime($var->getDateModified(), $viewer)); $view->addItem($item); } $crumbs = $this->buildApplicationCrumbs(); $box = id(new PHUIObjectBoxView())->setHeaderText('Variables')->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->appendChild($view); $title = pht('Variable List'); $header = id(new PHUIHeaderView())->setHeader($title)->setHeaderIcon('fa-copy'); $crumbs->addTextCrumb($title, $this->getApplicationURI()); $crumbs->setBorder(true); $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter(array($box, $pager)); return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view); }
public function render() { $rows = array(); if (!$this->user) { throw new PhutilInvalidStateException('setUser'); } $env_hash = PhabricatorEnv::calculateEnvironmentHash(); $list = new PHUIObjectItemListView(); $list->setFlush(true); foreach ($this->daemonLogs as $log) { $id = $log->getID(); $epoch = $log->getDateCreated(); $item = id(new PHUIObjectItemView())->setObjectName(pht('Daemon %s', $id))->setHeader($log->getDaemon())->setHref("/daemon/log/{$id}/")->addIcon('none', phabricator_datetime($epoch, $this->user)); $status = $log->getStatus(); switch ($status) { case PhabricatorDaemonLog::STATUS_RUNNING: if ($env_hash != $log->getEnvHash()) { $item->setStatusIcon('fa-warning yellow'); $item->addAttribute(pht('This daemon is running with an out of date configuration and ' . 'should be restarted.')); } else { $item->setStatusIcon('fa-rocket green'); $item->addAttribute(pht('This daemon is running.')); } break; case PhabricatorDaemonLog::STATUS_DEAD: $item->setStatusIcon('fa-warning red'); $item->addAttribute(pht('This daemon is lost or exited uncleanly, and is presumed ' . 'dead.')); $item->addIcon('fa-times grey', pht('Dead')); break; case PhabricatorDaemonLog::STATUS_EXITING: $item->addAttribute(pht('This daemon is exiting.')); $item->addIcon('fa-check', pht('Exiting')); break; case PhabricatorDaemonLog::STATUS_EXITED: $item->setDisabled(true); $item->addAttribute(pht('This daemon exited cleanly.')); $item->addIcon('fa-check grey', pht('Exited')); break; case PhabricatorDaemonLog::STATUS_WAIT: $item->setStatusIcon('fa-clock-o blue'); $item->addAttribute(pht('This daemon encountered an error recently and is waiting a ' . 'moment to restart.')); $item->addIcon('fa-clock-o grey', pht('Waiting')); break; case PhabricatorDaemonLog::STATUS_UNKNOWN: default: $item->setStatusIcon('fa-warning orange'); $item->addAttribute(pht('This daemon has not reported its status recently. It may ' . 'have exited uncleanly.')); $item->addIcon('fa-warning', pht('Unknown')); break; } $list->addItem($item); } return $list; }
public function render() { $handles = $this->handles; require_celerity_resource('maniphest-task-summary-css'); $list = new PHUIObjectItemListView(); $list->setFlush(true); if ($this->noDataString) { $list->setNoDataString($this->noDataString); } else { $list->setNoDataString(pht('No tasks.')); } $status_map = ManiphestTaskStatus::getTaskStatusMap(); $color_map = ManiphestTaskPriority::getColorMap(); if ($this->showBatchControls) { Javelin::initBehavior('maniphest-list-editor'); } foreach ($this->tasks as $task) { $item = id(new PHUIObjectItemView())->setUser($this->getUser())->setObject($task)->setObjectName('T' . $task->getID())->setHeader($task->getTitle())->setHref('/T' . $task->getID()); if ($task->getOwnerPHID()) { $owner = $handles[$task->getOwnerPHID()]; $item->addByline(pht('Assigned: %s', $owner->renderLink())); } $status = $task->getStatus(); if ($task->isClosed()) { $item->setDisabled(true); } $item->setBarColor(idx($color_map, $task->getPriority(), 'grey')); $item->addIcon('none', phabricator_datetime($task->getDateModified(), $this->getUser())); if ($this->showSubpriorityControls) { $item->setGrippable(true); } if ($this->showSubpriorityControls || $this->showBatchControls) { $item->addSigil('maniphest-task'); } $project_handles = array_select_keys($handles, $task->getProjectPHIDs()); $item->addAttribute(id(new PHUIHandleTagListView())->setLimit(4)->setNoDataString(pht('No Projects'))->setSlim(true)->setHandles($project_handles)); $item->setMetadata(array('taskID' => $task->getID())); if ($this->showBatchControls) { $href = new PhutilURI('/maniphest/task/edit/' . $task->getID() . '/'); if (!$this->showSubpriorityControls) { $href->setQueryParam('ungrippable', 'true'); } $item->addAction(id(new PHUIListItemView())->setIcon('fa-pencil')->addSigil('maniphest-edit-task')->setHref($href)); } $list->addItem($item); } return $list; }
private function renderComparisonTable(array $content) { assert_instances_of($content, 'PhrictionContent'); $user = $this->getRequest()->getUser(); $phids = mpull($content, 'getAuthorPHID'); $handles = $this->loadViewerHandles($phids); $list = new PHUIObjectItemListView(); $list->setFlush(true); $first = true; foreach ($content as $c) { $author = $handles[$c->getAuthorPHID()]->renderLink(); $item = id(new PHUIObjectItemView())->setHeader(pht('%s by %s, %s', PhrictionChangeType::getChangeTypeLabel($c->getChangeType()), $author, pht('Version %s', $c->getVersion())))->addAttribute(pht('%s %s', phabricator_date($c->getDateCreated(), $user), phabricator_time($c->getDateCreated(), $user))); if ($c->getDescription()) { $item->addAttribute($c->getDescription()); } if ($first == true) { $item->setBarColor('green'); $first = false; } else { $item->setBarColor('red'); } $list->addItem($item); } return $list; }
public function renderExample() { $request = $this->getRequest(); $user = $request->getUser(); $handle = id(new PhabricatorHandleQuery())->setViewer($user)->withPHIDs(array($user->getPHID()))->executeOne(); $out = array(); $list = new PHUIObjectItemListView(); $list->addItem(id(new PHUIObjectItemView())->setObjectName('FRUIT1')->setStatusIcon('fa-apple')->setHeader(pht('Apple'))->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setObjectName('FRUIT2')->setHeader(pht('Banana'))->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setObjectName('FRUIT3')->setHeader(pht('Cherry'))->setHref('#')); $box = id(new PHUIObjectBoxView())->setHeaderText('Basic List')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $list->setNoDataString(pht('This list is empty.')); $box = id(new PHUIObjectBoxView())->setHeaderText('Empty List')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Monday'))->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Tuesday'))->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Wednesday'))->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Thursday'))->setHref('#')); $box = id(new PHUIObjectBoxView())->setHeaderText('Stacked List')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Business Card'))->setStatusIcon('fa-warning red')); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Playing Card'))->setStatusIcon('fa-warning orange')->addIcon('fa-comment', pht('Royal Flush!'))); $owner = phutil_tag('a', array('href' => '#'), pht('jackofclubs')); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('House of Cards'))->setStatusIcon('fa-warning yellow')->setDisabled(true)->addByline(pht('Owner: %s', $owner))); $author = phutil_tag('a', array('href' => '#'), pht('agoat')); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Cardigan'))->setStatusIcon('fa-check green')->addIcon('fa-star', pht('Warm!'))->addByline(pht('Author: %s', $author))); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Cardamom'))->setStatusIcon('fa-check blue')); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('The human cardiovascular system includes the heart, lungs, and ' . 'some other parts; most of these parts are pretty squishy.'))->addHandleIcon($handle, pht('You have a cardiovascular system!'))->setStatusIcon('fa-check indigo')); $box = id(new PHUIObjectBoxView())->setHeaderText('Card List')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Grab ahold!'))->setHref('#')->setGrippable(true)); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Hold on tight!'))->setHref('#')->setGrippable(true)); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht("Don't let go!"))->setHref('#')->setGrippable(true)->addAction(id(new PHUIListItemView())->setHref('#')->setIcon('fa-times'))); $box = id(new PHUIObjectBoxView())->setHeaderText('Grippable List')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('You Have The Power'))->setHref('#')->setStatusIcon('fa-circle-o blue')->addAction(id(new PHUIListItemView())->setHref('#')->setName(pht('Moo'))->setIcon('fa-pencil'))); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Believe In Yourself'))->setHref('#')->setStatusIcon('fa-circle-o violet')->addAction(id(new PHUIListItemView())->setHref('#')->setName(pht('Quack'))->setIcon('fa-pencil'))->addAction(id(new PHUIListItemView())->setHref('#')->setName(pht('Oink'))->setIcon('fa-times'))); $box = id(new PHUIObjectBoxView())->setHeaderText('Action Link List')->setObjectList($list); $head = id(new PHUIHeaderView())->setHeader(pht('Extras')); $list = new PHUIObjectItemListView(); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Ace of Hearts'))->setSubHead(pht('This is a powerful card in the game "Hearts".'))->setHref('#')->addAttribute(pht('Suit: Hearts'))->addAttribute(pht('Rank: Ace'))->addIcon('fa-heart', pht('Ace'))->addIcon('fa-heart red', pht('Hearts'))->addHandleIcon($handle, pht('You hold all the cards.'))->addHandleIcon($handle, pht('You make all the rules.'))); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Just A Handle'))->setHref('#')->addHandleIcon($handle, pht('Handle Here'))); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Poor Use of Space'))->setHref('#')->addAttribute('North West')->addHandleIcon($handle, pht('South East'))); $list->addItem(id(new PHUIObjectItemView())->setHeader(pht('Crowded Eastern Edge'))->setHref('#')->addIcon('fa-circle red', pht('Stuff'))->addIcon('fa-circle yellow', pht('Stuff'))->addIcon('fa-circle green', pht('Stuff'))->addHandleIcon($handle, pht('More Stuff'))); $box = id(new PHUIObjectBoxView())->setHeaderText('Action List')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X1')->setHeader(pht('Normal'))->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X2')->setHeader(pht('Highlighted'))->setEffect('highlighted')->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X3')->setHeader(pht('Selected'))->setEffect('selected')->setHref('#')); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X4')->setHeader(pht('Disabled'))->setDisabled(true)->setHref('#')); $box = id(new PHUIObjectBoxView())->setHeaderText('Extra Things and Stuff')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $bar_colors = array(null => pht('None'), 'red' => pht('Red'), 'orange' => pht('Orange'), 'yellow' => pht('Yellow'), 'green' => pht('Green'), 'sky' => pht('Sky'), 'blue' => pht('Blue'), 'indigo' => pht('Indigo'), 'violet' => pht('Violet'), 'grey' => pht('Grey'), 'black' => pht('Black')); foreach ($bar_colors as $bar_color => $bar_label) { $list->addItem(id(new PHUIObjectItemView())->setHeader($bar_label)->setStatusIcon('fa-bell ' . $bar_color)); } $box = id(new PHUIObjectBoxView())->setHeaderText('Color Icons')->setObjectList($list); $out[] = $box; $list = new PHUIObjectItemListView(); $list->setFlush(true); $default_profile = PhabricatorFile::loadBuiltin($user, 'profile.png'); $default_project = PhabricatorFile::loadBuiltin($user, 'project.png'); $list->addItem(id(new PHUIObjectItemView())->setImageURI($default_profile->getViewURI())->setHeader(pht('Default User Profile Image'))->addAction(id(new PHUIListItemView())->setHref('#')->setIcon('fa-pencil-square'))->addAction(id(new PHUIListItemView())->setHref('#')->setIcon('fa-plus-square'))->addAction(id(new PHUIListItemView())->setHref('#')->setIcon('fa-minus-square'))); $list->addItem(id(new PHUIObjectItemView())->setImageURI($default_project->getViewURI())->setHeader(pht('Default Project Profile Image'))->setGrippable(true)->addAttribute(pht('This is the default project profile image.'))); $box = id(new PHUIObjectBoxView())->setHeaderText('Profile Images')->setObjectList($list); $out[] = $box; $list = id(new PHUIObjectItemListView())->setStates(true); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X1200')->setHeader(pht('Action Passed'))->addAttribute(pht('That went swimmingly, go you'))->setHref('#')->setState(PHUIObjectItemView::STATE_SUCCESS)); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X1201')->setHeader(pht('Action Failed'))->addAttribute(pht('Whoopsies, might want to fix that'))->setHref('#')->setState(PHUIObjectItemView::STATE_FAIL)); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X1202')->setHeader(pht('Action Warning'))->addAttribute(pht('We need to talk about things'))->setHref('#')->setState(PHUIObjectItemView::STATE_WARN)); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X1203')->setHeader(pht('Action Noted'))->addAttribute(pht('The weather seems nice today'))->setHref('#')->setState(PHUIObjectItemView::STATE_NOTE)); $list->addItem(id(new PHUIObjectItemView())->setObjectName('X1203')->setHeader(pht('Action In Progress'))->addAttribute(pht('Outlook fuzzy, try again later'))->setHref('#')->setState(PHUIObjectItemView::STATE_BUILD)); $box = id(new PHUIObjectBoxView())->setHeaderText(pht('State Icons'))->setObjectList($list); $out[] = array($box); return $out; }
public function processRequest() { $request = $this->getRequest(); $viewer = $request->getUser(); $configs = id(new PhabricatorAuthProviderConfigQuery())->setViewer($viewer)->execute(); $list = new PHUIObjectItemListView(); $can_manage = $this->hasApplicationCapability(AuthManageProvidersCapability::CAPABILITY); foreach ($configs as $config) { $item = new PHUIObjectItemView(); $id = $config->getID(); $edit_uri = $this->getApplicationURI('config/edit/' . $id . '/'); $enable_uri = $this->getApplicationURI('config/enable/' . $id . '/'); $disable_uri = $this->getApplicationURI('config/disable/' . $id . '/'); $provider = $config->getProvider(); if ($provider) { $name = $provider->getProviderName(); } else { $name = $config->getProviderType() . ' (' . $config->getProviderClass() . ')'; } $item->setHeader($name); if ($provider) { $item->setHref($edit_uri); } else { $item->addAttribute(pht('Provider Implementation Missing!')); } $domain = null; if ($provider) { $domain = $provider->getProviderDomain(); if ($domain !== 'self') { $item->addAttribute($domain); } } if ($config->getShouldAllowRegistration()) { $item->addAttribute(pht('Allows Registration')); } else { $item->addAttribute(pht('Does Not Allow Registration')); } if ($config->getIsEnabled()) { $item->setState(PHUIObjectItemView::STATE_SUCCESS); $item->addAction(id(new PHUIListItemView())->setIcon('fa-times')->setHref($disable_uri)->setDisabled(!$can_manage)->addSigil('workflow')); } else { $item->setState(PHUIObjectItemView::STATE_FAIL); $item->addIcon('fa-times grey', pht('Disabled')); $item->addAction(id(new PHUIListItemView())->setIcon('fa-plus')->setHref($enable_uri)->setDisabled(!$can_manage)->addSigil('workflow')); } $list->addItem($item); } $list->setNoDataString(pht('%s You have not added authentication providers yet. Use "%s" to add ' . 'a provider, which will let users register new Phabricator accounts ' . 'and log in.', phutil_tag('strong', array(), pht('No Providers Configured:')), phutil_tag('a', array('href' => $this->getApplicationURI('config/new/')), pht('Add Authentication Provider')))); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Auth Providers')); $domains_key = 'auth.email-domains'; $domains_link = $this->renderConfigLink($domains_key); $domains_value = PhabricatorEnv::getEnvConfig($domains_key); $approval_key = 'auth.require-approval'; $approval_link = $this->renderConfigLink($approval_key); $approval_value = PhabricatorEnv::getEnvConfig($approval_key); $issues = array(); if ($domains_value) { $issues[] = pht('Phabricator is configured with an email domain whitelist (in %s), so ' . 'only users with a verified email address at one of these %s ' . 'allowed domain(s) will be able to register an account: %s', $domains_link, phutil_count($domains_value), phutil_tag('strong', array(), implode(', ', $domains_value))); } else { $issues[] = pht('Anyone who can browse to this Phabricator install will be able to ' . 'register an account. To add email domain restrictions, configure ' . '%s.', $domains_link); } if ($approval_value) { $issues[] = pht('Administrative approvals are enabled (in %s), so all new users must ' . 'have their accounts approved by an administrator.', $approval_link); } else { $issues[] = pht('Administrative approvals are disabled, so users who register will ' . 'be able to use their accounts immediately. To enable approvals, ' . 'configure %s.', $approval_link); } if (!$domains_value && !$approval_value) { $severity = PHUIInfoView::SEVERITY_WARNING; $issues[] = pht('You can safely ignore this warning if the install itself has ' . 'access controls (for example, it is deployed on a VPN) or if all of ' . 'the configured providers have access controls (for example, they are ' . 'all private LDAP or OAuth servers).'); } else { $severity = PHUIInfoView::SEVERITY_NOTICE; } $warning = id(new PHUIInfoView())->setSeverity($severity)->setErrors($issues); $image = id(new PHUIIconView())->setIconFont('fa-plus'); $button = id(new PHUIButtonView())->setTag('a')->setColor(PHUIButtonView::SIMPLE)->setHref($this->getApplicationURI('config/new/'))->setIcon($image)->setDisabled(!$can_manage)->setText(pht('Add Provider')); $header = id(new PHUIHeaderView())->setHeader(pht('Authentication Providers'))->addActionLink($button); $list->setFlush(true); $list = id(new PHUIObjectBoxView())->setHeader($header)->setInfoView($warning)->appendChild($list); return $this->buildApplicationPage(array($crumbs, $list), array('title' => pht('Authentication Providers'))); }
public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $document = id(new PhrictionDocumentQuery())->setViewer($user)->withSlugs(array(PhabricatorSlug::normalize($this->slug)))->needContent(true)->executeOne(); if (!$document) { return new Aphront404Response(); } $current = $document->getContent(); $pager = new AphrontPagerView(); $pager->setOffset($request->getInt('page')); $pager->setURI($request->getRequestURI(), 'page'); $history = id(new PhrictionContent())->loadAllWhere('documentID = %d ORDER BY version DESC LIMIT %d, %d', $document->getID(), $pager->getOffset(), $pager->getPageSize() + 1); $history = $pager->sliceResults($history); $author_phids = mpull($history, 'getAuthorPHID'); $handles = $this->loadViewerHandles($author_phids); $list = new PHUIObjectItemListView(); $list->setFlush(true); foreach ($history as $content) { $author = $handles[$content->getAuthorPHID()]->renderLink(); $slug_uri = PhrictionDocument::getSlugURI($document->getSlug()); $version = $content->getVersion(); $diff_uri = new PhutilURI('/phriction/diff/' . $document->getID() . '/'); $vs_previous = null; if ($content->getVersion() != 1) { $vs_previous = $diff_uri->alter('l', $content->getVersion() - 1)->alter('r', $content->getVersion()); } $vs_head = null; if ($content->getID() != $document->getContentID()) { $vs_head = $diff_uri->alter('l', $content->getVersion())->alter('r', $current->getVersion()); } $change_type = PhrictionChangeType::getChangeTypeLabel($content->getChangeType()); switch ($content->getChangeType()) { case PhrictionChangeType::CHANGE_DELETE: $color = 'red'; break; case PhrictionChangeType::CHANGE_EDIT: $color = 'blue'; break; case PhrictionChangeType::CHANGE_MOVE_HERE: $color = 'yellow'; break; case PhrictionChangeType::CHANGE_MOVE_AWAY: $color = 'orange'; break; case PhrictionChangeType::CHANGE_STUB: $color = 'green'; break; default: throw new Exception('Unknown change type!'); break; } $item = id(new PHUIObjectItemView())->setHeader(pht('%s by %s', $change_type, $author))->setBarColor($color)->addAttribute(phutil_tag('a', array('href' => $slug_uri . '?v=' . $version), pht('Version %s', $version)))->addAttribute(pht('%s %s', phabricator_date($content->getDateCreated(), $user), phabricator_time($content->getDateCreated(), $user))); if ($content->getDescription()) { $item->addAttribute($content->getDescription()); } if ($vs_previous) { $item->addIcon('fa-reply', pht('Show Change'), array('href' => $vs_previous)); } else { $item->addIcon('fa-reply grey', phutil_tag('em', array(), pht('No previous change'))); } if ($vs_head) { $item->addIcon('fa-reply-all', pht('Show Later Changes'), array('href' => $vs_head)); } else { $item->addIcon('fa-reply-all grey', phutil_tag('em', array(), pht('No later changes'))); } $list->addItem($item); } $crumbs = $this->buildApplicationCrumbs(); $crumb_views = $this->renderBreadcrumbs($document->getSlug()); foreach ($crumb_views as $view) { $crumbs->addCrumb($view); } $crumbs->addTextCrumb(pht('History'), PhrictionDocument::getSlugURI($document->getSlug(), 'history')); $header = new PHUIHeaderView(); $header->setHeader(pht('Document History for %s', phutil_tag('a', array('href' => PhrictionDocument::getSlugURI($document->getSlug())), head($history)->getTitle()))); $obj_box = id(new PHUIObjectBoxView())->setHeader($header)->appendChild($list)->appendChild($pager); return $this->buildApplicationPage(array($crumbs, $obj_box), array('title' => pht('Document History'))); }
public function render() { $viewer = $this->getViewer(); $this->initBehavior('phabricator-tooltips', array()); $this->requireResource('aphront-tooltip-css'); $list = new PHUIObjectItemListView(); foreach ($this->revisions as $revision) { $item = id(new PHUIObjectItemView())->setUser($viewer); $icons = array(); $phid = $revision->getPHID(); $flag = $revision->getFlag($viewer); if ($flag) { $flag_class = PhabricatorFlagColor::getCSSClass($flag->getColor()); $icons['flag'] = phutil_tag('div', array('class' => 'phabricator-flag-icon ' . $flag_class), ''); } if ($revision->getDrafts($viewer)) { $icons['draft'] = true; } $modified = $revision->getDateModified(); if (isset($icons['flag'])) { $item->addHeadIcon($icons['flag']); } $item->setObjectName('D' . $revision->getID()); $item->setHeader($revision->getTitle()); $item->setHref('/D' . $revision->getID()); if (isset($icons['draft'])) { $draft = id(new PHUIIconView())->setIcon('fa-comment yellow')->addSigil('has-tooltip')->setMetadata(array('tip' => pht('Unsubmitted Comments'))); $item->addAttribute($draft); } // Author $author_handle = $this->handles[$revision->getAuthorPHID()]; $item->addByline(pht('Author: %s', $author_handle->renderLink())); $unlanded = idx($this->unlandedDependencies, $phid); if ($unlanded) { $item->addAttribute(array(id(new PHUIIconView())->setIcon('fa-chain-broken', 'red'), ' ', pht('Open Dependencies'))); } $reviewers = array(); // TODO: As above, this should be based on `getReviewerStatus()`. foreach ($revision->getReviewers() as $reviewer) { $reviewers[] = $this->handles[$reviewer]->renderLink(); } if (!$reviewers) { $reviewers = phutil_tag('em', array(), pht('None')); } else { $reviewers = phutil_implode_html(', ', $reviewers); } $item->addAttribute(pht('Reviewers: %s', $reviewers)); $item->setEpoch($revision->getDateModified()); if ($revision->isClosed()) { $item->setDisabled(true); } $item->setStatusIcon($revision->getStatusIcon(), $revision->getStatusDisplayName()); $list->addItem($item); } $list->setNoDataString($this->noDataString); if ($this->header && !$this->noBox) { $list->setFlush(true); $list = id(new PHUIObjectBoxView())->setBackground($this->background)->setObjectList($list); if ($this->header instanceof PHUIHeaderView) { $list->setHeader($this->header); } else { $list->setHeaderText($this->header); } } else { $list->setHeader($this->header); } return $list; }
public function render() { $user = $this->user; if (!$user) { throw new PhutilInvalidStateException('setUser'); } $fresh = PhabricatorEnv::getEnvConfig('differential.days-fresh'); if ($fresh) { $fresh = PhabricatorCalendarHoliday::getNthBusinessDay(time(), -$fresh); } $stale = PhabricatorEnv::getEnvConfig('differential.days-stale'); if ($stale) { $stale = PhabricatorCalendarHoliday::getNthBusinessDay(time(), -$stale); } $this->initBehavior('phabricator-tooltips', array()); $this->requireResource('aphront-tooltip-css'); $list = new PHUIObjectItemListView(); foreach ($this->revisions as $revision) { $item = id(new PHUIObjectItemView())->setUser($user); $icons = array(); $phid = $revision->getPHID(); $flag = $revision->getFlag($user); if ($flag) { $flag_class = PhabricatorFlagColor::getCSSClass($flag->getColor()); $icons['flag'] = phutil_tag('div', array('class' => 'phabricator-flag-icon ' . $flag_class), ''); } if ($revision->getDrafts($user)) { $icons['draft'] = true; } $modified = $revision->getDateModified(); $status = $revision->getStatus(); $show_age = ($fresh || $stale) && $this->highlightAge && !$revision->isClosed(); if ($stale && $modified < $stale) { $object_age = PHUIObjectItemView::AGE_OLD; } else { if ($fresh && $modified < $fresh) { $object_age = PHUIObjectItemView::AGE_STALE; } else { $object_age = PHUIObjectItemView::AGE_FRESH; } } $status_name = ArcanistDifferentialRevisionStatus::getNameForRevisionStatus($status); if (isset($icons['flag'])) { $item->addHeadIcon($icons['flag']); } $item->setObjectName('D' . $revision->getID()); $item->setHeader($revision->getTitle()); $item->setHref('/D' . $revision->getID()); if (isset($icons['draft'])) { $draft = id(new PHUIIconView())->setIcon('fa-comment yellow')->addSigil('has-tooltip')->setMetadata(array('tip' => pht('Unsubmitted Comments'))); $item->addAttribute($draft); } /* Most things 'Need Review', so accept it's the default */ if ($status != ArcanistDifferentialRevisionStatus::NEEDS_REVIEW) { $item->addAttribute($status_name); } // Author $author_handle = $this->handles[$revision->getAuthorPHID()]; $item->addByline(pht('Author: %s', $author_handle->renderLink())); $reviewers = array(); // TODO: As above, this should be based on `getReviewerStatus()`. foreach ($revision->getReviewers() as $reviewer) { $reviewers[] = $this->handles[$reviewer]->renderLink(); } if (!$reviewers) { $reviewers = phutil_tag('em', array(), pht('None')); } else { $reviewers = phutil_implode_html(', ', $reviewers); } $item->addAttribute(pht('Reviewers: %s', $reviewers)); $item->setEpoch($revision->getDateModified(), $object_age); switch ($status) { case ArcanistDifferentialRevisionStatus::NEEDS_REVIEW: $item->setStatusIcon('fa-code grey', pht('Needs Review')); break; case ArcanistDifferentialRevisionStatus::NEEDS_REVISION: $item->setStatusIcon('fa-refresh red', pht('Needs Revision')); break; case ArcanistDifferentialRevisionStatus::CHANGES_PLANNED: $item->setStatusIcon('fa-headphones red', pht('Changes Planned')); break; case ArcanistDifferentialRevisionStatus::ACCEPTED: $item->setStatusIcon('fa-check green', pht('Accepted')); break; case ArcanistDifferentialRevisionStatus::CLOSED: $item->setDisabled(true); $item->setStatusIcon('fa-check-square-o black', pht('Closed')); break; case ArcanistDifferentialRevisionStatus::ABANDONED: $item->setDisabled(true); $item->setStatusIcon('fa-plane black', pht('Abandoned')); break; } $list->addItem($item); } $list->setNoDataString($this->noDataString); if ($this->header && !$this->noBox) { $list->setFlush(true); $list = id(new PHUIObjectBoxView())->setObjectList($list); if ($this->header instanceof PHUIHeaderView) { $list->setHeader($this->header); } else { $list->setHeaderText($this->header); } } else { $list->setHeader($this->header); } return $list; }