mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-16 03:09:38 +03:00
Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a218d5056 | ||
|
|
8dbc5cf9c6 | ||
|
|
d33f136660 | ||
|
|
173dad345e | ||
|
|
47b0eb6324 | ||
|
|
c35c37008d | ||
|
|
71e81615a3 | ||
|
|
611d37da04 | ||
|
|
ee400eece6 | ||
|
|
da7c686541 | ||
|
|
d0a7a8b890 | ||
|
|
28c706fee3 | ||
|
|
0e799a3857 | ||
|
|
b91d6e2bfa | ||
|
|
44315233d7 | ||
|
|
91efa601be | ||
|
|
18f86fbf9b | ||
|
|
e5a96b0cb0 | ||
|
|
526be33ab2 | ||
|
|
831f441879 | ||
|
|
ea16ad7e94 | ||
|
|
ba6eb54552 | ||
|
|
47e3ef1be2 | ||
|
|
7791599fb5 | ||
|
|
bbfb330b92 | ||
|
|
20729a618f |
2
.github/translators.txt
vendored
2
.github/translators.txt
vendored
@@ -132,3 +132,5 @@ Kauê Sena (kaue.sena.ks) :: Portuguese, Brazilian
|
||||
MatthieuParis :: French
|
||||
Douradinho :: Portuguese, Brazilian
|
||||
Gaku Yaguchi (tama11) :: Japanese
|
||||
johnroyer :: Chinese Traditional
|
||||
jackaaa :: Chinese Traditional
|
||||
|
||||
@@ -533,7 +533,8 @@ class PermissionService
|
||||
$allPermission = $this->currentUser() && $this->currentUser()->can($permission . '-all');
|
||||
$ownPermission = $this->currentUser() && $this->currentUser()->can($permission . '-own');
|
||||
$this->currentAction = 'view';
|
||||
$isOwner = $this->currentUser() && $this->currentUser()->id === $ownable->created_by;
|
||||
$ownerField = ($ownable instanceof Entity) ? 'owned_by' : 'created_by';
|
||||
$isOwner = $this->currentUser() && $this->currentUser()->id === $ownable->$ownerField;
|
||||
return ($allPermission || ($isOwner && $ownPermission));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
<?php namespace BookStack\Auth;
|
||||
|
||||
use BookStack\Actions\Activity;
|
||||
use BookStack\Api\ApiToken;
|
||||
use BookStack\Interfaces\Loggable;
|
||||
use BookStack\Model;
|
||||
use BookStack\Notifications\ResetPassword;
|
||||
use BookStack\Uploads\Image;
|
||||
use Carbon\Carbon;
|
||||
use Exception;
|
||||
use Illuminate\Auth\Authenticatable;
|
||||
use Illuminate\Auth\Passwords\CanResetPassword;
|
||||
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
|
||||
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
@@ -46,6 +47,8 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
*/
|
||||
protected $fillable = ['name', 'email'];
|
||||
|
||||
protected $casts = ['last_activity_at' => 'datetime'];
|
||||
|
||||
/**
|
||||
* The attributes excluded from the model's JSON form.
|
||||
* @var array
|
||||
@@ -181,7 +184,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
|
||||
/**
|
||||
* Get the social account associated with this user.
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
* @return HasMany
|
||||
*/
|
||||
public function socialAccounts()
|
||||
{
|
||||
@@ -218,7 +221,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
|
||||
try {
|
||||
$avatar = $this->avatar ? url($this->avatar->getThumb($size, $size, false)) : $default;
|
||||
} catch (\Exception $err) {
|
||||
} catch (Exception $err) {
|
||||
$avatar = $default;
|
||||
}
|
||||
return $avatar;
|
||||
@@ -226,7 +229,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
|
||||
/**
|
||||
* Get the avatar for the user.
|
||||
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
* @return BelongsTo
|
||||
*/
|
||||
public function avatar()
|
||||
{
|
||||
@@ -242,11 +245,16 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest activity instance for this user.
|
||||
* Get the last activity time for this user.
|
||||
*/
|
||||
public function latestActivity(): HasOne
|
||||
public function scopeWithLastActivityAt(Builder $query)
|
||||
{
|
||||
return $this->hasOne(Activity::class)->latest();
|
||||
$query->addSelect(['activities.created_at as last_activity_at'])
|
||||
->leftJoinSub(function (\Illuminate\Database\Query\Builder $query) {
|
||||
$query->from('activities')->select('user_id')
|
||||
->selectRaw('max(created_at) as created_at')
|
||||
->groupBy('user_id');
|
||||
}, 'activities', 'users.id', '=', 'activities.user_id');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -59,14 +59,10 @@ class UserRepo
|
||||
public function getAllUsersPaginatedAndSorted(int $count, array $sortData): LengthAwarePaginator
|
||||
{
|
||||
$sort = $sortData['sort'];
|
||||
if ($sort === 'latest_activity') {
|
||||
$sort = \BookStack\Actions\Activity::query()->select('created_at')
|
||||
->whereColumn('activities.user_id', 'users.id')
|
||||
->latest()
|
||||
->take(1);
|
||||
}
|
||||
|
||||
$query = User::query()->with(['roles', 'avatar', 'latestActivity'])
|
||||
$query = User::query()->select(['*'])
|
||||
->withLastActivityAt()
|
||||
->with(['roles', 'avatar'])
|
||||
->orderBy($sort, $sortData['order']);
|
||||
|
||||
if ($sortData['search']) {
|
||||
|
||||
@@ -35,7 +35,7 @@ class BookRepo
|
||||
*/
|
||||
public function getAllPaginated(int $count = 20, string $sort = 'name', string $order = 'asc'): LengthAwarePaginator
|
||||
{
|
||||
return Book::visible()->orderBy($sort, $order)->paginate($count);
|
||||
return Book::visible()->with('cover')->orderBy($sort, $order)->paginate($count);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -30,7 +30,7 @@ class BookshelfRepo
|
||||
public function getAllPaginated(int $count = 20, string $sort = 'name', string $order = 'asc'): LengthAwarePaginator
|
||||
{
|
||||
return Bookshelf::visible()
|
||||
->with('visibleBooks')
|
||||
->with(['visibleBooks', 'cover'])
|
||||
->orderBy($sort, $order)
|
||||
->paginate($count);
|
||||
}
|
||||
|
||||
@@ -210,10 +210,10 @@ class PageRepo
|
||||
}
|
||||
|
||||
$pageContent = new PageContent($page);
|
||||
if (isset($input['html'])) {
|
||||
$pageContent->setNewHTML($input['html']);
|
||||
} else {
|
||||
if (!empty($input['markdown'] ?? '')) {
|
||||
$pageContent->setNewMarkdown($input['markdown']);
|
||||
} else {
|
||||
$pageContent->setNewHTML($input['html']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
16
app/Entities/Tools/Markdown/CustomStrikeThroughExtension.php
Normal file
16
app/Entities/Tools/Markdown/CustomStrikeThroughExtension.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php namespace BookStack\Entities\Tools\Markdown;
|
||||
|
||||
use League\CommonMark\ConfigurableEnvironmentInterface;
|
||||
use League\CommonMark\Extension\ExtensionInterface;
|
||||
use League\CommonMark\Extension\Strikethrough\Strikethrough;
|
||||
use League\CommonMark\Extension\Strikethrough\StrikethroughDelimiterProcessor;
|
||||
|
||||
class CustomStrikeThroughExtension implements ExtensionInterface
|
||||
{
|
||||
|
||||
public function register(ConfigurableEnvironmentInterface $environment)
|
||||
{
|
||||
$environment->addDelimiterProcessor(new StrikethroughDelimiterProcessor());
|
||||
$environment->addInlineRenderer(Strikethrough::class, new CustomStrikethroughRenderer());
|
||||
}
|
||||
}
|
||||
24
app/Entities/Tools/Markdown/CustomStrikethroughRenderer.php
Normal file
24
app/Entities/Tools/Markdown/CustomStrikethroughRenderer.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php namespace BookStack\Entities\Tools\Markdown;
|
||||
|
||||
use League\CommonMark\ElementRendererInterface;
|
||||
use League\CommonMark\Extension\Strikethrough\Strikethrough;
|
||||
use League\CommonMark\HtmlElement;
|
||||
use League\CommonMark\Inline\Element\AbstractInline;
|
||||
use League\CommonMark\Inline\Renderer\InlineRendererInterface;
|
||||
|
||||
/**
|
||||
* This is a somewhat clone of the League\CommonMark\Extension\Strikethrough\StrikethroughRender
|
||||
* class but modified slightly to use <s> HTML tags instead of <del> in order to
|
||||
* match front-end markdown-it rendering.
|
||||
*/
|
||||
class CustomStrikethroughRenderer implements InlineRendererInterface
|
||||
{
|
||||
public function render(AbstractInline $inline, ElementRendererInterface $htmlRenderer)
|
||||
{
|
||||
if (!($inline instanceof Strikethrough)) {
|
||||
throw new \InvalidArgumentException('Incompatible inline type: ' . get_class($inline));
|
||||
}
|
||||
|
||||
return new HtmlElement('s', $inline->getData('attributes', []), $htmlRenderer->renderInlines($inline->children()));
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,14 @@
|
||||
<?php namespace BookStack\Entities\Tools;
|
||||
|
||||
use BookStack\Entities\Models\Page;
|
||||
use BookStack\Entities\Tools\Markdown\CustomStrikeThroughExtension;
|
||||
use DOMDocument;
|
||||
use DOMNodeList;
|
||||
use DOMXPath;
|
||||
use League\CommonMark\CommonMarkConverter;
|
||||
use League\CommonMark\Environment;
|
||||
use League\CommonMark\Extension\Table\TableExtension;
|
||||
use League\CommonMark\Extension\TaskList\TaskListExtension;
|
||||
|
||||
class PageContent
|
||||
{
|
||||
@@ -45,7 +49,11 @@ class PageContent
|
||||
*/
|
||||
protected function markdownToHtml(string $markdown): string
|
||||
{
|
||||
$converter = new CommonMarkConverter();
|
||||
$environment = Environment::createCommonMarkEnvironment();
|
||||
$environment->addExtension(new TableExtension());
|
||||
$environment->addExtension(new TaskListExtension());
|
||||
$environment->addExtension(new CustomStrikeThroughExtension());
|
||||
$converter = new CommonMarkConverter([], $environment);
|
||||
return $converter->convertToHtml($markdown);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ class UserController extends Controller
|
||||
'sort' => $request->get('sort', 'name'),
|
||||
];
|
||||
$users = $this->userRepo->getAllUsersPaginatedAndSorted(20, $listDetails);
|
||||
|
||||
$this->setPageTitle(trans('settings.users'));
|
||||
$users->appends($listDetails);
|
||||
return view('users.index', ['users' => $users, 'listDetails' => $listDetails]);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
use BookStack\Auth\User;
|
||||
use BookStack\Exceptions\HttpFetchException;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class UserAvatars
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"facade/ignition": "^1.16.4",
|
||||
"fideloper/proxy": "^4.4.1",
|
||||
"intervention/image": "^2.5.1",
|
||||
"laravel/framework": "^6.20",
|
||||
"laravel/framework": "^6.20.12",
|
||||
"laravel/socialite": "^5.1",
|
||||
"league/commonmark": "^1.5",
|
||||
"league/flysystem-aws-s3-v3": "^1.0.29",
|
||||
|
||||
253
composer.lock
generated
253
composer.lock
generated
@@ -4,20 +4,20 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "e89dcb5443300c86da774d0abd956d71",
|
||||
"content-hash": "733852116205eef580c11a9f5c0a044f",
|
||||
"packages": [
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.171.2",
|
||||
"version": "3.171.19",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "742663a85ec84647f74dea454d2dc45bba180f9d"
|
||||
"reference": "e786e4a8b2ec85b258833d0570ff6b61348cbdb6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/742663a85ec84647f74dea454d2dc45bba180f9d",
|
||||
"reference": "742663a85ec84647f74dea454d2dc45bba180f9d",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e786e4a8b2ec85b258833d0570ff6b61348cbdb6",
|
||||
"reference": "e786e4a8b2ec85b258833d0570ff6b61348cbdb6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -92,9 +92,9 @@
|
||||
"support": {
|
||||
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.171.2"
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.171.19"
|
||||
},
|
||||
"time": "2020-12-18T19:12:13+00:00"
|
||||
"time": "2021-01-15T19:26:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "barryvdh/laravel-dompdf",
|
||||
@@ -847,16 +847,16 @@
|
||||
},
|
||||
{
|
||||
"name": "egulias/email-validator",
|
||||
"version": "2.1.24",
|
||||
"version": "2.1.25",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/egulias/EmailValidator.git",
|
||||
"reference": "ca90a3291eee1538cd48ff25163240695bd95448"
|
||||
"reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ca90a3291eee1538cd48ff25163240695bd95448",
|
||||
"reference": "ca90a3291eee1538cd48ff25163240695bd95448",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4",
|
||||
"reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -903,7 +903,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/egulias/EmailValidator/issues",
|
||||
"source": "https://github.com/egulias/EmailValidator/tree/2.1.24"
|
||||
"source": "https://github.com/egulias/EmailValidator/tree/2.1.25"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -911,7 +911,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-11-14T15:56:27+00:00"
|
||||
"time": "2020-12-29T14:50:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "facade/flare-client-php",
|
||||
@@ -1706,16 +1706,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v6.20.7",
|
||||
"version": "v6.20.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "bdc79701b567c5f8ed44d212dd4a261b8300b9c3"
|
||||
"reference": "49f9db00a754517f07d365ee5b0806df82e37029"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/bdc79701b567c5f8ed44d212dd4a261b8300b9c3",
|
||||
"reference": "bdc79701b567c5f8ed44d212dd4a261b8300b9c3",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/49f9db00a754517f07d365ee5b0806df82e37029",
|
||||
"reference": "49f9db00a754517f07d365ee5b0806df82e37029",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1855,20 +1855,20 @@
|
||||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2020-12-08T15:31:27+00:00"
|
||||
"time": "2021-01-15T15:35:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/socialite",
|
||||
"version": "v5.1.2",
|
||||
"version": "v5.1.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/socialite.git",
|
||||
"reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7"
|
||||
"reference": "2e6beafe911a09f2300353c102d882e9d63f1f72"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/socialite/zipball/19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7",
|
||||
"reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7",
|
||||
"url": "https://api.github.com/repos/laravel/socialite/zipball/2e6beafe911a09f2300353c102d882e9d63f1f72",
|
||||
"reference": "2e6beafe911a09f2300353c102d882e9d63f1f72",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1924,7 +1924,7 @@
|
||||
"issues": "https://github.com/laravel/socialite/issues",
|
||||
"source": "https://github.com/laravel/socialite"
|
||||
},
|
||||
"time": "2020-12-04T15:30:50+00:00"
|
||||
"time": "2021-01-05T17:02:09+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/commonmark",
|
||||
@@ -2462,16 +2462,16 @@
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.42.0",
|
||||
"version": "2.43.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||
"reference": "d0463779663437392fe42ff339ebc0213bd55498"
|
||||
"reference": "d32c57d8389113742f4a88725a170236470012e2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d0463779663437392fe42ff339ebc0213bd55498",
|
||||
"reference": "d0463779663437392fe42ff339ebc0213bd55498",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d32c57d8389113742f4a88725a170236470012e2",
|
||||
"reference": "d32c57d8389113742f4a88725a170236470012e2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2551,7 +2551,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-11-28T14:25:28+00:00"
|
||||
"time": "2020-12-17T20:55:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nunomaduro/collision",
|
||||
@@ -3525,16 +3525,16 @@
|
||||
},
|
||||
{
|
||||
"name": "scrivo/highlight.php",
|
||||
"version": "v9.18.1.5",
|
||||
"version": "v9.18.1.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/scrivo/highlight.php.git",
|
||||
"reference": "fa75a865928a4a5d49e5e77faca6bd2f2410baaf"
|
||||
"reference": "44a3d4136edb5ad8551590bf90f437db80b2d466"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/fa75a865928a4a5d49e5e77faca6bd2f2410baaf",
|
||||
"reference": "fa75a865928a4a5d49e5e77faca6bd2f2410baaf",
|
||||
"url": "https://api.github.com/repos/scrivo/highlight.php/zipball/44a3d4136edb5ad8551590bf90f437db80b2d466",
|
||||
"reference": "44a3d4136edb5ad8551590bf90f437db80b2d466",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3548,9 +3548,6 @@
|
||||
"symfony/finder": "^2.8|^3.4",
|
||||
"symfony/var-dumper": "^2.8|^3.4"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-dom": "Needed to make use of the features in the utilities namespace"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
@@ -3600,20 +3597,20 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-11-22T06:07:40+00:00"
|
||||
"time": "2020-12-22T19:20:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "socialiteproviders/discord",
|
||||
"version": "4.1.0",
|
||||
"version": "4.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/SocialiteProviders/Discord.git",
|
||||
"reference": "34c62db509c9680e120982f9239db5ce905eb027"
|
||||
"reference": "c6eddeb07ace7473e82d02d4db852dfacf5ef574"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/SocialiteProviders/Discord/zipball/34c62db509c9680e120982f9239db5ce905eb027",
|
||||
"reference": "34c62db509c9680e120982f9239db5ce905eb027",
|
||||
"url": "https://api.github.com/repos/SocialiteProviders/Discord/zipball/c6eddeb07ace7473e82d02d4db852dfacf5ef574",
|
||||
"reference": "c6eddeb07ace7473e82d02d4db852dfacf5ef574",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3639,9 +3636,9 @@
|
||||
],
|
||||
"description": "Discord OAuth2 Provider for Laravel Socialite",
|
||||
"support": {
|
||||
"source": "https://github.com/SocialiteProviders/Discord/tree/4.1.0"
|
||||
"source": "https://github.com/SocialiteProviders/Discord/tree/4.1.1"
|
||||
},
|
||||
"time": "2020-12-01T23:10:59+00:00"
|
||||
"time": "2021-01-05T22:03:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "socialiteproviders/gitlab",
|
||||
@@ -3753,7 +3750,7 @@
|
||||
},
|
||||
{
|
||||
"name": "socialiteproviders/microsoft-azure",
|
||||
"version": "4.1.0",
|
||||
"version": "4.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/SocialiteProviders/Microsoft-Azure.git",
|
||||
@@ -3788,7 +3785,7 @@
|
||||
],
|
||||
"description": "Microsoft Azure OAuth2 Provider for Laravel Socialite",
|
||||
"support": {
|
||||
"source": "https://github.com/SocialiteProviders/Microsoft-Azure/tree/4.1.0"
|
||||
"source": "https://github.com/SocialiteProviders/Microsoft-Azure/tree/4.2.0"
|
||||
},
|
||||
"time": "2020-12-01T23:10:59+00:00"
|
||||
},
|
||||
@@ -3963,16 +3960,16 @@
|
||||
},
|
||||
{
|
||||
"name": "swiftmailer/swiftmailer",
|
||||
"version": "v6.2.4",
|
||||
"version": "v6.2.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/swiftmailer/swiftmailer.git",
|
||||
"reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e"
|
||||
"reference": "698a6a9f54d7eb321274de3ad19863802c879fb7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e",
|
||||
"reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e",
|
||||
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/698a6a9f54d7eb321274de3ad19863802c879fb7",
|
||||
"reference": "698a6a9f54d7eb321274de3ad19863802c879fb7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4022,7 +4019,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/swiftmailer/swiftmailer/issues",
|
||||
"source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.4"
|
||||
"source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4034,7 +4031,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-12-08T18:02:06+00:00"
|
||||
"time": "2021-01-12T09:35:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
@@ -4951,16 +4948,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41"
|
||||
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41",
|
||||
"reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
|
||||
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4972,7 +4969,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5010,7 +5007,7 @@
|
||||
"portable"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5026,20 +5023,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-iconv",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-iconv.git",
|
||||
"reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024"
|
||||
"reference": "b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c536646fdb4f29104dd26effc2fdcb9a5b085024",
|
||||
"reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6",
|
||||
"reference": "b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5051,7 +5048,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5090,7 +5087,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-iconv/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-iconv/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5106,20 +5103,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-idn",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||
"reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117"
|
||||
"reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117",
|
||||
"reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
|
||||
"reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5133,7 +5130,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5177,7 +5174,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5193,20 +5190,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
"reference": "727d1096295d807c309fb01a851577302394c897"
|
||||
"reference": "6e971c891537eb617a00bb07a43d182a6915faba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897",
|
||||
"reference": "727d1096295d807c309fb01a851577302394c897",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba",
|
||||
"reference": "6e971c891537eb617a00bb07a43d182a6915faba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5218,7 +5215,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5261,7 +5258,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5277,20 +5274,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T17:09:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531"
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531",
|
||||
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5302,7 +5299,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5341,7 +5338,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5357,20 +5354,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930"
|
||||
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930",
|
||||
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
|
||||
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5379,7 +5376,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5417,7 +5414,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5433,20 +5430,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php73",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php73.git",
|
||||
"reference": "8ff431c517be11c78c48a39a66d37431e26a6bed"
|
||||
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed",
|
||||
"reference": "8ff431c517be11c78c48a39a66d37431e26a6bed",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
|
||||
"reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5455,7 +5452,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5496,7 +5493,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-php73/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5512,20 +5509,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php80",
|
||||
"version": "v1.20.0",
|
||||
"version": "v1.22.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de"
|
||||
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
|
||||
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
|
||||
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5534,7 +5531,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.20-dev"
|
||||
"dev-main": "1.22-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
@@ -5579,7 +5576,7 @@
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0"
|
||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5595,7 +5592,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-10-23T14:02:19+00:00"
|
||||
"time": "2021-01-07T16:49:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
@@ -6214,16 +6211,16 @@
|
||||
"packages-dev": [
|
||||
{
|
||||
"name": "barryvdh/laravel-debugbar",
|
||||
"version": "v3.5.1",
|
||||
"version": "v3.5.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/barryvdh/laravel-debugbar.git",
|
||||
"reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc"
|
||||
"reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/233c10688f4c1a6e66ed2ef123038b1363d1bedc",
|
||||
"reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/cae0a8d1cb89b0f0522f65e60465e16d738e069b",
|
||||
"reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -6236,6 +6233,7 @@
|
||||
"symfony/finder": "^4.3|^5"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.3.3",
|
||||
"orchestra/testbench-dusk": "^4|^5|^6",
|
||||
"phpunit/phpunit": "^8.5|^9.0",
|
||||
"squizlabs/php_codesniffer": "^3.5"
|
||||
@@ -6282,7 +6280,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
|
||||
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.1"
|
||||
"source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -6290,7 +6288,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-09-07T19:32:39+00:00"
|
||||
"time": "2021-01-06T14:21:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "barryvdh/laravel-ide-helper",
|
||||
@@ -6432,16 +6430,16 @@
|
||||
},
|
||||
{
|
||||
"name": "composer/ca-bundle",
|
||||
"version": "1.2.8",
|
||||
"version": "1.2.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/ca-bundle.git",
|
||||
"reference": "8a7ecad675253e4654ea05505233285377405215"
|
||||
"reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/8a7ecad675253e4654ea05505233285377405215",
|
||||
"reference": "8a7ecad675253e4654ea05505233285377405215",
|
||||
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
|
||||
"reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -6450,14 +6448,15 @@
|
||||
"php": "^5.3.2 || ^7.0 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
|
||||
"phpstan/phpstan": "^0.12.55",
|
||||
"psr/log": "^1.0",
|
||||
"symfony/phpunit-bridge": "^4.2 || ^5",
|
||||
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
"dev-main": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -6487,7 +6486,7 @@
|
||||
"support": {
|
||||
"irc": "irc://irc.freenode.org/composer",
|
||||
"issues": "https://github.com/composer/ca-bundle/issues",
|
||||
"source": "https://github.com/composer/ca-bundle/tree/1.2.8"
|
||||
"source": "https://github.com/composer/ca-bundle/tree/1.2.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -6503,7 +6502,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2020-08-23T12:54:47+00:00"
|
||||
"time": "2021-01-12T12:10:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/composer",
|
||||
@@ -7595,16 +7594,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpspec/prophecy",
|
||||
"version": "1.12.1",
|
||||
"version": "1.12.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpspec/prophecy.git",
|
||||
"reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d"
|
||||
"reference": "245710e971a030f42e08f4912863805570f23d39"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d",
|
||||
"reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39",
|
||||
"reference": "245710e971a030f42e08f4912863805570f23d39",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7616,7 +7615,7 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"phpspec/phpspec": "^6.0",
|
||||
"phpunit/phpunit": "^8.0 || ^9.0 <9.3"
|
||||
"phpunit/phpunit": "^8.0 || ^9.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@@ -7656,9 +7655,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpspec/prophecy/issues",
|
||||
"source": "https://github.com/phpspec/prophecy/tree/1.12.1"
|
||||
"source": "https://github.com/phpspec/prophecy/tree/1.12.2"
|
||||
},
|
||||
"time": "2020-09-29T09:10:42+00:00"
|
||||
"time": "2020-12-19T10:15:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
|
||||
4
public/dist/app.js
vendored
4
public/dist/app.js
vendored
File diff suppressed because one or more lines are too long
2
public/dist/export-styles.css
vendored
2
public/dist/export-styles.css
vendored
File diff suppressed because one or more lines are too long
2
public/dist/styles.css
vendored
2
public/dist/styles.css
vendored
File diff suppressed because one or more lines are too long
@@ -74,7 +74,6 @@ class PageEditor {
|
||||
}
|
||||
|
||||
setInitialFocus() {
|
||||
console.log({'HAS': this.hasDefaultTitle});
|
||||
if (this.hasDefaultTitle) {
|
||||
return this.titleElem.select();
|
||||
}
|
||||
|
||||
@@ -422,7 +422,7 @@ class WysiwygEditor {
|
||||
this.imageUploadErrorText = this.$opts.imageUploadErrorText;
|
||||
this.isDarkMode = document.documentElement.classList.contains('dark-mode');
|
||||
|
||||
this.plugins = "image table textcolor paste link autolink fullscreen code customhr autosave lists codeeditor media";
|
||||
this.plugins = "image imagetools table textcolor paste link autolink fullscreen code customhr autosave lists codeeditor media";
|
||||
this.loadPlugins();
|
||||
|
||||
this.tinyMceConfig = this.getTinyMceConfig();
|
||||
|
||||
@@ -210,7 +210,7 @@ return [
|
||||
'pages_revisions' => 'Revisiones de página',
|
||||
'pages_revisions_named' => 'Revisiones de página para :pageName',
|
||||
'pages_revision_named' => 'Revisión de ágina para :pageName',
|
||||
'pages_revision_restored_from' => 'Restored from #:id; :summary',
|
||||
'pages_revision_restored_from' => 'Restaurado de #:id; :summary',
|
||||
'pages_revisions_created_by' => 'Creado por',
|
||||
'pages_revisions_date' => 'Fecha de revisión',
|
||||
'pages_revisions_number' => '#',
|
||||
|
||||
@@ -22,7 +22,7 @@ return [
|
||||
'meta_created_name' => 'Créé :timeLength par :user',
|
||||
'meta_updated' => 'Mis à jour :timeLength',
|
||||
'meta_updated_name' => 'Mis à jour :timeLength par :user',
|
||||
'meta_owned_name' => 'Owned by :user',
|
||||
'meta_owned_name' => 'Possédé par :user',
|
||||
'entity_select' => 'Sélectionner l\'entité',
|
||||
'images' => 'Images',
|
||||
'my_recent_drafts' => 'Mes brouillons récents',
|
||||
@@ -40,7 +40,7 @@ return [
|
||||
'permissions_intro' => 'Une fois activées ces permissions prendront la priorité sur tous les sets de permissions préexistants.',
|
||||
'permissions_enable' => 'Activer les permissions personnalisées',
|
||||
'permissions_save' => 'Enregistrer les permissions',
|
||||
'permissions_owner' => 'Owner',
|
||||
'permissions_owner' => 'Propriétaire',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Résultats de recherche',
|
||||
@@ -210,7 +210,7 @@ return [
|
||||
'pages_revisions' => 'Révisions de la page',
|
||||
'pages_revisions_named' => 'Révisions pour :pageName',
|
||||
'pages_revision_named' => 'Révision pour :pageName',
|
||||
'pages_revision_restored_from' => 'Restored from #:id; :summary',
|
||||
'pages_revision_restored_from' => 'Restauré à partir de #:id; :summary',
|
||||
'pages_revisions_created_by' => 'Créé par',
|
||||
'pages_revisions_date' => 'Date de révision',
|
||||
'pages_revisions_number' => '#',
|
||||
|
||||
@@ -175,10 +175,10 @@ return [
|
||||
'users_delete_named' => 'Supprimer l\'utilisateur :userName',
|
||||
'users_delete_warning' => 'Ceci va supprimer \':userName\' du système.',
|
||||
'users_delete_confirm' => 'Êtes-vous sûr(e) de vouloir supprimer cet utilisateur ?',
|
||||
'users_migrate_ownership' => 'Migrate Ownership',
|
||||
'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.',
|
||||
'users_none_selected' => 'No user selected',
|
||||
'users_delete_success' => 'User successfully removed',
|
||||
'users_migrate_ownership' => 'Migré propriété',
|
||||
'users_migrate_ownership_desc' => 'Sélectionnez un utilisateur ici si vous voulez qu\'un autre utilisateur devienne le propriétaire de tous les éléments actuellement détenus par cet utilisateur.',
|
||||
'users_none_selected' => 'Aucun utilisateur n\'a été séléctionné',
|
||||
'users_delete_success' => 'Utilisateur supprimé avec succès',
|
||||
'users_edit' => 'Modifier l\'utilisateur',
|
||||
'users_edit_profile' => 'Modifier le profil',
|
||||
'users_edit_success' => 'Utilisateur mis à jour avec succès',
|
||||
@@ -239,7 +239,7 @@ return [
|
||||
'ja' => '日本語',
|
||||
'ko' => '한국어',
|
||||
'nl' => 'Nederlands',
|
||||
'nb' => 'Norsk (Bokmål)',
|
||||
'nb' => 'Norvegien',
|
||||
'pl' => 'Polski',
|
||||
'pt_BR' => 'Português do Brasil',
|
||||
'ru' => 'Русский',
|
||||
|
||||
@@ -81,18 +81,18 @@ return [
|
||||
'maint_send_test_email_mail_greeting' => 'L\'invio delle email sembra funzionare!',
|
||||
'maint_send_test_email_mail_text' => 'Congratulazioni! Siccome hai ricevuto questa notifica email, le tue impostazioni sembrano essere configurate correttamente.',
|
||||
'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.',
|
||||
'maint_recycle_bin_open' => 'Open Recycle Bin',
|
||||
'maint_recycle_bin_open' => 'Apri il Cestino',
|
||||
|
||||
// Recycle Bin
|
||||
'recycle_bin' => 'Recycle Bin',
|
||||
'recycle_bin' => 'Cestino',
|
||||
'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
|
||||
'recycle_bin_deleted_item' => 'Deleted Item',
|
||||
'recycle_bin_deleted_by' => 'Deleted By',
|
||||
'recycle_bin_deleted_at' => 'Deletion Time',
|
||||
'recycle_bin_permanently_delete' => 'Permanently Delete',
|
||||
'recycle_bin_restore' => 'Restore',
|
||||
'recycle_bin_deleted_by' => 'Cancellato da',
|
||||
'recycle_bin_deleted_at' => 'Orario Cancellazione',
|
||||
'recycle_bin_permanently_delete' => 'Elimina Definitivamente',
|
||||
'recycle_bin_restore' => 'Ripristina',
|
||||
'recycle_bin_contents_empty' => 'The recycle bin is currently empty',
|
||||
'recycle_bin_empty' => 'Empty Recycle Bin',
|
||||
'recycle_bin_empty' => 'Svuota Cestino',
|
||||
'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?',
|
||||
'recycle_bin_destroy_confirm' => 'This action will permanently delete this item, along with any child elements listed below, from the system and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
|
||||
'recycle_bin_destroy_list' => 'Items to be Destroyed',
|
||||
@@ -109,8 +109,8 @@ return [
|
||||
'audit_event_filter_no_filter' => 'No Filter',
|
||||
'audit_deleted_item' => 'Deleted Item',
|
||||
'audit_deleted_item_name' => 'Name: :name',
|
||||
'audit_table_user' => 'User',
|
||||
'audit_table_event' => 'Event',
|
||||
'audit_table_user' => 'Utente',
|
||||
'audit_table_event' => 'Evento',
|
||||
'audit_table_related' => 'Related Item or Detail',
|
||||
'audit_table_date' => 'Activity Date',
|
||||
'audit_date_from' => 'Date Range From',
|
||||
@@ -177,8 +177,8 @@ return [
|
||||
'users_delete_confirm' => 'Sei sicuro di voler eliminare questo utente?',
|
||||
'users_migrate_ownership' => 'Migrate Ownership',
|
||||
'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.',
|
||||
'users_none_selected' => 'No user selected',
|
||||
'users_delete_success' => 'User successfully removed',
|
||||
'users_none_selected' => 'Nessun utente selezionato',
|
||||
'users_delete_success' => 'Utente rimosso con successo',
|
||||
'users_edit' => 'Modifica Utente',
|
||||
'users_edit_profile' => 'Modifica Profilo',
|
||||
'users_edit_success' => 'Utente aggiornato correttamente',
|
||||
|
||||
@@ -45,5 +45,5 @@ return [
|
||||
|
||||
// Other
|
||||
'commented_on' => 'прокомментировал',
|
||||
'permissions_update' => 'updated permissions',
|
||||
'permissions_update' => 'обновил разрешения',
|
||||
];
|
||||
|
||||
@@ -22,7 +22,7 @@ return [
|
||||
'meta_created_name' => ':user создал :timeLength',
|
||||
'meta_updated' => 'Обновлено :timeLength',
|
||||
'meta_updated_name' => ':user обновил :timeLength',
|
||||
'meta_owned_name' => 'Owned by :user',
|
||||
'meta_owned_name' => 'Владелец :user',
|
||||
'entity_select' => 'Выбор объекта',
|
||||
'images' => 'Изображения',
|
||||
'my_recent_drafts' => 'Мои последние черновики',
|
||||
@@ -40,7 +40,7 @@ return [
|
||||
'permissions_intro' => 'После включения опции эти разрешения будут иметь приоритет над любыми установленными разрешениями роли.',
|
||||
'permissions_enable' => 'Включение пользовательских разрешений',
|
||||
'permissions_save' => 'Сохранить разрешения',
|
||||
'permissions_owner' => 'Owner',
|
||||
'permissions_owner' => 'Владелец',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Результаты поиска',
|
||||
@@ -148,7 +148,7 @@ return [
|
||||
'chapters_create' => 'Создать новую главу',
|
||||
'chapters_delete' => 'Удалить главу',
|
||||
'chapters_delete_named' => 'Удалить главу :chapterName',
|
||||
'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.',
|
||||
'chapters_delete_explain' => 'Это действие удалит главу с названием \':chapterName\'. Все страницы, которые существуют в этой главе, также будут удалены.',
|
||||
'chapters_delete_confirm' => 'Вы действительно хотите удалить эту главу?',
|
||||
'chapters_edit' => 'Редактировать главу',
|
||||
'chapters_edit_named' => 'Редактировать главу :chapterName',
|
||||
@@ -210,7 +210,7 @@ return [
|
||||
'pages_revisions' => 'Версии страницы',
|
||||
'pages_revisions_named' => 'Версии страницы для :pageName',
|
||||
'pages_revision_named' => 'Версия страницы для :pageName',
|
||||
'pages_revision_restored_from' => 'Restored from #:id; :summary',
|
||||
'pages_revision_restored_from' => 'Восстановлено из #:id; :summary',
|
||||
'pages_revisions_created_by' => 'Создана',
|
||||
'pages_revisions_date' => 'Дата версии',
|
||||
'pages_revisions_number' => '#',
|
||||
|
||||
@@ -68,7 +68,7 @@ return [
|
||||
'maint' => 'Обслуживание',
|
||||
'maint_image_cleanup' => 'Очистка изображений',
|
||||
'maint_image_cleanup_desc' => "Сканирует содержимое страниц и предыдущих версий и определяет изображения, которые не используются. Убедитесь, что у вас есть резервная копия базы данных и папки изображений перед запуском этой функции.",
|
||||
'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
|
||||
'maint_delete_images_only_in_revisions' => 'Также удалять изображения, которые существуют только в старой версии страницы',
|
||||
'maint_image_cleanup_run' => 'Выполнить очистку',
|
||||
'maint_image_cleanup_warning' => 'Найдено :count возможно бесполезных изображений. Вы уверены, что хотите удалить эти изображения?',
|
||||
'maint_image_cleanup_success' => ':count возможно бесполезных изображений было найдено и удалено!',
|
||||
@@ -80,38 +80,38 @@ return [
|
||||
'maint_send_test_email_mail_subject' => 'Проверка электронной почты',
|
||||
'maint_send_test_email_mail_greeting' => 'Доставка электронной почты работает!',
|
||||
'maint_send_test_email_mail_text' => 'Поздравляем! Поскольку вы получили это письмо, электронная почта настроена правильно.',
|
||||
'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.',
|
||||
'maint_recycle_bin_open' => 'Open Recycle Bin',
|
||||
'maint_recycle_bin_desc' => 'Удаленные полки, книги, главы и страницы отправляются в корзину, чтобы они могли быть восстановлены или удалены навсегда. Более старые элементы в корзине могут быть автоматически удалены через некоторое время в зависимости от системной конфигурации.',
|
||||
'maint_recycle_bin_open' => 'Открыть корзину',
|
||||
|
||||
// Recycle Bin
|
||||
'recycle_bin' => 'Recycle Bin',
|
||||
'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
|
||||
'recycle_bin_deleted_item' => 'Deleted Item',
|
||||
'recycle_bin_deleted_by' => 'Deleted By',
|
||||
'recycle_bin_deleted_at' => 'Deletion Time',
|
||||
'recycle_bin_permanently_delete' => 'Permanently Delete',
|
||||
'recycle_bin_restore' => 'Restore',
|
||||
'recycle_bin_contents_empty' => 'The recycle bin is currently empty',
|
||||
'recycle_bin_empty' => 'Empty Recycle Bin',
|
||||
'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?',
|
||||
'recycle_bin_destroy_confirm' => 'This action will permanently delete this item, along with any child elements listed below, from the system and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
|
||||
'recycle_bin_destroy_list' => 'Items to be Destroyed',
|
||||
'recycle_bin_restore_list' => 'Items to be Restored',
|
||||
'recycle_bin_restore_confirm' => 'This action will restore the deleted item, including any child elements, to their original location. If the original location has since been deleted, and is now in the recycle bin, the parent item will also need to be restored.',
|
||||
'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.',
|
||||
'recycle_bin_destroy_notification' => 'Deleted :count total items from the recycle bin.',
|
||||
'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.',
|
||||
'recycle_bin' => 'Корзина',
|
||||
'recycle_bin_desc' => 'Здесь вы можете восстановить удаленные элементы или навсегда удалить их из системы. Этот список не отфильтрован в отличие от аналогичных списков действий в системе, где применяются фильтры.',
|
||||
'recycle_bin_deleted_item' => 'Удаленный элемент',
|
||||
'recycle_bin_deleted_by' => 'Удалён',
|
||||
'recycle_bin_deleted_at' => 'Время удаления',
|
||||
'recycle_bin_permanently_delete' => 'Удалить навсегда',
|
||||
'recycle_bin_restore' => 'Восстановить',
|
||||
'recycle_bin_contents_empty' => 'На данный момент корзина пуста',
|
||||
'recycle_bin_empty' => 'Очистить корзину',
|
||||
'recycle_bin_empty_confirm' => 'Это действие навсегда уничтожит все элементы в корзине, включая содержимое, содержащееся в каждом элементе. Вы уверены, что хотите очистить корзину?',
|
||||
'recycle_bin_destroy_confirm' => 'Это действие удалит этот элемент навсегда вместе с любыми дочерними элементами, перечисленными ниже, и вы не сможете восстановить этот контент. Вы уверены, что хотите навсегда удалить этот элемент?',
|
||||
'recycle_bin_destroy_list' => 'Элементы для удаления',
|
||||
'recycle_bin_restore_list' => 'Элементы для восстановления',
|
||||
'recycle_bin_restore_confirm' => 'Это действие восстановит удаленный элемент, включая дочерние, в исходное место. Если исходное место было удалено и теперь находится в корзине, родительский элемент также необходимо будет восстановить.',
|
||||
'recycle_bin_restore_deleted_parent' => 'Родитель этого элемента также был удален. Элементы будут удалены до тех пор, пока этот родитель не будет восстановлен.',
|
||||
'recycle_bin_destroy_notification' => 'Удалено :count элементов из корзины.',
|
||||
'recycle_bin_restore_notification' => 'Восстановлено :count элементов из корзины',
|
||||
|
||||
// Audit Log
|
||||
'audit' => 'Журнал аудита',
|
||||
'audit_desc' => 'Этот журнал аудита отображает список действий, отслеживаемых в системе. Этот список не отфильтрован в отличие от аналогичных списков действий в системе, где применяются фильтры разрешений.',
|
||||
'audit_desc' => 'Этот журнал аудита отображает список действий, отслеживаемых в системе. Этот список не отфильтрован в отличие от аналогичных списков действий в системе, где применяются фильтры.',
|
||||
'audit_event_filter' => 'Фильтр событий',
|
||||
'audit_event_filter_no_filter' => 'Без фильтра',
|
||||
'audit_deleted_item' => 'Удаленный элемент',
|
||||
'audit_deleted_item_name' => 'Имя: :name',
|
||||
'audit_table_user' => 'Пользователь',
|
||||
'audit_table_event' => 'Событие',
|
||||
'audit_table_related' => 'Related Item or Detail',
|
||||
'audit_table_related' => 'Связанный элемент',
|
||||
'audit_table_date' => 'Дата действия',
|
||||
'audit_date_from' => 'Диапазон даты от',
|
||||
'audit_date_to' => 'Диапазон даты до',
|
||||
@@ -157,7 +157,7 @@ return [
|
||||
'user_profile' => 'Профиль пользователя',
|
||||
'users_add_new' => 'Добавить пользователя',
|
||||
'users_search' => 'Поиск пользователей',
|
||||
'users_latest_activity' => 'Latest Activity',
|
||||
'users_latest_activity' => 'Последние действия',
|
||||
'users_details' => 'Данные пользователя',
|
||||
'users_details_desc' => 'Укажите имя и адрес электронной почты для этого пользователя. Адрес электронной почты будет использоваться для входа в приложение.',
|
||||
'users_details_desc_no_email' => 'Задайте имя для этого пользователя, чтобы другие могли его узнать.',
|
||||
@@ -173,12 +173,12 @@ return [
|
||||
'users_system_public' => 'Этот пользователь представляет любых гостевых пользователей, которые посещают ваше приложение. Он не может использоваться для входа в систему и назначается автоматически.',
|
||||
'users_delete' => 'Удалить пользователя',
|
||||
'users_delete_named' => 'Удалить пользователя :userName',
|
||||
'users_delete_warning' => 'Это полностью удалит пользователя с именем \':userName\' из системы.',
|
||||
'users_delete_warning' => 'Это полностью удалит пользователя \':userName\' из системы.',
|
||||
'users_delete_confirm' => 'Вы уверены что хотите удалить этого пользователя?',
|
||||
'users_migrate_ownership' => 'Migrate Ownership',
|
||||
'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.',
|
||||
'users_none_selected' => 'No user selected',
|
||||
'users_delete_success' => 'User successfully removed',
|
||||
'users_migrate_ownership' => 'Наследник контента',
|
||||
'users_migrate_ownership_desc' => 'Выберите пользователя, если вы хотите, чтобы он стал владельцем всех элементов, в настоящее время принадлежащих удаляемому пользователю.',
|
||||
'users_none_selected' => 'Пользователь не выбран',
|
||||
'users_delete_success' => 'Пользователь успешно удален',
|
||||
'users_edit' => 'Редактировать пользователя',
|
||||
'users_edit_profile' => 'Редактировать профиль',
|
||||
'users_edit_success' => 'Пользователь успешно обновлен',
|
||||
|
||||
@@ -45,5 +45,5 @@ return [
|
||||
|
||||
// Other
|
||||
'commented_on' => 'yorum yaptı',
|
||||
'permissions_update' => 'updated permissions',
|
||||
'permissions_update' => 'güncellenmiş izinler',
|
||||
];
|
||||
|
||||
@@ -40,7 +40,7 @@ return [
|
||||
'permissions_intro' => 'Etkinleştirildikten sonra bu izinler, diğer bütün izinlerden öncelikli olacaktır.',
|
||||
'permissions_enable' => 'Özelleştirilmiş Yetkileri Etkinleştir',
|
||||
'permissions_save' => 'İzinleri Kaydet',
|
||||
'permissions_owner' => 'Owner',
|
||||
'permissions_owner' => 'Sahip',
|
||||
|
||||
// Search
|
||||
'search_results' => 'Arama Sonuçları',
|
||||
@@ -268,7 +268,7 @@ return [
|
||||
'attachments_link_url' => 'Dosya bağlantısı',
|
||||
'attachments_link_url_hint' => 'Dosyanın veya sitenin url adresi',
|
||||
'attach' => 'Ekle',
|
||||
'attachments_insert_link' => 'Add Attachment Link to Page',
|
||||
'attachments_insert_link' => 'Sayfaya Bağlantı Ekle',
|
||||
'attachments_edit_file' => 'Dosyayı Düzenle',
|
||||
'attachments_edit_file_name' => 'Dosya Adı',
|
||||
'attachments_edit_drop_upload' => 'Üzerine yazılacak dosyaları sürükleyin veya seçin',
|
||||
|
||||
@@ -68,7 +68,7 @@ return [
|
||||
'maint' => 'Bakım',
|
||||
'maint_image_cleanup' => 'Görselleri Temizle',
|
||||
'maint_image_cleanup_desc' => "Sayfaları ve revizyon içeriklerini tarayarak hangi görsellerin ve çizimlerin kullanımda olduğunu ve hangilerinin gereksiz olduğunu tespit eder. Bunu başlatmadan önce veritabanının ve görsellerin tam bir yedeğinin alındığından emin olun.",
|
||||
'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
|
||||
'maint_delete_images_only_in_revisions' => 'Eski sayfa revizyonlarındaki görselleri de sil',
|
||||
'maint_image_cleanup_run' => 'Temizliği Başlat',
|
||||
'maint_image_cleanup_warning' => 'Muhtemelen kullanılmayan :count adet görsel bulundu. Bu görselleri silmek istediğinize emin misiniz?',
|
||||
'maint_image_cleanup_success' => 'Muhtemelen kullanılmayan :count adet görsel bulundu ve silindi!',
|
||||
@@ -80,41 +80,41 @@ return [
|
||||
'maint_send_test_email_mail_subject' => 'Deneme E-postası',
|
||||
'maint_send_test_email_mail_greeting' => 'E-posta iletimi çalışıyor gibi görünüyor!',
|
||||
'maint_send_test_email_mail_text' => 'Tebrikler! Eğer bu e-posta bildirimini alıyorsanız, e-posta ayarlarınız doğru bir şekilde ayarlanmış demektir.',
|
||||
'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.',
|
||||
'maint_recycle_bin_open' => 'Open Recycle Bin',
|
||||
'maint_recycle_bin_desc' => 'Silinen raflar, kitaplar, bölümler ve sayfalar geri dönüşüm kutusuna gönderilir, böylece geri yüklenebilir veya kalıcı olarak silinebilir. Geri dönüşüm kutusundaki daha eski öğeler, sistem yapılandırmasına bağlı olarak bir süre sonra otomatik olarak kaldırılabilir.',
|
||||
'maint_recycle_bin_open' => 'Geri Dönüşüm Kutusunu Aç',
|
||||
|
||||
// Recycle Bin
|
||||
'recycle_bin' => 'Recycle Bin',
|
||||
'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
|
||||
'recycle_bin_deleted_item' => 'Deleted Item',
|
||||
'recycle_bin_deleted_by' => 'Deleted By',
|
||||
'recycle_bin_deleted_at' => 'Deletion Time',
|
||||
'recycle_bin_permanently_delete' => 'Permanently Delete',
|
||||
'recycle_bin_restore' => 'Restore',
|
||||
'recycle_bin_contents_empty' => 'The recycle bin is currently empty',
|
||||
'recycle_bin_empty' => 'Empty Recycle Bin',
|
||||
'recycle_bin_empty_confirm' => 'This will permanently destroy all items in the recycle bin including content contained within each item. Are you sure you want to empty the recycle bin?',
|
||||
'recycle_bin_destroy_confirm' => 'This action will permanently delete this item, along with any child elements listed below, from the system and you will not be able to restore this content. Are you sure you want to permanently delete this item?',
|
||||
'recycle_bin_destroy_list' => 'Items to be Destroyed',
|
||||
'recycle_bin_restore_list' => 'Items to be Restored',
|
||||
'recycle_bin_restore_confirm' => 'This action will restore the deleted item, including any child elements, to their original location. If the original location has since been deleted, and is now in the recycle bin, the parent item will also need to be restored.',
|
||||
'recycle_bin_restore_deleted_parent' => 'The parent of this item has also been deleted. These will remain deleted until that parent is also restored.',
|
||||
'recycle_bin' => 'Geri Dönüşüm Kutusu',
|
||||
'recycle_bin_desc' => 'Burada silinen öğeleri geri yükleyebilir veya bunları sistemden kalıcı olarak kaldırmayı seçebilirsiniz. Bu liste, izin filtrelerinin uygulandığı sistemdeki benzer etkinlik listelerinden farklı olarak filtrelenmez.',
|
||||
'recycle_bin_deleted_item' => 'Silinen öge',
|
||||
'recycle_bin_deleted_by' => 'Tarafından silindi',
|
||||
'recycle_bin_deleted_at' => 'Silinme Zamanı',
|
||||
'recycle_bin_permanently_delete' => 'Kalıcı Olarak Sil',
|
||||
'recycle_bin_restore' => 'Geri Yükle',
|
||||
'recycle_bin_contents_empty' => 'Geri dönüşüm kutusu boş',
|
||||
'recycle_bin_empty' => 'Geri Dönüşüm Kutusunu Boşalt',
|
||||
'recycle_bin_empty_confirm' => 'Bu işlem, her bir öğenin içinde bulunan içerik de dahil olmak üzere geri dönüşüm kutusundaki tüm öğeleri kalıcı olarak imha edecektir. Geri dönüşüm kutusunu boşaltmak istediğinizden emin misiniz?',
|
||||
'recycle_bin_destroy_confirm' => 'Bu işlem, bu öğeyi kalıcı olarak ve aşağıda listelenen alt öğelerle birlikte sistemden silecek ve bu içeriği geri yükleyemeyeceksiniz. Bu öğeyi kalıcı olarak silmek istediğinizden emin misiniz?',
|
||||
'recycle_bin_destroy_list' => 'Kalıcı Olarak Silinecek Öğeler',
|
||||
'recycle_bin_restore_list' => 'Geri Yüklenecek Öğeler',
|
||||
'recycle_bin_restore_confirm' => 'Bu eylem, tüm alt öğeler dahil olmak üzere silinen öğeyi orijinal konumlarına geri yükleyecektir. Orijinal konum o zamandan beri silinmişse ve şimdi geri dönüşüm kutusunda bulunuyorsa, üst öğenin de geri yüklenmesi gerekecektir.',
|
||||
'recycle_bin_restore_deleted_parent' => 'Bu öğenin üst öğesi de silindi. Bunlar, üst öğe de geri yüklenene kadar silinmiş olarak kalacaktır.',
|
||||
'recycle_bin_destroy_notification' => 'Deleted :count total items from the recycle bin.',
|
||||
'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.',
|
||||
|
||||
// Audit Log
|
||||
'audit' => 'Audit Log',
|
||||
'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
|
||||
'audit_event_filter' => 'Event Filter',
|
||||
'audit_event_filter_no_filter' => 'No Filter',
|
||||
'audit_deleted_item' => 'Deleted Item',
|
||||
'audit_deleted_item_name' => 'Name: :name',
|
||||
'audit_table_user' => 'User',
|
||||
'audit_table_event' => 'Event',
|
||||
'audit_table_related' => 'Related Item or Detail',
|
||||
'audit_table_date' => 'Activity Date',
|
||||
'audit_date_from' => 'Date Range From',
|
||||
'audit_date_to' => 'Date Range To',
|
||||
'audit' => 'Denetim Kaydı',
|
||||
'audit_desc' => 'Bu denetim günlüğü, sistemde izlenen etkinliklerin bir listesini görüntüler. Bu liste, izin filtrelerinin uygulandığı sistemdeki benzer etkinlik listelerinden farklı olarak filtrelenmez.',
|
||||
'audit_event_filter' => 'Etkinlik Filtresi',
|
||||
'audit_event_filter_no_filter' => 'Filtre Yok',
|
||||
'audit_deleted_item' => 'Silinen Öge',
|
||||
'audit_deleted_item_name' => 'Isim: :name',
|
||||
'audit_table_user' => 'Kullanıcı',
|
||||
'audit_table_event' => 'Etkinlik',
|
||||
'audit_table_related' => 'İlgili Öğe veya Detay',
|
||||
'audit_table_date' => 'Aktivite Tarihi',
|
||||
'audit_date_from' => 'Tarih Aralığından',
|
||||
'audit_date_to' => 'Tarih Aralığına',
|
||||
|
||||
// Role Settings
|
||||
'roles' => 'Roller',
|
||||
@@ -157,7 +157,7 @@ return [
|
||||
'user_profile' => 'Kullanıcı Profili',
|
||||
'users_add_new' => 'Yeni Kullanıcı Ekle',
|
||||
'users_search' => 'Kullanıcı Ara',
|
||||
'users_latest_activity' => 'Latest Activity',
|
||||
'users_latest_activity' => 'Son Etkinlik',
|
||||
'users_details' => 'Kullanıcı Detayları',
|
||||
'users_details_desc' => 'Bu kullanıcı için gösterilecek bir isim ve e-posta adresi belirleyin. Buraya yazacağınız e-posta adresi, uygulamaya giriş yaparken kullanılacaktır.',
|
||||
'users_details_desc_no_email' => 'Diğer kullanıcılar tarafından tanınabilmesi için bir isim belirleyin.',
|
||||
@@ -175,10 +175,10 @@ return [
|
||||
'users_delete_named' => ':userName kullanıcısını sil ',
|
||||
'users_delete_warning' => 'Bu işlem \':userName\' kullanıcısını sistemden tamamen silecektir.',
|
||||
'users_delete_confirm' => 'Bu kullanıcıyı tamamen silmek istediğinize emin misiniz?',
|
||||
'users_migrate_ownership' => 'Migrate Ownership',
|
||||
'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.',
|
||||
'users_none_selected' => 'No user selected',
|
||||
'users_delete_success' => 'User successfully removed',
|
||||
'users_migrate_ownership' => 'Sahipliği Taşıyın',
|
||||
'users_migrate_ownership_desc' => 'Başka bir kullanıcının şu anda bu kullanıcıya ait olan tüm öğelerin sahibi olmasını istiyorsanız buradan bir kullanıcı seçin.',
|
||||
'users_none_selected' => 'Hiçbir kullanıcı seçilmedi',
|
||||
'users_delete_success' => 'Kullanıcı başarıyla kaldırıldı',
|
||||
'users_edit' => 'Kullanıcıyı Düzenle',
|
||||
'users_edit_profile' => 'Profili Düzenle',
|
||||
'users_edit_success' => 'Kullanıcı başarıyla güncellendi',
|
||||
|
||||
@@ -90,7 +90,7 @@ return [
|
||||
'required_without' => ':values değerinin bulunmuyor olması, :attribute alanını zorunlu kılar.',
|
||||
'required_without_all' => ':values değerlerinden hiçbirinin bulunmuyor olması, :attribute alanını zorunlu kılar.',
|
||||
'same' => ':attribute ve :other eşleşmelidir.',
|
||||
'safe_url' => 'The provided link may not be safe.',
|
||||
'safe_url' => 'Sağlanan bağlantı güvenli olmayabilir.',
|
||||
'size' => [
|
||||
'numeric' => ':attribute, :size boyutunda olmalıdır.',
|
||||
'file' => ':attribute, :size kilobayt olmalıdır.',
|
||||
|
||||
@@ -22,7 +22,7 @@ return [
|
||||
'meta_created_name' => '由 :user 创建于 :timeLength',
|
||||
'meta_updated' => '更新于 :timeLength',
|
||||
'meta_updated_name' => '由 :user 更新于 :timeLength',
|
||||
'meta_owned_name' => 'Owned by :user',
|
||||
'meta_owned_name' => '拥有者 :user',
|
||||
'entity_select' => '实体选择',
|
||||
'images' => '图片',
|
||||
'my_recent_drafts' => '我最近的草稿',
|
||||
@@ -40,7 +40,7 @@ return [
|
||||
'permissions_intro' => '本设置优先于每个用户角色本身所具有的权限。',
|
||||
'permissions_enable' => '启用自定义权限',
|
||||
'permissions_save' => '保存权限',
|
||||
'permissions_owner' => 'Owner',
|
||||
'permissions_owner' => '拥有者',
|
||||
|
||||
// Search
|
||||
'search_results' => '搜索结果',
|
||||
@@ -210,7 +210,7 @@ return [
|
||||
'pages_revisions' => '页面修订',
|
||||
'pages_revisions_named' => '“:pageName”页面修订',
|
||||
'pages_revision_named' => '“:pageName”页面修订',
|
||||
'pages_revision_restored_from' => 'Restored from #:id; :summary',
|
||||
'pages_revision_restored_from' => '从 #:id; :summary 恢复',
|
||||
'pages_revisions_created_by' => '创建者',
|
||||
'pages_revisions_date' => '修订日期',
|
||||
'pages_revisions_number' => '#',
|
||||
@@ -308,7 +308,7 @@ return [
|
||||
'comment_deleted_success' => '评论已删除',
|
||||
'comment_created_success' => '评论已添加',
|
||||
'comment_updated_success' => '评论已更新',
|
||||
'comment_delete_confirm' => '你确定要删除这条评论?',
|
||||
'comment_delete_confirm' => '您确定要删除这条评论?',
|
||||
'comment_in_reply_to' => '回复 :commentId',
|
||||
|
||||
// Revision
|
||||
|
||||
@@ -79,13 +79,13 @@ return [
|
||||
'maint_send_test_email_success' => '电子邮件已发送至 :address',
|
||||
'maint_send_test_email_mail_subject' => '测试电子邮件',
|
||||
'maint_send_test_email_mail_greeting' => '邮件发送功能看起来工作正常!',
|
||||
'maint_send_test_email_mail_text' => '恭喜!您收到了此邮件通知,你的电子邮件设置看起来配置正确。',
|
||||
'maint_recycle_bin_desc' => '被删除的书架、书籍、章节和页面会被存入回收站,你可以还原或永久删除它们。回收站中的较旧项目可能会在系统设置的一段时间后自动删除。',
|
||||
'maint_send_test_email_mail_text' => '恭喜!您收到了此邮件通知,您的电子邮件设置看起来已配置正确。',
|
||||
'maint_recycle_bin_desc' => '被删除的书架、书籍、章节和页面会被存入回收站,您可以还原或永久删除它们。回收站中较旧的项目可能会在系统设置的一段时间后被自动删除。',
|
||||
'maint_recycle_bin_open' => '打开回收站',
|
||||
|
||||
// Recycle Bin
|
||||
'recycle_bin' => '回收站',
|
||||
'recycle_bin_desc' => '在这里,您可以还原已删除的项目,或选择将其从系统中永久删除。与系统中应用了权限过滤器的类似活动列表不同,这个表是未经过滤的。',
|
||||
'recycle_bin_desc' => '在这里,您可以还原已删除的项目,或选择将其从系统中永久删除。与系统中过滤过的类似的活动记录不同,这个表会显示所有操作。',
|
||||
'recycle_bin_deleted_item' => '被删除的项目',
|
||||
'recycle_bin_deleted_by' => '删除者',
|
||||
'recycle_bin_deleted_at' => '删除时间',
|
||||
@@ -104,7 +104,7 @@ return [
|
||||
|
||||
// Audit Log
|
||||
'audit' => '审核日志',
|
||||
'audit_desc' => '该审核日志显示系统中跟踪的活动列表。与系统中应用了权限过滤器的类似活动列表不同,这个表是未经过滤的。',
|
||||
'audit_desc' => '这份审核日志显示所有被系统跟踪的活动。与系统中过滤过的类似的活动记录不同,这个表会显示所有操作。',
|
||||
'audit_event_filter' => '事件过滤器',
|
||||
'audit_event_filter_no_filter' => '无过滤器',
|
||||
'audit_deleted_item' => '被删除的项目',
|
||||
@@ -175,10 +175,10 @@ return [
|
||||
'users_delete_named' => '删除用户 :userName',
|
||||
'users_delete_warning' => '这将从系统中完全删除名为 \':userName\' 的用户。',
|
||||
'users_delete_confirm' => '您确定要删除这个用户?',
|
||||
'users_migrate_ownership' => 'Migrate Ownership',
|
||||
'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.',
|
||||
'users_none_selected' => 'No user selected',
|
||||
'users_delete_success' => 'User successfully removed',
|
||||
'users_migrate_ownership' => '迁移拥有权',
|
||||
'users_migrate_ownership_desc' => '如果您想要当前用户拥有的全部项目转移到另一个用户(更改拥有者),请在此处选择一个用户。',
|
||||
'users_none_selected' => '没有选中用户',
|
||||
'users_delete_success' => '已成功移除用户',
|
||||
'users_edit' => '编辑用户',
|
||||
'users_edit_profile' => '编辑资料',
|
||||
'users_edit_success' => '用户更新成功',
|
||||
@@ -239,7 +239,7 @@ return [
|
||||
'ja' => '日本語',
|
||||
'ko' => '한국어',
|
||||
'nl' => 'Nederlands',
|
||||
'nb' => 'Norsk (Bokmål)',
|
||||
'nb' => '挪威语 (Bokmål)',
|
||||
'pl' => 'Polski',
|
||||
'pt_BR' => 'Português do Brasil',
|
||||
'ru' => 'Русский',
|
||||
|
||||
@@ -45,5 +45,5 @@ return [
|
||||
|
||||
// Other
|
||||
'commented_on' => '評論',
|
||||
'permissions_update' => 'updated permissions',
|
||||
'permissions_update' => '更新權限',
|
||||
];
|
||||
|
||||
@@ -22,7 +22,7 @@ return [
|
||||
'meta_created_name' => '由 :user 建立於 :timeLength',
|
||||
'meta_updated' => '更新於 :timeLength',
|
||||
'meta_updated_name' => '由 :user 更新於 :timeLength',
|
||||
'meta_owned_name' => 'Owned by :user',
|
||||
'meta_owned_name' => ':user 所擁有',
|
||||
'entity_select' => '選擇項目',
|
||||
'images' => '圖片',
|
||||
'my_recent_drafts' => '我最近的草稿',
|
||||
@@ -40,7 +40,7 @@ return [
|
||||
'permissions_intro' => '本設定優先權高於每個使用者角色本身所具有的權限。',
|
||||
'permissions_enable' => '啟用自訂權限',
|
||||
'permissions_save' => '儲存權限',
|
||||
'permissions_owner' => 'Owner',
|
||||
'permissions_owner' => '擁有者',
|
||||
|
||||
// Search
|
||||
'search_results' => '搜尋結果',
|
||||
@@ -217,7 +217,7 @@ return [
|
||||
'pages_revisions_numbered' => '修訂編號:id',
|
||||
'pages_revisions_numbered_changes' => '修訂編號:id 更改',
|
||||
'pages_revisions_changelog' => '更新說明',
|
||||
'pages_revisions_changes' => '說明',
|
||||
'pages_revisions_changes' => '更新紀錄',
|
||||
'pages_revisions_current' => '目前版本',
|
||||
'pages_revisions_preview' => '預覽',
|
||||
'pages_revisions_restore' => '恢複',
|
||||
@@ -268,7 +268,7 @@ return [
|
||||
'attachments_link_url' => '連結到檔案',
|
||||
'attachments_link_url_hint' => '網站或檔案的網址',
|
||||
'attach' => '附加',
|
||||
'attachments_insert_link' => 'Add Attachment Link to Page',
|
||||
'attachments_insert_link' => '將附件連結增加到頁面',
|
||||
'attachments_edit_file' => '編輯檔案',
|
||||
'attachments_edit_file_name' => '檔案名稱',
|
||||
'attachments_edit_drop_upload' => '刪除檔案或點選這裡上傳並覆蓋',
|
||||
|
||||
@@ -68,7 +68,7 @@ return [
|
||||
'maint' => '維護',
|
||||
'maint_image_cleanup' => '清理圖像',
|
||||
'maint_image_cleanup_desc' => "掃描頁面和修訂內容以檢查哪些圖像是正在使用的以及哪些圖像是多余的。確保在運行前創建完整的數據庫和映像備份。",
|
||||
'maint_delete_images_only_in_revisions' => 'Also delete images that only exist in old page revisions',
|
||||
'maint_delete_images_only_in_revisions' => '包含刪除僅在舊頁面修訂版中存在的圖像',
|
||||
'maint_image_cleanup_run' => '運行清理',
|
||||
'maint_image_cleanup_warning' => '發現了:count 張可能未使用的圖像。您確定要刪除這些圖像嗎?',
|
||||
'maint_image_cleanup_success' => '找到並刪除了:count 張可能未使用的圖像!',
|
||||
@@ -80,11 +80,11 @@ return [
|
||||
'maint_send_test_email_mail_subject' => '測試郵件',
|
||||
'maint_send_test_email_mail_greeting' => '電子郵件傳遞似乎有效!',
|
||||
'maint_send_test_email_mail_text' => '恭喜你! 收到此電子郵件通知時,您的電子郵件設置已經認證成功。',
|
||||
'maint_recycle_bin_desc' => 'Deleted shelves, books, chapters & pages are sent to the recycle bin so they can be restored or permanently deleted. Older items in the recycle bin may be automatically removed after a while depending on system configuration.',
|
||||
'maint_recycle_bin_desc' => '刪除的書架,書籍,章節和頁面將發送到回收站,以便可以還原或永久刪除它們。 回收站中的較舊項目可能會在一段時間後自動刪除,具體取決於系統配置。',
|
||||
'maint_recycle_bin_open' => 'Open Recycle Bin',
|
||||
|
||||
// Recycle Bin
|
||||
'recycle_bin' => 'Recycle Bin',
|
||||
'recycle_bin' => '資源回收筒',
|
||||
'recycle_bin_desc' => 'Here you can restore items that have been deleted or choose to permanently remove them from the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
|
||||
'recycle_bin_deleted_item' => 'Deleted Item',
|
||||
'recycle_bin_deleted_by' => 'Deleted By',
|
||||
@@ -103,16 +103,16 @@ return [
|
||||
'recycle_bin_restore_notification' => 'Restored :count total items from the recycle bin.',
|
||||
|
||||
// Audit Log
|
||||
'audit' => 'Audit Log',
|
||||
'audit' => '稽核記錄',
|
||||
'audit_desc' => 'This audit log displays a list of activities tracked in the system. This list is unfiltered unlike similar activity lists in the system where permission filters are applied.',
|
||||
'audit_event_filter' => 'Event Filter',
|
||||
'audit_event_filter_no_filter' => 'No Filter',
|
||||
'audit_deleted_item' => 'Deleted Item',
|
||||
'audit_deleted_item_name' => 'Name: :name',
|
||||
'audit_table_user' => 'User',
|
||||
'audit_table_event' => 'Event',
|
||||
'audit_table_user' => '使用者',
|
||||
'audit_table_event' => '活動',
|
||||
'audit_table_related' => 'Related Item or Detail',
|
||||
'audit_table_date' => 'Activity Date',
|
||||
'audit_table_date' => '最後活動日期',
|
||||
'audit_date_from' => 'Date Range From',
|
||||
'audit_date_to' => 'Date Range To',
|
||||
|
||||
@@ -157,7 +157,7 @@ return [
|
||||
'user_profile' => '使用者資料',
|
||||
'users_add_new' => '加入使用者',
|
||||
'users_search' => '搜尋使用者',
|
||||
'users_latest_activity' => 'Latest Activity',
|
||||
'users_latest_activity' => '最新活動',
|
||||
'users_details' => '用戶詳情',
|
||||
'users_details_desc' => '請設置用戶的顯示名稱和電子郵件地址, 該電子郵件地址將用於登錄該應用。',
|
||||
'users_details_desc_no_email' => '設置一個用戶的顯示名稱,以便其他人可以認出你。',
|
||||
@@ -177,7 +177,7 @@ return [
|
||||
'users_delete_confirm' => '您確定要刪除這個使用者?',
|
||||
'users_migrate_ownership' => 'Migrate Ownership',
|
||||
'users_migrate_ownership_desc' => 'Select a user here if you want another user to become the owner of all items currently owned by this user.',
|
||||
'users_none_selected' => 'No user selected',
|
||||
'users_none_selected' => '沒有選定的使用者',
|
||||
'users_delete_success' => 'User successfully removed',
|
||||
'users_edit' => '編輯使用者',
|
||||
'users_edit_profile' => '編輯資料',
|
||||
|
||||
@@ -28,6 +28,7 @@ table.table {
|
||||
padding: $-s $-s;
|
||||
vertical-align: middle;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
th {
|
||||
font-weight: bold;
|
||||
|
||||
@@ -3,10 +3,8 @@
|
||||
@section('body')
|
||||
<div class="container small">
|
||||
|
||||
<div class="grid left-focus v-center no-row-gap">
|
||||
<div class="py-m">
|
||||
@include('settings.navbar', ['selected' => 'maintenance'])
|
||||
</div>
|
||||
<div class="py-m">
|
||||
@include('settings.navbar', ['selected' => 'maintenance'])
|
||||
</div>
|
||||
|
||||
<div class="card content-wrap auto-height">
|
||||
|
||||
@@ -3,10 +3,8 @@
|
||||
@section('body')
|
||||
<div class="container">
|
||||
|
||||
<div class="grid left-focus v-center no-row-gap">
|
||||
<div class="py-m">
|
||||
@include('settings.navbar', ['selected' => 'maintenance'])
|
||||
</div>
|
||||
<div class="py-m">
|
||||
@include('settings.navbar', ['selected' => 'maintenance'])
|
||||
</div>
|
||||
|
||||
<div class="card content-wrap auto-height">
|
||||
@@ -41,10 +39,10 @@
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>{{ trans('settings.recycle_bin_deleted_item') }}</th>
|
||||
<th>{{ trans('settings.recycle_bin_deleted_by') }}</th>
|
||||
<th>{{ trans('settings.recycle_bin_deleted_at') }}</th>
|
||||
<th></th>
|
||||
<th width="50%">{{ trans('settings.recycle_bin_deleted_item') }}</th>
|
||||
<th width="20%">{{ trans('settings.recycle_bin_deleted_by') }}</th>
|
||||
<th width="15%">{{ trans('settings.recycle_bin_deleted_at') }}</th>
|
||||
<th width="15%"></th>
|
||||
</tr>
|
||||
@if(count($deletions) === 0)
|
||||
<tr>
|
||||
|
||||
@@ -3,10 +3,8 @@
|
||||
@section('body')
|
||||
<div class="container small">
|
||||
|
||||
<div class="grid left-focus v-center no-row-gap">
|
||||
<div class="py-m">
|
||||
@include('settings.navbar', ['selected' => 'maintenance'])
|
||||
</div>
|
||||
<div class="py-m">
|
||||
@include('settings.navbar', ['selected' => 'maintenance'])
|
||||
</div>
|
||||
|
||||
<div class="card content-wrap auto-height">
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
</th>
|
||||
<th>{{ trans('settings.role_user_roles') }}</th>
|
||||
<th class="text-right">
|
||||
<a href="{{ sortUrl('/settings/users', $listDetails, ['sort' => 'latest_activity']) }}">{{ trans('settings.users_latest_activity') }}</a>
|
||||
<a href="{{ sortUrl('/settings/users', $listDetails, ['sort' => 'last_activity_at']) }}">{{ trans('settings.users_latest_activity') }}</a>
|
||||
</th>
|
||||
</tr>
|
||||
@foreach($users as $user)
|
||||
@@ -58,8 +58,8 @@
|
||||
@endforeach
|
||||
</td>
|
||||
<td class="text-right text-muted">
|
||||
@if($user->latestActivity)
|
||||
<small title="{{ $user->latestActivity->created_at->format('Y-m-d H:i:s') }}">{{ $user->latestActivity->created_at->diffForHumans() }}</small>
|
||||
@if($user->last_activity_at)
|
||||
<small title="{{ $user->last_activity_at->format('Y-m-d H:i:s') }}">{{ $user->last_activity_at->diffForHumans() }}</small>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -420,4 +420,63 @@ class PageContentTest extends TestCase
|
||||
$page->refresh();
|
||||
$this->assertEquals('"Hello & welcome"', $page->text);
|
||||
}
|
||||
|
||||
public function test_page_markdown_table_rendering()
|
||||
{
|
||||
$this->asEditor();
|
||||
$page = Page::query()->first();
|
||||
|
||||
$content = '| Syntax | Description |
|
||||
| ----------- | ----------- |
|
||||
| Header | Title |
|
||||
| Paragraph | Text |';
|
||||
$this->put($page->getUrl(), [
|
||||
'name' => $page->name, 'markdown' => $content,
|
||||
'html' => '', 'summary' => ''
|
||||
]);
|
||||
|
||||
$page->refresh();
|
||||
$this->assertStringContainsString('</tbody>', $page->html);
|
||||
|
||||
$pageView = $this->get($page->getUrl());
|
||||
$pageView->assertElementExists('.page-content table tbody td');
|
||||
}
|
||||
|
||||
public function test_page_markdown_task_list_rendering()
|
||||
{
|
||||
$this->asEditor();
|
||||
$page = Page::query()->first();
|
||||
|
||||
$content = '- [ ] Item a
|
||||
- [x] Item b';
|
||||
$this->put($page->getUrl(), [
|
||||
'name' => $page->name, 'markdown' => $content,
|
||||
'html' => '', 'summary' => ''
|
||||
]);
|
||||
|
||||
$page->refresh();
|
||||
$this->assertStringContainsString('input', $page->html);
|
||||
$this->assertStringContainsString('type="checkbox"', $page->html);
|
||||
|
||||
$pageView = $this->get($page->getUrl());
|
||||
$pageView->assertElementExists('.page-content input[type=checkbox]');
|
||||
}
|
||||
|
||||
public function test_page_markdown_strikethrough_rendering()
|
||||
{
|
||||
$this->asEditor();
|
||||
$page = Page::query()->first();
|
||||
|
||||
$content = '~~some crossed out text~~';
|
||||
$this->put($page->getUrl(), [
|
||||
'name' => $page->name, 'markdown' => $content,
|
||||
'html' => '', 'summary' => ''
|
||||
]);
|
||||
|
||||
$page->refresh();
|
||||
$this->assertStringMatchesFormat('%A<s%A>some crossed out text</s>%A', $page->html);
|
||||
|
||||
$pageView = $this->get($page->getUrl());
|
||||
$pageView->assertElementExists('.page-content p > s');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,40 @@
|
||||
<?php namespace Tests\Entity;
|
||||
|
||||
use BookStack\Entities\Models\Book;
|
||||
use BookStack\Entities\Models\Page;
|
||||
use Tests\TestCase;
|
||||
|
||||
class PageTest extends TestCase
|
||||
{
|
||||
public function test_page_creation_with_markdown_content()
|
||||
{
|
||||
$this->setSettings(['app-editor' => 'markdown']);
|
||||
$book = Book::query()->first();
|
||||
|
||||
$this->asEditor()->get($book->getUrl('/create-page'));
|
||||
$draft = Page::query()->where('book_id', '=', $book->id)
|
||||
->where('draft', '=', true)->first();
|
||||
|
||||
$details = [
|
||||
'markdown' => '# a title',
|
||||
'html' => '<h1>a title</h1>',
|
||||
'name' => 'my page',
|
||||
];
|
||||
$resp = $this->post($book->getUrl("/draft/{$draft->id}"), $details);
|
||||
$resp->assertRedirect();
|
||||
|
||||
$this->assertDatabaseHas('pages', [
|
||||
'markdown' => $details['markdown'],
|
||||
'name' => $details['name'],
|
||||
'id' => $draft->id,
|
||||
'draft' => false
|
||||
]);
|
||||
|
||||
$draft->refresh();
|
||||
$resp = $this->get($draft->getUrl("/edit"));
|
||||
$resp->assertSee("# a title");
|
||||
}
|
||||
|
||||
public function test_page_delete()
|
||||
{
|
||||
$page = Page::query()->first();
|
||||
@@ -24,4 +54,95 @@ class PageTest extends TestCase
|
||||
$redirectReq = $this->get($deleteReq->baseResponse->headers->get('location'));
|
||||
$redirectReq->assertNotificationContains('Page Successfully Deleted');
|
||||
}
|
||||
|
||||
public function test_page_copy()
|
||||
{
|
||||
$page = Page::first();
|
||||
$page->html = '<p>This is some test content</p>';
|
||||
$page->save();
|
||||
|
||||
$currentBook = $page->book;
|
||||
$newBook = Book::where('id', '!=', $currentBook->id)->first();
|
||||
|
||||
$resp = $this->asEditor()->get($page->getUrl('/copy'));
|
||||
$resp->assertSee('Copy Page');
|
||||
|
||||
$movePageResp = $this->post($page->getUrl('/copy'), [
|
||||
'entity_selection' => 'book:' . $newBook->id,
|
||||
'name' => 'My copied test page'
|
||||
]);
|
||||
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
|
||||
|
||||
$movePageResp->assertRedirect($pageCopy->getUrl());
|
||||
$this->assertTrue($pageCopy->book->id == $newBook->id, 'Page was copied to correct book');
|
||||
$this->assertStringContainsString('This is some test content', $pageCopy->html);
|
||||
}
|
||||
|
||||
public function test_page_copy_with_markdown_has_both_html_and_markdown()
|
||||
{
|
||||
$page = Page::first();
|
||||
$page->html = '<h1>This is some test content</h1>';
|
||||
$page->markdown = '# This is some test content';
|
||||
$page->save();
|
||||
$newBook = Book::where('id', '!=', $page->book->id)->first();
|
||||
|
||||
$this->asEditor()->post($page->getUrl('/copy'), [
|
||||
'entity_selection' => 'book:' . $newBook->id,
|
||||
'name' => 'My copied test page'
|
||||
]);
|
||||
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
|
||||
|
||||
$this->assertStringContainsString('This is some test content', $pageCopy->html);
|
||||
$this->assertEquals('# This is some test content', $pageCopy->markdown);
|
||||
}
|
||||
|
||||
public function test_page_copy_with_no_destination()
|
||||
{
|
||||
$page = Page::first();
|
||||
$currentBook = $page->book;
|
||||
|
||||
$resp = $this->asEditor()->get($page->getUrl('/copy'));
|
||||
$resp->assertSee('Copy Page');
|
||||
|
||||
$movePageResp = $this->post($page->getUrl('/copy'), [
|
||||
'name' => 'My copied test page'
|
||||
]);
|
||||
|
||||
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
|
||||
|
||||
$movePageResp->assertRedirect($pageCopy->getUrl());
|
||||
$this->assertTrue($pageCopy->book->id == $currentBook->id, 'Page was copied to correct book');
|
||||
$this->assertTrue($pageCopy->id !== $page->id, 'Page copy is not the same instance');
|
||||
}
|
||||
|
||||
public function test_page_can_be_copied_without_edit_permission()
|
||||
{
|
||||
$page = Page::first();
|
||||
$currentBook = $page->book;
|
||||
$newBook = Book::where('id', '!=', $currentBook->id)->first();
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$resp = $this->actingAs($viewer)->get($page->getUrl());
|
||||
$resp->assertDontSee($page->getUrl('/copy'));
|
||||
|
||||
$newBook->owned_by = $viewer->id;
|
||||
$newBook->save();
|
||||
$this->giveUserPermissions($viewer, ['page-create-own']);
|
||||
$this->regenEntityPermissions($newBook);
|
||||
|
||||
$resp = $this->actingAs($viewer)->get($page->getUrl());
|
||||
$resp->assertSee($page->getUrl('/copy'));
|
||||
|
||||
$movePageResp = $this->post($page->getUrl('/copy'), [
|
||||
'entity_selection' => 'book:' . $newBook->id,
|
||||
'name' => 'My copied test page'
|
||||
]);
|
||||
$movePageResp->assertRedirect();
|
||||
|
||||
$this->assertDatabaseHas('pages', [
|
||||
'name' => 'My copied test page',
|
||||
'created_by' => $viewer->id,
|
||||
'book_id' => $newBook->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -239,73 +239,4 @@ class SortTest extends TestCase
|
||||
$checkResp->assertSee($newBook->name);
|
||||
}
|
||||
|
||||
public function test_page_copy()
|
||||
{
|
||||
$page = Page::first();
|
||||
$currentBook = $page->book;
|
||||
$newBook = Book::where('id', '!=', $currentBook->id)->first();
|
||||
|
||||
$resp = $this->asEditor()->get($page->getUrl('/copy'));
|
||||
$resp->assertSee('Copy Page');
|
||||
|
||||
$movePageResp = $this->post($page->getUrl('/copy'), [
|
||||
'entity_selection' => 'book:' . $newBook->id,
|
||||
'name' => 'My copied test page'
|
||||
]);
|
||||
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
|
||||
|
||||
$movePageResp->assertRedirect($pageCopy->getUrl());
|
||||
$this->assertTrue($pageCopy->book->id == $newBook->id, 'Page was copied to correct book');
|
||||
}
|
||||
|
||||
public function test_page_copy_with_no_destination()
|
||||
{
|
||||
$page = Page::first();
|
||||
$currentBook = $page->book;
|
||||
|
||||
$resp = $this->asEditor()->get($page->getUrl('/copy'));
|
||||
$resp->assertSee('Copy Page');
|
||||
|
||||
$movePageResp = $this->post($page->getUrl('/copy'), [
|
||||
'name' => 'My copied test page'
|
||||
]);
|
||||
|
||||
$pageCopy = Page::where('name', '=', 'My copied test page')->first();
|
||||
|
||||
$movePageResp->assertRedirect($pageCopy->getUrl());
|
||||
$this->assertTrue($pageCopy->book->id == $currentBook->id, 'Page was copied to correct book');
|
||||
$this->assertTrue($pageCopy->id !== $page->id, 'Page copy is not the same instance');
|
||||
}
|
||||
|
||||
public function test_page_can_be_copied_without_edit_permission()
|
||||
{
|
||||
$page = Page::first();
|
||||
$currentBook = $page->book;
|
||||
$newBook = Book::where('id', '!=', $currentBook->id)->first();
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
$resp = $this->actingAs($viewer)->get($page->getUrl());
|
||||
$resp->assertDontSee($page->getUrl('/copy'));
|
||||
|
||||
$newBook->owned_by = $viewer->id;
|
||||
$newBook->save();
|
||||
$this->giveUserPermissions($viewer, ['page-create-own']);
|
||||
$this->regenEntityPermissions($newBook);
|
||||
|
||||
$resp = $this->actingAs($viewer)->get($page->getUrl());
|
||||
$resp->assertSee($page->getUrl('/copy'));
|
||||
|
||||
$movePageResp = $this->post($page->getUrl('/copy'), [
|
||||
'entity_selection' => 'book:' . $newBook->id,
|
||||
'name' => 'My copied test page'
|
||||
]);
|
||||
$movePageResp->assertRedirect();
|
||||
|
||||
$this->assertDatabaseHas('pages', [
|
||||
'name' => 'My copied test page',
|
||||
'created_by' => $viewer->id,
|
||||
'book_id' => $newBook->id,
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -216,15 +216,23 @@ class RolesTest extends BrowserKitTest
|
||||
{
|
||||
$otherUsersPage = Page::first();
|
||||
$content = $this->createEntityChainBelongingToUser($this->user);
|
||||
|
||||
// Set a different creator on the page we're checking to ensure
|
||||
// that the owner fields are checked
|
||||
$page = $content['page']; /** @var Page $page */
|
||||
$page->created_by = $otherUsersPage->id;
|
||||
$page->owned_by = $this->user->id;
|
||||
$page->save();
|
||||
|
||||
// Check can't restrict other's content
|
||||
$this->actingAs($this->user)->visit($otherUsersPage->getUrl())
|
||||
->dontSee('Permissions')
|
||||
->visit($otherUsersPage->getUrl() . '/permissions')
|
||||
->seePageIs('/');
|
||||
// Check can't restrict own content
|
||||
$this->actingAs($this->user)->visit($content['page']->getUrl())
|
||||
$this->actingAs($this->user)->visit($page->getUrl())
|
||||
->dontSee('Permissions')
|
||||
->visit($content['page']->getUrl() . '/permissions')
|
||||
->visit($page->getUrl() . '/permissions')
|
||||
->seePageIs('/');
|
||||
|
||||
$this->giveUserPermissions($this->user, ['restrictions-manage-own']);
|
||||
@@ -235,10 +243,10 @@ class RolesTest extends BrowserKitTest
|
||||
->visit($otherUsersPage->getUrl() . '/permissions')
|
||||
->seePageIs('/');
|
||||
// Check can restrict own content
|
||||
$this->actingAs($this->user)->visit($content['page']->getUrl())
|
||||
$this->actingAs($this->user)->visit($page->getUrl())
|
||||
->see('Permissions')
|
||||
->click('Permissions')
|
||||
->seePageIs($content['page']->getUrl() . '/permissions');
|
||||
->seePageIs($page->getUrl() . '/permissions');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
<?php namespace Tests\Uploads;
|
||||
|
||||
use BookStack\Auth\User;
|
||||
use BookStack\Exceptions\HttpFetchException;
|
||||
use BookStack\Uploads\HttpFetcher;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AvatarTest extends TestCase
|
||||
@@ -11,7 +13,7 @@ class AvatarTest extends TestCase
|
||||
|
||||
protected function createUserRequest($user)
|
||||
{
|
||||
$resp = $this->asAdmin()->post('/settings/users/create', [
|
||||
$this->asAdmin()->post('/settings/users/create', [
|
||||
'name' => $user->name,
|
||||
'email' => $user->email,
|
||||
'password' => 'testing',
|
||||
@@ -22,8 +24,7 @@ class AvatarTest extends TestCase
|
||||
|
||||
protected function assertImageFetchFrom(string $url)
|
||||
{
|
||||
$http = \Mockery::mock(HttpFetcher::class);
|
||||
$this->app->instance(HttpFetcher::class, $http);
|
||||
$http = $this->mock(HttpFetcher::class);
|
||||
|
||||
$http->shouldReceive('fetch')
|
||||
->once()->with($url)
|
||||
@@ -55,6 +56,7 @@ class AvatarTest extends TestCase
|
||||
public function test_custom_url_used_if_set()
|
||||
{
|
||||
config()->set([
|
||||
'services.disable_services' => false,
|
||||
'services.avatar_url' => 'https://example.com/${email}/${hash}/${size}',
|
||||
]);
|
||||
|
||||
@@ -74,11 +76,26 @@ class AvatarTest extends TestCase
|
||||
|
||||
$user = factory(User::class)->make();
|
||||
|
||||
$http = \Mockery::mock(HttpFetcher::class);
|
||||
$this->app->instance(HttpFetcher::class, $http);
|
||||
$http = $this->mock(HttpFetcher::class);
|
||||
$http->shouldNotReceive('fetch');
|
||||
|
||||
$this->createUserRequest($user);
|
||||
}
|
||||
|
||||
public function test_no_failure_but_error_logged_on_failed_avatar_fetch()
|
||||
{
|
||||
config()->set([
|
||||
'services.disable_services' => false,
|
||||
]);
|
||||
|
||||
$http = $this->mock(HttpFetcher::class);
|
||||
$http->shouldReceive('fetch')->andThrow(new HttpFetchException());
|
||||
|
||||
$logger = $this->withTestLogger();
|
||||
|
||||
$user = factory(User::class)->make();
|
||||
$this->createUserRequest($user);
|
||||
$this->assertTrue($logger->hasError('Failed to save user avatar image'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user