protected function run()
 {
     $argv = $this->getArgv();
     if (count($argv) !== 1) {
         throw new Exception(pht('Usage: %s %s', __CLASS__, '<json_config_file>'));
     }
     $json_raw = Filesystem::readFile($argv[0]);
     try {
         $config = phutil_json_decode($json_raw);
     } catch (PhutilJSONParserException $ex) {
         throw new PhutilProxyException(pht("File '%s' is not valid JSON!", $argv[0]), $ex);
     }
     $nick = idx($config, 'nick', 'phabot');
     $handlers = idx($config, 'handlers', array());
     $protocol_adapter_class = idx($config, 'protocol-adapter', 'PhabricatorIRCProtocolAdapter');
     $this->pollFrequency = idx($config, 'poll-frequency', 1);
     $this->config = $config;
     foreach ($handlers as $handler) {
         $obj = newv($handler, array($this));
         $this->handlers[] = $obj;
     }
     $ca_bundle = idx($config, 'https.cabundle');
     if ($ca_bundle) {
         HTTPSFuture::setGlobalCABundleFromPath($ca_bundle);
     }
     $conduit_uri = idx($config, 'conduit.uri');
     if ($conduit_uri) {
         $conduit_token = idx($config, 'conduit.token');
         // Normalize the path component of the URI so users can enter the
         // domain without the "/api/" part.
         $conduit_uri = new PhutilURI($conduit_uri);
         $conduit_host = (string) $conduit_uri->setPath('/');
         $conduit_uri = (string) $conduit_uri->setPath('/api/');
         $conduit = new ConduitClient($conduit_uri);
         if ($conduit_token) {
             $conduit->setConduitToken($conduit_token);
         } else {
             $conduit_user = idx($config, 'conduit.user');
             $conduit_cert = idx($config, 'conduit.cert');
             $response = $conduit->callMethodSynchronous('conduit.connect', array('client' => __CLASS__, 'clientVersion' => '1.0', 'clientDescription' => php_uname('n') . ':' . $nick, 'host' => $conduit_host, 'user' => $conduit_user, 'certificate' => $conduit_cert));
         }
         $this->conduit = $conduit;
     }
     // Instantiate Protocol Adapter, for now follow same technique as
     // handler instantiation
     $this->protocolAdapter = newv($protocol_adapter_class, array());
     $this->protocolAdapter->setConfig($this->config)->connect();
     $this->runLoop();
     $this->protocolAdapter->disconnect();
 }
Exemple #2
0
<?php

use Rych\Silex\Provider\PlatesServiceProvider;
require_once __DIR__ . '/vendor/autoload.php';
$app = new Silex\Application(require_once __DIR__ . '/config.php');
require_once $app['libphutil_path'] . '/libphutil/src/__phutil_library_init__.php';
$_client = new ConduitClient($app['phabricator_url']);
$_client->setConduitToken($app['api_token']);
$_escaper = new Escaper();
$_template = new Template(__DIR__ . '/_tpl', $_escaper);
/* HOME redirect to /{year}/{date} */
$app->get('/', function () use($app) {
    $url = $app['request']->getBaseUrl() . '/' . date('Y') . '/' . date('n');
    return $app->redirect($url);
});
/* MAIN */
$app->get('/{year}/{month}', function ($year, $month) use($app, $_client, $_template) {
    $data['base_path'] = $app['request']->getBaseUrl();
    $data['year'] = $year;
    $data['month'] = $month;
    $data['users'] = $_client->callMethodSynchronous('user.query', []);
    $data['days'] = cal_days_in_month(CAL_GREGORIAN, $month, $year);
    return $_template->render('index', $data);
});
/* API to get json data */
$app->get('/api', function () use($app, $_client) {
    $users = $_client->callMethodSynchronous('user.query', []);
    $colors = ['#80E680', '#4D4DFF', '#E066A3', '#DB4D4D', '#FF944D', '#A38566', '#FFFF66'];
    $projectColors = [];
    foreach ($users as &$user) {
        $open_tasks = $_client->callMethodSynchronous('maniphest.query', ['status' => 'status-open', 'ownerPHIDs' => [$user['phid']]]);