Path: blob/master/src/applications/guides/guidance/PhabricatorGuidanceEngine.php
13459 views
<?php12final class PhabricatorGuidanceEngine3extends Phobject {45private $viewer;6private $guidanceContext;78public function setGuidanceContext(9PhabricatorGuidanceContext $guidance_context) {10$this->guidanceContext = $guidance_context;11return $this;12}1314public function getGuidanceContext() {15return $this->guidanceContext;16}1718public function setViewer(PhabricatorUser $viewer) {19$this->viewer = $viewer;20return $this;21}2223public function getViewer() {24return $this->viewer;25}2627public function newInfoView() {28$extensions = PhabricatorGuidanceEngineExtension::getAllExtensions();29$context = $this->getGuidanceContext();3031$keep = array();32foreach ($extensions as $key => $extension) {33if (!$extension->canGenerateGuidance($context)) {34continue;35}36$keep[$key] = id(clone $extension);37}3839$guidance_map = array();40foreach ($keep as $extension) {41$guidance_list = $extension->generateGuidance($context);42foreach ($guidance_list as $guidance) {43$key = $guidance->getKey();4445if (isset($guidance_map[$key])) {46throw new Exception(47pht(48'Two guidance extensions generated guidance with the same '.49'key ("%s"). Each piece of guidance must have a unique key.',50$key));51}5253$guidance_map[$key] = $guidance;54}55}5657foreach ($keep as $extension) {58$guidance_map = $extension->didGenerateGuidance($context, $guidance_map);59}6061if (!$guidance_map) {62return null;63}6465$guidance_map = msortv($guidance_map, 'getSortVector');6667$severity = PhabricatorGuidanceMessage::SEVERITY_NOTICE;68$strength = null;69foreach ($guidance_map as $guidance) {70if ($strength !== null) {71if ($guidance->getSeverityStrength() <= $strength) {72continue;73}74}7576$strength = $guidance->getSeverityStrength();77$severity = $guidance->getSeverity();78}7980$severity_map = array(81PhabricatorGuidanceMessage::SEVERITY_NOTICE82=> PHUIInfoView::SEVERITY_NOTICE,83PhabricatorGuidanceMessage::SEVERITY_WARNING84=> PHUIInfoView::SEVERITY_WARNING,85);8687$messages = mpull($guidance_map, 'getMessage', 'getKey');8889return id(new PHUIInfoView())90->setViewer($this->getViewer())91->setSeverity(idx($severity_map, $severity, $severity))92->setErrors($messages);93}9495}969798