2015-03-12 21:28:37 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
abstract class PhabricatorApplicationConfigurationPanel
|
|
|
|
extends Phobject {
|
|
|
|
|
|
|
|
private $viewer;
|
|
|
|
private $application;
|
|
|
|
|
|
|
|
public function setViewer(PhabricatorUser $viewer) {
|
|
|
|
$this->viewer = $viewer;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getViewer() {
|
|
|
|
return $this->viewer;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setApplication(PhabricatorApplication $application) {
|
|
|
|
$this->application = $application;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getApplication() {
|
|
|
|
return $this->application;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getPanelURI($path = null) {
|
|
|
|
$app_key = get_class($this->getApplication());
|
|
|
|
$panel_key = $this->getPanelKey();
|
|
|
|
$base = "/applications/panel/{$app_key}/{$panel_key}/";
|
|
|
|
return $base.ltrim($path, '/');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return a short, unique string key which identifies this panel.
|
|
|
|
*
|
|
|
|
* This key is used in URIs. Good values might be "email" or "files".
|
|
|
|
*/
|
|
|
|
abstract public function getPanelKey();
|
|
|
|
|
|
|
|
abstract public function shouldShowForApplication(
|
|
|
|
PhabricatorApplication $application);
|
|
|
|
|
|
|
|
abstract public function buildConfigurationPagePanel();
|
|
|
|
abstract public function handlePanelRequest(
|
|
|
|
AphrontRequest $request,
|
|
|
|
PhabricatorController $controller);
|
|
|
|
|
|
|
|
public static function loadAllPanels() {
|
2015-07-07 14:34:30 +02:00
|
|
|
return id(new PhutilClassMapQuery())
|
2015-03-12 21:28:37 +01:00
|
|
|
->setAncestorClass(__CLASS__)
|
2015-07-07 14:34:30 +02:00
|
|
|
->setUniqueMethod('getPanelKey')
|
|
|
|
->execute();
|
2015-03-12 21:28:37 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public static function loadAllPanelsForApplication(
|
|
|
|
PhabricatorApplication $application) {
|
|
|
|
$panels = self::loadAllPanels();
|
|
|
|
|
|
|
|
$application_panels = array();
|
|
|
|
foreach ($panels as $key => $panel) {
|
|
|
|
if (!$panel->shouldShowForApplication($application)) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$application_panels[$key] = $panel;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $application_panels;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|