Example #1
0
 protected function addMessage($message, $type = 'info')
 {
     if (!in_array($type, array('info', 'error', 'warning', 'success'))) {
         throw new ProgrammingError('"%s" is not a valid notification type', $type);
     }
     if ($this->isCli) {
         $msg = sprintf('[%s] %s', $type, $message);
         switch ($type) {
             case 'info':
             case 'success':
                 Logger::info($msg);
                 break;
             case 'warning':
                 Logger::warn($msg);
                 break;
             case 'error':
                 Logger::error($msg);
                 break;
         }
         return;
     }
     $this->messages[] = (object) array('type' => $type, 'message' => $message);
 }
 /**
  * Create webserver configuration
  *
  * USAGE:
  *
  *  icingacli setup config webserver <apache|nginx> [options]
  *
  * OPTIONS:
  *
  *  --path=<urlpath>                    The URL path to Icinga Web 2 [/icingaweb2]
  *
  *  --root|--document-root=<directory>  The directory from which the webserver will serve files [/path/to/icingaweb2/public]
  *
  *  --config=<directory>                Path to Icinga Web 2's configuration files [/etc/icingaweb2]
  *
  *  --file=<filename>                   Write configuration to file [stdout]
  *
  * EXAMPLES:
  *
  *  icingacli setup config webserver apache
  *
  *  icingacli setup config webserver apache --path=/icingaweb2 --document-root=/usr/share/icingaweb2/public --config=/etc/icingaweb2
  *
  *  icingacli setup config webserver apache --file=/etc/apache2/conf.d/icingaweb2.conf
  *
  *  icingacli setup config webserver nginx
  */
 public function webserverAction()
 {
     if (($type = $this->params->getStandalone()) === null) {
         $this->fail($this->translate('Argument type is mandatory.'));
     }
     try {
         $webserver = Webserver::createInstance($type);
     } catch (ProgrammingError $e) {
         $this->fail($this->translate('Unknown type') . ': ' . $type);
     }
     $urlPath = trim($this->params->get('path', $webserver->getUrlPath()));
     if (strlen($urlPath) === 0) {
         $this->fail($this->translate('The argument --path expects a URL path'));
     }
     $documentRoot = trim($this->params->get('root', $this->params->get('document-root', $webserver->getDocumentRoot())));
     if (strlen($documentRoot) === 0) {
         $this->fail($this->translate('The argument --root/--document-root expects a directory from which the webserver will serve files'));
     }
     $configDir = trim($this->params->get('config', $webserver->getConfigDir()));
     if (strlen($configDir) === 0) {
         $this->fail($this->translate('The argument --config expects a path to Icinga Web 2\'s configuration files'));
     }
     $webserver->setDocumentRoot($documentRoot)->setConfigDir($configDir)->setUrlPath($urlPath);
     $config = $webserver->generate() . "\n";
     if (($file = $this->params->get('file')) !== null) {
         if (file_exists($file) === true) {
             $this->fail(sprintf($this->translate('File %s already exists. Please delete it first.'), $file));
         }
         Logger::info($this->translate('Write %s configuration to file: %s'), $type, $file);
         $re = file_put_contents($file, $config);
         if ($re === false) {
             $this->fail($this->translate('Could not write to file') . ': ' . $file);
         }
         Logger::info($this->translate('Successfully written %d bytes to file'), $re);
         return true;
     }
     echo $config;
     return true;
 }
Example #3
0
 /**
  * Order the result by the given column
  *
  * @param string $columnOrAlias         The column or column alias to order by
  * @param int $dir                      The sort direction or null to use default direction
  *
  * @return $this                         Fluent interface
  */
 public function order($columnOrAlias, $dir = null)
 {
     $this->requireColumn($columnOrAlias);
     $this->orderColumns[$columnOrAlias] = $columnOrAlias;
     if ($this->isCustomvar($columnOrAlias)) {
         $columnOrAlias = $this->getCustomvarColumnName($columnOrAlias);
     } elseif ($this->hasAliasName($columnOrAlias)) {
         $columnOrAlias = $this->aliasToColumnName($columnOrAlias);
     } else {
         Logger::info('Can\'t order by column ' . $columnOrAlias);
         return $this;
     }
     return parent::order($columnOrAlias, $dir);
 }
Example #4
0
 /**
  * Order the result by the given alias
  *
  * @param   string  $alias  The column alias to order by
  * @param   int     $dir    The sort direction or null to use the default direction
  *
  * @return  $this
  */
 public function order($alias, $dir = null)
 {
     $this->requireColumn($alias);
     if ($this->isCustomvar($alias)) {
         $column = $this->getCustomvarColumnName($alias);
     } elseif ($this->hasAliasName($alias)) {
         $column = $this->aliasToColumnName($alias);
         $table = $this->aliasToTableName($alias);
         if (isset($this->caseInsensitiveColumns[$table][$alias])) {
             $column = 'LOWER(' . $column . ')';
         }
     } else {
         Logger::info('Can\'t order by column ' . $alias);
         return $this;
     }
     $this->orderColumns[] = $alias;
     return parent::order($column, $dir);
 }
Example #5
0
 /**
  * Add a sort rule for this query
  *
  * If called without a specific column, the repository's defaul sort rules will be applied.
  * This notifies the repository about each column being required as filter column.
  *
  * @param   string  $field          The name of the column by which to sort the query's result
  * @param   string  $direction      The direction to use when sorting (asc or desc, default is asc)
  * @param   bool    $ignoreDefault  Whether to ignore any default sort rules if $field is given
  *
  * @return  $this
  */
 public function order($field = null, $direction = null, $ignoreDefault = false)
 {
     $sortRules = $this->getSortRules();
     if ($field === null) {
         // Use first available sort rule as default
         if (empty($sortRules)) {
             // Return early in case of no sort defaults and no given $field
             return $this;
         }
         $sortColumns = reset($sortRules);
         if (!array_key_exists('columns', $sortColumns)) {
             $sortColumns['columns'] = array(key($sortRules));
         }
         if ($direction !== null || !array_key_exists('order', $sortColumns)) {
             $sortColumns['order'] = $direction ?: static::SORT_ASC;
         }
     } else {
         $alias = $this->repository->reassembleQueryColumnAlias($this->target, $field) ?: $field;
         if (!$ignoreDefault && array_key_exists($alias, $sortRules)) {
             $sortColumns = $sortRules[$alias];
             if (!array_key_exists('columns', $sortColumns)) {
                 $sortColumns['columns'] = array($alias);
             }
             if ($direction !== null || !array_key_exists('order', $sortColumns)) {
                 $sortColumns['order'] = $direction ?: static::SORT_ASC;
             }
         } else {
             $sortColumns = array('columns' => array($alias), 'order' => $direction);
         }
     }
     $baseDirection = strtoupper($sortColumns['order']) === static::SORT_DESC ? static::SORT_DESC : static::SORT_ASC;
     foreach ($sortColumns['columns'] as $column) {
         list($column, $specificDirection) = $this->splitOrder($column);
         if ($this->hasLimit() && $this->repository->providesValueConversion($this->target, $column)) {
             Logger::debug('Cannot order by column "%s" in repository "%s". The query is' . ' limited and applies value conversion rules on the column', $column, $this->repository->getName());
             continue;
         }
         try {
             $this->query->order($this->repository->requireFilterColumn($this->target, $column, $this), $specificDirection ?: $baseDirection);
         } catch (QueryException $_) {
             Logger::info('Cannot order by column "%s" in repository "%s"', $column, $this->repository->getName());
         }
     }
     return $this;
 }
Example #6
0
 /**
  * Add a notification message
  *
  * @param   string $message
  * @param   string $type
  */
 protected function addMessage($message, $type = self::INFO)
 {
     if ($this->isCli) {
         $msg = sprintf('[%s] %s', $type, $message);
         switch ($type) {
             case self::INFO:
             case self::SUCCESS:
                 Logger::info($msg);
                 break;
             case self::ERROR:
                 Logger::error($msg);
                 break;
             case self::WARNING:
                 Logger::warning($msg);
                 break;
         }
     } else {
         $this->messages[] = (object) array('type' => $type, 'message' => $message);
     }
 }