Page MenuHomePhabricator

D10493.id25219.diff
No OneTemporary

D10493.id25219.diff

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/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 @@
+<?php
+
+$old_key = 'phabricator.show-beta-applications';
+$new_key = 'phabricator.show-prototypes';
+
+echo "Migrating '{$old_key}' to '{$new_key}'...\n";
+
+if (PhabricatorEnv::getEnvConfig($new_key)) {
+ echo "Skipping migration, new data is already set.\n";
+ return;
+}
+
+$old = PhabricatorEnv::getEnvConfigIfExists($old_key);
+if (!$old) {
+ echo "Skipping migration, old data does not exist.\n";
+ return;
+}
+
+PhabricatorConfigEntry::loadConfigEntry($new_key)
+ ->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 exiting 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,17 @@
$path = getenv('PATH');
+ $proto_doc_href = PhabricatorEnv::getDoclink(
+ 'User Guide: Prototype Applications');
+
+ $proto_doc_link = phutil_tag(
+ 'a',
+ array(
+ 'href' => $proto_doc_href,
+ 'target' => '_blank',
+ ),
+ pht('User Guide: Prototype Applications'));
+
return array(
$this->newOption('phabricator.base-uri', 'string', null)
->setLocked(true)
@@ -86,25 +97,32 @@
'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('Install Prototypes'),
+ pht('Uninstall 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.".
+ "\n\n".
+ "After enabling prototypes, you can selectively uninstall them ".
+ "(like normal applications).",
+ $proto_doc_link)),
$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,62 @@
+@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.
+
+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;

File Metadata

Mime Type
text/plain
Expires
Fri, May 10, 9:44 AM (1 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6281932
Default Alt Text
D10493.id25219.diff (23 KB)

Event Timeline