mirror of
https://github.com/humhub/humhub.git
synced 2025-01-16 21:58:17 +01:00
Merge branch 'master' into patch-6
This commit is contained in:
commit
2d920b866a
17
.github/no-response.yml
vendored
Normal file
17
.github/no-response.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
# Configuration for probot-no-response - https://github.com/probot/no-response
|
||||
|
||||
# Number of days of inactivity before an Issue is closed for lack of response
|
||||
daysUntilClose: 8
|
||||
|
||||
# Label requiring a response
|
||||
responseRequiredLabel: Status:Need more information
|
||||
|
||||
# Comment to post when closing an Issue for lack of response. Set to `false` to disable
|
||||
closeComment: >
|
||||
This issue has been automatically closed because there has been no response
|
||||
to our request for more information from the original author. With only the
|
||||
information that is currently in the issue, we don't have enough information
|
||||
to take action. Please reach out if you have or find the answers we need so
|
||||
that we can investigate further.
|
||||
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -24,7 +24,6 @@ uploads/profile_image/banner/*
|
||||
nbproject
|
||||
.idea/*
|
||||
.gitmodules
|
||||
.github
|
||||
|
||||
themes/*
|
||||
!themes/HumHub
|
||||
@ -37,4 +36,4 @@ favicon.ico
|
||||
|
||||
**/tests/codeception/_support/_generated/**
|
||||
|
||||
**/tests/codeception/_output/**
|
||||
**/tests/codeception/_output/**
|
@ -14,7 +14,7 @@ php:
|
||||
- 7.0
|
||||
- 7.1
|
||||
- 7.2
|
||||
# - 7.3
|
||||
- 7.3
|
||||
matrix:
|
||||
fast_finish: true
|
||||
jobs:
|
||||
|
@ -3,6 +3,7 @@ HumHub - Social Network Kit
|
||||
|
||||
[![Build Status](https://travis-ci.org/humhub/humhub.svg?branch=master)](https://travis-ci.org/humhub/humhub)
|
||||
[![Yii2](https://img.shields.io/badge/Powered_by-Yii_Framework-green.svg?style=flat)](http://www.yiiframework.com/)
|
||||
[![CLA assistant](https://cla-assistant.io/readme/badge/humhub/humhub)](https://cla-assistant.io/humhub/humhub)
|
||||
|
||||
HumHub is a feature rich and highly flexible OpenSource Social Network Kit written in PHP.
|
||||
|
||||
|
@ -66,7 +66,6 @@
|
||||
"codeception/codeception": "2.4.5",
|
||||
"codeception/specify": "~0.4 || ~1.0",
|
||||
"codeception/verify": "~0.4 || ~1.0",
|
||||
"yiisoft/yii2-apidoc": "~2.1.0",
|
||||
"yiisoft/yii2-debug": "~2.0.0",
|
||||
"yiisoft/yii2-faker": "~2.0.0",
|
||||
"yiisoft/yii2-gii": "~2.0.0"
|
||||
|
1119
composer.lock
generated
1119
composer.lock
generated
File diff suppressed because it is too large
Load Diff
439
protected/humhub/compat/ArrayObject.php
Normal file
439
protected/humhub/compat/ArrayObject.php
Normal file
@ -0,0 +1,439 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework (http://framework.zend.com/)
|
||||
*
|
||||
* @link http://github.com/zendframework/zf2 for the canonical source repository
|
||||
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
namespace Zend\Stdlib;
|
||||
|
||||
|
||||
use ArrayAccess;
|
||||
use Countable;
|
||||
use IteratorAggregate;
|
||||
use Serializable;
|
||||
use Zend\Stdlib\Exception\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* ***** PHP 7.3 modified variant of ZF2 Array Object *****
|
||||
*
|
||||
* Custom framework ArrayObject implementation
|
||||
*
|
||||
* Extends version-specific "abstract" implementation.
|
||||
*/
|
||||
class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
|
||||
{
|
||||
/**
|
||||
* Properties of the object have their normal functionality
|
||||
* when accessed as list (var_dump, foreach, etc.).
|
||||
*/
|
||||
const STD_PROP_LIST = 1;
|
||||
|
||||
/**
|
||||
* Entries can be accessed as properties (read and write).
|
||||
*/
|
||||
const ARRAY_AS_PROPS = 2;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $storage;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $flag;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $iteratorClass;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $protectedProperties;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param array $input
|
||||
* @param int $flags
|
||||
* @param string $iteratorClass
|
||||
*/
|
||||
public function __construct($input = [], $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
|
||||
{
|
||||
$this->setFlags($flags);
|
||||
$this->storage = $input;
|
||||
$this->setIteratorClass($iteratorClass);
|
||||
$this->protectedProperties = array_keys(get_object_vars($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the requested key exists
|
||||
*
|
||||
* @param mixed $key
|
||||
* @return bool
|
||||
*/
|
||||
public function __isset($key)
|
||||
{
|
||||
if ($this->flag == self::ARRAY_AS_PROPS) {
|
||||
return $this->offsetExists($key);
|
||||
}
|
||||
if (in_array($key, $this->protectedProperties)) {
|
||||
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
|
||||
}
|
||||
|
||||
return isset($this->$key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value at the specified key to value
|
||||
*
|
||||
* @param mixed $key
|
||||
* @param mixed $value
|
||||
* @return void
|
||||
*/
|
||||
public function __set($key, $value)
|
||||
{
|
||||
if ($this->flag == self::ARRAY_AS_PROPS) {
|
||||
return $this->offsetSet($key, $value);
|
||||
}
|
||||
if (in_array($key, $this->protectedProperties)) {
|
||||
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
|
||||
}
|
||||
$this->$key = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsets the value at the specified key
|
||||
*
|
||||
* @param mixed $key
|
||||
* @return void
|
||||
*/
|
||||
public function __unset($key)
|
||||
{
|
||||
if ($this->flag == self::ARRAY_AS_PROPS) {
|
||||
return $this->offsetUnset($key);
|
||||
}
|
||||
if (in_array($key, $this->protectedProperties)) {
|
||||
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
|
||||
}
|
||||
unset($this->$key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value at the specified key by reference
|
||||
*
|
||||
* @param mixed $key
|
||||
* @return mixed
|
||||
*/
|
||||
public function &__get($key)
|
||||
{
|
||||
$ret = null;
|
||||
if ($this->flag == self::ARRAY_AS_PROPS) {
|
||||
$ret =& $this->offsetGet($key);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
if (in_array($key, $this->protectedProperties)) {
|
||||
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
|
||||
}
|
||||
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends the value
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return void
|
||||
*/
|
||||
public function append($value)
|
||||
{
|
||||
$this->storage[] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the entries by value
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function asort()
|
||||
{
|
||||
asort($this->storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of public properties in the ArrayObject
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return count($this->storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Exchange the array for another one.
|
||||
*
|
||||
* @param array|ArrayObject $data
|
||||
* @return array
|
||||
*/
|
||||
public function exchangeArray($data)
|
||||
{
|
||||
if (!is_array($data) && !is_object($data)) {
|
||||
throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
|
||||
}
|
||||
|
||||
if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) {
|
||||
$data = $data->getArrayCopy();
|
||||
}
|
||||
if (!is_array($data)) {
|
||||
$data = (array)$data;
|
||||
}
|
||||
|
||||
$storage = $this->storage;
|
||||
|
||||
$this->storage = $data;
|
||||
|
||||
return $storage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a copy of the ArrayObject.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getArrayCopy()
|
||||
{
|
||||
return $this->storage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the behavior flags.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getFlags()
|
||||
{
|
||||
return $this->flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new iterator from an ArrayObject instance
|
||||
*
|
||||
* @return \Iterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
$class = $this->iteratorClass;
|
||||
|
||||
return new $class($this->storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the iterator classname for the ArrayObject.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getIteratorClass()
|
||||
{
|
||||
return $this->iteratorClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the entries by key
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function ksort()
|
||||
{
|
||||
ksort($this->storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort an array using a case insensitive "natural order" algorithm
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function natcasesort()
|
||||
{
|
||||
natcasesort($this->storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort entries using a "natural order" algorithm
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function natsort()
|
||||
{
|
||||
natsort($this->storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the requested key exists
|
||||
*
|
||||
* @param mixed $key
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists($key)
|
||||
{
|
||||
return isset($this->storage[$key]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value at the specified key
|
||||
*
|
||||
* @param mixed $key
|
||||
* @return mixed
|
||||
*/
|
||||
public function &offsetGet($key)
|
||||
{
|
||||
$ret = null;
|
||||
if (!$this->offsetExists($key)) {
|
||||
return $ret;
|
||||
}
|
||||
$ret =& $this->storage[$key];
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value at the specified key to value
|
||||
*
|
||||
* @param mixed $key
|
||||
* @param mixed $value
|
||||
* @return void
|
||||
*/
|
||||
public function offsetSet($key, $value)
|
||||
{
|
||||
$this->storage[$key] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsets the value at the specified key
|
||||
*
|
||||
* @param mixed $key
|
||||
* @return void
|
||||
*/
|
||||
public function offsetUnset($key)
|
||||
{
|
||||
if ($this->offsetExists($key)) {
|
||||
unset($this->storage[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize an ArrayObject
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function serialize()
|
||||
{
|
||||
return serialize(get_object_vars($this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the behavior flags
|
||||
*
|
||||
* @param int $flags
|
||||
* @return void
|
||||
*/
|
||||
public function setFlags($flags)
|
||||
{
|
||||
$this->flag = $flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the iterator classname for the ArrayObject
|
||||
*
|
||||
* @param string $class
|
||||
* @return void
|
||||
*/
|
||||
public function setIteratorClass($class)
|
||||
{
|
||||
if (class_exists($class)) {
|
||||
$this->iteratorClass = $class;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (strpos($class, '\\') === 0) {
|
||||
$class = '\\' . $class;
|
||||
if (class_exists($class)) {
|
||||
$this->iteratorClass = $class;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception\InvalidArgumentException('The iterator class does not exist');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the entries with a user-defined comparison function and maintain key association
|
||||
*
|
||||
* @param callable $function
|
||||
* @return void
|
||||
*/
|
||||
public function uasort($function)
|
||||
{
|
||||
if (is_callable($function)) {
|
||||
uasort($this->storage, $function);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the entries by keys using a user-defined comparison function
|
||||
*
|
||||
* @param callable $function
|
||||
* @return void
|
||||
*/
|
||||
public function uksort($function)
|
||||
{
|
||||
if (is_callable($function)) {
|
||||
uksort($this->storage, $function);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unserialize an ArrayObject
|
||||
*
|
||||
* @param string $data
|
||||
* @return void
|
||||
*/
|
||||
public function unserialize($data)
|
||||
{
|
||||
$ar = unserialize($data);
|
||||
$this->protectedProperties = array_keys(get_object_vars($this));
|
||||
|
||||
$this->setFlags($ar['flag']);
|
||||
$this->exchangeArray($ar['storage']);
|
||||
$this->setIteratorClass($ar['iteratorClass']);
|
||||
|
||||
foreach ($ar as $k => $v) {
|
||||
switch ($k) {
|
||||
case 'flag':
|
||||
$this->setFlags($v);
|
||||
break;
|
||||
case 'storage':
|
||||
$this->exchangeArray($v);
|
||||
break;
|
||||
case 'iteratorClass':
|
||||
$this->setIteratorClass($v);
|
||||
break;
|
||||
case 'protectedProperties':
|
||||
// continue;
|
||||
|
||||
// HUMHUB MODIFICATION
|
||||
continue 2;
|
||||
default:
|
||||
$this->__set($k, $v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -106,7 +106,9 @@ abstract class SocialActivity extends \yii\base\BaseObject implements rendering\
|
||||
* Static initializer should be prefered over new initialization, since it makes use
|
||||
* of Yii::createObject dependency injection/configuration.
|
||||
*
|
||||
* @param array $options
|
||||
* @return static
|
||||
* @throws \yii\base\InvalidConfigException
|
||||
*/
|
||||
public static function instance($options = [])
|
||||
{
|
||||
|
@ -11,9 +11,12 @@ Yii::setAlias('@humhub', '@app/humhub');
|
||||
Yii::setAlias('@config', '@app/config');
|
||||
Yii::setAlias('@themes', '@webroot/themes');
|
||||
|
||||
// Workaround: PHP 7.3 compatible ZF2 ArrayObject class
|
||||
Yii::$classMap['Zend\Stdlib\ArrayObject'] = '@humhub/compat/ArrayObject.php';
|
||||
|
||||
$config = [
|
||||
'name' => 'HumHub',
|
||||
'version' => '1.3.13-pre',
|
||||
'version' => '1.3.13',
|
||||
'basePath' => dirname(__DIR__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR,
|
||||
'bootstrap' => ['log', 'humhub\components\bootstrap\ModuleAutoLoader', 'queue', 'humhub\modules\ui\view\bootstrap\ThemeLoader'],
|
||||
'sourceLanguage' => 'en',
|
||||
@ -208,7 +211,7 @@ $config = [
|
||||
'ldap' => [
|
||||
// LDAP date field formats
|
||||
'dateFields' => [
|
||||
//'birthday' => 'Y.m.d'
|
||||
//'birthday' => 'Y.m.d'
|
||||
],
|
||||
],
|
||||
'formatter' => [
|
||||
@ -223,10 +226,10 @@ $config = [
|
||||
// Seconds before hide time from timeago date
|
||||
// Set to false to always display time
|
||||
'timeAgoHideTimeAfter' => 259200,
|
||||
// Optional: Callback for TimageAgo FullDateFormat
|
||||
//'timeAgoFullDateCallBack' => function($timestamp) {
|
||||
// return 'formatted';
|
||||
//}
|
||||
// Optional: Callback for TimageAgo FullDateFormat
|
||||
//'timeAgoFullDateCallBack' => function($timestamp) {
|
||||
// return 'formatted';
|
||||
//}
|
||||
],
|
||||
'humhub' => [
|
||||
// Marketplace / New Version Check
|
||||
|
@ -36,7 +36,7 @@ class OembedController extends Controller
|
||||
$urls = Yii::$app->request->post('urls', []);
|
||||
$result = [];
|
||||
foreach ($urls as $url) {
|
||||
$oembed = UrlOembed::GetOEmbed($url);
|
||||
$oembed = UrlOembed::getOEmbed($url);
|
||||
if ($oembed) {
|
||||
$result[$url] = $oembed;
|
||||
}
|
||||
|
@ -1,10 +1,29 @@
|
||||
HumHub Change Log
|
||||
=================
|
||||
|
||||
1.3.13 (Unreleased)
|
||||
|
||||
1.3.14 (Unreleased)
|
||||
---------------------------
|
||||
- Fix: LinkedIn API call to v1 deprecated use v2 (@Felli)
|
||||
|
||||
|
||||
1.3.13 (May 3, 2019)
|
||||
----------------------
|
||||
- Enh: Added HomeUrl support to ConsoleApplication
|
||||
- Fix: API call to v1 deprecated use v2
|
||||
- Fix #2536: Incorrect log of "Attempt to steal file" due to faulty File::isAssignedTo() check
|
||||
- Fix: Wrong help block position in admin basic settings
|
||||
- Chng: Removed yiisoft/yii2-apidoc dependency
|
||||
- Enh: Double file extension check is now optional and disabled by default
|
||||
- Fix #3552: `humhub\modules\user\authclient\AuthAction:auth()` not compatible with `yii\authclient\AuthAction:auth()`
|
||||
- Fix #3545: OEmbed fetch limit ignored
|
||||
- Enh: Added `humhub\libs\RestrictedCallException`
|
||||
- Chng: Switched from [bootstrap-tour](https://github.com/sorich87/bootstrap-tour) to [bootstrap-tourist](https://github.com/IGreatlyDislikeJavascript/bootstrap-tourist) due to incompatibility to bootstrap v3.4.1
|
||||
- Enh: Added `humhub.modules.tour` module for handling tour logic
|
||||
- Fix: Added PHP 7.3 compatibility workaround for ZF2 ArrayObject
|
||||
- Fix #3513: Profile schema cache not refreshed after adding new profile field
|
||||
- Fix: Removed Codeception files from HumHub packages builds due to possible XSS flaw (thanks to Kağan Eğlence)
|
||||
- Fix #3534: Mark ID Attribute in LDAP settings as required
|
||||
|
||||
|
||||
1.3.12 (March 26, 2019)
|
||||
---------------------------
|
||||
@ -15,9 +34,9 @@ HumHub Change Log
|
||||
- Fix: Richtext preview new line backslash issue
|
||||
- Enh: Migrated LDAP features into own submodule
|
||||
- Enh: Added new LDAP command line tools
|
||||
- Fix: #3347: Fixed searching members in space and users with white space in full name (Baleks)
|
||||
- Fix #3347: Fixed searching members in space and users with white space in full name (Baleks)
|
||||
- Fix: Deleted Records are not correctly removed from the search index
|
||||
- Fix: #3459 Notification counter increment after manual notification fetch
|
||||
- Fix #3459: Notification counter increment after manual notification fetch
|
||||
- Fix: Notification count update does not respect notification group
|
||||
- Fix: Change email form is restricted to max 45 characters. Changed to 150 (current DB restriction)
|
||||
- Fix: Footer menu renders redundant `<li>` end tag.
|
||||
|
@ -25,5 +25,6 @@ Administration Topics
|
||||
* [Asynchronous Task Processing](asynchronous-tasks.md)
|
||||
* [Authentication and LDAP](authentication.md)
|
||||
* [Search System](search.md)
|
||||
* [Permission defaults](permissions.md)
|
||||
* [Translations](translations.md)
|
||||
* [Troubleshooting and Help](troubleshooting.md)
|
||||
|
@ -54,27 +54,6 @@ Available params:
|
||||
- `allowedLanguages` see the [Translations Section](translations.md)
|
||||
- `enablePjax` used to disable/enable pjax support (default true)
|
||||
|
||||
## Overwrite default Permissions
|
||||
|
||||
Default permission can be overwritten within `humhub/config/common.php` by means of the `defaultPermissions` params array.
|
||||
The following example overwrites the default permission of `humhub\modules\mymodule\permissions\MyPermission` for the
|
||||
given groups.
|
||||
|
||||
|
||||
```
|
||||
return [
|
||||
'params' => [
|
||||
'defaultPermissions' => [
|
||||
'humhub\modules\mymodule\permissions\MyPermission' => [
|
||||
\humhub\modules\user\models\User::USERGROUP_SELF => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
\humhub\modules\user\models\User::USERGROUP_USER => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
\humhub\modules\user\models\User::USERGROUP_FRIEND => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
\humhub\modules\user\models\User::USERGROUP_GUEST => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
```
|
||||
|
||||
# Statistics/Tracking
|
||||
|
||||
|
96
protected/humhub/docs/guide/admin/permissions.md
Normal file
96
protected/humhub/docs/guide/admin/permissions.md
Normal file
@ -0,0 +1,96 @@
|
||||
Permission defaults
|
||||
===================
|
||||
|
||||
Permission defaults can be overwritten within the file `humhub/config/common.php` ([Advanced Configuration](advanced-configuration.md)) by means of the `defaultPermissions` params array.
|
||||
|
||||
The following example overwrites the default permission of `humhub\modules\mymodule\permissions\MyPermission` for the given groups.
|
||||
|
||||
```
|
||||
return [
|
||||
'params' => [
|
||||
'defaultPermissions' => [
|
||||
'humhub\modules\mymodule\permissions\MyPermission' => [
|
||||
\humhub\modules\user\models\User::USERGROUP_SELF => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
\humhub\modules\user\models\User::USERGROUP_USER => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
\humhub\modules\user\models\User::USERGROUP_FRIEND => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
\humhub\modules\user\models\User::USERGROUP_GUEST => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
```
|
||||
|
||||
User Groups
|
||||
-----------
|
||||
|
||||
Available user groups in profile context:
|
||||
|
||||
| Group | Description |
|
||||
|---|---|
|
||||
| \humhub\modules\user\models\User::USERGROUP_SELF | The user himself |
|
||||
| \humhub\modules\user\models\User::USERGROUP_USER | Any registered user |
|
||||
| \humhub\modules\user\models\User::USERGROUP_FRIEND | A befriended user |
|
||||
| \humhub\modules\user\models\User::USERGROUP_GUEST | Any user, even unauthenticated if available |
|
||||
|
||||
Available user groups in space context:
|
||||
|
||||
| Group | Description |
|
||||
|---|---|
|
||||
| \humhub\modules\user\models\User::USERGROUP_OWNER | The owner of the space |
|
||||
| \humhub\modules\user\models\User::USERGROUP_ADMIN | An administrator of the space |
|
||||
| \humhub\modules\user\models\User::USERGROUP_MODERATOR | A moderator of the space |
|
||||
| \humhub\modules\user\models\User::USERGROUP_MEMBER | A member of the space |
|
||||
| \humhub\modules\user\models\User::USERGROUP_USER | Any registered user |
|
||||
| \humhub\modules\user\models\User::USERGROUP_GUEST | Any user, even unauthenticated if available |
|
||||
|
||||
|
||||
Core Permissions
|
||||
-----------------
|
||||
|
||||
Global context
|
||||
|
||||
| Class | Description |
|
||||
|---|---|
|
||||
| \humhub\modules\admin\permissions\ManageGroups | Manage user groups |
|
||||
| \humhub\modules\admin\permissions\ManageModules | Manage installed modules |
|
||||
| \humhub\modules\admin\permissions\ManageSettings | Manage administrative settings |
|
||||
| \humhub\modules\admin\permissions\ManageSpaces | Manage spaces |
|
||||
| \humhub\modules\admin\permissions\ManageUsers | Manage users |
|
||||
| \humhub\modules\admin\permissions\SeeAdminInformation | Access to administrative informations |
|
||||
| \humhub\modules\space\permissions\CreatePrivateSpace | The user is allowed to create private spaces. |
|
||||
| \humhub\modules\space\permissions\CreatePublicSpace | The user is allowed to create public spaces. |
|
||||
|
||||
|
||||
Content Container (Space or Profile) context
|
||||
|
||||
| Class | Description |
|
||||
|---|---|
|
||||
| \humhub\modules\user\permissions\ViewAboutPage | Access to the profile about page. (User profile only!) |
|
||||
| \humhub\modules\comment\permissions\CreateComment | Allowed to create new comments. |
|
||||
| \humhub\modules\post\permissions\CreatePost | Allowed to create new posts. |
|
||||
| \humhub\modules\topic\permissions\AddTopic | Allowed to create new topics. |
|
||||
| \humhub\modules\topic\permissions\ManageTopics | Allowed to manage existing topics. |
|
||||
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
### Even unfriended users can access the "About" page.
|
||||
|
||||
```
|
||||
return [
|
||||
'params' => [
|
||||
'defaultPermissions' => [
|
||||
'humhub\modules\user\permissions\ViewAboutPage' => [
|
||||
\humhub\modules\user\models\User::USERGROUP_USER => \humhub\libs\BasePermission::STATE_ALLOW,
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
20
protected/humhub/libs/RestrictedCallException.php
Normal file
20
protected/humhub/libs/RestrictedCallException.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace humhub\libs;
|
||||
|
||||
/**
|
||||
* Class RestrictedCallException
|
||||
* @package humhub\libs
|
||||
* @since 1.3.13
|
||||
*/
|
||||
class RestrictedCallException extends \Exception
|
||||
{
|
||||
/**
|
||||
* @return string the user-friendly name of this exception
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return 'Restricted Call';
|
||||
}
|
||||
}
|
23
protected/humhub/libs/UrlOembedClient.php
Normal file
23
protected/humhub/libs/UrlOembedClient.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: buddha
|
||||
* Date: 29.04.2019
|
||||
* Time: 16:04
|
||||
*/
|
||||
|
||||
namespace humhub\libs;
|
||||
|
||||
|
||||
interface UrlOembedClient
|
||||
{
|
||||
/**
|
||||
* Fetches a given $url and returns the oembed result array.
|
||||
*
|
||||
* The resulting array should at least contain an `html` with a html preview and a `type` field.
|
||||
*
|
||||
* @param string $url
|
||||
* @return array|null
|
||||
*/
|
||||
public function fetchUrl($url);
|
||||
}
|
71
protected/humhub/libs/UrlOembedHttpClient.php
Normal file
71
protected/humhub/libs/UrlOembedHttpClient.php
Normal file
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace humhub\libs;
|
||||
|
||||
|
||||
use Yii;
|
||||
use yii\helpers\Json;
|
||||
|
||||
class UrlOembedHttpClient implements UrlOembedClient
|
||||
{
|
||||
const RESPONSE_UNAUTHORIZED = 'Unauthorized';
|
||||
const RESPONSE_NOT_FOUND = 'Not Found';
|
||||
|
||||
const ERROR_RESPONSES = [
|
||||
self::RESPONSE_NOT_FOUND,
|
||||
self::RESPONSE_UNAUTHORIZED
|
||||
];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function fetchUrl($url)
|
||||
{
|
||||
$curl = curl_init($url);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
|
||||
|
||||
// Not available when open_basedir or safe_mode is set.
|
||||
if (!function_exists('ini_get') || !ini_get('open_basedir') || !ini_get('safe_mode')) {
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
}
|
||||
|
||||
if (Yii::$app->settings->get('proxy.enabled')) {
|
||||
curl_setopt($curl, CURLOPT_PROXY, Yii::$app->settings->get('proxy.server'));
|
||||
curl_setopt($curl, CURLOPT_PROXYPORT, Yii::$app->settings->get('proxy.port'));
|
||||
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
||||
curl_setopt($curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
||||
if (defined('CURLOPT_PROXYUSERNAME')) {
|
||||
curl_setopt($curl, CURLOPT_PROXYUSERNAME, Yii::$app->settings->get('proxy.user'));
|
||||
}
|
||||
if (defined('CURLOPT_PROXYPASSWORD')) {
|
||||
curl_setopt($curl, CURLOPT_PROXYPASSWORD, Yii::$app->settings->get('proxy.password'));
|
||||
}
|
||||
if (defined('CURLOPT_NOPROXY')) {
|
||||
curl_setopt($curl, CURLOPT_NOPROXY, Yii::$app->settings->get('proxy.noproxy'));
|
||||
}
|
||||
}
|
||||
$return = curl_exec($curl);
|
||||
curl_close($curl);
|
||||
|
||||
return $this->parseJson($return);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $json
|
||||
* @return string|null
|
||||
*/
|
||||
protected function parseJson($json)
|
||||
{
|
||||
try {
|
||||
if(!empty($json) && !in_array($json, static::ERROR_RESPONSES, true)) {
|
||||
return Json::decode($json);
|
||||
}
|
||||
} catch (\Exception $ex) {
|
||||
Yii::warning($ex);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,82 +1,100 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => '<strong>የማረጋገጫ</strong> ተግባር',
|
||||
'<strong>Latest</strong> updates' => '<strong>የቅርብ</strong> ማዘመኛ',
|
||||
'<strong>Mail</strong> summary' => '<strong>የኢሜል</strong> መግለጫ',
|
||||
'Account settings' => 'የአካውንት ማስተካከያ',
|
||||
'Add:' => 'አክል፡',
|
||||
'Administration' => 'አስተዳዳሪ',
|
||||
'Allow' => 'ፍቀድ',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'የመጨረሻውን ተግባርዎን ሲከውኑ ስህተት ተከስቷል። (ማስተካከያው አልተገኘም)።',
|
||||
'An unexpected error occurred while loading the search result.' => 'የፍለጋ ውጤቱ በሂደት ላይ ሳለ ያልተጠበቀ ስህተት ተከስቷል።',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎን የድረገፁን አስተዳዳሪ ያግኙ።',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ የሰርቨር ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎ የድረገፁን አስተዳዳሪ ያግኙ።',
|
||||
'An unknown error occurred while uploading.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል።',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል። ፍንጭ፡ upload_max_filesize እና post_max_size php ማተካከያዎችን ያረጋግጡ።',
|
||||
'Back' => 'ተመለስ',
|
||||
'Back to dashboard' => 'ወደማተግበሪያሰሌዳው ይመለሱ',
|
||||
'Cancel' => 'ተው',
|
||||
'Choose language:' => 'ቋንቋ ይምረጡ፡',
|
||||
'Close' => 'ዝጋ',
|
||||
'Collapse' => 'አጥፋ',
|
||||
'Confirm' => 'አረጋግጥ',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'የይዘት ታካዮች ምንጭ እንደHActiveRecoredContet ወይም HActiveRecordContentAddon ሆኖ ምሳሌ ሆኖ መቀመጥ ይኖርበታል!',
|
||||
'Copy to clipboard' => 'ወደማስፈሪያሰሌዳው ገልብጥ።',
|
||||
'Could not find content of addon!' => 'የታካዩ ይዘት ሊገኝ አልቻለም!',
|
||||
'Could not find requested page.' => 'የተጠየቀው ገፅ ሊገኝ አልቻለም።',
|
||||
'Default' => 'ነባሪ',
|
||||
'Delete' => 'አስወግድ',
|
||||
'Deny' => 'ከልክል',
|
||||
'Do you really want to perform this action?' => 'ይህን ተግባር ለመከወን ይፈልጋሉ?',
|
||||
'Edit' => 'አስተካክል',
|
||||
'Error' => 'ስህተት',
|
||||
'Error while running your last action (Invalid request method).' => 'የመጨረሻ ተግባርዎን በመከወን ላይ ሳሉ ስህተት ተፈጥሯል። (የማያገለግል የመጠየቂያ መንገድ ነው)።',
|
||||
'Error:' => 'ስህተት፡',
|
||||
'Expand' => 'አስፋ',
|
||||
'Export' => 'ላክ',
|
||||
'Info:' => 'መረጃ፡',
|
||||
'Invalid request method!' => 'የማያገለግል የመጠየቂያ መንገድ ነው!',
|
||||
'It looks like you may have taken the wrong turn.' => 'የተሳሳተ የመመለሻ መንገድ ሳይጠቀሙ አልቀሩም።',
|
||||
'Language' => 'ቋንቋ',
|
||||
'Loading...' => 'በመጫን ላይ...',
|
||||
'Login' => 'ይግቡ',
|
||||
'Logo of {appName}' => 'የ{appName} ልዩ ምስል',
|
||||
'Logout' => 'ይውጡ',
|
||||
'Menu' => 'ማውጫ',
|
||||
'Module is not enabled on this content container!' => 'ሞጁሉ በዚህ የይዘት ማዕቀፍ ላይ አይሰራም!',
|
||||
'My profile' => 'የግል መረጃዬ',
|
||||
'My profile image' => 'የግል መርጃ ምስሌ',
|
||||
'New profile image' => 'አዲስ የግል መረጃ ምስል',
|
||||
'Next' => 'ቀጥሎ',
|
||||
'No error information given.' => 'የተሳሳተ መረጃ አልተሰጠም።',
|
||||
'Oooops...' => 'ውይይይ...',
|
||||
'Open' => 'ክፈት',
|
||||
'Please type at least 3 characters' => 'እባክዎን ቢያንስ 3 የፅሁፍ ምልክቶችን ይፃፉ',
|
||||
'Please type at least {count} characters' => 'እባክዎን ቢያንስ {count} የፅሁፍ ምልክቶችን ይፃፉ',
|
||||
'Profile dropdown' => 'የግል መረጃ ዝርዝር',
|
||||
'Profile image of {displayName}' => 'የ{displayName} የግል መረጃ የግል ምስል',
|
||||
'Profile picture of {displayName}' => 'የ{displayName} የግል መረጃ ምስል',
|
||||
'Save' => 'አስቀምጥ',
|
||||
'Saved' => 'ተቀምጧል',
|
||||
'Search' => 'ፈልግ',
|
||||
'Select Me' => 'ይምረጡኝ ',
|
||||
'Show less' => 'በትንሹ አሳይ',
|
||||
'Show more' => 'በዝርዝር አሳይ',
|
||||
'Some files could not be uploaded:' => 'አንዳንድ ፋይሎች ሊጫኑ አልቻሉም፡',
|
||||
'Text could not be copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ላይ ሊገለበጥ አልቻለም',
|
||||
'Text has been copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ተገልብጧል',
|
||||
'The date has to be in the past.' => 'ቀኑ ያለፈ መሆን ይኖርበታል።',
|
||||
'The file has been deleted.' => 'ፋይሉ ተወግዷል።',
|
||||
'The requested resource could not be found.' => 'የተጠየቀው ምንጭ ሊገኝ አልቻለም። ',
|
||||
'The space has been archived.' => 'መወያያው ተመዝግቧል።',
|
||||
'The space has been unarchived.' => 'መወያያው አልተመዘገበም።',
|
||||
'Time Zone' => 'የጊዜ ቀጠና',
|
||||
'Toggle comment menu' => 'የአስተያየት ማውጫ መቀያየሪያ',
|
||||
'Toggle panel menu' => 'የማውጫ ፓናል መቀያየሪያ',
|
||||
'Toggle post menu' => 'የልጥፍ ማውጫ መቀያየሪያ',
|
||||
'Toggle stream entry menu' => 'የማስተላለፊያ መግቢያ ዝርዝር መቀያየሪያ',
|
||||
'Unsubscribe' => 'ምዝገባው ይቅር',
|
||||
'Upload' => 'ጫን',
|
||||
'Upload file' => 'ፋይል ጫን',
|
||||
'You are not allowed to run this action.' => 'ይህን ተግባር ለማከናወን አልተፈቀደልዎትም።',
|
||||
);
|
||||
/**
|
||||
* 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 [
|
||||
'Powered by {name}' => '',
|
||||
'<strong>Confirm</strong> Action' => '<strong>የማረጋገጫ</strong> ተግባር',
|
||||
'<strong>Latest</strong> updates' => '<strong>የቅርብ</strong> ማዘመኛ',
|
||||
'<strong>Mail</strong> summary' => '<strong>የኢሜል</strong> መግለጫ',
|
||||
'Account settings' => 'የአካውንት ማስተካከያ',
|
||||
'Add:' => 'አክል፡',
|
||||
'Administration' => 'አስተዳዳሪ',
|
||||
'Allow' => 'ፍቀድ',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'የመጨረሻውን ተግባርዎን ሲከውኑ ስህተት ተከስቷል። (ማስተካከያው አልተገኘም)።',
|
||||
'An unexpected error occurred while loading the search result.' => 'የፍለጋ ውጤቱ በሂደት ላይ ሳለ ያልተጠበቀ ስህተት ተከስቷል።',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎን የድረገፁን አስተዳዳሪ ያግኙ።',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ የሰርቨር ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎ የድረገፁን አስተዳዳሪ ያግኙ።',
|
||||
'An unknown error occurred while uploading.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል።',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል። ፍንጭ፡ upload_max_filesize እና post_max_size php ማተካከያዎችን ያረጋግጡ።',
|
||||
'Back' => 'ተመለስ',
|
||||
'Back to dashboard' => 'ወደማተግበሪያሰሌዳው ይመለሱ',
|
||||
'Cancel' => 'ተው',
|
||||
'Choose language:' => 'ቋንቋ ይምረጡ፡',
|
||||
'Close' => 'ዝጋ',
|
||||
'Collapse' => 'አጥፋ',
|
||||
'Confirm' => 'አረጋግጥ',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'የይዘት ታካዮች ምንጭ እንደHActiveRecoredContet ወይም HActiveRecordContentAddon ሆኖ ምሳሌ ሆኖ መቀመጥ ይኖርበታል!',
|
||||
'Copy to clipboard' => 'ወደማስፈሪያሰሌዳው ገልብጥ።',
|
||||
'Could not find content of addon!' => 'የታካዩ ይዘት ሊገኝ አልቻለም!',
|
||||
'Could not find requested page.' => 'የተጠየቀው ገፅ ሊገኝ አልቻለም።',
|
||||
'Default' => 'ነባሪ',
|
||||
'Delete' => 'አስወግድ',
|
||||
'Deny' => 'ከልክል',
|
||||
'Do you really want to perform this action?' => 'ይህን ተግባር ለመከወን ይፈልጋሉ?',
|
||||
'Edit' => 'አስተካክል',
|
||||
'Error' => 'ስህተት',
|
||||
'Error while running your last action (Invalid request method).' => 'የመጨረሻ ተግባርዎን በመከወን ላይ ሳሉ ስህተት ተፈጥሯል። (የማያገለግል የመጠየቂያ መንገድ ነው)።',
|
||||
'Error:' => 'ስህተት፡',
|
||||
'Expand' => 'አስፋ',
|
||||
'Export' => 'ላክ',
|
||||
'Info:' => 'መረጃ፡',
|
||||
'Invalid request method!' => 'የማያገለግል የመጠየቂያ መንገድ ነው!',
|
||||
'It looks like you may have taken the wrong turn.' => 'የተሳሳተ የመመለሻ መንገድ ሳይጠቀሙ አልቀሩም።',
|
||||
'Language' => 'ቋንቋ',
|
||||
'Loading...' => 'በመጫን ላይ...',
|
||||
'Login' => 'ይግቡ',
|
||||
'Logo of {appName}' => 'የ{appName} ልዩ ምስል',
|
||||
'Logout' => 'ይውጡ',
|
||||
'Menu' => 'ማውጫ',
|
||||
'Module is not enabled on this content container!' => 'ሞጁሉ በዚህ የይዘት ማዕቀፍ ላይ አይሰራም!',
|
||||
'My profile' => 'የግል መረጃዬ',
|
||||
'My profile image' => 'የግል መርጃ ምስሌ',
|
||||
'New profile image' => 'አዲስ የግል መረጃ ምስል',
|
||||
'Next' => 'ቀጥሎ',
|
||||
'No error information given.' => 'የተሳሳተ መረጃ አልተሰጠም።',
|
||||
'Oooops...' => 'ውይይይ...',
|
||||
'Open' => 'ክፈት',
|
||||
'Please type at least 3 characters' => 'እባክዎን ቢያንስ 3 የፅሁፍ ምልክቶችን ይፃፉ',
|
||||
'Please type at least {count} characters' => 'እባክዎን ቢያንስ {count} የፅሁፍ ምልክቶችን ይፃፉ',
|
||||
'Profile dropdown' => 'የግል መረጃ ዝርዝር',
|
||||
'Profile image of {displayName}' => 'የ{displayName} የግል መረጃ የግል ምስል',
|
||||
'Profile picture of {displayName}' => 'የ{displayName} የግል መረጃ ምስል',
|
||||
'Save' => 'አስቀምጥ',
|
||||
'Saved' => 'ተቀምጧል',
|
||||
'Search' => 'ፈልግ',
|
||||
'Select Me' => 'ይምረጡኝ ',
|
||||
'Show less' => 'በትንሹ አሳይ',
|
||||
'Show more' => 'በዝርዝር አሳይ',
|
||||
'Some files could not be uploaded:' => 'አንዳንድ ፋይሎች ሊጫኑ አልቻሉም፡',
|
||||
'Text could not be copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ላይ ሊገለበጥ አልቻለም',
|
||||
'Text has been copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ተገልብጧል',
|
||||
'The date has to be in the past.' => 'ቀኑ ያለፈ መሆን ይኖርበታል።',
|
||||
'The file has been deleted.' => 'ፋይሉ ተወግዷል።',
|
||||
'The requested resource could not be found.' => 'የተጠየቀው ምንጭ ሊገኝ አልቻለም። ',
|
||||
'The space has been archived.' => 'መወያያው ተመዝግቧል።',
|
||||
'The space has been unarchived.' => 'መወያያው አልተመዘገበም።',
|
||||
'Time Zone' => 'የጊዜ ቀጠና',
|
||||
'Toggle comment menu' => 'የአስተያየት ማውጫ መቀያየሪያ',
|
||||
'Toggle panel menu' => 'የማውጫ ፓናል መቀያየሪያ',
|
||||
'Toggle post menu' => 'የልጥፍ ማውጫ መቀያየሪያ',
|
||||
'Toggle stream entry menu' => 'የማስተላለፊያ መግቢያ ዝርዝር መቀያየሪያ',
|
||||
'Unsubscribe' => 'ምዝገባው ይቅር',
|
||||
'Upload' => 'ጫን',
|
||||
'Upload file' => 'ፋይል ጫን',
|
||||
'You are not allowed to run this action.' => 'ይህን ተግባር ለማከናወን አልተፈቀደልዎትም።',
|
||||
];
|
||||
|
File diff suppressed because one or more lines are too long
@ -27,6 +27,7 @@ return [
|
||||
'Invalid request method!' => '',
|
||||
'Module is not enabled on this content container!' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Toggle comment menu' => '',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
|
@ -43,6 +43,7 @@ return [
|
||||
'No error information given.' => '',
|
||||
'Open' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -53,6 +53,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
21
protected/humhub/messages/br/ContentController.base.php
Normal file
21
protected/humhub/messages/br/ContentController.base.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?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 [
|
||||
'Invalid content id given!' => '',
|
||||
];
|
100
protected/humhub/messages/br/base.php
Normal file
100
protected/humhub/messages/br/base.php
Normal file
@ -0,0 +1,100 @@
|
||||
<?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>Confirm</strong> Action' => '',
|
||||
'<strong>Latest</strong> updates' => '',
|
||||
'<strong>Mail</strong> summary' => '',
|
||||
'Account settings' => '',
|
||||
'Add:' => '',
|
||||
'Administration' => '',
|
||||
'Allow' => '',
|
||||
'An error occurred while handling your last action. (Handler not found).' => '',
|
||||
'An unexpected error occurred while loading the search result.' => '',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unknown error occurred while uploading.' => '',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
|
||||
'Back' => '',
|
||||
'Back to dashboard' => '',
|
||||
'Cancel' => '',
|
||||
'Choose language:' => '',
|
||||
'Close' => '',
|
||||
'Collapse' => '',
|
||||
'Confirm' => '',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => '',
|
||||
'Copy to clipboard' => '',
|
||||
'Could not find content of addon!' => '',
|
||||
'Could not find requested page.' => '',
|
||||
'Default' => '',
|
||||
'Delete' => '',
|
||||
'Deny' => '',
|
||||
'Do you really want to perform this action?' => '',
|
||||
'Edit' => '',
|
||||
'Error' => '',
|
||||
'Error while running your last action (Invalid request method).' => '',
|
||||
'Error:' => '',
|
||||
'Expand' => '',
|
||||
'Export' => '',
|
||||
'Info:' => '',
|
||||
'Invalid request method!' => '',
|
||||
'It looks like you may have taken the wrong turn.' => '',
|
||||
'Language' => '',
|
||||
'Loading...' => '',
|
||||
'Login' => '',
|
||||
'Logo of {appName}' => '',
|
||||
'Logout' => '',
|
||||
'Menu' => '',
|
||||
'Module is not enabled on this content container!' => '',
|
||||
'My profile' => '',
|
||||
'My profile image' => '',
|
||||
'New profile image' => '',
|
||||
'Next' => '',
|
||||
'No error information given.' => '',
|
||||
'Oooops...' => '',
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
'Save' => '',
|
||||
'Saved' => '',
|
||||
'Search' => '',
|
||||
'Select Me' => '',
|
||||
'Show less' => '',
|
||||
'Show more' => '',
|
||||
'Some files could not be uploaded:' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
'The date has to be in the past.' => '',
|
||||
'The file has been deleted.' => '',
|
||||
'The requested resource could not be found.' => '',
|
||||
'The space has been archived.' => '',
|
||||
'The space has been unarchived.' => '',
|
||||
'Time Zone' => '',
|
||||
'Toggle comment menu' => '',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
'Toggle stream entry menu' => '',
|
||||
'Unsubscribe' => '',
|
||||
'Upload' => '',
|
||||
'Upload file' => '',
|
||||
'You are not allowed to run this action.' => '',
|
||||
];
|
29
protected/humhub/messages/br/error.php
Normal file
29
protected/humhub/messages/br/error.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?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>Login</strong> required' => '',
|
||||
'An internal server error occurred.' => '',
|
||||
'Guest mode not active, please login first.' => '',
|
||||
'Login required for this section.' => '',
|
||||
'You are not allowed to perform this action.' => '',
|
||||
'You are not permitted to access this section.' => '',
|
||||
'You need admin permissions to access this section.' => '',
|
||||
'Your user account has not been approved yet, please try again later or contact a network administrator.' => '',
|
||||
'Your user account is inactive, please login with an active account or contact a network administrator.' => '',
|
||||
];
|
@ -0,0 +1,51 @@
|
||||
<?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 [
|
||||
'Add image/file' => '',
|
||||
'Add link' => '',
|
||||
'Bold' => '',
|
||||
'Close' => '',
|
||||
'Code' => '',
|
||||
'Enter a url (e.g. http://example.com)' => '',
|
||||
'Heading' => '',
|
||||
'Image' => '',
|
||||
'Image/File' => '',
|
||||
'Insert Hyperlink' => '',
|
||||
'Insert Image Hyperlink' => '',
|
||||
'Italic' => '',
|
||||
'List' => '',
|
||||
'Ordered List' => '',
|
||||
'Please wait while uploading...' => '',
|
||||
'Preview' => '',
|
||||
'Quote' => '',
|
||||
'Target' => '',
|
||||
'Title' => '',
|
||||
'Title of your link' => '',
|
||||
'URL/Link' => '',
|
||||
'Unordered List' => '',
|
||||
'code text here' => '',
|
||||
'emphasized text' => '',
|
||||
'enter image description here' => '',
|
||||
'enter image title here' => '',
|
||||
'enter link description here' => '',
|
||||
'heading text' => '',
|
||||
'list text here' => '',
|
||||
'quote here' => '',
|
||||
'strong text' => '',
|
||||
];
|
@ -51,6 +51,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -24,6 +24,7 @@ return [
|
||||
'Export' => '',
|
||||
'Invalid request method!' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Select Me' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
|
@ -42,6 +42,7 @@ return [
|
||||
'No error information given.' => '',
|
||||
'Open' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php
|
||||
return array (
|
||||
'Invalid content id given!' => 'Ungültige content id!',
|
||||
'Invalid content id given!' => 'Ungültige Inhalts-ID angegeben!',
|
||||
);
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,100 +1,83 @@
|
||||
<?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>Confirm</strong> Action' => 'Aktion <strong>bestätigen</strong>
|
||||
',
|
||||
'<strong>Latest</strong> updates' => '<strong>Letzte</strong> Aktualisierungen',
|
||||
'<strong>Mail</strong> summary' => '<strong>E-Mail</strong> Zusammenfassung',
|
||||
'Account settings' => 'Kontoeinstellungen',
|
||||
'Add:' => 'Hinzufügen:',
|
||||
'Administration' => 'Administration',
|
||||
'Allow' => 'Erlauben',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Während der letzten Aktion ist ein Fehler aufgetreten. (Handler not found)',
|
||||
'An unexpected error occurred while loading the search result.' => 'Während des Ladens der Suchergebnisse ist ein unerwarteter Fehler aufgetreten.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Fehler ist aufgetreten. Sollte dieser weiterhin auftreten, kontaktiere den Administrator.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Serverfehler ist aufgetreten. Sollte dieser weiterhin auftreten, kontaktiere den Administrator.',
|
||||
'An unknown error occurred while uploading.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten. Hinweis: Prüfe die PHP-Einstellungen "upload_max_filesize" und "post_max_size".',
|
||||
'Back' => 'Zurück',
|
||||
'Back to dashboard' => 'Zurück zur Übersicht',
|
||||
'Cancel' => 'Abbrechen',
|
||||
'Choose language:' => 'Sprache wählen:',
|
||||
'Close' => 'Schließen',
|
||||
'Collapse' => 'Einklappen',
|
||||
'Confirm' => 'Bestätigen',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Die Quelle des Addons muss eine Instanz von HActiveRecordContent oder HActiveRecordContentAddon sein!',
|
||||
'Copy to clipboard' => 'In die Zwischenablage kopieren',
|
||||
'Could not find content of addon!' => 'Der Inhalt des Addons konnte nicht gefunden werden!',
|
||||
'Could not find requested page.' => 'Die angeforderte Seite kann nicht gefunden werden.',
|
||||
'Default' => 'Standard',
|
||||
'Delete' => 'Löschen',
|
||||
'Deny' => 'Ablehnen',
|
||||
'Do you really want to perform this action?' => 'Wollen Sie diese Aktion wirklich ausführen?',
|
||||
'Edit' => 'Bearbeiten',
|
||||
'Error' => 'Fehler',
|
||||
'Error while running your last action (Invalid request method).' => 'Fehler bei der Ausführung der letzten Aktion (Invalid request method).',
|
||||
'Error:' => 'Fehler:',
|
||||
'Expand' => 'Erweitern',
|
||||
'Export' => 'Exportieren',
|
||||
'Info:' => 'Info:',
|
||||
'Invalid request method!' => 'Ungültige Anfragemethode!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Du hast womöglich den falschen Weg eingeschlagen.',
|
||||
'Language' => 'Sprache',
|
||||
'Loading...' => 'Lädt...',
|
||||
'Login' => 'Anmelden',
|
||||
'Logo of {appName}' => 'Logo von {appName}',
|
||||
'Logout' => 'Ausloggen',
|
||||
'Menu' => 'Menü',
|
||||
'Module is not enabled on this content container!' => 'Dieses Modul ist in diesem Content Container nicht aktiviert!',
|
||||
'My profile' => 'Mein Profil',
|
||||
'My profile image' => 'Mein Profilbild',
|
||||
'New profile image' => 'Neues Profilbild',
|
||||
'Next' => 'Weiter',
|
||||
'No error information given.' => 'Keine Fehlerbeschreibung verfügbar.',
|
||||
'Oooops...' => 'Uuuups...',
|
||||
'Open' => 'Öffnen',
|
||||
'Please type at least 3 characters' => 'Bitte mindestens 3 Zeichen eingeben',
|
||||
'Please type at least {count} characters' => 'Bitte wenigstens {count} Zeichen eingeben',
|
||||
'Profile dropdown' => 'Profil Dropdown',
|
||||
'Profile image of {displayName}' => 'Profilbild von {displayName}',
|
||||
'Profile picture of {displayName}' => 'Profilbild von {displayName}',
|
||||
'Save' => 'Speichern',
|
||||
'Saved' => 'Gespeichert',
|
||||
'Search' => 'Suchen',
|
||||
'Select Me' => 'Mich auswählen',
|
||||
'Show less' => 'Weniger anzeigen',
|
||||
'Show more' => 'Mehr anzeigen',
|
||||
'Some files could not be uploaded:' => 'Einige Dateien konten nicht hochgeladen werden:',
|
||||
'Text could not be copied to clipboard' => 'Text konnte nicht in die Zwischenablage kopiert werden',
|
||||
'Text has been copied to clipboard' => 'Text wurde in die Zwischenablage kopiert',
|
||||
'The date has to be in the past.' => 'Datum muss in der Vergangenheit liegen.',
|
||||
'The file has been deleted.' => 'Die Datei wurde gelöscht.',
|
||||
'The requested resource could not be found.' => 'Die angeforderte Ressource konnte nicht gefunden werden.',
|
||||
'The space has been archived.' => 'Der Space wurde archiviert.',
|
||||
'The space has been unarchived.' => 'Der Space wurde dearchiviert.',
|
||||
'Time Zone' => 'Zeitzone',
|
||||
'Toggle comment menu' => 'Kommentarmenü umschalten',
|
||||
'Toggle panel menu' => 'Panelmenü umschalten',
|
||||
'Toggle post menu' => 'Beitragsmenü umschalten',
|
||||
'Toggle stream entry menu' => 'Streameintragsmenü umschalten',
|
||||
'Unsubscribe' => 'Abbestellen',
|
||||
'Upload' => 'Hochladen',
|
||||
'Upload file' => 'Datei hochladen',
|
||||
'You are not allowed to run this action.' => 'Du hast keine Berechtigung, diese Aktion auszuführen.',
|
||||
];
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => 'Aktion <strong>bestätigen</strong>',
|
||||
'<strong>Latest</strong> updates' => '<strong>Letzte</strong> Aktualisierungen',
|
||||
'<strong>Mail</strong> summary' => '<strong>E-Mail</strong> Zusammenfassung',
|
||||
'Account settings' => 'Kontoeinstellungen',
|
||||
'Add:' => 'Hinzufügen:',
|
||||
'Administration' => 'Administration',
|
||||
'Allow' => 'Erlauben',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Während der letzten Aktion ist ein Fehler aufgetreten. (Handler not found)',
|
||||
'An unexpected error occurred while loading the search result.' => 'Während des Ladens der Suchergebnisse ist ein unerwarteter Fehler aufgetreten.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Fehler ist aufgetreten. Sollte dieser weiterhin auftreten kontaktiere den Administrator.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Serverfehler ist aufgetreten. Sollte dieser weiterhin auftreten kontaktiere den Administrator.',
|
||||
'An unknown error occurred while uploading.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten. Hinweis: Prüfe die PHP-Einstellungen "upload_max_filesize" und "post_max_size".',
|
||||
'Back' => 'Zurück',
|
||||
'Back to dashboard' => 'Zurück zur Übersicht',
|
||||
'Cancel' => 'Abbrechen',
|
||||
'Choose language:' => 'Sprache wählen:',
|
||||
'Close' => 'Schließen',
|
||||
'Collapse' => 'Einklappen',
|
||||
'Confirm' => 'Bestätigen',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Die Quelle des Addons muss eine Instanz von HActiveRecordContent oder HActiveRecordContentAddon sein!',
|
||||
'Copy to clipboard' => 'In die Zwischenablage kopieren',
|
||||
'Could not find content of addon!' => 'Der Inhalt des Addons konnte nicht gefunden werden!',
|
||||
'Could not find requested page.' => 'Die angeforderte Seite kann nicht gefunden werden.',
|
||||
'Default' => 'Standard',
|
||||
'Delete' => 'Löschen',
|
||||
'Deny' => 'Ablehnen',
|
||||
'Do you really want to perform this action?' => 'Wollen Sie diese Aktion wirklich ausführen?',
|
||||
'Edit' => 'Bearbeiten',
|
||||
'Error' => 'Fehler',
|
||||
'Error while running your last action (Invalid request method).' => 'Fehler bei der Ausführung der letzten Aktion (Invalid request method).',
|
||||
'Error:' => 'Fehler:',
|
||||
'Expand' => 'Erweitern',
|
||||
'Export' => 'Exportieren',
|
||||
'Info:' => 'Info:',
|
||||
'Invalid request method!' => 'Ungültige Anfragemethode!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Du hast womöglich den falschen Weg eingeschlagen.',
|
||||
'Language' => 'Sprache',
|
||||
'Loading...' => 'Lädt...',
|
||||
'Login' => 'Anmelden',
|
||||
'Logo of {appName}' => 'Logo von {appName}',
|
||||
'Logout' => 'Ausloggen',
|
||||
'Menu' => 'Menü',
|
||||
'Module is not enabled on this content container!' => 'Dieses Modul ist in diesem Content Container nicht aktiviert!',
|
||||
'My profile' => 'Mein Profil',
|
||||
'My profile image' => 'Mein Profilbild',
|
||||
'New profile image' => 'Neues Profilbild',
|
||||
'Next' => 'Weiter',
|
||||
'No error information given.' => 'Keine Fehlerbeschreibung verfügbar.',
|
||||
'Oooops...' => 'Uuuups...',
|
||||
'Open' => 'Öffnen',
|
||||
'Please type at least 3 characters' => 'Bitte mindestens 3 Zeichen eingeben',
|
||||
'Please type at least {count} characters' => 'Bitte wenigstens {count} Zeichen eingeben',
|
||||
'Powered by {name}' => 'Unterstützt von {name}',
|
||||
'Profile dropdown' => 'Profil Dropdown',
|
||||
'Profile image of {displayName}' => 'Profilbild von {displayName}',
|
||||
'Profile picture of {displayName}' => 'Profilbild von {displayName}',
|
||||
'Save' => 'Speichern',
|
||||
'Saved' => 'Gespeichert',
|
||||
'Search' => 'Suchen',
|
||||
'Select Me' => 'Mich auswählen',
|
||||
'Show less' => 'Weniger anzeigen',
|
||||
'Show more' => 'Mehr anzeigen',
|
||||
'Some files could not be uploaded:' => 'Einige Dateien konten nicht hochgeladen werden:',
|
||||
'Text could not be copied to clipboard' => 'Text konnte nicht in die Zwischenablage kopiert werden',
|
||||
'Text has been copied to clipboard' => 'Text wurde in die Zwischenablage kopiert',
|
||||
'The date has to be in the past.' => 'Datum muss in der Vergangenheit liegen.',
|
||||
'The file has been deleted.' => 'Die Datei wurde gelöscht.',
|
||||
'The requested resource could not be found.' => 'Die angeforderte Ressource konnte nicht gefunden werden.',
|
||||
'The space has been archived.' => 'Der Space wurde archiviert.',
|
||||
'The space has been unarchived.' => 'Der Space wurde dearchiviert.',
|
||||
'Time Zone' => 'Zeitzone',
|
||||
'Toggle comment menu' => 'Kommentarmenü umschalten',
|
||||
'Toggle panel menu' => 'Panelmenü umschalten',
|
||||
'Toggle post menu' => 'Beitragsmenü umschalten',
|
||||
'Toggle stream entry menu' => 'Streameintragsmenü umschalten',
|
||||
'Unsubscribe' => 'Abbestellen',
|
||||
'Upload' => 'Hochladen',
|
||||
'Upload file' => 'Datei hochladen',
|
||||
'You are not allowed to run this action.' => 'Du hast keine Berechtigung, diese Aktion auszuführen.',
|
||||
);
|
||||
|
@ -56,6 +56,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -22,6 +22,7 @@ return [
|
||||
'Delete' => '',
|
||||
'Edit' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
'<strong>Confirm</strong> Action' => '<strong>Confirmar</strong> Acción',
|
||||
|
@ -41,6 +41,7 @@ return [
|
||||
'My profile image' => '',
|
||||
'No error information given.' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -1,82 +1,100 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => '<strong>Vahvista</strong> Toiminto',
|
||||
'<strong>Latest</strong> updates' => '<strong>Viimeismmät</strong> päivitykset',
|
||||
'<strong>Mail</strong> summary' => '<strong>Ilmoitukset</strong>',
|
||||
'Account settings' => 'Asetukset',
|
||||
'Add:' => 'Lisää:',
|
||||
'Administration' => 'Hallinta',
|
||||
'Allow' => 'Salli',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Viimeisen toiminnon käsittelyssä tapahtui virhe. (Käsiteltävää ei löydy).',
|
||||
'An unexpected error occurred while loading the search result.' => 'Hakutuloksen lataamisen aikana tapahtui odottamaton virhe.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Odottamaton virhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'On tapahtunut odottamaton palvelinvirhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
|
||||
'An unknown error occurred while uploading.' => 'Latauksen aikana tapahtui tuntematon virhe.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Latauksen aikana tapahtui tuntematon virhe. Vihje: tarkista upload_max_filesize ja post_max_size php-asetukset.',
|
||||
'Back' => 'Takaisin',
|
||||
'Back to dashboard' => 'Takaisin etusivulle',
|
||||
'Cancel' => 'Peruuta',
|
||||
'Choose language:' => 'Valitse kieli:',
|
||||
'Close' => 'Sulje',
|
||||
'Collapse' => 'Sulje',
|
||||
'Confirm' => 'Vahvista',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sisällön Addon-lähdekoodin on oltava HActiveRecordContent- tai HActiveRecordContentAddon!',
|
||||
'Copy to clipboard' => 'Kopio leikepöydälle',
|
||||
'Could not find content of addon!' => 'Laajennuksen sisältöä ei löytynyt!',
|
||||
'Could not find requested page.' => 'Pyydettyä sivua ei löytynyt.',
|
||||
'Default' => 'Oletus',
|
||||
'Delete' => 'Poista',
|
||||
'Deny' => 'Hylkää',
|
||||
'Do you really want to perform this action?' => 'Haluatko todella suorittaa tämän toiminnon?',
|
||||
'Edit' => 'Muokkaa',
|
||||
'Error' => 'Virhe',
|
||||
'Error while running your last action (Invalid request method).' => 'Virhe viimeistä toimintoa käytettäessä (virheellinen pyyntötapa).',
|
||||
'Error:' => 'Virhe:',
|
||||
'Expand' => 'Laajenna',
|
||||
'Export' => 'Vie',
|
||||
'Info:' => 'Info:',
|
||||
'Invalid request method!' => 'Virheellinen pyyntötapa!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Näyttää siltä, että sinun ei pitäisi olla täällä.',
|
||||
'Language' => 'Kieli',
|
||||
'Loading...' => 'Ladataan:',
|
||||
'Login' => 'Kirjaudu sisään',
|
||||
'Logo of {appName}' => '{appName} :n logo',
|
||||
'Logout' => 'Kirjaudu ulos',
|
||||
'Menu' => 'Valikko',
|
||||
'Module is not enabled on this content container!' => 'Laajennusta ei ole otettu käyttöön tällä!',
|
||||
'My profile' => 'Profiili',
|
||||
'My profile image' => 'Profiili kuva',
|
||||
'New profile image' => 'Uusi profiili kuva',
|
||||
'Next' => 'Seuraava',
|
||||
'No error information given.' => 'Virheilmoituksia ei ole.',
|
||||
'Oooops...' => 'Upsista...',
|
||||
'Open' => 'Avaa',
|
||||
'Please type at least 3 characters' => 'Kirjoita vähintään 3 kirjainta',
|
||||
'Please type at least {count} characters' => 'Kirjoita vähintään {count} kirjainta',
|
||||
'Profile dropdown' => 'Profiilin pudotus',
|
||||
'Profile image of {displayName}' => '{displayName} :n profiilikuva',
|
||||
'Profile picture of {displayName}' => '{displayName} :n profiilikuva',
|
||||
'Save' => 'Tallenna',
|
||||
'Saved' => 'Tallennettu',
|
||||
'Search' => 'Hae',
|
||||
'Select Me' => 'Valitse Minut',
|
||||
'Show less' => 'Näytä vähemmän',
|
||||
'Show more' => 'Näytä lisää',
|
||||
'Some files could not be uploaded:' => 'Joitakin tiedostoja ei voitu ladata:',
|
||||
'Text could not be copied to clipboard' => 'Tekstiä ei voitu kopioida leikepöydälle',
|
||||
'Text has been copied to clipboard' => 'Teksti on kopioitu leikepöydälle',
|
||||
'The date has to be in the past.' => 'Päivän on oltava tätä päivää myöhemmin.',
|
||||
'The file has been deleted.' => 'Tiedosto on poistettu.',
|
||||
'The requested resource could not be found.' => 'Pyydettyä resurssia ei löytynyt.',
|
||||
'The space has been archived.' => 'Sivu on arkistoitu.',
|
||||
'The space has been unarchived.' => 'Sivu on poistettu arkistosta.',
|
||||
'Time Zone' => 'Aikavyöhyke',
|
||||
'Toggle comment menu' => 'Vaihda kommenttivalikko',
|
||||
'Toggle panel menu' => 'Vaihda paneelin valikko',
|
||||
'Toggle post menu' => 'Vaihda julkaisu valikko',
|
||||
'Toggle stream entry menu' => 'Vaihda aikajana valikko',
|
||||
'Unsubscribe' => 'Peruuta tilaus',
|
||||
'Upload' => 'Lataa',
|
||||
'Upload file' => 'Lataa tiedosto',
|
||||
'You are not allowed to run this action.' => 'Et voi käyttää tätä toimintoa.',
|
||||
);
|
||||
/**
|
||||
* 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 [
|
||||
'Powered by {name}' => '',
|
||||
'<strong>Confirm</strong> Action' => '<strong>Vahvista</strong> Toiminto',
|
||||
'<strong>Latest</strong> updates' => '<strong>Viimeismmät</strong> päivitykset',
|
||||
'<strong>Mail</strong> summary' => '<strong>Ilmoitukset</strong>',
|
||||
'Account settings' => 'Asetukset',
|
||||
'Add:' => 'Lisää:',
|
||||
'Administration' => 'Hallinta',
|
||||
'Allow' => 'Salli',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Viimeisen toiminnon käsittelyssä tapahtui virhe. (Käsiteltävää ei löydy).',
|
||||
'An unexpected error occurred while loading the search result.' => 'Hakutuloksen lataamisen aikana tapahtui odottamaton virhe.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Odottamaton virhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'On tapahtunut odottamaton palvelinvirhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
|
||||
'An unknown error occurred while uploading.' => 'Latauksen aikana tapahtui tuntematon virhe.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Latauksen aikana tapahtui tuntematon virhe. Vihje: tarkista upload_max_filesize ja post_max_size php-asetukset.',
|
||||
'Back' => 'Takaisin',
|
||||
'Back to dashboard' => 'Takaisin etusivulle',
|
||||
'Cancel' => 'Peruuta',
|
||||
'Choose language:' => 'Valitse kieli:',
|
||||
'Close' => 'Sulje',
|
||||
'Collapse' => 'Sulje',
|
||||
'Confirm' => 'Vahvista',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sisällön Addon-lähdekoodin on oltava HActiveRecordContent- tai HActiveRecordContentAddon!',
|
||||
'Copy to clipboard' => 'Kopio leikepöydälle',
|
||||
'Could not find content of addon!' => 'Laajennuksen sisältöä ei löytynyt!',
|
||||
'Could not find requested page.' => 'Pyydettyä sivua ei löytynyt.',
|
||||
'Default' => 'Oletus',
|
||||
'Delete' => 'Poista',
|
||||
'Deny' => 'Hylkää',
|
||||
'Do you really want to perform this action?' => 'Haluatko todella suorittaa tämän toiminnon?',
|
||||
'Edit' => 'Muokkaa',
|
||||
'Error' => 'Virhe',
|
||||
'Error while running your last action (Invalid request method).' => 'Virhe viimeistä toimintoa käytettäessä (virheellinen pyyntötapa).',
|
||||
'Error:' => 'Virhe:',
|
||||
'Expand' => 'Laajenna',
|
||||
'Export' => 'Vie',
|
||||
'Info:' => 'Info:',
|
||||
'Invalid request method!' => 'Virheellinen pyyntötapa!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Näyttää siltä, että sinun ei pitäisi olla täällä.',
|
||||
'Language' => 'Kieli',
|
||||
'Loading...' => 'Ladataan:',
|
||||
'Login' => 'Kirjaudu sisään',
|
||||
'Logo of {appName}' => '{appName} :n logo',
|
||||
'Logout' => 'Kirjaudu ulos',
|
||||
'Menu' => 'Valikko',
|
||||
'Module is not enabled on this content container!' => 'Laajennusta ei ole otettu käyttöön tällä!',
|
||||
'My profile' => 'Profiili',
|
||||
'My profile image' => 'Profiili kuva',
|
||||
'New profile image' => 'Uusi profiili kuva',
|
||||
'Next' => 'Seuraava',
|
||||
'No error information given.' => 'Virheilmoituksia ei ole.',
|
||||
'Oooops...' => 'Upsista...',
|
||||
'Open' => 'Avaa',
|
||||
'Please type at least 3 characters' => 'Kirjoita vähintään 3 kirjainta',
|
||||
'Please type at least {count} characters' => 'Kirjoita vähintään {count} kirjainta',
|
||||
'Profile dropdown' => 'Profiilin pudotus',
|
||||
'Profile image of {displayName}' => '{displayName} :n profiilikuva',
|
||||
'Profile picture of {displayName}' => '{displayName} :n profiilikuva',
|
||||
'Save' => 'Tallenna',
|
||||
'Saved' => 'Tallennettu',
|
||||
'Search' => 'Hae',
|
||||
'Select Me' => 'Valitse Minut',
|
||||
'Show less' => 'Näytä vähemmän',
|
||||
'Show more' => 'Näytä lisää',
|
||||
'Some files could not be uploaded:' => 'Joitakin tiedostoja ei voitu ladata:',
|
||||
'Text could not be copied to clipboard' => 'Tekstiä ei voitu kopioida leikepöydälle',
|
||||
'Text has been copied to clipboard' => 'Teksti on kopioitu leikepöydälle',
|
||||
'The date has to be in the past.' => 'Päivän on oltava tätä päivää myöhemmin.',
|
||||
'The file has been deleted.' => 'Tiedosto on poistettu.',
|
||||
'The requested resource could not be found.' => 'Pyydettyä resurssia ei löytynyt.',
|
||||
'The space has been archived.' => 'Sivu on arkistoitu.',
|
||||
'The space has been unarchived.' => 'Sivu on poistettu arkistosta.',
|
||||
'Time Zone' => 'Aikavyöhyke',
|
||||
'Toggle comment menu' => 'Vaihda kommenttivalikko',
|
||||
'Toggle panel menu' => 'Vaihda paneelin valikko',
|
||||
'Toggle post menu' => 'Vaihda julkaisu valikko',
|
||||
'Toggle stream entry menu' => 'Vaihda aikajana valikko',
|
||||
'Unsubscribe' => 'Peruuta tilaus',
|
||||
'Upload' => 'Lataa',
|
||||
'Upload file' => 'Lataa tiedosto',
|
||||
'You are not allowed to run this action.' => 'Et voi käyttää tätä toimintoa.',
|
||||
];
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,99 +1,83 @@
|
||||
<?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>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',
|
||||
'Add:' => 'Ajouter :',
|
||||
'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 find content of addon!' => 'Le contenu du add-on n\'a pu être trouvé.',
|
||||
'Could not find requested page.' => 'Page non trouvée.',
|
||||
'Default' => 'Défaut',
|
||||
'Delete' => 'Supprimer',
|
||||
'Deny' => 'Interdire',
|
||||
'Do you really want to perform this action?' => 'Voulez-vous vraiment effectuer cette action ?',
|
||||
'Edit' => 'Modifier',
|
||||
'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',
|
||||
'Please type at least {count} characters' => 'Veuillez saisir au moins {count} caracthè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' => 'Afficher moins',
|
||||
'Show more' => 'Afficher plus',
|
||||
'Some files could not be uploaded:' => 'Certains fichiers n\'ont pas pu être téléchargés :',
|
||||
'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' => 'Gérer les résumés / Se désabonner',
|
||||
'Upload' => 'Ajouter',
|
||||
'Upload file' => 'Envoyer un fichier',
|
||||
'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',
|
||||
'Add:' => 'Ajouter :',
|
||||
'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 find content of addon!' => 'Le contenu du add-on n\'a pu être trouvé.',
|
||||
'Could not find requested page.' => 'Page non trouvée.',
|
||||
'Default' => 'Défaut',
|
||||
'Delete' => 'Supprimer',
|
||||
'Deny' => 'Interdire',
|
||||
'Do you really want to perform this action?' => 'Voulez-vous vraiment effectuer cette action ?',
|
||||
'Edit' => 'Modifier',
|
||||
'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',
|
||||
'Please type at least {count} characters' => 'Veuillez saisir au moins {count} caracthères',
|
||||
'Powered by {name}' => 'Propulsé par {name}',
|
||||
'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' => 'Afficher moins',
|
||||
'Show more' => 'Afficher plus',
|
||||
'Some files could not be uploaded:' => 'Certains fichiers n\'ont pas pu être téléchargés :',
|
||||
'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' => 'Gérer les résumés / Se désabonner',
|
||||
'Upload' => 'Ajouter',
|
||||
'Upload file' => 'Envoyer un fichier',
|
||||
'You are not allowed to run this action.' => 'Vous n\'êtes pas autorisé à exécuter cette action.',
|
||||
);
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,99 +1,83 @@
|
||||
<?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 [
|
||||
'Add:' => '',
|
||||
'Could not find requested page.' => '',
|
||||
'Delete' => '',
|
||||
'Edit' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'<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 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:',
|
||||
'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',
|
||||
'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',
|
||||
'Add:' => 'Dodaj:',
|
||||
'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 find content of addon!' => 'Nije moguće pronaći sadržaj addona!',
|
||||
'Could not find requested page.' => 'Nike moguće pronaći traženu stranicu.',
|
||||
'Default' => 'Zadano',
|
||||
'Delete' => 'Izbriši',
|
||||
'Deny' => 'Odbiti',
|
||||
'Do you really want to perform this action?' => 'Želite li zaista uraditi ovu akciju?',
|
||||
'Edit' => 'Uredi',
|
||||
'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',
|
||||
'Please type at least {count} characters' => 'Molimo unesite najmanje {count} znakova',
|
||||
'Powered by {name}' => 'Pokreće {name}',
|
||||
'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:',
|
||||
'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',
|
||||
'You are not allowed to run this action.' => 'Nije vam dozvoljena ova akcija.',
|
||||
);
|
||||
|
@ -44,6 +44,7 @@ return [
|
||||
'No error information given.' => '',
|
||||
'Open' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -1,83 +1,101 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => 'Művelet<strong>megerősítése</strong>',
|
||||
'<strong>Latest</strong> updates' => '<strong>Legújabb</strong> frissítések',
|
||||
'<strong>Mail</strong> summary' => '<strong>Üzenetek</strong> összesítő',
|
||||
'Account settings' => 'Fiók beállítások',
|
||||
'Add:' => 'Hozzáadás:',
|
||||
'Administration' => 'Adminisztráció',
|
||||
'Allow' => 'Engedélyezés',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Egy hiba merült fel a legutóbbi művelet elvégzésekor. (Handler nem található)',
|
||||
'An unexpected error occurred while loading the search result.' => 'Váratlan hiba merült fel a keresés eredményeinek betöltése közben.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan hiba merült fel. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan szerverhiba történt. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
|
||||
'An unknown error occurred while uploading.' => 'Ismeretlen hiba történt feltöltés közben.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Hiba történt a feltöltés közben, lehetséges, hogy túl nagy a fájlméret! Tipp: ellenőrizd a upload_max_filesize és a post_max_size php beállításokat.',
|
||||
'Back' => 'Vissza',
|
||||
'Back to dashboard' => 'Vissza az áttekintéshez',
|
||||
'Cancel' => 'Mégsem',
|
||||
'Choose language:' => 'Válassz nyelvet:',
|
||||
'Close' => 'Bezár',
|
||||
'Collapse' => 'Összecsukás',
|
||||
'Confirm' => 'Rendben',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'A tartalom bővítmény forrásának HActiveRecordContent vagy HActiveRecordContentAddon példánynak kell lennie!',
|
||||
'Copy to clipboard' => 'Másolás vágólapra',
|
||||
'Could not find content of addon!' => 'Nem található a bővítmény tartalma!',
|
||||
'Could not find requested page.' => 'Nem található a kért oldal!',
|
||||
'Default' => 'Alapértelmezett',
|
||||
'Delete' => 'Törlés',
|
||||
'Deny' => 'Tiltás',
|
||||
'Do you really want to perform this action?' => 'Biztos, hogy végrehajtod a műveletet?',
|
||||
'Edit' => 'Szerkesztés',
|
||||
'Error' => 'Hiba',
|
||||
'Error while running your last action (Invalid request method).' => 'Hiba történt a művelet közben.
|
||||
/**
|
||||
* 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 [
|
||||
'Powered by {name}' => '',
|
||||
'<strong>Confirm</strong> Action' => 'Művelet<strong>megerősítése</strong>',
|
||||
'<strong>Latest</strong> updates' => '<strong>Legújabb</strong> frissítések',
|
||||
'<strong>Mail</strong> summary' => '<strong>Üzenetek</strong> összesítő',
|
||||
'Account settings' => 'Fiók beállítások',
|
||||
'Add:' => 'Hozzáadás:',
|
||||
'Administration' => 'Adminisztráció',
|
||||
'Allow' => 'Engedélyezés',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Egy hiba merült fel a legutóbbi művelet elvégzésekor. (Handler nem található)',
|
||||
'An unexpected error occurred while loading the search result.' => 'Váratlan hiba merült fel a keresés eredményeinek betöltése közben.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan hiba merült fel. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan szerverhiba történt. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
|
||||
'An unknown error occurred while uploading.' => 'Ismeretlen hiba történt feltöltés közben.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Hiba történt a feltöltés közben, lehetséges, hogy túl nagy a fájlméret! Tipp: ellenőrizd a upload_max_filesize és a post_max_size php beállításokat.',
|
||||
'Back' => 'Vissza',
|
||||
'Back to dashboard' => 'Vissza az áttekintéshez',
|
||||
'Cancel' => 'Mégsem',
|
||||
'Choose language:' => 'Válassz nyelvet:',
|
||||
'Close' => 'Bezár',
|
||||
'Collapse' => 'Összecsukás',
|
||||
'Confirm' => 'Rendben',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'A tartalom bővítmény forrásának HActiveRecordContent vagy HActiveRecordContentAddon példánynak kell lennie!',
|
||||
'Copy to clipboard' => 'Másolás vágólapra',
|
||||
'Could not find content of addon!' => 'Nem található a bővítmény tartalma!',
|
||||
'Could not find requested page.' => 'Nem található a kért oldal!',
|
||||
'Default' => 'Alapértelmezett',
|
||||
'Delete' => 'Törlés',
|
||||
'Deny' => 'Tiltás',
|
||||
'Do you really want to perform this action?' => 'Biztos, hogy végrehajtod a műveletet?',
|
||||
'Edit' => 'Szerkesztés',
|
||||
'Error' => 'Hiba',
|
||||
'Error while running your last action (Invalid request method).' => 'Hiba történt a művelet közben.
|
||||
(Érvénytelen kérelem)',
|
||||
'Error:' => 'Hiba:',
|
||||
'Expand' => 'Kinyit',
|
||||
'Export' => 'Exportálás',
|
||||
'Info:' => 'Információ:',
|
||||
'Invalid request method!' => 'Érvénytelen kérelem!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Hoppá... Valami hiba történt.',
|
||||
'Language' => 'Nyelv:',
|
||||
'Loading...' => 'Betöltés...',
|
||||
'Login' => 'Bejelentkezés',
|
||||
'Logo of {appName}' => '{appName} logója',
|
||||
'Logout' => 'Kijelentkezés',
|
||||
'Menu' => 'Menü',
|
||||
'Module is not enabled on this content container!' => 'A modul nincs engedélyezve a tartalom tárolójában.',
|
||||
'My profile' => 'Profilom',
|
||||
'My profile image' => 'Profilképem',
|
||||
'New profile image' => 'Új profilkép',
|
||||
'Next' => 'Következő',
|
||||
'No error information given.' => 'Nincs hibainformáció.',
|
||||
'Oooops...' => 'Hoppá...',
|
||||
'Open' => 'Megnyitás',
|
||||
'Please type at least 3 characters' => 'Gépelj be legalább 3 karaktert',
|
||||
'Please type at least {count} characters' => 'Legalább adj meg {count} karaktert',
|
||||
'Profile dropdown' => 'Profil legördülő menü',
|
||||
'Profile image of {displayName}' => '{displayName} profilképe',
|
||||
'Profile picture of {displayName}' => '{displayName} profilképe',
|
||||
'Save' => 'Mentés',
|
||||
'Saved' => 'Mentve',
|
||||
'Search' => 'Keresés',
|
||||
'Select Me' => 'Válassz ki',
|
||||
'Show less' => 'Kevesebb mutatása',
|
||||
'Show more' => 'Több mutatása',
|
||||
'Some files could not be uploaded:' => 'Néhány fájlt nem sikerült feltölteni:',
|
||||
'Text could not be copied to clipboard' => 'A szöveget nem sikerült a vágólapra másolni',
|
||||
'Text has been copied to clipboard' => 'A szöveg a vágolapra másolva',
|
||||
'The date has to be in the past.' => 'A dátumnak a múltban kell lennie.',
|
||||
'The file has been deleted.' => 'A fájlt törölve lett.',
|
||||
'The requested resource could not be found.' => 'A kért tartalom nem található.',
|
||||
'The space has been archived.' => 'A közösség archiválásra került.',
|
||||
'The space has been unarchived.' => 'Közösség archiválása megszüntetve.',
|
||||
'Time Zone' => 'Időzóna',
|
||||
'Toggle comment menu' => 'Hozzászólások menü ki-bekapcsolása',
|
||||
'Toggle panel menu' => 'Panel menü ki-bekapcsolása',
|
||||
'Toggle post menu' => 'Bejegyzések menü ki-bekapcsolása',
|
||||
'Toggle stream entry menu' => 'A folyam menü ki-bekapcsolása',
|
||||
'Unsubscribe' => 'Leiratkozás',
|
||||
'Upload' => 'Feltöltés',
|
||||
'Upload file' => 'Fájl feltöltése',
|
||||
'You are not allowed to run this action.' => 'Nincs engedélyed, hogy ezt a műveletet végrehajsd.',
|
||||
);
|
||||
'Error:' => 'Hiba:',
|
||||
'Expand' => 'Kinyit',
|
||||
'Export' => 'Exportálás',
|
||||
'Info:' => 'Információ:',
|
||||
'Invalid request method!' => 'Érvénytelen kérelem!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Hoppá... Valami hiba történt.',
|
||||
'Language' => 'Nyelv:',
|
||||
'Loading...' => 'Betöltés...',
|
||||
'Login' => 'Bejelentkezés',
|
||||
'Logo of {appName}' => '{appName} logója',
|
||||
'Logout' => 'Kijelentkezés',
|
||||
'Menu' => 'Menü',
|
||||
'Module is not enabled on this content container!' => 'A modul nincs engedélyezve a tartalom tárolójában.',
|
||||
'My profile' => 'Profilom',
|
||||
'My profile image' => 'Profilképem',
|
||||
'New profile image' => 'Új profilkép',
|
||||
'Next' => 'Következő',
|
||||
'No error information given.' => 'Nincs hibainformáció.',
|
||||
'Oooops...' => 'Hoppá...',
|
||||
'Open' => 'Megnyitás',
|
||||
'Please type at least 3 characters' => 'Gépelj be legalább 3 karaktert',
|
||||
'Please type at least {count} characters' => 'Legalább adj meg {count} karaktert',
|
||||
'Profile dropdown' => 'Profil legördülő menü',
|
||||
'Profile image of {displayName}' => '{displayName} profilképe',
|
||||
'Profile picture of {displayName}' => '{displayName} profilképe',
|
||||
'Save' => 'Mentés',
|
||||
'Saved' => 'Mentve',
|
||||
'Search' => 'Keresés',
|
||||
'Select Me' => 'Válassz ki',
|
||||
'Show less' => 'Kevesebb mutatása',
|
||||
'Show more' => 'Több mutatása',
|
||||
'Some files could not be uploaded:' => 'Néhány fájlt nem sikerült feltölteni:',
|
||||
'Text could not be copied to clipboard' => 'A szöveget nem sikerült a vágólapra másolni',
|
||||
'Text has been copied to clipboard' => 'A szöveg a vágolapra másolva',
|
||||
'The date has to be in the past.' => 'A dátumnak a múltban kell lennie.',
|
||||
'The file has been deleted.' => 'A fájlt törölve lett.',
|
||||
'The requested resource could not be found.' => 'A kért tartalom nem található.',
|
||||
'The space has been archived.' => 'A közösség archiválásra került.',
|
||||
'The space has been unarchived.' => 'Közösség archiválása megszüntetve.',
|
||||
'Time Zone' => 'Időzóna',
|
||||
'Toggle comment menu' => 'Hozzászólások menü ki-bekapcsolása',
|
||||
'Toggle panel menu' => 'Panel menü ki-bekapcsolása',
|
||||
'Toggle post menu' => 'Bejegyzések menü ki-bekapcsolása',
|
||||
'Toggle stream entry menu' => 'A folyam menü ki-bekapcsolása',
|
||||
'Unsubscribe' => 'Leiratkozás',
|
||||
'Upload' => 'Feltöltés',
|
||||
'Upload file' => 'Fájl feltöltése',
|
||||
'You are not allowed to run this action.' => 'Nincs engedélyed, hogy ezt a műveletet végrehajsd.',
|
||||
];
|
||||
|
@ -48,6 +48,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
File diff suppressed because one or more lines are too long
@ -53,6 +53,7 @@ return array (
|
||||
'Open' => 'Apri',
|
||||
'Please type at least 3 characters' => 'Prova a digitare almeno 3 caratteri',
|
||||
'Please type at least {count} characters' => 'Digita almeno {count} caratteri',
|
||||
'Powered by {name}' => 'Fornito da {name}',
|
||||
'Profile dropdown' => 'Menu del profilo',
|
||||
'Profile image of {displayName}' => 'Immagine del profilo di {displayName}',
|
||||
'Profile picture of {displayName}' => 'Immagine del profilo di {displayName}',
|
||||
@ -68,7 +69,7 @@ return array (
|
||||
'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 spazio è stato archiviato. ',
|
||||
'The space has been archived.' => 'Lo spazio è stato archiviato.',
|
||||
'The space has been unarchived.' => 'Lo spazio è stato ripristinato.',
|
||||
'Time Zone' => 'Fuso orario',
|
||||
'Toggle comment menu' => 'Attiva menu Commento',
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,8 +1,8 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => '<strong>確認</ strong> アクション',
|
||||
'<strong>Confirm</strong> Action' => '<strong>確認 strong> アクション</strong>',
|
||||
'<strong>Latest</strong> updates' => '<strong>最新</strong> 更新',
|
||||
'<strong>Mail</strong> summary' => '<strong>メール</ strong> の概要',
|
||||
'<strong>Mail</strong> summary' => '<strong>メール strong> の概要</strong>',
|
||||
'Account settings' => 'アカウント設定',
|
||||
'Add:' => '追加:',
|
||||
'Administration' => '管理',
|
||||
@ -53,6 +53,7 @@ return array (
|
||||
'Open' => '開く',
|
||||
'Please type at least 3 characters' => '3 文字以上を入力してください',
|
||||
'Please type at least {count} characters' => '少なくとも {count} 文字が必要です',
|
||||
'Powered by {name}' => '{name}によって供給',
|
||||
'Profile dropdown' => 'ドロップダウンプロフィール',
|
||||
'Profile image of {displayName}' => 'のプロフィール画像{displayName}',
|
||||
'Profile picture of {displayName}' => 'のプロフィール写真{displayName}',
|
||||
|
@ -49,6 +49,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -48,6 +48,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -24,6 +24,7 @@ return [
|
||||
'Export' => '',
|
||||
'Invalid request method!' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Select Me' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,82 +1,100 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => '<strong>Bekreft</strong> handling',
|
||||
'<strong>Latest</strong> updates' => '<strong>Siste</strong> oppdateringer',
|
||||
'<strong>Mail</strong> summary' => '<strong>E-post</strong> sammendrag',
|
||||
'Account settings' => 'Innstillinger',
|
||||
'Add:' => 'Legg til:',
|
||||
'Administration' => 'Administrasjon',
|
||||
'Allow' => 'Tillat',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'En feil oppstod (Handler not found).',
|
||||
'An unexpected error occurred while loading the search result.' => 'En uventet feil oppstod ved lasting av søkeresultat.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'En uventet feil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'En serverfeil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
|
||||
'An unknown error occurred while uploading.' => 'En ukjent feil oppstod under opplasting.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'En ukjent feil oppstod under opplasting. Hing: sjekk upload_max_filesize og post_max_size i PHP-innstillingene.',
|
||||
'Back' => 'Tilbake',
|
||||
'Back to dashboard' => 'Tilbake til oversikten',
|
||||
'Cancel' => 'Avbryt',
|
||||
'Choose language:' => 'Velg Språk',
|
||||
'Close' => 'Lukk',
|
||||
'Collapse' => 'Trekk sammen',
|
||||
'Confirm' => 'Bekreft',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Innhold Addon kilden må være forekomst av HActiveRecordContent eller HActiveRecordContentAddon!',
|
||||
'Copy to clipboard' => 'Kopier til utklippstavle',
|
||||
'Could not find content of addon!' => 'Kunne ikke finne innhold i tillegg!',
|
||||
'Could not find requested page.' => 'Fant ikke forespurt side.',
|
||||
'Default' => 'Standard',
|
||||
'Delete' => 'Slett',
|
||||
'Deny' => 'Avvis',
|
||||
'Do you really want to perform this action?' => 'Vil du virkelig utføre denne handlingen?',
|
||||
'Edit' => 'Rediger',
|
||||
'Error' => 'Feil',
|
||||
'Error while running your last action (Invalid request method).' => 'Feil under forrige handling (Invalid request method).',
|
||||
'Error:' => 'Feil:',
|
||||
'Expand' => 'Utvid',
|
||||
'Export' => 'Eksporter',
|
||||
'Info:' => 'Info:',
|
||||
'Invalid request method!' => 'Ugyldig forespørselsmetode',
|
||||
'It looks like you may have taken the wrong turn.' => 'Her ble det krøll.',
|
||||
'Language' => 'Språk',
|
||||
'Loading...' => 'Laster...',
|
||||
'Login' => 'Logg inn',
|
||||
'Logo of {appName}' => 'Logo for {appName}',
|
||||
'Logout' => 'Logg ut',
|
||||
'Menu' => 'Meny',
|
||||
'Module is not enabled on this content container!' => 'Modulen er ikke aktivert for dette innholdet',
|
||||
'My profile' => 'Min profil',
|
||||
'My profile image' => 'Mitt profil bilde',
|
||||
'New profile image' => 'Nytt profilbilde',
|
||||
'Next' => 'Neste',
|
||||
'No error information given.' => 'Ingen feilinformasjon angitt.',
|
||||
'Oooops...' => 'Oooops...',
|
||||
'Open' => 'Åpne',
|
||||
'Please type at least 3 characters' => 'Tast inn minimum 3 tegn',
|
||||
'Please type at least {count} characters' => 'Venligst tast inn minst {count} karakterer',
|
||||
'Profile dropdown' => 'Profil nedtreksmeny',
|
||||
'Profile image of {displayName}' => 'Profil bilde for {displayName}',
|
||||
'Profile picture of {displayName}' => 'Profil bilde for {displayName}',
|
||||
'Save' => 'Lagre',
|
||||
'Saved' => 'Lagret',
|
||||
'Search' => 'Søk',
|
||||
'Select Me' => 'Velg meg',
|
||||
'Show less' => 'Vis mindre',
|
||||
'Show more' => 'Vis mer',
|
||||
'Some files could not be uploaded:' => 'Noen filer kunne ikke lastes opp:',
|
||||
'Text could not be copied to clipboard' => 'Teksten kunne ikke kopieres til utklipstavlen',
|
||||
'Text has been copied to clipboard' => 'Teksten har blitt kopiert til utklipstavlen',
|
||||
'The date has to be in the past.' => 'Datoen må være i fortid.',
|
||||
'The file has been deleted.' => 'Filen er slettet.',
|
||||
'The requested resource could not be found.' => 'Forespurt ressurs ble ikke fnnet.',
|
||||
'The space has been archived.' => 'Gruppen er blitt arkivert.',
|
||||
'The space has been unarchived.' => 'Gruppen er hentet tilbake fra arkiv.',
|
||||
'Time Zone' => 'Tidssone',
|
||||
'Toggle comment menu' => 'Bytt kommentarmeny',
|
||||
'Toggle panel menu' => 'Bytt panelmeny',
|
||||
'Toggle post menu' => 'Bytt postmeny',
|
||||
'Toggle stream entry menu' => 'Veksle strømmenyen',
|
||||
'Unsubscribe' => 'Avslutte abonnementet',
|
||||
'Upload' => 'Last opp',
|
||||
'Upload file' => 'Last opp fil',
|
||||
'You are not allowed to run this action.' => 'Du har ikke tillatelse til å utføre denne handlingen.',
|
||||
);
|
||||
/**
|
||||
* 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 [
|
||||
'Powered by {name}' => '',
|
||||
'<strong>Confirm</strong> Action' => '<strong>Bekreft</strong> handling',
|
||||
'<strong>Latest</strong> updates' => '<strong>Siste</strong> oppdateringer',
|
||||
'<strong>Mail</strong> summary' => '<strong>E-post</strong> sammendrag',
|
||||
'Account settings' => 'Innstillinger',
|
||||
'Add:' => 'Legg til:',
|
||||
'Administration' => 'Administrasjon',
|
||||
'Allow' => 'Tillat',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'En feil oppstod (Handler not found).',
|
||||
'An unexpected error occurred while loading the search result.' => 'En uventet feil oppstod ved lasting av søkeresultat.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'En uventet feil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'En serverfeil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
|
||||
'An unknown error occurred while uploading.' => 'En ukjent feil oppstod under opplasting.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'En ukjent feil oppstod under opplasting. Hing: sjekk upload_max_filesize og post_max_size i PHP-innstillingene.',
|
||||
'Back' => 'Tilbake',
|
||||
'Back to dashboard' => 'Tilbake til oversikten',
|
||||
'Cancel' => 'Avbryt',
|
||||
'Choose language:' => 'Velg Språk',
|
||||
'Close' => 'Lukk',
|
||||
'Collapse' => 'Trekk sammen',
|
||||
'Confirm' => 'Bekreft',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Innhold Addon kilden må være forekomst av HActiveRecordContent eller HActiveRecordContentAddon!',
|
||||
'Copy to clipboard' => 'Kopier til utklippstavle',
|
||||
'Could not find content of addon!' => 'Kunne ikke finne innhold i tillegg!',
|
||||
'Could not find requested page.' => 'Fant ikke forespurt side.',
|
||||
'Default' => 'Standard',
|
||||
'Delete' => 'Slett',
|
||||
'Deny' => 'Avvis',
|
||||
'Do you really want to perform this action?' => 'Vil du virkelig utføre denne handlingen?',
|
||||
'Edit' => 'Rediger',
|
||||
'Error' => 'Feil',
|
||||
'Error while running your last action (Invalid request method).' => 'Feil under forrige handling (Invalid request method).',
|
||||
'Error:' => 'Feil:',
|
||||
'Expand' => 'Utvid',
|
||||
'Export' => 'Eksporter',
|
||||
'Info:' => 'Info:',
|
||||
'Invalid request method!' => 'Ugyldig forespørselsmetode',
|
||||
'It looks like you may have taken the wrong turn.' => 'Her ble det krøll.',
|
||||
'Language' => 'Språk',
|
||||
'Loading...' => 'Laster...',
|
||||
'Login' => 'Logg inn',
|
||||
'Logo of {appName}' => 'Logo for {appName}',
|
||||
'Logout' => 'Logg ut',
|
||||
'Menu' => 'Meny',
|
||||
'Module is not enabled on this content container!' => 'Modulen er ikke aktivert for dette innholdet',
|
||||
'My profile' => 'Min profil',
|
||||
'My profile image' => 'Mitt profil bilde',
|
||||
'New profile image' => 'Nytt profilbilde',
|
||||
'Next' => 'Neste',
|
||||
'No error information given.' => 'Ingen feilinformasjon angitt.',
|
||||
'Oooops...' => 'Oooops...',
|
||||
'Open' => 'Åpne',
|
||||
'Please type at least 3 characters' => 'Tast inn minimum 3 tegn',
|
||||
'Please type at least {count} characters' => 'Venligst tast inn minst {count} karakterer',
|
||||
'Profile dropdown' => 'Profil nedtreksmeny',
|
||||
'Profile image of {displayName}' => 'Profil bilde for {displayName}',
|
||||
'Profile picture of {displayName}' => 'Profil bilde for {displayName}',
|
||||
'Save' => 'Lagre',
|
||||
'Saved' => 'Lagret',
|
||||
'Search' => 'Søk',
|
||||
'Select Me' => 'Velg meg',
|
||||
'Show less' => 'Vis mindre',
|
||||
'Show more' => 'Vis mer',
|
||||
'Some files could not be uploaded:' => 'Noen filer kunne ikke lastes opp:',
|
||||
'Text could not be copied to clipboard' => 'Teksten kunne ikke kopieres til utklipstavlen',
|
||||
'Text has been copied to clipboard' => 'Teksten har blitt kopiert til utklipstavlen',
|
||||
'The date has to be in the past.' => 'Datoen må være i fortid.',
|
||||
'The file has been deleted.' => 'Filen er slettet.',
|
||||
'The requested resource could not be found.' => 'Forespurt ressurs ble ikke fnnet.',
|
||||
'The space has been archived.' => 'Gruppen er blitt arkivert.',
|
||||
'The space has been unarchived.' => 'Gruppen er hentet tilbake fra arkiv.',
|
||||
'Time Zone' => 'Tidssone',
|
||||
'Toggle comment menu' => 'Bytt kommentarmeny',
|
||||
'Toggle panel menu' => 'Bytt panelmeny',
|
||||
'Toggle post menu' => 'Bytt postmeny',
|
||||
'Toggle stream entry menu' => 'Veksle strømmenyen',
|
||||
'Unsubscribe' => 'Avslutte abonnementet',
|
||||
'Upload' => 'Last opp',
|
||||
'Upload file' => 'Last opp fil',
|
||||
'You are not allowed to run this action.' => 'Du har ikke tillatelse til å utføre denne handlingen.',
|
||||
];
|
||||
|
File diff suppressed because one or more lines are too long
@ -53,6 +53,7 @@ return array (
|
||||
'Open' => 'Open',
|
||||
'Please type at least 3 characters' => 'Typ tenminste 3 tekens',
|
||||
'Please type at least {count} characters' => 'Typ ten minste {count} tekens',
|
||||
'Powered by {name}' => 'Mogelijk gemaakt door {name}',
|
||||
'Profile dropdown' => 'Profiel keuzelijst',
|
||||
'Profile image of {displayName}' => 'Profielafbeelding van {displayName}',
|
||||
'Profile picture of {displayName}' => 'Profielafbeelding van {displayName}',
|
||||
|
@ -70,6 +70,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
File diff suppressed because one or more lines are too long
@ -35,7 +35,7 @@ return array (
|
||||
'Expand' => 'Rozwiń',
|
||||
'Export' => 'Eksportuj',
|
||||
'Info:' => 'Info:',
|
||||
'Invalid request method!' => '',
|
||||
'Invalid request method!' => 'Błędna metoda żądania!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Chyba zabłądziłeś.',
|
||||
'Language' => 'Język',
|
||||
'Loading...' => 'Ładowanie...',
|
||||
@ -53,13 +53,14 @@ return array (
|
||||
'Open' => 'Otwórz',
|
||||
'Please type at least 3 characters' => 'Wpisz przynajmniej 3 znaki',
|
||||
'Please type at least {count} characters' => 'Wpisz przynajmniej {count} litery',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
'Powered by {name}' => 'Od {name}',
|
||||
'Profile dropdown' => 'Rozwiń Profil',
|
||||
'Profile image of {displayName}' => 'Obraz profilowy {displayName}',
|
||||
'Profile picture of {displayName}' => 'Zdjęcie profilowe {displayName}',
|
||||
'Save' => 'Zapisz',
|
||||
'Saved' => 'Zapisano',
|
||||
'Search' => 'Szukaj',
|
||||
'Select Me' => '',
|
||||
'Select Me' => 'Wybierz mnie',
|
||||
'Show less' => 'Pokaż mniej',
|
||||
'Show more' => 'Pokaż więcej',
|
||||
'Some files could not be uploaded:' => 'Niektóre pliki nie mogą zostać przesłane:',
|
||||
@ -72,9 +73,9 @@ return array (
|
||||
'The space has been unarchived.' => 'Strefa ma zostać rozpakowana.',
|
||||
'Time Zone' => 'Strefa czasowa',
|
||||
'Toggle comment menu' => 'Przełącz menu komentarzy',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
'Toggle stream entry menu' => '',
|
||||
'Toggle panel menu' => 'Przełącz menu panela',
|
||||
'Toggle post menu' => 'Przełącz menu wpisów',
|
||||
'Toggle stream entry menu' => 'Przełącz menu wpisu źródła',
|
||||
'Unsubscribe' => 'Anuluj subskrybcję',
|
||||
'Upload' => 'Prześlij',
|
||||
'Upload file' => 'Prześlij plik',
|
||||
|
@ -53,6 +53,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -17,6 +17,7 @@
|
||||
* NOTE: this file must be saved in UTF-8 encoding.
|
||||
*/
|
||||
return [
|
||||
'Powered by {name}' => '',
|
||||
'<strong>Confirm</strong> Action' => '<strong>Confirmar</strong> Ação',
|
||||
'<strong>Latest</strong> updates' => '<strong>Últimas</strong> atualizações',
|
||||
'<strong>Mail</strong> summary' => 'Resume de <strong>E-mail</strong>',
|
||||
|
@ -1,82 +1,100 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => '',
|
||||
'<strong>Latest</strong> updates' => '<strong>Ultimele</strong> actualizări',
|
||||
'<strong>Mail</strong> summary' => '',
|
||||
'Account settings' => 'Setări de Cont',
|
||||
'Add:' => 'Adauga',
|
||||
'Administration' => 'Administrație',
|
||||
'Allow' => 'Permite',
|
||||
'An error occurred while handling your last action. (Handler not found).' => '',
|
||||
'An unexpected error occurred while loading the search result.' => '',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unknown error occurred while uploading.' => '',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
|
||||
'Back' => 'Înapoi',
|
||||
'Back to dashboard' => 'Înapoi la panoul de control',
|
||||
'Cancel' => 'Anulează',
|
||||
'Choose language:' => 'Alege limba:',
|
||||
'Close' => 'Închide',
|
||||
'Collapse' => 'Strânge',
|
||||
'Confirm' => '',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sursa Conținutului de Adaos trebuie să fie instanță a HActiveRecordContent sau a HActiveRecordContentAddon!',
|
||||
'Copy to clipboard' => '',
|
||||
'Could not find content of addon!' => 'Nu s-a putut găsi conținutul adaosului!',
|
||||
'Could not find requested page.' => '',
|
||||
'Default' => '',
|
||||
'Delete' => 'Sterge',
|
||||
'Deny' => '',
|
||||
'Do you really want to perform this action?' => '',
|
||||
'Edit' => '',
|
||||
'Error' => 'Eroare',
|
||||
'Error while running your last action (Invalid request method).' => '',
|
||||
'Error:' => '',
|
||||
'Expand' => 'Extinde',
|
||||
'Export' => '',
|
||||
'Info:' => '',
|
||||
'Invalid request method!' => '',
|
||||
'It looks like you may have taken the wrong turn.' => 'Se pare că ai luat-o pe calea greșită.',
|
||||
'Language' => 'Limbă',
|
||||
'Loading...' => '',
|
||||
'Login' => 'Autentificare',
|
||||
'Logo of {appName}' => '',
|
||||
'Logout' => 'Ieșire cont',
|
||||
'Menu' => 'Meniu',
|
||||
'Module is not enabled on this content container!' => 'Modulul nu este pe acest container de conținut activat!',
|
||||
'My profile' => 'Profilul meu',
|
||||
'My profile image' => 'Imagine profil',
|
||||
'New profile image' => 'Imagine nouă de profil',
|
||||
'Next' => 'Inainte',
|
||||
'No error information given.' => '',
|
||||
'Oooops...' => 'Oooops...',
|
||||
'Open' => 'Deschide',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
'Save' => 'Salvează',
|
||||
'Saved' => 'Salvat',
|
||||
'Search' => 'Căutare',
|
||||
'Select Me' => '',
|
||||
'Show less' => '',
|
||||
'Show more' => 'Arata mai mult',
|
||||
'Some files could not be uploaded:' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
'The date has to be in the past.' => '',
|
||||
'The file has been deleted.' => '',
|
||||
'The requested resource could not be found.' => '',
|
||||
'The space has been archived.' => '',
|
||||
'The space has been unarchived.' => '',
|
||||
'Time Zone' => '',
|
||||
'Toggle comment menu' => '',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
'Toggle stream entry menu' => '',
|
||||
'Unsubscribe' => '',
|
||||
'Upload' => 'Incarca',
|
||||
'Upload file' => 'Incarca fisiere',
|
||||
'You are not allowed to run this action.' => '',
|
||||
);
|
||||
/**
|
||||
* 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>Confirm</strong> Action' => '',
|
||||
'<strong>Mail</strong> summary' => '',
|
||||
'An error occurred while handling your last action. (Handler not found).' => '',
|
||||
'An unexpected error occurred while loading the search result.' => '',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unknown error occurred while uploading.' => '',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
|
||||
'Confirm' => '',
|
||||
'Copy to clipboard' => '',
|
||||
'Could not find requested page.' => '',
|
||||
'Default' => '',
|
||||
'Deny' => '',
|
||||
'Do you really want to perform this action?' => '',
|
||||
'Edit' => '',
|
||||
'Error while running your last action (Invalid request method).' => '',
|
||||
'Error:' => '',
|
||||
'Export' => '',
|
||||
'Info:' => '',
|
||||
'Invalid request method!' => '',
|
||||
'Loading...' => '',
|
||||
'Logo of {appName}' => '',
|
||||
'No error information given.' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
'Select Me' => '',
|
||||
'Show less' => '',
|
||||
'Some files could not be uploaded:' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
'The date has to be in the past.' => '',
|
||||
'The file has been deleted.' => '',
|
||||
'The requested resource could not be found.' => '',
|
||||
'The space has been archived.' => '',
|
||||
'The space has been unarchived.' => '',
|
||||
'Time Zone' => '',
|
||||
'Toggle comment menu' => '',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
'Toggle stream entry menu' => '',
|
||||
'Unsubscribe' => '',
|
||||
'You are not allowed to run this action.' => '',
|
||||
'<strong>Latest</strong> updates' => '<strong>Ultimele</strong> actualizări',
|
||||
'Account settings' => 'Setări de Cont',
|
||||
'Add:' => 'Adauga',
|
||||
'Administration' => 'Administrație',
|
||||
'Allow' => 'Permite',
|
||||
'Back' => 'Înapoi',
|
||||
'Back to dashboard' => 'Înapoi la panoul de control',
|
||||
'Cancel' => 'Anulează',
|
||||
'Choose language:' => 'Alege limba:',
|
||||
'Close' => 'Închide',
|
||||
'Collapse' => 'Strânge',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sursa Conținutului de Adaos trebuie să fie instanță a HActiveRecordContent sau a HActiveRecordContentAddon!',
|
||||
'Could not find content of addon!' => 'Nu s-a putut găsi conținutul adaosului!',
|
||||
'Delete' => 'Sterge',
|
||||
'Error' => 'Eroare',
|
||||
'Expand' => 'Extinde',
|
||||
'It looks like you may have taken the wrong turn.' => 'Se pare că ai luat-o pe calea greșită.',
|
||||
'Language' => 'Limbă',
|
||||
'Login' => 'Autentificare',
|
||||
'Logout' => 'Ieșire cont',
|
||||
'Menu' => 'Meniu',
|
||||
'Module is not enabled on this content container!' => 'Modulul nu este pe acest container de conținut activat!',
|
||||
'My profile' => 'Profilul meu',
|
||||
'My profile image' => 'Imagine profil',
|
||||
'New profile image' => 'Imagine nouă de profil',
|
||||
'Next' => 'Inainte',
|
||||
'Oooops...' => 'Oooops...',
|
||||
'Open' => 'Deschide',
|
||||
'Save' => 'Salvează',
|
||||
'Saved' => 'Salvat',
|
||||
'Search' => 'Căutare',
|
||||
'Show more' => 'Arata mai mult',
|
||||
'Upload' => 'Incarca',
|
||||
'Upload file' => 'Incarca fisiere',
|
||||
];
|
||||
|
@ -26,43 +26,15 @@ return [
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unknown error occurred while uploading.' => '',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
|
||||
'Copy to clipboard' => 'Скопировано в буфер обмена',
|
||||
'Could not find requested page.' => '',
|
||||
'Delete' => 'Удалить',
|
||||
'Do you really want to perform this action?' => 'Вы уверены, что хотите выполнить это действие?',
|
||||
'Edit' => 'Изменить',
|
||||
'Error while running your last action (Invalid request method).' => 'Ошибка при выполнении вашего последнего действия (Неверный запрос).',
|
||||
'Error:' => 'Ошибка:',
|
||||
'Export' => 'Экспорт',
|
||||
'Info:' => 'Информация:',
|
||||
'Invalid request method!' => 'Неверный запрос',
|
||||
'Loading...' => 'Загрузка...',
|
||||
'Logo of {appName}' => 'Логотип {appName}',
|
||||
'My profile image' => 'Моё изображение профиля',
|
||||
'No error information given.' => 'Информация об ошибке не указана.',
|
||||
'Please type at least {count} characters' => 'Пожалуйста, введите не менее {count} символов',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
'Select Me' => 'Выбери',
|
||||
'Show less' => 'Показать меньше',
|
||||
'Show more' => 'Показать больше',
|
||||
'Some files could not be uploaded:' => 'Некоторые файлы не могут быть загружены:',
|
||||
'Text could not be copied to clipboard' => 'Текст не может быть скопирован в буфер обмена',
|
||||
'Text has been copied to clipboard' => 'Текст скопирован в буфер обмена',
|
||||
'The date has to be in the past.' => 'Дата должна быть в прошлом.',
|
||||
'The file has been deleted.' => 'Файл был удалён.',
|
||||
'The requested resource could not be found.' => 'Запрошенный ресурс не найден.',
|
||||
'The space has been archived.' => 'Пространство было архивировано.',
|
||||
'The space has been unarchived.' => 'Пространство было разархивировано.',
|
||||
'Time Zone' => 'Часовой пояс',
|
||||
'Toggle comment menu' => '',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
'Toggle stream entry menu' => '',
|
||||
'Unsubscribe' => 'Отказаться от подписки',
|
||||
'Upload file' => 'Загрузить файл',
|
||||
'You are not allowed to run this action.' => 'Вы не можете запускать это действие.',
|
||||
'<strong>Latest</strong> updates' => '<strong>Последние</strong> обновления',
|
||||
'Account settings' => 'Настройки аккаунта',
|
||||
'Administration' => 'Администрирование',
|
||||
@ -75,25 +47,54 @@ return [
|
||||
'Collapse' => 'Свернуть',
|
||||
'Confirm' => 'Подтвердить',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Источник Content Addon должен быть сущностью HActiveRecordContent либо HActiveRecordContentAddon!',
|
||||
'Copy to clipboard' => 'Скопировано в буфер обмена',
|
||||
'Could not find content of addon!' => 'Не удалось найти содержимое дополнения!',
|
||||
'Default' => 'По умолчанию',
|
||||
'Delete' => 'Удалить',
|
||||
'Deny' => 'Отказано',
|
||||
'Do you really want to perform this action?' => 'Вы уверены, что хотите выполнить это действие?',
|
||||
'Edit' => 'Изменить',
|
||||
'Error' => 'Ошибка',
|
||||
'Error while running your last action (Invalid request method).' => 'Ошибка при выполнении вашего последнего действия (Неверный запрос).',
|
||||
'Error:' => 'Ошибка:',
|
||||
'Expand' => 'Развернуть',
|
||||
'Export' => 'Экспорт',
|
||||
'Info:' => 'Информация:',
|
||||
'Invalid request method!' => 'Неверный запрос',
|
||||
'It looks like you may have taken the wrong turn.' => 'Похоже, что вы сделали что-то не так.',
|
||||
'Language' => 'Язык',
|
||||
'Loading...' => 'Загрузка...',
|
||||
'Login' => 'Войти',
|
||||
'Logo of {appName}' => 'Логотип {appName}',
|
||||
'Logout' => 'Выйти',
|
||||
'Menu' => 'Меню',
|
||||
'Module is not enabled on this content container!' => 'Модуль не включён в этой оболочке контента',
|
||||
'My profile' => 'Мой профиль',
|
||||
'My profile image' => 'Моё изображение профиля',
|
||||
'New profile image' => 'Новое изображение профиля',
|
||||
'Next' => 'Следующий',
|
||||
'No error information given.' => 'Информация об ошибке не указана.',
|
||||
'Oooops...' => 'Ой...',
|
||||
'Open' => 'Открыть',
|
||||
'Please type at least 3 characters' => 'Пожалуйста, введите не менее 3-х символов',
|
||||
'Please type at least {count} characters' => 'Пожалуйста, введите не менее {count} символов',
|
||||
'Save' => 'Сохранить',
|
||||
'Saved' => 'Сохранено',
|
||||
'Search' => 'Поиск',
|
||||
'Select Me' => 'Выбери',
|
||||
'Show less' => 'Показать меньше',
|
||||
'Show more' => 'Показать больше',
|
||||
'Some files could not be uploaded:' => 'Некоторые файлы не могут быть загружены:',
|
||||
'Text could not be copied to clipboard' => 'Текст не может быть скопирован в буфер обмена',
|
||||
'Text has been copied to clipboard' => 'Текст скопирован в буфер обмена',
|
||||
'The date has to be in the past.' => 'Дата должна быть в прошлом.',
|
||||
'The file has been deleted.' => 'Файл был удалён.',
|
||||
'The requested resource could not be found.' => 'Запрошенный ресурс не найден.',
|
||||
'The space has been archived.' => 'Пространство было архивировано.',
|
||||
'The space has been unarchived.' => 'Пространство было разархивировано.',
|
||||
'Time Zone' => 'Часовой пояс',
|
||||
'Unsubscribe' => 'Отказаться от подписки',
|
||||
'Upload' => 'Загрузить',
|
||||
'Upload file' => 'Загрузить файл',
|
||||
'You are not allowed to run this action.' => 'Вы не можете запускать это действие.',
|
||||
];
|
||||
|
@ -69,6 +69,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -70,6 +70,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -1,82 +1,100 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => '<strong>Bekräfta</strong> val',
|
||||
'<strong>Latest</strong> updates' => '<strong>Senaste</strong> uppdateringarna',
|
||||
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sammanställning',
|
||||
'Account settings' => 'Kontoinställningar',
|
||||
'Add:' => 'Lägg till:',
|
||||
'Administration' => 'Administration',
|
||||
'Allow' => 'Tillåt',
|
||||
'An error occurred while handling your last action. (Handler not found).' => '',
|
||||
'An unexpected error occurred while loading the search result.' => '',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unknown error occurred while uploading.' => '',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
|
||||
'Back' => 'Tillbaka',
|
||||
'Back to dashboard' => 'Tillbaka till översikt',
|
||||
'Cancel' => 'Avbryt',
|
||||
'Choose language:' => 'Välj språk:',
|
||||
'Close' => 'Stäng',
|
||||
'Collapse' => 'Minska',
|
||||
'Confirm' => 'Bekräfta',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => '',
|
||||
'Copy to clipboard' => 'Kopiera urklipp',
|
||||
'Could not find content of addon!' => '',
|
||||
'Could not find requested page.' => 'Det gick inte att hitta önskad sida.',
|
||||
'Default' => 'Standard',
|
||||
'Delete' => 'Radera',
|
||||
'Deny' => 'Neka',
|
||||
'Do you really want to perform this action?' => 'Vill du verkligen utföra det här åtgärdet?',
|
||||
'Edit' => 'Ändra',
|
||||
'Error' => 'Error',
|
||||
'Error while running your last action (Invalid request method).' => '',
|
||||
'Error:' => 'Fel:',
|
||||
'Expand' => 'Expandera',
|
||||
'Export' => 'Exportera',
|
||||
'Info:' => '',
|
||||
'Invalid request method!' => '',
|
||||
'It looks like you may have taken the wrong turn.' => '',
|
||||
'Language' => 'Språk',
|
||||
'Loading...' => 'Laddar...',
|
||||
'Login' => 'Logga In',
|
||||
'Logo of {appName}' => '',
|
||||
'Logout' => 'Logga ut',
|
||||
'Menu' => 'Meny',
|
||||
'Module is not enabled on this content container!' => '',
|
||||
'My profile' => 'Min profil',
|
||||
'My profile image' => 'Min profilbild',
|
||||
'New profile image' => 'Ny profil bild',
|
||||
'Next' => 'Nästa',
|
||||
'No error information given.' => '',
|
||||
'Oooops...' => 'Hoppsan....',
|
||||
'Open' => 'Öppna',
|
||||
'Please type at least 3 characters' => 'Ange minst 3 tecken',
|
||||
'Please type at least {count} characters' => 'Ange minst {count} tecken',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
'Save' => 'Spara',
|
||||
'Saved' => 'Sparad',
|
||||
'Search' => 'Sök',
|
||||
'Select Me' => 'Välj mig',
|
||||
'Show less' => 'Visa mindre',
|
||||
'Show more' => 'Visa mer',
|
||||
'Some files could not be uploaded:' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
'The date has to be in the past.' => '',
|
||||
'The file has been deleted.' => 'Filen har blivit raderad',
|
||||
'The requested resource could not be found.' => '',
|
||||
'The space has been archived.' => '',
|
||||
'The space has been unarchived.' => '',
|
||||
'Time Zone' => 'Tidzon',
|
||||
'Toggle comment menu' => '',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
'Toggle stream entry menu' => '',
|
||||
'Unsubscribe' => 'Prenumerera',
|
||||
'Upload' => 'Ladda upp',
|
||||
'Upload file' => 'Ladda upp fil',
|
||||
'You are not allowed to run this action.' => '',
|
||||
);
|
||||
/**
|
||||
* 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 [
|
||||
'An error occurred while handling your last action. (Handler not found).' => '',
|
||||
'An unexpected error occurred while loading the search result.' => '',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
|
||||
'An unknown error occurred while uploading.' => '',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => '',
|
||||
'Could not find content of addon!' => '',
|
||||
'Error while running your last action (Invalid request method).' => '',
|
||||
'Info:' => '',
|
||||
'Invalid request method!' => '',
|
||||
'It looks like you may have taken the wrong turn.' => '',
|
||||
'Logo of {appName}' => '',
|
||||
'Module is not enabled on this content container!' => '',
|
||||
'No error information given.' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
'Some files could not be uploaded:' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
'The date has to be in the past.' => '',
|
||||
'The requested resource could not be found.' => '',
|
||||
'The space has been archived.' => '',
|
||||
'The space has been unarchived.' => '',
|
||||
'Toggle comment menu' => '',
|
||||
'Toggle panel menu' => '',
|
||||
'Toggle post menu' => '',
|
||||
'Toggle stream entry menu' => '',
|
||||
'You are not allowed to run this action.' => '',
|
||||
'<strong>Confirm</strong> Action' => '<strong>Bekräfta</strong> val',
|
||||
'<strong>Latest</strong> updates' => '<strong>Senaste</strong> uppdateringarna',
|
||||
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sammanställning',
|
||||
'Account settings' => 'Kontoinställningar',
|
||||
'Add:' => 'Lägg till:',
|
||||
'Administration' => 'Administration',
|
||||
'Allow' => 'Tillåt',
|
||||
'Back' => 'Tillbaka',
|
||||
'Back to dashboard' => 'Tillbaka till översikt',
|
||||
'Cancel' => 'Avbryt',
|
||||
'Choose language:' => 'Välj språk:',
|
||||
'Close' => 'Stäng',
|
||||
'Collapse' => 'Minska',
|
||||
'Confirm' => 'Bekräfta',
|
||||
'Copy to clipboard' => 'Kopiera urklipp',
|
||||
'Could not find requested page.' => 'Det gick inte att hitta önskad sida.',
|
||||
'Default' => 'Standard',
|
||||
'Delete' => 'Radera',
|
||||
'Deny' => 'Neka',
|
||||
'Do you really want to perform this action?' => 'Vill du verkligen utföra det här åtgärdet?',
|
||||
'Edit' => 'Ändra',
|
||||
'Error' => 'Error',
|
||||
'Error:' => 'Fel:',
|
||||
'Expand' => 'Expandera',
|
||||
'Export' => 'Exportera',
|
||||
'Language' => 'Språk',
|
||||
'Loading...' => 'Laddar...',
|
||||
'Login' => 'Logga In',
|
||||
'Logout' => 'Logga ut',
|
||||
'Menu' => 'Meny',
|
||||
'My profile' => 'Min profil',
|
||||
'My profile image' => 'Min profilbild',
|
||||
'New profile image' => 'Ny profil bild',
|
||||
'Next' => 'Nästa',
|
||||
'Oooops...' => 'Hoppsan....',
|
||||
'Open' => 'Öppna',
|
||||
'Please type at least 3 characters' => 'Ange minst 3 tecken',
|
||||
'Please type at least {count} characters' => 'Ange minst {count} tecken',
|
||||
'Save' => 'Spara',
|
||||
'Saved' => 'Sparad',
|
||||
'Search' => 'Sök',
|
||||
'Select Me' => 'Välj mig',
|
||||
'Show less' => 'Visa mindre',
|
||||
'Show more' => 'Visa mer',
|
||||
'The file has been deleted.' => 'Filen har blivit raderad',
|
||||
'Time Zone' => 'Tidzon',
|
||||
'Unsubscribe' => 'Prenumerera',
|
||||
'Upload' => 'Ladda upp',
|
||||
'Upload file' => 'Ladda upp fil',
|
||||
];
|
||||
|
@ -47,6 +47,7 @@ return [
|
||||
'No error information given.' => '',
|
||||
'Open' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,82 +1,100 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>Confirm</strong> Action' => 'İşlemi <strong>Onayla</strong>',
|
||||
'<strong>Latest</strong> updates' => '<strong>Son</strong> güncellemeler',
|
||||
'<strong>Mail</strong> summary' => '<strong>Mesaj</strong> özeti',
|
||||
'Account settings' => 'Hesap ayarları',
|
||||
'Add:' => 'Ekle:',
|
||||
'Administration' => 'Yönetim',
|
||||
'Allow' => 'İzin ver',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (İşleyici bulunamadı).',
|
||||
'An unexpected error occurred while loading the search result.' => 'Arama sonuçlarını yüklerken beklenmeyen bir hata oluştu.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir hata oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir server hatası oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
|
||||
'An unknown error occurred while uploading.' => 'Yüklenirken bilinmeyen bir hata oluştu.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Yüklenirken bilinmeyen bir hata oluştu. İpucu: upload_max_filesize ve post_max_size php ayarlarınızı kontrol edin.',
|
||||
'Back' => 'Geri',
|
||||
'Back to dashboard' => 'Panele geri dön',
|
||||
'Cancel' => 'İptal',
|
||||
'Choose language:' => 'Dil Seçin:',
|
||||
'Close' => 'Kapat',
|
||||
'Collapse' => 'Gizle',
|
||||
'Confirm' => 'Doğrula',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'İçerik eklenti kaynağı HActiveRecordContent ya da HActiveRecordAddon şeklinde olmalı!',
|
||||
'Copy to clipboard' => 'Panoya kopyala',
|
||||
'Could not find content of addon!' => 'Eklenti içeriği bulunamadı!',
|
||||
'Could not find requested page.' => 'İstenen sayfa bulunamadı.',
|
||||
'Default' => 'Standart',
|
||||
'Delete' => 'Sil',
|
||||
'Deny' => 'Reddet',
|
||||
'Do you really want to perform this action?' => 'Bu işlemi gerçekleştirmek istiyor musunuz?',
|
||||
'Edit' => 'Düzenle',
|
||||
'Error' => 'Hata',
|
||||
'Error while running your last action (Invalid request method).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (Geçersiz istek).',
|
||||
'Error:' => 'Hata:',
|
||||
'Expand' => 'Göster',
|
||||
'Export' => 'Çıkart',
|
||||
'Info:' => 'Bilgi:',
|
||||
'Invalid request method!' => 'Geçersiz istek yöntemi!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Yanlış bir geridönüş var gibi görünüyor.',
|
||||
'Language' => 'Dil',
|
||||
'Loading...' => 'Yükleniyor...',
|
||||
'Login' => 'Giriş',
|
||||
'Logo of {appName}' => '{appName} Logosu',
|
||||
'Logout' => 'Çıkış',
|
||||
'Menu' => 'Menü',
|
||||
'Module is not enabled on this content container!' => 'Etkin içerik kabı üzerinde modül etkin değil!',
|
||||
'My profile' => 'Profilim',
|
||||
'My profile image' => 'Profil resmim',
|
||||
'New profile image' => 'Yeni profil resmi',
|
||||
'Next' => 'İleri',
|
||||
'No error information given.' => 'Hata bilgisi verilmedi.',
|
||||
'Oooops...' => 'Hata!',
|
||||
'Open' => 'Aç',
|
||||
'Please type at least 3 characters' => 'Lütfen en az 3 karakter giriniz',
|
||||
'Please type at least {count} characters' => 'Lütfen en az {count} karakter girin',
|
||||
'Profile dropdown' => 'Profil menüsü',
|
||||
'Profile image of {displayName}' => 'Profil resmi {displayName}',
|
||||
'Profile picture of {displayName}' => 'Profil fotoğrafı {displayName}',
|
||||
'Save' => 'Kaydet',
|
||||
'Saved' => 'Kaydet',
|
||||
'Search' => 'Arama',
|
||||
'Select Me' => 'Beni Seç',
|
||||
'Show less' => 'Daha az göster',
|
||||
'Show more' => 'Daha fazla göster',
|
||||
'Some files could not be uploaded:' => 'Bazı dosyalar yüklenemedi:',
|
||||
'Text could not be copied to clipboard' => 'Metin panosu kopyalanamadı',
|
||||
'Text has been copied to clipboard' => 'Metin panosu kopyalandı',
|
||||
'The date has to be in the past.' => 'Geçmiş bir tarih girilmesi gerekiyor.',
|
||||
'The file has been deleted.' => 'Dosya silinmiştir.',
|
||||
'The requested resource could not be found.' => 'İstenilen kaynak bulunamadı.',
|
||||
'The space has been archived.' => 'Alan arşivlenmiştir.',
|
||||
'The space has been unarchived.' => 'Alan arşivden çıkarılmıştır.',
|
||||
'Time Zone' => 'Saat Dilimi',
|
||||
'Toggle comment menu' => 'Yorum menüsü değiştirme',
|
||||
'Toggle panel menu' => 'Panel menüsünü aç / kapat',
|
||||
'Toggle post menu' => 'Yayın menüsünü aç / kapat',
|
||||
'Toggle stream entry menu' => 'Akış giriş menüsünü aç / kapat',
|
||||
'Unsubscribe' => 'Abonelikten çık',
|
||||
'Upload' => 'Yükle',
|
||||
'Upload file' => 'Dosya yükle',
|
||||
'You are not allowed to run this action.' => 'Bu işlemi yapmaya izniniz yok.',
|
||||
);
|
||||
/**
|
||||
* 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 [
|
||||
'Powered by {name}' => '',
|
||||
'<strong>Confirm</strong> Action' => 'İşlemi <strong>Onayla</strong>',
|
||||
'<strong>Latest</strong> updates' => '<strong>Son</strong> güncellemeler',
|
||||
'<strong>Mail</strong> summary' => '<strong>Mesaj</strong> özeti',
|
||||
'Account settings' => 'Hesap ayarları',
|
||||
'Add:' => 'Ekle:',
|
||||
'Administration' => 'Yönetim',
|
||||
'Allow' => 'İzin ver',
|
||||
'An error occurred while handling your last action. (Handler not found).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (İşleyici bulunamadı).',
|
||||
'An unexpected error occurred while loading the search result.' => 'Arama sonuçlarını yüklerken beklenmeyen bir hata oluştu.',
|
||||
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir hata oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
|
||||
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir server hatası oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
|
||||
'An unknown error occurred while uploading.' => 'Yüklenirken bilinmeyen bir hata oluştu.',
|
||||
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Yüklenirken bilinmeyen bir hata oluştu. İpucu: upload_max_filesize ve post_max_size php ayarlarınızı kontrol edin.',
|
||||
'Back' => 'Geri',
|
||||
'Back to dashboard' => 'Panele geri dön',
|
||||
'Cancel' => 'İptal',
|
||||
'Choose language:' => 'Dil Seçin:',
|
||||
'Close' => 'Kapat',
|
||||
'Collapse' => 'Gizle',
|
||||
'Confirm' => 'Doğrula',
|
||||
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'İçerik eklenti kaynağı HActiveRecordContent ya da HActiveRecordAddon şeklinde olmalı!',
|
||||
'Copy to clipboard' => 'Panoya kopyala',
|
||||
'Could not find content of addon!' => 'Eklenti içeriği bulunamadı!',
|
||||
'Could not find requested page.' => 'İstenen sayfa bulunamadı.',
|
||||
'Default' => 'Standart',
|
||||
'Delete' => 'Sil',
|
||||
'Deny' => 'Reddet',
|
||||
'Do you really want to perform this action?' => 'Bu işlemi gerçekleştirmek istiyor musunuz?',
|
||||
'Edit' => 'Düzenle',
|
||||
'Error' => 'Hata',
|
||||
'Error while running your last action (Invalid request method).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (Geçersiz istek).',
|
||||
'Error:' => 'Hata:',
|
||||
'Expand' => 'Göster',
|
||||
'Export' => 'Çıkart',
|
||||
'Info:' => 'Bilgi:',
|
||||
'Invalid request method!' => 'Geçersiz istek yöntemi!',
|
||||
'It looks like you may have taken the wrong turn.' => 'Yanlış bir geridönüş var gibi görünüyor.',
|
||||
'Language' => 'Dil',
|
||||
'Loading...' => 'Yükleniyor...',
|
||||
'Login' => 'Giriş',
|
||||
'Logo of {appName}' => '{appName} Logosu',
|
||||
'Logout' => 'Çıkış',
|
||||
'Menu' => 'Menü',
|
||||
'Module is not enabled on this content container!' => 'Etkin içerik kabı üzerinde modül etkin değil!',
|
||||
'My profile' => 'Profilim',
|
||||
'My profile image' => 'Profil resmim',
|
||||
'New profile image' => 'Yeni profil resmi',
|
||||
'Next' => 'İleri',
|
||||
'No error information given.' => 'Hata bilgisi verilmedi.',
|
||||
'Oooops...' => 'Hata!',
|
||||
'Open' => 'Aç',
|
||||
'Please type at least 3 characters' => 'Lütfen en az 3 karakter giriniz',
|
||||
'Please type at least {count} characters' => 'Lütfen en az {count} karakter girin',
|
||||
'Profile dropdown' => 'Profil menüsü',
|
||||
'Profile image of {displayName}' => 'Profil resmi {displayName}',
|
||||
'Profile picture of {displayName}' => 'Profil fotoğrafı {displayName}',
|
||||
'Save' => 'Kaydet',
|
||||
'Saved' => 'Kaydet',
|
||||
'Search' => 'Arama',
|
||||
'Select Me' => 'Beni Seç',
|
||||
'Show less' => 'Daha az göster',
|
||||
'Show more' => 'Daha fazla göster',
|
||||
'Some files could not be uploaded:' => 'Bazı dosyalar yüklenemedi:',
|
||||
'Text could not be copied to clipboard' => 'Metin panosu kopyalanamadı',
|
||||
'Text has been copied to clipboard' => 'Metin panosu kopyalandı',
|
||||
'The date has to be in the past.' => 'Geçmiş bir tarih girilmesi gerekiyor.',
|
||||
'The file has been deleted.' => 'Dosya silinmiştir.',
|
||||
'The requested resource could not be found.' => 'İstenilen kaynak bulunamadı.',
|
||||
'The space has been archived.' => 'Alan arşivlenmiştir.',
|
||||
'The space has been unarchived.' => 'Alan arşivden çıkarılmıştır.',
|
||||
'Time Zone' => 'Saat Dilimi',
|
||||
'Toggle comment menu' => 'Yorum menüsü değiştirme',
|
||||
'Toggle panel menu' => 'Panel menüsünü aç / kapat',
|
||||
'Toggle post menu' => 'Yayın menüsünü aç / kapat',
|
||||
'Toggle stream entry menu' => 'Akış giriş menüsünü aç / kapat',
|
||||
'Unsubscribe' => 'Abonelikten çık',
|
||||
'Upload' => 'Yükle',
|
||||
'Upload file' => 'Dosya yükle',
|
||||
'You are not allowed to run this action.' => 'Bu işlemi yapmaya izniniz yok.',
|
||||
];
|
||||
|
@ -70,6 +70,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -70,6 +70,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -24,6 +24,7 @@ return [
|
||||
'Export' => '',
|
||||
'Invalid request method!' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Select Me' => '',
|
||||
'Text could not be copied to clipboard' => '',
|
||||
'Text has been copied to clipboard' => '',
|
||||
|
@ -25,6 +25,7 @@ return [
|
||||
'Invalid request method!' => '',
|
||||
'Logo of {appName}' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -57,6 +57,7 @@ return [
|
||||
'Open' => '',
|
||||
'Please type at least 3 characters' => '',
|
||||
'Please type at least {count} characters' => '',
|
||||
'Powered by {name}' => '',
|
||||
'Profile dropdown' => '',
|
||||
'Profile image of {displayName}' => '',
|
||||
'Profile picture of {displayName}' => '',
|
||||
|
@ -8,20 +8,65 @@
|
||||
|
||||
namespace humhub\models;
|
||||
|
||||
use yii\base\InvalidArgumentException;
|
||||
use humhub\libs\RestrictedCallException;
|
||||
use humhub\libs\UrlOembedClient;
|
||||
use humhub\libs\UrlOembedHttpClient;
|
||||
use yii\helpers\Html;
|
||||
use yii\helpers\Json;
|
||||
use yii\db\ActiveRecord;
|
||||
use Yii;
|
||||
|
||||
/**
|
||||
* This is the model class for table "url_oembed".
|
||||
* UrlOembed records hold already loaded oembed previews.
|
||||
*
|
||||
* This class is used to fetch and save oembed results by means of the [[preload()]] and [[getOEmbed()]] methods.
|
||||
*
|
||||
* [[preload()]] can be used to preload oembed results for a given text string.
|
||||
*
|
||||
* [[getOEmbed()]] can be used to fetch a single oembed record for a given Url.
|
||||
*
|
||||
* All successfull results of `preload()` or `getOEmbed()` will be cached and saved in the `url_oembed` table.
|
||||
*
|
||||
* @property string $url
|
||||
* @property string $preview
|
||||
*/
|
||||
class UrlOembed extends ActiveRecord
|
||||
{
|
||||
/**
|
||||
* @var int Maximum amount of remote fetch calls per request
|
||||
*/
|
||||
public static $maxUrlFetchLimit = 5;
|
||||
|
||||
/**
|
||||
* @var int Maximum amount of local db fetch calls per request
|
||||
*/
|
||||
public static $maxUrlLoadLimit = 100;
|
||||
|
||||
/**
|
||||
* @var int Counter for remote fetch calls
|
||||
*/
|
||||
protected static $urlsFetched = 0;
|
||||
|
||||
/**
|
||||
* @var int Counter for local db fetch calls
|
||||
*/
|
||||
protected static $urlsLoaded = 0;
|
||||
|
||||
/**
|
||||
* @var array Internal request cache
|
||||
*/
|
||||
protected static $cache = [];
|
||||
|
||||
/**
|
||||
* @var UrlOembedClient
|
||||
*/
|
||||
protected static $client;
|
||||
|
||||
|
||||
/**
|
||||
* @var array Allowed oembed types
|
||||
*/
|
||||
public static $allowed_types = ['video', 'rich', 'photo'];
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
@ -55,110 +100,204 @@ class UrlOembed extends ActiveRecord
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns OEmbed Code for a given URL
|
||||
* If no oembed code is found, null is returned
|
||||
* Returns the OEmbed API Url if exists
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProviderUrl()
|
||||
{
|
||||
foreach (static::getProviders() as $providerBaseUrl => $providerAPI) {
|
||||
if (strpos($this->url, $providerBaseUrl) !== false) {
|
||||
return str_replace("%url%", urlencode($this->url), $providerAPI);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Flushes internal caches and fetch counters
|
||||
*/
|
||||
public static function flush()
|
||||
{
|
||||
static::$cache = [];
|
||||
static::$urlsFetched = 0;
|
||||
static::$urlsLoaded = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a OEmbed html string for a given $url or null in the following cases:
|
||||
*
|
||||
* - There is no OEmbed provider available for the given url
|
||||
* - The OEmbed provider does not return a valid response
|
||||
* - A fetch counter restriction exceeded
|
||||
*
|
||||
* @param string $url
|
||||
*
|
||||
* @return null|string
|
||||
* @return string|null
|
||||
*/
|
||||
public static function GetOEmbed($url)
|
||||
public static function getOEmbed($url)
|
||||
{
|
||||
$url = trim($url);
|
||||
try {
|
||||
$url = trim($url);
|
||||
|
||||
// Check if the given URL has OEmbed Support
|
||||
if (UrlOembed::hasOEmbedSupport($url)) {
|
||||
if (static::hasOEmbedSupport($url)) {
|
||||
$urlOembed = static::findExistingOembed($url);
|
||||
$result = $urlOembed ? $urlOembed->preview : self::loadUrl($url);
|
||||
|
||||
// Lookup Cached OEmebed Item from Database
|
||||
$urlOembed = UrlOembed::findOne(['url' => $url]);
|
||||
if ($urlOembed !== null) {
|
||||
return trim(preg_replace('/\s+/', ' ', $urlOembed->preview));
|
||||
} else {
|
||||
return trim(preg_replace('/\s+/', ' ', self::loadUrl($url)));
|
||||
if(!empty($result)) {
|
||||
return trim(preg_replace('/\s+/', ' ', $result));
|
||||
}
|
||||
}
|
||||
} catch(RestrictedCallException $re) {
|
||||
Yii::warning($re);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prebuilds oembeds for all urls in a given text
|
||||
* Parses the given $text string for urls an saves new loaded OEmbed instances for.
|
||||
*
|
||||
* @param string|array $text
|
||||
* This method will only execute a remote fetch call if:
|
||||
*
|
||||
* - There was a provider found for the given url
|
||||
* - The same url has not been fetched before
|
||||
* - The max fetch counters are not exceeded
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public static function preload($text)
|
||||
{
|
||||
preg_replace_callback('/http(.*?)(\s|$)/i', function ($match) {
|
||||
|
||||
$url = $match[0];
|
||||
$url = trim($match[0]);
|
||||
|
||||
// Already looked up?
|
||||
if (UrlOembed::findOne(['url' => $url]) !== null) {
|
||||
if (!static::hasOEmbedSupport($url)) {
|
||||
return;
|
||||
}
|
||||
UrlOembed::loadUrl($url);
|
||||
|
||||
try {
|
||||
if (!static::findExistingOembed($url)) {
|
||||
static::loadUrl($url);
|
||||
}
|
||||
} catch(RestrictedCallException $re) {
|
||||
Yii::warning($re);
|
||||
}
|
||||
}, $text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads OEmbed Data from a given URL and writes them to the database
|
||||
* Checks if there is an existing UrlOembed record for the given $url.
|
||||
*
|
||||
* @param string $url
|
||||
* > Note: Results will be cached for this request if an record was found.
|
||||
*
|
||||
* @return string
|
||||
* @param $url
|
||||
* @return UrlOembed|null
|
||||
* @throws RestrictedCallException
|
||||
*/
|
||||
public static function loadUrl($url)
|
||||
protected static function findExistingOembed($url)
|
||||
{
|
||||
$urlOembed = new UrlOembed();
|
||||
$urlOembed->url = $url;
|
||||
$html = '';
|
||||
|
||||
if ($urlOembed->getProviderUrl() != '') {
|
||||
// Build OEmbed Preview
|
||||
$jsonOut = UrlOembed::fetchUrl($urlOembed->getProviderUrl());
|
||||
if ($jsonOut != '' && $jsonOut != 'Unauthorized') {
|
||||
try {
|
||||
$data = Json::decode($jsonOut);
|
||||
if (isset($data['html']) && isset($data['type']) && ($data['type'] === "video" || $data['type'] === 'rich' || $data['type'] === 'photo')) {
|
||||
$html = "<div data-guid='".uniqid('oembed-')."' data-richtext-feature class='oembed_snippet' data-url='" . Html::encode($url) . "'>" . $data['html'] . "</div>";
|
||||
}
|
||||
} catch (InvalidArgumentException $ex) {
|
||||
Yii::warning($ex->getMessage());
|
||||
}
|
||||
}
|
||||
if(array_key_exists($url, static::$cache)) {
|
||||
return static::$cache[$url];
|
||||
}
|
||||
|
||||
if ($html != '') {
|
||||
$urlOembed->preview = $html;
|
||||
$urlOembed->save();
|
||||
if(static::$urlsLoaded >= static::$maxUrlLoadLimit) {
|
||||
throw new RestrictedCallException('Max url db load limit exceeded.');
|
||||
}
|
||||
|
||||
return $html;
|
||||
static::$urlsLoaded++;
|
||||
|
||||
$record = static::findOne(['url' => $url]);
|
||||
|
||||
if($record) {
|
||||
static::$cache[$url] = $record;
|
||||
}
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the OEmbed API Url if exists
|
||||
* Fetches the oembed result for a given $url and saves an UrlOembed record to the database.
|
||||
* A Remote fetch for new urls is only executed in case there is a related provider for the given url configured.
|
||||
*
|
||||
* @param string $url
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProviderUrl()
|
||||
protected static function loadUrl($url)
|
||||
{
|
||||
foreach (UrlOembed::getProviders() as $providerBaseUrl => $providerAPI) {
|
||||
if (strpos($this->url, $providerBaseUrl) !== false) {
|
||||
return str_replace("%url%", urlencode($this->url), $providerAPI);
|
||||
try {
|
||||
$urlOembed = static::findExistingOembed($url);
|
||||
|
||||
if(!$urlOembed) {
|
||||
$urlOembed = new static(['url' => $url]);
|
||||
}
|
||||
|
||||
if(empty($urlOembed->getProviderUrl())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
$data = static::fetchUrl($urlOembed->getProviderUrl());
|
||||
$html = static::buildHtmlPreview($url, $data);
|
||||
|
||||
$urlOembed->preview = $html ?: '';
|
||||
$urlOembed->save();
|
||||
|
||||
static::$cache[$url] = $urlOembed;
|
||||
return $html;
|
||||
} catch(RestrictedCallException $re) {
|
||||
Yii::warning($re);
|
||||
}
|
||||
return '';
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the oembed preview html result in case the given $data array is valid.
|
||||
*
|
||||
* @param $url
|
||||
* @param []|null $data
|
||||
* @return string|null
|
||||
*/
|
||||
protected static function buildHtmlPreview($url, $data = null)
|
||||
{
|
||||
if(static::validateOembedResponse($data)) {
|
||||
return Html::tag('div', $data['html'], [
|
||||
'data' => [
|
||||
'guid' => uniqid('oembed-', true),
|
||||
'richtext-feature' => 1,
|
||||
'class' => 'oembed_snippet',
|
||||
'url' => Html::encode($url)
|
||||
]
|
||||
]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the given $data array.
|
||||
*
|
||||
* @param []|null $data
|
||||
* @return bool
|
||||
*/
|
||||
protected static function validateOembedResponse($data = null)
|
||||
{
|
||||
return !empty($data) &&
|
||||
isset($data['html'], $data['type'])
|
||||
&& in_array($data['type'], static::$allowed_types, true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Checks if a given URL Supports OEmbed
|
||||
*
|
||||
* @param string $url
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function hasOEmbedSupport($url)
|
||||
{
|
||||
foreach (UrlOembed::getProviders() as $providerBaseUrl => $providerAPI) {
|
||||
foreach (static::getProviders() as $providerBaseUrl => $providerAPI) {
|
||||
if (strpos($url, $providerBaseUrl) !== false) {
|
||||
return true;
|
||||
}
|
||||
@ -168,42 +307,45 @@ class UrlOembed extends ActiveRecord
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a given URL and returns content
|
||||
* Executes the remote fetch call in case the [$maxUrlFetchLimit] is not reached.
|
||||
*
|
||||
* @param string $url
|
||||
*
|
||||
* @return mixed|boolean
|
||||
* @return array|null
|
||||
* @throws RestrictedCallException
|
||||
*/
|
||||
public static function fetchUrl($url)
|
||||
protected static function fetchUrl($url)
|
||||
{
|
||||
$curl = curl_init($url);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
|
||||
|
||||
// Not available when open_basedir or safe_mode is set.
|
||||
if (!function_exists('ini_get') || !ini_get('open_basedir') || !ini_get('safe_mode')) {
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
|
||||
if(static::$urlsFetched >= static::$maxUrlFetchLimit) {
|
||||
throw new RestrictedCallException('Max url fetch limit exceeded.');
|
||||
}
|
||||
|
||||
if (Yii::$app->settings->get('proxy.enabled')) {
|
||||
curl_setopt($curl, CURLOPT_PROXY, Yii::$app->settings->get('proxy.server'));
|
||||
curl_setopt($curl, CURLOPT_PROXYPORT, Yii::$app->settings->get('proxy.port'));
|
||||
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
||||
curl_setopt($curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
|
||||
if (defined('CURLOPT_PROXYUSERNAME')) {
|
||||
curl_setopt($curl, CURLOPT_PROXYUSERNAME, Yii::$app->settings->get('proxy.user'));
|
||||
}
|
||||
if (defined('CURLOPT_PROXYPASSWORD')) {
|
||||
curl_setopt($curl, CURLOPT_PROXYPASSWORD, Yii::$app->settings->get('proxy.password'));
|
||||
}
|
||||
if (defined('CURLOPT_NOPROXY')) {
|
||||
curl_setopt($curl, CURLOPT_NOPROXY, Yii::$app->settings->get('proxy.noproxy'));
|
||||
}
|
||||
}
|
||||
$return = curl_exec($curl);
|
||||
curl_close($curl);
|
||||
|
||||
return $return;
|
||||
static::$urlsFetched++;
|
||||
|
||||
return static::getClient()->fetchUrl($url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the UrlOembedClient responsible for fetching OEmbed results.
|
||||
*
|
||||
* @return UrlOembedClient
|
||||
*/
|
||||
public static function getClient()
|
||||
{
|
||||
if(!static::$client) {
|
||||
static::$client = new UrlOembedHttpClient();
|
||||
}
|
||||
|
||||
return static::$client;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the UrlOembedClient responsible for fetching OEmbed results.
|
||||
*
|
||||
* @param null $client
|
||||
*/
|
||||
public static function setClient($client = null)
|
||||
{
|
||||
static::$client = $client;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,7 +356,7 @@ class UrlOembed extends ActiveRecord
|
||||
public static function getProviders()
|
||||
{
|
||||
$providers = Yii::$app->settings->get('oembedProviders');
|
||||
if ($providers != '') {
|
||||
if (!empty($providers)) {
|
||||
return Json::decode($providers);
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@ use Yii;
|
||||
use humhub\components\Controller;
|
||||
use humhub\modules\activity\models\Activity;
|
||||
use humhub\components\behaviors\AccessControl;
|
||||
use yii\web\HttpException;
|
||||
|
||||
/**
|
||||
* LinkController provides link informations about an Activity via JSON.
|
||||
@ -44,6 +45,8 @@ class LinkController extends Controller
|
||||
|
||||
if ($activity !== null && $activity->content->canView()) {
|
||||
$this->redirect($activity->getActivityBaseClass()->getUrl());
|
||||
} else {
|
||||
throw new HttpException(403);
|
||||
}
|
||||
}
|
||||
|
||||
|
23
protected/humhub/modules/activity/messages/br/base.php
Normal file
23
protected/humhub/modules/activity/messages/br/base.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
return array (
|
||||
'<strong>E-Mail</strong> Summaries' => '',
|
||||
'Activities' => 'Obererezhioù',
|
||||
'Daily' => '',
|
||||
'E-Mail Summaries' => '',
|
||||
'E-Mail summaries are sent to inform you about recent activities in the network.' => '',
|
||||
'E-Mail summaries are sent to users to inform them about recent activities in your network.' => '',
|
||||
'Exclude spaces below from the mail summary' => '',
|
||||
'Hourly' => '',
|
||||
'Interval' => '',
|
||||
'Latest news' => '',
|
||||
'Never' => 'Morse',
|
||||
'On this page you can configure the contents and the interval of these e-mail updates.' => '',
|
||||
'On this page you can define the default behavior for your users. These settings can be overwritten by users in their account settings page.' => '',
|
||||
'Only include spaces below to the mail summary' => '',
|
||||
'Reset to defaults' => '',
|
||||
'Spaces' => 'Pajennoù',
|
||||
'Weekly' => '',
|
||||
'You will only receive an e-mail if there is something new.' => '',
|
||||
'Your daily summary' => '',
|
||||
'Your weekly summary' => '',
|
||||
);
|
@ -0,0 +1,22 @@
|
||||
<?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 [
|
||||
'%displayName% created the new space %spaceName%' => '',
|
||||
'%displayName% created this space.' => '',
|
||||
];
|
@ -0,0 +1,24 @@
|
||||
<?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 [
|
||||
'%displayName% joined the space %spaceName%' => '',
|
||||
'%displayName% joined this space.' => '',
|
||||
'%spaceName% has been archived' => '',
|
||||
'%spaceName% has been unarchived' => '',
|
||||
];
|
@ -0,0 +1,22 @@
|
||||
<?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 [
|
||||
'%displayName% left the space %spaceName%' => '',
|
||||
'%displayName% left this space.' => '',
|
||||
];
|
@ -0,0 +1,21 @@
|
||||
<?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 [
|
||||
'{user1} now follows {user2}.' => '',
|
||||
];
|
@ -0,0 +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 [
|
||||
'See online:' => '',
|
||||
'see online' => '',
|
||||
'via' => '',
|
||||
];
|
@ -0,0 +1,22 @@
|
||||
<?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>Latest</strong> activities' => '',
|
||||
'There are no activities yet.' => '',
|
||||
];
|
@ -1,24 +1,7 @@
|
||||
<?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 [
|
||||
'%spaceName% has been archived' => '',
|
||||
'%spaceName% has been unarchived' => '',
|
||||
'%displayName% joined the space %spaceName%' => '%displayName% pridružio se prostoru %spaceName%',
|
||||
'%displayName% joined this space.' => '%displayName% pridružio se ovom prostoru.',
|
||||
];
|
||||
return array (
|
||||
'%displayName% joined the space %spaceName%' => '%displayName% pridružio se prostoru %spaceName%',
|
||||
'%displayName% joined this space.' => '%displayName% pridružio se ovom prostoru.',
|
||||
'%spaceName% has been archived' => '%spaceName% je arhiviran',
|
||||
'%spaceName% has been unarchived' => '%spaceName% je uklonjen iz arhive',
|
||||
);
|
||||
|
@ -89,6 +89,9 @@ class Activity extends ContentActiveRecord
|
||||
* Returns the related BaseActivity object of this Activity record.
|
||||
*
|
||||
* @return \humhub\modules\activity\components\BaseActivity
|
||||
* @throws Exception
|
||||
* @throws \yii\base\InvalidConfigException
|
||||
* @throws \yii\db\IntegrityException
|
||||
*/
|
||||
public function getActivityBaseClass()
|
||||
{
|
||||
|
374
protected/humhub/modules/activity/tests/c3.php
Normal file
374
protected/humhub/modules/activity/tests/c3.php
Normal file
@ -0,0 +1,374 @@
|
||||
<?php
|
||||
// @codingStandardsIgnoreFile
|
||||
// @codeCoverageIgnoreStart
|
||||
|
||||
/**
|
||||
* C3 - Codeception Code Coverage
|
||||
*
|
||||
* @author tiger
|
||||
*/
|
||||
|
||||
if (isset($_COOKIE['CODECEPTION_CODECOVERAGE'])) {
|
||||
$cookie = json_decode($_COOKIE['CODECEPTION_CODECOVERAGE'], true);
|
||||
|
||||
// fix for improperly encoded JSON in Code Coverage cookie with WebDriver.
|
||||
// @see https://github.com/Codeception/Codeception/issues/874
|
||||
if (!is_array($cookie)) {
|
||||
$cookie = json_decode($cookie, true);
|
||||
}
|
||||
|
||||
if ($cookie) {
|
||||
foreach ($cookie as $key => $value) {
|
||||
$_SERVER["HTTP_X_CODECEPTION_" . strtoupper($key)] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('__c3_error')) {
|
||||
function __c3_error($message)
|
||||
{
|
||||
$errorLogFile = defined('C3_CODECOVERAGE_ERROR_LOG_FILE') ?
|
||||
C3_CODECOVERAGE_ERROR_LOG_FILE :
|
||||
C3_CODECOVERAGE_MEDIATE_STORAGE . DIRECTORY_SEPARATOR . 'error.txt';
|
||||
if (is_writable($errorLogFile)) {
|
||||
file_put_contents($errorLogFile, $message);
|
||||
} else {
|
||||
$message = "Could not write error to log file ($errorLogFile), original message: $message";
|
||||
}
|
||||
if (!headers_sent()) {
|
||||
header('X-Codeception-CodeCoverage-Error: ' . str_replace("\n", ' ', $message), true, 500);
|
||||
}
|
||||
setcookie('CODECEPTION_CODECOVERAGE_ERROR', $message);
|
||||
}
|
||||
}
|
||||
|
||||
if (!array_key_exists('HTTP_X_CODECEPTION_CODECOVERAGE', $_SERVER)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Autoload Codeception classes
|
||||
if (!class_exists('\\Codeception\\Codecept')) {
|
||||
if (file_exists(__DIR__ . '/codecept.phar')) {
|
||||
require_once 'phar://' . __DIR__ . '/codecept.phar/autoload.php';
|
||||
} elseif (stream_resolve_include_path(__DIR__ . '/vendor/autoload.php')) {
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
// Required to load some methods only available at codeception/autoload.php
|
||||
if (stream_resolve_include_path(__DIR__ . '/vendor/codeception/codeception/autoload.php')) {
|
||||
require_once __DIR__ . '/vendor/codeception/codeception/autoload.php';
|
||||
}
|
||||
} elseif (stream_resolve_include_path('Codeception/autoload.php')) {
|
||||
require_once 'Codeception/autoload.php';
|
||||
} else {
|
||||
__c3_error('Codeception is not loaded. Please check that either PHAR or Composer package can be used');
|
||||
}
|
||||
}
|
||||
|
||||
// phpunit codecoverage shimming
|
||||
if (!class_exists('PHP_CodeCoverage') and class_exists('SebastianBergmann\CodeCoverage\CodeCoverage')) {
|
||||
class_alias('SebastianBergmann\CodeCoverage\CodeCoverage', 'PHP_CodeCoverage');
|
||||
class_alias('SebastianBergmann\CodeCoverage\Report\Text', 'PHP_CodeCoverage_Report_Text');
|
||||
class_alias('SebastianBergmann\CodeCoverage\Report\PHP', 'PHP_CodeCoverage_Report_PHP');
|
||||
class_alias('SebastianBergmann\CodeCoverage\Report\Clover', 'PHP_CodeCoverage_Report_Clover');
|
||||
class_alias('SebastianBergmann\CodeCoverage\Report\Crap4j', 'PHP_CodeCoverage_Report_Crap4j');
|
||||
class_alias('SebastianBergmann\CodeCoverage\Report\Html\Facade', 'PHP_CodeCoverage_Report_HTML');
|
||||
class_alias('SebastianBergmann\CodeCoverage\Report\Xml\Facade', 'PHP_CodeCoverage_Report_XML');
|
||||
class_alias('SebastianBergmann\CodeCoverage\Exception', 'PHP_CodeCoverage_Exception');
|
||||
}
|
||||
// phpunit version
|
||||
if (!class_exists('PHPUnit_Runner_Version') && class_exists('PHPUnit\Runner\Version')) {
|
||||
class_alias('PHPUnit\Runner\Version', 'PHPUnit_Runner_Version');
|
||||
}
|
||||
|
||||
// Load Codeception Config
|
||||
$configDistFile = realpath(__DIR__) . DIRECTORY_SEPARATOR . 'codeception.dist.yml';
|
||||
$configFile = realpath(__DIR__) . DIRECTORY_SEPARATOR . 'codeception.yml';
|
||||
|
||||
if (isset($_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_CONFIG'])) {
|
||||
$configFile = realpath(__DIR__) . DIRECTORY_SEPARATOR . $_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_CONFIG'];
|
||||
}
|
||||
if (file_exists($configFile)) {
|
||||
// Use codeception.yml for configuration.
|
||||
} elseif (file_exists($configDistFile)) {
|
||||
// Use codeception.dist.yml for configuration.
|
||||
$configFile = $configDistFile;
|
||||
} else {
|
||||
__c3_error(sprintf("Codeception config file '%s' not found", $configFile));
|
||||
}
|
||||
|
||||
try {
|
||||
\Codeception\Configuration::config($configFile);
|
||||
} catch (\Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
|
||||
if (!defined('C3_CODECOVERAGE_MEDIATE_STORAGE')) {
|
||||
|
||||
// workaround for 'zend_mm_heap corrupted' problem
|
||||
gc_disable();
|
||||
|
||||
$memoryLimit = ini_get('memory_limit');
|
||||
$requiredMemory = '384M';
|
||||
if ((substr($memoryLimit, -1) === 'M' && (int)$memoryLimit < (int)$requiredMemory)
|
||||
|| (substr($memoryLimit, -1) === 'K' && (int)$memoryLimit < (int)$requiredMemory * 1024)
|
||||
|| (ctype_digit($memoryLimit) && (int)$memoryLimit < (int)$requiredMemory * 1024 * 1024)
|
||||
) {
|
||||
ini_set('memory_limit', $requiredMemory);
|
||||
}
|
||||
|
||||
define('C3_CODECOVERAGE_MEDIATE_STORAGE', Codeception\Configuration::logDir() . 'c3tmp');
|
||||
define('C3_CODECOVERAGE_PROJECT_ROOT', Codeception\Configuration::projectDir());
|
||||
define('C3_CODECOVERAGE_TESTNAME', $_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE']);
|
||||
|
||||
function __c3_build_html_report(PHP_CodeCoverage $codeCoverage, $path)
|
||||
{
|
||||
$writer = new PHP_CodeCoverage_Report_HTML();
|
||||
$writer->process($codeCoverage, $path . 'html');
|
||||
|
||||
if (file_exists($path . '.tar')) {
|
||||
unlink($path . '.tar');
|
||||
}
|
||||
|
||||
$phar = new PharData($path . '.tar');
|
||||
$phar->setSignatureAlgorithm(Phar::SHA1);
|
||||
$files = $phar->buildFromDirectory($path . 'html');
|
||||
array_map('unlink', $files);
|
||||
|
||||
if (in_array('GZ', Phar::getSupportedCompression())) {
|
||||
if (file_exists($path . '.tar.gz')) {
|
||||
unlink($path . '.tar.gz');
|
||||
}
|
||||
|
||||
$phar->compress(\Phar::GZ);
|
||||
|
||||
// close the file so that we can rename it
|
||||
unset($phar);
|
||||
|
||||
unlink($path . '.tar');
|
||||
rename($path . '.tar.gz', $path . '.tar');
|
||||
}
|
||||
|
||||
return $path . '.tar';
|
||||
}
|
||||
|
||||
function __c3_build_clover_report(PHP_CodeCoverage $codeCoverage, $path)
|
||||
{
|
||||
$writer = new PHP_CodeCoverage_Report_Clover();
|
||||
$writer->process($codeCoverage, $path . '.clover.xml');
|
||||
|
||||
return $path . '.clover.xml';
|
||||
}
|
||||
|
||||
function __c3_build_crap4j_report(PHP_CodeCoverage $codeCoverage, $path)
|
||||
{
|
||||
$writer = new PHP_CodeCoverage_Report_Crap4j();
|
||||
$writer->process($codeCoverage, $path . '.crap4j.xml');
|
||||
|
||||
return $path . '.crap4j.xml';
|
||||
}
|
||||
|
||||
function __c3_build_phpunit_report(PHP_CodeCoverage $codeCoverage, $path)
|
||||
{
|
||||
$writer = new PHP_CodeCoverage_Report_XML(\PHPUnit_Runner_Version::id());
|
||||
$writer->process($codeCoverage, $path . 'phpunit');
|
||||
|
||||
if (file_exists($path . '.tar')) {
|
||||
unlink($path . '.tar');
|
||||
}
|
||||
|
||||
$phar = new PharData($path . '.tar');
|
||||
$phar->setSignatureAlgorithm(Phar::SHA1);
|
||||
$files = $phar->buildFromDirectory($path . 'phpunit');
|
||||
array_map('unlink', $files);
|
||||
|
||||
if (in_array('GZ', Phar::getSupportedCompression())) {
|
||||
if (file_exists($path . '.tar.gz')) {
|
||||
unlink($path . '.tar.gz');
|
||||
}
|
||||
|
||||
$phar->compress(\Phar::GZ);
|
||||
|
||||
// close the file so that we can rename it
|
||||
unset($phar);
|
||||
|
||||
unlink($path . '.tar');
|
||||
rename($path . '.tar.gz', $path . '.tar');
|
||||
}
|
||||
|
||||
return $path . '.tar';
|
||||
}
|
||||
|
||||
function __c3_send_file($filename)
|
||||
{
|
||||
if (!headers_sent()) {
|
||||
readfile($filename);
|
||||
}
|
||||
|
||||
return __c3_exit();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filename
|
||||
* @param bool $lock Lock the file for writing?
|
||||
* @return [null|PHP_CodeCoverage|\SebastianBergmann\CodeCoverage\CodeCoverage, resource]
|
||||
*/
|
||||
function __c3_factory($filename, $lock = false)
|
||||
{
|
||||
$file = null;
|
||||
if ($filename !== null && is_readable($filename)) {
|
||||
if ($lock) {
|
||||
$file = fopen($filename, 'r+');
|
||||
if (flock($file, LOCK_EX)) {
|
||||
$phpCoverage = unserialize(stream_get_contents($file));
|
||||
} else {
|
||||
__c3_error("Failed to acquire write-lock for $filename");
|
||||
}
|
||||
} else {
|
||||
$phpCoverage = unserialize(file_get_contents($filename));
|
||||
}
|
||||
|
||||
return array($phpCoverage, $file);
|
||||
} else {
|
||||
$phpCoverage = new PHP_CodeCoverage();
|
||||
}
|
||||
|
||||
if (isset($_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_SUITE'])) {
|
||||
$suite = $_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_SUITE'];
|
||||
try {
|
||||
$settings = \Codeception\Configuration::suiteSettings($suite, \Codeception\Configuration::config());
|
||||
} catch (Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
} else {
|
||||
$settings = \Codeception\Configuration::config();
|
||||
}
|
||||
|
||||
try {
|
||||
\Codeception\Coverage\Filter::setup($phpCoverage)
|
||||
->whiteList($settings)
|
||||
->blackList($settings);
|
||||
} catch (Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
|
||||
return array($phpCoverage, $file);
|
||||
}
|
||||
|
||||
function __c3_exit()
|
||||
{
|
||||
if (!isset($_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_DEBUG'])) {
|
||||
exit;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function __c3_clear()
|
||||
{
|
||||
\Codeception\Util\FileSystem::doEmptyDir(C3_CODECOVERAGE_MEDIATE_STORAGE);
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_dir(C3_CODECOVERAGE_MEDIATE_STORAGE)) {
|
||||
if (mkdir(C3_CODECOVERAGE_MEDIATE_STORAGE, 0777, true) === false) {
|
||||
__c3_error('Failed to create directory "' . C3_CODECOVERAGE_MEDIATE_STORAGE . '"');
|
||||
}
|
||||
}
|
||||
|
||||
// evaluate base path for c3-related files
|
||||
$path = realpath(C3_CODECOVERAGE_MEDIATE_STORAGE) . DIRECTORY_SEPARATOR . 'codecoverage';
|
||||
|
||||
$requestedC3Report = (strpos($_SERVER['REQUEST_URI'], 'c3/report') !== false);
|
||||
|
||||
$completeReport = $currentReport = $path . '.serialized';
|
||||
if ($requestedC3Report) {
|
||||
set_time_limit(0);
|
||||
|
||||
$route = ltrim(strrchr(rtrim($_SERVER['REQUEST_URI'], '/'), '/'), '/');
|
||||
|
||||
if ($route === 'clear') {
|
||||
__c3_clear();
|
||||
return __c3_exit();
|
||||
}
|
||||
|
||||
list($codeCoverage, ) = __c3_factory($completeReport);
|
||||
|
||||
switch ($route) {
|
||||
case 'html':
|
||||
try {
|
||||
__c3_send_file(__c3_build_html_report($codeCoverage, $path));
|
||||
} catch (Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
return __c3_exit();
|
||||
case 'clover':
|
||||
try {
|
||||
__c3_send_file(__c3_build_clover_report($codeCoverage, $path));
|
||||
} catch (Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
return __c3_exit();
|
||||
case 'crap4j':
|
||||
try {
|
||||
__c3_send_file(__c3_build_crap4j_report($codeCoverage, $path));
|
||||
} catch (Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
return __c3_exit();
|
||||
case 'serialized':
|
||||
try {
|
||||
__c3_send_file($completeReport);
|
||||
} catch (Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
return __c3_exit();
|
||||
case 'phpunit':
|
||||
try {
|
||||
__c3_send_file(__c3_build_phpunit_report($codeCoverage, $path));
|
||||
} catch (Exception $e) {
|
||||
__c3_error($e->getMessage());
|
||||
}
|
||||
return __c3_exit();
|
||||
}
|
||||
} else {
|
||||
list($codeCoverage, ) = __c3_factory(null);
|
||||
$codeCoverage->start(C3_CODECOVERAGE_TESTNAME);
|
||||
if (!array_key_exists('HTTP_X_CODECEPTION_CODECOVERAGE_DEBUG', $_SERVER)) {
|
||||
register_shutdown_function(
|
||||
function () use ($codeCoverage, $currentReport) {
|
||||
$codeCoverage->stop();
|
||||
if (!file_exists(dirname($currentReport))) { // verify directory exists
|
||||
if (!mkdir(dirname($currentReport), 0777, true)) {
|
||||
__c3_error("Can't write CodeCoverage report into $currentReport");
|
||||
}
|
||||
}
|
||||
|
||||
// This will either lock the existing report for writing and return it along with a file pointer,
|
||||
// or return a fresh PHP_CodeCoverage object without a file pointer. We'll merge the current request
|
||||
// into that coverage object, write it to disk, and release the lock. By doing this in the end of
|
||||
// the request, we avoid this scenario, where Request 2 overwrites the changes from Request 1:
|
||||
//
|
||||
// Time ->
|
||||
// Request 1 [ <read> <write> ]
|
||||
// Request 2 [ <read> <write> ]
|
||||
//
|
||||
// In addition, by locking the file for exclusive writing, we make sure no other request try to
|
||||
// read/write to the file at the same time as this request (leading to a corrupt file). flock() is a
|
||||
// blocking call, so it waits until an exclusive lock can be acquired before continuing.
|
||||
|
||||
list($existingCodeCoverage, $file) = __c3_factory($currentReport, true);
|
||||
$existingCodeCoverage->merge($codeCoverage);
|
||||
|
||||
if ($file === null) {
|
||||
file_put_contents($currentReport, serialize($existingCodeCoverage), LOCK_EX);
|
||||
} else {
|
||||
fseek($file, 0);
|
||||
fwrite($file, serialize($existingCodeCoverage));
|
||||
fflush($file);
|
||||
flock($file, LOCK_UN);
|
||||
fclose($file);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreEnd
|
@ -13,7 +13,7 @@ settings:
|
||||
coverage:
|
||||
c3_url: 'http://localhost:8080/index-test.php'
|
||||
enabled: true
|
||||
remote: false
|
||||
remote: true
|
||||
include:
|
||||
- ../actions/*
|
||||
- ../controllers/*
|
||||
|
@ -16,7 +16,7 @@ modules:
|
||||
- tests\codeception\_support\DynamicFixtureHelper
|
||||
config:
|
||||
WebDriver:
|
||||
url: 'http://localhost:8080/'
|
||||
url: 'http://localhost:8080/index-test.php'
|
||||
window_size: maximize
|
||||
browser: chrome
|
||||
port: 4444
|
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace humhub\modules\activity\tests\codeception\activities;
|
||||
|
||||
use Yii;
|
||||
use yii\helpers\Url;
|
||||
|
||||
/**
|
||||
* Description of TestActivity
|
||||
*
|
||||
* @author buddha
|
||||
*/
|
||||
class TestActivity extends \humhub\modules\activity\components\BaseActivity {
|
||||
|
||||
public $moduleId = 'test';
|
||||
|
||||
public $viewName = 'testNoView';
|
||||
|
||||
public function html()
|
||||
{
|
||||
return 'Content of no view activity';
|
||||
}
|
||||
|
||||
public function getUrl()
|
||||
{
|
||||
return Url::toRoute(['/user/account/edit']);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace humhub\modules\activity\tests\codeception\activities;
|
||||
|
||||
use Yii;
|
||||
use yii\helpers\Url;
|
||||
|
||||
/**
|
||||
* Description of TestActivity
|
||||
*
|
||||
* @author buddha
|
||||
*/
|
||||
class TestActivityDefaultLayout extends \humhub\modules\activity\components\BaseActivity {
|
||||
|
||||
public $moduleId = 'test';
|
||||
|
||||
public function html()
|
||||
{
|
||||
return 'Content of default layout activity';
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace humhub\modules\activity\tests\codeception\activities;
|
||||
|
||||
/**
|
||||
* Description of TestActivity
|
||||
*
|
||||
* @author buddha
|
||||
*/
|
||||
class TestViewActivity extends \humhub\modules\activity\components\BaseActivity {
|
||||
|
||||
public $moduleId = 'test';
|
||||
|
||||
public $viewName = 'testWithView';
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
/* @var $this \humhub\components\View */
|
||||
?>
|
||||
|
||||
<div>
|
||||
<h1>My special activity view layout without view</h1>
|
||||
<?= $content; ?>
|
||||
</div>
|
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
/* @var $this \humhub\components\View */
|
||||
?>
|
||||
|
||||
<div>
|
||||
<h1>My special activity view layout</h1>
|
||||
<?= $content; ?>
|
||||
</div>
|
@ -0,0 +1,5 @@
|
||||
<?php
|
||||
/* @var $this \humhub\components\View */
|
||||
?>
|
||||
|
||||
<h2>My special activity view content</h2>
|
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* @link https://www.humhub.org/
|
||||
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
|
||||
* @license https://www.humhub.com/licences
|
||||
*
|
||||
*/
|
||||
|
||||
namespace activity\functional;
|
||||
|
||||
use humhub\modules\activity\components\MailSummary;
|
||||
use humhub\modules\activity\models\MailSummaryForm;
|
||||
use humhub\modules\activity\tests\codeception\activities\TestActivity;
|
||||
use humhub\modules\content\activities\ContentCreated;
|
||||
use humhub\modules\post\models\Post;
|
||||
use humhub\modules\user\models\User;
|
||||
use activity\FunctionalTester;
|
||||
|
||||
class ActivityLinkCest
|
||||
{
|
||||
public function testSimpleActivityLink(FunctionalTester $I)
|
||||
{
|
||||
$I->wantTo('the activity link works');
|
||||
$I->amAdmin();
|
||||
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_DAILY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$activity = TestActivity::instance()->about(Post::findOne(1))->create();
|
||||
|
||||
$I->amOnRoute('/activity/link', ['id' => $activity->record->id]);
|
||||
$I->see('Account settings');
|
||||
}
|
||||
|
||||
public function testNonViewableNotification(FunctionalTester $I)
|
||||
{
|
||||
$I->wantTo('the activity link works');
|
||||
$I->amAdmin();
|
||||
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_DAILY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$activity = TestActivity::instance()->about(Post::findOne(1))->create();
|
||||
|
||||
$I->amUser1(true);
|
||||
$I->amOnRoute('/activity/link', ['id' => $activity->record->id]);
|
||||
$I->seeResponseCodeIs(403);
|
||||
}
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
/**
|
||||
* @link https://www.humhub.org/
|
||||
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
|
||||
* @license https://www.humhub.com/licences
|
||||
*
|
||||
*/
|
||||
|
||||
namespace activity\functional;
|
||||
|
||||
|
||||
use humhub\modules\comment\activities\NewComment;
|
||||
use humhub\modules\content\activities\ContentCreated;
|
||||
use humhub\modules\space\models\Space;
|
||||
use activity\FunctionalTester;
|
||||
use yii\helpers\Url;
|
||||
|
||||
class ActivitySettingsCest
|
||||
{
|
||||
public function testSimpleActivityLink(FunctionalTester $I)
|
||||
{
|
||||
$I->wantTo('the activity link works');
|
||||
$I->amAdmin();
|
||||
$I->amOnRoute('/activity/admin/defaults');
|
||||
|
||||
$I->submitForm('.panel-body form', [
|
||||
'MailSummaryForm[interval]' => '1',
|
||||
'MailSummaryForm[limitSpacesMode]' => '1',
|
||||
'MailSummaryForm[limitSpaces][]' => Space::findOne(1)->guid,
|
||||
'MailSummaryForm[activities]' => '',
|
||||
'MailSummaryForm[activities][]' => ContentCreated::class
|
||||
]);
|
||||
|
||||
$I->amOnRoute('/activity/user');
|
||||
$I->seeInField('#mailsummaryform-interval', '1' );
|
||||
$I->seeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '1');
|
||||
$I->seeOptionIsSelected('#mailsummaryform-limitspaces', 'Space 1');
|
||||
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\comment\activities\NewComment"]');
|
||||
$I->seeCheckboxIsChecked('[value="humhub\modules\content\activities\ContentCreated"]');
|
||||
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\like\activities\Liked"]');
|
||||
|
||||
$I->submitForm('.panel-body form', [
|
||||
'MailSummaryForm[interval]' => '2',
|
||||
'MailSummaryForm[limitSpacesMode]' => '',
|
||||
'MailSummaryForm[limitSpaces][]' => '',
|
||||
'MailSummaryForm[activities]' => '',
|
||||
'MailSummaryForm[activities][]' => NewComment::class
|
||||
]);
|
||||
|
||||
$I->seeInField('#mailsummaryform-interval', '2' );
|
||||
$I->dontSeeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '0');
|
||||
$I->dontSeeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '1');
|
||||
$I->dontSeeOptionIsSelected('#mailsummaryform-limitspaces', 'Space 1');
|
||||
$I->seeCheckboxIsChecked('[value="humhub\modules\comment\activities\NewComment"]');
|
||||
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\content\activities\ContentCreated"]');
|
||||
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\like\activities\Liked"]');
|
||||
|
||||
$I->see('Reset to defaults');
|
||||
$I->sendAjaxPostRequest(Url::toRoute('/activity/user/reset'));
|
||||
$I->amOnRoute('/activity/user');
|
||||
|
||||
$I->seeInField('#mailsummaryform-interval', '1' );
|
||||
$I->seeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '1');
|
||||
$I->seeOptionIsSelected('#mailsummaryform-limitspaces', 'Space 1');
|
||||
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\comment\activities\NewComment"]');
|
||||
$I->seeCheckboxIsChecked('[value="humhub\modules\content\activities\ContentCreated"]');
|
||||
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\like\activities\Liked"]');
|
||||
}
|
||||
|
||||
}
|
@ -3,12 +3,13 @@
|
||||
namespace humhub\modules\activity\tests\codeception\unit;
|
||||
|
||||
use humhub\modules\activity\models\Activity;
|
||||
use humhub\modules\activity\tests\codeception\activities\TestActivity;
|
||||
use Yii;
|
||||
use tests\codeception\_support\HumHubDbTestCase;
|
||||
use Codeception\Specify;
|
||||
use humhub\modules\post\models\Post;
|
||||
|
||||
class ActivityTestTest extends HumHubDbTestCase
|
||||
class ActivityTest extends HumHubDbTestCase
|
||||
{
|
||||
|
||||
use Specify;
|
||||
@ -18,7 +19,7 @@ class ActivityTestTest extends HumHubDbTestCase
|
||||
$this->becomeUser('User2');
|
||||
$post = Post::findOne(['id' => 1]);
|
||||
|
||||
$activity = activities\TestActivity::instance()->from(Yii::$app->user->getIdentity())->about($post);
|
||||
$activity = TestActivity::instance()->from(Yii::$app->user->getIdentity())->about($post);
|
||||
|
||||
// Test Originator
|
||||
$this->assertEquals($activity->originator->id, Yii::$app->user->getIdentity()->id, 'Originator id before save');
|
||||
@ -34,7 +35,7 @@ class ActivityTestTest extends HumHubDbTestCase
|
||||
|
||||
$activity->create();
|
||||
|
||||
$record = Activity::findOne(['class' => activities\TestActivity::class]);
|
||||
$record = Activity::findOne(['class' => TestActivity::class]);
|
||||
$this->assertEquals($record->module, 'test');
|
||||
$source = $record->getPolymorphicRelation();
|
||||
|
||||
@ -56,7 +57,7 @@ class ActivityTestTest extends HumHubDbTestCase
|
||||
public function testCreateActivityAboutOnly()
|
||||
{
|
||||
$post = Post::findOne(['id' => 1]);
|
||||
$activity = activities\TestActivity::instance()->about($post)->create();
|
||||
$activity = TestActivity::instance()->about($post)->create();
|
||||
$this->assertEquals($post->content->created_by, $activity->record->content->created_by);
|
||||
|
||||
$activity = Activity::findOne(['id' => $activity->record->id]);
|
||||
|
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace humhub\modules\activity\tests\codeception\unit;
|
||||
|
||||
use humhub\modules\activity\tests\codeception\activities\TestActivityDefaultLayout;
|
||||
use humhub\modules\activity\tests\codeception\activities\TestViewActivity;
|
||||
use humhub\modules\activity\tests\codeception\activities\TestActivity;
|
||||
use humhub\modules\post\models\Post;
|
||||
use humhub\modules\user\models\User;
|
||||
use tests\codeception\_support\HumHubDbTestCase;
|
||||
|
||||
class ActivityViewTest extends HumHubDbTestCase
|
||||
{
|
||||
public function testRenderStreamEntryWithActivityView()
|
||||
{
|
||||
$activity = TestViewActivity::instance()->from(User::findOne(['id' => 1]))
|
||||
->about(Post::findOne(['id' => 1]))->create();
|
||||
|
||||
$this->assertNotNull($activity->record);
|
||||
$wallout = $activity->record->getWallOut();
|
||||
$this->assertContains('My special activity view layout', $wallout);
|
||||
$this->assertContains('My special activity view content', $wallout);
|
||||
}
|
||||
|
||||
public function testRenderStreamEntryWithActivityWithoutView()
|
||||
{
|
||||
$activity = TestActivity::instance()->from(User::findOne(['id' => 1]))
|
||||
->about(Post::findOne(['id' => 1]))->create();
|
||||
|
||||
$this->assertNotNull($activity->record);
|
||||
$wallout = $activity->record->getWallOut();
|
||||
$this->assertContains('My special activity view layout without view', $wallout);
|
||||
$this->assertContains('Content of no view activity', $wallout);
|
||||
}
|
||||
|
||||
public function testRenderWithoutLayoutAndView()
|
||||
{
|
||||
$activity = TestActivityDefaultLayout::instance()->from(User::findOne(['id' => 1]))
|
||||
->about(Post::findOne(['id' => 1]))->create();
|
||||
|
||||
$this->assertNotNull($activity->record);
|
||||
$wallout = $activity->record->getWallOut();
|
||||
$this->assertContains('Content of default layout activity', $wallout);
|
||||
$this->assertContains('media-object img-rounded', $wallout);
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace humhub\modules\activity\tests\codeception\unit;
|
||||
|
||||
use humhub\modules\activity\models\Activity;
|
||||
use humhub\modules\activity\tests\codeception\activities\TestActivity;
|
||||
use humhub\modules\post\models\Post;
|
||||
use tests\codeception\_support\HumHubDbTestCase;
|
||||
|
||||
class DeleteActivityTest extends HumHubDbTestCase
|
||||
{
|
||||
public function testDeleteRecord()
|
||||
{
|
||||
$post = Post::findOne(1);
|
||||
$activity = TestActivity::instance()->about($post)->create();
|
||||
$record = $activity->record;
|
||||
$this->assertNotNull(Activity::findOne(['id' => $record->id]));
|
||||
$post->delete();
|
||||
$this->assertNull(Activity::findOne(['id' => $record->id]));
|
||||
}
|
||||
|
||||
public function testDeleteOriginator()
|
||||
{
|
||||
$post = Post::findOne(1);
|
||||
$activity = TestActivity::instance()->about($post)->create();
|
||||
$record = $activity->record;
|
||||
$this->assertNotNull(Activity::findOne(['id' => $record->id]));
|
||||
$post->createdBy->delete();
|
||||
$this->assertNull(Activity::findOne(['id' => $record->id]));
|
||||
}
|
||||
}
|
@ -12,6 +12,7 @@ namespace humhub\modules\activity\tests\codeception\unit;
|
||||
use Codeception\Module\Yii2;
|
||||
use humhub\modules\activity\components\MailSummary;
|
||||
use humhub\modules\activity\components\MailSummaryProcessor;
|
||||
use humhub\modules\activity\jobs\SendMailSummary;
|
||||
use humhub\modules\activity\models\MailSummaryForm;
|
||||
use humhub\modules\comment\activities\NewComment;
|
||||
use humhub\modules\comment\models\Comment;
|
||||
@ -26,7 +27,168 @@ use yii\swiftmailer\Message;
|
||||
|
||||
class MailSummaryTest extends HumHubDbTestCase
|
||||
{
|
||||
public function testMailSummaryDaylyProcessor()
|
||||
public function testHourlyProcess()
|
||||
{
|
||||
$this->becomeUser('Admin');
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_HOURLY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
MailSummaryProcessor::process(MailSummary::INTERVAL_HOURLY);
|
||||
|
||||
$this->assertMailSent(1);
|
||||
|
||||
/* @var $yiiModule Yii2 */
|
||||
$yiiModule = $this->getModule('Yii2');
|
||||
|
||||
/* @var $mail Message */
|
||||
$mail = $yiiModule->grabLastSentEmail();
|
||||
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
|
||||
$this->assertEquals('Latest news', $mail->getSubject());
|
||||
}
|
||||
|
||||
public function testDailyProcess()
|
||||
{
|
||||
$this->becomeUser('Admin');
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_DAILY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
MailSummaryProcessor::process(MailSummary::INTERVAL_DAILY);
|
||||
|
||||
$this->assertMailSent(1);
|
||||
|
||||
/* @var $yiiModule Yii2 */
|
||||
$yiiModule = $this->getModule('Yii2');
|
||||
|
||||
/* @var $mail Message */
|
||||
$mail = $yiiModule->grabLastSentEmail();
|
||||
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
|
||||
$this->assertEquals('Your daily summary', $mail->getSubject());
|
||||
}
|
||||
|
||||
public function testWeeklyProcess()
|
||||
{
|
||||
$this->becomeUser('Admin');
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_WEEKLY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
MailSummaryProcessor::process(MailSummary::INTERVAL_WEEKLY);
|
||||
|
||||
$this->assertMailSent(1);
|
||||
|
||||
/* @var $yiiModule Yii2 */
|
||||
$yiiModule = $this->getModule('Yii2');
|
||||
|
||||
/* @var $mail Message */
|
||||
$mail = $yiiModule->grabLastSentEmail();
|
||||
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
|
||||
$this->assertEquals('Your weekly summary', $mail->getSubject());
|
||||
}
|
||||
|
||||
public function testNoneProcess()
|
||||
{
|
||||
$this->becomeUser('Admin');
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_NONE,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
MailSummaryProcessor::process(MailSummary::INTERVAL_NONE);
|
||||
|
||||
$this->assertMailSent(0);
|
||||
}
|
||||
|
||||
public function testUserWithoutEmailProcessor()
|
||||
{
|
||||
$this->becomeUser('Admin');
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_DAILY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
$user1 = User::findOne(['id' => 2]);
|
||||
$user1->updateAttributes(['email' => null]);
|
||||
|
||||
MailSummaryProcessor::process(MailSummary::INTERVAL_DAILY);
|
||||
|
||||
$this->assertMailSent(0);
|
||||
}
|
||||
|
||||
public function testProcessByJob()
|
||||
{
|
||||
$this->becomeUser('Admin');
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_DAILY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
Yii::$app->queue->push(new SendMailSummary(['interval' => MailSummary::INTERVAL_DAILY]));
|
||||
|
||||
$this->assertMailSent(1);
|
||||
|
||||
/* @var $yiiModule Yii2 */
|
||||
$yiiModule = $this->getModule('Yii2');
|
||||
|
||||
/* @var $mail Message */
|
||||
$mail = $yiiModule->grabLastSentEmail();
|
||||
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
|
||||
$this->assertEquals('Your daily summary', $mail->getSubject());
|
||||
}
|
||||
|
||||
public function testInvalidProcessByJob()
|
||||
{
|
||||
$this->becomeUser('Admin');
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_DAILY,
|
||||
'activities' => [ContentCreated::class]
|
||||
]))->save();
|
||||
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
Yii::$app->queue->push(new SendMailSummary(['interval' => MailSummary::INTERVAL_NONE]));
|
||||
|
||||
$this->assertMailSent(0);
|
||||
}
|
||||
|
||||
public function testMailSummaryDailyProcessor()
|
||||
{
|
||||
$this->assertMailSent(0);
|
||||
|
||||
@ -34,16 +196,8 @@ class MailSummaryTest extends HumHubDbTestCase
|
||||
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Summary Test']);
|
||||
$this->assertTrue($post->save());
|
||||
|
||||
// Set Weekly Interval as default
|
||||
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
|
||||
|
||||
// Get sure no one receives a mail
|
||||
/*MailSummaryProcessor::process(MailSummary::INTERVAL_DAILY);
|
||||
MailSummaryProcessor::process(MailSummary::INTERVAL_WEEKLY);
|
||||
MailSummaryProcessor::process(MailSummary::INTERVAL_HOURLY);
|
||||
|
||||
$this->assertMailSent(0);*/
|
||||
|
||||
(new MailSummaryForm([
|
||||
'user' => User::findOne(['id' => 2]),
|
||||
'interval' => MailSummary::INTERVAL_DAILY,
|
||||
@ -59,12 +213,12 @@ class MailSummaryTest extends HumHubDbTestCase
|
||||
|
||||
/* @var $mail Message */
|
||||
$mail = $yiiModule->grabLastSentEmail();
|
||||
$test = $mail->getTo();
|
||||
|
||||
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
|
||||
$this->assertEquals('Your daily summary', $mail->getSubject());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testResetUserSettings()
|
||||
{
|
||||
$user2 = User::findOne(['id' => 3]);
|
||||
|
@ -1,12 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace humhub\modules\activity\tests\codeception\unit\activities;
|
||||
|
||||
/**
|
||||
* Description of TestActivity
|
||||
*
|
||||
* @author buddha
|
||||
*/
|
||||
class TestActivity extends \humhub\modules\activity\components\BaseActivity {
|
||||
public $moduleId = 'test';
|
||||
}
|
@ -8,6 +8,7 @@
|
||||
|
||||
namespace humhub\modules\activity\widgets;
|
||||
|
||||
use humhub\modules\activity\components\ActivityWebRenderer;
|
||||
use Yii;
|
||||
use humhub\modules\content\widgets\WallEntry;
|
||||
use humhub\modules\content\components\ContentActiveRecord;
|
||||
@ -26,7 +27,7 @@ class Activity extends WallEntry
|
||||
protected $themePath = 'modules/activity';
|
||||
|
||||
/**
|
||||
* @var Activity is the current activity object.
|
||||
* @var \humhub\modules\activity\models\Activity is the current activity object.
|
||||
*/
|
||||
public $activity;
|
||||
|
||||
@ -40,56 +41,8 @@ class Activity extends WallEntry
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
|
||||
// Possible Security Flaw: Check type!
|
||||
$type = $this->activity->type;
|
||||
|
||||
$source = $this->activity->getSource();
|
||||
|
||||
// Try to figure out wallEntryId of this activity
|
||||
$wallEntryId = 0;
|
||||
if ($source != null) {
|
||||
if ($source instanceof ContentActiveRecord || $source instanceof ContentAddonActiveRecord) {
|
||||
$wallEntryId = $source->content->getFirstWallEntryId();
|
||||
}
|
||||
}
|
||||
|
||||
// When element is assigned to a workspace, assign variable
|
||||
$space = null;
|
||||
if ($this->activity->content->space_id != '') {
|
||||
$space = $this->activity->content->space;
|
||||
}
|
||||
|
||||
// User that fired the activity
|
||||
$user = $this->activity->content->user;
|
||||
|
||||
if ($user == null) {
|
||||
Yii::warning('Skipping activity without valid user', 'warning');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Dertermine View
|
||||
if ($this->activity->module == '') {
|
||||
$view = '@humhub/modules/activity/views/activities/' . $this->activity->type;
|
||||
} else {
|
||||
$module = Yii::$app->getModule($this->activity->module, true);
|
||||
|
||||
// Autogenerate Module Path
|
||||
$path = str_replace(Yii::getAlias('@app'), '', $module->getBasePath());
|
||||
$view = '@app/' . $path . '/views/activities/' . $this->activity->type;
|
||||
}
|
||||
|
||||
// Activity Layout can access it
|
||||
$this->wallEntryId = $wallEntryId;
|
||||
|
||||
return $this->render($view, [
|
||||
'activity' => $this->activity,
|
||||
'wallEntryId' => $wallEntryId,
|
||||
'user' => $user,
|
||||
'target' => $source,
|
||||
'space' => $space,
|
||||
]);
|
||||
// The render logic is overwritten by models\Activity::getWallOut()
|
||||
return '';
|
||||
}
|
||||
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user