Merge branch 'master' into v1.3-dev

# Conflicts:
#	composer.json
#	protected/humhub/modules/admin/controllers/PendingRegistrationsController.php
#	protected/humhub/modules/admin/controllers/UserController.php
#	protected/humhub/modules/admin/views/pending-registrations/index.php
#	protected/humhub/modules/admin/views/user/index.php
#	protected/humhub/modules/space/behaviors/SpaceController.php
#	protected/humhub/modules/space/behaviors/SpaceModelMembership.php
#	static/less/file.less
#	themes/HumHub/css/theme.css
This commit is contained in:
Lucas Bartholemy 2018-02-13 19:21:27 +01:00
commit 708af2787b
253 changed files with 3597 additions and 126149 deletions

View File

@ -4,10 +4,14 @@ php:
- 5.6
- 7.0
- 7.1
matrix:
fast_finish: true
dist: precise
dist: trusty
addons:
chrome: stable
# faster builds on new travis setup not using sudo
sudo: false
@ -20,22 +24,23 @@ cache:
services: mysql
before_install:
- phantomjs -v
- echo "extension=ldap.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
- wget https://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip
- unzip -d $HOME chromedriver_linux64.zip
- $HOME/chromedriver --url-base=/wd/hub &
install:
#- wget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip
#- unzip chromedriver_linux64.zip -d ./
#- export CHROME_BIN=chromium-browser
# Start xvfb for gui test
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
#- "export DISPLAY=:99.0"
#- "sh -e /etc/init.d/xvfb start"
# Download and start selenium
- sleep 3 # give xvfb some time to start
- echo "Download selenium-server-standalone jar file"
- wget -c -nc --retry-connrefused --tries=0 http://goo.gl/EoH85x -O selenium-server-standalone.jar
- echo "Run selenium server - background process"
- nohup bash -c "java -jar selenium-server-standalone.jar &" && sleep 1; cat nohup.out
#- sleep 3 # give xvfb some time to start
#- echo "Download selenium-server-standalone jar file"
#- wget -c -nc --retry-connrefused --tries=0 http://goo.gl/EoH85x -O selenium-server-standalone.jar
#- echo "Run selenium server - background process"
#- nohup bash -c "java -jar selenium-server-standalone.jar &" && sleep 1; cat nohup.out
# Run Composer update
- travis_retry composer self-update && composer --version
- travis_retry composer global require "fxp/composer-asset-plugin:~1.3"
@ -45,20 +50,18 @@ install:
# Install test environment
- |
mysql -e 'CREATE DATABASE `humhub_test` CHARACTER SET utf8 COLLATE utf8_general_ci;'
cd protected/humhub/tests/codeception/bin
php yii migrate/up --includeModuleMigrations=1 --interactive=0
php yii installer/auto
php yii search/rebuild
cd ../../../../..
cd protected/humhub/tests
php codeception/bin/yii migrate/up --includeModuleMigrations=1 --interactive=0
php codeception/bin/yii installer/auto
php codeception/bin/yii search/rebuild
codecept build
cd ../../../
script:
- php -S 127.0.0.1:8080 > /dev/null 2>&1 &
- php -S 127.0.0.1:8080 &> /dev/null &
#- phantomjs --webdriver=4444 > /dev/null 2>&1 & # Not in use since phantomjs hangs with QIODevice::write (QTcpSocket): device not open
- sleep 5
- curl http://127.0.0.1:8080/index-test.php
- curl -I http://127.0.0.1:8080/index-test.php
- |
cd protected/humhub/tests/
codecept run

View File

@ -22,8 +22,7 @@
"yiisoft/yii2-httpclient": "~2.0.0",
"raoul2000/yii2-jcrop-widget": "*",
"kartik-v/yii2-widgets": "*",
"phpoffice/phpexcel": "*",
"cebe/markdown": "~1.0.2",
"cebe/markdown": "1.0.2",
"yiisoft/yii2-jui": "~2.0.0",
"zendframework/zend-http": "*",
"jbroadway/urlify": "^1.0",
@ -57,9 +56,10 @@
"yiisoft/yii2-redis": "^2.0",
"firebase/php-jwt": "^5.0",
"npm-asset/socket.io-client": "^2.0"
"phpoffice/phpspreadsheet": "^1.0"
},
"require-dev": {
"codeception/codeception": "*",
"codeception/codeception": "~2.3",
"yiisoft/yii2-debug": "~2.0.0",
"yiisoft/yii2-gii": "~2.0.0",
"yiisoft/yii2-faker": "~2.0.0",

View File

@ -0,0 +1,91 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components\export;
use yii\base\Object;
/**
* Column is the base class of all [[SpreadsheetExport]] column classes.
*
* This class was originally developed by Paul Klimov <klimov.paul@gmail.com> and his
* project csv-grid (https://github.com/yii2tech/csv-grid).
*/
class Column extends Object
{
/**
* @var SpreadsheetExport the grid view object that owns this column.
*/
public $grid;
/**
* @var string the header cell content. Note that it will not be HTML-encoded.
*/
public $header;
/**
* @var string the footer cell content. Note that it will not be HTML-encoded.
*/
public $footer;
/**
* @var callable This is a callable that will be used to generate the content of each cell.
* The signature of the function should be the following: `function ($model, $key, $index, $column)`.
* Where `$model`, `$key`, and `$index` refer to the model, key and index of the row currently being rendered
* and `$column` is a reference to the [[Column]] object.
*/
public $content;
/**
* @var bool whether this column is visible. Defaults to true.
*/
public $visible = true;
/**
* @var string|null specify data type
* @see https://phpspreadsheet.readthedocs.io/en/develop/topics/accessing-cells/#excel-datatypes
*/
public $dataType = null;
/**
* @var array containing style information
* @see https://phpspreadsheet.readthedocs.io/en/develop/topics/recipes/#styles
*/
public $styles = [];
/**
* Renders the header cell content.
* The default implementation simply renders [[header]].
* This method may be overridden to customize the rendering of the header cell.
* @return string the rendering result
*/
public function renderHeaderCellContent()
{
return trim($this->header) !== '' ? $this->header : $this->grid->emptyCell;
}
/**
* Renders the footer cell content.
* The default implementation simply renders [[footer]].
* This method may be overridden to customize the rendering of the footer cell.
* @return string the rendering result
*/
public function renderFooterCellContent()
{
return trim($this->footer) !== '' ? $this->footer : $this->grid->emptyCell;
}
/**
* Renders the data cell content.
* @param mixed $model the data model
* @param mixed $key the key associated with the data model
* @param int $index zero-based index of data model among models array returned by [[GridView::dataProvider]].
* @return string the rendering result
*/
public function renderDataCellContent($model, $key, $index)
{
if ($this->content !== null) {
return call_user_func($this->content, $model, $key, $index, $this);
} else {
return $this->grid->emptyCell;
}
}
}

View File

@ -0,0 +1,131 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components\export;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use yii\db\ActiveQueryInterface;
use yii\helpers\ArrayHelper;
use yii\helpers\Inflector;
/**
* DataColumn is the default column type for the [[SpreadsheetExport]] widget.
*
* This class was originally developed by Paul Klimov <klimov.paul@gmail.com> and his
* project csv-grid (https://github.com/yii2tech/csv-grid).
*/
class DataColumn extends Column
{
/**
* @var string the attribute name associated with this column. When neither [[content]] nor [[value]]
* is specified, the value of the specified attribute will be retrieved from each data model and displayed.
*
* Also, if [[label]] is not specified, the label associated with the attribute will be displayed.
*/
public $attribute;
/**
* @var string label to be displayed in the [[header|header cell]].
* If it is not set and the models provided by the GridViews data provider are instances
* of [[\yii\db\ActiveRecord]], the label will be determined using [[\yii\db\ActiveRecord::getAttributeLabel()]].
* Otherwise [[\yii\helpers\Inflector::camel2words()]] will be used to get a label.
*/
public $label;
/**
* @var string|\Closure anonymous function or a string that is used to determine the value for the current column.
*
* If this is an anonymous function, it will be called for each row and the return value will be used as the
* value to display for every data model. The signature of this function should be:
* `function ($model, $key, $index, $column)`.
* Where `$model`, `$key`, and `$index` refer to the model, key and index of the row currently being rendered
* and `$column` is a reference to the [[DataColumn]] object.
*
* You may also set this property to a string representing the attribute name to be displayed in this column.
*
* If this is not set, `$model[$attribute]` will be used to obtain the value, where `$attribute`
* is the value of [[attribute]].
*/
public $value;
/**
* @var string|array in which format should the value of each data model be displayed as
* (e.g. `"raw"`, `"text"`, `"html"`, `['date', 'php:Y-m-d']`). Supported formats are determined by
* the [[GridView::formatter|formatter]] used by he [[GridView]]. Default format is "text" which will format
* the value as an HTML-encoded plain text when [[\yii\i18n\Formatter]] is used as
* the [[GridView::$formatter|formatter]] of the GridView.
*/
public $format = 'text';
/**
* @inheritdoc
*/
public function renderHeaderCellContent()
{
if ($this->header !== null || $this->label === null && $this->attribute === null) {
return parent::renderHeaderCellContent();
}
$provider = $this->grid->dataProvider;
if ($this->label === null) {
if ($provider instanceof ActiveDataProvider && $provider->query instanceof ActiveQueryInterface) {
/* @var $model Model */
$model = new $provider->query->modelClass;
$label = $model->getAttributeLabel($this->attribute);
} else {
$models = $provider->getModels();
if (($model = reset($models)) instanceof Model) {
/* @var $model Model */
$label = $model->getAttributeLabel($this->attribute);
} else {
$label = Inflector::camel2words($this->attribute);
}
}
} else {
$label = $this->label;
}
return $label;
}
/**
* Returns the data cell value.
* @param mixed $model the data model
* @param mixed $key the key associated with the data model
* @param integer $index zero-based index of data model among models array returned by [[GridView::dataProvider]].
* @return string the data cell value
*/
public function getDataCellValue($model, $key, $index)
{
if ($this->value !== null) {
if (is_string($this->value)) {
return ArrayHelper::getValue($model, $this->value);
} else {
return call_user_func($this->value, $model, $key, $index, $this);
}
} elseif ($this->attribute !== null) {
return ArrayHelper::getValue($model, $this->attribute);
}
return null;
}
/**
* @inheritdoc
*/
public function renderDataCellContent($model, $key, $index)
{
if ($this->content === null) {
$value = $this->getDataCellValue($model, $key, $index);
if ($value === null) {
return $this->grid->nullDisplay;
}
return $this->grid->formatter->format($value, $this->format);
} else {
return parent::renderDataCellContent($model, $key, $index);
}
}
}

View File

@ -0,0 +1,35 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components\export;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
/**
* DateTimeColumn exports DateTime values to [[SpreadsheetExport]] widget.
*/
class DateTimeColumn extends DataColumn
{
/**
* @var array containing style information
* @see https://phpspreadsheet.readthedocs.io/en/develop/topics/recipes/#styles
*/
public $styles = [
'numberFormat' => [
'formatCode' => NumberFormat::FORMAT_DATE_DATETIME
]
];
/**
* @inheritdoc
*/
public function renderDataCellContent($model, $key, $index)
{
return Date::PHPToExcel(parent::renderDataCellContent($model, $key, $index));
}
}

View File

@ -0,0 +1,146 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components\export;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Yii;
use yii\base\Object;
use yii\helpers\FileHelper;
use yii\web\Response;
/**
* ExportResult represents SpreadsheetExport result.
*
* This class was originally developed by Paul Klimov <klimov.paul@gmail.com> and his
* project csv-grid (https://github.com/yii2tech/csv-grid).
*
* @see SpreadsheetExport
*/
class ExportResult extends Object
{
/**
* @var string base path for the temporary directory and files.
*/
public $basePath = '@runtime/data_export';
/**
* @var string base name, which should be used for the created files.
*/
public $fileBaseName = 'export';
/**
* @var string
*/
public $writerType = 'csv';
/**
* @var Spreadsheet Spreadsheet instance
*/
private $spreadsheet;
/**
* @var string temporary files directory name
*/
private $tempFileName;
/**
* @var string name of the result file.
*/
private $resultFileName;
/**
* Destructor.
* Makes sure the temporary directory removed.
*/
public function __destruct()
{
$this->delete();
}
/**
* @return string files directory name
* @throws \yii\base\Exception
*/
public function getTempFileName()
{
if ($this->tempFileName === null) {
$basePath = Yii::getAlias($this->basePath);
FileHelper::createDirectory($basePath);
$this->tempFileName = $basePath . DIRECTORY_SEPARATOR . uniqid(time(), true);
}
return $this->tempFileName;
}
/**
* @return string result file name
*/
public function getResultFileName()
{
if ($this->resultFileName === null) {
$this->resultFileName = $this->fileBaseName . '.' . $this->writerType;
}
return $this->resultFileName;
}
/**
* Creates new CSV file in result set.
* @return Spreadsheet instance.
*/
public function newSpreadsheet()
{
$this->spreadsheet = new Spreadsheet();
return $this->spreadsheet;
}
/**
* Deletes associated directory with all internal files.
* @return boolean whether file has been deleted.
*/
public function delete()
{
if (!empty($this->tempFileName) && is_writable($this->tempFileName)) {
unlink($this->tempFileName);
return true;
}
return false;
}
/**
* Saves this file.
* @param string $file destination file name (may content path alias).
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
*/
public function saveAs($file)
{
$writer = IOFactory::createWriter($this->spreadsheet, ucfirst($this->writerType));
$writer->save($file);
}
/**
* Prepares response for sending a result file to the browser.
* Note: this method works only while running web application.
* @param array $options additional options for sending the file. See [[\yii\web\Response::sendFile()]] for details.
* @return \yii\web\Response application response instance.
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
* @throws \yii\base\Exception
*/
public function send($options = [])
{
$this->saveAs($this->getTempFileName());
$response = Yii::$app->getResponse();
$response->on(Response::EVENT_AFTER_SEND, [$this, 'delete']);
return $response->sendFile($this->getTempFileName(), $this->getResultFileName(), $options);
}
}

View File

@ -0,0 +1,373 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components\export;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Yii;
use yii\base\Component;
use yii\base\InvalidConfigException;
use yii\data\ActiveDataProvider;
use yii\di\Instance;
use yii\i18n\Formatter;
/**
* SpreadsheetExport allows export of data into PhpSpreadsheet
* It supports exporting of the [[\yii\data\DataProviderInterface]] and [[\yii\db\QueryInterface]] instances.
*
* This class was originally developed by Paul Klimov <klimov.paul@gmail.com> and his
* project csv-grid (https://github.com/yii2tech/csv-grid).
*
* Example:
*
* ```php
* use humhub\components\export\SpreadsheetExport;
* use yii\data\ArrayDataProvider;
*
* $exporter = new SpreadsheetExport([
* 'dataProvider' => new ArrayDataProvider([
* 'allModels' => [
* [
* 'name' => 'some name',
* 'price' => '9879',
* ],
* [
* 'name' => 'name 2',
* 'price' => '79',
* ],
* ],
* ]),
* 'columns' => [
* [
* 'attribute' => 'name',
* ],
* [
* 'attribute' => 'price',
* 'format' => 'decimal',
* ],
* ],
* ]);
* $exporter->export()->saveAs('/path/to/file.csv');
* ```
*/
class SpreadsheetExport extends Component
{
/**
* @var \yii\data\DataProviderInterface the data provider for the view.
* This property can be omitted in case [[query]] is set.
*/
public $dataProvider;
/**
* @var \yii\db\QueryInterface the data source query.
* Note: this field will be ignored in case [[dataProvider]] is set.
*/
public $query;
/**
* @var array|Column[]
*/
public $columns = [];
/**
* @var boolean whether to show the header section of the sheet.
*/
public $showHeader = true;
/**
* @var boolean whether to show the footer section of the sheet.
*/
public $showFooter = false;
/**
* @var boolean enable autosize for xlsx/xls export.
*/
public $autoSize = true;
/**
* @var string the HTML display when the content of a cell is empty.
* This property is used to render cells that have no defined content,
* e.g. empty footer or filter cells.
*
* Note that this is not used by the [[DataColumn]] if a data item is `null`. In that case
* the [[nullDisplay]] property will be used to indicate an empty data value.
*/
public $emptyCell = '';
/**
* @var string the text to be displayed when formatting a `null` data value.
*/
public $nullDisplay = '';
/**
* @var array configuration for [[ExportResult]] instance created in process result.
*
* For example:
*
* ```php
* [
* 'forceArchive' => true
* ]
* ```
*
* @see ExportResult
*/
public $resultConfig = [];
/**
* @var array|Formatter the formatter used to format model attribute values into displayable texts.
* This can be either an instance of [[Formatter]] or an configuration array for creating the [[Formatter]]
* instance. If this property is not set, the "formatter" application component will be used.
*/
private $formatter;
/**
* @var int
*/
private $row = 1;
/**
* Initializes the grid.
* This method will initialize required property values and instantiate [[columns]] objects.
*/
public function init()
{
parent::init();
if ($this->dataProvider === null && $this->query !== null) {
$this->dataProvider = new ActiveDataProvider([
'query' => $this->query,
'pagination' => false,
]);
}
}
/**
* @return Formatter formatter instance
* @throws \yii\base\InvalidConfigException
*/
public function getFormatter()
{
if (!is_object($this->formatter)) {
if ($this->formatter === null) {
$this->formatter = Yii::$app->getFormatter();
} else {
$this->formatter = Instance::ensure($this->formatter, Formatter::className());
}
}
return $this->formatter;
}
/**
* @param array|Formatter $formatter
*/
public function setFormatter($formatter)
{
$this->formatter = $formatter;
}
/**
* Creates column objects and initializes them.
* @param array $model list of single row model
* @throws \yii\base\InvalidConfigException
*/
protected function initColumns($model)
{
if (empty($this->columns)) {
$this->guessColumns($model);
}
foreach ($this->columns as $i => $column) {
if (is_string($column)) {
$column = $this->createDataColumn($column);
} else {
$column = Yii::createObject(array_merge([
'class' => DataColumn::className(),
'grid' => $this,
], $column));
}
if (!$column->visible) {
unset($this->columns[$i]);
continue;
}
$this->columns[$i] = $column;
}
}
/**
* This function tries to guess the columns to show from the given data
* if [[columns]] are not explicitly specified.
* @param array $model list of model
*/
protected function guessColumns($model)
{
if (is_array($model) || is_object($model)) {
foreach ($model as $name => $value) {
$this->columns[] = (string)$name;
}
}
}
/**
* Creates a [[DataColumn]] object based on a string in the format of "attribute:format:label".
* @param string $text the column specification string
* @return DataColumn the column instance
* @throws InvalidConfigException if the column specification is invalid
*/
protected function createDataColumn($text)
{
if (!preg_match('/^([^:]+)(:(\w*))?(:(.*))?$/', $text, $matches)) {
throw new InvalidConfigException(
'The column must be specified in the format of "attribute", '
. '"attribute:format" or "attribute:format:label"'
);
}
/** @var DataColumn $column */
$column = Yii::createObject([
'class' => DataColumn::className(),
'grid' => $this,
'attribute' => $matches[1],
'format' => isset($matches[3]) ? $matches[3] : 'text',
'label' => isset($matches[5]) ? $matches[5] : null,
]);
return $column;
}
/**
* Performs data export.
* @return ExportResult export result.
* @throws \yii\base\InvalidConfigException
* @throws \PhpOffice\PhpSpreadsheet\Exception
*/
public function export()
{
/** @var ExportResult $result */
$result = Yii::createObject(array_merge([
'class' => ExportResult::className(),
], $this->resultConfig));
$spreadsheet = $result->newSpreadsheet();
$models = $this->dataProvider->getModels();
$keys = $this->dataProvider->getKeys();
$this->initColumns(reset($models));
if ($this->showHeader) {
$this->composeHeaderRow($spreadsheet);
}
foreach ($models as $index => $model) {
$key = isset($keys[$index]) ? $keys[$index] : $index;
$this->composeBodyRow($spreadsheet, $model, $key, $index);
}
if ($this->showFooter) {
$this->composeFooterRow($spreadsheet);
}
if ($this->autoSize) {
$this->applyAutoSize($spreadsheet);
}
$this->gc();
return $result;
}
/**
* Composes header row contents.
* @param Spreadsheet $spreadsheet
* @throws \PhpOffice\PhpSpreadsheet\Exception
*/
protected function composeHeaderRow($spreadsheet)
{
$worksheet = $spreadsheet->getActiveSheet();
$row = $this->nextRow();
foreach ($this->columns as $columnIndex => $column) {
$worksheet->setCellValueByColumnAndRow(
$columnIndex + 1,
$row,
$column->renderHeaderCellContent()
);
}
}
/**
* Composes header row contents.
* @param Spreadsheet $spreadsheet
* @throws \PhpOffice\PhpSpreadsheet\Exception
*/
protected function composeFooterRow($spreadsheet)
{
$worksheet = $spreadsheet->getActiveSheet();
$row = $this->nextRow();
foreach ($this->columns as $columnIndex => $column) {
$worksheet->setCellValueByColumnAndRow(
$columnIndex + 1,
$row,
$column->renderFooterCellContent()
);
}
}
/**
* Composes body row contents.
* @param Spreadsheet $spreadsheet
* @param mixed $model the data model
* @param mixed $key the key associated with the data model
* @param int $index zero-based index of data model among the models array returned by [[GridView::dataProvider]].
* @throws \PhpOffice\PhpSpreadsheet\Exception
*/
protected function composeBodyRow($spreadsheet, $model, $key, $index)
{
$worksheet = $spreadsheet->getActiveSheet();
$row = $this->nextRow();
foreach ($this->columns as $columnIndex => $column) {
$cell = $worksheet->getCellByColumnAndRow($columnIndex + 1, $row);
$value = $column->renderDataCellContent($model, $key, $index);
if ($column->dataType !== null) {
$cell->setValueExplicit($value, $column->dataType);
} else {
$cell->setValue($value);
}
if ($column->styles !== []) {
$cell->getStyle()->applyFromArray($column->styles);
}
}
}
/**
* Enable AutoSize for Export
* @param Spreadsheet $spreadsheet
* @throws \PhpOffice\PhpSpreadsheet\Exception
*/
protected function applyAutoSize($spreadsheet)
{
$worksheet = $spreadsheet->getActiveSheet();
foreach ($this->columns as $columnIndex => $column) {
$worksheet->getColumnDimensionByColumn($columnIndex + 1)->setAutoSize(true);
}
}
/**
* @return int
*/
protected function nextRow()
{
return $this->row++;
}
/**
* Performs PHP memory garbage collection.
*/
protected function gc()
{
if (!gc_enabled()) {
gc_enable();
}
gc_collect_cycles();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -46,12 +46,13 @@ $config = [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
'except' => ['yii\web\HttpException:400', 'yii\web\HttpException:401', 'yii\web\HttpException:403', 'yii\web\HttpException:404', 'yii\web\HttpException:405'],
'logVars' => ['_GET', '_SERVER'],
],
[
'class' => 'yii\log\DbTarget',
'levels' => ['error', 'warning'],
'except' => ['yii\web\HttpException:404', 'yii\web\HttpException:403', 'yii\web\HttpException:401'],
'except' => ['yii\web\HttpException:400', 'yii\web\HttpException:401', 'yii\web\HttpException:403', 'yii\web\HttpException:404', 'yii\web\HttpException:405'],
'logVars' => ['_GET', '_SERVER'],
],
],

View File

@ -4,6 +4,9 @@ HumHub Change Log
1.2.5 (Not released)
---------------------
When you customized or used the createCVS method of PendingRegistrationsController please
migrate your code to SpreadsheetExport. PHPOffice is replaced by PHPSpreadsheet.
- Enh: Added BaseURL setting protocol scheme validation
- Fix #2849: ActiveQueryContent doesn't find public profile content when guest access is enabled
- Enh: Fixed username alignment in comments (@githubjeka)
@ -17,6 +20,8 @@ HumHub Change Log
- Fix #2947: Allow json success result on modalSubmit
- Enh: Disabled automatic content following on likes by default
- Enh: Improved IntegrityChecker memory usage
- Chg: `PendingRegistrationsController->createCVS` removed
- Fix: Stream image preview size not changeable
1.2.4 (December 13, 2017)

View File

@ -2,7 +2,7 @@
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
@ -10,7 +10,6 @@ namespace humhub\libs;
use Yii;
/**
* CURLHelper
*
@ -26,13 +25,13 @@ class CURLHelper
*/
public static function getOptions()
{
$options = array(
$options = [
CURLOPT_SSL_VERIFYPEER => (Yii::$app->params['curl']['validateSsl']) ? true : false,
CURLOPT_SSL_VERIFYHOST => (Yii::$app->params['curl']['validateSsl']) ? 2 : 0,
CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
CURLOPT_CAINFO => Yii::getAlias('@humhub/config/cacert.pem')
);
];
if (Yii::$app->settings->get('proxy.enabled')) {
$options[CURLOPT_PROXY] = Yii::$app->settings->get('proxy.server');

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<?php
return array (
'Invalid content id given!' => 'id de contenu non valide',
'Invalid content id given!' => 'ID de contenu incorrect',
);

File diff suppressed because one or more lines are too long

View File

@ -1,97 +1,80 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'<strong>Confirm</strong> Action' => '<strong>Confirmer</strong> l\'opération',
'<strong>Latest</strong> updates' => '<strong>Dernières</strong> mises à jour',
'<strong>Mail</strong> summary' => '<strong>E-mail</strong> résumé',
'Account settings' => 'Paramètres du compte',
'Administration' => 'Administration',
'Allow' => 'Autoriser',
'An error occurred while handling your last action. (Handler not found).' => 'Une erreur s\'est produite lors de la manipulation de votre dernière action. (Gestionnaire introuvable)',
'An unexpected error occurred while loading the search result.' => 'Une erreur inattendue s\'est produite lors du chargement du résultat de la recherche.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur de serveur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unknown error occurred while uploading.' => 'Une erreur inconnue s\'est produite pendant l\'envoi de fichier.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Une erreur inconnue s\'est produite lors du chargement de fichier. Vérifiez les paramètres "php upload_max_filesize" et "post_max_size"',
'Back' => 'Retour',
'Back to dashboard' => 'Retour au fil d\'actualités',
'Cancel' => 'Annuler',
'Choose language:' => 'Choisir la langue :',
'Close' => 'Fermer',
'Collapse' => 'Réduire',
'Confirm' => 'Confirmer',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Le contenu d\'un add-on doit être une instance de HActiveRecordContent ou HActiveRecordContentAddon !',
'Copy to clipboard' => 'Copier vers le presse-papier',
'Could not determine content container!' => 'Le contenu du conteneur n\'a pas pu être déterminé !',
'Could not find content of addon!' => 'Le contenu du add-on n\'a pu être trouvé !',
'Default' => 'Défaut',
'Deny' => 'Interdire',
'Do you really want to perform this action?' => 'Voulez-vous vraiment effectuer cette action ?',
'Error' => 'Erreur',
'Error while running your last action (Invalid request method).' => 'Erreur lors de l\'exécution de votre dernière action (méthode de demande non valide).',
'Error:' => 'Erreur :',
'Expand' => 'Agrandir',
'Export' => 'Exporter',
'Info:' => 'Info :',
'Invalid request method!' => 'Méthode de requête invalide.',
'It looks like you may have taken the wrong turn.' => 'Il semble que vous n\'êtes pas au bon endroit...',
'Language' => 'Langue',
'Loading...' => 'Chargement...',
'Login' => 'S\'identifier',
'Logo of {appName}' => 'Logo de {appName}',
'Logout' => 'Se déconnecter',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Le module n\'est pas activé pour ce conteneur.',
'My profile' => 'Mon profil',
'My profile image' => 'Mon image de profil',
'New profile image' => 'Nouvelle image de profil',
'Next' => 'Suivant',
'No error information given.' => 'Aucune information d\'erreur fournie.',
'Oooops...' => 'Oups...',
'Open' => 'Ouvrir',
'Please type at least 3 characters' => 'Merci de taper au moins 3 caractères',
'Profile dropdown' => 'Liste déroulante de profil',
'Profile image of {displayName}' => 'Image de profil de {displayName}',
'Profile picture of {displayName}' => 'Photo de profil de {displayName}',
'Save' => 'Enregistrer',
'Saved' => 'Enregistré',
'Search' => 'Rechercher',
'Select Me' => 'Me choisir',
'Show less' => 'Montrer moins',
'Show more' => 'Montrer plus',
'Some files could not be uploaded:' => 'Certains fichiers n\'ont pas pu être téléchargés :',
'Space not found!' => 'Espace non trouvé.',
'The date has to be in the past.' => 'La date doit être révolue.',
'The file has been deleted.' => 'Le fichier a été supprimé.',
'The requested resource could not be found.' => 'Impossible de trouver la ressource demandée.',
'The space has been archived.' => 'L\'espace à été archivé.',
'The space has been unarchived.' => 'L\'espace à été désarchivé.',
'Time Zone' => 'Fuseau horaire',
'Toggle comment menu' => 'Bascule du menu de commentaire',
'Toggle panel menu' => 'Bascule du menu du panneau',
'Toggle post menu' => 'Bascule du menu de contribution',
'Toggle stream entry menu' => 'Bascule du menu du flux d\'activité',
'Unsubscribe' => 'Désinscription',
'Upload' => 'Ajouter',
'Upload file' => 'Envoyer un fichier',
'User not found!' => 'Utilisateur non trouvé.',
'You are not allowed to run this action.' => 'Vous n\'êtes pas autorisé à exécuter cette action.',
];
return array (
'<strong>Confirm</strong> Action' => '<strong>Confirmer</strong> l\'opération',
'<strong>Latest</strong> updates' => '<strong>Dernières</strong> mises à jour',
'<strong>Mail</strong> summary' => 'Résumé par <strong>e-mail</strong>',
'Account settings' => 'Paramètres du compte',
'Administration' => 'Administration',
'Allow' => 'Autoriser',
'An error occurred while handling your last action. (Handler not found).' => 'Une erreur s\'est produite lors de la manipulation de votre dernière action. (Gestionnaire introuvable)',
'An unexpected error occurred while loading the search result.' => 'Une erreur inattendue s\'est produite lors du chargement du résultat de la recherche.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur de serveur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unknown error occurred while uploading.' => 'Une erreur inconnue s\'est produite pendant l\'envoi de fichier.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Une erreur inconnue s\'est produite lors du chargement de fichier. Vérifiez les paramètres "php upload_max_filesize" et "post_max_size"',
'Back' => 'Retour',
'Back to dashboard' => 'Retour au fil d\'actualités',
'Cancel' => 'Annuler',
'Choose language:' => 'Choisir la langue :',
'Close' => 'Fermer',
'Collapse' => 'Réduire',
'Confirm' => 'Confirmer',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Le contenu d\'un add-on doit être une instance de HActiveRecordContent ou HActiveRecordContentAddon.',
'Copy to clipboard' => 'Copier vers le presse-papier',
'Could not determine content container!' => 'Le conteneur du contenu n\'a pas pu être déterminé.',
'Could not find content of addon!' => 'Le contenu du add-on n\'a pu être trouvé.',
'Default' => 'Défaut',
'Deny' => 'Interdire',
'Do you really want to perform this action?' => 'Voulez-vous vraiment effectuer cette action ?',
'Error' => 'Erreur',
'Error while running your last action (Invalid request method).' => 'Erreur lors de l\'exécution de votre dernière action (méthode de demande non valide).',
'Error:' => 'Erreur :',
'Expand' => 'Agrandir',
'Export' => 'Exporter',
'Info:' => 'Info :',
'Invalid request method!' => 'Méthode de requête invalide.',
'It looks like you may have taken the wrong turn.' => 'Il semble que vous n\'êtes pas au bon endroit...',
'Language' => 'Langue',
'Loading...' => 'Chargement...',
'Login' => 'S\'identifier',
'Logo of {appName}' => 'Logo de {appName}',
'Logout' => 'Se déconnecter',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Le module n\'est pas activé pour ce conteneur.',
'My profile' => 'Mon profil',
'My profile image' => 'Mon image de profil',
'New profile image' => 'Nouvelle image de profil',
'Next' => 'Suivant',
'No error information given.' => 'Aucune information d\'erreur fournie.',
'Oooops...' => 'Oups...',
'Open' => 'Ouvrir',
'Please type at least 3 characters' => 'Merci de taper au moins 3 caractères',
'Profile dropdown' => 'Liste déroulante de profil',
'Profile image of {displayName}' => 'Image de profil de {displayName}',
'Profile picture of {displayName}' => 'Photo de profil de {displayName}',
'Save' => 'Enregistrer',
'Saved' => 'Enregistré',
'Search' => 'Rechercher',
'Select Me' => 'Me choisir',
'Show less' => 'Montrer moins',
'Show more' => 'Montrer plus',
'Some files could not be uploaded:' => 'Certains fichiers n\'ont pas pu être téléchargés :',
'Space not found!' => 'Espace non trouvé.',
'Text could not be copied to clipboard' => 'Le texte ne peut être copié dans le presse-papier',
'Text has been copied to clipboard' => 'Le texte a été copié dans le presse-papier',
'The date has to be in the past.' => 'La date doit être révolue.',
'The file has been deleted.' => 'Le fichier a été supprimé.',
'The requested resource could not be found.' => 'Impossible de trouver la ressource demandée.',
'The space has been archived.' => 'Cet espace à été archivé.',
'The space has been unarchived.' => 'Cet espace à été désarchivé.',
'Time Zone' => 'Fuseau horaire',
'Toggle comment menu' => 'Bascule du menu de commentaire',
'Toggle panel menu' => 'Bascule du menu du panneau',
'Toggle post menu' => 'Bascule du menu de contribution',
'Toggle stream entry menu' => 'Bascule du menu du flux d\'activité',
'Unsubscribe' => 'Se désabonner',
'Upload' => 'Ajouter',
'Upload file' => 'Envoyer un fichier',
'User not found!' => 'Utilisateur non trouvé.',
'You are not allowed to run this action.' => 'Vous n\'êtes pas autorisé à exécuter cette action.',
);

View File

@ -7,6 +7,6 @@ return array (
'You are not allowed to perform this action.' => 'Vous n\'êtes pas autorisé à effectuer cette action.',
'You are not permitted to access this section.' => 'Vous n\'avez pas le droit d\'accéder à cette section.',
'You need admin permissions to access this section.' => 'Vous avez besoin des droits administrateur pour accéder à cette section.',
'Your user account has not been approved yet, please try again later or contact a network administrator.' => 'Votre compte utilisateur n\'a pas encore été approuvé, merci de réessayer ultérieurement ou de contacter un administrateur du réseau.',
'Your user account is inactive, please login with an active account or contact a network administrator.' => 'Votre compte d\'utilisateur est inactif, merci de vous connecter avec un autre compte actif ou de contacter un administrateur du réseau.',
'Your user account has not been approved yet, please try again later or contact a network administrator.' => 'Votre compte n\'a pas encore été approuvé, veuillez réessayer ultérieurement ou contactez un administrateur du site.',
'Your user account is inactive, please login with an active account or contact a network administrator.' => 'Votre compte est inactif, veuillez vous connecter avec un autre compte actif ou contactez un administrateur du site.',
);

View File

@ -1,97 +1,80 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'<strong>Confirm</strong> Action' => '<strong>Potvrdi</strong> akciju',
'<strong>Latest</strong> updates' => '<strong>Zadnje</strong> ažuriranje',
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sažetak',
'Account settings' => 'Postavke računa',
'Administration' => 'Administracija',
'Allow' => 'Dopusti',
'An error occurred while handling your last action. (Handler not found).' => 'Došlo je do pogreške pri rukovanju vašom posljednjom radnjom. (Handler nije pronađen).',
'An unexpected error occurred while loading the search result.' => 'Došlo je do neočekivane pogreške prilikom učitavanja rezultata pretraživanja.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške poslužitelja. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unknown error occurred while uploading.' => 'Došlo je do nepoznate pogreške prilikom prijenosa.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Došlo je do nepoznate pogreške prilikom prijenosa. Savjet: provjerite postavke php postavki upload_max_filesize i post_max_size.',
'Back' => 'Povratak',
'Back to dashboard' => 'Povratak na upravljačku ploču',
'Cancel' => 'Poništi',
'Choose language:' => 'Odaberite jezik:',
'Close' => 'Zatvori',
'Collapse' => 'Spusti',
'Confirm' => 'Potvrdi',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Izvor sadržaja Addon mora biti primjerak HActiveRecordContent ili HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopirati u međuspremnik',
'Could not determine content container!' => 'Nije moguće odrediti spremnik sadržaja!',
'Could not find content of addon!' => 'Nije moguće pronaći sadržaj addona!',
'Default' => 'Zadano',
'Deny' => 'Odbiti',
'Do you really want to perform this action?' => 'Želite li zaista uraditi ovu akciju?',
'Error' => 'Error',
'Error while running your last action (Invalid request method).' => 'Pogreška prilikom izvođenja zadnje radnje (nevažeći način zahtjeva).',
'Error:' => 'Error:',
'Expand' => 'Proširi',
'Export' => 'Izvoz',
'Info:' => 'Info:',
'Invalid request method!' => 'Nevažeći način zahtjeva!',
'It looks like you may have taken the wrong turn.' => 'Izgleda da ste se pogrešno skrenuli.',
'Language' => 'Jezik',
'Loading...' => 'Učitavam...',
'Login' => 'Prijava',
'Logo of {appName}' => 'Logo {appName}',
'Logout' => 'Odjava',
'Menu' => 'Izbornik',
'Module is not enabled on this content container!' => 'Modul nije omogućen na ovom spremniku sadržaja!',
'My profile' => 'Moj profil',
'My profile image' => 'Moja profilna slika',
'New profile image' => 'Nova profilna slika',
'Next' => 'Dalje',
'No error information given.' => 'Nema podataka o pogrešci.',
'Oooops...' => 'Oooops...',
'Open' => 'Otvori',
'Please type at least 3 characters' => 'Upišite najmanje 3 znaka',
'Profile dropdown' => 'Padajući izbornik profila',
'Profile image of {displayName}' => 'Profilna slika od {displayName}',
'Profile picture of {displayName}' => 'Profilna slika od {displayName}',
'Save' => 'Spremi',
'Saved' => 'Spremljeno',
'Search' => 'Pretraži',
'Select Me' => 'Izaberi mene',
'Show less' => 'Prikaži manje',
'Show more' => 'Prikaži više',
'Some files could not be uploaded:' => 'Neke datoteke nisu prenesene:',
'Space not found!' => 'Prostor nije pronađen!',
'The date has to be in the past.' => 'Datum mora biti u prošlosti.',
'The file has been deleted.' => 'Datoteka je izbrisana.',
'The requested resource could not be found.' => 'Traženi resurs nije moguće pronaći.',
'The space has been archived.' => 'Prostor je arhiviran.',
'The space has been unarchived.' => 'Prostor je od-arhiviran.',
'Time Zone' => 'Vremenska zona',
'Toggle comment menu' => 'Prebacivanje izbornika komentara',
'Toggle panel menu' => 'Prebacivanje izbornika na ploči',
'Toggle post menu' => 'Prelazak na izbornik posta',
'Toggle stream entry menu' => 'Prebacivanje izbornika unosa u stream',
'Unsubscribe' => 'Otkažite pretplatu',
'Upload' => 'Dodaj',
'Upload file' => 'Dodaj datoteku',
'User not found!' => 'Korisnik nije pronađen!',
'You are not allowed to run this action.' => 'Nije vam dozvoljena ova akcija.',
];
return array (
'<strong>Confirm</strong> Action' => '<strong>Potvrdi</strong> akciju',
'<strong>Latest</strong> updates' => '<strong>Zadnje</strong> ažuriranje',
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sažetak',
'Account settings' => 'Postavke računa',
'Administration' => 'Administracija',
'Allow' => 'Dopusti',
'An error occurred while handling your last action. (Handler not found).' => 'Došlo je do pogreške pri rukovanju vašom posljednjom radnjom. (Handler nije pronađen).',
'An unexpected error occurred while loading the search result.' => 'Došlo je do neočekivane pogreške prilikom učitavanja rezultata pretraživanja.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške poslužitelja. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unknown error occurred while uploading.' => 'Došlo je do nepoznate pogreške prilikom prijenosa.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Došlo je do nepoznate pogreške prilikom prijenosa. Savjet: provjerite postavke php postavki upload_max_filesize i post_max_size.',
'Back' => 'Povratak',
'Back to dashboard' => 'Povratak na upravljačku ploču',
'Cancel' => 'Poništi',
'Choose language:' => 'Odaberite jezik:',
'Close' => 'Zatvori',
'Collapse' => 'Spusti',
'Confirm' => 'Potvrdi',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Izvor sadržaja Addon mora biti primjerak HActiveRecordContent ili HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopirati u međuspremnik',
'Could not determine content container!' => 'Nije moguće odrediti spremnik sadržaja!',
'Could not find content of addon!' => 'Nije moguće pronaći sadržaj addona!',
'Default' => 'Zadano',
'Deny' => 'Odbiti',
'Do you really want to perform this action?' => 'Želite li zaista uraditi ovu akciju?',
'Error' => 'Error',
'Error while running your last action (Invalid request method).' => 'Pogreška prilikom izvođenja zadnje radnje (nevažeći način zahtjeva).',
'Error:' => 'Error:',
'Expand' => 'Proširi',
'Export' => 'Izvoz',
'Info:' => 'Info:',
'Invalid request method!' => 'Nevažeći način zahtjeva!',
'It looks like you may have taken the wrong turn.' => 'Izgleda da ste se pogrešno skrenuli.',
'Language' => 'Jezik',
'Loading...' => 'Učitavam...',
'Login' => 'Prijava',
'Logo of {appName}' => 'Logo {appName}',
'Logout' => 'Odjava',
'Menu' => 'Izbornik',
'Module is not enabled on this content container!' => 'Modul nije omogućen na ovom spremniku sadržaja!',
'My profile' => 'Moj profil',
'My profile image' => 'Moja profilna slika',
'New profile image' => 'Nova profilna slika',
'Next' => 'Dalje',
'No error information given.' => 'Nema podataka o pogrešci.',
'Oooops...' => 'Oooops...',
'Open' => 'Otvori',
'Please type at least 3 characters' => 'Upišite najmanje 3 znaka',
'Profile dropdown' => 'Padajući izbornik profila',
'Profile image of {displayName}' => 'Profilna slika od {displayName}',
'Profile picture of {displayName}' => 'Profilna slika od {displayName}',
'Save' => 'Spremi',
'Saved' => 'Spremljeno',
'Search' => 'Pretraži',
'Select Me' => 'Izaberi mene',
'Show less' => 'Prikaži manje',
'Show more' => 'Prikaži više',
'Some files could not be uploaded:' => 'Neke datoteke nisu prenesene:',
'Space not found!' => 'Prostor nije pronađen!',
'Text could not be copied to clipboard' => 'Tekst nije mogao biti kopiran u privremenu memoriju',
'Text has been copied to clipboard' => 'Tekst je kopiran u privremenu memoriju',
'The date has to be in the past.' => 'Datum mora biti u prošlosti.',
'The file has been deleted.' => 'Datoteka je izbrisana.',
'The requested resource could not be found.' => 'Traženi resurs nije moguće pronaći.',
'The space has been archived.' => 'Prostor je arhiviran.',
'The space has been unarchived.' => 'Prostor je od-arhiviran.',
'Time Zone' => 'Vremenska zona',
'Toggle comment menu' => 'Prebacivanje izbornika komentara',
'Toggle panel menu' => 'Prebacivanje izbornika na ploči',
'Toggle post menu' => 'Prelazak na izbornik posta',
'Toggle stream entry menu' => 'Prebacivanje izbornika unosa u stream',
'Unsubscribe' => 'Otkažite pretplatu',
'Upload' => 'Dodaj',
'Upload file' => 'Dodaj datoteku',
'User not found!' => 'Korisnik nije pronađen!',
'You are not allowed to run this action.' => 'Nije vam dozvoljena ova akcija.',
);

File diff suppressed because one or more lines are too long

View File

@ -1,97 +1,80 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'<strong>Confirm</strong> Action' => '<strong>Conferma</strong> azione',
'<strong>Latest</strong> updates' => '<strong>Ultimi</strong> aggiornamenti',
'<strong>Mail</strong> summary' => 'Sommario <strong>email</strong>',
'Account settings' => 'Impostazioni account',
'Administration' => 'Amministrazione',
'Allow' => 'Consenti',
'An error occurred while handling your last action. (Handler not found).' => 'Si è verificato un errore durante l\'ultima azione. (Handler non trovato)',
'An unexpected error occurred while loading the search result.' => 'Si è verificato un errore caricando i risultati ricerca.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Un errore imprevisto si è verificato. Se si ripete contattare l\'amministratore.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Un errore del server imprevisto si è verificato. Se si ripete contattare l\'amministratore.',
'An unknown error occurred while uploading.' => 'Si è verificato un errore imprevisto durante il caricamento.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Si è verificato un errore imprevisto durante il caricamento. Suggerimento: verifica le impostazioni di upload_max_filesize e post_max_size php.',
'Back' => 'Indietro',
'Back to dashboard' => 'Torna al pannello di controllo',
'Cancel' => 'Annulla',
'Choose language:' => 'Scegli lingua:',
'Close' => 'Chiudi',
'Collapse' => 'Chiudi',
'Confirm' => 'Conferma',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Il contenuto sorgente dell\'Addon deve essere un\'istanza di HActiveRecordContent o di HActiveRecordContentAddon!',
'Copy to clipboard' => 'Copia negli appunti',
'Could not determine content container!' => 'Non posso determinare il contenuto del container!',
'Could not find content of addon!' => 'Impossibile trovare l\'addon richiesto!',
'Default' => 'Predefinito',
'Deny' => 'Rifiuta',
'Do you really want to perform this action?' => 'Sei sicuro di voler procedere con questa azione?',
'Error' => 'Errore',
'Error while running your last action (Invalid request method).' => 'Si è verificato un errore durante l\'ultima azione (Invalid request method).',
'Error:' => 'Errore:',
'Expand' => 'Espandi',
'Export' => 'Esporta',
'Info:' => 'Informazioni:',
'Invalid request method!' => 'Metodo richiesta non valido!',
'It looks like you may have taken the wrong turn.' => 'Sembrerebbe che tu abbia preso una strada sbagliata.',
'Language' => 'Lingua',
'Loading...' => 'Caricamento...',
'Login' => 'Login',
'Logo of {appName}' => 'Logo di {appName}',
'Logout' => 'Esci',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Il modulo non è abilitato in questo contenitore!',
'My profile' => 'Il mio profilo',
'My profile image' => 'Immagine del mio profilo',
'New profile image' => 'Nuova immagine profilo',
'Next' => 'Avanti',
'No error information given.' => 'Informazione errore mancante.',
'Oooops...' => 'Oooops...',
'Open' => 'Apri',
'Please type at least 3 characters' => 'Prova a digitare almeno 3 caratteri',
'Profile dropdown' => 'Diminuzione del profilo',
'Profile image of {displayName}' => 'Immagine profilo di {displayName}',
'Profile picture of {displayName}' => 'Immagine profilo di {displayName}',
'Save' => 'Salva',
'Saved' => 'Salvato',
'Search' => 'Cerca',
'Select Me' => 'Selezionami',
'Show less' => 'Mostra meno',
'Show more' => 'Mostra altro',
'Some files could not be uploaded:' => 'Alcuni file non possono essere caricati:',
'Space not found!' => 'Space non trovato!',
'The date has to be in the past.' => 'La data deve essere nel passato.',
'The file has been deleted.' => 'Il file è stato cancellato.',
'The requested resource could not be found.' => 'La risorsa richiesta non è stata trovata.',
'The space has been archived.' => 'Lo Space è stato archiviato. ',
'The space has been unarchived.' => 'Lo Space è stato disarchiviato.',
'Time Zone' => 'Fuso orario',
'Toggle comment menu' => 'Attiva menu Commento',
'Toggle panel menu' => 'Attiva menu Pannello',
'Toggle post menu' => 'Attiva menu Post',
'Toggle stream entry menu' => 'Attiva menu Stream',
'Unsubscribe' => 'Cancella sottoscrizione',
'Upload' => 'Carica',
'Upload file' => 'Carica file',
'User not found!' => 'Utente non trovato!',
'You are not allowed to run this action.' => 'Non hai i permessi per questa azione.',
];
return array (
'<strong>Confirm</strong> Action' => '<strong>Conferma</strong> azione',
'<strong>Latest</strong> updates' => '<strong>Ultimi</strong> aggiornamenti',
'<strong>Mail</strong> summary' => 'Sommario <strong>email</strong>',
'Account settings' => 'Impostazioni account',
'Administration' => 'Amministrazione',
'Allow' => 'Consenti',
'An error occurred while handling your last action. (Handler not found).' => 'Si è verificato un errore durante l\'ultima azione. (Handler non trovato)',
'An unexpected error occurred while loading the search result.' => 'Si è verificato un errore caricando i risultati ricerca.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Un errore imprevisto si è verificato. Se si ripete contattare l\'amministratore.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Un errore del server imprevisto si è verificato. Se si ripete contattare l\'amministratore.',
'An unknown error occurred while uploading.' => 'Si è verificato un errore imprevisto durante il caricamento.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Si è verificato un errore imprevisto durante il caricamento. Suggerimento: verifica le impostazioni di upload_max_filesize e post_max_size php.',
'Back' => 'Indietro',
'Back to dashboard' => 'Torna alla bacheca',
'Cancel' => 'Annulla',
'Choose language:' => 'Scegli lingua:',
'Close' => 'Chiudi',
'Collapse' => 'Chiudi',
'Confirm' => 'Conferma',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Il contenuto sorgente dell\'Addon deve essere un\'istanza di HActiveRecordContent o di HActiveRecordContentAddon!',
'Copy to clipboard' => 'Copia negli appunti',
'Could not determine content container!' => 'Non posso determinare il contenuto del container!',
'Could not find content of addon!' => 'Impossibile trovare l\'addon richiesto!',
'Default' => 'Predefinito',
'Deny' => 'Rifiuta',
'Do you really want to perform this action?' => 'Sei sicuro di voler procedere con questa azione?',
'Error' => 'Errore',
'Error while running your last action (Invalid request method).' => 'Si è verificato un errore durante l\'ultima azione (Invalid request method).',
'Error:' => 'Errore:',
'Expand' => 'Espandi',
'Export' => 'Esporta',
'Info:' => 'Informazioni:',
'Invalid request method!' => 'Metodo richiesta non valido!',
'It looks like you may have taken the wrong turn.' => 'Sembrerebbe che tu abbia preso una strada sbagliata.',
'Language' => 'Lingua',
'Loading...' => 'Caricamento...',
'Login' => 'Login',
'Logo of {appName}' => 'Logo di {appName}',
'Logout' => 'Esci',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Il modulo non è abilitato in questo contenitore!',
'My profile' => 'Il mio profilo',
'My profile image' => 'Immagine del mio profilo',
'New profile image' => 'Nuova immagine profilo',
'Next' => 'Avanti',
'No error information given.' => 'Informazione errore mancante.',
'Oooops...' => 'Oooops...',
'Open' => 'Apri',
'Please type at least 3 characters' => 'Prova a digitare almeno 3 caratteri',
'Profile dropdown' => 'Diminuzione del profilo',
'Profile image of {displayName}' => 'Immagine profilo di {displayName}',
'Profile picture of {displayName}' => 'Immagine profilo di {displayName}',
'Save' => 'Salva',
'Saved' => 'Salvato',
'Search' => 'Cerca',
'Select Me' => 'Selezionami',
'Show less' => 'Mostra meno',
'Show more' => 'Mostra altro',
'Some files could not be uploaded:' => 'Alcuni file non possono essere caricati:',
'Space not found!' => 'Space non trovato!',
'Text could not be copied to clipboard' => 'Il testo non può essere copiato negli appunti',
'Text has been copied to clipboard' => 'Il testo è stato copiato negli appunti',
'The date has to be in the past.' => 'La data deve essere nel passato.',
'The file has been deleted.' => 'Il file è stato cancellato.',
'The requested resource could not be found.' => 'La risorsa richiesta non è stata trovata.',
'The space has been archived.' => 'Lo Space è stato archiviato. ',
'The space has been unarchived.' => 'Lo Space è stato disarchiviato.',
'Time Zone' => 'Fuso orario',
'Toggle comment menu' => 'Attiva menu Commento',
'Toggle panel menu' => 'Attiva menu Pannello',
'Toggle post menu' => 'Attiva menu Post',
'Toggle stream entry menu' => 'Attiva menu Stream',
'Unsubscribe' => 'Cancella sottoscrizione',
'Upload' => 'Carica',
'Upload file' => 'Carica file',
'User not found!' => 'Utente non trovato!',
'You are not allowed to run this action.' => 'Non hai i permessi per questa azione.',
);

File diff suppressed because one or more lines are too long

View File

@ -1,97 +1,80 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'<strong>Confirm</strong> Action' => '<strong>Zeker</strong> weten?',
'<strong>Latest</strong> updates' => '<strong>Laatste</strong> updates',
'<strong>Mail</strong> summary' => '<strong>E-mail</strong> samenvatting',
'Account settings' => 'Accountinstellingen',
'Administration' => 'Administratie',
'Allow' => 'Toestaan',
'An error occurred while handling your last action. (Handler not found).' => 'Een fout ontstond bij het afhandelen van uw laatste actie. (Handler niet gevonden).',
'An unexpected error occurred while loading the search result.' => 'Een onverwachte fout ontstond tijdens het laden van het zoekresultaat.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Een onverwachte fout ontstond. Als dit zich herhaalt, neem dan contact op met een beheerder van deze site.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Er is een onbekende fout opgetreden. Als dit zich herhaalt, neem dan contact op met een beheerder van deze site.',
'An unknown error occurred while uploading.' => 'Er is een onbekende fout opgetreden tijdens het uploaden.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Er is een onbekende fout opgetreden tijdens het uploaden. Hint: controleer de «upload_max_filesize» en «post_max_size» php-instellingen.',
'Back' => 'Terug',
'Back to dashboard' => 'Terug naar het dashboard',
'Cancel' => 'Annuleren',
'Choose language:' => 'Kies een taal:',
'Close' => 'Sluiten',
'Collapse' => 'Inklappen',
'Confirm' => 'Bevestig',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Content Addon bron moet een instantie van HActiveRecordContent of HActiveRecordContentAddon zijn!',
'Copy to clipboard' => 'Kopieer naar klembord',
'Could not determine content container!' => 'Kan de content container niet bepalen!',
'Could not find content of addon!' => 'Kan de inhoud van deze addon niet vinden!',
'Default' => 'Standaard',
'Deny' => 'Weigeren',
'Do you really want to perform this action?' => 'Weet u dit zeker?',
'Error' => 'Fout',
'Error while running your last action (Invalid request method).' => 'Fout bij het uitvoeren van uw laatste actie (Ongeldige request method).',
'Error:' => 'Fout:',
'Expand' => 'Uitklappen',
'Export' => 'Exporteer',
'Info:' => 'Informatie:',
'Invalid request method!' => 'Ongeldige aanvraagmethode!',
'It looks like you may have taken the wrong turn.' => 'U hebt misschien de verkeerde keuze gemaakt.',
'Language' => 'Taal',
'Loading...' => 'Laden...',
'Login' => 'Log in',
'Logo of {appName}' => 'Logo van {appName}',
'Logout' => 'Uitloggen',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Module is niet op deze inhoud container ingeschakeld!',
'My profile' => 'Mijn profiel',
'My profile image' => 'Mijn profielafbeelding',
'New profile image' => 'Nieuwe profielfoto',
'Next' => 'Volgende',
'No error information given.' => 'Geen fout informatie beschikbaar.',
'Oooops...' => 'Oeps...',
'Open' => 'Open',
'Please type at least 3 characters' => 'Typ tenminste 3 tekens',
'Profile dropdown' => 'Profiel keuzelijst',
'Profile image of {displayName}' => 'Profielafbeelding van {displayName}',
'Profile picture of {displayName}' => 'Profielafbeelding van {displayName}',
'Save' => 'Opslaan',
'Saved' => 'Opgeslagen',
'Search' => 'Zoeken',
'Select Me' => 'Klik op mij',
'Show less' => 'Toon minder',
'Show more' => 'Toon meer',
'Some files could not be uploaded:' => 'Enkele bestanden zijn niet geüpload.',
'Space not found!' => 'Ruimte niet gevonden!',
'The date has to be in the past.' => 'De datum moet in het verleden liggen.',
'The file has been deleted.' => 'Het bestand is verwijderd.',
'The requested resource could not be found.' => 'De gevraagde hulpbron kan niet worden gevonden.',
'The space has been archived.' => 'De ruimte is gearchiveerd.',
'The space has been unarchived.' => 'De ruimte is uit het archief gehaald.',
'Time Zone' => 'Tijdzone',
'Toggle comment menu' => 'Aan/uit commentaar menu',
'Toggle panel menu' => 'Aan/uit paneelmenu',
'Toggle post menu' => 'Aan/uit berichten menu',
'Toggle stream entry menu' => 'Aan/uit nieuwsberichten menu',
'Unsubscribe' => 'Afmelden',
'Upload' => 'Upload',
'Upload file' => 'Upload bestand',
'User not found!' => 'Gebruiker niet gevonden!',
'You are not allowed to run this action.' => 'Het is niet toegestaan om deze actie uit te voeren.',
];
return array (
'<strong>Confirm</strong> Action' => '<strong>Zeker</strong> weten?',
'<strong>Latest</strong> updates' => '<strong>Laatste</strong> updates',
'<strong>Mail</strong> summary' => '<strong>E-mail</strong> samenvatting',
'Account settings' => 'Accountinstellingen',
'Administration' => 'Administratie',
'Allow' => 'Toestaan',
'An error occurred while handling your last action. (Handler not found).' => 'Een fout ontstond bij het afhandelen van uw laatste actie. (Handler niet gevonden).',
'An unexpected error occurred while loading the search result.' => 'Een onverwachte fout ontstond tijdens het laden van het zoekresultaat.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Een onverwachte fout ontstond. Als dit zich herhaalt, neem dan contact op met een beheerder van deze site.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Er is een onbekende fout opgetreden. Als dit zich herhaalt, neem dan contact op met een beheerder van deze site.',
'An unknown error occurred while uploading.' => 'Er is een onbekende fout opgetreden tijdens het uploaden.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Er is een onbekende fout opgetreden tijdens het uploaden. Hint: controleer de «upload_max_filesize» en «post_max_size» php-instellingen.',
'Back' => 'Terug',
'Back to dashboard' => 'Terug naar het dashboard',
'Cancel' => 'Annuleren',
'Choose language:' => 'Kies een taal:',
'Close' => 'Sluiten',
'Collapse' => 'Inklappen',
'Confirm' => 'Bevestig',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Content Addon bron moet een instantie van HActiveRecordContent of HActiveRecordContentAddon zijn!',
'Copy to clipboard' => 'Kopieer naar klembord',
'Could not determine content container!' => 'Kan de content container niet bepalen!',
'Could not find content of addon!' => 'Kan de inhoud van deze addon niet vinden!',
'Default' => 'Standaard',
'Deny' => 'Weigeren',
'Do you really want to perform this action?' => 'Weet u dit zeker?',
'Error' => 'Fout',
'Error while running your last action (Invalid request method).' => 'Fout bij het uitvoeren van uw laatste actie (Ongeldige request method).',
'Error:' => 'Fout:',
'Expand' => 'Uitklappen',
'Export' => 'Exporteer',
'Info:' => 'Informatie:',
'Invalid request method!' => 'Ongeldige aanvraagmethode!',
'It looks like you may have taken the wrong turn.' => 'U hebt misschien de verkeerde keuze gemaakt.',
'Language' => 'Taal',
'Loading...' => 'Laden...',
'Login' => 'Log in',
'Logo of {appName}' => 'Logo van {appName}',
'Logout' => 'Uitloggen',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Module is niet op deze inhoud container ingeschakeld!',
'My profile' => 'Mijn profiel',
'My profile image' => 'Mijn profielafbeelding',
'New profile image' => 'Nieuwe profielfoto',
'Next' => 'Volgende',
'No error information given.' => 'Geen fout informatie beschikbaar.',
'Oooops...' => 'Oeps...',
'Open' => 'Open',
'Please type at least 3 characters' => 'Typ tenminste 3 tekens',
'Profile dropdown' => 'Profiel keuzelijst',
'Profile image of {displayName}' => 'Profielafbeelding van {displayName}',
'Profile picture of {displayName}' => 'Profielafbeelding van {displayName}',
'Save' => 'Opslaan',
'Saved' => 'Opgeslagen',
'Search' => 'Zoeken',
'Select Me' => 'Klik op mij',
'Show less' => 'Toon minder',
'Show more' => 'Toon meer',
'Some files could not be uploaded:' => 'Enkele bestanden zijn niet geüpload.',
'Space not found!' => 'Ruimte niet gevonden!',
'Text could not be copied to clipboard' => 'De tekst kon niet worden gekopieerd naar het klembord.',
'Text has been copied to clipboard' => 'De tekst is naar het klembord gekopieerd.',
'The date has to be in the past.' => 'De datum moet in het verleden liggen.',
'The file has been deleted.' => 'Het bestand is verwijderd.',
'The requested resource could not be found.' => 'De gevraagde hulpbron kan niet worden gevonden.',
'The space has been archived.' => 'De ruimte is gearchiveerd.',
'The space has been unarchived.' => 'De ruimte is uit het archief gehaald.',
'Time Zone' => 'Tijdzone',
'Toggle comment menu' => 'Aan/uit commentaar menu',
'Toggle panel menu' => 'Aan/uit paneelmenu',
'Toggle post menu' => 'Aan/uit berichten menu',
'Toggle stream entry menu' => 'Aan/uit nieuwsberichten menu',
'Unsubscribe' => 'Afmelden',
'Upload' => 'Upload',
'Upload file' => 'Upload bestand',
'User not found!' => 'Gebruiker niet gevonden!',
'You are not allowed to run this action.' => 'Het is niet toegestaan om deze actie uit te voeren.',
);

View File

@ -2,21 +2,21 @@
return array (
'<strong>E-Mail</strong> Summaries' => 'Résumés par <strong>e-mail</strong>',
'Activities' => 'Activités',
'Daily' => 'Quotidien ',
'Daily' => 'par jour',
'E-Mail Summaries' => 'Résumés par e-mail',
'E-Mail summaries are sent to inform you about recent activities in the network.' => 'Des résumés sont envoyés par e-mail pour informer des activités récentes dans votre réseau. ',
'E-Mail summaries are sent to users to inform them about recent activities in your network.' => 'Des résumés sont envoyés aux utilisateurs par e-mail pour les informer des activités récentes dans votre réseau.',
'Exclude spaces below from the mail summary' => 'Exclure les espaces suivants de la liste des résumés par e-mail',
'Hourly' => 'Horaire',
'Hourly' => 'par heure',
'Interval' => 'Intervalle',
'Latest news' => 'Dernières nouvelles',
'Never' => 'Jamais',
'Never' => 'jamais',
'On this page you can configure the contents and the interval of these e-mail updates.' => 'Sur cette page vous pouvez configurer le contenu et l\'intervalle de ces mises à jour par e-mail',
'On this page you can define the default behavior for your users. These settings can be overwritten by users in their account settings page.' => 'Sur cette page vous pouvez définir les préférences par défaut des utilisateurs. Ces préférences peuvent êtres modifiées par les utilisateurs sur leur page de paramètres de compte.',
'Only include spaces below to the mail summary' => 'Inclure uniquement les espaces suivants aux résumés par e-mail',
'Reset to defaults' => 'Paramètres par défaut',
'Spaces' => 'Espaces',
'Weekly' => 'Hebdomadaire',
'Weekly' => 'par semaine',
'You will only receive an e-mail if there is something new.' => 'Vous recevrez un e-mail uniquement s\'il y a du nouveau à communiquer.',
'Your daily summary' => 'Votre résumé quotidien',
'Your weekly summary' => 'Votre résumé hebdomadaire',

View File

@ -1,5 +1,5 @@
<?php
return array (
'<strong>Latest</strong> activities' => '<strong>Activités</strong> récentes',
'There are no activities yet.' => 'Il n\'y a aucune activité récente.',
'There are no activities yet.' => 'Il n\'y a pas d\'activité.',
);

View File

@ -10,13 +10,14 @@
class_name: AcceptanceTester
modules:
enabled:
- WebDriver
- tests\codeception\_support\WebHelper
- tests\codeception\_support\DynamicFixtureHelper
config:
WebDriver:
url: http://localhost:8080/
browser: firefox
window_size: 1024x768
lang: en
enabled:
- WebDriver:
url: 'http://localhost:8080/'
window_size: false # disabled in ChromeDriver
port: 9515
browser: chrome
capabilities:
chromeOptions:
args: ['--headless', '--disable-gpu', '--no-sandbox']
- tests\codeception\_support\WebHelper
- tests\codeception\_support\DynamicFixtureHelper

View File

@ -8,40 +8,16 @@
namespace humhub\modules\admin\controllers;
use humhub\components\export\DateTimeColumn;
use humhub\components\export\SpreadsheetExport;
use humhub\modules\admin\components\Controller;
use humhub\modules\admin\models\PendingRegistrationSearch;
use humhub\modules\admin\permissions\ManageGroups;
use humhub\modules\admin\permissions\ManageUsers;
use humhub\modules\user\models\Invite;
use PHPExcel;
use PHPExcel_Cell;
use PHPExcel_Exception;
use PHPExcel_IOFactory;
use PHPExcel_Shared_Date;
use PHPExcel_Style_NumberFormat;
use PHPExcel_Worksheet;
use Yii;
use yii\helpers\Url;
use yii\web\HttpException;
class PendingRegistrationsController extends Controller
{
const EXPORT_CSV = 'csv';
const EXPORT_XLSX = 'xsls';
const EXPORT_PREFIX = 'pur_export';
const EXPORT_COLUMNS = [
'email',
'originator.username',
'language',
'source',
'created_at',
];
/**
* @inheritdoc
*/
public function init()
{
$this->subLayout = '@admin/views/layouts/user';
@ -64,223 +40,72 @@ class PendingRegistrationsController extends Controller
];
}
/**
* Render PendingRegistrations
*
* @param bool $export
* @param null $format
* @return string
*/
public function actionIndex($export = false, $format = null)
public function actionIndex()
{
$searchModel = new PendingRegistrationSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$urlExportCsv = Url::to([
'export',
'format' => self::EXPORT_CSV,
'PendingRegistrationSearch' => Yii::$app->request->get('PendingRegistrationSearch')
]);
$urlExportXlsx = Url::to([
'export',
'format' => self::EXPORT_XLSX,
'PendingRegistrationSearch' => Yii::$app->request->get('PendingRegistrationSearch')
]);
return $this->render('index', [
'dataProvider' => $dataProvider,
'searchModel' => $searchModel,
'urlExportCsv' => $urlExportCsv,
'urlExportXlsx' => $urlExportXlsx,
'types' => $this->typeMapping(),
'types' => [
null => null,
PendingRegistrationSearch::SOURCE_INVITE => Yii::t('AdminModule.base', 'Invite'),
PendingRegistrationSearch::SOURCE_SELF => Yii::t('AdminModule.base', 'Sign up'),
]
]);
}
/**
* Export PendingRegistrations
*
* @param string $format
* @throws PHPExcel_Exception
* Export user list as csv or xlsx
* @param string $format supported format by phpspreadsheet
* @return \yii\web\Response
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
* @throws \yii\base\InvalidConfigException
*/
public function actionExport($format)
{
$searchModel = new PendingRegistrationSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
/** @var PHPExcel $file */
$file = $this->createCsvFile();
$exporter = new SpreadsheetExport([
'dataProvider' => $dataProvider,
'columns' => $this->collectExportColumns(),
'resultConfig' => [
'fileBaseName' => 'humhub_user',
'writerType' => $format,
],
]);
/** @var PHPExcel_Worksheet $worksheet */
$worksheet = $file->getActiveSheet();
// Row counter
$rowCount = 1;
// Build Header
$this->buildCsvHeaderRow($worksheet, $rowCount, $searchModel);
// Set format for Date fields
$formatDate = $format === self::EXPORT_CSV
? Yii::$app->formatter->getDateTimePattern()
: PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME;
// Build Rows
foreach ($dataProvider->query->all() as $record) {
$rowCount++;
$this->buildCsvRow($rowCount, $record, $worksheet, $formatDate);
}
if ($format === self::EXPORT_CSV) {
$this->exportAsCsv($file);
} else {
$this->exportAsXlsx($file);
}
return $exporter->export()->send();
}
/**
* Resend a invite
*
* @param integer $id
* @return string
* @throws HttpException
*/
public function actionResend($id)
{
$invite = Invite::findOne(['id' => $id]);
if ($invite === null) {
throw new HttpException(404, Yii::t(
'AdminModule.controllers_PendingRegistrationsController',
'Invite not found!'
));
}
if (Yii::$app->request->isPost) {
$invite->sendInviteMail();
$invite->save();
$invite->refresh();
$this->view->success(Yii::t(
'AdminModule.controllers_PendingRegistrationsController',
'Resend invitation email'
));
}
return $this->render('resend', ['model' => $invite]);
}
/**
* Return type mapping
*
* Return array with columns for data export
* @return array
*/
private function typeMapping()
private function collectExportColumns()
{
return [
PendingRegistrationSearch::SOURCE_INVITE => Yii::t('AdminModule.base', 'Invite'),
PendingRegistrationSearch::SOURCE_SELF => Yii::t('AdminModule.base', 'Sign up'),
'id',
'user_originator_id',
'space_invite_id',
'email',
'source',
[
'class' => DateTimeColumn::className(),
'attribute' => 'created_at',
],
'created_by',
[
'class' => DateTimeColumn::className(),
'attribute' => 'updated_at',
],
'updated_by',
'language',
'firstname',
'lastname',
];
}
/**
* Export the file as Csv
*
* @param PHPExcel $file
* @throws \PHPExcel_Reader_Exception
* @throws \PHPExcel_Writer_Exception
*/
private function exportAsCsv($file)
{
header('Content-Type: application/csv');
header('Content-Disposition: attachment;filename="' . self::EXPORT_PREFIX . '_' . time() . '.csv"');
header('Cache-Control: max-age=0');
/** @var \PHPExcel_Writer_CSV $writer */
$writer = PHPExcel_IOFactory::createWriter($file, 'CSV');
$writer->setDelimiter(';');
$writer->save('php://output');
}
/**
* Export the file as Xlsx
*
* @param PHPExcel $file
* @throws \PHPExcel_Reader_Exception
* @throws \PHPExcel_Writer_Exception
*/
private function exportAsXlsx($file)
{
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . self::EXPORT_PREFIX . '_' . time() . '.xlsx"');
header('Cache-Control: max-age=0');
/** @var \PHPExcel_Writer_Excel2007 $writer */
$writer = PHPExcel_IOFactory::createWriter($file, 'Excel2007');
$writer->save('php://output');
}
/**
* Build a row for csv document
*
* @param integer $row
* @param PendingRegistrationSearch $record
* @param PHPExcel_Worksheet $worksheet
* @param string $formatDate
*/
private function buildCsvRow($row, $record, $worksheet, $formatDate)
{
for ($i = 0; $i < count(self::EXPORT_COLUMNS); $i++) {
$name = self::EXPORT_COLUMNS[$i];
$value = $record->{$name};
if ($name === 'source') {
$typeMapping = $this->typeMapping();
$value = isset($typeMapping[$value]) ? $typeMapping[$value] : $value;
}
if ($name === 'created_at') {
$worksheet->getStyleByColumnAndRow($i, $row)->getNumberFormat()->setFormatCode($formatDate);
$value = PHPExcel_Shared_Date::PHPToExcel(new \DateTime($value));
}
$worksheet->setCellValueByColumnAndRow($i, $row, $value);
}
}
/**
* Build header row for csv document
*
* @param PHPExcel_Worksheet $worksheet
* @param integer $row
* @param PendingRegistrationSearch $searchModel
*/
private function buildCsvHeaderRow($worksheet, $row, $searchModel)
{
for ($i = 0; $i < count(self::EXPORT_COLUMNS); $i++) {
$worksheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($i))->setWidth(30);
$worksheet->setCellValueByColumnAndRow($i, $row, $searchModel->getAttributeLabel(self::EXPORT_COLUMNS[$i]));
}
}
/**
* Return new PHPExcel file
*
* @return PHPExcel
*/
private function createCsvFile()
{
$title = Yii::t(
'AdminModule.base',
'Pending user registrations'
);
/** @var PHPExcel $file */
$file = new PHPExcel();
$file->getProperties()
->setCreator('HumHub')
->setTitle($title)
->setSubject($title)
->setDescription($title);
return $file;
}
}
}

View File

@ -8,20 +8,26 @@
namespace humhub\modules\admin\controllers;
use Yii;
use yii\helpers\Url;
use yii\web\HttpException;
use humhub\compat\HForm;
use humhub\modules\user\models\User;
use humhub\modules\user\models\Invite;
use humhub\modules\user\models\forms\Registration;
use humhub\components\export\DateTimeColumn;
use humhub\components\export\SpreadsheetExport;
use humhub\modules\admin\components\Controller;
use humhub\modules\admin\models\forms\UserEditForm;
use humhub\modules\admin\permissions\ManageUsers;
use humhub\modules\admin\models\UserSearch;
use humhub\modules\admin\permissions\ManageGroups;
use humhub\modules\admin\permissions\ManageSettings;
use humhub\modules\admin\models\forms\UserDeleteForm;
use humhub\modules\admin\models\UserSearch;
use humhub\modules\admin\permissions\ManageUsers;
use humhub\modules\space\models\Membership;
use humhub\modules\user\models\forms\Registration;
use humhub\modules\user\models\ProfileField;
use humhub\modules\user\models\User;
use Yii;
use yii\helpers\Url;
use yii\web\HttpException;
/**
* User management
@ -69,6 +75,7 @@ class UserController extends Controller
}
}
/**
* Returns a List of Users
*/
@ -177,8 +184,8 @@ class UserController extends Controller
}
return $this->render('edit', [
'hForm' => $form,
'user' => $user
'hForm' => $form,
'user' => $user
]);
}
@ -196,8 +203,9 @@ class UserController extends Controller
/**
* Deletes a user permanently
* @throws HttpException
*/
public function actionDelete($id)
public function actionDelete($id)
{
$user = User::findOne(['id' => $id]);
if ($user == null) {
@ -205,15 +213,14 @@ class UserController extends Controller
} elseif (Yii::$app->user->id == $id) {
throw new HttpException(400, Yii::t('AdminModule.user', 'You cannot delete yourself!'));
}
$model = new UserDeleteForm(['user' => $user]);
if ($model->load(Yii::$app->request->post()) && $model->performDelete()) {
$this->view->info(Yii::t('AdminModule.user', 'User deletion process queued.'));
return $this->redirect(['list']);
}
return $this->render('delete', ['model' => $model]);
}
/**
* Redirect to user profile
@ -302,4 +309,72 @@ class UserController extends Controller
return Yii::$app->user->isAdmin() && $user->id != Yii::$app->user->getIdentity()->id;
}
/**
* Export user list as csv or xlsx
* @param string $format supported format by phpspreadsheet
* @return \yii\web\Response
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
* @throws \yii\base\InvalidConfigException
*/
public function actionExport($format)
{
$searchModel = new UserSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination = false;
$exporter = new SpreadsheetExport([
'dataProvider' => $dataProvider,
'columns' => $this->collectExportColumns(),
'resultConfig' => [
'fileBaseName' => 'humhub_user',
'writerType' => $format,
],
]);
return $exporter->export()->send();
}
/**
* Return array with columns for data export
* @return array
*/
private function collectExportColumns()
{
$userColumns = [
'id',
'guid',
'status',
'username',
'email',
'auth_mode',
'tags',
'language',
'time_zone',
[
'class' => DateTimeColumn::className(),
'attribute' => 'created_at',
],
'created_by',
[
'class' => DateTimeColumn::className(),
'attribute' => 'updated_at',
],
'updated_by',
[
'class' => DateTimeColumn::className(),
'attribute' => 'last_login',
],
'authclient_id',
'visibility',
];
$profileColumns = (new \yii\db\Query())
->select(['CONCAT(\'profile.\', internal_name)'])
->from(ProfileField::tableName())
->orderBy(['profile_field_category_id' => SORT_ASC, 'sort_order' => SORT_ASC])
->column();
return array_merge($userColumns, $profileColumns);
}
}

View File

@ -1,51 +1,34 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Base URL needs to begin with http:// or https://' => '',
'About' => 'À propos',
'Add purchased module by licence key' => 'Ajouter un module acheté par sa clé de licence',
'Admin' => 'Admin',
'Administration' => 'Administration',
'Approval' => 'Approbation',
'Authentication' => 'Authentification',
'Back to overview' => 'Retour à l\'aperçu',
'Back to user overview' => 'Retour ',
'Basic' => 'Général',
'Caching' => 'Cache',
'Cronjobs' => 'Tâches planifiées',
'Design' => 'Design',
'Files' => 'Fichiers',
'Groups' => 'Groupes',
'Invite' => 'Invitation',
'Invited by' => 'Invité par',
'Logging' => 'Journaux',
'Mailing' => 'Envoi d\'e-mail',
'Modules' => 'Modules',
'OEmbed providers' => 'Fournisseurs OEmbed',
'Pending user registrations' => 'Utilisateur(s) en attente d\'enregistrement',
'Proxy' => 'Serveur Proxy',
'Security' => 'Sécurité',
'Self test' => 'Tests automatiques',
'Sign up' => 'S\'inscrire',
'Spaces' => 'Espaces',
'Statistics' => 'Statistiques',
'User posts' => 'Contenu de l\'utilisateur',
'Userprofiles' => 'Profils utilisateurs',
'Users' => 'Utilisateurs',
];
return array (
'About' => 'À propos',
'Add purchased module by licence key' => 'Ajouter un module acheté par sa clé de licence',
'Admin' => 'Admin',
'Administration' => 'Administration',
'Approval' => 'Approbation',
'Authentication' => 'Authentification',
'Back to overview' => 'Retour à l\'aperçu',
'Back to user overview' => 'Retour ',
'Base URL needs to begin with http:// or https://' => 'L\'URL doit commencer par http:// ou https://',
'Basic' => 'Général',
'Caching' => 'Mise en cache',
'Cronjobs' => 'Tâches planifiées',
'Design' => 'Design',
'Files' => 'Fichiers',
'Groups' => 'Groupes',
'Invite' => 'Invitation',
'Invited by' => 'Invité par',
'Logging' => 'Journal',
'Mailing' => 'Envoi d\'e-mail',
'Modules' => 'Modules',
'OEmbed providers' => 'Fournisseurs OEmbed',
'Pending user registrations' => 'Utilisateur(s) en attente d\'enregistrement',
'Proxy' => 'Serveur Proxy',
'Security' => 'Sécurité',
'Self test' => 'Tests automatiques',
'Sign up' => 'S\'inscrire',
'Spaces' => 'Espaces',
'Statistics' => 'Statistiques',
'User posts' => 'Contenu de l\'utilisateur',
'Userprofiles' => 'Profils utilisateurs',
'Users' => 'Utilisateurs',
);

View File

@ -1,6 +1,6 @@
<?php
return array (
'None - shows dropdown in user registration.' => 'Aucun - Liste déroulante lors de l\'enregistrement.',
'None - shows dropdown in user registration.' => 'Aucun (afficher une liste déroulante lors de l\'inscription)',
'Saved' => 'Enregistré',
'Saved and flushed cache' => 'Enregistré et cache purgé',
);

View File

@ -1,13 +1,13 @@
<?php
return array (
'Add Groups...' => 'Ajouter un Groupe',
'Add Groups...' => 'Ajouter un groupe',
'Become this user' => 'Devenir cet utilisateur',
'Delete' => 'Supprimer',
'Disabled' => 'Désactivé',
'Enabled' => 'Activé',
'Save' => 'Enregistrer',
'Select Groups' => 'Sélectionner un Groupe',
'Unapproved' => 'Non Approuvé',
'Select Groups' => 'Sélectionner un groupe',
'Unapproved' => 'Non approuvé',
'User not found!' => 'Utilisateur introuvable.',
'You cannot delete yourself!' => 'Vous ne pouvez pas vous supprimer vous-même.',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'Message' => 'Message',
'Subject' => 'Objet',
'Subject' => 'Sujet',
);

View File

@ -12,6 +12,6 @@ return array (
'Password' => 'Mot de passe',
'Port' => 'Port',
'User Filer' => 'Filtre utilisateur',
'Username' => 'Nom d\'utilisateur',
'Username' => 'Identifiant',
'Username Attribute' => 'Attribut utilisateur',
);

View File

@ -1,12 +1,12 @@
<?php
return array (
'Allow limited access for non-authenticated users (guests)' => 'Autoriser un accès limité pour les utilisateurs non authentifiés (invités)',
'Anonymous users can register' => 'Les utilisateurs anonymes peuvent s\'enregistrer',
'Default content of the registration approval email' => 'Contenu par défaut de l\'e-mail d\'approbation d\'inscription',
'Default content of the registration denial email' => 'Contenu par défaut de l\'e-mail de refus lors de l\'inscription',
'Allow limited access for non-authenticated users (guests)' => 'Autoriser un accès limité pour les utilisateurs non identifiés (visiteurs)',
'Anonymous users can register' => 'Les utilisateurs non identifiés (visiteurs) peuvent s\'inscrire',
'Default content of the registration approval email' => 'Contenu du message d\'approbation d\'inscription envoyé par e-mail',
'Default content of the registration denial email' => 'Contenu du message de refus d\'inscription envoyée par e-mail',
'Default user group for new users' => 'Groupe par défaut pour les nouveaux utilisateurs',
'Default user idle timeout, auto-logout (in seconds, optional)' => 'Temporisation d\'inactivité par défaut, déconnexion automatique (en secondes, optionnel)',
'Default user profile visibility' => 'Visibilité par défaut des profils utilisateurs',
'Members can invite external users by email' => 'Les membres peuvent inviter des utilisateurs externes par e-mail',
'Require group admin approval after registration' => 'L\'approbation de l\'administrateur du groupe est requis après l\'enregistrement',
'Members can invite external users by email' => 'Les membres peuvent inviter des nouvelles personnes par e-mail',
'Require group admin approval after registration' => 'L\'approbation d\'un administrateur du groupe est requis après l\'enregistrement',
);

View File

@ -4,15 +4,15 @@ return array (
'Date input format' => 'Format de saisie de date',
'Default language' => 'Langue par défaut',
'Default space' => 'Espace par défaut',
'Default stream content order' => 'Ordre du contenu par défaut dans le flux',
'Enable user friendship system' => 'Activer le système d\'amitié entre les utilisateurs',
'Default stream content order' => 'Ordre du contenu par défaut dans le fil d\'actualités',
'Enable user friendship system' => 'Activer le système d\'amitié',
'Horizontal scrolling images on a mobile device' => 'Défilement horizontal des images pour les mobiles',
'Invalid space' => 'Espace invalide',
'Logo upload' => 'Charger un logo',
'Name of the application' => 'Nom de l\'application',
'Server Timezone' => 'Fuseau horaire du serveur',
'Show introduction tour for new users' => 'Afficher les "premiers pas" pour les nouveaux utilisateurs',
'Show user profile post form on dashboard' => 'Montrer les contenus du profil utilisateur sur le fil d\'actualité',
'Sort by creation date' => 'Trier par date de création',
'Sort by update date' => 'Trier par date de mise à jour',
'Show user profile post form on dashboard' => 'Afficher le contenu du profil utilisateur sur le fil d\'actualités',
'Sort by creation date' => 'par date de création',
'Sort by update date' => 'par date de mise à jour',
);

View File

@ -1,29 +1,12 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Allowed file extensions' => 'Extensions autorisées',
'Convert command not found!' => 'Commande de conversion non trouvée !',
'Got invalid image magick response! - Correct command?' => 'Réponse de "Image Magick" incorrecte - Votre commande est-elle juste ?',
'Hide file info (name, size) for images on wall' => 'Cacher les informations de fichier (nom, taille) pour les images sur le flux',
'Image Magick convert command (optional)' => 'Commande de conversion "Image Magick" (optionnel)',
'Maximum preview image height (in pixels, optional)' => 'Hauteur maximum de l\'aperçu d\'image (en pixels, optionnel)',
'Maximum preview image width (in pixels, optional)' => 'Largeur maximum de l\'aperçu d\'image (en pixels, optionnel)',
'Maximum upload file size (in MB)' => 'Taille de fichier en Upload maximum (en Mo)',
'Use X-Sendfile for File Downloads' => 'Utiliser X-Sendfile pour les téléchargements',
];
return array (
'Allowed file extensions' => 'Extensions autorisées',
'Convert command not found!' => 'Commande de conversion non trouvée.',
'Got invalid image magick response! - Correct command?' => 'Réponse de "Image Magick" incorrecte - Votre commande est-elle juste ?',
'Hide file info (name, size) for images on wall' => 'Cacher les informations de fichier (nom, taille) pour les images sur le flux',
'Image Magick convert command (optional)' => 'Commande de conversion "Image Magick" (optionnel)',
'Maximum preview image height (in pixels, optional)' => 'Hauteur maximum de l\'aperçu d\'image (en pixels, optionnel)',
'Maximum preview image width (in pixels, optional)' => 'Largeur maximum de l\'aperçu d\'image (en pixels, optionnel)',
'Maximum upload file size (in MB)' => 'Taille maximale autorisée pour le transfert de fichiers (en Mo)',
'Use X-Sendfile for File Downloads' => 'Utiliser X-Sendfile pour les téléchargements',
);

View File

@ -7,5 +7,5 @@ return array (
'Mail Transport Type' => 'Type de transport des e-mails',
'Password' => 'Mot de passe',
'Port number' => 'Port (p.ex. 25)',
'Username' => 'Nom d\'utilisateur',
'Username' => 'Identifiant',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'Endpoint Url' => 'URL de point de terminaison',
'Url Prefix' => 'Préfixe d\'URL',
'Url Prefix' => 'Préfixe de l\'URL',
);

View File

@ -5,5 +5,5 @@ return array (
'Password' => 'Mot de passe',
'Port' => 'Port',
'Server' => 'Serveur',
'User' => 'Nom d\'utilisateur',
'User' => 'Identifiant',
);

View File

@ -1,6 +1,6 @@
<?php
return array (
'Default Content Visiblity' => 'Visibilité par défaut des contenus',
'Default Content Visiblity' => 'Visibilité des contenus par défaut',
'Default Join Policy' => 'Politique d\'adhésion par défaut',
'Default Visibility' => 'Visibilité par défaut',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'HTML tracking code' => 'Code HTML de suivi de statistiques',
'Maximum allowed age for logs.' => 'Âge maximum pour les journaux.',
'Maximum allowed age for logs.' => 'Âge maximum pour les journaux',
);

View File

@ -1,8 +1,8 @@
<?php
return array (
'About HumHub' => 'A propos de HumHub',
'About HumHub' => 'À propos de HumHub',
'CronJobs' => 'Tâches planifiées',
'Database' => 'Base de données',
'Logging' => 'Journal',
'Prerequisites' => 'Prérequis',
'Prerequisites' => 'Pré-requis',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'Administrative' => 'Administratif',
'Receive Notifications for administrative events like available updates.' => 'Recevoir des notifications pour des événements administratifs comme les mises à jour disponibles.',
'Receive Notifications for administrative events like available updates.' => 'Recevoir des notifications système (p.ex. une mise à jour disponible)',
);

View File

@ -2,7 +2,7 @@
return array (
'<strong>Information</strong>' => '<strong>Information</strong>',
'<strong>Settings</strong> and Configuration' => '<strong>Paramètres</strong> et configuration',
'<strong>User</strong> administration' => 'Administration <strong>des utilisateurs</strong>',
'<strong>User</strong> administration' => 'Gestion des <strong>utilisateurs</strong>',
'Add new group' => 'Ajouter un groupe',
'Groups' => 'Groupes',
'Manage group: {groupName}' => 'Gérer le groupe : {groupName}',

View File

@ -1,7 +1,7 @@
<?php
return array (
'Create new group' => 'Créer un groupe',
'Create new group' => 'Ajouter un groupe',
'Members' => 'Membres',
'Permissions' => 'Permissions',
'Users can be assigned to different groups (e.g. teams, departments etc.) with specific standard spaces, group managers and permissions.' => 'Les utilisateurs peuvent être affectés à différents groupes (par exemple équipes, départements, etc.) avec des espaces standards, des gestionnaires de groupe et des permissions spécifiques.',
'Users can be assigned to different groups (e.g. teams, departments etc.) with specific standard spaces, group managers and permissions.' => 'Les utilisateurs peuvent être affectés à différents groupes (p.ex. : équipes, départements, etc.) avec des espaces standards, des gestionnaires de groupe et des permissions spécifiques.',
);

View File

@ -1,23 +1,6 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Displaying {count} entries per page.' => 'Afficher {count} entrées par page.',
'Flush entries' => 'Vider le journal',
'Total {count} entries found.' => '{count} entrées ont été trouvées au total.',
];
return array (
'Displaying {count} entries per page.' => 'Afficher {count} entrées par page.',
'Flush entries' => 'Vider le journal',
'Total {count} entries found.' => '{count} entrées trouvées au total.',
);

View File

@ -1,8 +1,8 @@
<?php
return array (
'Available updates' => 'Mises à jour disponibles',
'Available updates' => 'Mise à jour',
'Browse online' => 'Voir en ligne',
'Installed' => 'Installés',
'Modules extend the functionality of HumHub. Here you can install and manage modules from the HumHub Marketplace.' => 'Les modules étendent les fonctionnalités de HumHub. C\'est ici que vous pouvez installer et gérer les modules de la place de marché de HumHub.',
'Modules extend the functionality of HumHub. Here you can install and manage modules from the HumHub Marketplace.' => 'Les modules étendent les fonctionnalités de HumHub. C\'est ici que vous pouvez installer et gérer les modules disponibles sur HumHub Marketplace.',
'Purchases' => 'Achats',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'<strong>Module</strong> details' => 'Détails du <strong>Module</strong>',
'This module doesn\'t provide further informations.' => 'Ce module ne fournit pas d\'autres informations.',
'<strong>Module</strong> details' => 'Détails du <strong>module</strong>',
'This module doesn\'t provide further informations.' => 'Ce module ne fournit aucune information complémentaire.',
);

View File

@ -1,13 +1,13 @@
<?php
return array (
'<strong>Modules</strong> directory' => 'Liste des <strong>modules</strong>',
'Are you sure? *ALL* module data will be lost!' => 'Êtes-vous sûr ? <strong>*TOUTES*</strong> les données du module seront perdues !',
'Are you sure? *ALL* module related data and files will be lost!' => 'Êtes-vous sûr ? <strong>*TOUTES*</strong> les données et <strong>*TOUS*</strong> les fichiers du module seront perdus !',
'<strong>Modules</strong> directory' => 'Gestion des <strong>modules</strong>',
'Are you sure? *ALL* module data will be lost!' => 'Êtes-vous sûr ? <strong>*TOUTES*</strong> les données du module seront définitivement perdues !',
'Are you sure? *ALL* module related data and files will be lost!' => 'Êtes-vous sûr ? <strong>*TOUTES*</strong> les données et <strong>*TOUS*</strong> les fichiers du module seront définitivement perdus !',
'Configure' => 'Configurer',
'Disable' => 'Désactiver',
'Enable' => 'Activer',
'Enable module...' => 'Activer le module...',
'More info' => 'Plus d\'informations',
'More info' => 'Plus d\'infos',
'Set as default' => 'Définir par défaut',
'Uninstall' => 'Désinstaller',
);

View File

@ -1,13 +1,13 @@
<?php
return array (
'<strong>Modules</strong> directory' => 'Liste des <strong>modules</strong>',
'<strong>Modules</strong> directory' => 'Gestion des <strong>modules</strong>',
'Buy (%price%)' => 'Acheter (%price%)',
'Disclaimer' => 'Avertissement',
'Install' => 'Installer',
'Installing module...' => 'Installation du module en cours...',
'Installing module...' => 'Installation du module...',
'Latest compatible version:' => 'Dernière version compatible :',
'Latest version:' => 'Dernière version : ',
'Licence Key:' => 'Clé de licence :',
'More info' => 'Plus d\'informations',
'More info' => 'Plus d\'infos',
'No compatible module version found!' => 'Aucun module compatible n\'a été trouvé.',
);

View File

@ -1,8 +1,8 @@
<?php
return array (
'<strong>Modules</strong> directory' => 'Répertoire des <strong>modules</strong>',
'<strong>Modules</strong> directory' => 'Gestion des <strong>modules</strong>',
'Installed version:' => 'Version installée :',
'Latest compatible Version:' => 'Dernière version compatible :',
'Update' => 'Mettre à jour',
'Updating module...' => 'Mise à jour du module en cours...',
'Updating module...' => 'Mise à jour du module...',
);

View File

@ -6,6 +6,6 @@ return array (
'Min value is 20 seconds. If not set, session will timeout after 1400 seconds (24 minutes) regardless of activity (default session timeout)' => 'La valeur minimum est de 20 secondes. Si non définie, la session expirera après 1400 secondes (24 minutes), quelle que soit l\'activité (expiration de session par défaut)',
'Only applicable when limited access for non-authenticated users is enabled. Only affects new users.' => 'Applicable uniquement quand l\'accès limité pour les utilisateurs non authentifiés est activé. N\'affecte que les nouveaux utilisateurs.',
'Save' => 'Enregistrer',
'Visible for members only' => 'Visible seulement par les membres',
'Visible for members+guests' => 'Visible par les membres+invités',
'Visible for members only' => 'Visible par les membres uniquement',
'Visible for members+guests' => 'Visible par les membres et visiteurs',
);

View File

@ -1,21 +1,4 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Save & Flush Caches' => 'Enregistrer & Purger le cache',
];
return array (
'Save & Flush Caches' => 'Enregistrer et purger le cache',
);

View File

@ -1,26 +1,9 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Crontab of user: {user}' => 'Tâche planifiée de l\'utilisateur : {user}',
'Last run (daily):' => 'Dernière exécution (journalière) :',
'Last run (hourly):' => 'Dernière exécution (horaires) :',
'Never' => 'Jamais',
'Or Crontab of root user' => 'Ou tâche du SuperUtilisateur (root)',
'Please make sure following cronjobs are installed:' => 'Merci de bien vouloir vérifier que les tâches planifiées suivantes sont installées :',
];
return array (
'Crontab of user: {user}' => 'Tâche planifiée de l\'utilisateur : {user}',
'Last run (daily):' => 'Dernière exécution (journalière) :',
'Last run (hourly):' => 'Dernière exécution (horaire) :',
'Never' => 'Jamais',
'Or Crontab of root user' => 'Ou tâche de l\'utilisateur root',
'Please make sure following cronjobs are installed:' => 'Veuillez vérifier que les tâches planifiées suivantes sont installées :',
);

View File

@ -1,27 +1,10 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Alphabetical' => 'Alphabétique',
'Auto format based on user language - Example: {example}' => 'Format automatique basé sur la langue de l\'utilisateur - Exemple : {example}',
'Firstname Lastname (e.g. John Doe)' => 'Prénom Nom (ex. : Pierre Dupont)',
'Fixed format (mm/dd/yyyy) - Example: {example}' => 'Format fixe (jj/mm/aaaa) - Exemple : {example}',
'Last visit' => 'Dernière visite',
'Save' => 'Enregistrer',
'Username (e.g. john)' => 'Nom d\'utilisateur (ex. : pierre)',
];
return array (
'Alphabetical' => 'Alphabétique',
'Auto format based on user language - Example: {example}' => 'Format automatique basé sur la langue de l\'utilisateur - Exemple : {example}',
'Firstname Lastname (e.g. John Doe)' => 'Prénom Nom (p.ex. : Pierre Dupont)',
'Fixed format (mm/dd/yyyy) - Example: {example}' => 'Format fixe (jj/mm/aaaa) (p.ex. : {example})',
'Last visit' => 'Dernière visite',
'Save' => 'Enregistrer',
'Username (e.g. john)' => 'Identifiant (p.ex. : pierre)',
);

View File

@ -1,26 +1,9 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract-module' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Comma separated list. Leave empty to allow all.' => 'Liste séparée par des virgules. Laissez vide pour tout autoriser.',
'Current Image Library: {currentImageLibrary}' => 'Librairie d\'image courante : {currentImageLibrary}',
'If not set, height will default to 200px.' => 'Si non définie, la hauteur sera par défaut de 200px.',
'If not set, width will default to 200px.' => 'Si non définie, la largeur sera par défaut de 200px.',
'PHP reported a maximum of {maxUploadSize} MB' => 'PHP informe un maximum d\'Upload de {maxUploadSize} Mo',
'Save' => 'Enregistrer',
];
return array (
'Comma separated list. Leave empty to allow all.' => 'Liste séparée par des virgules (laisser vide pour tout autoriser)',
'Current Image Library: {currentImageLibrary}' => 'Librairie d\'image courante : {currentImageLibrary}',
'If not set, height will default to 200px.' => 'Si non défini = hauteur par défaut (200px)',
'If not set, width will default to 200px.' => 'Si non défini = largeur par défaut (200px)',
'PHP reported a maximum of {maxUploadSize} MB' => 'Valeur maximale configurée actuellement dans PHP {maxUploadSize}Mo',
'Save' => 'Enregistrer',
);

View File

@ -1,12 +1,12 @@
<?php
return array (
'<strong>Confirm</strong> image deletion' => '<strong>Confirmer</strong> la suppression de l\'image ',
'Dashboard' => 'Fil d\'actualité',
'Dashboard' => 'Fil d\'actualités',
'Delete' => 'Supprimer',
'E.g. http://example.com/humhub' => 'Ex. http://exemple.com/humhub',
'E.g. http://example.com/humhub' => 'p.ex. : http://exemple.com/humhub',
'Friendship' => 'Amitié',
'New users will automatically be added to these space(s).' => 'Les nouveaux utilisateurs seront ajoutés automatiquement à ces espaces.',
'Save' => 'Enregistrer',
'Wall entry layout' => 'Plan d\'accès au mur',
'Wall entry layout' => 'Disposition du fil d\'actualités',
'You\'re using no logo at the moment. Upload your logo now.' => 'Vous n\'utilisez pas de logo pour le moment. Chargez votre logo maintenant.',
);

View File

@ -1,6 +1,6 @@
<?php
return array (
'Currently there are {count} records in the database dating from {dating}.' => 'Actuellement, il existe {count} enregistrements dans la base de données datant de {dating}.',
'Old logs can significantly increase the size of your database while providing little information.' => 'Les anciens journaux peuvent considérablement augmenter la taille de votre base de données tout en fournissant peu d\'informations.',
'Currently there are {count} records in the database dating from {dating}.' => 'Il y a actuellement {count} enregistrements dans la base de données datant de {dating}.',
'Old logs can significantly increase the size of your database while providing little information.' => 'Les anciens journaux peuvent considérablement augmenter la taille de votre base de données tout en fournissant peu d\'information pertinente.',
'Save' => 'Enregistrer',
);

View File

@ -1,4 +1,4 @@
<?php
return array (
'E-Mail' => 'E-mail',
'E-Mail' => 'e-mail',
);

View File

@ -1,6 +1,6 @@
<?php
return array (
'Add new provider' => 'Ajouter un nouveau fournisseur',
'Currently no provider active!' => 'Aucun fournisseur actif actuellement !',
'Currently no provider active!' => 'Aucun fournisseur actif actuellement.',
'Enabled OEmbed providers' => 'Activer les fournisseurs OEmbed',
);

View File

@ -5,6 +5,6 @@ return array (
'Delete' => 'Supprimer',
'Edit OEmbed provider' => 'Modifier le fournisseur OEmbed',
'Save' => 'Enregistrer',
'Url Prefix without http:// or https:// (e.g. youtube.com)' => 'Préfixe d\'URL sans http:// ou https:// (par exemple : youtube.com)',
'Use %url% as placeholder for URL. Format needs to be JSON. (e.g. http://www.youtube.com/oembed?url=%url%&format=json)' => 'Utiliser %url% comme espace réservé pour l\'URL. Le format doit être JSON. (Par exemple : http://www.youtube.com/oembed?url=%url%&format=json)',
'Url Prefix without http:// or https:// (e.g. youtube.com)' => 'URL sans http:// ou https:// (p.ex. : youtube.com)',
'Use %url% as placeholder for URL. Format needs to be JSON. (e.g. http://www.youtube.com/oembed?url=%url%&format=json)' => 'Utiliser %url% comme espace réservé pour l\'URL. Le format doit être JSON. (p.ex. : http://www.youtube.com/oembed?url=%url%&format=json)',
);

View File

@ -1,22 +1,5 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Checking HumHub software prerequisites.' => 'Vérifier les pré-requis logiciels de HumHub',
'Re-Run tests' => 'Re-éxecuter la vérification',
];
return array (
'Checking HumHub software prerequisites.' => 'Vérification des pré-requis logiciels de HumHub',
'Re-Run tests' => 'Exécuter une nouvelle vérification',
);

View File

@ -1,10 +1,10 @@
<?php
return array (
'<strong>Manage</strong> spaces' => '<strong>Gérer</strong> les espaces',
'<strong>Manage</strong> spaces' => 'Gestion des <strong>espaces</strong>',
'Actions' => 'Actions',
'Here you can define your default settings for new spaces. These settings can be overwritten for each individual space.' => 'Ici vous pouvez définir vos paramètres par défaut pour les nouveaux espaces. Ces paramètres peuvent être remplacés pour chaque espace individuellement.',
'Overview' => 'Vue d\'ensemble',
'Settings' => 'Réglages',
'Settings' => 'Paramètres',
'Spaces' => 'Espaces',
'This overview contains a list of each space with actions to view, edit and delete spaces.' => 'Cette vue d\'ensemble contient une liste de chaque espace avec des actions pour afficher, modifier et supprimer des espaces.',
);

View File

@ -6,7 +6,7 @@ return array (
'Last login' => 'Dernière connexion',
'Overview' => 'Aperçu',
'Send invite' => 'Envoyer une invitation',
'Settings' => 'Réglages',
'Settings' => 'Paramètres',
'This overview contains a list of each registered user with actions to view, edit and delete users.' => 'Cet écran affiche la liste de tous les utilisateurs enregistrés et les commandes pour voir, modifier et supprimer des utilisateurs.',
'Users' => 'Utilisateurs',
'never' => 'jamais',

View File

@ -1,10 +1,10 @@
<?php
return array (
'<strong>Administration</strong> menu' => 'Menu d\'<strong>Administration</strong>',
'<strong>Administration</strong> menu' => 'Menu <strong>administration</strong>',
'Advanced' => 'Avancé',
'Appearance' => 'Apparence',
'Caching' => 'Cache',
'E-Mail summaries' => 'Résumés par E-mail',
'E-Mail summaries' => 'Résumés par e-mail',
'Files' => 'Fichiers',
'General' => 'Général',
'Information' => 'Information',
@ -12,7 +12,7 @@ return array (
'Modules' => 'Modules',
'Notifications' => 'Notifications',
'OEmbed' => 'OEmbed',
'Proxy' => 'Serveur Proxy',
'Proxy' => 'Proxy',
'Settings' => 'Paramètres',
'Spaces' => 'Espaces',
'Statistics' => 'Statistiques',

View File

@ -1,6 +1,6 @@
<?php
return array (
'Click here to review' => 'Cliquez ici pour réviser',
'New approval requests' => 'Nouvelles requêtes d\'approbation',
'New approval requests' => 'Nouvelles demandes d\'approbation',
'One or more user needs your approval as group admin.' => 'Un utilisateur ou plus nécessite l\'approbation en tant qu\'administrateur de groupe.',
);

View File

@ -1,51 +1,34 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Base URL needs to begin with http:// or https://' => '',
'About' => 'U vezi',
'Add purchased module by licence key' => 'Dodajte kupljeni modul licenčnim ključem',
'Admin' => 'Admin',
'Administration' => 'Administracija',
'Approval' => 'Odobrenje',
'Authentication' => 'Ovjera autentičnosti',
'Back to overview' => 'Povratak na pregled',
'Back to user overview' => 'Povratak na pregled korisnika',
'Basic' => 'Osnovno',
'Caching' => 'Caching',
'Cronjobs' => 'Cronjobs',
'Design' => 'Dizajn',
'Files' => 'Datoteke',
'Groups' => 'Grupe',
'Invite' => 'Poziv',
'Invited by' => 'Poziv od',
'Logging' => 'Logging',
'Mailing' => 'Slanje poštom',
'Modules' => 'Moduli',
'OEmbed providers' => 'OEmbed pružatelji usluga',
'Pending user registrations' => 'Prijava na čekanju korisnika',
'Proxy' => 'Proxy',
'Security' => 'Sigurnost',
'Self test' => 'Samoprovjera',
'Sign up' => 'Upiši se',
'Spaces' => 'Prostori',
'Statistics' => 'Statistika',
'User posts' => 'Postovi korisnika',
'Userprofiles' => 'Korisnički profili',
'Users' => 'Korisnici',
];
return array (
'About' => 'U vezi',
'Add purchased module by licence key' => 'Dodajte kupljeni modul licenčnim ključem',
'Admin' => 'Admin',
'Administration' => 'Administracija',
'Approval' => 'Odobrenje',
'Authentication' => 'Ovjera autentičnosti',
'Back to overview' => 'Povratak na pregled',
'Back to user overview' => 'Povratak na pregled korisnika',
'Base URL needs to begin with http:// or https://' => 'Bazni URL mora početi s http:// ili https://',
'Basic' => 'Osnovno',
'Caching' => 'Caching',
'Cronjobs' => 'Cronjobs',
'Design' => 'Dizajn',
'Files' => 'Datoteke',
'Groups' => 'Grupe',
'Invite' => 'Poziv',
'Invited by' => 'Poziv od',
'Logging' => 'Logging',
'Mailing' => 'Slanje poštom',
'Modules' => 'Moduli',
'OEmbed providers' => 'OEmbed pružatelji usluga',
'Pending user registrations' => 'Prijava na čekanju korisnika',
'Proxy' => 'Proxy',
'Security' => 'Sigurnost',
'Self test' => 'Samoprovjera',
'Sign up' => 'Upiši se',
'Spaces' => 'Prostori',
'Statistics' => 'Statistika',
'User posts' => 'Postovi korisnika',
'Userprofiles' => 'Korisnički profili',
'Users' => 'Korisnici',
);

View File

@ -1,51 +1,34 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Base URL needs to begin with http:// or https://' => '',
'About' => 'Informazioni',
'Add purchased module by licence key' => 'Aggiungi modulo acquistato tramite chiave licenza',
'Admin' => 'Amministrazione',
'Administration' => 'Amministrazione',
'Approval' => 'Approvazione',
'Authentication' => 'Autenticazione',
'Back to overview' => 'Indietro alla panoramica',
'Back to user overview' => 'Indietro alla panoramica utente',
'Basic' => 'Di base',
'Caching' => 'Caching',
'Cronjobs' => 'Cronjobs',
'Design' => 'Design',
'Files' => 'File',
'Groups' => 'Gruppi',
'Invite' => 'Invita',
'Invited by' => 'Invitato da',
'Logging' => 'Logging',
'Mailing' => 'Mail',
'Modules' => 'Moduli',
'OEmbed providers' => 'Fornitori OEmbed',
'Pending user registrations' => 'Registrazioni utenti pendenti',
'Proxy' => 'Proxy',
'Security' => 'Sicurezza',
'Self test' => 'Auto test',
'Sign up' => 'Iscriviti',
'Spaces' => 'Space',
'Statistics' => 'Statistiche',
'User posts' => 'Post degli utenti',
'Userprofiles' => 'Profili utente',
'Users' => 'Utenti',
];
return array (
'About' => 'Informazioni',
'Add purchased module by licence key' => 'Aggiungi modulo acquistato tramite chiave licenza',
'Admin' => 'Amministrazione',
'Administration' => 'Amministrazione',
'Approval' => 'Approvazione',
'Authentication' => 'Autenticazione',
'Back to overview' => 'Indietro alla panoramica',
'Back to user overview' => 'Indietro alla panoramica utente',
'Base URL needs to begin with http:// or https://' => 'Gli url base devono iniziare con http:// o https://',
'Basic' => 'Di base',
'Caching' => 'Caching',
'Cronjobs' => 'Cronjobs',
'Design' => 'Design',
'Files' => 'File',
'Groups' => 'Gruppi',
'Invite' => 'Invita',
'Invited by' => 'Invitato da',
'Logging' => 'Logging',
'Mailing' => 'Mail',
'Modules' => 'Moduli',
'OEmbed providers' => 'Fornitori OEmbed',
'Pending user registrations' => 'Registrazioni utenti pendenti',
'Proxy' => 'Proxy',
'Security' => 'Sicurezza',
'Self test' => 'Auto test',
'Sign up' => 'Iscriviti',
'Spaces' => 'Space',
'Statistics' => 'Statistiche',
'User posts' => 'Post degli utenti',
'Userprofiles' => 'Profili utente',
'Users' => 'Utenti',
);

View File

@ -1,51 +1,34 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Base URL needs to begin with http:// or https://' => '',
'About' => 'Over',
'Add purchased module by licence key' => 'Aangeschafte module toevoegen met de licentie code',
'Admin' => 'Beheerder',
'Administration' => 'Beheer',
'Approval' => 'Goedkeuring',
'Authentication' => 'Authenticatie',
'Back to overview' => 'Terug naar het overzicht',
'Back to user overview' => 'Terug naar het gebruikersoverzicht',
'Basic' => 'Basis',
'Caching' => 'Caching',
'Cronjobs' => 'Cronjobs',
'Design' => 'Ontwerp',
'Files' => 'Bestanden',
'Groups' => 'Groepen',
'Invite' => 'Uitnodiging',
'Invited by' => 'Uitgenodigd door',
'Logging' => 'Logging',
'Mailing' => 'Mailen',
'Modules' => 'Modules',
'OEmbed providers' => 'OEmbed providers',
'Pending user registrations' => 'Wachtende gebruikersregistraties',
'Proxy' => 'Proxy',
'Security' => 'Beveiliging',
'Self test' => 'Zelf-test',
'Sign up' => 'Registreer',
'Spaces' => 'Ruimtes',
'Statistics' => 'Statistieken',
'User posts' => 'Gebruiker posts',
'Userprofiles' => 'Gebruikerprofielen',
'Users' => 'Gebruikers',
];
return array (
'About' => 'Over',
'Add purchased module by licence key' => 'Aangeschafte module toevoegen met de licentie code',
'Admin' => 'Beheerder',
'Administration' => 'Beheer',
'Approval' => 'Goedkeuring',
'Authentication' => 'Authenticatie',
'Back to overview' => 'Terug naar het overzicht',
'Back to user overview' => 'Terug naar het gebruikersoverzicht',
'Base URL needs to begin with http:// or https://' => 'De URL moet beginnen met http:// of https://',
'Basic' => 'Basis',
'Caching' => 'Caching',
'Cronjobs' => 'Cronjobs',
'Design' => 'Ontwerp',
'Files' => 'Bestanden',
'Groups' => 'Groepen',
'Invite' => 'Uitnodiging',
'Invited by' => 'Uitgenodigd door',
'Logging' => 'Logging',
'Mailing' => 'Mailen',
'Modules' => 'Modules',
'OEmbed providers' => 'OEmbed providers',
'Pending user registrations' => 'Wachtende gebruikersregistraties',
'Proxy' => 'Proxy',
'Security' => 'Beveiliging',
'Self test' => 'Zelf-test',
'Sign up' => 'Registreer',
'Spaces' => 'Ruimtes',
'Statistics' => 'Statistieken',
'User posts' => 'Gebruiker posts',
'Userprofiles' => 'Gebruikerprofielen',
'Users' => 'Gebruikers',
);

View File

@ -1,4 +1,4 @@
<?php
return array (
'There is a new HumHub Version ({version}) available.' => 'Er is een nieuwe versie beschikbaar! ({version})',
'There is a new HumHub Version ({version}) available.' => 'De nieuwe versie ({version}) is beschikbaar!',
);

View File

@ -10,13 +10,14 @@
class_name: AcceptanceTester
modules:
enabled:
- WebDriver
- tests\codeception\_support\WebHelper
- tests\codeception\_support\DynamicFixtureHelper
config:
WebDriver:
url: http://localhost:8080/
browser: firefox
window_size: 1024x768
lang: en
enabled:
- WebDriver:
url: 'http://localhost:8080/'
window_size: false # disabled in ChromeDriver
port: 9515
browser: chrome
capabilities:
chromeOptions:
args: ['--headless', '--disable-gpu', '--no-sandbox']
- tests\codeception\_support\WebHelper
- tests\codeception\_support\DynamicFixtureHelper

View File

@ -1,71 +1,48 @@
<?php
use humhub\widgets\Button;
use humhub\modules\admin\widgets\ExportButton;
use humhub\widgets\GridView;
use yii\helpers\Html;
use yii\helpers\Url;
?>
<div class="panel-body">
<?= humhub\libs\Html::backButton(
['/admin/user/index'],
['label' => Yii::t('AdminModule.base', 'Back to user overview'), 'class' => 'pull-right']
); ?>
<h4><?= Yii::t('AdminModule.base', 'Pending user registrations'); ?></h4>
<h4><?= Yii::t('AdminModule.base', 'Pending user registrations') ?></h4>
<div class="help-block">
<?= Yii::t(
'AdminModule.views_approval_index',
'The following list contains all pending sign-ups and invites.'
); ?>
) ?>
</div>
<div class="dropdown pull-right">
<button class="btn btn-primary btn-sm " type="button" data-toggle="dropdown">
<i class="fa fa-download"></i> <?= Yii::t('base', 'Export')?> <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><?= Button::asLink('csv', $urlExportCsv)->pjax(false)
->icon('fa-file-code-o')->sm() ?></li>
<li><?= Button::asLink('xlsx', $urlExportXlsx)->pjax(false)
->icon('fa-file-excel-o')->sm() ?></li>
</ul>
<div class="pull-right">
<?= humhub\libs\Html::backButton(
['/admin/user/index'],
['label' => Yii::t('AdminModule.base', 'Back to user overview')]
) ?>
<?= ExportButton::widget(['filter' => 'PendingRegistrationSearch']) ?>
</div>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' =>
'columns' => [
'email',
'originator.username',
'language',
'created_at',
[
'email',
'originator.username',
'language',
'created_at',
[
'attribute' => 'source',
'filter' => Html::activeDropDownList($searchModel, 'source', array_merge(['' => ''], $types)),
'options' => ['width' => '40px'],
'format' => 'raw',
'value' => function ($data) use ($types) {
return isset($types[$data->source]) ? $types[$data->source] : Html::encode($data->source);
},
],
[
'header' => Yii::t('AdminModule.views_user_index', 'Actions'),
'class' => 'yii\grid\ActionColumn',
'template' => '{resend}',
'options' => ['style' => 'width:80px; min-width:80px;'],
'buttons' => [
'resend' => function ($url, $model, $key) {
return Html::a(
'<i class="fa fa-envelope"></i>',
Url::to(['resend', 'id' => $model->id]),
['class' => 'btn btn-primary btn-xs tt']
);
},
],
],
]
]); ?>
'attribute' => 'source',
'filter' => \yii\helpers\Html::activeDropDownList($searchModel, 'source', $types),
'options' => ['width' => '40px'],
'format' => 'raw',
'value' => function ($data) use ($types) {
return isset($types[$data->source]) ?: Html::encode($data->source);
},
],
]
]) ?>
</div>

View File

@ -0,0 +1,81 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\admin\widgets;
use humhub\components\Widget;
use Yii;
use yii\helpers\Url;
/**
* Class ExportButton
*/
class ExportButton extends Widget
{
/** @var string|null */
public $filter = null;
/**
* This method is invoked right before the widget is executed.
*
* The method will trigger the [[EVENT_BEFORE_RUN]] event. The return value of the method
* will determine whether the widget should continue to run.
*
* When overriding this method, make sure you call the parent implementation like the following:
*
* ```php
* public function beforeRun()
* {
* if (!parent::beforeRun()) {
* return false;
* }
*
* // your custom code here
*
* return true; // or false to not run the widget
* }
* ```
*
* @return bool whether the widget should continue to be executed.
* @since 2.0.11
*/
public function beforeRun()
{
if (!parent::beforeRun()) {
return false;
}
if ($this->filter === null) {
return false;
}
return true;
}
/**
* Executes the widget.
* @return string the result of widget execution to be outputted.
*/
public function run()
{
$params = [
'csv' => Url::toRoute([
'export',
'format' => 'csv',
$this->filter => Yii::$app->request->get($this->filter),
]),
'xlsx' => Url::toRoute([
'export',
'format' => 'xlsx',
$this->filter => Yii::$app->request->get($this->filter),
]),
];
echo $this->render('exportButton', $params);
}
}

View File

@ -0,0 +1,25 @@
<?php
/**
* @var string $csv
* @var string $xlsx
*/
use humhub\widgets\Button;
?>
<div class="btn-group">
<button type="button" class="btn btn-info">
<i class="fa fa-download"></i> <?= Yii::t('base', 'Export') ?>
</button>
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<li><?= Button::asLink('csv', $csv)->pjax(false)
->icon('fa-file-code-o')->sm() ?></li>
<li><?= Button::asLink('xlsx', $xlsx)->pjax(false)
->icon('fa-file-excel-o')->sm() ?></li>
</ul>
</div>

View File

@ -1,5 +1,5 @@
<?php
return array (
'Comments' => 'Commentaires',
'Whenever a new comment was written.' => 'Chaque fois qu\'un nouveau commentaire était écrit.',
'Whenever a new comment was written.' => 'Chaque fois qu\'un nouveau commentaire a été écrit.',
);

View File

@ -1,31 +1,14 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'[Deleted]' => '',
'{displayNames} commented {contentTitle}' => '{displayNames} a commenté {contentTitle}',
'{displayNames} commented {contentTitle} in space {space}' => '{displayNames} a commenté {contentTitle} dans l\'espace {espace}',
'{displayNames} commented {contentTitle}.' => '{displayNames} ont commenté {contentTitle}.',
'{displayNames} just commented your {contentTitle}' => '{displayNames} vient de commenter votre {contentTitle}',
'{displayNames} just commented your {contentTitle} in space {space}' => '{displayNames} vient de commenter votre {contentTitle} dans l\'espace {space}',
'{displayName} commented {contentTitle}' => '{displayName} a commenté {contentTitle}',
'{displayName} commented {contentTitle} in space {space}' => '{displayName} a commenté {contentTitle} dans l\'espace {espace}',
'{displayName} commented {contentTitle}.' => '{displayName} a commenté {contentTitle}.',
'{displayName} just commented your {contentTitle}' => '{displayName} vient de commenter votre {contentTitle}',
'{displayName} just commented your {contentTitle} in space {space}' => '{displayName} vient de commenter votre {contentTitle} dans l\'espace {space}',
];
return array (
'[Deleted]' => '[Supprimé]',
'{displayNames} commented {contentTitle}' => '{displayNames} a commenté {contentTitle}',
'{displayNames} commented {contentTitle} in space {space}' => '{displayNames} a commenté {contentTitle} dans l\'espace {espace}',
'{displayNames} commented {contentTitle}.' => '{displayNames} ont commenté {contentTitle}.',
'{displayNames} just commented your {contentTitle}' => '{displayNames} vient de commenter votre {contentTitle}',
'{displayNames} just commented your {contentTitle} in space {space}' => '{displayNames} vient de commenter votre {contentTitle} dans l\'espace {space}',
'{displayName} commented {contentTitle}' => '{displayName} a commenté {contentTitle}',
'{displayName} commented {contentTitle} in space {space}' => '{displayName} a commenté {contentTitle} dans l\'espace {espace}',
'{displayName} commented {contentTitle}.' => '{displayName} a commenté {contentTitle}.',
'{displayName} just commented your {contentTitle}' => '{displayName} vient de commenter votre {contentTitle}',
'{displayName} just commented your {contentTitle} in space {space}' => '{displayName} vient de commenter votre {contentTitle} dans l\'espace {space}',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'Comments' => 'Commentaires',
'Receive Notifications when someone comments on my own or a following post.' => 'Recevoir des notifications lorsque quelqu\'un commente en mon nom ou un post suivi.',
'Receive Notifications when someone comments on my own or a following post.' => 'Recevoir une notification lorsqu\'on commente mes publications ou une publication que je suis',
);

View File

@ -1,6 +1,6 @@
<?php
return array (
'Allows the user to add comments' => 'Autoriser les utilisateurs à ajouter des commentaires',
'Allows the user to add comments' => 'Autoriser les utilisateurs à commenter',
'Can manage (e.g. archive, stick or delete) arbitrary content' => 'Peut gérer arbitrairement un contenu (p.ex. archiver, mettre en avant ou supprimer)',
'Create comment' => 'Créer un commentaire',
'Manage content' => 'Gérer le contenu',

View File

@ -1,5 +1,5 @@
<?php
return array (
'Edit your comment...' => 'Éditer le commentaire...',
'Edit your comment...' => 'Modifier le commentaire...',
'Save' => 'Enregistrer',
);

View File

@ -1,4 +1,4 @@
<?php
return array (
'Show all {total} comments.' => 'Voir les {total} commentaires.',
'Show all {total} comments.' => 'Afficher les commentaires précédents',
);

View File

@ -1,4 +1,4 @@
<?php
return array (
'Comment' => 'Commenter',
'Comment' => 'Commentaire',
);

View File

@ -1,4 +1,4 @@
<?php
return array (
'Show %count% more comments' => 'Afficher %count% autres commentaires',
'Show %count% more comments' => 'Afficher {count,plural,=1{le commentaire restant} other{# autres commentaires}}',
);

View File

@ -1,31 +1,14 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'[Deleted]' => '',
'{displayNames} commented {contentTitle}' => '{displayNames} komentirao je {contentTitle}',
'{displayNames} commented {contentTitle} in space {space}' => '{displayNames} komentirao je {contentTitle} u prostoru {space}',
'{displayNames} commented {contentTitle}.' => '{displayNames} komentirao je {contentTitle}.',
'{displayNames} just commented your {contentTitle}' => '{displayNames} upravo je komentirao vaš {contentTitle}',
'{displayNames} just commented your {contentTitle} in space {space}' => '{displayNames} upravo je komentirao vaš {contentTitle} u prostoru {space}',
'{displayName} commented {contentTitle}' => '{displayName} komentirao je {contentTitle}',
'{displayName} commented {contentTitle} in space {space}' => '{displayName} komentirao je {contentTitle} u prostoru {space}',
'{displayName} commented {contentTitle}.' => '{displayName} komentirao je {contentTitle}.',
'{displayName} just commented your {contentTitle}' => '{displayName} komentirao je vaš {contentTitle}',
'{displayName} just commented your {contentTitle} in space {space}' => '{displayName} kometnirao je vaš {contentTitle} u prostoru {space}',
];
return array (
'[Deleted]' => '[Obrisano]',
'{displayNames} commented {contentTitle}' => '{displayNames} komentirao je {contentTitle}',
'{displayNames} commented {contentTitle} in space {space}' => '{displayNames} komentirao je {contentTitle} u prostoru {space}',
'{displayNames} commented {contentTitle}.' => '{displayNames} komentirao je {contentTitle}.',
'{displayNames} just commented your {contentTitle}' => '{displayNames} upravo je komentirao vaš {contentTitle}',
'{displayNames} just commented your {contentTitle} in space {space}' => '{displayNames} upravo je komentirao vaš {contentTitle} u prostoru {space}',
'{displayName} commented {contentTitle}' => '{displayName} komentirao je {contentTitle}',
'{displayName} commented {contentTitle} in space {space}' => '{displayName} komentirao je {contentTitle} u prostoru {space}',
'{displayName} commented {contentTitle}.' => '{displayName} komentirao je {contentTitle}.',
'{displayName} just commented your {contentTitle}' => '{displayName} komentirao je vaš {contentTitle}',
'{displayName} just commented your {contentTitle} in space {space}' => '{displayName} kometnirao je vaš {contentTitle} u prostoru {space}',
);

View File

@ -1,31 +1,14 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'[Deleted]' => '',
'{displayNames} commented {contentTitle}' => '{displayNames} reageerde op {contentTitle}',
'{displayNames} commented {contentTitle} in space {space}' => '{displayNames} reageerde op {contentTitle} in ruimte {space}',
'{displayNames} commented {contentTitle}.' => '{displayNames} heeft gereageerd: {contentTitle}.',
'{displayNames} just commented your {contentTitle}' => '{displayNames} reageerde zojuist op uw {contentTitle}',
'{displayNames} just commented your {contentTitle} in space {space}' => '{displayNames} reageerde zojuist op uw {contentTitle} in ruimte {space}',
'{displayName} commented {contentTitle}' => '{displayName} reageerde op {contentTitle}',
'{displayName} commented {contentTitle} in space {space}' => '{displayName} reageerde op {contentTitle} in ruimte {space}',
'{displayName} commented {contentTitle}.' => '{displayName} heeft gereageerd: {contentTitle}.',
'{displayName} just commented your {contentTitle}' => '{displayName} reageerde zojuist op uw {contentTitle}',
'{displayName} just commented your {contentTitle} in space {space}' => '{displayName} reageerde zojuist op uw {contentTitle} in ruimte {space}',
];
return array (
'[Deleted]' => '[Verwijderd]',
'{displayNames} commented {contentTitle}' => '{displayNames} reageerde op {contentTitle}',
'{displayNames} commented {contentTitle} in space {space}' => '{displayNames} reageerde op {contentTitle} in ruimte {space}',
'{displayNames} commented {contentTitle}.' => '{displayNames} heeft gereageerd: {contentTitle}.',
'{displayNames} just commented your {contentTitle}' => '{displayNames} reageerde zojuist op uw {contentTitle}',
'{displayNames} just commented your {contentTitle} in space {space}' => '{displayNames} reageerde zojuist op uw {contentTitle} in ruimte {space}',
'{displayName} commented {contentTitle}' => '{displayName} reageerde op {contentTitle}',
'{displayName} commented {contentTitle} in space {space}' => '{displayName} reageerde op {contentTitle} in ruimte {space}',
'{displayName} commented {contentTitle}.' => '{displayName} heeft gereageerd: {contentTitle}.',
'{displayName} just commented your {contentTitle}' => '{displayName} reageerde zojuist op uw {contentTitle}',
'{displayName} just commented your {contentTitle} in space {space}' => '{displayName} reageerde zojuist op uw {contentTitle} in ruimte {space}',
);

View File

@ -10,13 +10,14 @@
class_name: AcceptanceTester
modules:
enabled:
- WebDriver
- tests\codeception\_support\WebHelper
- tests\codeception\_support\DynamicFixtureHelper
config:
WebDriver:
url: http://localhost:8080/
browser: firefox
window_size: 1024x768
lang: en
enabled:
- WebDriver:
url: 'http://localhost:8080/'
window_size: false # disabled in ChromeDriver
port: 9515
browser: chrome
capabilities:
chromeOptions:
args: ['--headless', '--disable-gpu', '--no-sandbox']
- tests\codeception\_support\WebHelper
- tests\codeception\_support\DynamicFixtureHelper

View File

@ -1,5 +1,5 @@
<?php
return array (
'Contents' => 'Contenus',
'Whenever a new content (e.g. post) has been created.' => 'Chaque fois qu\'un nouveau contenu (p.ex. une publication) a été créé.',
'Whenever a new content (e.g. post) has been created.' => 'Chaque fois qu\'un nouveau contenu a été créé (p.ex. : une publication)',
);

View File

@ -3,5 +3,5 @@ return array (
'{originator} just wrote {contentInfo}' => '{originator} vient d\'écrire {contentInfo}',
'{originator} just wrote {contentInfo} in space {space}' => '{originator} vient d\'écrire {contentInfo} dans l\'espace {space}',
'{originator} notifies you about {contentInfo}' => '{originator} vous informe sur {contentInfo}',
'{originator} notifies you about {contentInfo} in {space}' => '{originator} vous informe de {contentInfo} dans l\'espace {space}',
'{originator} notifies you about {contentInfo} in {space}' => '{originator} vous informe sur {contentInfo} dans l\'espace {space}',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'New Content' => 'Nouveau commentaire',
'Receive Notifications for new content you follow.' => 'Recevoir des notifications pour les nouveaux contenus que vous suivez.',
'New Content' => 'Contenus',
'Receive Notifications for new content you follow.' => 'Recevoir une notification pour les nouveaux contenus suivis.',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'{displayName} created {contentTitle}.' => '{displayName} a créé {contentTitle}.',
'{displayName} posted on your profile {contentTitle}.' => '{displayName} a publié sur votre profil le contenu {contentTitle}.',
'{displayName} posted on your profile {contentTitle}.' => '{displayName} a publié sur votre profil {contentTitle}.',
);

View File

@ -1,10 +1,10 @@
<?php
return array (
'Add a member to notify' => 'Indiquez le nom du membre à avertir',
'Add a member to notify' => 'Ajouter les utilisateurs à avertir',
'Content visibility' => 'Visibilité du contenu',
'Make private' => 'Rendre privé',
'Make public' => 'Rendre public',
'Notify members' => 'Avertir les membres',
'Notify members' => 'Avertir des utilisateurs',
'Public' => 'Public',
'This space is archived.' => 'Cet espace est archivé.',
'This space is archived.' => 'Cet espace est archivé',
);

View File

@ -1,5 +1,5 @@
<?php
return array (
'Cancel Edit' => 'Annuler les modifications',
'Cancel Edit' => 'Annuler la modification',
'Edit' => 'Modifier',
);

View File

@ -1,22 +1,5 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'<strong>Permalink</strong> to this post' => '<strong>Lien permanent</strong> vers cette publication',
'Permalink' => 'Lien permanent',
];
return array (
'<strong>Permalink</strong> to this post' => '<strong>Raccourci</strong> vers cette publication',
'Permalink' => 'Raccourci',
);

View File

@ -1,40 +1,23 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Back to stream' => 'Retour au fil d\'actualités',
'Content with attached files' => 'Contenu avec pièces jointes',
'Created by me' => 'Créé par moi',
'Creation time' => 'Date de création',
'Filter' => 'Filtrer',
'Include archived posts' => 'Inclure les archives',
'Last update' => 'Dernière mise à jour',
'Load more' => 'Afficher plus',
'No matches with your selected filters!' => 'Aucun résultat avec les filtres sélectionnés.',
'Nothing here yet!' => 'Rien à afficher actuellement.',
'Only private posts' => 'Uniquement les publications privées',
'Only public posts' => 'Uniquement les publications publiques',
'Posts only' => 'Uniquement les publications',
'Posts with links' => 'Publications avec liens',
'Sorting' => 'Trier',
'The content has been archived.' => 'Le contenu a été archivé.',
'The content has been deleted.' => 'Le contenu a été supprimé.',
'The content has been unarchived.' => 'Le contenu a été désarchivé.',
'Where I´m involved' => 'Où je suis impliqué',
'Your last edit state has been saved!' => 'Votre dernier état d\'édition a été enregistré.',
];
return array (
'Back to stream' => 'Retour au fil d\'actualités',
'Content with attached files' => 'Contenu avec pièces jointes',
'Created by me' => 'Créé par moi',
'Creation time' => 'Date de création',
'Filter' => 'Filtrer',
'Include archived posts' => 'Inclure les archives',
'Last update' => 'Dernière mise à jour',
'Load more' => 'Afficher plus',
'No matches with your selected filters!' => 'Aucun résultat avec les filtres sélectionnés.',
'Nothing here yet!' => 'Rien à afficher actuellement.',
'Only private posts' => 'Uniquement les publications privées',
'Only public posts' => 'Uniquement les publications publiques',
'Posts only' => 'Publications seules',
'Posts with links' => 'Publications avec liens',
'Sorting' => 'Trier',
'The content has been archived.' => 'Le contenu a été archivé.',
'The content has been deleted.' => 'Le contenu a été supprimé.',
'The content has been unarchived.' => 'Le contenu a été désarchivé.',
'Where I´m involved' => 'Où je suis impliqué',
'Your last edit state has been saved!' => 'Votre dernier état d\'édition a été enregistré.',
);

Some files were not shown because too many files have changed in this diff Show More