diff --git a/conf/default.conf.php b/conf/default.conf.php --- a/conf/default.conf.php +++ b/conf/default.conf.php @@ -630,9 +630,6 @@ // be enabled in production. 'phabricator.developer-mode' => false, - // Should Phabricator show beta applications on the homepage - 'phabricator.show-beta-applications' => false, - // Contains a list of uninstalled applications 'phabricator.uninstalled-applications' => array(), diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -7,7 +7,7 @@ */ return array( 'names' => array( - 'core.pkg.css' => 'f4235a32', + 'core.pkg.css' => '3317a3ad', 'core.pkg.js' => 'cbdbd552', 'darkconsole.pkg.js' => 'df001cab', 'differential.pkg.css' => '36884139', @@ -38,7 +38,7 @@ 'rsrc/css/application/auth/auth.css' => '1e655982', 'rsrc/css/application/base/main-menu-view.css' => 'aceca0e9', 'rsrc/css/application/base/notification-menu.css' => '6aa0a74b', - 'rsrc/css/application/base/phabricator-application-launch-view.css' => '8b7e271d', + 'rsrc/css/application/base/phabricator-application-launch-view.css' => '5d71008f', 'rsrc/css/application/base/standard-page-view.css' => 'dd860661', 'rsrc/css/application/chatlog/chatlog.css' => '852140ff', 'rsrc/css/application/config/config-options.css' => '7fedf08b', @@ -705,7 +705,7 @@ 'path-typeahead' => 'f7fc67ec', 'people-profile-css' => '5402f7a5', 'phabricator-action-list-view-css' => '9ee9910a', - 'phabricator-application-launch-view-css' => '8b7e271d', + 'phabricator-application-launch-view-css' => '5d71008f', 'phabricator-busy' => '6453c869', 'phabricator-chatlog-css' => '852140ff', 'phabricator-content-source-view-css' => '4b8b05d4', diff --git a/resources/sql/autopatches/20140914.betaproto.php b/resources/sql/autopatches/20140914.betaproto.php new file mode 100644 --- /dev/null +++ b/resources/sql/autopatches/20140914.betaproto.php @@ -0,0 +1,24 @@ +setIsDeleted(0) + ->setValue($old) + ->save(); + +echo "Done.\n"; diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php --- a/src/applications/base/PhabricatorApplication.php +++ b/src/applications/base/PhabricatorApplication.php @@ -53,8 +53,8 @@ return true; } - $beta = PhabricatorEnv::getEnvConfig('phabricator.show-beta-applications'); - if (!$beta && $this->isBeta()) { + $prototypes = PhabricatorEnv::getEnvConfig('phabricator.show-prototypes'); + if (!$prototypes && $this->isPrototype()) { return false; } @@ -65,7 +65,7 @@ } - public function isBeta() { + public function isPrototype() { return false; } diff --git a/src/applications/calendar/application/PhabricatorCalendarApplication.php b/src/applications/calendar/application/PhabricatorCalendarApplication.php --- a/src/applications/calendar/application/PhabricatorCalendarApplication.php +++ b/src/applications/calendar/application/PhabricatorCalendarApplication.php @@ -28,7 +28,7 @@ return "\xE2\x8C\xA8"; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/chatlog/application/PhabricatorChatLogApplication.php b/src/applications/chatlog/application/PhabricatorChatLogApplication.php --- a/src/applications/chatlog/application/PhabricatorChatLogApplication.php +++ b/src/applications/chatlog/application/PhabricatorChatLogApplication.php @@ -18,7 +18,7 @@ return 'chatlog'; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/config/check/PhabricatorSetupCheckExtraConfig.php b/src/applications/config/check/PhabricatorSetupCheckExtraConfig.php --- a/src/applications/config/check/PhabricatorSetupCheckExtraConfig.php +++ b/src/applications/config/check/PhabricatorSetupCheckExtraConfig.php @@ -190,6 +190,10 @@ 'differential.show-host-field' => $differential_field_reason, 'differential.show-test-plan-field' => $differential_field_reason, 'differential.field-selector' => $differential_field_reason, + 'phabricator.show-beta-applications' => pht( + 'This option has been renamed to `phabricator.show-prototypes` '. + 'to emphasize the unfinished nature of many prototype applications. '. + 'Your existing setting has been migrated.'), ); return $ancient_config; diff --git a/src/applications/config/option/PhabricatorCoreConfigOptions.php b/src/applications/config/option/PhabricatorCoreConfigOptions.php --- a/src/applications/config/option/PhabricatorCoreConfigOptions.php +++ b/src/applications/config/option/PhabricatorCoreConfigOptions.php @@ -24,6 +24,10 @@ $path = getenv('PATH'); + $proto_doc_href = PhabricatorEnv::getDoclink( + 'User Guide: Prototype Applications'); + $proto_doc_name = pht('User Guide: Prototype Applications'); + return array( $this->newOption('phabricator.base-uri', 'string', null) ->setLocked(true) @@ -86,25 +90,33 @@ 'Phabricator instances are running on both domains, this will '. 'create a collision preventing you from logging in.')) ->addExample('dev', pht('Prefix cookie with "dev"')), - $this->newOption('phabricator.show-beta-applications', 'bool', false) + $this->newOption('phabricator.show-prototypes', 'bool', false) ->setBoolOptions( array( - pht('Install Beta Applications'), - pht('Uninstall Beta Applications') + pht('Enable Prototypes'), + pht('Disable Prototypes') )) ->setSummary( pht( 'Install applications which are still under development.')) ->setDescription( pht( - "Phabricator includes 'Beta' applications which are in an early ". - "stage of development. They range from very rough prototypes to ". - "relatively complete (but unpolished) applications.\n\n". - "By default, Beta applications are not installed. You can enable ". - "this option to install them if you're interested in previewing ". - "upcoming features.\n\n". - "After enabling Beta applications, you can selectively uninstall ". - "them (like normal applications).")), + "IMPORTANT: The upstream does not provide support for prototype ". + "applications.". + "\n\n". + "Phabricator includes prototype applications which are in an ". + "**early stage of development**. By default, prototype ". + "applications are not installed, because are often not yet ". + "developed enough to be generally usable. You can enable ". + "this option to install them if you're developing Phabricator ". + "or are interested in previewing upcoming features.". + "\n\n". + "To learn more about prototypes, see [[ %s | %s ]].". + "\n\n". + "After enabling prototypes, you can selectively uninstall them ". + "(like normal applications).", + $proto_doc_href, + $proto_doc_name)), $this->newOption('phabricator.serious-business', 'bool', false) ->setBoolOptions( array( diff --git a/src/applications/diffusion/controller/DiffusionRepositoryNewController.php b/src/applications/diffusion/controller/DiffusionRepositoryNewController.php --- a/src/applications/diffusion/controller/DiffusionRepositoryNewController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryNewController.php @@ -47,8 +47,7 @@ array( pht( 'Create a new, empty repository which Phabricator will host. '. - 'For instructions on configuring repository hosting, see %s. '. - 'This feature is new and in beta!', + 'For instructions on configuring repository hosting, see %s.', $doc_link), )) ->addButton( diff --git a/src/applications/drydock/application/PhabricatorDrydockApplication.php b/src/applications/drydock/application/PhabricatorDrydockApplication.php --- a/src/applications/drydock/application/PhabricatorDrydockApplication.php +++ b/src/applications/drydock/application/PhabricatorDrydockApplication.php @@ -30,7 +30,7 @@ return self::GROUP_UTILITIES; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/fact/application/PhabricatorFactApplication.php b/src/applications/fact/application/PhabricatorFactApplication.php --- a/src/applications/fact/application/PhabricatorFactApplication.php +++ b/src/applications/fact/application/PhabricatorFactApplication.php @@ -22,7 +22,7 @@ return self::GROUP_UTILITIES; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/fund/application/PhabricatorFundApplication.php b/src/applications/fund/application/PhabricatorFundApplication.php --- a/src/applications/fund/application/PhabricatorFundApplication.php +++ b/src/applications/fund/application/PhabricatorFundApplication.php @@ -26,7 +26,7 @@ return self::GROUP_UTILITIES; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php --- a/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php +++ b/src/applications/harbormaster/application/PhabricatorHarbormasterApplication.php @@ -36,7 +36,7 @@ ); } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php --- a/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php +++ b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php @@ -77,10 +77,22 @@ phutil_tag('em', array(), $application->getFlavorText())); } - if ($application->isBeta()) { + if ($application->isPrototype()) { + $proto_href = PhabricatorEnv::getDoclink( + 'User Guide: Prototype Applications'); + $learn_more = phutil_tag( + 'a', + array( + 'href' => $proto_href, + 'target' => '_blank', + ), + pht('Learn More')); + $properties->addProperty( - pht('Release'), - pht('Beta')); + pht('Prototype'), + pht( + 'This application is a prototype. %s', + $learn_more)); } $overview = $application->getOverview(); @@ -160,9 +172,9 @@ ->setHref( $this->getApplicationURI(get_class($selected).'/install/')); - $beta_enabled = PhabricatorEnv::getEnvConfig( - 'phabricator.show-beta-applications'); - if ($selected->isBeta() && !$beta_enabled) { + $prototypes_enabled = PhabricatorEnv::getEnvConfig( + 'phabricator.show-prototypes'); + if ($selected->isPrototype() && !$prototypes_enabled) { $action->setDisabled(true); } diff --git a/src/applications/meta/controller/PhabricatorApplicationUninstallController.php b/src/applications/meta/controller/PhabricatorApplicationUninstallController.php --- a/src/applications/meta/controller/PhabricatorApplicationUninstallController.php +++ b/src/applications/meta/controller/PhabricatorApplicationUninstallController.php @@ -27,21 +27,21 @@ $view_uri = $this->getApplicationURI('view/'.$this->application); - $beta_enabled = PhabricatorEnv::getEnvConfig( - 'phabricator.show-beta-applications'); + $prototypes_enabled = PhabricatorEnv::getEnvConfig( + 'phabricator.show-prototypes'); $dialog = id(new AphrontDialogView()) ->setUser($user) ->addCancelButton($view_uri); - if ($selected->isBeta() && !$beta_enabled) { + if ($selected->isPrototype() && !$prototypes_enabled) { $dialog - ->setTitle(pht('Beta Applications Not Enabled')) + ->setTitle(pht('Prototypes Not Enabled')) ->appendChild( pht( - 'To manage beta applications, enable them by setting %s in your '. + 'To manage prototypes, enable them by setting %s in your '. 'Phabricator configuration.', - phutil_tag('tt', array(), 'phabricator.show-beta-applications'))); + phutil_tag('tt', array(), 'phabricator.show-prototypes'))); return id(new AphrontDialogResponse())->setDialog($dialog); } diff --git a/src/applications/meta/query/PhabricatorAppSearchEngine.php b/src/applications/meta/query/PhabricatorAppSearchEngine.php --- a/src/applications/meta/query/PhabricatorAppSearchEngine.php +++ b/src/applications/meta/query/PhabricatorAppSearchEngine.php @@ -24,8 +24,8 @@ 'installed', $this->readBoolFromRequest($request, 'installed')); $saved->setParameter( - 'beta', - $this->readBoolFromRequest($request, 'beta')); + 'prototypes', + $this->readBoolFromRequest($request, 'prototypes')); $saved->setParameter( 'firstParty', $this->readBoolFromRequest($request, 'firstParty')); @@ -51,9 +51,16 @@ $query->withInstalled($installed); } - $beta = $saved->getParameter('beta'); - if ($beta !== null) { - $query->withBeta($beta); + $prototypes = $saved->getParameter('prototypes'); + + if ($prototypes === null) { + // NOTE: This is the old name of the 'prototypes' option, see T6084. + $prototypes = $saved->getParameter('beta'); + $saved->setParameter('prototypes', $prototypes); + } + + if ($prototypes !== null) { + $query->withPrototypes($prototypes); } $first_party = $saved->getParameter('firstParty'); @@ -92,13 +99,13 @@ ))) ->appendChild( id(new AphrontFormSelectControl()) - ->setLabel(pht('Beta')) - ->setName('beta') - ->setValue($this->getBoolFromQuery($saved, 'beta')) + ->setLabel(pht('Prototypes')) + ->setName('prototypes') + ->setValue($this->getBoolFromQuery($saved, 'prototypes')) ->setOptions( array( '' => pht('Show All Applications'), - 'true' => pht('Show Beta Applications'), + 'true' => pht('Show Prototype Applications'), 'false' => pht('Show Released Applications'), ))) ->appendChild( @@ -229,8 +236,8 @@ $item->addIcon('fa-times', pht('Uninstalled')); } - if ($application->isBeta()) { - $item->addIcon('fa-star-half-o grey', pht('Beta')); + if ($application->isPrototype()) { + $item->addIcon('fa-bomb grey', pht('Prototype')); } if (!$application->isFirstParty()) { diff --git a/src/applications/meta/query/PhabricatorApplicationQuery.php b/src/applications/meta/query/PhabricatorApplicationQuery.php --- a/src/applications/meta/query/PhabricatorApplicationQuery.php +++ b/src/applications/meta/query/PhabricatorApplicationQuery.php @@ -4,7 +4,7 @@ extends PhabricatorCursorPagedPolicyAwareQuery { private $installed; - private $beta; + private $prototypes; private $firstParty; private $nameContains; private $unlisted; @@ -27,8 +27,8 @@ return $this; } - public function withBeta($beta) { - $this->beta = $beta; + public function withPrototypes($prototypes) { + $this->prototypes = $prototypes; return $this; } @@ -99,9 +99,9 @@ } } - if ($this->beta !== null) { + if ($this->prototypes !== null) { foreach ($apps as $key => $app) { - if ($app->isBeta() != $this->beta) { + if ($app->isPrototype() != $this->prototypes) { unset($apps[$key]); } } diff --git a/src/applications/meta/view/PhabricatorApplicationLaunchView.php b/src/applications/meta/view/PhabricatorApplicationLaunchView.php --- a/src/applications/meta/view/PhabricatorApplicationLaunchView.php +++ b/src/applications/meta/view/PhabricatorApplicationLaunchView.php @@ -43,16 +43,6 @@ ), $application->getName()); - if ($application->isBeta()) { - $content[] = javelin_tag( - 'span', - array( - 'aural' => false, - 'class' => 'phabricator-application-beta', - ), - "\xCE\xB2"); - } - $content[] = phutil_tag( 'span', array( diff --git a/src/applications/nuance/application/PhabricatorNuanceApplication.php b/src/applications/nuance/application/PhabricatorNuanceApplication.php --- a/src/applications/nuance/application/PhabricatorNuanceApplication.php +++ b/src/applications/nuance/application/PhabricatorNuanceApplication.php @@ -14,7 +14,7 @@ return "\xE2\x98\x8E"; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/oauthserver/application/PhabricatorOAuthServerApplication.php b/src/applications/oauthserver/application/PhabricatorOAuthServerApplication.php --- a/src/applications/oauthserver/application/PhabricatorOAuthServerApplication.php +++ b/src/applications/oauthserver/application/PhabricatorOAuthServerApplication.php @@ -30,7 +30,7 @@ return self::GROUP_ADMIN; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/phame/application/PhabricatorPhameApplication.php b/src/applications/phame/application/PhabricatorPhameApplication.php --- a/src/applications/phame/application/PhabricatorPhameApplication.php +++ b/src/applications/phame/application/PhabricatorPhameApplication.php @@ -26,7 +26,7 @@ return PhabricatorEnv::getDoclink('Phame User Guide'); } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/phlux/application/PhabricatorPhluxApplication.php b/src/applications/phlux/application/PhabricatorPhluxApplication.php --- a/src/applications/phlux/application/PhabricatorPhluxApplication.php +++ b/src/applications/phlux/application/PhabricatorPhluxApplication.php @@ -26,7 +26,7 @@ return self::GROUP_UTILITIES; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/phortune/application/PhabricatorPhortuneApplication.php b/src/applications/phortune/application/PhabricatorPhortuneApplication.php --- a/src/applications/phortune/application/PhabricatorPhortuneApplication.php +++ b/src/applications/phortune/application/PhabricatorPhortuneApplication.php @@ -26,7 +26,7 @@ return self::GROUP_UTILITIES; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/phragment/application/PhabricatorPhragmentApplication.php b/src/applications/phragment/application/PhabricatorPhragmentApplication.php --- a/src/applications/phragment/application/PhabricatorPhragmentApplication.php +++ b/src/applications/phragment/application/PhabricatorPhragmentApplication.php @@ -26,7 +26,7 @@ return self::GROUP_UTILITIES; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/phrequent/application/PhabricatorPhrequentApplication.php b/src/applications/phrequent/application/PhabricatorPhrequentApplication.php --- a/src/applications/phrequent/application/PhabricatorPhrequentApplication.php +++ b/src/applications/phrequent/application/PhabricatorPhrequentApplication.php @@ -14,7 +14,7 @@ return '/phrequent/'; } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/applications/ponder/application/PhabricatorPonderApplication.php b/src/applications/ponder/application/PhabricatorPonderApplication.php --- a/src/applications/ponder/application/PhabricatorPonderApplication.php +++ b/src/applications/ponder/application/PhabricatorPonderApplication.php @@ -41,7 +41,7 @@ ); } - public function isBeta() { + public function isPrototype() { return true; } diff --git a/src/docs/user/userguide/prototypes.diviner b/src/docs/user/userguide/prototypes.diviner new file mode 100644 --- /dev/null +++ b/src/docs/user/userguide/prototypes.diviner @@ -0,0 +1,65 @@ +@title User Guide: Prototype Applications +@group userguide + +Information about prototypes. + +Overview +======== + +Phabricator includes //prototype applications//, which are applications in an +early stage of development. + +IMPORTANT: The upstream does not offer support for these applications. + +When we begin working on a new application, we usually implement it as a +prototype first. This allows us to get a better sense of how the application +might work and integrate with other applications, and what technical and product +challenges it might face. + +Prototypes are often not generally usable. They usually aren't documented, +don't have safety and correctness checks in place, very rarely have full +integrations or APIs, and may be missing major pieces of critical functionality +or even not work at all. The parts of an application we prototype first +may not be the useful parts. + +Some applications leave the prototype phase quickly, but other applications may +not. We build some prototypes just to make sure a specific technical barrier is +surmountable, and may not finish the application for a very long time. In other +cases, the prototype seems less interesting or useful once it starts working +than we might have imagined it would be, or be far more challenging than we +thought. We may lower the priority of a project or put it on hold indefinitely +if we're less excited about it after we begin building it. + +If you're interested in previewing upcoming applications, you can use the +`phabricator.show-prototypes` configuration setting to enable prototypes. + +Feedback on Prototypes +====================== + +We're usually interested in this sort of feedback on prototypes: + + - {icon check, color=green} **Use Cases**: If we're building something that + you think you'd use, we'd love to hear about your use cases for it. This can + help us figure out what features to add and how users may think about, use, + and integrate the application. + - {icon check, color=green} **General Interest**: Is an application something + you're looking forward to? Knowing which applications users are interested + in can help us set priorities. + +We're usually **not** interested in this sort of feedback on prototypes: + + - {icon times, color=red} **Support Requests**: We do not support these + applications. Use them at your own risk, or wait for them to leave the + prototype phase. + - {icon times, color=red} **Bug Reports**: We know these applications don't + work well yet, and usually know about most of the open bugs. Even if we + don't, whatever isn't working yet may change completely before the + application leaves the prototype phase. + - {icon times, color=red} **Contributions / Pull Requests**: These + applications are usually in too early a state to accept contributions. Let + us know about your use case, but wait for release to send code. + +Overall, using prototypes makes it easier for us to explore and develop +application ideas, and to share a preview of what's coming in the future with +users, but prototypes are not yet full applications and we do not provide +support until applications leave the prototype phase. diff --git a/src/infrastructure/testing/PhabricatorTestCase.php b/src/infrastructure/testing/PhabricatorTestCase.php --- a/src/infrastructure/testing/PhabricatorTestCase.php +++ b/src/infrastructure/testing/PhabricatorTestCase.php @@ -102,7 +102,7 @@ 'phabricator.uninstalled-applications', array()); $this->env->overrideEnvConfig( - 'phabricator.show-beta-applications', + 'phabricator.show-prototypes', true); // Reset application settings to defaults, particularly policies. diff --git a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css b/webroot/rsrc/css/application/base/phabricator-application-launch-view.css --- a/webroot/rsrc/css/application/base/phabricator-application-launch-view.css +++ b/webroot/rsrc/css/application/base/phabricator-application-launch-view.css @@ -72,14 +72,6 @@ display: inline-block; } -.phabricator-application-beta { - position: absolute; - top: 4px; - left: 4px; - color: {$bluetext}; - font-size: 11px; -} - .phabricator-application-launch-attention { position: absolute; top: 8px;