mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-05 16:49:47 +03:00
Compare commits
52 Commits
v0.24.2
...
fix/video-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc275c0b53 | ||
|
|
8a2c13729e | ||
|
|
2317bf2350 | ||
|
|
456afdcd4c | ||
|
|
68017e2553 | ||
|
|
866187830a | ||
|
|
b56fc21aaf | ||
|
|
d673bf61c2 | ||
|
|
18b10153e5 | ||
|
|
7c8edf5673 | ||
|
|
f4ea5f1f55 | ||
|
|
f62843c861 | ||
|
|
5fe630b8d2 | ||
|
|
d910defbfd | ||
|
|
153adb055c | ||
|
|
26ec1cc3dc | ||
|
|
d476e30df0 | ||
|
|
37ab97af8c | ||
|
|
7fcd7a5d91 | ||
|
|
c67f76f776 | ||
|
|
9a444b4a04 | ||
|
|
106f32591d | ||
|
|
7f6929d716 | ||
|
|
651ae2f3be | ||
|
|
101a7b40b9 | ||
|
|
1930ed4d6a | ||
|
|
2753629dbe | ||
|
|
86a00a59d4 | ||
|
|
d6dd96e7fc | ||
|
|
1b1ddb6794 | ||
|
|
f65ff3a9a8 | ||
|
|
323bff7d6d | ||
|
|
0e3d507ec2 | ||
|
|
f943f0d401 | ||
|
|
1b01d65965 | ||
|
|
a2acd063f3 | ||
|
|
e9e3e8b6b1 | ||
|
|
75ca430fd4 | ||
|
|
4cf43f67d6 | ||
|
|
86899864dd | ||
|
|
eac82c47a5 | ||
|
|
d3d3e2ad3e | ||
|
|
f8396d3632 | ||
|
|
5e6c039b08 | ||
|
|
730cb78b45 | ||
|
|
8e7f703af7 | ||
|
|
6c14c09880 | ||
|
|
6c7d87c836 | ||
|
|
5f113f3f52 | ||
|
|
27954d6bc6 | ||
|
|
5bee25d651 | ||
|
|
0d1db98289 |
@@ -60,8 +60,13 @@ GITLAB_BASE_URI=false
|
||||
DISCORD_APP_ID=false
|
||||
DISCORD_APP_SECRET=false
|
||||
|
||||
# External services such as Gravatar and Draw.IO
|
||||
|
||||
# Disable default services such as Gravatar and Draw.IO
|
||||
DISABLE_EXTERNAL_SERVICES=false
|
||||
# Use custom avatar service, Sets fetch URL
|
||||
# Possible placeholders: ${hash} ${size} ${email}
|
||||
# If set, Avatars will be fetched regardless of DISABLE_EXTERNAL_SERVICES option.
|
||||
# AVATAR_URL=https://seccdn.libravatar.org/avatar/${hash}?s=${size}&d=identicon
|
||||
|
||||
# LDAP Settings
|
||||
LDAP_SERVER=false
|
||||
@@ -77,6 +82,8 @@ LDAP_GROUP_ATTRIBUTE="memberOf"
|
||||
# Would you like to remove users from roles on BookStack if they do not match on LDAP
|
||||
# If false, the ldap groups-roles sync will only add users to roles
|
||||
LDAP_REMOVE_FROM_GROUPS=false
|
||||
# Set this option to disable LDAPS Certificate Verification
|
||||
LDAP_TLS_INSECURE=false
|
||||
|
||||
# Mail settings
|
||||
MAIL_DRIVER=smtp
|
||||
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -5,10 +5,10 @@ Homestead.yaml
|
||||
.idea
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
/public/dist/*.map
|
||||
/public/dist
|
||||
/public/plugins
|
||||
/public/css/*.map
|
||||
/public/js/*.map
|
||||
/public/css
|
||||
/public/js
|
||||
/public/bower
|
||||
/public/build/
|
||||
/storage/images
|
||||
|
||||
@@ -92,4 +92,27 @@ class Ldap
|
||||
{
|
||||
return ldap_bind($ldapConnection, $bindRdn, $bindPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* Explode a LDAP dn string into an array of components.
|
||||
* @param string $dn
|
||||
* @param int $withAttrib
|
||||
* @return array
|
||||
*/
|
||||
public function explodeDn(string $dn, int $withAttrib)
|
||||
{
|
||||
return ldap_explode_dn($dn, $withAttrib);
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape a string for use in an LDAP filter.
|
||||
* @param string $value
|
||||
* @param string $ignore
|
||||
* @param int $flags
|
||||
* @return string
|
||||
*/
|
||||
public function escape(string $value, string $ignore = "", int $flags = 0)
|
||||
{
|
||||
return ldap_escape($value, $ignore, $flags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +107,7 @@ class LdapService
|
||||
if ($ldapUser === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($ldapUser['uid'] !== $user->external_auth_id) {
|
||||
return false;
|
||||
}
|
||||
@@ -169,6 +170,16 @@ class LdapService
|
||||
}
|
||||
$hostName = $ldapServer[0] . ($hasProtocol?':':'') . $ldapServer[1];
|
||||
$defaultPort = $ldapServer[0] === 'ldaps' ? 636 : 389;
|
||||
|
||||
/*
|
||||
* Check if TLS_INSECURE is set. The handle is set to NULL due to the nature of
|
||||
* the LDAP_OPT_X_TLS_REQUIRE_CERT option. It can only be set globally and not
|
||||
* per handle.
|
||||
*/
|
||||
if($this->config['tls_insecure']) {
|
||||
$this->ldap->setOption(NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
|
||||
}
|
||||
|
||||
$ldapConnection = $this->ldap->connect($hostName, count($ldapServer) > 2 ? intval($ldapServer[2]) : $defaultPort);
|
||||
|
||||
if ($ldapConnection === false) {
|
||||
@@ -195,7 +206,7 @@ class LdapService
|
||||
$newAttrs = [];
|
||||
foreach ($attrs as $key => $attrText) {
|
||||
$newKey = '${' . $key . '}';
|
||||
$newAttrs[$newKey] = $attrText;
|
||||
$newAttrs[$newKey] = $this->ldap->escape($attrText);
|
||||
}
|
||||
return strtr($filterString, $newAttrs);
|
||||
}
|
||||
@@ -265,7 +276,8 @@ class LdapService
|
||||
$baseDn = $this->config['base_dn'];
|
||||
$groupsAttr = strtolower($this->config['group_attribute']);
|
||||
|
||||
$groups = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, 'CN='.$groupName, [$groupsAttr]);
|
||||
$groupFilter = 'CN=' . $this->ldap->escape($groupName);
|
||||
$groups = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $groupFilter, [$groupsAttr]);
|
||||
if ($groups['count'] === 0) {
|
||||
return [];
|
||||
}
|
||||
@@ -277,23 +289,26 @@ class LdapService
|
||||
/**
|
||||
* Filter out LDAP CN and DN language in a ldap search return
|
||||
* Gets the base CN (common name) of the string
|
||||
* @param string $ldapSearchReturn
|
||||
* @param array $userGroupSearchResponse
|
||||
* @return array
|
||||
*/
|
||||
protected function groupFilter($ldapSearchReturn)
|
||||
protected function groupFilter(array $userGroupSearchResponse)
|
||||
{
|
||||
$groupsAttr = strtolower($this->config['group_attribute']);
|
||||
$ldapGroups = [];
|
||||
$count = 0;
|
||||
if (isset($ldapSearchReturn[$groupsAttr]['count'])) {
|
||||
$count = (int) $ldapSearchReturn[$groupsAttr]['count'];
|
||||
|
||||
if (isset($userGroupSearchResponse[$groupsAttr]['count'])) {
|
||||
$count = (int) $userGroupSearchResponse[$groupsAttr]['count'];
|
||||
}
|
||||
|
||||
for ($i=0; $i<$count; $i++) {
|
||||
$dnComponents = ldap_explode_dn($ldapSearchReturn[$groupsAttr][$i], 1);
|
||||
$dnComponents = $this->ldap->explodeDn($userGroupSearchResponse[$groupsAttr][$i], 1);
|
||||
if (!in_array($dnComponents[0], $ldapGroups)) {
|
||||
$ldapGroups[] = $dnComponents[0];
|
||||
}
|
||||
}
|
||||
|
||||
return $ldapGroups;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
use Activity;
|
||||
use BookStack\Entities\Repos\EntityRepo;
|
||||
use BookStack\Exceptions\NotFoundException;
|
||||
use BookStack\Exceptions\UserUpdateException;
|
||||
use BookStack\Uploads\Image;
|
||||
use Exception;
|
||||
use Images;
|
||||
@@ -42,7 +43,7 @@ class UserRepo
|
||||
*/
|
||||
public function getById($id)
|
||||
{
|
||||
return $this->user->findOrFail($id);
|
||||
return $this->user->newQuery()->findOrFail($id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -85,9 +86,7 @@ class UserRepo
|
||||
{
|
||||
$user = $this->create($data, $verifyEmail);
|
||||
$this->attachDefaultRole($user);
|
||||
|
||||
// Get avatar from gravatar and save
|
||||
$this->downloadGravatarToUserAvatar($user);
|
||||
$this->downloadAndAssignUserAvatar($user);
|
||||
|
||||
return $user;
|
||||
}
|
||||
@@ -137,6 +136,40 @@ class UserRepo
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the assigned user roles via an array of role IDs.
|
||||
* @param User $user
|
||||
* @param array $roles
|
||||
* @throws UserUpdateException
|
||||
*/
|
||||
public function setUserRoles(User $user, array $roles)
|
||||
{
|
||||
if ($this->demotingLastAdmin($user, $roles)) {
|
||||
throw new UserUpdateException(trans('errors.role_cannot_remove_only_admin'), $user->getEditUrl());
|
||||
}
|
||||
|
||||
$user->roles()->sync($roles);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the given user is the last admin and their new roles no longer
|
||||
* contains the admin role.
|
||||
* @param User $user
|
||||
* @param array $newRoles
|
||||
* @return bool
|
||||
*/
|
||||
protected function demotingLastAdmin(User $user, array $newRoles) : bool
|
||||
{
|
||||
if ($this->isOnlyAdmin($user)) {
|
||||
$adminRole = $this->role->getSystemRole('admin');
|
||||
if (!in_array(strval($adminRole->id), $newRoles)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new basic instance of user.
|
||||
* @param array $data
|
||||
@@ -145,7 +178,6 @@ class UserRepo
|
||||
*/
|
||||
public function create(array $data, $verifyEmail = false)
|
||||
{
|
||||
|
||||
return $this->user->forceCreate([
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
@@ -238,25 +270,24 @@ class UserRepo
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a gravatar image for a user and set it as their avatar.
|
||||
* Does not run if gravatar disabled in config.
|
||||
* Get an avatar image for a user and set it as their avatar.
|
||||
* Returns early if avatars disabled or not set in config.
|
||||
* @param User $user
|
||||
* @return bool
|
||||
*/
|
||||
public function downloadGravatarToUserAvatar(User $user)
|
||||
public function downloadAndAssignUserAvatar(User $user)
|
||||
{
|
||||
// Get avatar from gravatar and save
|
||||
if (!config('services.gravatar')) {
|
||||
if (!Images::avatarFetchEnabled()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$avatar = Images::saveUserGravatar($user);
|
||||
$avatar = Images::saveUserAvatar($user);
|
||||
$user->avatar()->associate($avatar);
|
||||
$user->save();
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
\Log::error('Failed to save user gravatar image');
|
||||
\Log::error('Failed to save user avatar image');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ class CreateAdmin extends Command
|
||||
|
||||
$user = $this->userRepo->create(['email' => $email, 'name' => $name, 'password' => $password]);
|
||||
$this->userRepo->attachSystemRole($user, 'admin');
|
||||
$this->userRepo->downloadGravatarToUserAvatar($user);
|
||||
$this->userRepo->downloadAndAssignUserAvatar($user);
|
||||
$user->email_confirmed = true;
|
||||
$user->save();
|
||||
|
||||
|
||||
@@ -2,9 +2,14 @@
|
||||
|
||||
use BookStack\Entities\Repos\EntityRepo;
|
||||
use BookStack\Uploads\ImageService;
|
||||
use BookStack\Exceptions\ExportException;
|
||||
|
||||
class ExportService
|
||||
{
|
||||
protected $contentMatching = [
|
||||
'video' => ["www.youtube.com", "player.vimeo.com", "www.dailymotion.com"],
|
||||
'map' => ['maps.google.com']
|
||||
];
|
||||
|
||||
protected $entityRepo;
|
||||
protected $imageService;
|
||||
@@ -74,16 +79,17 @@ class ExportService
|
||||
/**
|
||||
* Convert a page to a PDF file.
|
||||
* @param Page $page
|
||||
* @param bool $isTesting
|
||||
* @return mixed|string
|
||||
* @throws \Throwable
|
||||
*/
|
||||
public function pageToPdf(Page $page)
|
||||
public function pageToPdf(Page $page, bool $isTesting = false)
|
||||
{
|
||||
$this->entityRepo->renderPage($page);
|
||||
$html = view('pages/pdf', [
|
||||
'page' => $page
|
||||
])->render();
|
||||
return $this->htmlToPdf($html);
|
||||
return $this->htmlToPdf($html, $isTesting);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,12 +130,16 @@ class ExportService
|
||||
/**
|
||||
* Convert normal webpage HTML to a PDF.
|
||||
* @param $html
|
||||
* @param $isTesting
|
||||
* @return string
|
||||
* @throws \Exception
|
||||
*/
|
||||
protected function htmlToPdf($html)
|
||||
protected function htmlToPdf($html, $isTesting = false)
|
||||
{
|
||||
$containedHtml = $this->containHtml($html);
|
||||
$containedHtml = $this->containHtml($html, true);
|
||||
if ($isTesting) {
|
||||
return $containedHtml;
|
||||
}
|
||||
$useWKHTML = config('snappy.pdf.binary') !== false;
|
||||
if ($useWKHTML) {
|
||||
$pdf = \SnappyPDF::loadHTML($containedHtml);
|
||||
@@ -143,46 +153,64 @@ class ExportService
|
||||
/**
|
||||
* Bundle of the contents of a html file to be self-contained.
|
||||
* @param $htmlContent
|
||||
* @param bool $isPDF
|
||||
* @return mixed|string
|
||||
* @throws \Exception
|
||||
* @throws \BookStack\Exceptions\ExportException
|
||||
*/
|
||||
protected function containHtml($htmlContent)
|
||||
protected function containHtml(string $htmlContent, bool $isPDF = false) : string
|
||||
{
|
||||
$imageTagsOutput = [];
|
||||
preg_match_all("/\<img.*src\=(\'|\")(.*?)(\'|\").*?\>/i", $htmlContent, $imageTagsOutput);
|
||||
$dom = $this->getDOM($htmlContent);
|
||||
if ($dom === false) {
|
||||
throw new ExportException(trans('errors.dom_parse_error'));
|
||||
}
|
||||
|
||||
// Replace image src with base64 encoded image strings
|
||||
if (isset($imageTagsOutput[0]) && count($imageTagsOutput[0]) > 0) {
|
||||
foreach ($imageTagsOutput[0] as $index => $imgMatch) {
|
||||
$oldImgTagString = $imgMatch;
|
||||
$srcString = $imageTagsOutput[2][$index];
|
||||
$imageEncoded = $this->imageService->imageUriToBase64($srcString);
|
||||
if ($imageEncoded === null) {
|
||||
$imageEncoded = $srcString;
|
||||
}
|
||||
$newImgTagString = str_replace($srcString, $imageEncoded, $oldImgTagString);
|
||||
$htmlContent = str_replace($oldImgTagString, $newImgTagString, $htmlContent);
|
||||
// replace image src with base64 encoded image strings
|
||||
$images = $dom->getElementsByTagName('img');
|
||||
foreach ($images as $img) {
|
||||
$base64String = $this->imageService->imageUriToBase64($img->getAttribute('src'));
|
||||
if ($base64String !== null) {
|
||||
$img->setAttribute('src', $base64String);
|
||||
$dom->saveHTML($img);
|
||||
}
|
||||
}
|
||||
|
||||
$linksOutput = [];
|
||||
preg_match_all("/\<a.*href\=(\'|\")(.*?)(\'|\").*?\>/i", $htmlContent, $linksOutput);
|
||||
|
||||
// Replace image src with base64 encoded image strings
|
||||
if (isset($linksOutput[0]) && count($linksOutput[0]) > 0) {
|
||||
foreach ($linksOutput[0] as $index => $linkMatch) {
|
||||
$oldLinkString = $linkMatch;
|
||||
$srcString = $linksOutput[2][$index];
|
||||
if (strpos(trim($srcString), 'http') !== 0) {
|
||||
$newSrcString = url($srcString);
|
||||
$newLinkString = str_replace($srcString, $newSrcString, $oldLinkString);
|
||||
$htmlContent = str_replace($oldLinkString, $newLinkString, $htmlContent);
|
||||
}
|
||||
// replace all relative hrefs.
|
||||
$links = $dom->getElementsByTagName('a');
|
||||
foreach ($links as $link) {
|
||||
$href = $link->getAttribute('href');
|
||||
if (strpos(trim($href), 'http') !== 0) {
|
||||
$newHref = url($href);
|
||||
$link->setAttribute('href', $newHref);
|
||||
$dom->saveHTML($link);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace any relative links with system domain
|
||||
return $htmlContent;
|
||||
// replace all src in video, audio and iframe tags
|
||||
$xmlDoc = new \DOMXPath($dom);
|
||||
$srcElements = $xmlDoc->query('//video | //audio | //iframe');
|
||||
foreach ($srcElements as $element) {
|
||||
$element = $this->fixRelativeSrc($element);
|
||||
$dom->saveHTML($element);
|
||||
|
||||
if ($isPDF) {
|
||||
$src = $element->getAttribute('src');
|
||||
$label = $this->getContentLabel($src);
|
||||
|
||||
$div = $dom->createElement('div');
|
||||
$textNode = $dom->createTextNode($label);
|
||||
|
||||
$anchor = $dom->createElement('a');
|
||||
$anchor->setAttribute('href', $src);
|
||||
$anchor->textContent = $src;
|
||||
|
||||
$div->appendChild($textNode);
|
||||
$div->appendChild($anchor);
|
||||
|
||||
$element->parentNode->replaceChild($div, $element);
|
||||
}
|
||||
}
|
||||
|
||||
return $dom->saveHTML();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -190,11 +218,43 @@ class ExportService
|
||||
* This method filters any bad looking content to provide a nice final output.
|
||||
* @param Page $page
|
||||
* @return mixed
|
||||
* @throws \BookStack\Exceptions\ExportException
|
||||
*/
|
||||
public function pageToPlainText(Page $page)
|
||||
{
|
||||
$html = $this->entityRepo->renderPage($page);
|
||||
$text = strip_tags($html);
|
||||
$dom = $this->getDom($html);
|
||||
|
||||
if ($dom === false) {
|
||||
throw new ExportException(trans('errors.dom_parse_error'));
|
||||
}
|
||||
|
||||
// handle anchor tags.
|
||||
$links = $dom->getElementsByTagName('a');
|
||||
foreach ($links as $link) {
|
||||
$href = $link->getAttribute('href');
|
||||
if (strpos(trim($href), 'http') !== 0) {
|
||||
$newHref = url($href);
|
||||
$link->setAttribute('href', $newHref);
|
||||
}
|
||||
|
||||
$link->textContent = trim($link->textContent . " ($href)");
|
||||
$dom->saveHTML();
|
||||
}
|
||||
|
||||
$xmlDoc = new \DOMXPath($dom);
|
||||
$srcElements = $xmlDoc->query('//video | //audio | //iframe | //img');
|
||||
foreach ($srcElements as $element) {
|
||||
$element = $this->fixRelativeSrc($element);
|
||||
$fixedSrc = $element->getAttribute('src');
|
||||
$label = $this->getContentLabel($fixedSrc);
|
||||
$finalLabel = "\n\n$label $fixedSrc\n\n";
|
||||
|
||||
$textNode = $dom->createTextNode($finalLabel);
|
||||
$element->parentNode->replaceChild($textNode, $element);
|
||||
}
|
||||
|
||||
$text = strip_tags($dom->saveHTML());
|
||||
// Replace multiple spaces with single spaces
|
||||
$text = preg_replace('/\ {2,}/', ' ', $text);
|
||||
// Reduce multiple horrid whitespace characters.
|
||||
@@ -238,4 +298,37 @@ class ExportService
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
protected function getDom(string $htmlContent) : \DOMDocument
|
||||
{
|
||||
// See - https://stackoverflow.com/a/17559716/903324
|
||||
$dom = new \DOMDocument();
|
||||
libxml_use_internal_errors(true);
|
||||
$dom->loadHTML($htmlContent);
|
||||
libxml_clear_errors();
|
||||
return $dom;
|
||||
}
|
||||
|
||||
protected function fixRelativeSrc(\DOMElement $element): \DOMElement
|
||||
{
|
||||
$src = $element->getAttribute('src');
|
||||
if (strpos(trim($src), 'http') !== 0) {
|
||||
$newSrc = 'https:' . $src;
|
||||
$element->setAttribute('src', $newSrc);
|
||||
}
|
||||
return $element;
|
||||
}
|
||||
|
||||
|
||||
protected function getContentLabel(string $src) : string
|
||||
{
|
||||
foreach ($this->contentMatching as $key => $possibleValues) {
|
||||
foreach ($possibleValues as $value) {
|
||||
if (strpos($src, $value)) {
|
||||
return trans("entities.$key");
|
||||
}
|
||||
}
|
||||
}
|
||||
return trans('entities.embedded_content');
|
||||
}
|
||||
}
|
||||
|
||||
6
app/Exceptions/ExportException.php
Normal file
6
app/Exceptions/ExportException.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php namespace BookStack\Exceptions;
|
||||
|
||||
class ExportException extends PrettyException
|
||||
{
|
||||
|
||||
}
|
||||
5
app/Exceptions/HttpFetchException.php
Normal file
5
app/Exceptions/HttpFetchException.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php namespace BookStack\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
class HttpFetchException extends Exception {}
|
||||
@@ -11,7 +11,7 @@ class NotifyException extends \Exception
|
||||
* @param string $message
|
||||
* @param string $redirectLocation
|
||||
*/
|
||||
public function __construct($message, $redirectLocation)
|
||||
public function __construct(string $message, string $redirectLocation = "/")
|
||||
{
|
||||
$this->message = $message;
|
||||
$this->redirectLocation = $redirectLocation;
|
||||
|
||||
3
app/Exceptions/UserUpdateException.php
Normal file
3
app/Exceptions/UserUpdateException.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php namespace BookStack\Exceptions;
|
||||
|
||||
class UserUpdateException extends NotifyException {}
|
||||
@@ -79,6 +79,7 @@ class HomeController extends Controller
|
||||
{
|
||||
$locale = app()->getLocale();
|
||||
$cacheKey = 'GLOBAL_TRANSLATIONS_' . $locale;
|
||||
|
||||
if (cache()->has($cacheKey) && config('app.env') !== 'development') {
|
||||
$resp = cache($cacheKey);
|
||||
} else {
|
||||
@@ -89,15 +90,6 @@ class HomeController extends Controller
|
||||
'entities' => trans('entities'),
|
||||
'errors' => trans('errors')
|
||||
];
|
||||
if ($locale !== 'en') {
|
||||
$enTrans = [
|
||||
'common' => trans('common', [], 'en'),
|
||||
'components' => trans('components', [], 'en'),
|
||||
'entities' => trans('entities', [], 'en'),
|
||||
'errors' => trans('errors', [], 'en')
|
||||
];
|
||||
$translations = array_replace_recursive($enTrans, $translations);
|
||||
}
|
||||
$resp = 'window.translations = ' . json_encode($translations);
|
||||
cache()->put($cacheKey, $resp, 120);
|
||||
}
|
||||
|
||||
@@ -495,13 +495,15 @@ class PageController extends Controller
|
||||
* https://github.com/barryvdh/laravel-dompdf
|
||||
* @param string $bookSlug
|
||||
* @param string $pageSlug
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function exportPdf($bookSlug, $pageSlug)
|
||||
public function exportPdf($bookSlug, $pageSlug, Request $request)
|
||||
{
|
||||
$isTesting = $request->query('isTesting');
|
||||
$page = $this->pageRepo->getPageBySlug($pageSlug, $bookSlug);
|
||||
$page->html = $this->pageRepo->renderPage($page);
|
||||
$pdfContent = $this->exportService->pageToPdf($page);
|
||||
$pdfContent = $this->exportService->pageToPdf($page, !empty($isTesting));
|
||||
return $this->downloadResponse($pdfContent, $pageSlug . '.pdf');
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
use BookStack\Auth\Access\SocialAuthService;
|
||||
use BookStack\Auth\User;
|
||||
use BookStack\Auth\UserRepo;
|
||||
use BookStack\Exceptions\UserUpdateException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
@@ -15,7 +16,7 @@ class UserController extends Controller
|
||||
/**
|
||||
* UserController constructor.
|
||||
* @param User $user
|
||||
* @param \BookStack\Auth\UserRepo $userRepo
|
||||
* @param UserRepo $userRepo
|
||||
*/
|
||||
public function __construct(User $user, UserRepo $userRepo)
|
||||
{
|
||||
@@ -59,6 +60,7 @@ class UserController extends Controller
|
||||
* Store a newly created user in storage.
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
* @throws UserUpdateException
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
@@ -89,10 +91,10 @@ class UserController extends Controller
|
||||
|
||||
if ($request->filled('roles')) {
|
||||
$roles = $request->get('roles');
|
||||
$user->roles()->sync($roles);
|
||||
$this->userRepo->setUserRoles($user, $roles);
|
||||
}
|
||||
|
||||
$this->userRepo->downloadGravatarToUserAvatar($user);
|
||||
$this->userRepo->downloadAndAssignUserAvatar($user);
|
||||
|
||||
return redirect('/settings/users');
|
||||
}
|
||||
@@ -122,8 +124,9 @@ class UserController extends Controller
|
||||
/**
|
||||
* Update the specified user in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @param int $id
|
||||
* @return Response
|
||||
* @throws UserUpdateException
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
@@ -140,13 +143,13 @@ class UserController extends Controller
|
||||
'setting' => 'array'
|
||||
]);
|
||||
|
||||
$user = $this->user->findOrFail($id);
|
||||
$user = $this->userRepo->getById($id);
|
||||
$user->fill($request->all());
|
||||
|
||||
// Role updates
|
||||
if (userCan('users-manage') && $request->filled('roles')) {
|
||||
$roles = $request->get('roles');
|
||||
$user->roles()->sync($roles);
|
||||
$this->userRepo->setUserRoles($user, $roles);
|
||||
}
|
||||
|
||||
// Password updates
|
||||
@@ -185,7 +188,7 @@ class UserController extends Controller
|
||||
return $this->currentUser->id == $id;
|
||||
});
|
||||
|
||||
$user = $this->user->findOrFail($id);
|
||||
$user = $this->userRepo->getById($id);
|
||||
$this->setPageTitle(trans('settings.users_delete_named', ['userName' => $user->name]));
|
||||
return view('users/delete', ['user' => $user]);
|
||||
}
|
||||
@@ -194,6 +197,7 @@ class UserController extends Controller
|
||||
* Remove the specified user from storage.
|
||||
* @param int $id
|
||||
* @return Response
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
@@ -279,7 +283,7 @@ class UserController extends Controller
|
||||
$viewType = 'list';
|
||||
}
|
||||
|
||||
$user = $this->user->findOrFail($id);
|
||||
$user = $this->userRepo->getById($id);
|
||||
setting()->putUser($user, 'bookshelves_view_type', $viewType);
|
||||
|
||||
return redirect()->back(302, [], "/settings/users/$id");
|
||||
|
||||
@@ -1,17 +1,7 @@
|
||||
<?php
|
||||
<?php namespace BookStack\Notifications;
|
||||
|
||||
namespace BookStack\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class ConfirmEmail extends Notification implements ShouldQueue
|
||||
class ConfirmEmail extends MailNotification
|
||||
{
|
||||
|
||||
use Queueable;
|
||||
|
||||
public $token;
|
||||
|
||||
/**
|
||||
@@ -23,17 +13,6 @@ class ConfirmEmail extends Notification implements ShouldQueue
|
||||
$this->token = $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mail representation of the notification.
|
||||
*
|
||||
@@ -43,10 +22,10 @@ class ConfirmEmail extends Notification implements ShouldQueue
|
||||
public function toMail($notifiable)
|
||||
{
|
||||
$appName = ['appName' => setting('app-name')];
|
||||
return (new MailMessage)
|
||||
->subject(trans('auth.email_confirm_subject', $appName))
|
||||
->greeting(trans('auth.email_confirm_greeting', $appName))
|
||||
->line(trans('auth.email_confirm_text'))
|
||||
->action(trans('auth.email_confirm_action'), baseUrl('/register/confirm/' . $this->token));
|
||||
return $this->newMailMessage()
|
||||
->subject(trans('auth.email_confirm_subject', $appName))
|
||||
->greeting(trans('auth.email_confirm_greeting', $appName))
|
||||
->line(trans('auth.email_confirm_text'))
|
||||
->action(trans('auth.email_confirm_action'), baseUrl('/register/confirm/' . $this->token));
|
||||
}
|
||||
}
|
||||
|
||||
35
app/Notifications/MailNotification.php
Normal file
35
app/Notifications/MailNotification.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php namespace BookStack\Notifications;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class MailNotification extends Notification implements ShouldQueue
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
/**
|
||||
* Get the notification's channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array|string
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new mail message.
|
||||
* @return MailMessage
|
||||
*/
|
||||
protected function newMailMessage()
|
||||
{
|
||||
return (new MailMessage)->view([
|
||||
'html' => 'vendor.notifications.email',
|
||||
'text' => 'vendor.notifications.email-plain'
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +1,7 @@
|
||||
<?php
|
||||
<?php namespace BookStack\Notifications;
|
||||
|
||||
namespace BookStack\Notifications;
|
||||
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class ResetPassword extends Notification
|
||||
class ResetPassword extends MailNotification
|
||||
{
|
||||
/**
|
||||
* The password reset token.
|
||||
@@ -24,17 +20,6 @@ class ResetPassword extends Notification
|
||||
$this->token = $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array|string
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['mail'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the mail representation of the notification.
|
||||
*
|
||||
@@ -42,7 +27,7 @@ class ResetPassword extends Notification
|
||||
*/
|
||||
public function toMail()
|
||||
{
|
||||
return (new MailMessage)
|
||||
return $this->newMailMessage()
|
||||
->subject(trans('auth.email_reset_subject', ['appName' => setting('app-name')]))
|
||||
->line(trans('auth.email_reset_text'))
|
||||
->action(trans('auth.reset_password'), baseUrl('password/reset/' . $this->token))
|
||||
|
||||
@@ -9,6 +9,7 @@ use BookStack\Actions\ViewService;
|
||||
use BookStack\Auth\Permissions\PermissionService;
|
||||
use BookStack\Settings\Setting;
|
||||
use BookStack\Settings\SettingService;
|
||||
use BookStack\Uploads\HttpFetcher;
|
||||
use BookStack\Uploads\Image;
|
||||
use BookStack\Uploads\ImageService;
|
||||
use Illuminate\Contracts\Cache\Repository;
|
||||
@@ -61,7 +62,8 @@ class CustomFacadeProvider extends ServiceProvider
|
||||
$this->app->make(Image::class),
|
||||
$this->app->make(ImageManager::class),
|
||||
$this->app->make(Factory::class),
|
||||
$this->app->make(Repository::class)
|
||||
$this->app->make(Repository::class),
|
||||
$this->app->make(HttpFetcher::class)
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
32
app/Providers/TranslationServiceProvider.php
Normal file
32
app/Providers/TranslationServiceProvider.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php namespace BookStack\Providers;
|
||||
|
||||
|
||||
use BookStack\Translation\Translator;
|
||||
|
||||
class TranslationServiceProvider extends \Illuminate\Translation\TranslationServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->registerLoader();
|
||||
|
||||
$this->app->singleton('translator', function ($app) {
|
||||
$loader = $app['translation.loader'];
|
||||
|
||||
// When registering the translator component, we'll need to set the default
|
||||
// locale as well as the fallback locale. So, we'll grab the application
|
||||
// configuration so we can easily get both of these values from there.
|
||||
$locale = $app['config']['app.locale'];
|
||||
|
||||
$trans = new Translator($loader, $locale);
|
||||
|
||||
$trans->setFallback($app['config']['app.fallback_locale']);
|
||||
|
||||
return $trans;
|
||||
});
|
||||
}
|
||||
}
|
||||
74
app/Translation/Translator.php
Normal file
74
app/Translation/Translator.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php namespace BookStack\Translation;
|
||||
|
||||
|
||||
class Translator extends \Illuminate\Translation\Translator
|
||||
{
|
||||
|
||||
/**
|
||||
* Mapping of locales to their base locales
|
||||
* @var array
|
||||
*/
|
||||
protected $baseLocaleMap = [
|
||||
'de_informal' => 'de',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get the translation for a given key.
|
||||
*
|
||||
* @param string $key
|
||||
* @param array $replace
|
||||
* @param string $locale
|
||||
* @return string|array|null
|
||||
*/
|
||||
public function trans($key, array $replace = [], $locale = null)
|
||||
{
|
||||
$translation = $this->get($key, $replace, $locale);
|
||||
|
||||
if (is_array($translation)) {
|
||||
$translation = $this->mergeBackupTranslations($translation, $key, $locale);
|
||||
}
|
||||
|
||||
return $translation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge the fallback translations, and base translations if existing,
|
||||
* into the provided core key => value array of translations content.
|
||||
* @param array $translationArray
|
||||
* @param string $key
|
||||
* @param null $locale
|
||||
* @return array
|
||||
*/
|
||||
protected function mergeBackupTranslations(array $translationArray, string $key, $locale = null)
|
||||
{
|
||||
$fallback = $this->get($key, [], $this->fallback);
|
||||
$baseLocale = $this->getBaseLocale($locale ?? $this->locale);
|
||||
$baseTranslations = $baseLocale ? $this->get($key, [], $baseLocale) : [];
|
||||
|
||||
return array_replace_recursive($fallback, $baseTranslations, $translationArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array of locales to be checked.
|
||||
*
|
||||
* @param string|null $locale
|
||||
* @return array
|
||||
*/
|
||||
protected function localeArray($locale)
|
||||
{
|
||||
$primaryLocale = $locale ?: $this->locale;
|
||||
return array_filter([$primaryLocale, $this->getBaseLocale($primaryLocale), $this->fallback]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the locale to extend for the given locale.
|
||||
*
|
||||
* @param string $locale
|
||||
* @return string|null
|
||||
*/
|
||||
protected function getBaseLocale($locale)
|
||||
{
|
||||
return $this->baseLocaleMap[$locale] ?? null;
|
||||
}
|
||||
|
||||
}
|
||||
34
app/Uploads/HttpFetcher.php
Normal file
34
app/Uploads/HttpFetcher.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php namespace BookStack\Uploads;
|
||||
|
||||
use BookStack\Exceptions\HttpFetchException;
|
||||
|
||||
class HttpFetcher
|
||||
{
|
||||
|
||||
/**
|
||||
* Fetch content from an external URI.
|
||||
* @param string $uri
|
||||
* @return bool|string
|
||||
* @throws HttpFetchException
|
||||
*/
|
||||
public function fetch(string $uri)
|
||||
{
|
||||
$ch = curl_init();
|
||||
curl_setopt_array($ch, [
|
||||
CURLOPT_URL => $uri,
|
||||
CURLOPT_RETURNTRANSFER => 1,
|
||||
CURLOPT_CONNECTTIMEOUT => 5
|
||||
]);
|
||||
|
||||
$data = curl_exec($ch);
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
|
||||
if ($err) {
|
||||
throw new HttpFetchException($err);
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php namespace BookStack\Uploads;
|
||||
|
||||
use BookStack\Auth\User;
|
||||
use BookStack\Exceptions\HttpFetchException;
|
||||
use BookStack\Exceptions\ImageUploadException;
|
||||
use DB;
|
||||
use Exception;
|
||||
@@ -17,6 +18,7 @@ class ImageService extends UploadService
|
||||
protected $cache;
|
||||
protected $storageUrl;
|
||||
protected $image;
|
||||
protected $http;
|
||||
|
||||
/**
|
||||
* ImageService constructor.
|
||||
@@ -24,12 +26,14 @@ class ImageService extends UploadService
|
||||
* @param ImageManager $imageTool
|
||||
* @param FileSystem $fileSystem
|
||||
* @param Cache $cache
|
||||
* @param HttpFetcher $http
|
||||
*/
|
||||
public function __construct(Image $image, ImageManager $imageTool, FileSystem $fileSystem, Cache $cache)
|
||||
public function __construct(Image $image, ImageManager $imageTool, FileSystem $fileSystem, Cache $cache, HttpFetcher $http)
|
||||
{
|
||||
$this->image = $image;
|
||||
$this->imageTool = $imageTool;
|
||||
$this->cache = $cache;
|
||||
$this->http = $http;
|
||||
parent::__construct($fileSystem);
|
||||
}
|
||||
|
||||
@@ -95,8 +99,9 @@ class ImageService extends UploadService
|
||||
private function saveNewFromUrl($url, $type, $imageName = false)
|
||||
{
|
||||
$imageName = $imageName ? $imageName : basename($url);
|
||||
$imageData = file_get_contents($url);
|
||||
if ($imageData === false) {
|
||||
try {
|
||||
$imageData = $this->http->fetch($url);
|
||||
} catch (HttpFetchException $exception) {
|
||||
throw new \Exception(trans('errors.cannot_get_image_from_url', ['url' => $url]));
|
||||
}
|
||||
return $this->saveNew($imageName, $imageData, $type);
|
||||
@@ -279,24 +284,57 @@ class ImageService extends UploadService
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a gravatar image and set a the profile image for a user.
|
||||
* Save an avatar image from an external service.
|
||||
* @param \BookStack\Auth\User $user
|
||||
* @param int $size
|
||||
* @return mixed
|
||||
* @return Image
|
||||
* @throws Exception
|
||||
*/
|
||||
public function saveUserGravatar(User $user, $size = 500)
|
||||
public function saveUserAvatar(User $user, $size = 500)
|
||||
{
|
||||
$emailHash = md5(strtolower(trim($user->email)));
|
||||
$url = 'https://www.gravatar.com/avatar/' . $emailHash . '?s=' . $size . '&d=identicon';
|
||||
$imageName = str_replace(' ', '-', $user->name . '-gravatar.png');
|
||||
$image = $this->saveNewFromUrl($url, 'user', $imageName);
|
||||
$avatarUrl = $this->getAvatarUrl();
|
||||
$email = strtolower(trim($user->email));
|
||||
|
||||
$replacements = [
|
||||
'${hash}' => md5($email),
|
||||
'${size}' => $size,
|
||||
'${email}' => urlencode($email),
|
||||
];
|
||||
|
||||
$userAvatarUrl = strtr($avatarUrl, $replacements);
|
||||
$imageName = str_replace(' ', '-', $user->name . '-avatar.png');
|
||||
$image = $this->saveNewFromUrl($userAvatarUrl, 'user', $imageName);
|
||||
$image->created_by = $user->id;
|
||||
$image->updated_by = $user->id;
|
||||
$image->save();
|
||||
|
||||
return $image;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if fetching external avatars is enabled.
|
||||
* @return bool
|
||||
*/
|
||||
public function avatarFetchEnabled()
|
||||
{
|
||||
$fetchUrl = $this->getAvatarUrl();
|
||||
return is_string($fetchUrl) && strpos($fetchUrl, 'http') === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the URL to fetch avatars from.
|
||||
* @return string|mixed
|
||||
*/
|
||||
protected function getAvatarUrl()
|
||||
{
|
||||
$url = trim(config('services.avatar_url'));
|
||||
|
||||
if (empty($url) && !config('services.disable_services')) {
|
||||
$url = 'https://www.gravatar.com/avatar/${hash}?s=${size}&d=identicon';
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete gallery and drawings that are not within HTML content of pages or page revisions.
|
||||
@@ -365,14 +403,7 @@ class ImageService extends UploadService
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
$ch = curl_init();
|
||||
curl_setopt_array($ch, [CURLOPT_URL => $uri, CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => 5]);
|
||||
$imageData = curl_exec($ch);
|
||||
$err = curl_error($ch);
|
||||
curl_close($ch);
|
||||
if ($err) {
|
||||
throw new \Exception("Image fetch failed, Received error: " . $err);
|
||||
}
|
||||
$imageData = $this->http->fetch($uri);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,14 @@
|
||||
"license": "MIT",
|
||||
"type": "project",
|
||||
"require": {
|
||||
"php": ">=7.0.0",
|
||||
"php": ">=7.0.5",
|
||||
"ext-json": "*",
|
||||
"ext-tidy": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-xml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-gd": "*",
|
||||
"ext-curl": "*",
|
||||
"laravel/framework": "~5.5.44",
|
||||
"fideloper/proxy": "~3.3",
|
||||
"intervention/image": "^2.4",
|
||||
@@ -82,7 +87,7 @@
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"platform": {
|
||||
"php": "7.0"
|
||||
"php": "7.0.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
217
composer.lock
generated
217
composer.lock
generated
@@ -4,20 +4,20 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "4a15ede09baa575d7accd7a4f66067fd",
|
||||
"content-hash": "06219a5c2419ca23ec2924eb31f4ed16",
|
||||
"packages": [
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.70.3",
|
||||
"version": "3.82.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "8278052a097a4ebe2b798fab7e2e3c907bc01a47"
|
||||
"reference": "a0353c24b18d2ba0f5bb7ca8a478b4ce0b8153f7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/8278052a097a4ebe2b798fab7e2e3c907bc01a47",
|
||||
"reference": "8278052a097a4ebe2b798fab7e2e3c907bc01a47",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a0353c24b18d2ba0f5bb7ca8a478b4ce0b8153f7",
|
||||
"reference": "a0353c24b18d2ba0f5bb7ca8a478b4ce0b8153f7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -87,7 +87,7 @@
|
||||
"s3",
|
||||
"sdk"
|
||||
],
|
||||
"time": "2018-11-02T20:04:36+00:00"
|
||||
"time": "2018-12-21T22:21:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "barryvdh/laravel-dompdf",
|
||||
@@ -729,30 +729,34 @@
|
||||
},
|
||||
{
|
||||
"name": "dompdf/dompdf",
|
||||
"version": "v0.8.2",
|
||||
"version": "v0.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dompdf/dompdf.git",
|
||||
"reference": "5113accd9ae5d466077cce5208dcf3fb871bf8f6"
|
||||
"reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dompdf/dompdf/zipball/5113accd9ae5d466077cce5208dcf3fb871bf8f6",
|
||||
"reference": "5113accd9ae5d466077cce5208dcf3fb871bf8f6",
|
||||
"url": "https://api.github.com/repos/dompdf/dompdf/zipball/75f13c700009be21a1965dc2c5b68a8708c22ba2",
|
||||
"reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"ext-gd": "*",
|
||||
"ext-mbstring": "*",
|
||||
"phenx/php-font-lib": "0.5.*",
|
||||
"phenx/php-svg-lib": "0.3.*",
|
||||
"php": ">=5.4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.8.*",
|
||||
"phpunit/phpunit": "^4.8|^5.5|^6.5",
|
||||
"squizlabs/php_codesniffer": "2.*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-gd": "Needed to process images",
|
||||
"ext-gmagick": "Improves image processing performance",
|
||||
"ext-imagick": "Improves image processing performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@@ -787,20 +791,20 @@
|
||||
],
|
||||
"description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
|
||||
"homepage": "https://github.com/dompdf/dompdf",
|
||||
"time": "2017-11-26T14:49:08+00:00"
|
||||
"time": "2018-12-14T02:40:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "egulias/email-validator",
|
||||
"version": "2.1.6",
|
||||
"version": "2.1.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/egulias/EmailValidator.git",
|
||||
"reference": "0578b32b30b22de3e8664f797cf846fc9246f786"
|
||||
"reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0578b32b30b22de3e8664f797cf846fc9246f786",
|
||||
"reference": "0578b32b30b22de3e8664f797cf846fc9246f786",
|
||||
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/709f21f92707308cdf8f9bcfa1af4cb26586521e",
|
||||
"reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -844,7 +848,7 @@
|
||||
"validation",
|
||||
"validator"
|
||||
],
|
||||
"time": "2018-09-25T20:47:26+00:00"
|
||||
"time": "2018-12-04T22:38:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "erusev/parsedown",
|
||||
@@ -1116,32 +1120,33 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "1.4.2",
|
||||
"version": "1.5.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
|
||||
"reference": "9f83dded91781a01c63574e387eaa769be769115"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
|
||||
"reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115",
|
||||
"reference": "9f83dded91781a01c63574e387eaa769be769115",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4.0",
|
||||
"psr/http-message": "~1.0"
|
||||
"psr/http-message": "~1.0",
|
||||
"ralouphie/getallheaders": "^2.0.5"
|
||||
},
|
||||
"provide": {
|
||||
"psr/http-message-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~4.0"
|
||||
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.4-dev"
|
||||
"dev-master": "1.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -1171,13 +1176,14 @@
|
||||
"keywords": [
|
||||
"http",
|
||||
"message",
|
||||
"psr-7",
|
||||
"request",
|
||||
"response",
|
||||
"stream",
|
||||
"uri",
|
||||
"url"
|
||||
],
|
||||
"time": "2017-03-20T17:10:46+00:00"
|
||||
"time": "2018-12-04T20:46:45+00:00"
|
||||
},
|
||||
{
|
||||
"name": "intervention/image",
|
||||
@@ -1514,16 +1520,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "1.0.48",
|
||||
"version": "1.0.49",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem.git",
|
||||
"reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa"
|
||||
"reference": "a63cc83d8a931b271be45148fa39ba7156782ffd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a6ded5b2f6055e2db97b4b859fdfca2b952b78aa",
|
||||
"reference": "a6ded5b2f6055e2db97b4b859fdfca2b952b78aa",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd",
|
||||
"reference": "a63cc83d8a931b271be45148fa39ba7156782ffd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1594,7 +1600,7 @@
|
||||
"sftp",
|
||||
"storage"
|
||||
],
|
||||
"time": "2018-10-15T13:53:10+00:00"
|
||||
"time": "2018-11-23T23:41:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem-aws-s3-v3",
|
||||
@@ -1708,16 +1714,16 @@
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
"version": "1.23.0",
|
||||
"version": "1.24.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Seldaek/monolog.git",
|
||||
"reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
|
||||
"reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
|
||||
"reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
|
||||
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
|
||||
"reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1782,7 +1788,7 @@
|
||||
"logging",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2017-06-19T01:22:40+00:00"
|
||||
"time": "2018-11-05T09:00:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mtdowling/cron-expression",
|
||||
@@ -1885,16 +1891,16 @@
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "1.34.0",
|
||||
"version": "1.36.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||
"reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33"
|
||||
"reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
|
||||
"reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
|
||||
"reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1902,9 +1908,12 @@
|
||||
"symfony/translation": "~2.6 || ~3.0 || ~4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "~2",
|
||||
"phpunit/phpunit": "^4.8.35 || ^5.7"
|
||||
},
|
||||
"suggest": {
|
||||
"friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.",
|
||||
"phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors."
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
@@ -1936,7 +1945,7 @@
|
||||
"datetime",
|
||||
"time"
|
||||
],
|
||||
"time": "2018-09-20T19:36:25+00:00"
|
||||
"time": "2018-11-22T18:23:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
@@ -2211,16 +2220,16 @@
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "1.0.2",
|
||||
"version": "1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
|
||||
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
||||
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
||||
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2254,7 +2263,7 @@
|
||||
"psr",
|
||||
"psr-3"
|
||||
],
|
||||
"time": "2016-10-10T12:19:37+00:00"
|
||||
"time": "2018-11-20T15:27:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/simple-cache",
|
||||
@@ -2304,6 +2313,46 @@
|
||||
],
|
||||
"time": "2017-10-23T01:57:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
"version": "2.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ralouphie/getallheaders.git",
|
||||
"reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
|
||||
"reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~3.7.0",
|
||||
"satooshi/php-coveralls": ">=1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/getallheaders.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ralph Khattar",
|
||||
"email": "ralph.khattar@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A polyfill for getallheaders.",
|
||||
"time": "2016-02-11T07:05:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ramsey/uuid",
|
||||
"version": "3.8.0",
|
||||
@@ -3667,16 +3716,16 @@
|
||||
"packages-dev": [
|
||||
{
|
||||
"name": "barryvdh/laravel-debugbar",
|
||||
"version": "v3.2.0",
|
||||
"version": "v3.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/barryvdh/laravel-debugbar.git",
|
||||
"reference": "5b68f3972083a7eeec0d6f161962fcda71a127c0"
|
||||
"reference": "9d5caf43c5f3a3aea2178942f281054805872e7c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/5b68f3972083a7eeec0d6f161962fcda71a127c0",
|
||||
"reference": "5b68f3972083a7eeec0d6f161962fcda71a127c0",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/9d5caf43c5f3a3aea2178942f281054805872e7c",
|
||||
"reference": "9d5caf43c5f3a3aea2178942f281054805872e7c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3731,24 +3780,24 @@
|
||||
"profiler",
|
||||
"webprofiler"
|
||||
],
|
||||
"time": "2018-08-22T11:06:19+00:00"
|
||||
"time": "2018-11-09T08:37:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "barryvdh/laravel-ide-helper",
|
||||
"version": "v2.5.1",
|
||||
"version": "v2.5.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
|
||||
"reference": "7db1843473e1562d8e0490b51db847d3a1415140"
|
||||
"reference": "3d7f1240896a075aa23b13f82dfcbe165dadeef2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/7db1843473e1562d8e0490b51db847d3a1415140",
|
||||
"reference": "7db1843473e1562d8e0490b51db847d3a1415140",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/3d7f1240896a075aa23b13f82dfcbe165dadeef2",
|
||||
"reference": "3d7f1240896a075aa23b13f82dfcbe165dadeef2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"barryvdh/reflection-docblock": "^2.0.4",
|
||||
"barryvdh/reflection-docblock": "^2.0.6",
|
||||
"composer/composer": "^1.6",
|
||||
"illuminate/console": "^5.5,<5.8",
|
||||
"illuminate/filesystem": "^5.5,<5.8",
|
||||
@@ -3805,20 +3854,20 @@
|
||||
"phpstorm",
|
||||
"sublime"
|
||||
],
|
||||
"time": "2018-09-06T18:41:09+00:00"
|
||||
"time": "2018-12-19T12:12:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "barryvdh/reflection-docblock",
|
||||
"version": "v2.0.4",
|
||||
"version": "v2.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
|
||||
"reference": "3dcbd98b5d9384a5357266efba8fd29884458e5c"
|
||||
"reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/3dcbd98b5d9384a5357266efba8fd29884458e5c",
|
||||
"reference": "3dcbd98b5d9384a5357266efba8fd29884458e5c",
|
||||
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/6b69015d83d3daf9004a71a89f26e27d27ef6a16",
|
||||
"reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3854,7 +3903,7 @@
|
||||
"email": "mike.vanriel@naenius.com"
|
||||
}
|
||||
],
|
||||
"time": "2016-06-13T19:28:20+00:00"
|
||||
"time": "2018-12-13T10:34:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/ca-bundle",
|
||||
@@ -3914,16 +3963,16 @@
|
||||
},
|
||||
{
|
||||
"name": "composer/composer",
|
||||
"version": "1.7.3",
|
||||
"version": "1.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/composer.git",
|
||||
"reference": "e965b9aaa8854c3067f1ed2ae45f436572d73eb7"
|
||||
"reference": "d8aef3af866b28786ce9b8647e52c42496436669"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/composer/zipball/e965b9aaa8854c3067f1ed2ae45f436572d73eb7",
|
||||
"reference": "e965b9aaa8854c3067f1ed2ae45f436572d73eb7",
|
||||
"url": "https://api.github.com/repos/composer/composer/zipball/d8aef3af866b28786ce9b8647e52c42496436669",
|
||||
"reference": "d8aef3af866b28786ce9b8647e52c42496436669",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3959,7 +4008,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.7-dev"
|
||||
"dev-master": "1.8-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@@ -3990,7 +4039,7 @@
|
||||
"dependency",
|
||||
"package"
|
||||
],
|
||||
"time": "2018-11-01T09:05:06+00:00"
|
||||
"time": "2018-12-03T09:31:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "composer/semver",
|
||||
@@ -4117,16 +4166,16 @@
|
||||
},
|
||||
{
|
||||
"name": "composer/xdebug-handler",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/xdebug-handler.git",
|
||||
"reference": "b8e9745fb9b06ea6664d8872c4505fb16df4611c"
|
||||
"reference": "dc523135366eb68f22268d069ea7749486458562"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/b8e9745fb9b06ea6664d8872c4505fb16df4611c",
|
||||
"reference": "b8e9745fb9b06ea6664d8872c4505fb16df4611c",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/dc523135366eb68f22268d069ea7749486458562",
|
||||
"reference": "dc523135366eb68f22268d069ea7749486458562",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4157,7 +4206,7 @@
|
||||
"Xdebug",
|
||||
"performance"
|
||||
],
|
||||
"time": "2018-08-31T19:07:57+00:00"
|
||||
"time": "2018-11-29T10:59:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/instantiator",
|
||||
@@ -6020,16 +6069,16 @@
|
||||
},
|
||||
{
|
||||
"name": "squizlabs/php_codesniffer",
|
||||
"version": "3.3.2",
|
||||
"version": "3.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
|
||||
"reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e"
|
||||
"reference": "379deb987e26c7cd103a7b387aea178baec96e48"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e",
|
||||
"reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e",
|
||||
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/379deb987e26c7cd103a7b387aea178baec96e48",
|
||||
"reference": "379deb987e26c7cd103a7b387aea178baec96e48",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -6067,7 +6116,7 @@
|
||||
"phpcs",
|
||||
"standards"
|
||||
],
|
||||
"time": "2018-09-23T23:08:17+00:00"
|
||||
"time": "2018-12-19T23:57:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dom-crawler",
|
||||
@@ -6271,12 +6320,16 @@
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"php": ">=7.0.0",
|
||||
"php": ">=7.0.5",
|
||||
"ext-json": "*",
|
||||
"ext-tidy": "*",
|
||||
"ext-dom": "*"
|
||||
"ext-dom": "*",
|
||||
"ext-xml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-gd": "*"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"platform-overrides": {
|
||||
"php": "7.0"
|
||||
"php": "7.0.5"
|
||||
}
|
||||
}
|
||||
|
||||
209
config/app.php
209
config/app.php
@@ -1,175 +1,84 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Global app configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
// The environment to run BookStack in.
|
||||
// Options: production, development, demo, testing
|
||||
'env' => env('APP_ENV', 'production'),
|
||||
|
||||
/**
|
||||
* Set the default view type for various lists. Can be overridden by user preferences.
|
||||
* This will be used for public viewers and users that have not set a preference.
|
||||
*/
|
||||
// Enter the application in debug mode.
|
||||
// Shows much more verbose error messages. Has potential to show
|
||||
// private configuration variables so should remain disabled in public.
|
||||
'debug' => env('APP_DEBUG', false),
|
||||
|
||||
// Set the default view type for various lists. Can be overridden by user preferences.
|
||||
// These will be used for public viewers and users that have not set a preference.
|
||||
'views' => [
|
||||
'books' => env('APP_VIEWS_BOOKS', 'list')
|
||||
],
|
||||
|
||||
/**
|
||||
* The number of revisions to keep in the database.
|
||||
* Once this limit is reached older revisions will be deleted.
|
||||
* If set to false then a limit will not be enforced.
|
||||
*/
|
||||
// The number of revisions to keep in the database.
|
||||
// Once this limit is reached older revisions will be deleted.
|
||||
// If set to false then a limit will not be enforced.
|
||||
'revision_limit' => env('REVISION_LIMIT', 50),
|
||||
|
||||
/**
|
||||
* Allow <script> tags to entered within page content.
|
||||
* <script> tags are escaped by default.
|
||||
* Even when overridden the WYSIWYG editor may still escape script content.
|
||||
*/
|
||||
// Allow <script> tags to entered within page content.
|
||||
// <script> tags are escaped by default.
|
||||
// Even when overridden the WYSIWYG editor may still escape script content.
|
||||
'allow_content_scripts' => env('ALLOW_CONTENT_SCRIPTS', false),
|
||||
|
||||
/**
|
||||
* Override the default behaviour for allowing crawlers to crawl the instance.
|
||||
* May be ignored if view has be overridden or modified.
|
||||
* Defaults to null since, if not set, 'app-public' status used instead.
|
||||
*/
|
||||
// Override the default behaviour for allowing crawlers to crawl the instance.
|
||||
// May be ignored if view has be overridden or modified.
|
||||
// Defaults to null since, if not set, 'app-public' status used instead.
|
||||
'allow_robots' => env('ALLOW_ROBOTS', null),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Debug Mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When your application is in debug mode, detailed error messages with
|
||||
| stack traces will be shown on every error that occurs within your
|
||||
| application. If disabled, a simple generic error page is shown.
|
||||
|
|
||||
*/
|
||||
|
||||
'debug' => env('APP_DEBUG', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This URL is used by the console to properly generate URLs when using
|
||||
| the Artisan command line tool. You should set this to the root of
|
||||
| your application so that it is used when running Artisan tasks.
|
||||
|
|
||||
*/
|
||||
|
||||
// Application Base URL, Used by laravel in development commands
|
||||
// and used by BookStack in URL generation.
|
||||
'url' => env('APP_URL', '') === 'http://bookstack.dev' ? '' : env('APP_URL', ''),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Timezone
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default timezone for your application, which
|
||||
| will be used by the PHP date and date-time functions. We have gone
|
||||
| ahead and set this to a sensible default for you out of the box.
|
||||
|
|
||||
*/
|
||||
|
||||
// Application timezone for back-end date functions.
|
||||
'timezone' => 'UTC',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Locale Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The application locale determines the default locale that will be used
|
||||
| by the translation service provider. You are free to set this value
|
||||
| to any of the locales which will be supported by the application.
|
||||
|
|
||||
*/
|
||||
|
||||
// Default locale to use
|
||||
'locale' => env('APP_LANG', 'en'),
|
||||
'locales' => ['en', 'ar', 'de', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'kr', 'ja', 'pl', 'it', 'ru', 'zh_CN', 'zh_TW'],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Right-to-left text control
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Right-to-left text control is set to false by default since English
|
||||
| is the primary supported application but this may be dynamically
|
||||
| altered by the applications localization system.
|
||||
|
|
||||
*/
|
||||
|
||||
'rtl' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Auto-detect the locale for public users
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| For public users their locale can be guessed by headers sent by their
|
||||
| browser. This is usually set by users in their browser settings.
|
||||
| If not found the default app locale will be used.
|
||||
|
|
||||
*/
|
||||
'auto_detect_locale' => env('APP_AUTO_LANG_PUBLIC', true),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Fallback Locale
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The fallback locale determines the locale to use when the current one
|
||||
| is not available. You may change the value to correspond to any of
|
||||
| the language folders that are provided through your application.
|
||||
|
|
||||
*/
|
||||
// Locales available
|
||||
'locales' => ['en', 'ar', 'de', 'de_informal', 'es', 'es_AR', 'fr', 'nl', 'pt_BR', 'sk', 'sv', 'kr', 'ja', 'pl', 'it', 'ru', 'uk', 'zh_CN', 'zh_TW'],
|
||||
|
||||
// Application Fallback Locale
|
||||
'fallback_locale' => 'en',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Encryption Key
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This key is used by the Illuminate encrypter service and should be set
|
||||
| to a random, 32 character string, otherwise these encrypted strings
|
||||
| will not be safe. Please do this before deploying an application!
|
||||
|
|
||||
*/
|
||||
// Enable right-to-left text control.
|
||||
'rtl' => false,
|
||||
|
||||
// Auto-detect the locale for public users
|
||||
// For public users their locale can be guessed by headers sent by their
|
||||
// browser. This is usually set by users in their browser settings.
|
||||
// If not found the default app locale will be used.
|
||||
'auto_detect_locale' => env('APP_AUTO_LANG_PUBLIC', true),
|
||||
|
||||
// Encryption key
|
||||
'key' => env('APP_KEY', 'AbAZchsay4uBTU33RubBzLKw203yqSqr'),
|
||||
|
||||
// Encryption cipher
|
||||
'cipher' => 'AES-256-CBC',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Logging Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the log settings for your application. Out of
|
||||
| the box, Laravel uses the Monolog PHP logging library. This gives
|
||||
| you a variety of powerful log handlers / formatters to utilize.
|
||||
|
|
||||
| Available Settings: "single", "daily", "syslog", "errorlog"
|
||||
|
|
||||
*/
|
||||
|
||||
// Logging configuration
|
||||
// Options: single, daily, syslog, errorlog
|
||||
'log' => env('APP_LOGGING', 'single'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Autoloaded Service Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The service providers listed here will be automatically loaded on the
|
||||
| request to your application. Feel free to add your own services to
|
||||
| this array to grant expanded functionality to your applications.
|
||||
|
|
||||
*/
|
||||
|
||||
// Application Services Provides
|
||||
'providers' => [
|
||||
|
||||
/*
|
||||
* Laravel Framework Service Providers...
|
||||
*/
|
||||
// Laravel Framework Service Providers...
|
||||
Illuminate\Auth\AuthServiceProvider::class,
|
||||
Illuminate\Broadcasting\BroadcastServiceProvider::class,
|
||||
Illuminate\Bus\BusServiceProvider::class,
|
||||
@@ -187,25 +96,22 @@ return [
|
||||
Illuminate\Redis\RedisServiceProvider::class,
|
||||
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
|
||||
Illuminate\Session\SessionServiceProvider::class,
|
||||
Illuminate\Translation\TranslationServiceProvider::class,
|
||||
Illuminate\Validation\ValidationServiceProvider::class,
|
||||
Illuminate\View\ViewServiceProvider::class,
|
||||
Illuminate\Notifications\NotificationServiceProvider::class,
|
||||
SocialiteProviders\Manager\ServiceProvider::class,
|
||||
|
||||
/**
|
||||
* Third Party
|
||||
*/
|
||||
// Third party service providers
|
||||
Intervention\Image\ImageServiceProvider::class,
|
||||
Barryvdh\DomPDF\ServiceProvider::class,
|
||||
Barryvdh\Snappy\ServiceProvider::class,
|
||||
|
||||
|
||||
/*
|
||||
* Application Service Providers...
|
||||
*/
|
||||
// BookStack replacement service providers (Extends Laravel)
|
||||
BookStack\Providers\PaginationServiceProvider::class,
|
||||
BookStack\Providers\TranslationServiceProvider::class,
|
||||
|
||||
// BookStack custom service providers
|
||||
BookStack\Providers\AuthServiceProvider::class,
|
||||
BookStack\Providers\AppServiceProvider::class,
|
||||
BookStack\Providers\BroadcastServiceProvider::class,
|
||||
@@ -225,8 +131,10 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
// Class aliases, Registered on application start
|
||||
'aliases' => [
|
||||
|
||||
// Laravel
|
||||
'App' => Illuminate\Support\Facades\App::class,
|
||||
'Artisan' => Illuminate\Support\Facades\Artisan::class,
|
||||
'Auth' => Illuminate\Support\Facades\Auth::class,
|
||||
@@ -262,18 +170,12 @@ return [
|
||||
'View' => Illuminate\Support\Facades\View::class,
|
||||
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
|
||||
|
||||
/**
|
||||
* Third Party
|
||||
*/
|
||||
|
||||
// Third Party
|
||||
'ImageTool' => Intervention\Image\Facades\Image::class,
|
||||
'DomPDF' => Barryvdh\DomPDF\Facade::class,
|
||||
'SnappyPDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
|
||||
|
||||
/**
|
||||
* Custom
|
||||
*/
|
||||
|
||||
// Custom BookStack
|
||||
'Activity' => BookStack\Facades\Activity::class,
|
||||
'Setting' => BookStack\Facades\Setting::class,
|
||||
'Views' => BookStack\Facades\Views::class,
|
||||
@@ -281,6 +183,7 @@ return [
|
||||
|
||||
],
|
||||
|
||||
// Proxy configuration
|
||||
'proxies' => env('APP_PROXIES', ''),
|
||||
|
||||
];
|
||||
|
||||
@@ -1,43 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Authentication configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
|
||||
// Method of authentication to use
|
||||
// Options: standard, ldap
|
||||
'method' => env('AUTH_METHOD', 'standard'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Defaults
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default authentication "guard" and password
|
||||
| reset options for your application. You may change these defaults
|
||||
| as required, but they're a perfect start for most applications.
|
||||
|
|
||||
*/
|
||||
|
||||
// Authentication Defaults
|
||||
// This option controls the default authentication "guard" and password
|
||||
// reset options for your application.
|
||||
'defaults' => [
|
||||
'guard' => 'web',
|
||||
'passwords' => 'users',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Guards
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Next, you may define every authentication guard for your application.
|
||||
| Of course, a great default configuration has been defined for you
|
||||
| here which uses session storage and the Eloquent user provider.
|
||||
|
|
||||
| All authentication drivers have a user provider. This defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| mechanisms used by this application to persist your user's data.
|
||||
|
|
||||
| Supported: "session", "token"
|
||||
|
|
||||
*/
|
||||
|
||||
// Authentication Guards
|
||||
// All authentication drivers have a user provider. This defines how the
|
||||
// users are actually retrieved out of your database or other storage
|
||||
// mechanisms used by this application to persist your user's data.
|
||||
// Supported: "session", "token"
|
||||
'guards' => [
|
||||
'web' => [
|
||||
'driver' => 'session',
|
||||
@@ -50,23 +39,11 @@ return [
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| User Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| All authentication drivers have a user provider. This defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| mechanisms used by this application to persist your user's data.
|
||||
|
|
||||
| If you have multiple user tables or models you may configure multiple
|
||||
| sources which represent each model / table. These sources may then
|
||||
| be assigned to any extra authentication guards you have defined.
|
||||
|
|
||||
| Supported: "database", "eloquent"
|
||||
|
|
||||
*/
|
||||
|
||||
// User Providers
|
||||
// All authentication drivers have a user provider. This defines how the
|
||||
// users are actually retrieved out of your database or other storage
|
||||
// mechanisms used by this application to persist your user's data.
|
||||
// Supported: database, eloquent, ldap
|
||||
'providers' => [
|
||||
'users' => [
|
||||
'driver' => env('AUTH_METHOD', 'standard') === 'standard' ? 'eloquent' : env('AUTH_METHOD'),
|
||||
@@ -79,25 +56,10 @@ return [
|
||||
// ],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Resetting Passwords
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may set the options for resetting passwords including the view
|
||||
| that is your password reset e-mail. You may also set the name of the
|
||||
| table that maintains all of the reset tokens for your application.
|
||||
|
|
||||
| You may specify multiple password reset configurations if you have more
|
||||
| than one user table or model in the application and you want to have
|
||||
| separate password reset settings based on the specific user types.
|
||||
|
|
||||
| The expire time is the number of minutes that the reset token should be
|
||||
| considered valid. This security feature keeps tokens short-lived so
|
||||
| they have less time to be guessed. You may change this as needed.
|
||||
|
|
||||
*/
|
||||
|
||||
// Resetting Passwords
|
||||
// The expire time is the number of minutes that the reset token should be
|
||||
// considered valid. This security feature keeps tokens short-lived so
|
||||
// they have less time to be guessed. You may change this as needed.
|
||||
'passwords' => [
|
||||
'users' => [
|
||||
'provider' => 'users',
|
||||
|
||||
@@ -1,31 +1,25 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Broadcasting configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Broadcaster
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default broadcaster that will be used by the
|
||||
| framework when an event needs to be broadcast. You may set this to
|
||||
| any of the connections defined in the "connections" array below.
|
||||
|
|
||||
*/
|
||||
|
||||
// Default Broadcaster
|
||||
// This option controls the default broadcaster that will be used by the
|
||||
// framework when an event needs to be broadcast. This can be set to
|
||||
// any of the connections defined in the "connections" array below.
|
||||
'default' => env('BROADCAST_DRIVER', 'pusher'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Broadcast Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define all of the broadcast connections that will be used
|
||||
| to broadcast events to other systems or over websockets. Samples of
|
||||
| each available type of connection are provided inside this array.
|
||||
|
|
||||
*/
|
||||
|
||||
// Broadcast Connections
|
||||
// Here you may define all of the broadcast connections that will be used
|
||||
// to broadcast events to other systems or over websockets. Samples of
|
||||
// each available type of connection are provided inside this array.
|
||||
'connections' => [
|
||||
|
||||
'pusher' => [
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Caching configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
// MEMCACHED - Split out configuration into an array
|
||||
if (env('CACHE_DRIVER') === 'memcached') {
|
||||
$memcachedServerKeys = ['host', 'port', 'weight'];
|
||||
@@ -14,30 +22,11 @@ if (env('CACHE_DRIVER') === 'memcached') {
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default cache connection that gets used while
|
||||
| using this caching library. This connection is used when another is
|
||||
| not explicitly specified when executing a given caching function.
|
||||
|
|
||||
*/
|
||||
|
||||
// Default cache store to use
|
||||
// Can be overridden at cache call-time
|
||||
'default' => env('CACHE_DRIVER', 'file'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Stores
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define all of the cache "stores" for your application as
|
||||
| well as their drivers. You may even define multiple stores for the
|
||||
| same cache driver to group types of items stored in your caches.
|
||||
|
|
||||
*/
|
||||
|
||||
// Available caches stores
|
||||
'stores' => [
|
||||
|
||||
'apc' => [
|
||||
@@ -71,17 +60,8 @@ return [
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Key Prefix
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing a RAM based store such as APC or Memcached, there might
|
||||
| be other applications utilizing the same cache. So, we'll specify a
|
||||
| value to get prefixed to all our keys so we can avoid collisions.
|
||||
|
|
||||
*/
|
||||
|
||||
// Cache key prefix
|
||||
// Used to prevent collisions in shared cache systems.
|
||||
'prefix' => env('CACHE_PREFIX', 'bookstack'),
|
||||
|
||||
];
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Additional Compiled Classes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify additional classes to include in the compiled file
|
||||
| generated by the `artisan optimize` command. These should be classes
|
||||
| that are included on basically every request into the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'files' => [
|
||||
//
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Compiled File Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may list service providers which define a "compiles" function
|
||||
| that returns additional files that should be compiled, providing an
|
||||
| easy way to get common files from any packages you are utilizing.
|
||||
|
|
||||
*/
|
||||
|
||||
'providers' => [
|
||||
//
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,5 +1,13 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Database configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
// REDIS - Split out configuration into an array
|
||||
if (env('REDIS_SERVERS', false)) {
|
||||
$redisServerKeys = ['host', 'port', 'database'];
|
||||
@@ -16,6 +24,7 @@ if (env('REDIS_SERVERS', false)) {
|
||||
}
|
||||
}
|
||||
|
||||
// MYSQL - Split out port from host if set
|
||||
$mysql_host = env('DB_HOST', 'localhost');
|
||||
$mysql_host_exploded = explode(':', $mysql_host);
|
||||
$mysql_port = env('DB_PORT', 3306);
|
||||
@@ -26,48 +35,12 @@ if (count($mysql_host_exploded) > 1) {
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| PDO Fetch Style
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By default, database results will be returned as instances of the PHP
|
||||
| stdClass object; however, you may desire to retrieve records in an
|
||||
| array format for simplicity. Here you can tweak the fetch style.
|
||||
|
|
||||
*/
|
||||
|
||||
'fetch' => PDO::FETCH_CLASS,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Database Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify which of the database connections below you wish
|
||||
| to use as your default connection for all database work. Of course
|
||||
| you may use many connections at once using the Database library.
|
||||
|
|
||||
*/
|
||||
|
||||
// Default database connection name.
|
||||
// Options: mysql, mysql_testing
|
||||
'default' => env('DB_CONNECTION', 'mysql'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Database Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here are each of the database connections setup for your application.
|
||||
| Of course, examples of configuring each database platform that is
|
||||
| supported by Laravel is shown below to make development simple.
|
||||
|
|
||||
|
|
||||
| All database work in Laravel is done through the PHP PDO facilities
|
||||
| so make sure you have the driver for your particular database of
|
||||
| choice installed on your machine before you begin development.
|
||||
|
|
||||
*/
|
||||
|
||||
// Available database connections
|
||||
// Many of those shown here are unsupported by BookStack.
|
||||
'connections' => [
|
||||
|
||||
'sqlite' => [
|
||||
@@ -82,11 +55,13 @@ return [
|
||||
'database' => env('DB_DATABASE', 'forge'),
|
||||
'username' => env('DB_USERNAME', 'forge'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'port' => $mysql_port,
|
||||
'charset' => 'utf8mb4',
|
||||
'collation' => 'utf8mb4_unicode_ci',
|
||||
'prefix' => '',
|
||||
'strict' => false,
|
||||
'engine' => null,
|
||||
],
|
||||
|
||||
'mysql_testing' => [
|
||||
@@ -124,30 +99,13 @@ return [
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Migration Repository Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This table keeps track of all the migrations that have already run for
|
||||
| your application. Using this information, we can determine which of
|
||||
| the migrations on disk haven't actually been run in the database.
|
||||
|
|
||||
*/
|
||||
|
||||
// Migration Repository Table
|
||||
// This table keeps track of all the migrations that have already run for
|
||||
// your application. Using this information, we can determine which of
|
||||
// the migrations on disk haven't actually been run in the database.
|
||||
'migrations' => 'migrations',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Redis Databases
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Redis is an open source, fast, and advanced key-value store that also
|
||||
| provides a richer set of commands than a typical key-value systems
|
||||
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
||||
|
|
||||
*/
|
||||
|
||||
// Redis configuration to use if set
|
||||
'redis' => env('REDIS_SERVERS', false) ? $redisConfig : [],
|
||||
|
||||
];
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* DOMPDF configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set some default values. It is possible to add all defines that can be set
|
||||
| in dompdf_config.inc.php. You can also override the entire config file.
|
||||
|
|
||||
*/
|
||||
|
||||
'show_warnings' => false, // Throw an Exception on warnings from dompdf
|
||||
'orientation' => 'portrait',
|
||||
'defines' => [
|
||||
|
||||
@@ -1,57 +1,29 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Filesystem configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Filesystem Disk
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default filesystem disk that should be used
|
||||
| by the framework. A "local" driver, as well as a variety of cloud
|
||||
| based drivers are available for your choosing. Just store away!
|
||||
|
|
||||
| Supported: "local", "ftp", "s3", "rackspace"
|
||||
|
|
||||
*/
|
||||
|
||||
// Default Filesystem Disk
|
||||
// Options: local, local_secure, s3
|
||||
'default' => env('STORAGE_TYPE', 'local'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Storage URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is the url to where the storage is located for when using an external
|
||||
| file storage service, such as s3, to store publicly accessible assets.
|
||||
|
|
||||
*/
|
||||
// Storage URL
|
||||
// This is the url to where the storage is located for when using an external
|
||||
// file storage service, such as s3, to store publicly accessible assets.
|
||||
'url' => env('STORAGE_URL', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Cloud Filesystem Disk
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Many applications store files both locally and in the cloud. For this
|
||||
| reason, you may specify a default "cloud" driver here. This driver
|
||||
| will be bound as the Cloud disk implementation in the container.
|
||||
|
|
||||
*/
|
||||
|
||||
// Default Cloud Filesystem Disk
|
||||
'cloud' => 's3',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filesystem Disks
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure as many filesystem "disks" as you wish, and you
|
||||
| may even configure multiple disks of the same driver. Defaults have
|
||||
| been setup for each driver as an example of the required options.
|
||||
|
|
||||
*/
|
||||
|
||||
// Available filesystem disks
|
||||
// Only local, local_secure & s3 are supported by BookStack
|
||||
'disks' => [
|
||||
|
||||
'local' => [
|
||||
@@ -69,13 +41,6 @@ return [
|
||||
'host' => 'ftp.example.com',
|
||||
'username' => 'your-username',
|
||||
'password' => 'your-password',
|
||||
|
||||
// Optional FTP Settings...
|
||||
// 'port' => 21,
|
||||
// 'root' => '',
|
||||
// 'passive' => true,
|
||||
// 'ssl' => true,
|
||||
// 'timeout' => 30,
|
||||
],
|
||||
|
||||
's3' => [
|
||||
|
||||
131
config/mail.php
131
config/mail.php
@@ -1,124 +1,49 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Mail configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Mail Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Laravel supports both SMTP and PHP's "mail" function as drivers for the
|
||||
| sending of e-mail. You may specify which one you're using throughout
|
||||
| your application here. By default, Laravel is setup for SMTP mail.
|
||||
|
|
||||
| Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", "ses", "log"
|
||||
|
|
||||
*/
|
||||
|
||||
// Mail driver to use.
|
||||
// Options: smtp, mail, sendmail, log
|
||||
'driver' => env('MAIL_DRIVER', 'smtp'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Host Address
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may provide the host address of the SMTP server used by your
|
||||
| applications. A default option is provided that is compatible with
|
||||
| the Mailgun mail service which will provide reliable deliveries.
|
||||
|
|
||||
*/
|
||||
|
||||
// SMTP host address
|
||||
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Host Port
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is the SMTP port used by your application to deliver e-mails to
|
||||
| users of the application. Like the host we have set this value to
|
||||
| stay compatible with the Mailgun e-mail application by default.
|
||||
|
|
||||
*/
|
||||
|
||||
// SMTP host port
|
||||
'port' => env('MAIL_PORT', 587),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Global "From" Address
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You may wish for all e-mails sent by your application to be sent from
|
||||
| the same address. Here, you may specify a name and address that is
|
||||
| used globally for all e-mails that are sent by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'from' => ['address' => env('MAIL_FROM', 'mail@bookstackapp.com'), 'name' => env('MAIL_FROM_NAME','BookStack')],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| E-Mail Encryption Protocol
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the encryption protocol that should be used when
|
||||
| the application send e-mail messages. A sensible default using the
|
||||
| transport layer security protocol should provide great security.
|
||||
|
|
||||
*/
|
||||
// Global "From" address & name
|
||||
'from' => [
|
||||
'address' => env('MAIL_FROM', 'mail@bookstackapp.com'),
|
||||
'name' => env('MAIL_FROM_NAME','BookStack')
|
||||
],
|
||||
|
||||
// Email encryption protocol
|
||||
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Server Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| If your SMTP server requires a username for authentication, you should
|
||||
| set it here. This will get used to authenticate with your server on
|
||||
| connection. You may also set the "password" value below this one.
|
||||
|
|
||||
*/
|
||||
|
||||
// SMTP server username
|
||||
'username' => env('MAIL_USERNAME'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Server Password
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may set the password required by your SMTP server to send out
|
||||
| messages from your application. This will be given to the server on
|
||||
| connection so that the application will be able to send messages.
|
||||
|
|
||||
*/
|
||||
|
||||
// SMTP server password
|
||||
'password' => env('MAIL_PASSWORD'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Sendmail System Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "sendmail" driver to send e-mails, we will need to know
|
||||
| the path to where Sendmail lives on this server. A default path has
|
||||
| been provided here, which will work well on most of your systems.
|
||||
|
|
||||
*/
|
||||
|
||||
// Sendmail application path
|
||||
'sendmail' => '/usr/sbin/sendmail -bs',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Mail "Pretend"
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When this option is enabled, e-mail will not actually be sent over the
|
||||
| web and will instead be written to your application's logs files so
|
||||
| you may inspect the message. This is great for local development.
|
||||
|
|
||||
*/
|
||||
|
||||
'pretend' => env('MAIL_PRETEND', false),
|
||||
// Email markdown configuration
|
||||
'markdown' => [
|
||||
'theme' => 'default',
|
||||
'paths' => [
|
||||
resource_path('views/vendor/mail'),
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
@@ -1,34 +1,20 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Queue configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Queue Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The Laravel queue API supports a variety of back-ends via an unified
|
||||
| API, giving you convenient access to each back-end using the same
|
||||
| syntax for each one. Here you may set the default queue driver.
|
||||
|
|
||||
| Supported: "null", "sync", "database", "beanstalkd",
|
||||
| "sqs", "iron", "redis"
|
||||
|
|
||||
*/
|
||||
|
||||
// Default driver to use for the queue
|
||||
// Options: null, sync, redis
|
||||
'default' => env('QUEUE_DRIVER', 'sync'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Queue Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the connection information for each server that
|
||||
| is used by your application. A default configuration has been added
|
||||
| for each back-end shipped with Laravel. You are free to add more.
|
||||
|
|
||||
*/
|
||||
|
||||
// Queue connection configuration
|
||||
'connections' => [
|
||||
|
||||
'sync' => [
|
||||
@@ -75,17 +61,7 @@ return [
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Failed Queue Jobs
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These options configure the behavior of failed queue job logging so you
|
||||
| can control which database and table are used to store the jobs that
|
||||
| have failed. You may change them to any database / table you wish.
|
||||
|
|
||||
*/
|
||||
|
||||
// Failed queue job logging
|
||||
'failed' => [
|
||||
'database' => 'mysql', 'table' => 'failed_jobs',
|
||||
],
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Third party service configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Third Party Services
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This file is for storing the credentials for third party services such
|
||||
| as Stripe, Mailgun, Mandrill, and others. This file provides a sane
|
||||
| default location for this type of information, allowing packages
|
||||
| to have a conventional place to find your various credentials.
|
||||
|
|
||||
*/
|
||||
|
||||
// Single option to disable non-auth external services such as Gravatar and Draw.io
|
||||
'disable_services' => env('DISABLE_EXTERNAL_SERVICES', false),
|
||||
'gravatar' => env('GRAVATAR', !env('DISABLE_EXTERNAL_SERVICES', false)),
|
||||
|
||||
// Draw.io integration active
|
||||
'drawio' => env('DRAWIO', !env('DISABLE_EXTERNAL_SERVICES', false)),
|
||||
|
||||
// URL for fetching avatars
|
||||
'avatar_url' => env('AVATAR_URL', ''),
|
||||
|
||||
// Callback URL for social authentication methods
|
||||
'callback_url' => env('APP_URL', false),
|
||||
|
||||
'mailgun' => [
|
||||
@@ -27,10 +27,6 @@ return [
|
||||
'secret' => '',
|
||||
],
|
||||
|
||||
'mandrill' => [
|
||||
'secret' => '',
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'key' => '',
|
||||
'secret' => '',
|
||||
@@ -149,6 +145,7 @@ return [
|
||||
'user_to_groups' => env('LDAP_USER_TO_GROUPS',false),
|
||||
'group_attribute' => env('LDAP_GROUP_ATTRIBUTE', 'memberOf'),
|
||||
'remove_from_groups' => env('LDAP_REMOVE_FROM_GROUPS',false),
|
||||
'tls_insecure' => env('LDAP_TLS_INSECURE', false),
|
||||
]
|
||||
|
||||
];
|
||||
|
||||
@@ -1,181 +1,81 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Session configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Session Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default session "driver" that will be used on
|
||||
| requests. By default, we will use the lightweight native driver but
|
||||
| you may specify any of the other wonderful drivers provided here.
|
||||
|
|
||||
| Supported: "file", "cookie", "database", "apc",
|
||||
| "memcached", "redis", "array"
|
||||
|
|
||||
*/
|
||||
|
||||
// Default session driver
|
||||
// Options: file, cookie, database, redis, memcached, array
|
||||
'driver' => env('SESSION_DRIVER', 'file'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Lifetime
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the number of minutes that you wish the session
|
||||
| to be allowed to remain idle before it expires. If you want them
|
||||
| to immediately expire on the browser closing, set that option.
|
||||
|
|
||||
*/
|
||||
|
||||
// Session lifetime, in minutes
|
||||
'lifetime' => env('SESSION_LIFETIME', 120),
|
||||
|
||||
// Expire session on browser close
|
||||
'expire_on_close' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Encryption
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option allows you to easily specify that all of your session data
|
||||
| should be encrypted before it is stored. All encryption will be run
|
||||
| automatically by Laravel and you can use the Session like normal.
|
||||
|
|
||||
*/
|
||||
|
||||
// Encrypt session data
|
||||
'encrypt' => false,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session File Location
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the native session driver, we need a location where session
|
||||
| files may be stored. A default has been set for you but a different
|
||||
| location may be specified. This is only needed for file sessions.
|
||||
|
|
||||
*/
|
||||
|
||||
// Location to store session files
|
||||
'files' => storage_path('framework/sessions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Connection
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" or "redis" session drivers, you may specify a
|
||||
| connection that should be used to manage these sessions. This should
|
||||
| correspond to a connection in your database configuration options.
|
||||
|
|
||||
*/
|
||||
|
||||
// Session Database Connection
|
||||
// When using the "database" or "redis" session drivers, you can specify a
|
||||
// connection that should be used to manage these sessions. This should
|
||||
// correspond to a connection in your database configuration options.
|
||||
'connection' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" session driver, you may specify the table we
|
||||
| should use to manage the sessions. Of course, a sensible default is
|
||||
| provided for you; however, you are free to change this as needed.
|
||||
|
|
||||
*/
|
||||
|
||||
// Session database table, if database driver is in use
|
||||
'table' => 'sessions',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Sweeping Lottery
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Some session drivers must manually sweep their storage location to get
|
||||
| rid of old sessions from storage. Here are the chances that it will
|
||||
| happen on a given request. By default, the odds are 2 out of 100.
|
||||
|
|
||||
*/
|
||||
|
||||
// Session Sweeping Lottery
|
||||
// Some session drivers must manually sweep their storage location to get
|
||||
// rid of old sessions from storage. Here are the chances that it will
|
||||
// happen on a given request. By default, the odds are 2 out of 100.
|
||||
'lottery' => [2, 100],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may change the name of the cookie used to identify a session
|
||||
| instance by ID. The name specified here will get used every time a
|
||||
| new session cookie is created by the framework for every driver.
|
||||
|
|
||||
*/
|
||||
|
||||
// Session Cookie Name
|
||||
// Here you may change the name of the cookie used to identify a session
|
||||
// instance by ID. The name specified here will get used every time a
|
||||
// new session cookie is created by the framework for every driver.
|
||||
'cookie' => env('SESSION_COOKIE_NAME', 'bookstack_session'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The session cookie path determines the path for which the cookie will
|
||||
| be regarded as available. Typically, this will be the root path of
|
||||
| your application but you are free to change this when necessary.
|
||||
|
|
||||
*/
|
||||
|
||||
// Session Cookie Path
|
||||
// The session cookie path determines the path for which the cookie will
|
||||
// be regarded as available. Typically, this will be the root path of
|
||||
// your application but you are free to change this when necessary.
|
||||
'path' => '/',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Domain
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may change the domain of the cookie used to identify a session
|
||||
| in your application. This will determine which domains the cookie is
|
||||
| available to in your application. A sensible default has been set.
|
||||
|
|
||||
*/
|
||||
|
||||
// Session Cookie Domain
|
||||
// Here you may change the domain of the cookie used to identify a session
|
||||
// in your application. This will determine which domains the cookie is
|
||||
// available to in your application. A sensible default has been set.
|
||||
'domain' => env('SESSION_DOMAIN', null),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTPS Only Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By setting this option to true, session cookies will only be sent back
|
||||
| to the server if the browser has a HTTPS connection. This will keep
|
||||
| the cookie from being sent to you if it can not be done securely.
|
||||
|
|
||||
*/
|
||||
|
||||
// HTTPS Only Cookies
|
||||
// By setting this option to true, session cookies will only be sent back
|
||||
// to the server if the browser has a HTTPS connection. This will keep
|
||||
// the cookie from being sent to you if it can not be done securely.
|
||||
'secure' => env('SESSION_SECURE_COOKIE', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTP Access Only
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Setting this value to true will prevent JavaScript from accessing the
|
||||
| value of the cookie and the cookie will only be accessible through
|
||||
| the HTTP protocol. You are free to modify this option if needed.
|
||||
|
|
||||
*/
|
||||
|
||||
// HTTP Access Only
|
||||
// Setting this value to true will prevent JavaScript from accessing the
|
||||
// value of the cookie and the cookie will only be accessible through the HTTP protocol.
|
||||
'http_only' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Same-Site Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines how your cookies behave when cross-site requests
|
||||
| take place, and can be used to mitigate CSRF attacks. By default, we
|
||||
| do not enable this as other CSRF protection services are in place.
|
||||
|
|
||||
| Supported: "lax", "strict"
|
||||
|
|
||||
*/
|
||||
|
||||
// Same-Site Cookies
|
||||
// This option determines how your cookies behave when cross-site requests
|
||||
// take place, and can be used to mitigate CSRF attacks. By default, we
|
||||
// do not enable this as other CSRF protection services are in place.
|
||||
// Options: lax, strict
|
||||
'same_site' => null,
|
||||
|
||||
];
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* The defaults for the system settings that are saved in the database.
|
||||
* Default system settings.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
'app-name' => 'BookStack',
|
||||
'app-logo' => '',
|
||||
'app-name-header' => true,
|
||||
'app-editor' => 'wysiwyg',
|
||||
'app-color' => '#0288D1',
|
||||
'app-color-light' => 'rgba(21, 101, 192, 0.15)',
|
||||
'app-custom-head' => false,
|
||||
'app-name' => 'BookStack',
|
||||
'app-logo' => '',
|
||||
'app-name-header' => true,
|
||||
'app-editor' => 'wysiwyg',
|
||||
'app-color' => '#0288D1',
|
||||
'app-color-light' => 'rgba(21, 101, 192, 0.15)',
|
||||
'app-custom-head' => false,
|
||||
'registration-enabled' => false,
|
||||
|
||||
];
|
||||
@@ -1,5 +1,13 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SnappyPDF configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
return [
|
||||
'pdf' => [
|
||||
'enabled' => true,
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* View configuration options.
|
||||
*
|
||||
* Changes to these config files are not supported by BookStack and may break upon updates.
|
||||
* Configuration should be altered via the `.env` file or environment variables.
|
||||
* Do not edit this file unless you're happy to maintain any changes yourself.
|
||||
*/
|
||||
|
||||
// Join up possible view locations
|
||||
$viewPaths = [realpath(base_path('resources/views'))];
|
||||
if ($theme = env('APP_THEME', false)) {
|
||||
array_unshift($viewPaths, base_path('themes/' . $theme));
|
||||
@@ -7,43 +16,22 @@ if ($theme = env('APP_THEME', false)) {
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| App theme
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option defines the theme to use for the application. When a theme
|
||||
| is set there mush be a `themes/<theme_name>` folder to hold the
|
||||
| custom theme overrides.
|
||||
|
|
||||
*/
|
||||
|
||||
// App theme
|
||||
// This option defines the theme to use for the application. When a theme
|
||||
// is set there must be a `themes/<theme_name>` folder to hold the
|
||||
// custom theme overrides.
|
||||
'theme' => env('APP_THEME', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| View Storage Paths
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Most templating systems load templates from disk. Here you may specify
|
||||
| an array of paths that should be checked for your views. Of course
|
||||
| the usual Laravel view path has already been registered for you.
|
||||
|
|
||||
*/
|
||||
|
||||
// View Storage Paths
|
||||
// Most templating systems load templates from disk. Here you may specify
|
||||
// an array of paths that should be checked for your views. Of course
|
||||
// the usual Laravel view path has already been registered for you.
|
||||
'paths' => $viewPaths,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Compiled View Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines where all the compiled Blade templates will be
|
||||
| stored for your application. Typically, this is within the storage
|
||||
| directory. However, as usual, you are free to change this value.
|
||||
|
|
||||
*/
|
||||
|
||||
// Compiled View Path
|
||||
// This option determines where all the compiled Blade templates will be
|
||||
// stored for your application. Typically, this is within the storage
|
||||
// directory. However, as usual, you are free to change this value.
|
||||
'compiled' => realpath(storage_path('framework/views')),
|
||||
|
||||
];
|
||||
|
||||
452
package-lock.json
generated
452
package-lock.json
generated
@@ -12,27 +12,42 @@
|
||||
}
|
||||
},
|
||||
"@babel/core": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.5.tgz",
|
||||
"integrity": "sha512-vOyH020C56tQvte++i+rX2yokZcRfbv/kKcw+/BCRw/cK6dvsr47aCzm8oC1XHwMSEWbqrZKzZRLzLnq6SFMsg==",
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.6.tgz",
|
||||
"integrity": "sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"@babel/generator": "^7.1.5",
|
||||
"@babel/generator": "^7.1.6",
|
||||
"@babel/helpers": "^7.1.5",
|
||||
"@babel/parser": "^7.1.5",
|
||||
"@babel/parser": "^7.1.6",
|
||||
"@babel/template": "^7.1.2",
|
||||
"@babel/traverse": "^7.1.5",
|
||||
"@babel/types": "^7.1.5",
|
||||
"@babel/traverse": "^7.1.6",
|
||||
"@babel/types": "^7.1.6",
|
||||
"convert-source-map": "^1.1.0",
|
||||
"debug": "^3.1.0",
|
||||
"json5": "^0.5.0",
|
||||
"debug": "^4.1.0",
|
||||
"json5": "^2.1.0",
|
||||
"lodash": "^4.17.10",
|
||||
"resolve": "^1.3.2",
|
||||
"semver": "^5.4.1",
|
||||
"source-map": "^0.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"json5": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
|
||||
"integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
|
||||
"dev": true
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.5.7",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||
@@ -42,12 +57,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.5.tgz",
|
||||
"integrity": "sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA==",
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.6.tgz",
|
||||
"integrity": "sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.1.5",
|
||||
"@babel/types": "^7.1.6",
|
||||
"jsesc": "^2.5.1",
|
||||
"lodash": "^4.17.10",
|
||||
"source-map": "^0.5.0",
|
||||
@@ -277,9 +292,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.5.tgz",
|
||||
"integrity": "sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg==",
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.6.tgz",
|
||||
"integrity": "sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@babel/plugin-proposal-async-generator-functions": {
|
||||
@@ -650,9 +665,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/preset-env": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.5.tgz",
|
||||
"integrity": "sha512-pQ+2o0YyCp98XG0ODOHJd9z4GsSoV5jicSedRwCrU8uiqcJahwQiOq0asSZEb/m/lwyu6X5INvH/DSiwnQKncw==",
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.6.tgz",
|
||||
"integrity": "sha512-YIBfpJNQMBkb6MCkjz/A9J76SNCSuGVamOVBgoUkLzpJD/z8ghHi9I42LQ4pulVX68N/MmImz6ZTixt7Azgexw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/helper-module-imports": "^7.0.0",
|
||||
@@ -710,26 +725,26 @@
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.5.tgz",
|
||||
"integrity": "sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA==",
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.6.tgz",
|
||||
"integrity": "sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"@babel/generator": "^7.1.5",
|
||||
"@babel/generator": "^7.1.6",
|
||||
"@babel/helper-function-name": "^7.1.0",
|
||||
"@babel/helper-split-export-declaration": "^7.0.0",
|
||||
"@babel/parser": "^7.1.5",
|
||||
"@babel/types": "^7.1.5",
|
||||
"debug": "^3.1.0",
|
||||
"@babel/parser": "^7.1.6",
|
||||
"@babel/types": "^7.1.6",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0",
|
||||
"lodash": "^4.17.10"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.5.tgz",
|
||||
"integrity": "sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A==",
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.6.tgz",
|
||||
"integrity": "sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"esutils": "^2.0.2",
|
||||
@@ -954,6 +969,12 @@
|
||||
"json-schema-traverse": "^0.3.0"
|
||||
}
|
||||
},
|
||||
"ajv-errors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz",
|
||||
"integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=",
|
||||
"dev": true
|
||||
},
|
||||
"ajv-keywords": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz",
|
||||
@@ -1779,9 +1800,9 @@
|
||||
}
|
||||
},
|
||||
"clipboard": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz",
|
||||
"integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.4.tgz",
|
||||
"integrity": "sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==",
|
||||
"requires": {
|
||||
"good-listener": "^1.2.2",
|
||||
"select": "^1.1.2",
|
||||
@@ -1856,9 +1877,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"codemirror": {
|
||||
"version": "5.41.0",
|
||||
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.41.0.tgz",
|
||||
"integrity": "sha512-mkCwbneCx2WHg1MNCYrI+8Zuq0KMMaZ5yTFpQlAZazy3yxME8bHcuSc9WUFzgPZ114WqWu1FIHlx8CavLzBDIg=="
|
||||
"version": "5.42.0",
|
||||
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.42.0.tgz",
|
||||
"integrity": "sha512-pbApC8zDzItP3HRphD6kQVwS976qB5Qi0hU3MZMixLk+AyugOW1RF+8XJEjeyl5yWsHNe88tDUxzeRh5AOxPRw=="
|
||||
},
|
||||
"collection-visit": {
|
||||
"version": "1.0.0",
|
||||
@@ -2451,9 +2472,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"debug": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
|
||||
"integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
@@ -2596,12 +2617,6 @@
|
||||
"resolved": "https://registry.npmjs.org/dropzone/-/dropzone-5.5.1.tgz",
|
||||
"integrity": "sha512-3VduRWLxx9hbVr42QieQN25mx/I61/mRdUSuxAmDGdDqZIN8qtP7tcKMa3KfpJjuGjOJGYYUzzeq6eGDnkzesA=="
|
||||
},
|
||||
"duplexer": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
|
||||
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
|
||||
"dev": true
|
||||
},
|
||||
"duplexify": {
|
||||
"version": "3.6.1",
|
||||
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
|
||||
@@ -2761,22 +2776,6 @@
|
||||
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
|
||||
"dev": true
|
||||
},
|
||||
"event-stream": {
|
||||
"version": "3.3.6",
|
||||
"resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.6.tgz",
|
||||
"integrity": "sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"duplexer": "^0.1.1",
|
||||
"flatmap-stream": "^0.1.0",
|
||||
"from": "^0.1.7",
|
||||
"map-stream": "0.0.7",
|
||||
"pause-stream": "^0.0.11",
|
||||
"split": "^1.0.1",
|
||||
"stream-combiner": "^0.2.2",
|
||||
"through": "^2.3.8"
|
||||
}
|
||||
},
|
||||
"events": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
|
||||
@@ -2924,6 +2923,12 @@
|
||||
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
|
||||
"dev": true
|
||||
},
|
||||
"figgy-pudding": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
|
||||
"integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
|
||||
"dev": true
|
||||
},
|
||||
"filename-regex": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
|
||||
@@ -2990,12 +2995,6 @@
|
||||
"locate-path": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"flatmap-stream": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/flatmap-stream/-/flatmap-stream-0.1.1.tgz",
|
||||
"integrity": "sha512-lAq4tLbm3sidmdCN8G3ExaxH7cUCtP5mgDvrYowsx84dcYkJJ4I28N7gkxA6+YlSXzaGLJYIDEi9WGfXzMiXdw==",
|
||||
"dev": true
|
||||
},
|
||||
"flatten": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
|
||||
@@ -3053,12 +3052,6 @@
|
||||
"map-cache": "^0.2.2"
|
||||
}
|
||||
},
|
||||
"from": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
|
||||
"integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
|
||||
"dev": true
|
||||
},
|
||||
"from2": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
|
||||
@@ -3128,12 +3121,14 @@
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
@@ -3153,7 +3148,8 @@
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"bundled": true,
|
||||
"dev": true
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
@@ -3301,6 +3297,7 @@
|
||||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
@@ -3680,7 +3677,7 @@
|
||||
},
|
||||
"get-stream": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
|
||||
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
|
||||
"dev": true
|
||||
},
|
||||
@@ -3739,9 +3736,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"globals": {
|
||||
"version": "11.8.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz",
|
||||
"integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==",
|
||||
"version": "11.9.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
|
||||
"integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==",
|
||||
"dev": true
|
||||
},
|
||||
"globule": {
|
||||
@@ -4692,12 +4689,6 @@
|
||||
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
|
||||
"dev": true
|
||||
},
|
||||
"map-stream": {
|
||||
"version": "0.0.7",
|
||||
"resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz",
|
||||
"integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=",
|
||||
"dev": true
|
||||
},
|
||||
"map-visit": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
|
||||
@@ -5094,9 +5085,9 @@
|
||||
}
|
||||
},
|
||||
"node-releases": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.3.tgz",
|
||||
"integrity": "sha512-ZaZWMsbuDcetpHmYeKWPO6e63pSXLb50M7lJgCbcM2nC/nQC3daNifmtp5a2kp7EWwYfhuvH6zLPWkrF8IiDdw==",
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.4.tgz",
|
||||
"integrity": "sha512-GqRV9GcHw8JCRDaP/JoeNMNzEGzHAknMvIHqMb2VeTOmg1Cf9+ej8bkV12tHfzWHQMCkQ5zUFgwFUkfraynNCw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"semver": "^5.3.0"
|
||||
@@ -5205,17 +5196,17 @@
|
||||
}
|
||||
},
|
||||
"npm-run-all": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz",
|
||||
"integrity": "sha512-aOG0N3Eo/WW+q6sUIdzcV2COS8VnTZCmdji0VQIAZF3b+a3YWb0AD0vFIyjKec18A7beLGbaQ5jFTNI2bPt9Cg==",
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
|
||||
"integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.0",
|
||||
"chalk": "^2.1.0",
|
||||
"cross-spawn": "^6.0.4",
|
||||
"ansi-styles": "^3.2.1",
|
||||
"chalk": "^2.4.1",
|
||||
"cross-spawn": "^6.0.5",
|
||||
"memorystream": "^0.3.1",
|
||||
"minimatch": "^3.0.4",
|
||||
"ps-tree": "^1.1.0",
|
||||
"pidtree": "^0.3.0",
|
||||
"read-pkg": "^3.0.0",
|
||||
"shell-quote": "^1.6.1",
|
||||
"string.prototype.padend": "^3.0.0"
|
||||
@@ -5483,7 +5474,7 @@
|
||||
},
|
||||
"p-is-promise": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
|
||||
"integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
|
||||
"dev": true
|
||||
},
|
||||
@@ -5623,15 +5614,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"pause-stream": {
|
||||
"version": "0.0.11",
|
||||
"resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
|
||||
"integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"through": "~2.3"
|
||||
}
|
||||
},
|
||||
"pbkdf2": {
|
||||
"version": "3.0.17",
|
||||
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
|
||||
@@ -5651,6 +5633,12 @@
|
||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
|
||||
"dev": true
|
||||
},
|
||||
"pidtree": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
|
||||
"integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
|
||||
"dev": true
|
||||
},
|
||||
"pify": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
|
||||
@@ -7644,15 +7632,6 @@
|
||||
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
|
||||
"dev": true
|
||||
},
|
||||
"ps-tree": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz",
|
||||
"integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"event-stream": "~3.3.0"
|
||||
}
|
||||
},
|
||||
"pseudomap": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
|
||||
@@ -8492,6 +8471,16 @@
|
||||
"urix": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"source-map-support": {
|
||||
"version": "0.5.9",
|
||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
|
||||
"integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"buffer-from": "^1.0.0",
|
||||
"source-map": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"source-map-url": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
|
||||
@@ -8530,15 +8519,6 @@
|
||||
"integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
|
||||
"dev": true
|
||||
},
|
||||
"split": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
|
||||
"integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"through": "2"
|
||||
}
|
||||
},
|
||||
"split-string": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
|
||||
@@ -8611,7 +8591,7 @@
|
||||
},
|
||||
"stream-browserify": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
|
||||
"integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
@@ -8619,16 +8599,6 @@
|
||||
"readable-stream": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"stream-combiner": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz",
|
||||
"integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"duplexer": "~0.1.1",
|
||||
"through": "~2.3.4"
|
||||
}
|
||||
},
|
||||
"stream-each": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
|
||||
@@ -8675,7 +8645,7 @@
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
@@ -8747,7 +8717,7 @@
|
||||
},
|
||||
"strip-eof": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
|
||||
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
|
||||
"dev": true
|
||||
},
|
||||
@@ -8811,11 +8781,205 @@
|
||||
"inherits": "2"
|
||||
}
|
||||
},
|
||||
"through": {
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
|
||||
"dev": true
|
||||
"terser": {
|
||||
"version": "3.10.12",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-3.10.12.tgz",
|
||||
"integrity": "sha512-3ODPC1eVt25EVNb04s/PkHxOmzKBQUF6bwwuR6h2DbEF8/j265Y1UkwNtOk9am/pRxfJ5HPapOlUlO6c16mKQQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commander": "~2.17.1",
|
||||
"source-map": "~0.6.1",
|
||||
"source-map-support": "~0.5.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "2.17.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
|
||||
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"terser-webpack-plugin": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz",
|
||||
"integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cacache": "^11.0.2",
|
||||
"find-cache-dir": "^2.0.0",
|
||||
"schema-utils": "^1.0.0",
|
||||
"serialize-javascript": "^1.4.0",
|
||||
"source-map": "^0.6.1",
|
||||
"terser": "^3.8.1",
|
||||
"webpack-sources": "^1.1.0",
|
||||
"worker-farm": "^1.5.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": {
|
||||
"version": "6.5.5",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz",
|
||||
"integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
"json-schema-traverse": "^0.4.1",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"cacache": {
|
||||
"version": "11.3.1",
|
||||
"resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
|
||||
"integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bluebird": "^3.5.1",
|
||||
"chownr": "^1.0.1",
|
||||
"figgy-pudding": "^3.1.0",
|
||||
"glob": "^7.1.2",
|
||||
"graceful-fs": "^4.1.11",
|
||||
"lru-cache": "^4.1.3",
|
||||
"mississippi": "^3.0.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"move-concurrently": "^1.0.1",
|
||||
"promise-inflight": "^1.0.1",
|
||||
"rimraf": "^2.6.2",
|
||||
"ssri": "^6.0.0",
|
||||
"unique-filename": "^1.1.0",
|
||||
"y18n": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
|
||||
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
|
||||
"dev": true
|
||||
},
|
||||
"find-cache-dir": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
|
||||
"integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commondir": "^1.0.1",
|
||||
"make-dir": "^1.0.0",
|
||||
"pkg-dir": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"find-up": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
|
||||
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"locate-path": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
},
|
||||
"locate-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
|
||||
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-locate": "^3.0.0",
|
||||
"path-exists": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"mississippi": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
|
||||
"integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"concat-stream": "^1.5.0",
|
||||
"duplexify": "^3.4.2",
|
||||
"end-of-stream": "^1.1.0",
|
||||
"flush-write-stream": "^1.0.0",
|
||||
"from2": "^2.1.0",
|
||||
"parallel-transform": "^1.1.0",
|
||||
"pump": "^3.0.0",
|
||||
"pumpify": "^1.3.3",
|
||||
"stream-each": "^1.1.0",
|
||||
"through2": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"p-limit": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
|
||||
"integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-try": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"p-locate": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
|
||||
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"p-limit": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"p-try": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
|
||||
"integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
|
||||
"dev": true
|
||||
},
|
||||
"pkg-dir": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
|
||||
"integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"find-up": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"pump": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
||||
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"end-of-stream": "^1.1.0",
|
||||
"once": "^1.3.1"
|
||||
}
|
||||
},
|
||||
"schema-utils": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
|
||||
"integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.1.0",
|
||||
"ajv-errors": "^1.0.0",
|
||||
"ajv-keywords": "^3.1.0"
|
||||
}
|
||||
},
|
||||
"ssri": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
|
||||
"integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"figgy-pudding": "^3.5.1"
|
||||
}
|
||||
},
|
||||
"y18n": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
|
||||
"integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"through2": {
|
||||
"version": "2.0.3",
|
||||
@@ -9638,9 +9802,9 @@
|
||||
}
|
||||
},
|
||||
"webpack": {
|
||||
"version": "4.25.1",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.25.1.tgz",
|
||||
"integrity": "sha512-T0GU/3NRtO4tMfNzsvpdhUr8HnzA4LTdP2zd+e5zd6CdOH5vNKHnAlO+DvzccfhPdzqRrALOFcjYxx7K5DWmvA==",
|
||||
"version": "4.26.1",
|
||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-4.26.1.tgz",
|
||||
"integrity": "sha512-i2oOvEvuvLLSuSCkdVrknaxAhtUZ9g+nLSoHCWV0gDzqGX2DXaCrMmMUpbRsTSSLrUqAI56PoEiyMUZIZ1msug==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@webassemblyjs/ast": "1.7.11",
|
||||
@@ -9664,7 +9828,7 @@
|
||||
"node-libs-browser": "^2.0.0",
|
||||
"schema-utils": "^0.4.4",
|
||||
"tapable": "^1.1.0",
|
||||
"uglifyjs-webpack-plugin": "^1.2.4",
|
||||
"terser-webpack-plugin": "^1.1.0",
|
||||
"watchpack": "^1.5.0",
|
||||
"webpack-sources": "^1.3.0"
|
||||
},
|
||||
|
||||
12
package.json
12
package.json
@@ -10,27 +10,27 @@
|
||||
"permissions": "chown -R $USER:$USER bootstrap/cache storage public/uploads"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.1.5",
|
||||
"@babel/core": "^7.1.6",
|
||||
"@babel/polyfill": "^7.0.0",
|
||||
"@babel/preset-env": "^7.1.5",
|
||||
"@babel/preset-env": "^7.1.6",
|
||||
"autoprefixer": "^8.6.5",
|
||||
"babel-loader": "^8.0.4",
|
||||
"css-loader": "^0.28.11",
|
||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||
"livereload": "^0.7.0",
|
||||
"node-sass": "^4.10.0",
|
||||
"npm-run-all": "^4.1.3",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss-loader": "^2.1.6",
|
||||
"sass-loader": "^7.1.0",
|
||||
"style-loader": "^0.21.0",
|
||||
"uglifyjs-webpack-plugin": "^1.3.0",
|
||||
"webpack": "^4.25.1",
|
||||
"webpack": "^4.26.1",
|
||||
"webpack-cli": "^3.1.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.18.0",
|
||||
"clipboard": "^2.0.1",
|
||||
"codemirror": "^5.41.0",
|
||||
"clipboard": "^2.0.4",
|
||||
"codemirror": "^5.42.0",
|
||||
"dropzone": "^5.5.1",
|
||||
"jquery": "^3.3.1",
|
||||
"jquery-sortable": "^0.9.13",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
<env name="MAIL_DRIVER" value="log"/>
|
||||
<env name="AUTH_METHOD" value="standard"/>
|
||||
<env name="DISABLE_EXTERNAL_SERVICES" value="true"/>
|
||||
<env name="AVATAR_URL" value=""/>
|
||||
<env name="LDAP_VERSION" value="3"/>
|
||||
<env name="STORAGE_TYPE" value="local"/>
|
||||
<env name="GITHUB_APP_ID" value="aaaaaaaaaaaaaa"/>
|
||||
|
||||
67
public/dist/app.js
vendored
67
public/dist/app.js
vendored
File diff suppressed because one or more lines are too long
2516
public/dist/export-styles.css
vendored
2516
public/dist/export-styles.css
vendored
File diff suppressed because it is too large
Load Diff
25
public/dist/print-styles.css
vendored
25
public/dist/print-styles.css
vendored
@@ -1,25 +0,0 @@
|
||||
header {
|
||||
display: none; }
|
||||
|
||||
body {
|
||||
font-size: 12px; }
|
||||
|
||||
.faded-small {
|
||||
display: none; }
|
||||
|
||||
.page-content {
|
||||
margin: 0 auto; }
|
||||
|
||||
.print-hidden {
|
||||
display: none; }
|
||||
|
||||
.print-full-width {
|
||||
width: 100%;
|
||||
float: none;
|
||||
display: block; }
|
||||
|
||||
h2 {
|
||||
font-size: 2em;
|
||||
line-height: 1;
|
||||
margin-top: 0.6em;
|
||||
margin-bottom: 0.3em; }
|
||||
4291
public/dist/styles.css
vendored
4291
public/dist/styles.css
vendored
File diff suppressed because it is too large
Load Diff
11
readme.md
11
readme.md
@@ -25,11 +25,14 @@ In regards to development philosophy, BookStack has a relaxed, open & positive a
|
||||
|
||||
All development on BookStack is currently done on the master branch. When it's time for a release the master branch is merged into release with built & minified CSS & JS then tagged at its version. Here are the current development requirements:
|
||||
|
||||
* [Node.js](https://nodejs.org/en/) v6.9+
|
||||
* [Node.js](https://nodejs.org/en/) v10.0+
|
||||
|
||||
SASS is used to help the CSS development and the JavaScript is run through babel to allow for writing ES6 code. This is done using webpack. To run the build task you can use the following commands:
|
||||
|
||||
``` bash
|
||||
# Install NPM Dependencies
|
||||
npm install
|
||||
|
||||
# Build assets for development
|
||||
npm run build
|
||||
|
||||
@@ -40,7 +43,7 @@ npm run production
|
||||
npm run dev
|
||||
```
|
||||
|
||||
BookStack has many integration tests that use Laravel's built-in testing capabilities which makes use of PHPUnit. To use you will need PHPUnit installed and accessible via command line. There is a `mysql_testing` database defined within the app config which is what is used by PHPUnit. This database is set with the following database name, user name and password defined as `bookstack-test`. You will have to create that database and credentials before testing.
|
||||
BookStack has many integration tests that use Laravel's built-in testing capabilities which makes use of PHPUnit. To use you will need PHPUnit 6 installed and accessible via command line, Directly running the composer-installed version will not work. There is a `mysql_testing` database defined within the app config which is what is used by PHPUnit. This database is set with the following database name, user name and password defined as `bookstack-test`. You will have to create that database and credentials before testing.
|
||||
|
||||
The testing database will also need migrating and seeding beforehand. This can be done with the following commands:
|
||||
|
||||
@@ -53,7 +56,7 @@ Once done you can run `phpunit` in the application root directory to run all tes
|
||||
|
||||
## Translations
|
||||
|
||||
As part of BookStack v0.14 support for translations has been built in. All text strings can be found in the `resources/lang` folder where each language option has its own folder. To add a new language you should copy the `en` folder to an new folder (eg. `fr` for french) then go through and translate all text strings in those files, leaving the keys and file-names intact. If a language string is missing then the `en` translation will be used. To show the language option in the user preferences language drop-down you will need to add your language to the options found at the bottom of the `resources/lang/en/settings.php` file. A system-wide language can also be set in the `.env` file like so: `APP_LANG=en`.
|
||||
All text strings can be found in the `resources/lang` folder where each language option has its own folder. To add a new language you should copy the `en` folder to an new folder (eg. `fr` for french) then go through and translate all text strings in those files, leaving the keys and file-names intact. If a language string is missing then the `en` translation will be used. To show the language option in the user preferences language drop-down you will need to add your language to the options found at the bottom of the `resources/lang/en/settings.php` file. A system-wide language can also be set in the `.env` file like so: `APP_LANG=en`.
|
||||
|
||||
You will also need to add the language to the `locales` array in the `config/app.php` file.
|
||||
|
||||
@@ -70,7 +73,7 @@ php resources/lang/check.php pt_BR
|
||||
|
||||
Some strings have colon-prefixed variables in such as `:userName`. Leave these values as they are as they will be replaced at run-time.
|
||||
|
||||
## Contributing & Maintenence
|
||||
## Contributing & Maintenance
|
||||
|
||||
Feel free to create issues to request new features or to report bugs and problems. Just please follow the template given when creating the issue.
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ const modeMap = {
|
||||
sh: 'shell',
|
||||
bash: 'shell',
|
||||
toml: 'toml',
|
||||
sql: 'sql',
|
||||
sql: 'text/x-sql',
|
||||
xml: 'xml',
|
||||
yaml: 'yaml',
|
||||
yml: 'yaml',
|
||||
|
||||
@@ -10,22 +10,28 @@ const props = ['placeholder', 'uploadUrl', 'uploadedTo'];
|
||||
|
||||
// TODO - Remove jQuery usage
|
||||
function mounted() {
|
||||
let container = this.$el;
|
||||
let _this = this;
|
||||
const container = this.$el;
|
||||
const _this = this;
|
||||
this._dz = new DropZone(container, {
|
||||
addRemoveLinks: true,
|
||||
dictRemoveFile: trans('components.image_upload_remove'),
|
||||
addRemoveLinks: true,
|
||||
dictRemoveFile: trans('components.image_upload_remove'),
|
||||
timeout: Number(window.uploadTimeout) || 60000,
|
||||
url: function() {
|
||||
return _this.uploadUrl;
|
||||
},
|
||||
init: function () {
|
||||
let dz = this;
|
||||
const dz = this;
|
||||
|
||||
dz.on('sending', function (file, xhr, data) {
|
||||
let token = window.document.querySelector('meta[name=token]').getAttribute('content');
|
||||
const token = window.document.querySelector('meta[name=token]').getAttribute('content');
|
||||
data.append('_token', token);
|
||||
let uploadedTo = typeof _this.uploadedTo === 'undefined' ? 0 : _this.uploadedTo;
|
||||
const uploadedTo = typeof _this.uploadedTo === 'undefined' ? 0 : _this.uploadedTo;
|
||||
data.append('uploaded_to', uploadedTo);
|
||||
|
||||
xhr.ontimeout = function (e) {
|
||||
dz.emit('complete', file);
|
||||
dz.emit('error', file, trans('errors.file_upload_timeout'));
|
||||
}
|
||||
});
|
||||
|
||||
dz.on('success', function (file, data) {
|
||||
@@ -42,8 +48,11 @@ function mounted() {
|
||||
$(file.previewElement).find('[data-dz-errormessage]').text(message);
|
||||
}
|
||||
|
||||
if (xhr && xhr.status === 413) setMessage(trans('errors.server_upload_limit'));
|
||||
else if (errorMessage.file) setMessage(errorMessage.file);
|
||||
if (xhr && xhr.status === 413) {
|
||||
setMessage(trans('errors.server_upload_limit'))
|
||||
} else if (errorMessage.file) {
|
||||
setMessage(errorMessage.file);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@@ -159,8 +159,8 @@ const methods = {
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
this.$http.delete(`/images/${this.selectedImage.id}`).then(resp => {
|
||||
let url = window.baseUrl(`/images/${this.selectedImage.id}`);
|
||||
this.$http.delete(url).then(resp => {
|
||||
this.images.splice(this.images.indexOf(this.selectedImage), 1);
|
||||
this.selectedImage = false;
|
||||
this.$events.emit('success', trans('components.image_delete_success'));
|
||||
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => 'الخادم لا يسمح برفع ملفات بهذا الحجم. الرجاء محاولة الرفع بحجم أصغر.',
|
||||
'image_upload_error' => 'حدث خطأ خلال رفع الصورة',
|
||||
'image_upload_type_error' => 'صيغة الصورة المرفوعة غير صالحة',
|
||||
'file_upload_timeout' => 'انتهت عملية تحميل الملف.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Page mismatch during attachment update', // جار البحث عن الترجمة الأنسب
|
||||
|
||||
@@ -8,36 +8,44 @@ return [
|
||||
*/
|
||||
|
||||
// Pages
|
||||
'page_create' => 'Seite erstellt',
|
||||
'page_create' => 'erstellt Seite',
|
||||
'page_create_notification' => 'Die Seite wurde erfolgreich erstellt.',
|
||||
'page_update' => 'Seite aktualisiert',
|
||||
'page_update' => 'aktualisiert Seite',
|
||||
'page_update_notification' => 'Die Seite wurde erfolgreich aktualisiert.',
|
||||
'page_delete' => 'Seite gelöscht',
|
||||
'page_delete' => 'löscht Seite',
|
||||
'page_delete_notification' => 'Die Seite wurde erfolgreich gelöscht.',
|
||||
'page_restore' => 'Seite wiederhergstellt',
|
||||
'page_restore_notification' => 'Die Seite wurde erfolgreich wiederhergstellt.',
|
||||
'page_move' => 'Seite verschoben',
|
||||
'page_restore' => 'stellt Seite wieder her',
|
||||
'page_restore_notification' => 'Die Seite wurde erfolgreich wiederhergestellt.',
|
||||
'page_move' => 'verschiebt Seite',
|
||||
'page_move_notification' => 'Die Seite wurde erfolgreich verschoben.',
|
||||
|
||||
// Chapters
|
||||
'chapter_create' => 'Kapitel erstellt',
|
||||
'chapter_create' => 'erstellt Kapitel',
|
||||
'chapter_create_notification' => 'Das Kapitel wurde erfolgreich erstellt.',
|
||||
'chapter_update' => 'Kapitel aktualisiert',
|
||||
'chapter_update' => 'aktualisiert Kapitel',
|
||||
'chapter_update_notification' => 'Das Kapitel wurde erfolgreich aktualisiert.',
|
||||
'chapter_delete' => 'Kapitel gelöscht',
|
||||
'chapter_delete' => 'löscht Kapitel',
|
||||
'chapter_delete_notification' => 'Das Kapitel wurde erfolgreich gelöscht.',
|
||||
'chapter_move' => 'Kapitel verschoben',
|
||||
'chapter_move' => 'verschiebt Kapitel',
|
||||
|
||||
// Books
|
||||
'book_create' => 'Buch erstellt',
|
||||
'book_create' => 'erstellt Buch',
|
||||
'book_create_notification' => 'Das Buch wurde erfolgreich erstellt.',
|
||||
'book_update' => 'Buch aktualisiert',
|
||||
'book_update' => 'aktualisiert Buch',
|
||||
'book_update_notification' => 'Das Buch wurde erfolgreich aktualisiert.',
|
||||
'book_delete' => 'Buch gelöscht',
|
||||
'book_delete' => 'löscht Buch',
|
||||
'book_delete_notification' => 'Das Buch wurde erfolgreich gelöscht.',
|
||||
'book_sort' => 'Buch sortiert',
|
||||
'book_sort_notification' => 'Das Buch wurde erfolgreich neu sortiert.',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'kommentierte',
|
||||
'book_sort' => 'sortiert Buch',
|
||||
'book_sort_notification' => 'Das Buch wurde erfolgreich umsortiert.',
|
||||
|
||||
// Bookshelves
|
||||
'bookshelf_create' => 'erstellt Bücherregal',
|
||||
'bookshelf_create_notification' => 'Das Bücherregal wurde erfolgreich erstellt',
|
||||
'bookshelf_update' => 'aktualisiert Bücherregal',
|
||||
'bookshelf_update_notification' => 'Das Bücherregal wurde erfolgreich aktualisiert',
|
||||
'bookshelf_delete' => 'löscht Bücherregal',
|
||||
'bookshelf_delete_notification' => 'Das Bücherregal wurde erfolgreich gelöscht',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'kommentiert',
|
||||
];
|
||||
|
||||
@@ -32,6 +32,8 @@ return [
|
||||
'server_upload_limit' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuchen Sie es mit einer kleineren Datei.',
|
||||
'image_upload_error' => 'Beim Hochladen des Bildes trat ein Fehler auf.',
|
||||
'image_upload_type_error' => 'Der Bildtyp der hochgeladenen Datei ist ungültig.',
|
||||
'file_upload_timeout' => 'Der Upload der Datei ist abgelaufen.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Die Seite stimmte nach dem Hochladen des Anhangs nicht überein.',
|
||||
'attachment_not_found' => 'Anhang konnte nicht gefunden werden.',
|
||||
|
||||
@@ -13,10 +13,10 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Passörter müssen mindestens sechs Zeichen enthalten und die Wiederholung muss übereinstimmen.',
|
||||
'user' => "Es konnte kein Benutzer mit dieser E-Mail-Adresse gefunden werden.",
|
||||
'token' => 'Dieser Link zum Zurücksetzen des Passwortes ist ungültig.',
|
||||
'sent' => 'Wir haben Ihnen eine E-Mail mit einem Link zum Zurücksetzen des Passworts zugesendet!',
|
||||
'password' => 'Passwörter müssen aus mindestens sechs Zeichen bestehen und mit der eingegebenen Wiederholung übereinstimmen.',
|
||||
'user' => 'Es wurde kein Benutzer mit dieser E-Mail-Adresse gefunden.',
|
||||
'token' => 'Dieser Link zum Zurücksetzen des Passwortes ist ungültig!',
|
||||
'sent' => 'Der Link zum Zurücksetzen Ihres Passwortes wurde Ihnen per E-Mail zugesendet.',
|
||||
'reset' => 'Ihr Passwort wurde zurückgesetzt!',
|
||||
|
||||
];
|
||||
|
||||
6
resources/lang/de_informal/activities.php
Normal file
6
resources/lang/de_informal/activities.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
//
|
||||
];
|
||||
47
resources/lang/de_informal/auth.php
Normal file
47
resources/lang/de_informal/auth.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
'throttle' => 'Zu viele Anmeldeversuche. Bitte versuche es in :seconds Sekunden erneut.',
|
||||
|
||||
/**
|
||||
* Login & Register
|
||||
*/
|
||||
'ldap_email_hint' => 'Bitte gib eine E-Mail-Adresse ein, um diese mit dem Account zu nutzen.',
|
||||
'register_confirm' => 'Bitte prüfe Deinen Posteingang und bestätig die Registrierung.',
|
||||
'registration_email_domain_invalid' => 'Du kannst dich mit dieser E-Mail nicht registrieren.',
|
||||
'register_success' => 'Vielen Dank für Deine Registrierung! Die Daten sind gespeichert und Du bist angemeldet.',
|
||||
|
||||
/**
|
||||
* Password Reset
|
||||
*/
|
||||
'reset_password_send_instructions' => 'Bitte gib Deine E-Mail-Adresse ein. Danach erhältst Du eine E-Mail mit einem Link zum Zurücksetzen Deines Passwortes.',
|
||||
'reset_password_sent_success' => 'Eine E-Mail mit dem Link zum Zurücksetzen Deines Passwortes wurde an :email gesendet.',
|
||||
'reset_password_success' => 'Dein Passwort wurde erfolgreich zurückgesetzt.',
|
||||
'email_reset_text' => 'Du erhältsts diese E-Mail, weil jemand versucht hat, Dein Passwort zurückzusetzen.',
|
||||
'email_reset_not_requested' => 'Wenn Du das nicht warst, brauchst Du nichts weiter zu tun.',
|
||||
|
||||
/**
|
||||
* Email Confirmation
|
||||
*/
|
||||
'email_confirm_subject' => 'Bestätige Deine E-Mail-Adresse für :appName',
|
||||
'email_confirm_greeting' => 'Danke, dass Du dich für :appName registrierst hast!',
|
||||
'email_confirm_text' => 'Bitte bestätige Deine E-Mail-Adresse, indem Du auf die Schaltfläche klickst:',
|
||||
'email_confirm_send_error' => 'Leider konnte die für die Registrierung notwendige E-Mail zur Bestätigung Deine E-Mail-Adresse nicht versandt werden. Bitte kontaktiere den Systemadministrator!',
|
||||
'email_confirm_success' => 'Deine E-Mail-Adresse wurde bestätigt!',
|
||||
'email_confirm_resent' => 'Bestätigungs-E-Mail wurde erneut versendet, bitte überprüfe Deinen Posteingang.',
|
||||
'email_not_confirmed_text' => 'Deine E-Mail-Adresse ist bisher nicht bestätigt.',
|
||||
'email_not_confirmed_click_link' => 'Bitte klicke auf den Link in der E-Mail, die Du nach der Registrierung erhalten hast.',
|
||||
'email_not_confirmed_resend' => 'Wenn Du die E-Mail nicht erhalten hast, kannst Du die Nachricht erneut anfordern. Fülle hierzu bitte das folgende Formular aus:',
|
||||
];
|
||||
9
resources/lang/de_informal/common.php
Normal file
9
resources/lang/de_informal/common.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
/**
|
||||
* Email Content
|
||||
*/
|
||||
'email_action_help' => 'Sollte es beim Anklicken der Schaltfläche ":action_text" Probleme geben, öffne die folgende URL in Deinem Browser:',
|
||||
];
|
||||
10
resources/lang/de_informal/components.php
Normal file
10
resources/lang/de_informal/components.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
/**
|
||||
* Image Manager
|
||||
*/
|
||||
'image_delete_confirm' => 'Bitte klicke erneut auf löschen, wenn Du dieses Bild wirklich entfernen möchtest.',
|
||||
'image_dropzone' => 'Ziehe Bilder hierher oder klicke hier, um ein Bild auszuwählen',
|
||||
];
|
||||
57
resources/lang/de_informal/entities.php
Normal file
57
resources/lang/de_informal/entities.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
/**
|
||||
* Shared
|
||||
*/
|
||||
'no_pages_viewed' => 'Du hast bisher keine Seiten angesehen.',
|
||||
'no_pages_recently_created' => 'Du hast bisher keine Seiten angelegt.',
|
||||
'no_pages_recently_updated' => 'Du hast bisher keine Seiten aktualisiert.',
|
||||
|
||||
/**
|
||||
* Books
|
||||
*/
|
||||
'books_delete_confirmation' => 'Bist Du sicher, dass Du dieses Buch löschen möchtest?',
|
||||
|
||||
/**
|
||||
* Chapters
|
||||
*/
|
||||
'chapters_delete_confirm' => 'Bist Du sicher, dass Du dieses Kapitel löschen möchtest?',
|
||||
|
||||
/**
|
||||
* Pages
|
||||
*/
|
||||
'pages_delete_confirm' => 'Bist Du sicher, dass Du diese Seite löschen möchtest?',
|
||||
'pages_delete_draft_confirm' => 'Bist Du sicher, dass Du diesen Seitenentwurf löschen möchtest?',
|
||||
'pages_edit_enter_changelog_desc' => 'Bitte gib eine kurze Zusammenfassung Deiner Änderungen ein',
|
||||
'pages_editing_draft_notification' => 'Du bearbeitest momenten einen Entwurf, der zuletzt :timeDiff gespeichert wurde.',
|
||||
'pages_draft_edit_active' => [
|
||||
'start_a' => ':count Benutzer bearbeiten derzeit diese Seite.',
|
||||
'start_b' => ':userName bearbeitet jetzt diese Seite.',
|
||||
'time_a' => 'seit die Seiten zuletzt aktualisiert wurden.',
|
||||
'time_b' => 'in den letzten :minCount Minuten',
|
||||
'message' => ':start :time. Achte darauf, keine Änderungen von anderen Benutzern zu überschreiben!',
|
||||
],
|
||||
|
||||
/**
|
||||
* Editor sidebar
|
||||
*/
|
||||
'tags_explain' => "Füge Schlagwörter hinzu, um ihren Inhalt zu kategorisieren.\nDu kannst einen erklärenden Inhalt hinzufügen, um eine genauere Unterteilung vorzunehmen.",
|
||||
'attachments_explain' => 'Du kannst auf Deiner Seite Dateien hochladen oder Links hinzufügen. Diese werden in der Seitenleiste angezeigt.',
|
||||
'attachments_delete_confirm' => 'Klicke erneut auf löschen, um diesen Anhang zu entfernen.',
|
||||
'attachments_dropzone' => 'Ziehe Dateien hierher oder klicke hier, um eine Datei auszuwählen',
|
||||
'attachments_explain_link' => 'Wenn Du keine Datei hochladen möchtest, kannst Du stattdessen einen Link hinzufügen. Dieser Link kann auf eine andere Seite oder eine Datei im Internet verweisen.',
|
||||
'attachments_edit_drop_upload' => 'Ziehe Dateien hierher, um diese hochzuladen und zu überschreiben',
|
||||
|
||||
/**
|
||||
* Comments
|
||||
*/
|
||||
'comment_placeholder' => 'Gib hier Deine Kommentare ein (Markdown unterstützt)',
|
||||
'comment_delete_confirm' => 'Möchtst Du diesen Kommentar wirklich löschen?',
|
||||
|
||||
/**
|
||||
* Revision
|
||||
*/
|
||||
'revision_delete_confirm' => 'Bist Du sicher, dass Du diese Revision löschen möchtest?',
|
||||
];
|
||||
32
resources/lang/de_informal/errors.php
Normal file
32
resources/lang/de_informal/errors.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
// Pages
|
||||
'permission' => 'Du hast keine Berechtigung, auf diese Seite zuzugreifen.',
|
||||
'permissionJson' => 'Du hast keine Berechtigung, die angeforderte Aktion auszuführen.',
|
||||
|
||||
// Auth
|
||||
'email_already_confirmed' => 'Die E-Mail-Adresse ist bereits bestätigt. Bitte melde dich an.',
|
||||
'email_confirmation_invalid' => 'Der Bestätigungslink ist nicht gültig oder wurde bereits verwendet. Bitte registriere dich erneut.',
|
||||
'social_account_in_use' => 'Dieses :socialAccount-Konto wird bereits verwendet. Bitte melde dich mit dem :socialAccount-Konto an.',
|
||||
'social_account_email_in_use' => 'Die E-Mail-Adresse ":email" ist bereits registriert. Wenn Du bereits registriert bist, kannst Du Dein :socialAccount-Konto in Deinen Profil-Einstellungen verknüpfen.',
|
||||
'social_account_not_used' => 'Dieses :socialAccount-Konto ist bisher keinem Benutzer zugeordnet. Du kannst das in Deinen Profil-Einstellungen tun.',
|
||||
'social_account_register_instructions' => 'Wenn Du bisher kein Social-Media Konto besitzt, kannst Du ein solches Konto mit der :socialAccount Option anlegen.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'Die Datei kann nicht in den angegebenen Pfad :filePath hochgeladen werden. Stelle sicher, dass dieser Ordner auf dem Server beschreibbar ist.',
|
||||
'cannot_create_thumbs' => 'Der Server kann keine Vorschau-Bilder erzeugen. Bitte prüfe, ob die GD PHP-Erweiterung installiert ist.',
|
||||
'server_upload_limit' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuche es mit einer kleineren Datei.',
|
||||
|
||||
// Pages
|
||||
'page_draft_autosave_fail' => 'Fehler beim Speichern des Entwurfs. Stelle sicher, dass Du mit dem Internet verbunden bist, bevor Du den Entwurf dieser Seite speicherst.',
|
||||
'page_custom_home_deletion' => 'Eine als Startseite gesetzte Seite kann nicht gelöscht werden.',
|
||||
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'Du kannst den einzigen Administrator nicht löschen.',
|
||||
'users_cannot_delete_guest' => 'Du kannst den Gast-Benutzer nicht löschen',
|
||||
|
||||
// Error pages
|
||||
'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Du angefordert hast, wurde nicht gefunden.',
|
||||
];
|
||||
6
resources/lang/de_informal/pagination.php
Normal file
6
resources/lang/de_informal/pagination.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
//
|
||||
];
|
||||
6
resources/lang/de_informal/passwords.php
Normal file
6
resources/lang/de_informal/passwords.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
//
|
||||
];
|
||||
38
resources/lang/de_informal/settings.php
Normal file
38
resources/lang/de_informal/settings.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
/**
|
||||
* Settings text strings
|
||||
* Contains all text strings used in the general settings sections of BookStack
|
||||
* including users and roles.
|
||||
*/
|
||||
|
||||
/**
|
||||
* App settings
|
||||
*/
|
||||
'app_editor_desc' => 'Wähle den Editor aus, der von allen Benutzern genutzt werden soll, um Seiten zu editieren.',
|
||||
'app_primary_color_desc' => "Dies sollte ein HEX Wert sein.\nWenn Du nichts eingibst, wird die Anwendung auf die Standardfarbe zurückgesetzt.",
|
||||
'app_homepage_desc' => 'Wähle eine Seite als Startseite aus, die statt der Standardansicht angezeigt werden soll. Seitenberechtigungen werden für die ausgewählten Seiten ignoriert.',
|
||||
'app_homepage_books' => 'Oder wähle die Buch-Übersicht als Startseite. Das wird die Seiten-Auswahl überschreiben.',
|
||||
|
||||
/**
|
||||
* Maintenance settings
|
||||
*/
|
||||
'maint_image_cleanup_desc' => 'Überprüft Seiten- und Versionsinhalte auf ungenutzte und mehrfach vorhandene Bilder. Erstelle vor dem Start ein Backup Deiner Datenbank und Bilder.',
|
||||
'maint_image_cleanup_warning' => ':count eventuell unbenutze Bilder wurden gefunden. Möchtest Du diese Bilder löschen?',
|
||||
|
||||
/**
|
||||
* Role settings
|
||||
*/
|
||||
'role_delete_confirm' => 'Du möchtest die Rolle ":roleName" löschen.',
|
||||
'role_delete_users_assigned' => 'Diese Rolle ist :userCount Benutzern zugeordnet. Du kannst unten eine neue Rolle auswählen, die Du diesen Benutzern zuordnen möchtest.',
|
||||
'role_delete_sure' => 'Bist Du sicher, dass Du diese Rolle löschen möchtest?',
|
||||
|
||||
/**
|
||||
* Users
|
||||
*/
|
||||
'users_password_warning' => 'Fülle die folgenden Felder nur aus, wenn Du Dein Passwort ändern möchtest:',
|
||||
'users_delete_confirm' => 'Bist Du sicher, dass Du diesen Benutzer löschen möchtest?',
|
||||
'users_social_accounts_info' => 'Hier kannst Du andere Social-Media-Konten für eine schnellere und einfachere Anmeldung verknüpfen. Wenn Du ein Social-Media Konto löschst, bleibt der Zugriff erhalten. Entferne in diesem Falle die Berechtigung in Deinen Profil-Einstellungen des verknüpften Social-Media-Kontos.',
|
||||
];
|
||||
6
resources/lang/de_informal/validation.php
Normal file
6
resources/lang/de_informal/validation.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
|
||||
// Extends 'de'
|
||||
return [
|
||||
//
|
||||
];
|
||||
@@ -1,12 +1,10 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Activity text strings.
|
||||
* Is used for all the text within activity logs & notifications.
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
* Activity text strings.
|
||||
* Is used for all the text within activity logs & notifications.
|
||||
*/
|
||||
|
||||
// Pages
|
||||
'page_create' => 'created page',
|
||||
'page_create_notification' => 'Page Successfully Created',
|
||||
|
||||
@@ -1,21 +1,15 @@
|
||||
<?php
|
||||
/**
|
||||
* Authentication Language Lines
|
||||
* The following language lines are used during authentication for various
|
||||
* messages that we need to display to the user.
|
||||
*/
|
||||
return [
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used during authentication for various
|
||||
| messages that we need to display to the user. You are free to modify
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
|
||||
/**
|
||||
* Login & Register
|
||||
*/
|
||||
// Login & Register
|
||||
'sign_up' => 'Sign up',
|
||||
'log_in' => 'Log in',
|
||||
'log_in_with' => 'Login with :socialDriver',
|
||||
@@ -43,23 +37,18 @@ return [
|
||||
'register_success' => 'Thanks for signing up! You are now registered and signed in.',
|
||||
|
||||
|
||||
/**
|
||||
* Password Reset
|
||||
*/
|
||||
// Password Reset
|
||||
'reset_password' => 'Reset Password',
|
||||
'reset_password_send_instructions' => 'Enter your email below and you will be sent an email with a password reset link.',
|
||||
'reset_password_send_button' => 'Send Reset Link',
|
||||
'reset_password_sent_success' => 'A password reset link has been sent to :email.',
|
||||
'reset_password_success' => 'Your password has been successfully reset.',
|
||||
|
||||
'email_reset_subject' => 'Reset your :appName password',
|
||||
'email_reset_text' => 'You are receiving this email because we received a password reset request for your account.',
|
||||
'email_reset_not_requested' => 'If you did not request a password reset, no further action is required.',
|
||||
|
||||
|
||||
/**
|
||||
* Email Confirmation
|
||||
*/
|
||||
// Email Confirmation
|
||||
'email_confirm_subject' => 'Confirm your email on :appName',
|
||||
'email_confirm_greeting' => 'Thanks for joining :appName!',
|
||||
'email_confirm_text' => 'Please confirm your email address by clicking the button below:',
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* Common elements found throughout many areas of BookStack.
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
* Buttons
|
||||
*/
|
||||
// Buttons
|
||||
'cancel' => 'Cancel',
|
||||
'confirm' => 'Confirm',
|
||||
'back' => 'Back',
|
||||
@@ -12,18 +13,14 @@ return [
|
||||
'select' => 'Select',
|
||||
'more' => 'More',
|
||||
|
||||
/**
|
||||
* Form Labels
|
||||
*/
|
||||
// Form Labels
|
||||
'name' => 'Name',
|
||||
'description' => 'Description',
|
||||
'role' => 'Role',
|
||||
'cover_image' => 'Cover image',
|
||||
'cover_image_description' => 'This image should be approx 440x250px.',
|
||||
|
||||
/**
|
||||
* Actions
|
||||
*/
|
||||
// Actions
|
||||
'actions' => 'Actions',
|
||||
'view' => 'View',
|
||||
'create' => 'Create',
|
||||
@@ -40,9 +37,7 @@ return [
|
||||
'remove' => 'Remove',
|
||||
'add' => 'Add',
|
||||
|
||||
/**
|
||||
* Misc
|
||||
*/
|
||||
// Misc
|
||||
'deleted_user' => 'Deleted User',
|
||||
'no_activity' => 'No activity to show',
|
||||
'no_items' => 'No items available',
|
||||
@@ -54,15 +49,11 @@ return [
|
||||
'list_view' => 'List View',
|
||||
'default' => 'Default',
|
||||
|
||||
/**
|
||||
* Header
|
||||
*/
|
||||
// Header
|
||||
'view_profile' => 'View Profile',
|
||||
'edit_profile' => 'Edit Profile',
|
||||
|
||||
/**
|
||||
* Email Content
|
||||
*/
|
||||
// Email Content
|
||||
'email_action_help' => 'If you’re having trouble clicking the ":actionText" button, copy and paste the URL below into your web browser:',
|
||||
'email_rights' => 'All rights reserved',
|
||||
];
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* Text used in custom JavaScript driven components.
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
* Image Manager
|
||||
*/
|
||||
// Image Manager
|
||||
'image_select' => 'Image Select',
|
||||
'image_all' => 'All',
|
||||
'image_all_title' => 'View all images',
|
||||
@@ -24,9 +25,7 @@ return [
|
||||
'image_delete_success' => 'Image successfully deleted',
|
||||
'image_upload_remove' => 'Remove',
|
||||
|
||||
/**
|
||||
* Code editor
|
||||
*/
|
||||
// Code Editor
|
||||
'code_editor' => 'Edit Code',
|
||||
'code_language' => 'Code Language',
|
||||
'code_content' => 'Code Content',
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<?php
|
||||
/**
|
||||
* Text used for 'Entities' (Document Structure Elements) such as
|
||||
* Books, Shelves, Chapters & Pages
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
* Shared
|
||||
*/
|
||||
// Shared
|
||||
'recently_created' => 'Recently Created',
|
||||
'recently_created_pages' => 'Recently Created Pages',
|
||||
'recently_updated_pages' => 'Recently Updated Pages',
|
||||
@@ -31,17 +33,13 @@ return [
|
||||
'export_pdf' => 'PDF File',
|
||||
'export_text' => 'Plain Text File',
|
||||
|
||||
/**
|
||||
* Permissions and restrictions
|
||||
*/
|
||||
// Permissions and restrictions
|
||||
'permissions' => 'Permissions',
|
||||
'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.',
|
||||
'permissions_enable' => 'Enable Custom Permissions',
|
||||
'permissions_save' => 'Save Permissions',
|
||||
|
||||
/**
|
||||
* Search
|
||||
*/
|
||||
// Search
|
||||
'search_results' => 'Search Results',
|
||||
'search_total_results_found' => ':count result found|:count total results found',
|
||||
'search_clear' => 'Clear Search',
|
||||
@@ -66,9 +64,7 @@ return [
|
||||
'search_set_date' => 'Set Date',
|
||||
'search_update' => 'Update Search',
|
||||
|
||||
/**
|
||||
* Shelves
|
||||
*/
|
||||
// Shelves
|
||||
'shelf' => 'Shelf',
|
||||
'shelves' => 'Shelves',
|
||||
'shelves_long' => 'Bookshelves',
|
||||
@@ -98,9 +94,7 @@ return [
|
||||
'shelves_copy_permissions_explain' => 'This will apply the current permission settings of this bookshelf to all books contained within. Before activating, ensure any changes to the permissions of this bookshelf have been saved.',
|
||||
'shelves_copy_permission_success' => 'Bookshelf permissions copied to :count books',
|
||||
|
||||
/**
|
||||
* Books
|
||||
*/
|
||||
// Books
|
||||
'book' => 'Book',
|
||||
'books' => 'Books',
|
||||
'x_books' => ':count Book|:count Books',
|
||||
@@ -134,9 +128,7 @@ return [
|
||||
'books_sort_show_other' => 'Show Other Books',
|
||||
'books_sort_save' => 'Save New Order',
|
||||
|
||||
/**
|
||||
* Chapters
|
||||
*/
|
||||
// Chapters
|
||||
'chapter' => 'Chapter',
|
||||
'chapters' => 'Chapters',
|
||||
'x_chapters' => ':count Chapter|:count Chapters',
|
||||
@@ -159,9 +151,7 @@ return [
|
||||
'chapters_permissions_success' => 'Chapter Permissions Updated',
|
||||
'chapters_search_this' => 'Search this chapter',
|
||||
|
||||
/**
|
||||
* Pages
|
||||
*/
|
||||
// Pages
|
||||
'page' => 'Page',
|
||||
'pages' => 'Pages',
|
||||
'x_pages' => ':count Page|:count Pages',
|
||||
@@ -235,9 +225,7 @@ return [
|
||||
'pages_draft_discarded' => 'Draft discarded, The editor has been updated with the current page content',
|
||||
'pages_specific' => 'Specific Page',
|
||||
|
||||
/**
|
||||
* Editor sidebar
|
||||
*/
|
||||
// Editor Sidebar
|
||||
'page_tags' => 'Page Tags',
|
||||
'chapter_tags' => 'Chapter Tags',
|
||||
'book_tags' => 'Book Tags',
|
||||
@@ -273,18 +261,14 @@ return [
|
||||
'attachments_file_updated' => 'File successfully updated',
|
||||
'attachments_link_attached' => 'Link successfully attached to page',
|
||||
|
||||
/**
|
||||
* Profile View
|
||||
*/
|
||||
// Profile View
|
||||
'profile_user_for_x' => 'User for :time',
|
||||
'profile_created_content' => 'Created Content',
|
||||
'profile_not_created_pages' => ':userName has not created any pages',
|
||||
'profile_not_created_chapters' => ':userName has not created any chapters',
|
||||
'profile_not_created_books' => ':userName has not created any books',
|
||||
|
||||
/**
|
||||
* Comments
|
||||
*/
|
||||
// Comments
|
||||
'comment' => 'Comment',
|
||||
'comments' => 'Comments',
|
||||
'comment_add' => 'Add Comment',
|
||||
@@ -302,10 +286,14 @@ return [
|
||||
'comment_delete_confirm' => 'Are you sure you want to delete this comment?',
|
||||
'comment_in_reply_to' => 'In reply to :commentId',
|
||||
|
||||
/**
|
||||
* Revision
|
||||
*/
|
||||
// Revision
|
||||
'revision_delete_confirm' => 'Are you sure you want to delete this revision?',
|
||||
'revision_delete_success' => 'Revision deleted',
|
||||
'revision_cannot_delete_latest' => 'Cannot delete the latest revision.'
|
||||
'revision_cannot_delete_latest' => 'Cannot delete the latest revision.',
|
||||
|
||||
// PDF / Text Embeds
|
||||
'video' => 'Video: ',
|
||||
'map' => 'Map: ',
|
||||
'embedded_content' => 'Embedded Content: '
|
||||
|
||||
];
|
||||
@@ -1,11 +1,9 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Text shown in error messaging.
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
* Error text strings.
|
||||
*/
|
||||
|
||||
// Permissions
|
||||
'permission' => 'You do not have permission to access the requested page.',
|
||||
'permissionJson' => 'You do not have permission to perform the requested action.',
|
||||
@@ -38,6 +36,7 @@ return [
|
||||
'uploaded' => 'The server does not allow uploads of this size. Please try a smaller file size.',
|
||||
'image_upload_error' => 'An error occurred uploading the image',
|
||||
'image_upload_type_error' => 'The image type being uploaded is invalid',
|
||||
'file_upload_timeout' => 'The file upload has timed out.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Page mismatch during attachment update',
|
||||
@@ -65,6 +64,7 @@ return [
|
||||
'role_cannot_be_edited' => 'This role cannot be edited',
|
||||
'role_system_cannot_be_deleted' => 'This role is a system role and cannot be deleted',
|
||||
'role_registration_default_cannot_delete' => 'This role cannot be deleted while set as the default registration role',
|
||||
'role_cannot_remove_only_admin' => 'This user is the only user assigned to the administrator role. Assign the administrator role to another user before attempting to remove it here.',
|
||||
|
||||
// Comments
|
||||
'comment_list' => 'An error occurred while fetching the comments.',
|
||||
@@ -80,4 +80,8 @@ return [
|
||||
'error_occurred' => 'An Error Occurred',
|
||||
'app_down' => ':appName is down right now',
|
||||
'back_soon' => 'It will be back up soon.',
|
||||
|
||||
// Export errors
|
||||
'dom_parse_error' => 'There was an error while exporting the page. This maybe caused due to the HTML structure of the page.'
|
||||
|
||||
];
|
||||
|
||||
@@ -1,18 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Pagination Language Lines
|
||||
* The following language lines are used by the paginator library to build
|
||||
* the simple pagination links.
|
||||
*/
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pagination Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used by the paginator library to build
|
||||
| the simple pagination links. You are free to change them to anything
|
||||
| you want to customize your views to better match your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'previous' => '« Previous',
|
||||
'next' => 'Next »',
|
||||
|
||||
|
||||
@@ -1,18 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Password Reminder Language Lines
|
||||
* The following language lines are the default lines which match reasons
|
||||
* that are given by the password broker for a password update attempt has failed.
|
||||
*/
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reminder Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are the default lines which match reasons
|
||||
| that are given by the password broker for a password update attempt
|
||||
| has failed, such as for an invalid token or invalid new password.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => 'Passwords must be at least six characters and match the confirmation.',
|
||||
'user' => "We can't find a user with that e-mail address.",
|
||||
'token' => 'This password reset token is invalid.',
|
||||
|
||||
@@ -1,21 +1,17 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Settings text strings
|
||||
* Contains all text strings used in the general settings sections of BookStack
|
||||
* including users and roles.
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
* Settings text strings
|
||||
* Contains all text strings used in the general settings sections of BookStack
|
||||
* including users and roles.
|
||||
*/
|
||||
|
||||
// Common Messages
|
||||
'settings' => 'Settings',
|
||||
'settings_save' => 'Save Settings',
|
||||
'settings_save_success' => 'Settings saved',
|
||||
|
||||
/**
|
||||
* App settings
|
||||
*/
|
||||
|
||||
// App Settings
|
||||
'app_settings' => 'App Settings',
|
||||
'app_name' => 'Application name',
|
||||
'app_name_desc' => 'This name is shown in the header and any emails.',
|
||||
@@ -37,10 +33,7 @@ return [
|
||||
'app_disable_comments' => 'Disable comments',
|
||||
'app_disable_comments_desc' => 'Disable comments across all pages in the application. Existing comments are not shown.',
|
||||
|
||||
/**
|
||||
* Registration settings
|
||||
*/
|
||||
|
||||
// Registration Settings
|
||||
'reg_settings' => 'Registration Settings',
|
||||
'reg_allow' => 'Allow registration?',
|
||||
'reg_default_role' => 'Default user role after registration',
|
||||
@@ -50,10 +43,7 @@ return [
|
||||
'reg_confirm_restrict_domain_desc' => 'Enter a comma separated list of email domains you would like to restrict registration to. Users will be sent an email to confirm their address before being allowed to interact with the application. <br> Note that users will be able to change their email addresses after successful registration.',
|
||||
'reg_confirm_restrict_domain_placeholder' => 'No restriction set',
|
||||
|
||||
/**
|
||||
* Maintenance settings
|
||||
*/
|
||||
|
||||
// Maintenance settings
|
||||
'maint' => 'Maintenance',
|
||||
'maint_image_cleanup' => 'Cleanup Images',
|
||||
'maint_image_cleanup_desc' => "Scans page & revision content to check which images and drawings are currently in use and which images are redundant. Ensure you create a full database and image backup before running this.",
|
||||
@@ -63,10 +53,7 @@ return [
|
||||
'maint_image_cleanup_success' => ':count potentially unused images found and deleted!',
|
||||
'maint_image_cleanup_nothing_found' => 'No unused images found, Nothing deleted!',
|
||||
|
||||
/**
|
||||
* Role settings
|
||||
*/
|
||||
|
||||
// Role Settings
|
||||
'roles' => 'Roles',
|
||||
'role_user_roles' => 'User Roles',
|
||||
'role_create' => 'Create New Role',
|
||||
@@ -99,10 +86,7 @@ return [
|
||||
'role_users' => 'Users in this role',
|
||||
'role_users_none' => 'No users are currently assigned to this role',
|
||||
|
||||
/**
|
||||
* Users
|
||||
*/
|
||||
|
||||
// Users
|
||||
'users' => 'Users',
|
||||
'user_profile' => 'User Profile',
|
||||
'users_add_new' => 'Add New User',
|
||||
@@ -129,14 +113,15 @@ return [
|
||||
'users_social_connected' => ':socialAccount account was successfully attached to your profile.',
|
||||
'users_social_disconnected' => ':socialAccount account was successfully disconnected from your profile.',
|
||||
|
||||
// Since these labels are already localized this array does not need to be
|
||||
// translated in the language-specific files.
|
||||
// DELETE BELOW IF COPIED FROM EN
|
||||
///////////////////////////////////
|
||||
//! Since these labels are already localized this array does not need to be
|
||||
//! translated in the language-specific files.
|
||||
//! DELETE BELOW IF COPIED FROM EN
|
||||
//!////////////////////////////////
|
||||
'language_select' => [
|
||||
'en' => 'English',
|
||||
'ar' => 'العربية',
|
||||
'de' => 'Deutsch',
|
||||
'de' => 'Deutsch (Sie)',
|
||||
'de_informal' => 'Deutsch (Du)',
|
||||
'es' => 'Español',
|
||||
'es_AR' => 'Español Argentina',
|
||||
'fr' => 'Français',
|
||||
@@ -149,8 +134,9 @@ return [
|
||||
'pl' => 'Polski',
|
||||
'it' => 'Italian',
|
||||
'ru' => 'Русский',
|
||||
'uk' => 'Українська',
|
||||
'zh_CN' => '简体中文',
|
||||
'zh_TW' => '繁體中文'
|
||||
]
|
||||
///////////////////////////////////
|
||||
//!////////////////////////////////
|
||||
];
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Validation Lines
|
||||
* The following language lines contain the default error messages used by
|
||||
* the validator class. Some of these rules have multiple versions such
|
||||
* as the size rules. Feel free to tweak each of these messages here.
|
||||
*/
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines contain the default error messages used by
|
||||
| the validator class. Some of these rules have multiple versions such
|
||||
| as the size rules. Feel free to tweak each of these messages here.
|
||||
|
|
||||
*/
|
||||
|
||||
// Standard laravel validation lines
|
||||
'accepted' => 'The :attribute must be accepted.',
|
||||
'active_url' => 'The :attribute is not a valid URL.',
|
||||
'after' => 'The :attribute must be a date after :date.',
|
||||
@@ -75,34 +70,13 @@ return [
|
||||
'unique' => 'The :attribute has already been taken.',
|
||||
'url' => 'The :attribute format is invalid.',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Language Lines
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify custom validation messages for attributes using the
|
||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||
| specify a specific custom language line for a given attribute rule.
|
||||
|
|
||||
*/
|
||||
|
||||
// Custom validation lines
|
||||
'custom' => [
|
||||
'password-confirm' => [
|
||||
'required_with' => 'Password confirmation required',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Custom Validation Attributes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following language lines are used to swap attribute place-holders
|
||||
| with something more reader friendly such as E-Mail Address instead
|
||||
| of "email". This simply helps us make messages a little cleaner.
|
||||
|
|
||||
*/
|
||||
|
||||
// Custom validation attributes
|
||||
'attributes' => [],
|
||||
|
||||
];
|
||||
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => 'El servidor no permite la subida de ficheros de este tamaño. Intente subir un fichero de menor tamaño.',
|
||||
'image_upload_error' => 'Ha ocurrido un error al subir la imagen',
|
||||
'image_upload_type_error' => 'El tipo de imagen que se quiere subir no es válido',
|
||||
'file_upload_timeout' => 'La carga del archivo ha caducado.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Página no coincidente durante la subida del adjunto ',
|
||||
|
||||
@@ -37,6 +37,14 @@ return [
|
||||
'book_sort' => 'libro ordenado',
|
||||
'book_sort_notification' => 'Libro reordenado exitosamente',
|
||||
|
||||
// Bookshelves
|
||||
'bookshelf_create' => 'Estante creado',
|
||||
'bookshelf_create_notification' => 'Estante creado exitosamente',
|
||||
'bookshelf_update' => 'Estante actualizado',
|
||||
'bookshelf_update_notification' => 'Estante actualizado exitosamente',
|
||||
'bookshelf_delete' => 'Estante borrado',
|
||||
'bookshelf_delete_notification' => 'Estante borrado exitosamente',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'comentado',
|
||||
];
|
||||
|
||||
@@ -52,6 +52,7 @@ return [
|
||||
'details' => 'Detalles',
|
||||
"grid_view" => "Vista de grilla",
|
||||
"list_view" => "Vista de lista",
|
||||
'default' => 'Por defecto',
|
||||
|
||||
/**
|
||||
* Header
|
||||
|
||||
@@ -52,11 +52,13 @@ return [
|
||||
'search_content_type' => 'Tipo de contenido',
|
||||
'search_exact_matches' => 'Coincidencias exactas',
|
||||
'search_tags' => 'Búsquedas de etiquetas',
|
||||
'search_options' => 'Opciones',
|
||||
'search_viewed_by_me' => 'Vistos por mí',
|
||||
'search_not_viewed_by_me' => 'No vistos por mí',
|
||||
'search_permissions_set' => 'Permisos establecidos',
|
||||
'search_created_by_me' => 'Creado por mí',
|
||||
'search_updated_by_me' => 'Actualizado por mí',
|
||||
'search_date_options' => 'Opciones de fecha',
|
||||
'search_updated_before' => 'Actualizado antes de',
|
||||
'search_updated_after' => 'Actualizado después de',
|
||||
'search_created_before' => 'Creado antes de',
|
||||
@@ -64,6 +66,38 @@ return [
|
||||
'search_set_date' => 'Esablecer fecha',
|
||||
'search_update' => 'Actualizar búsqueda',
|
||||
|
||||
/**
|
||||
* Shelves
|
||||
*/
|
||||
'shelf' => 'Estante',
|
||||
'shelves' => 'Estantes',
|
||||
'shelves_long' => 'Estantes de libros',
|
||||
'shelves_empty' => 'No se crearon estantes',
|
||||
'shelves_create' => 'Crear un estante nuevo',
|
||||
'shelves_popular' => 'Estantes Populares',
|
||||
'shelves_new' => 'Estantes Nuevos',
|
||||
'shelves_popular_empty' => 'Los estantes más populares aparecerán aquí.',
|
||||
'shelves_new_empty' => 'Los estantes mas nuevos aparecerán aquí.',
|
||||
'shelves_save' => 'Guardar estantes',
|
||||
'shelves_books' => 'Libros en este estante',
|
||||
'shelves_add_books' => 'Agregar libros en este estante',
|
||||
'shelves_drag_books' => 'Arrastre los libros aquí para agregarlos a este estante',
|
||||
'shelves_empty_contents' => 'Este estante no tiene libros asignados a él',
|
||||
'shelves_edit_and_assign' => 'Editar el estante para asignar libros',
|
||||
'shelves_edit_named' => 'Editar Estante :name',
|
||||
'shelves_edit' => 'Editar Estante',
|
||||
'shelves_delete' => 'Eliminar Estante',
|
||||
'shelves_delete_named' => 'Eliminar Estante :name',
|
||||
'shelves_delete_explain' => "Esta acción eliminará el estante con el nombre ':name'. Los libros contenidos en él no se eliminarán.",
|
||||
'shelves_delete_confirmation' => '¿Está seguro que quiere eliminar este estante?',
|
||||
'shelves_permissions' => 'Permisos del Estante',
|
||||
'shelves_permissions_updated' => 'Permisos del Estante actualizados',
|
||||
'shelves_permissions_active' => 'Permisos Activos del Estante',
|
||||
'shelves_copy_permissions_to_books' => 'Copiar Permisos a los Libros',
|
||||
'shelves_copy_permissions' => 'Copiar Permisos',
|
||||
'shelves_copy_permissions_explain' => 'Esta acción aplicará los permisos de este estante a todos los libros contenidos en él. Antes de activarlos, asegúrese que los cambios a los permisos de este estante estén guardados.',
|
||||
'shelves_copy_permission_success' => 'Se copiaron los permisos del estante a :count libros',
|
||||
|
||||
/**
|
||||
* Books
|
||||
*/
|
||||
@@ -199,6 +233,8 @@ return [
|
||||
'message' => ':start :time. Ten cuidado de no sobreescribir los cambios del otro usuario',
|
||||
],
|
||||
'pages_draft_discarded' => 'Borrador descartado, el editor ha sido actualizado con el contenido de la página actual',
|
||||
'pages_specific' => 'Página Específica',
|
||||
|
||||
|
||||
/**
|
||||
* Editor sidebar
|
||||
@@ -206,6 +242,7 @@ return [
|
||||
'page_tags' => 'Etiquetas de página',
|
||||
'chapter_tags' => 'Etiquetas de capítulo',
|
||||
'book_tags' => 'Etiquetas de libro',
|
||||
'shelf_tags' => 'Shelf Tags',
|
||||
'tag' => 'Etiqueta',
|
||||
'tags' => 'Etiquetas',
|
||||
'tag_value' => 'Valor de la etiqueta (Opcional)',
|
||||
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => 'El servidor no permite subir archivos de este tamaño. Por favor intente un tamaño menor.', 'image_upload_error' => 'Ha ocurrido un error al subir la imagen',
|
||||
'image_upload_error' => 'Ha ocurrido un error al subir la imagen',
|
||||
'image_upload_type_error' => 'El tipo de imagen subida es inválido.',
|
||||
'file_upload_timeout' => 'La carga del archivo ha caducado.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Página no coincidente durante la subida del adjunto ',
|
||||
@@ -49,6 +50,7 @@ return [
|
||||
|
||||
// Entities
|
||||
'entity_not_found' => 'Entidad no encontrada',
|
||||
'bookshelf_not_found' => 'Estante no encontrado',
|
||||
'book_not_found' => 'Libro no encontrado',
|
||||
'page_not_found' => 'Página no encontrada',
|
||||
'chapter_not_found' => 'Capítulo no encontrado',
|
||||
|
||||
@@ -33,8 +33,7 @@ return [
|
||||
'app_primary_color_desc' => 'Esto debería ser un valor hexadecimal. <br>Deje el valor vacío para reiniciar al valor por defecto.',
|
||||
'app_homepage' => 'Página de inicio de la Aplicación',
|
||||
'app_homepage_desc' => 'Seleccione una página de inicio para mostrar en lugar de la vista por defecto. Se ignoran los permisos de página para las páginas seleccionadas.',
|
||||
'app_homepage_default' => 'Página de inicio por defecto seleccionadad',
|
||||
'app_homepage_books' => 'O seleccione la página de libros como su página de inicio. Esto tendrá preferencia sobre cualquier página seleccionada como página de inicio.',
|
||||
'app_homepage_select' => 'Seleccione una página',
|
||||
'app_disable_comments' => 'Deshabilitar comentarios',
|
||||
'app_disable_comments_desc' => 'Deshabilitar comentarios en todas las páginas de la aplicación. Los comentarios existentes no se muestran.',
|
||||
|
||||
@@ -91,6 +90,7 @@ return [
|
||||
'role_manage_settings' => 'Gestionar ajustes de activos',
|
||||
'role_asset' => 'Permisos de activos',
|
||||
'role_asset_desc' => 'Estos permisos controlan el acceso por defecto a los activos del sistema. Permisos a Libros, Capítulos y Páginas sobreescribiran estos permisos.',
|
||||
'role_asset_admins' => 'Los administradores reciben automáticamente acceso a todo el contenido pero estas opciones pueden mostrar u ocultar opciones de UI.',
|
||||
'role_all' => 'Todo',
|
||||
'role_own' => 'Propio',
|
||||
'role_controlled_by_asset' => 'Controlado por el activo al que ha sido subido',
|
||||
|
||||
330
resources/lang/format.php
Executable file
330
resources/lang/format.php
Executable file
@@ -0,0 +1,330 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Format a language file in the same way as the EN equivalent.
|
||||
* Matches the line numbers of translated content.
|
||||
* Potentially destructive, Ensure you have a backup of your translation content before running.
|
||||
*/
|
||||
|
||||
$args = array_slice($argv, 1);
|
||||
|
||||
if (count($args) < 2) {
|
||||
errorOut("Please provide a language code as the first argument and a translation file name, or '--all', as the second (./format.php fr activities)");
|
||||
}
|
||||
|
||||
$lang = formatLocale($args[0]);
|
||||
$fileName = explode('.', $args[1])[0];
|
||||
$fileNames = [$fileName];
|
||||
if ($fileName === '--all') {
|
||||
$fileNames = getTranslationFileNames();
|
||||
}
|
||||
|
||||
foreach ($fileNames as $fileName) {
|
||||
$formatted = formatFileContents($lang, $fileName);
|
||||
writeLangFile($lang, $fileName, $formatted);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Format the contents of a single translation file in the given language.
|
||||
* @param string $lang
|
||||
* @param string $fileName
|
||||
* @return string
|
||||
*/
|
||||
function formatFileContents(string $lang, string $fileName) : string {
|
||||
$enLines = loadLangFileLines('en', $fileName);
|
||||
$langContent = loadLang($lang, $fileName);
|
||||
$enContent = loadLang('en', $fileName);
|
||||
|
||||
// Calculate the longest top-level key length
|
||||
$longestKeyLength = calculateKeyPadding($enContent);
|
||||
|
||||
// Start formatted content
|
||||
$formatted = [];
|
||||
$mode = 'header';
|
||||
$skipArray = false;
|
||||
$arrayKeys = [];
|
||||
|
||||
foreach ($enLines as $index => $line) {
|
||||
$trimLine = trim($line);
|
||||
if ($mode === 'header') {
|
||||
$formatted[$index] = $line;
|
||||
if (str_replace(' ', '', $trimLine) === 'return[') $mode = 'body';
|
||||
}
|
||||
|
||||
if ($mode === 'body') {
|
||||
$matches = [];
|
||||
$arrayEndMatch = preg_match('/]\s*,\s*$/', $trimLine);
|
||||
|
||||
if ($skipArray) {
|
||||
if ($arrayEndMatch) $skipArray = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Comment to ignore
|
||||
if (strpos($trimLine, '//!') === 0) {
|
||||
$formatted[$index] = "";
|
||||
continue;
|
||||
}
|
||||
|
||||
// Comment
|
||||
if (strpos($trimLine, '//') === 0) {
|
||||
$formatted[$index] = "\t" . $trimLine;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Arrays
|
||||
$arrayStartMatch = preg_match('/^\'(.*)\'\s+?=>\s+?\[(\],)?\s*?$/', $trimLine, $matches);
|
||||
|
||||
$indent = count($arrayKeys) + 1;
|
||||
if ($arrayStartMatch === 1) {
|
||||
if ($fileName === 'settings' && $matches[1] === 'language_select') {
|
||||
$skipArray = true;
|
||||
continue;
|
||||
}
|
||||
$arrayKeys[] = $matches[1];
|
||||
$formatted[$index] = str_repeat(" ", $indent * 4) . str_pad("'{$matches[1]}'", $longestKeyLength) . "=> [";
|
||||
if ($arrayEndMatch !== 1) continue;
|
||||
}
|
||||
if ($arrayEndMatch === 1) {
|
||||
unsetArrayByKeys($langContent, $arrayKeys);
|
||||
array_pop($arrayKeys);
|
||||
if (isset($formatted[$index])) {
|
||||
$formatted[$index] .= '],';
|
||||
} else {
|
||||
$formatted[$index] = str_repeat(" ", ($indent-1) * 4) . "],";
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// Translation
|
||||
$translationMatch = preg_match('/^\'(.*)\'\s+?=>\s+?[\'"](.*)?[\'"].+?$/', $trimLine, $matches);
|
||||
if ($translationMatch === 1) {
|
||||
$key = $matches[1];
|
||||
$keys = array_merge($arrayKeys, [$key]);
|
||||
$langVal = getTranslationByKeys($langContent, $keys);
|
||||
if (empty($langVal)) continue;
|
||||
|
||||
$keyPad = $longestKeyLength;
|
||||
if (count($arrayKeys) === 0) {
|
||||
unset($langContent[$key]);
|
||||
} else {
|
||||
$keyPad = calculateKeyPadding(getTranslationByKeys($enContent, $arrayKeys));
|
||||
}
|
||||
|
||||
$formatted[$index] = formatTranslationLine($key, $langVal, $indent, $keyPad);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Fill missing lines
|
||||
$arraySize = max(array_keys($formatted));
|
||||
$formatted = array_replace(array_fill(0, $arraySize, ''), $formatted);
|
||||
|
||||
// Add remaining translations
|
||||
$langContent = array_filter($langContent, function($item) {
|
||||
return !is_null($item) && !empty($item);
|
||||
});
|
||||
if (count($langContent) > 0) {
|
||||
$formatted[] = '';
|
||||
$formatted[] = "\t// Unmatched";
|
||||
}
|
||||
foreach ($langContent as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
$formatted[] = formatTranslationArray($key, $value);
|
||||
} else {
|
||||
$formatted[] = formatTranslationLine($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
// Add end line
|
||||
$formatted[] = '];';
|
||||
return implode("\n", $formatted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a translation line.
|
||||
* @param string $key
|
||||
* @param string $value
|
||||
* @param int $indent
|
||||
* @param int $keyPad
|
||||
* @return string
|
||||
*/
|
||||
function formatTranslationLine(string $key, string $value, int $indent = 1, int $keyPad = 1) : string {
|
||||
$start = str_repeat(" ", $indent * 4) . str_pad("'{$key}'", $keyPad, ' ');
|
||||
if (strpos($value, "\n") !== false) {
|
||||
$escapedValue = '"' . str_replace("\n", '\n', $value) . '"';
|
||||
$escapedValue = '"' . str_replace('"', '\"', $escapedValue) . '"';
|
||||
} else {
|
||||
$escapedValue = "'" . str_replace("'", "\\'", $value) . "'";
|
||||
}
|
||||
return "{$start} => {$escapedValue},";
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the longest key in the array and provide the length
|
||||
* for all keys to be used when printed.
|
||||
* @param array $array
|
||||
* @return int
|
||||
*/
|
||||
function calculateKeyPadding(array $array) : int {
|
||||
$top = 0;
|
||||
foreach ($array as $key => $value) {
|
||||
$keyLen = strlen($key);
|
||||
$top = max($top, $keyLen);
|
||||
}
|
||||
return min(35, $top + 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format an translation array with the given key.
|
||||
* Simply prints as an old-school php array.
|
||||
* Used as a last-resort backup to save unused translations.
|
||||
* @param string $key
|
||||
* @param array $array
|
||||
* @return string
|
||||
*/
|
||||
function formatTranslationArray(string $key, array $array) : string {
|
||||
$arrayPHP = var_export($array, true);
|
||||
return " '{$key}' => {$arrayPHP},";
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a string translation value within a multi-dimensional array
|
||||
* by traversing the given array of keys.
|
||||
* @param array $translations
|
||||
* @param array $keys
|
||||
* @return string|array
|
||||
*/
|
||||
function getTranslationByKeys(array $translations, array $keys) {
|
||||
$val = $translations;
|
||||
foreach ($keys as $key) {
|
||||
$val = $val[$key] ?? '';
|
||||
if ($val === '') return '';
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unset an inner item of a multi-dimensional array by
|
||||
* traversing the given array of keys.
|
||||
* @param array $input
|
||||
* @param array $keys
|
||||
*/
|
||||
function unsetArrayByKeys(array &$input, array $keys) {
|
||||
$val = &$input;
|
||||
$lastIndex = count($keys) - 1;
|
||||
foreach ($keys as $index => &$key) {
|
||||
if ($index === $lastIndex && is_array($val)) {
|
||||
unset($val[$key]);
|
||||
}
|
||||
if (!is_array($val)) return;
|
||||
$val = &$val[$key] ?? [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the given content to a translation file.
|
||||
* @param string $lang
|
||||
* @param string $fileName
|
||||
* @param string $content
|
||||
*/
|
||||
function writeLangFile(string $lang, string $fileName, string $content) {
|
||||
$path = __DIR__ . "/{$lang}/{$fileName}.php";
|
||||
if (!file_exists($path)) {
|
||||
errorOut("Expected translation file '{$path}' does not exist");
|
||||
}
|
||||
file_put_contents($path, $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the contents of a language file as an array of text lines.
|
||||
* @param string $lang
|
||||
* @param string $fileName
|
||||
* @return array
|
||||
*/
|
||||
function loadLangFileLines(string $lang, string $fileName) : array {
|
||||
$path = __DIR__ . "/{$lang}/{$fileName}.php";
|
||||
if (!file_exists($path)) {
|
||||
errorOut("Expected translation file '{$path}' does not exist");
|
||||
}
|
||||
$lines = explode("\n", file_get_contents($path));
|
||||
return array_map(function($line) {
|
||||
return trim($line, "\r");
|
||||
}, $lines);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the contents of a language file
|
||||
* @param string $lang
|
||||
* @param string $fileName
|
||||
* @return array
|
||||
*/
|
||||
function loadLang(string $lang, string $fileName) : array {
|
||||
$path = __DIR__ . "/{$lang}/{$fileName}.php";
|
||||
if (!file_exists($path)) {
|
||||
errorOut("Expected translation file '{$path}' does not exist");
|
||||
}
|
||||
|
||||
$fileData = include($path);
|
||||
return $fileData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch an array containing the names of all translation files without the extension.
|
||||
* @return array
|
||||
*/
|
||||
function getTranslationFileNames() : array {
|
||||
$dir = __DIR__ . "/en";
|
||||
if (!file_exists($dir)) {
|
||||
errorOut("Expected directory '{$dir}' does not exist");
|
||||
}
|
||||
$files = scandir($dir);
|
||||
$fileNames = [];
|
||||
foreach ($files as $file) {
|
||||
if (substr($file, -4) === '.php') {
|
||||
$fileNames[] = substr($file, 0, strlen($file) - 4);
|
||||
}
|
||||
}
|
||||
return $fileNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a locale to follow the lowercase_UPERCASE standard
|
||||
* @param string $lang
|
||||
* @return string
|
||||
*/
|
||||
function formatLocale(string $lang) : string {
|
||||
$langParts = explode('_', strtoupper($lang));
|
||||
$langParts[0] = strtolower($langParts[0]);
|
||||
return implode('_', $langParts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dump a variable then die.
|
||||
* @param $content
|
||||
*/
|
||||
function dd($content) {
|
||||
print_r($content);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Log out some information text in blue
|
||||
* @param $text
|
||||
*/
|
||||
function info($text) {
|
||||
echo "\e[34m" . $text . "\e[0m\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Log out an error in red and exit.
|
||||
* @param $text
|
||||
*/
|
||||
function errorOut($text) {
|
||||
echo "\e[31m" . $text . "\e[0m\n";
|
||||
exit(1);
|
||||
}
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => 'Le serveur n\'autorise pas l\'envoi d\'un fichier de cette taille. Veuillez essayer avec une taille de fichier réduite.',
|
||||
'image_upload_error' => 'Une erreur est survenue pendant l\'envoi de l\'image',
|
||||
'image_upload_type_error' => 'LE format de l\'image envoyée n\'est pas valide',
|
||||
'file_upload_timeout' => 'Le téléchargement du fichier a expiré.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Page incorrecte durant la mise à jour du fichier joint',
|
||||
|
||||
@@ -37,6 +37,7 @@ return [
|
||||
'server_upload_limit' => 'Il server non permette un upload di questa grandezza. Prova con un file più piccolo.',
|
||||
'image_upload_error' => 'C\'è stato un errore caricando l\'immagine',
|
||||
'image_upload_type_error' => 'Il tipo di immagine in upload non è valido',
|
||||
'file_upload_timeout' => 'Il caricamento del file è scaduto.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Page mismatch during attachment update',
|
||||
|
||||
@@ -35,6 +35,7 @@ return [
|
||||
'cannot_create_thumbs' => 'このサーバはサムネイルを作成できません。GD PHP extensionがインストールされていることを確認してください。',
|
||||
'server_upload_limit' => 'このサイズの画像をアップロードすることは許可されていません。ファイルサイズを小さくし、再試行してください。',
|
||||
'image_upload_error' => '画像アップロード時にエラーが発生しました。',
|
||||
'file_upload_timeout' => 'ファイルのアップロードがタイムアウトしました。',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => '添付を更新するページが一致しません',
|
||||
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => '해당 크기의 파일을 업로드하는것이 서버에서 제한됩니다. 파일 사이즈를 작게 줄이거나 서버 설정을 변경하세요.',
|
||||
'image_upload_error' => '이미지를 업로드하는 중에 오류가 발생했습니다.',
|
||||
'image_upload_type_error' => '업로드중인 이미지 유형이 잘못되었습니다.',
|
||||
'file_upload_timeout' => '파일 업로드가 시간 초과되었습니다.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => '첨부 파일 업데이트 중 페이지 불일치하였습니다.',
|
||||
|
||||
@@ -35,6 +35,7 @@ return [
|
||||
'cannot_create_thumbs' => 'De server kon geen thumbnails maken. Controleer of je de GD PHP extensie geïnstalleerd hebt.',
|
||||
'server_upload_limit' => 'Het afbeeldingsformaat is te groot. Probeer een kleinere bestandsgrootte.',
|
||||
'image_upload_error' => 'Er ging iets fout bij het uploaden van de afbeelding',
|
||||
'file_upload_timeout' => 'Het uploaden van het bestand is verlopen.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Bij het bijwerken van de bijlage bleek de pagina onjuist',
|
||||
|
||||
@@ -15,7 +15,7 @@ return [
|
||||
'page_delete' => 'usunięto stronę',
|
||||
'page_delete_notification' => 'Strona usunięta pomyślnie',
|
||||
'page_restore' => 'przywrócono stronę',
|
||||
'page_restore_notification' => 'Stronga przywrócona pomyślnie',
|
||||
'page_restore_notification' => 'Strona przywrócona pomyślnie',
|
||||
'page_move' => 'przeniesiono stronę',
|
||||
|
||||
// Chapters
|
||||
@@ -28,13 +28,23 @@ return [
|
||||
'chapter_move' => 'przeniesiono rozdział',
|
||||
|
||||
// Books
|
||||
'book_create' => 'utworzono księgę',
|
||||
'book_create_notification' => 'Księga utworzona pomyślnie',
|
||||
'book_update' => 'zaktualizowano księgę',
|
||||
'book_update_notification' => 'Księga zaktualizowana pomyślnie',
|
||||
'book_delete' => 'usunięto księgę',
|
||||
'book_delete_notification' => 'Księga usunięta pomyślnie',
|
||||
'book_sort' => 'posortowano księgę',
|
||||
'book_sort_notification' => 'Księga posortowana pomyślnie',
|
||||
'book_create' => 'utworzono podręcznik',
|
||||
'book_create_notification' => 'Podręcznik utworzony pomyślnie',
|
||||
'book_update' => 'zaktualizowano podręcznik',
|
||||
'book_update_notification' => 'Podręcznik zaktualizowany pomyślnie',
|
||||
'book_delete' => 'usunięto podręcznik',
|
||||
'book_delete_notification' => 'Podręcznik usunięty pomyślnie',
|
||||
'book_sort' => 'posortowano podręcznik',
|
||||
'book_sort_notification' => 'Podręcznik posortowany pomyślnie',
|
||||
|
||||
// Bookshelves
|
||||
'bookshelf_create' => 'utworzono półkę',
|
||||
'bookshelf_create_notification' => 'Półka utworzona pomyślnie',
|
||||
'bookshelf_update' => 'zaktualizowano półkę',
|
||||
'bookshelf_update_notification' => 'Półka zaktualizowana pomyślnie',
|
||||
'bookshelf_delete' => 'usunięto półkę',
|
||||
'bookshelf_delete_notification' => 'Półka usunięta pomyślnie',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'skomentował',
|
||||
];
|
||||
|
||||
@@ -10,8 +10,8 @@ return [
|
||||
| these language lines according to your application's requirements.
|
||||
|
|
||||
*/
|
||||
'failed' => 'These credentials do not match our records.',
|
||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
||||
'failed' => 'Wprowadzone poświadczenia są nieprawidłowe.',
|
||||
'throttle' => 'Zbyt wiele prób logowania. Spróbuj ponownie za :seconds s.',
|
||||
|
||||
/**
|
||||
* Login & Register
|
||||
@@ -24,13 +24,13 @@ return [
|
||||
|
||||
'name' => 'Imię',
|
||||
'username' => 'Nazwa użytkownika',
|
||||
'email' => 'Email',
|
||||
'email' => 'E-mail',
|
||||
'password' => 'Hasło',
|
||||
'password_confirm' => 'Potwierdzenie hasła',
|
||||
'password_hint' => 'Musi mieć więcej niż 5 znaków',
|
||||
'forgot_password' => 'Przypomnij hasło',
|
||||
'forgot_password' => 'Zapomniałem hasła',
|
||||
'remember_me' => 'Zapamiętaj mnie',
|
||||
'ldap_email_hint' => 'Wprowadź adres email dla tego konta.',
|
||||
'ldap_email_hint' => 'Wprowadź adres e-mail dla tego konta.',
|
||||
'create_account' => 'Utwórz konto',
|
||||
'social_login' => 'Logowanie za pomocą konta społecznościowego',
|
||||
'social_registration' => 'Rejestracja za pomocą konta społecznościowego',
|
||||
@@ -40,7 +40,7 @@ return [
|
||||
'register_confirm' => 'Sprawdź podany adres e-mail i kliknij w link, by uzyskać dostęp do :appName.',
|
||||
'registrations_disabled' => 'Rejestracja jest obecnie zablokowana.',
|
||||
'registration_email_domain_invalid' => 'Adresy e-mail z tej domeny nie mają dostępu do tej aplikacji',
|
||||
'register_success' => 'Dziękujemy za rejestrację! Zalogowano Cię automatycznie.',
|
||||
'register_success' => 'Dziękujemy za rejestrację! Zostałeś zalogowany automatycznie.',
|
||||
|
||||
|
||||
/**
|
||||
@@ -60,17 +60,17 @@ return [
|
||||
/**
|
||||
* Email Confirmation
|
||||
*/
|
||||
'email_confirm_subject' => 'Potwierdź swój adres email w :appName',
|
||||
'email_confirm_subject' => 'Potwierdź swój adres e-mail w :appName',
|
||||
'email_confirm_greeting' => 'Dziękujemy za dołączenie do :appName!',
|
||||
'email_confirm_text' => 'Prosimy byś potwierdził swoje hasło klikając przycisk poniżej:',
|
||||
'email_confirm_action' => 'Potwierdź email',
|
||||
'email_confirm_action' => 'Potwierdź e-mail',
|
||||
'email_confirm_send_error' => 'Wymagane jest potwierdzenie hasła, lecz wiadomość nie mogła zostać wysłana. Skontaktuj się z administratorem w celu upewnienia się, że skrzynka została skonfigurowana prawidłowo.',
|
||||
'email_confirm_success' => 'Adres email został potwierdzony!',
|
||||
'email_confirm_resent' => 'Wiadomość potwierdzająca została wysłana, sprawdź swoją skrzynkę.',
|
||||
'email_confirm_success' => 'Adres e-mail został potwierdzony!',
|
||||
'email_confirm_resent' => 'E-mail z potwierdzeniem został wysłany ponownie, sprawdź swoją skrzynkę odbiorczą.',
|
||||
|
||||
'email_not_confirmed' => 'Adres email niepotwierdzony',
|
||||
'email_not_confirmed_text' => 'Twój adres email nie został jeszcze potwierdzony.',
|
||||
'email_not_confirmed' => 'Adres e-mail nie został potwierdzony',
|
||||
'email_not_confirmed_text' => 'Twój adres e-mail nie został jeszcze potwierdzony.',
|
||||
'email_not_confirmed_click_link' => 'Aby potwierdzić swoje konto kliknij w link wysłany w wiadomości po rejestracji.',
|
||||
'email_not_confirmed_resend' => 'Jeśli wiadomość do Ciebie nie dotarła możesz wysłać ją ponownie wypełniając formularz poniżej.',
|
||||
'email_not_confirmed_resend_button' => 'Wyślij ponownie wiadomość z potwierdzeniem',
|
||||
];
|
||||
];
|
||||
|
||||
@@ -19,7 +19,7 @@ return [
|
||||
'description' => 'Opis',
|
||||
'role' => 'Rola',
|
||||
'cover_image' => 'Zdjęcie z okładki',
|
||||
'cover_image_description' => 'Ten obraz powinien wynosić około 300 x 170 piksli.',
|
||||
'cover_image_description' => 'Ten obraz powinien posiadać wymiary około 440x250px.',
|
||||
|
||||
/**
|
||||
* Actions
|
||||
@@ -31,6 +31,8 @@ return [
|
||||
'edit' => 'Edytuj',
|
||||
'sort' => 'Sortuj',
|
||||
'move' => 'Przenieś',
|
||||
'copy' => 'Skopiuj',
|
||||
'reply' => 'Odpowiedz',
|
||||
'delete' => 'Usuń',
|
||||
'search' => 'Szukaj',
|
||||
'search_clear' => 'Wyczyść wyszukiwanie',
|
||||
@@ -38,12 +40,11 @@ return [
|
||||
'remove' => 'Usuń',
|
||||
'add' => 'Dodaj',
|
||||
|
||||
|
||||
/**
|
||||
* Misc
|
||||
*/
|
||||
'deleted_user' => 'Użytkownik usunięty',
|
||||
'no_activity' => 'Brak aktywności do pokazania',
|
||||
'no_activity' => 'Brak aktywności do wyświetlenia',
|
||||
'no_items' => 'Brak elementów do wyświetlenia',
|
||||
'back_to_top' => 'Powrót na górę',
|
||||
'toggle_details' => 'Włącz/wyłącz szczegóły',
|
||||
@@ -51,6 +52,7 @@ return [
|
||||
'details' => 'Szczegóły',
|
||||
'grid_view' => 'Widok kafelkowy',
|
||||
'list_view' => 'Widok listy',
|
||||
'default' => 'Domyślny',
|
||||
|
||||
/**
|
||||
* Header
|
||||
@@ -63,4 +65,4 @@ return [
|
||||
*/
|
||||
'email_action_help' => 'Jeśli masz problem z kliknięciem przycisku ":actionText", skopiuj i wklej poniższy adres URL w nowej karcie swojej przeglądarki:',
|
||||
'email_rights' => 'Wszelkie prawa zastrzeżone',
|
||||
];
|
||||
];
|
||||
|
||||
@@ -7,21 +7,22 @@ return [
|
||||
'image_select' => 'Wybór obrazka',
|
||||
'image_all' => 'Wszystkie',
|
||||
'image_all_title' => 'Zobacz wszystkie obrazki',
|
||||
'image_book_title' => 'Zobacz obrazki zapisane w tej księdze',
|
||||
'image_book_title' => 'Zobacz obrazki zapisane w tym podręczniku',
|
||||
'image_page_title' => 'Zobacz obrazki zapisane na tej stronie',
|
||||
'image_search_hint' => 'Szukaj po nazwie obrazka',
|
||||
'image_uploaded' => 'Udostępniono :uploadedDate',
|
||||
'image_uploaded' => 'Przesłano :uploadedDate',
|
||||
'image_load_more' => 'Wczytaj więcej',
|
||||
'image_image_name' => 'Nazwa obrazka',
|
||||
'image_delete_used' => 'Ten obrazek jest używany na stronach poniżej.',
|
||||
'image_delete_used' => 'Ten obrazek jest używany na stronach wyświetlonych poniżej.',
|
||||
'image_delete_confirm' => 'Kliknij ponownie Usuń by potwierdzić usunięcie obrazka.',
|
||||
'image_select_image' => 'Wybierz obrazek',
|
||||
'image_dropzone' => 'Upuść obrazki tutaj lub kliknij by wybrać obrazki do udostępnienia',
|
||||
'image_dropzone' => 'Upuść obrazki tutaj lub kliknij by wybrać obrazki do przesłania',
|
||||
'images_deleted' => 'Usunięte obrazki',
|
||||
'image_preview' => 'Podgląd obrazka',
|
||||
'image_upload_success' => 'Obrazek wysłany pomyślnie',
|
||||
'image_upload_success' => 'Obrazek przesłany pomyślnie',
|
||||
'image_update_success' => 'Szczegóły obrazka zaktualizowane pomyślnie',
|
||||
'image_delete_success' => 'Obrazek usunięty pomyślnie',
|
||||
'image_upload_remove' => 'Usuń',
|
||||
|
||||
/**
|
||||
* Code editor
|
||||
@@ -30,4 +31,4 @@ return [
|
||||
'code_language' => 'Język kodu',
|
||||
'code_content' => 'Zawartość kodu',
|
||||
'code_save' => 'Zapisz kod',
|
||||
];
|
||||
];
|
||||
|
||||
@@ -8,23 +8,23 @@ return [
|
||||
'recently_created_pages' => 'Ostatnio utworzone strony',
|
||||
'recently_updated_pages' => 'Ostatnio zaktualizowane strony',
|
||||
'recently_created_chapters' => 'Ostatnio utworzone rozdziały',
|
||||
'recently_created_books' => 'Ostatnio utworzone księgi',
|
||||
'recently_created_books' => 'Ostatnio utworzone podręczniki',
|
||||
'recently_update' => 'Ostatnio zaktualizowane',
|
||||
'recently_viewed' => 'Ostatnio wyświetlane',
|
||||
'recent_activity' => 'Ostatnia aktywność',
|
||||
'create_now' => 'Utwórz teraz',
|
||||
'revisions' => 'Rewizje',
|
||||
'meta_revision' => 'Rewizja #:revisionCount',
|
||||
'revisions' => 'Wersje',
|
||||
'meta_revision' => 'Wersja #:revisionCount',
|
||||
'meta_created' => 'Utworzono :timeLength',
|
||||
'meta_created_name' => 'Utworzono :timeLength przez :user',
|
||||
'meta_updated' => 'Zaktualizowano :timeLength',
|
||||
'meta_updated_name' => 'Zaktualizowano :timeLength przez :user',
|
||||
'x_pages' => ':count stron',
|
||||
'entity_select' => 'Wybór encji',
|
||||
'entity_select' => 'Wybór obiektu',
|
||||
'images' => 'Obrazki',
|
||||
'my_recent_drafts' => 'Moje ostatnie szkice',
|
||||
'my_recent_drafts' => 'Moje ostatnie wersje robocze',
|
||||
'my_recently_viewed' => 'Moje ostatnio wyświetlane',
|
||||
'no_pages_viewed' => 'Nie wyświetlano żadnych stron',
|
||||
'no_pages_viewed' => 'Nie przeglądałeś jeszcze żadnych stron',
|
||||
'no_pages_recently_created' => 'Nie utworzono ostatnio żadnych stron',
|
||||
'no_pages_recently_updated' => 'Nie zaktualizowano ostatnio żadnych stron',
|
||||
'export' => 'Eksportuj',
|
||||
@@ -36,8 +36,8 @@ return [
|
||||
* Permissions and restrictions
|
||||
*/
|
||||
'permissions' => 'Uprawnienia',
|
||||
'permissions_intro' => 'Jeśli odblokowane, te uprawnienia będą miały priorytet względem pozostałych ustawionych uprawnień ról.',
|
||||
'permissions_enable' => 'Odblokuj własne uprawnienia',
|
||||
'permissions_intro' => 'Jeśli włączone są indywidualne uprawnienia, to te uprawnienia będą miały priorytet względem pozostałych ustawionych uprawnień ról.',
|
||||
'permissions_enable' => 'Włącz własne uprawnienia',
|
||||
'permissions_save' => 'Zapisz uprawnienia',
|
||||
|
||||
/**
|
||||
@@ -50,54 +50,90 @@ return [
|
||||
'search_for_term' => 'Szukaj :term',
|
||||
'search_more' => 'Więcej wyników',
|
||||
'search_filters' => 'Filtry wyszukiwania',
|
||||
'search_content_type' => 'Rodziaj treści',
|
||||
'search_content_type' => 'Rodzaj treści',
|
||||
'search_exact_matches' => 'Dokładne frazy',
|
||||
'search_tags' => 'Tagi wyszukiwania',
|
||||
'search_options' => 'Opcje',
|
||||
'search_viewed_by_me' => 'Wyświetlone przeze mnie',
|
||||
'search_not_viewed_by_me' => 'Niewyświetlone przeze mnie',
|
||||
'search_permissions_set' => 'Zbiór uprawnień',
|
||||
'search_created_by_me' => 'Utworzone przeze mnie',
|
||||
'search_updated_by_me' => 'Zaktualizowane przeze mnie',
|
||||
'search_date_options' => 'Opcje dat',
|
||||
'search_updated_before' => 'Zaktualizowane przed',
|
||||
'search_updated_after' => 'Zaktualizowane po',
|
||||
'search_created_before' => 'Utworzone przed',
|
||||
'search_created_after' => 'Utworzone po',
|
||||
'search_set_date' => 'Ustaw datę',
|
||||
'search_update' => 'Zaktualizuj wyszukiwanie',
|
||||
|
||||
|
||||
/**
|
||||
* Shelves
|
||||
*/
|
||||
'shelf' => 'Półka',
|
||||
'shelves' => 'Półki',
|
||||
'shelves_long' => 'Półki',
|
||||
'shelves_empty' => 'Brak utworzonych półek',
|
||||
'shelves_create' => 'Utwórz półkę',
|
||||
'shelves_popular' => 'Popularne półki',
|
||||
'shelves_new' => 'Nowe półki',
|
||||
'shelves_popular_empty' => 'Najpopularniejsze półki pojawią się w tym miejscu.',
|
||||
'shelves_new_empty' => 'Tutaj pojawią się ostatnio utworzone półki.',
|
||||
'shelves_save' => 'Zapisz półkę',
|
||||
'shelves_books' => 'Podręczniki na tej półce',
|
||||
'shelves_add_books' => 'Dodaj podręczniki do tej półki',
|
||||
'shelves_drag_books' => 'Przeciągnij podręczniki tutaj aby dodać je do półki',
|
||||
'shelves_empty_contents' => 'Ta półka nie ma przypisanych żadnych podręczników',
|
||||
'shelves_edit_and_assign' => 'Edytuj półkę aby przypisać podręczniki',
|
||||
'shelves_edit_named' => 'Edytuj półkę :name',
|
||||
'shelves_edit' => 'Edytuj półkę',
|
||||
'shelves_delete' => 'Usuń półkę',
|
||||
'shelves_delete_named' => 'Usuń półkę :name',
|
||||
'shelves_delete_explain' => "Ta operacja usunie półkę o nazwie ':name'. Podręczniki z tej półki nie zostaną usunięte.",
|
||||
'shelves_delete_confirmation' => 'Czy jesteś pewien, że chcesz usunąć tę półkę?',
|
||||
'shelves_permissions' => 'Uprawnienia półki',
|
||||
'shelves_permissions_updated' => 'Uprawnienia półki zostały zaktualizowane',
|
||||
'shelves_permissions_active' => 'Uprawnienia półki są aktywne',
|
||||
'shelves_copy_permissions_to_books' => 'Skopiuj uprawnienia do podręczników',
|
||||
'shelves_copy_permissions' => 'Skopiuj uprawnienia',
|
||||
'shelves_copy_permissions_explain' => 'To spowoduje zastosowanie obecnych ustawień uprawnień dla tej półki do wszystkich podręczników w niej zawartych. Przed aktywacją upewnij się, że wszelkie zmiany w uprawnieniach do tej półki zostały zapisane.',
|
||||
'shelves_copy_permission_success' => 'Uprawnienia półki zostały skopiowane do :count podręczników',
|
||||
|
||||
/**
|
||||
* Books
|
||||
*/
|
||||
'book' => 'Księga',
|
||||
'books' => 'Księgi',
|
||||
'x_books' => ':count Księga|:count Księgi',
|
||||
'books_empty' => 'Brak utworzonych ksiąg',
|
||||
'books_popular' => 'Popularne księgi',
|
||||
'books_recent' => 'Ostatnie księgi',
|
||||
'books_popular_empty' => 'Najbardziej popularne księgi zostaną wyświetlone w tym miejscu.',
|
||||
'books_create' => 'Utwórz księgę',
|
||||
'books_delete' => 'Usuń księgę',
|
||||
'books_delete_named' => 'Usuń księgę :bookName',
|
||||
'books_delete_explain' => 'To spowoduje usunięcie księgi \':bookName\', Wszystkie strony i rozdziały zostaną usunięte.',
|
||||
'books_delete_confirmation' => 'Czy na pewno chcesz usunąc tę księgę?',
|
||||
'books_edit' => 'Edytuj księgę',
|
||||
'books_edit_named' => 'Edytuj księgę :bookName',
|
||||
'books_form_book_name' => 'Nazwa księgi',
|
||||
'books_save' => 'Zapisz księgę',
|
||||
'books_permissions' => 'Uprawnienia księgi',
|
||||
'books_permissions_updated' => 'Zaktualizowano uprawnienia księgi',
|
||||
'books_empty_contents' => 'Brak stron lub rozdziałów w tej księdze.',
|
||||
'book' => 'Podręcznik',
|
||||
'books' => 'Podręczniki',
|
||||
'x_books' => ':count Podręcznik|:count Podręczniki',
|
||||
'books_empty' => 'Brak utworzonych podręczników',
|
||||
'books_popular' => 'Popularne podręczniki',
|
||||
'books_recent' => 'Ostatnie podręczniki',
|
||||
'books_new' => 'Nowe podręczniki',
|
||||
'books_popular_empty' => 'Najpopularniejsze podręczniki pojawią się w tym miejscu.',
|
||||
'books_new_empty' => 'Tutaj pojawią się ostatnio utworzone podręczniki.',
|
||||
'books_create' => 'Utwórz podręcznik',
|
||||
'books_delete' => 'Usuń podręcznik',
|
||||
'books_delete_named' => 'Usuń podręcznik :bookName',
|
||||
'books_delete_explain' => 'To spowoduje usunięcie podręcznika \':bookName\', Wszystkie strony i rozdziały zostaną usunięte.',
|
||||
'books_delete_confirmation' => 'Czy na pewno chcesz usunąc ten podręcznik?',
|
||||
'books_edit' => 'Edytuj podręcznik',
|
||||
'books_edit_named' => 'Edytuj podręcznik :bookName',
|
||||
'books_form_book_name' => 'Nazwa podręcznika',
|
||||
'books_save' => 'Zapisz podręcznik',
|
||||
'books_permissions' => 'Uprawnienia podręcznika',
|
||||
'books_permissions_updated' => 'Zaktualizowano uprawnienia podręcznika',
|
||||
'books_empty_contents' => 'Brak stron lub rozdziałów w tym podręczniku.',
|
||||
'books_empty_create_page' => 'Utwórz nową stronę',
|
||||
'books_empty_or' => 'lub',
|
||||
'books_empty_sort_current_book' => 'posortuj bieżącą księgę',
|
||||
'books_empty_sort_current_book' => 'posortuj bieżący podręcznik',
|
||||
'books_empty_add_chapter' => 'Dodaj rozdział',
|
||||
'books_permissions_active' => 'Uprawnienia księgi aktywne',
|
||||
'books_search_this' => 'Wyszukaj w tej księdze',
|
||||
'books_navigation' => 'Nawigacja po księdze',
|
||||
'books_sort' => 'Sortuj zawartość Księgi',
|
||||
'books_sort_named' => 'Sortuj księgę :bookName',
|
||||
'books_sort_show_other' => 'Pokaż inne księgi',
|
||||
'books_sort_save' => 'Zapisz nowy porządek',
|
||||
'books_permissions_active' => 'Uprawnienia podręcznika są aktywne',
|
||||
'books_search_this' => 'Wyszukaj w tym podręczniku',
|
||||
'books_navigation' => 'Nawigacja po podręczniku',
|
||||
'books_sort' => 'Sortuj zawartość podręcznika',
|
||||
'books_sort_named' => 'Sortuj podręcznik :bookName',
|
||||
'books_sort_show_other' => 'Pokaż inne podręczniki',
|
||||
'books_sort_save' => 'Zapisz nową kolejność',
|
||||
|
||||
/**
|
||||
* Chapters
|
||||
@@ -111,7 +147,7 @@ return [
|
||||
'chapters_delete' => 'Usuń rozdział',
|
||||
'chapters_delete_named' => 'Usuń rozdział :chapterName',
|
||||
'chapters_delete_explain' => 'To spowoduje usunięcie rozdziału \':chapterName\', Wszystkie strony zostaną usunięte
|
||||
i dodane bezpośrednio do księgi macierzystej.',
|
||||
i dodane bezpośrednio do podręcznika nadrzędnego.',
|
||||
'chapters_delete_confirm' => 'Czy na pewno chcesz usunąć ten rozdział?',
|
||||
'chapters_edit' => 'Edytuj rozdział',
|
||||
'chapters_edit_named' => 'Edytuj rozdział :chapterName',
|
||||
@@ -121,7 +157,7 @@ return [
|
||||
'chapter_move_success' => 'Rozdział przeniesiony do :bookName',
|
||||
'chapters_permissions' => 'Uprawienia rozdziału',
|
||||
'chapters_empty' => 'Brak stron w tym rozdziale.',
|
||||
'chapters_permissions_active' => 'Uprawnienia rozdziału aktywne',
|
||||
'chapters_permissions_active' => 'Uprawnienia rozdziału są aktywne',
|
||||
'chapters_permissions_success' => 'Zaktualizowano uprawnienia rozdziału',
|
||||
'chapters_search_this' => 'Przeszukaj ten rozdział',
|
||||
|
||||
@@ -136,84 +172,93 @@ return [
|
||||
'pages_navigation' => 'Nawigacja po stronie',
|
||||
'pages_delete' => 'Usuń stronę',
|
||||
'pages_delete_named' => 'Usuń stronę :pageName',
|
||||
'pages_delete_draft_named' => 'Usuń szkic strony :pageName',
|
||||
'pages_delete_draft' => 'Usuń szkic strony',
|
||||
'pages_delete_draft_named' => 'Usuń wersje robocze dla strony :pageName',
|
||||
'pages_delete_draft' => 'Usuń wersje roboczą',
|
||||
'pages_delete_success' => 'Strona usunięta pomyślnie',
|
||||
'pages_delete_draft_success' => 'Szkic strony usunięty pomyślnie',
|
||||
'pages_delete_confirm' => 'Czy na pewno chcesz usunąć tę stron?',
|
||||
'pages_delete_draft_confirm' => 'Czy na pewno chcesz usunąć szkic strony?',
|
||||
'pages_delete_draft_success' => 'Werjsa robocza usunięta pomyślnie',
|
||||
'pages_delete_confirm' => 'Czy na pewno chcesz usunąć tę stronę?',
|
||||
'pages_delete_draft_confirm' => 'Czy na pewno chcesz usunąć wersje roboczą strony?',
|
||||
'pages_editing_named' => 'Edytowanie strony :pageName',
|
||||
'pages_edit_toggle_header' => 'Włącz/wyłącz nagłówek',
|
||||
'pages_edit_save_draft' => 'Zapisz szkic',
|
||||
'pages_edit_draft' => 'Edytuj szkic strony',
|
||||
'pages_editing_draft' => 'Edytowanie szkicu strony',
|
||||
'pages_edit_save_draft' => 'Zapisano wersje roboczą o ',
|
||||
'pages_edit_draft' => 'Edytuj wersje roboczą',
|
||||
'pages_editing_draft' => 'Edytowanie wersji roboczej',
|
||||
'pages_editing_page' => 'Edytowanie strony',
|
||||
'pages_edit_draft_save_at' => 'Szkic zapisany ',
|
||||
'pages_edit_delete_draft' => 'Usuń szkic',
|
||||
'pages_edit_discard_draft' => 'Porzuć szkic',
|
||||
'pages_edit_set_changelog' => 'Ustaw log zmian',
|
||||
'pages_edit_draft_save_at' => 'Wersja robocza zapisana ',
|
||||
'pages_edit_delete_draft' => 'Usuń wersje roboczą',
|
||||
'pages_edit_discard_draft' => 'Porzuć wersje roboczą',
|
||||
'pages_edit_set_changelog' => 'Ustaw dziennik zmian',
|
||||
'pages_edit_enter_changelog_desc' => 'Opisz zmiany, które zostały wprowadzone',
|
||||
'pages_edit_enter_changelog' => 'Wyświetl log zmian',
|
||||
'pages_edit_enter_changelog' => 'Wyświetl dziennik zmian',
|
||||
'pages_save' => 'Zapisz stronę',
|
||||
'pages_title' => 'Tytuł strony',
|
||||
'pages_name' => 'Nazwa strony',
|
||||
'pages_md_editor' => 'Edytor',
|
||||
'pages_md_preview' => 'Podgląd',
|
||||
'pages_md_insert_image' => 'Wstaw obrazek',
|
||||
'pages_md_insert_link' => 'Wstaw łącze do encji',
|
||||
'pages_md_insert_link' => 'Wstaw łącze do obiektu',
|
||||
'pages_md_insert_drawing' => 'Wstaw rysunek',
|
||||
'pages_not_in_chapter' => 'Strona nie została umieszczona w rozdziale',
|
||||
'pages_move' => 'Przenieś stronę',
|
||||
'pages_move_success' => 'Strona przeniesiona do ":parentName"',
|
||||
'pages_copy' => 'Skopiuj stronę',
|
||||
'pages_copy_desination' => 'Skopiuj do',
|
||||
'pages_copy_success' => 'Strona została pomyślnie skopiowana',
|
||||
'pages_permissions' => 'Uprawnienia strony',
|
||||
'pages_permissions_success' => 'Zaktualizowano uprawnienia strony',
|
||||
'pages_revisions' => 'Rewizje strony',
|
||||
'pages_revisions_named' => 'Rewizje strony :pageName',
|
||||
'pages_revision_named' => 'Rewizja stroony :pageName',
|
||||
'pages_revision' => 'Wersja',
|
||||
'pages_revisions' => 'Wersje strony',
|
||||
'pages_revisions_named' => 'Wersje strony :pageName',
|
||||
'pages_revision_named' => 'Wersja strony :pageName',
|
||||
'pages_revisions_created_by' => 'Utworzona przez',
|
||||
'pages_revisions_date' => 'Data rewizji',
|
||||
'pages_revisions_date' => 'Data wersji',
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_changelog' => 'Log zmian',
|
||||
'pages_revisions_changelog' => 'Dziennik zmian',
|
||||
'pages_revisions_changes' => 'Zmiany',
|
||||
'pages_revisions_current' => 'Obecna wersja',
|
||||
'pages_revisions_preview' => 'Podgląd',
|
||||
'pages_revisions_restore' => 'Przywróć',
|
||||
'pages_revisions_none' => 'Ta strona nie posiada żadnych rewizji',
|
||||
'pages_revisions_none' => 'Ta strona nie posiada żadnych wersji',
|
||||
'pages_copy_link' => 'Kopiuj link',
|
||||
'pages_edit_content_link' => 'Edytuj zawartość',
|
||||
'pages_permissions_active' => 'Uprawnienia strony aktywne',
|
||||
'pages_initial_revision' => 'Wydanie pierwotne',
|
||||
'pages_permissions_active' => 'Uprawnienia strony są aktywne',
|
||||
'pages_initial_revision' => 'Pierwsze wydanie',
|
||||
'pages_initial_name' => 'Nowa strona',
|
||||
'pages_editing_draft_notification' => 'Edytujesz obecnie szkic, który był ostatnio zapisany :timeDiff.',
|
||||
'pages_draft_edited_notification' => 'Od tego czasu ta strona była zmieniana. Zalecane jest odrzucenie tego szkicu.',
|
||||
'pages_editing_draft_notification' => 'Edytujesz obecnie wersje roboczą, która była ostatnio zapisana :timeDiff.',
|
||||
'pages_draft_edited_notification' => 'Od tego czasu ta strona była zmieniana. Zalecane jest odrzucenie tej wersji roboczej.',
|
||||
'pages_draft_edit_active' => [
|
||||
'start_a' => ':count użytkowników rozpoczęło edytowanie tej strony',
|
||||
'start_b' => ':userName edytuje stronę',
|
||||
'time_a' => ' od czasu ostatniej edycji',
|
||||
'time_a' => 'od czasu ostatniej edycji',
|
||||
'time_b' => 'w ciągu ostatnich :minCount minut',
|
||||
'message' => ':start :time. Pamiętaj by nie nadpisywać czyichś zmian!',
|
||||
],
|
||||
'pages_draft_discarded' => 'Szkic odrzucony, edytor został uzupełniony najnowszą wersją strony',
|
||||
'pages_draft_discarded' => 'Wersja robocza odrzucona, edytor został uzupełniony najnowszą wersją strony',
|
||||
'pages_specific' => 'Określona strona',
|
||||
|
||||
/**
|
||||
* Editor sidebar
|
||||
*/
|
||||
'page_tags' => 'Tagi strony',
|
||||
'chapter_tags' => 'Tagi rozdziału',
|
||||
'book_tags' => 'Tagi podręcznika',
|
||||
'shelf_tags' => 'Tagi półki',
|
||||
'tag' => 'Tag',
|
||||
'tags' => '',
|
||||
'tags' => 'Tagi',
|
||||
'tag_value' => 'Wartość tagu (opcjonalnie)',
|
||||
'tags_explain' => "Dodaj tagi by skategoryzować zawartość. \n W celu dokładniejszej organizacji zawartości możesz dodać wartości do tagów.",
|
||||
'tags_add' => 'Dodaj kolejny tag',
|
||||
'attachments' => 'Załączniki',
|
||||
'attachments_explain' => 'Udostępnij kilka plików lub załącz link. Będą one widoczne na marginesie strony.',
|
||||
'attachments_explain' => 'Prześlij kilka plików lub załącz linki. Będą one widoczne na pasku bocznym strony.',
|
||||
'attachments_explain_instant_save' => 'Zmiany są zapisywane natychmiastowo.',
|
||||
'attachments_items' => 'Załączniki',
|
||||
'attachments_upload' => 'Dodaj plik',
|
||||
'attachments_link' => 'Dodaj link',
|
||||
'attachments_set_link' => 'Ustaw link',
|
||||
'attachments_delete_confirm' => 'Kliknij ponownie Usuń by potwierdzić usunięcie załącznika.',
|
||||
'attachments_dropzone' => 'Upuść pliki lub kliknij tutaj by udostępnić pliki',
|
||||
'attachments_no_files' => 'Nie udostępniono plików',
|
||||
'attachments_explain_link' => 'Możesz załączyć link jeśli nie chcesz udostępniać pliku. Może być to link do innej strony lub link do pliku w chmurze.',
|
||||
'attachments_dropzone' => 'Upuść pliki lub kliknij tutaj by przesłać pliki',
|
||||
'attachments_no_files' => 'Nie przesłano żadnych plików',
|
||||
'attachments_explain_link' => 'Możesz załączyć link jeśli nie chcesz przesyłać pliku. Może być to link do innej strony lub link do pliku w chmurze.',
|
||||
'attachments_link_name' => 'Nazwa linku',
|
||||
'attachment_link' => 'Link do załącznika',
|
||||
'attachments_link_url' => 'Link do pliku',
|
||||
@@ -221,10 +266,10 @@ return [
|
||||
'attach' => 'Załącz',
|
||||
'attachments_edit_file' => 'Edytuj plik',
|
||||
'attachments_edit_file_name' => 'Nazwa pliku',
|
||||
'attachments_edit_drop_upload' => 'Upuść pliki lub kliknij tutaj by udostępnić pliki i nadpisać istniejące',
|
||||
'attachments_edit_drop_upload' => 'Upuść pliki lub kliknij tutaj by przesłać pliki i nadpisać istniejące',
|
||||
'attachments_order_updated' => 'Kolejność załączników zaktualizowana',
|
||||
'attachments_updated_success' => 'Szczegóły załączników zaktualizowane',
|
||||
'attachments_deleted' => 'Załączniki usunięte',
|
||||
'attachments_deleted' => 'Załącznik usunięty',
|
||||
'attachments_file_uploaded' => 'Plik załączony pomyślnie',
|
||||
'attachments_file_updated' => 'Plik zaktualizowany pomyślnie',
|
||||
'attachments_link_attached' => 'Link pomyślnie dodany do strony',
|
||||
@@ -236,7 +281,7 @@ return [
|
||||
'profile_created_content' => 'Utworzona zawartość',
|
||||
'profile_not_created_pages' => ':userName nie utworzył żadnych stron',
|
||||
'profile_not_created_chapters' => ':userName nie utworzył żadnych rozdziałów',
|
||||
'profile_not_created_books' => ':userName nie utworzył żadnych ksiąg',
|
||||
'profile_not_created_books' => ':userName nie utworzył żadnych podręczników',
|
||||
|
||||
/**
|
||||
* Comments
|
||||
@@ -264,4 +309,4 @@ return [
|
||||
'revision_delete_confirm' => 'Czy na pewno chcesz usunąć tę wersję?',
|
||||
'revision_delete_success' => 'Usunięto wersję',
|
||||
'revision_cannot_delete_latest' => 'Nie można usunąć najnowszej wersji.'
|
||||
];
|
||||
];
|
||||
|
||||
@@ -11,17 +11,18 @@ return [
|
||||
'permissionJson' => 'Nie masz uprawnień do wykonania tej akcji.',
|
||||
|
||||
// Auth
|
||||
'error_user_exists_different_creds' => 'Użytkownik o adresie :email już istnieje.',
|
||||
'email_already_confirmed' => 'Email został potwierdzony, spróbuj się zalogować.',
|
||||
'error_user_exists_different_creds' => 'Użytkownik o adresie :email już istnieje, ale używa innych poświadczeń.',
|
||||
'email_already_confirmed' => 'E-mail został potwierdzony, spróbuj się zalogować.',
|
||||
'email_confirmation_invalid' => 'Ten token jest nieprawidłowy lub został już wykorzystany. Spróbuj zarejestrować się ponownie.',
|
||||
'email_confirmation_expired' => 'Ten token potwierdzający wygasł. Wysłaliśmy Ci kolejny.',
|
||||
'ldap_fail_anonymous' => 'Dostęp LDAP przy użyciu anonimowego powiązania nie powiódł się',
|
||||
'ldap_fail_authed' => 'Dostęp LDAP przy użyciu tego dn i hasła nie powiódł się',
|
||||
'ldap_fail_authed' => 'Dostęp LDAP przy użyciu tego DN i hasła nie powiódł się',
|
||||
'ldap_extension_not_installed' => 'Rozszerzenie LDAP PHP nie zostało zainstalowane',
|
||||
'ldap_cannot_connect' => 'Nie można połączyć z serwerem LDAP, połączenie nie zostało ustanowione',
|
||||
'social_no_action_defined' => 'Brak zdefiniowanej akcji',
|
||||
'social_account_in_use' => 'To konto :socialAccount jest już w użyciu, spróbuj zalogować się za pomocą opcji :socialAccount.',
|
||||
'social_account_email_in_use' => 'Email :email jest już w użyciu. Jeśli masz już konto, połącz konto :socialAccount z poziomu ustawień profilu.',
|
||||
'social_login_bad_response' => "Podczas próby logowania :socialAccount wystąpił błąd: \n:error",
|
||||
'social_account_in_use' => 'To konto :socialAccount jest już w użyciu. Spróbuj zalogować się za pomocą opcji :socialAccount.',
|
||||
'social_account_email_in_use' => 'E-mail :email jest już w użyciu. Jeśli masz już konto, połącz konto :socialAccount z poziomu ustawień profilu.',
|
||||
'social_account_existing' => 'Konto :socialAccount jest już połączone z Twoim profilem',
|
||||
'social_account_already_used_existing' => 'Konto :socialAccount jest już używane przez innego użytkownika.',
|
||||
'social_account_not_used' => 'To konto :socialAccount nie jest połączone z żadnym użytkownikiem. Połącz je ze swoim kontem w ustawieniach profilu. ',
|
||||
@@ -30,26 +31,32 @@ return [
|
||||
'social_driver_not_configured' => 'Ustawienia konta :socialAccount nie są poprawne.',
|
||||
|
||||
// System
|
||||
'path_not_writable' => 'Zapis do ścieżki :filePath jest niemożliwy. Upewnij się że aplikacja ma prawa do zapisu w niej.',
|
||||
'path_not_writable' => 'Zapis do ścieżki :filePath jest niemożliwy. Upewnij się że aplikacja ma prawa do zapisu plików na serwerze.',
|
||||
'cannot_get_image_from_url' => 'Nie można pobrać obrazka z :url',
|
||||
'cannot_create_thumbs' => 'Serwer nie może utworzyć miniaturek. Upewnij się że rozszerzenie GD PHP zostało zainstalowane.',
|
||||
'server_upload_limit' => 'Serwer nie pozwala na przyjęcie pliku o tym rozmiarze. Spróbuj udostępnić coś o mniejszym rozmiarze.',
|
||||
'image_upload_error' => 'Wystąpił błąd podczas udostępniania obrazka',
|
||||
'server_upload_limit' => 'Serwer nie pozwala na przyjęcie pliku o tym rozmiarze. Spróbuj przesłać plik o mniejszym rozmiarze.',
|
||||
'uploaded' => 'Serwer nie pozwala na przyjęcie pliku o tym rozmiarze. Spróbuj przesłać plik o mniejszym rozmiarze.',
|
||||
'image_upload_error' => 'Wystąpił błąd podczas przesyłania obrazka',
|
||||
'image_upload_type_error' => 'Typ przesłanego obrazka jest nieprwidłowy.',
|
||||
'file_upload_timeout' => 'Przesyłanie pliku przekroczyło limit czasu.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Niezgodność stron podczas aktualizacji załącznika',
|
||||
'attachment_page_mismatch' => 'Niezgodność strony podczas aktualizacji załącznika',
|
||||
'attachment_not_found' => 'Nie znaleziono załącznika',
|
||||
|
||||
// Pages
|
||||
'page_draft_autosave_fail' => 'Zapis szkicu nie powiódł się. Upewnij się że posiadasz połączenie z internetem.',
|
||||
'page_draft_autosave_fail' => 'Zapis wersji roboczej nie powiódł się. Upewnij się, że posiadasz połączenie z internetem.',
|
||||
'page_custom_home_deletion' => 'Nie można usunąć strony, jeśli jest ona ustawiona jako strona główna',
|
||||
|
||||
// Entities
|
||||
'entity_not_found' => 'Encja nie została odnaleziona',
|
||||
'book_not_found' => 'Księga nie została odnaleziona',
|
||||
'page_not_found' => 'Strona nie została odnaleziona',
|
||||
'chapter_not_found' => 'Rozdział nie został odnaleziony',
|
||||
'selected_book_not_found' => 'Wybrana księga nie została odnaleziona',
|
||||
'selected_book_chapter_not_found' => 'Wybrana księga lub rozdział nie zostały odnalezione',
|
||||
'guests_cannot_save_drafts' => 'Goście nie mogą zapisywać szkiców',
|
||||
'entity_not_found' => 'Nie znaleziono obiektu',
|
||||
'bookshelf_not_found' => 'Nie znaleziono półki',
|
||||
'book_not_found' => 'Nie znaleziono podręcznika',
|
||||
'page_not_found' => 'Nie znaleziono strony',
|
||||
'chapter_not_found' => 'Nie znaleziono rozdziału',
|
||||
'selected_book_not_found' => 'Wybrany podręcznik nie został znaleziony',
|
||||
'selected_book_chapter_not_found' => 'Wybrany podręcznik lub rozdział nie został znaleziony',
|
||||
'guests_cannot_save_drafts' => 'Goście nie mogą zapisywać wersji roboczych',
|
||||
|
||||
// Users
|
||||
'users_cannot_delete_only_admin' => 'Nie możesz usunąć jedynego administratora',
|
||||
@@ -58,13 +65,20 @@ return [
|
||||
// Roles
|
||||
'role_cannot_be_edited' => 'Ta rola nie może być edytowana',
|
||||
'role_system_cannot_be_deleted' => 'Ta rola jest rolą systemową i nie może zostać usunięta',
|
||||
'role_registration_default_cannot_delete' => 'Ta rola nie może zostać usunięta jeśli jest ustawiona jako domyślna rola użytkownika',
|
||||
|
||||
'role_registration_default_cannot_delete' => 'Ta rola nie może zostać usunięta, dopóki jest ustawiona jako domyślna rola użytkownika',
|
||||
|
||||
// Comments
|
||||
'comment_list' => 'Wystąpił błąd podczas pobierania komentarzy.',
|
||||
'cannot_add_comment_to_draft' => 'Nie możesz dodawać komentarzy do wersji roboczej.',
|
||||
'comment_add' => 'Wystąpił błąd podczas dodwania / aktualizaowania komentarza.',
|
||||
'comment_delete' => 'Wystąpił błąd podczas usuwania komentarza.',
|
||||
'empty_comment' => 'Nie można dodać pustego komentarza.',
|
||||
|
||||
// Error pages
|
||||
'404_page_not_found' => 'Strona nie została odnaleziona',
|
||||
'sorry_page_not_found' => 'Przepraszamy, ale strona której szukasz nie została odnaleziona.',
|
||||
'404_page_not_found' => 'Strona nie została znaleziona',
|
||||
'sorry_page_not_found' => 'Przepraszamy, ale strona której szukasz nie została znaleziona.',
|
||||
'return_home' => 'Powrót do strony głównej',
|
||||
'error_occurred' => 'Wystąpił błąd',
|
||||
'app_down' => ':appName jest aktualnie wyłączona',
|
||||
'back_soon' => 'Niedługo zostanie uruchomiona ponownie.',
|
||||
];
|
||||
];
|
||||
|
||||
@@ -14,7 +14,7 @@ return [
|
||||
*/
|
||||
|
||||
'password' => 'Hasło musi zawierać co najmniej 6 znaków i być zgodne z powtórzeniem.',
|
||||
'user' => "Nie znaleziono użytkownika o takim adresie email.",
|
||||
'user' => "Nie znaleziono użytkownika o takim adresie e-mail.",
|
||||
'token' => 'Ten token resetowania hasła jest nieprawidłowy.',
|
||||
'sent' => 'Wysłaliśmy Ci link do resetowania hasła!',
|
||||
'reset' => 'Twoje hasło zostało zresetowane!',
|
||||
|
||||
@@ -18,21 +18,24 @@ return [
|
||||
|
||||
'app_settings' => 'Ustawienia aplikacji',
|
||||
'app_name' => 'Nazwa aplikacji',
|
||||
'app_name_desc' => 'Ta nazwa jest wyświetlana w nagłówku i emailach.',
|
||||
'app_name_desc' => 'Ta nazwa jest wyświetlana w nagłówku i e-mailach.',
|
||||
'app_name_header' => 'Pokazać nazwę aplikacji w nagłówku?',
|
||||
'app_public_viewing' => 'Zezwolić na publiczne przeglądanie?',
|
||||
'app_secure_images' => 'Odblokować wyższe bezpieczeństwo obrazków?',
|
||||
'app_secure_images_desc' => 'Ze względów wydajnościowych wszystkie obrazki są publiczne. Ta opcja dodaje dodatkowy, trudny do zgadnienia losowy ciąg na początku nazwy obrazka. Upewnij się że indeksowanie ścieżek jest zablokowane, by uniknąć problemów z dostępem do obrazka.',
|
||||
'app_secure_images' => 'Włączyć przesyłanie obrazów o wyższym poziomie bezpieczeństwa?',
|
||||
'app_secure_images_desc' => 'Ze względów wydajnościowych wszystkie obrazki są publiczne. Ta opcja dodaje dodatkowy, trudny do odgadnięcia losowy ciąg na początku nazwy obrazka. Upewnij się że indeksowanie katalogów jest zablokowane, aby uniemożliwić łatwy dostęp do obrazków.',
|
||||
'app_editor' => 'Edytor strony',
|
||||
'app_editor_desc' => 'Wybierz edytor używany przez użytkowników do edycji zawartości.',
|
||||
'app_custom_html' => 'Własna zawartość tagu <head>',
|
||||
'app_custom_html_desc' => 'Zawartość dodana tutaj zostanie dołączona do sekcji <head> każdej strony. Przydatne przy nadpisywaniu styli lub dodawaniu analityki.',
|
||||
'app_custom_html' => 'Własna zawartość w tagu <head>',
|
||||
'app_custom_html_desc' => 'Zawartość dodana tutaj zostanie dołączona na dole sekcji <head> każdej strony. Przydatne przy nadpisywaniu styli lub dodawaniu analityki.',
|
||||
'app_logo' => 'Logo aplikacji',
|
||||
'app_logo_desc' => 'Ten obrazek powinien mieć nie więcej niż 43px w pionie. <br>Większe obrazki będą skalowane w dół.',
|
||||
'app_logo_desc' => 'Ten obrazek powinien mieć nie więcej niż 43px wysokosci. <br>Większe obrazki zostaną zmniejszone.',
|
||||
'app_primary_color' => 'Podstawowy kolor aplikacji',
|
||||
'app_primary_color_desc' => 'To powinna być wartość HEX. <br>Zostaw to pole puste, by powrócić do podstawowego koloru.',
|
||||
'app_homepage' => 'Strona główna',
|
||||
'app_homepage_desc' => 'Wybierz widok, który będzie wyświetlany na stronie głównej zamiast w widoku domyślnego. Uprawnienia dostępowe są ignorowane dla wybranych stron.',
|
||||
'app_homepage_select' => 'Wybierz stronę',
|
||||
'app_disable_comments' => 'Wyłącz komentarze',
|
||||
'app_disable_comments_desc' => 'Wyłącz komentarze na wszystkich stronach w aplikacji. Istniejące komentarze nie są pokazywane.',
|
||||
'app_disable_comments_desc' => 'Wyłącz komentarze na wszystkich stronach w aplikacji. Istniejące komentarze nie będą pokazywane.',
|
||||
|
||||
/**
|
||||
* Registration settings
|
||||
@@ -41,18 +44,31 @@ return [
|
||||
'reg_settings' => 'Ustawienia rejestracji',
|
||||
'reg_allow' => 'Zezwolić na rejestrację?',
|
||||
'reg_default_role' => 'Domyślna rola użytkownika po rejestracji',
|
||||
'reg_confirm_email' => 'Wymagać potwierdzenia adresu email?',
|
||||
'reg_confirm_email_desc' => 'Jeśli restrykcje domenowe zostały uzupełnione potwierdzenie adresu stanie się konieczne, a poniższa wartośc zostanie zignorowana.',
|
||||
'reg_confirm_restrict_domain' => 'Restrykcje domenowe dot. adresu email',
|
||||
'reg_confirm_restrict_domain_desc' => 'Wprowadź listę domen adresów email rozdzieloną przecinkami, którym chciałbyś zezwolić na rejestrację. Wymusi to konieczność potwierdzenia adresu email przez użytkownika przed uzyskaniem dostępu do aplikacji. <br> Pamiętaj, że użytkownicy będą mogli zmienić adres email po rejestracji.',
|
||||
'reg_confirm_email' => 'Wymagać potwierdzenia adresu e-mail?',
|
||||
'reg_confirm_email_desc' => 'Jeśli restrykcje domenowe zostały ustawione, potwierdzenie adresu stanie się konieczne, a poniższa wartośc zostanie zignorowana.',
|
||||
'reg_confirm_restrict_domain' => 'Restrykcje domenowe dot. adresu e-mail',
|
||||
'reg_confirm_restrict_domain_desc' => 'Wprowadź listę domen adresów e-mail, rozdzieloną przecinkami, którym chciałbyś zezwolić na rejestrację. Wymusi to konieczność potwierdzenia adresu e-mail przez użytkownika przed uzyskaniem dostępu do aplikacji. <br> Pamiętaj, że użytkownicy będą mogli zmienić adres e-mail po rejestracji.',
|
||||
'reg_confirm_restrict_domain_placeholder' => 'Brak restrykcji',
|
||||
|
||||
/**
|
||||
* Maintenance settings
|
||||
*/
|
||||
|
||||
'maint' => 'Konserwacja',
|
||||
'maint_image_cleanup' => 'Czyszczenie obrazków',
|
||||
'maint_image_cleanup_desc' => "Skanuje zawartość strony i poprzednie wersje, aby sprawdzić, które obrazy i rysunki są aktualnie używane, a które obrazy są zbędne. Przed uruchomieniem tej opcji należy utworzyć pełną kopię zapasową bazy danych i obrazków.",
|
||||
'maint_image_cleanup_ignore_revisions' => 'Ignoruje obrazki w poprzednich wersjach',
|
||||
'maint_image_cleanup_run' => 'Uruchom czyszczenie',
|
||||
'maint_image_cleanup_warning' => 'Znaleziono :count potencjalnie niepotrzebnych obrazków. Czy na pewno chcesz je usunąć?',
|
||||
'maint_image_cleanup_success' => ':count potencjalnie nieużywane obrazki zostały znalezione i usunięte!',
|
||||
'maint_image_cleanup_nothing_found' => 'Nie znaleziono żadnych nieużywanych obrazków. Nic nie zostało usunięte!',
|
||||
|
||||
/**
|
||||
* Role settings
|
||||
*/
|
||||
|
||||
'roles' => 'Role',
|
||||
'role_user_roles' => 'Role użytkownika',
|
||||
'role_user_roles' => 'Role użytkowników',
|
||||
'role_create' => 'Utwórz nową rolę',
|
||||
'role_create_success' => 'Rola utworzona pomyślnie',
|
||||
'role_delete' => 'Usuń rolę',
|
||||
@@ -65,14 +81,16 @@ return [
|
||||
'role_details' => 'Szczegóły roli',
|
||||
'role_name' => 'Nazwa roli',
|
||||
'role_desc' => 'Krótki opis roli',
|
||||
'role_external_auth_id' => 'Zewnętrzne identyfikatory uwierzytelniania',
|
||||
'role_system' => 'Uprawnienia systemowe',
|
||||
'role_manage_users' => 'Zarządzanie użytkownikami',
|
||||
'role_manage_roles' => 'Zarządzanie rolami i uprawnieniami ról',
|
||||
'role_manage_entity_permissions' => 'Zarządzanie uprawnieniami ksiąg, rozdziałów i stron',
|
||||
'role_manage_own_entity_permissions' => 'Zarządzanie uprawnieniami własnych ksiąg, rozdziałów i stron',
|
||||
'role_manage_entity_permissions' => 'Zarządzanie uprawnieniami podręczników, rozdziałów i stron',
|
||||
'role_manage_own_entity_permissions' => 'Zarządzanie uprawnieniami własnych podręczników, rozdziałów i stron',
|
||||
'role_manage_settings' => 'Zarządzanie ustawieniami aplikacji',
|
||||
'role_asset' => 'Zarządzanie zasobami',
|
||||
'role_asset_desc' => 'Te ustawienia kontrolują zarządzanie zasobami systemu. Uprawnienia ksiąg, rozdziałów i stron nadpisują te ustawienia.',
|
||||
'role_asset_desc' => 'Te ustawienia kontrolują zarządzanie zasobami systemu. Uprawnienia podręczników, rozdziałów i stron nadpisują te ustawienia.',
|
||||
'role_asset_admins' => 'Administratorzy mają automatycznie dostęp do wszystkich treści, ale te opcję mogą być pokazywać lub ukrywać opcje interfejsu użytkownika.',
|
||||
'role_all' => 'Wszyscy',
|
||||
'role_own' => 'Własne',
|
||||
'role_controlled_by_asset' => 'Kontrolowane przez zasób, do którego zostały udostępnione',
|
||||
@@ -90,7 +108,7 @@ return [
|
||||
'users_add_new' => 'Dodaj użytkownika',
|
||||
'users_search' => 'Wyszukaj użytkownika',
|
||||
'users_role' => 'Role użytkownika',
|
||||
'users_external_auth_id' => 'Zewnętrzne ID autentykacji',
|
||||
'users_external_auth_id' => 'Zewnętrzne identyfikatory autentykacji',
|
||||
'users_password_warning' => 'Wypełnij poniżej tylko jeśli chcesz zmienić swoje hasło:',
|
||||
'users_system_public' => 'Ten użytkownik reprezentuje każdego gościa odwiedzającego tę aplikację. Nie można się na niego zalogować, lecz jest przyznawany automatycznie.',
|
||||
'users_delete' => 'Usuń użytkownika',
|
||||
@@ -102,10 +120,10 @@ return [
|
||||
'users_edit_profile' => 'Edytuj profil',
|
||||
'users_edit_success' => 'Użytkownik zaktualizowany pomyśłnie',
|
||||
'users_avatar' => 'Avatar użytkownika',
|
||||
'users_avatar_desc' => 'Ten obrazek powinien mieć 25px x 256px.',
|
||||
'users_avatar_desc' => 'Ten obrazek powinien posiadać wymiary 256x256px.',
|
||||
'users_preferred_language' => 'Preferowany język',
|
||||
'users_social_accounts' => 'Konta społecznościowe',
|
||||
'users_social_accounts_info' => 'Tutaj możesz połączyć kilka kont społecznościowych w celu łatwiejszego i szybszego logowania.',
|
||||
'users_social_accounts_info' => 'Tutaj możesz połączyć kilka kont społecznościowych w celu łatwiejszego i szybszego logowania. Odłączenie konta tutaj nie autoryzowało dostępu. Odwołaj dostęp z ustawień profilu na podłączonym koncie społecznościowym.',
|
||||
'users_social_connect' => 'Podłącz konto',
|
||||
'users_social_disconnect' => 'Odłącz konto',
|
||||
'users_social_connected' => ':socialAccount zostało dodane do Twojego profilu.',
|
||||
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => 'O servidor não permite o upload de arquivos com esse tamanho. Por favor, tente fazer o upload de arquivos de menor tamanho.',
|
||||
'image_upload_error' => 'Um erro aconteceu enquanto o servidor tentava efetuar o upload da imagem',
|
||||
'image_upload_type_error' => 'O tipo de imagem que está sendo feito upload é inválido',
|
||||
'file_upload_timeout' => 'O upload do arquivo expirou.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Erro de \'Page mismatch\' durante a atualização do anexo',
|
||||
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => 'Сервер не позволяет загружать файлы такого размера. Пожалуйста, попробуйте файл меньше.',
|
||||
'image_upload_error' => 'Произошла ошибка при загрузке изображения.',
|
||||
'image_upload_type_error' => 'Неправильный тип загружаемого изображения',
|
||||
'file_upload_timeout' => 'Выгрузка файла закончилась.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Несоответствие страницы во время обновления вложения',
|
||||
|
||||
@@ -35,6 +35,7 @@ return [
|
||||
'cannot_create_thumbs' => 'Server nedokáže vytvoriť náhľady. Skontrolujte prosím, či máte nainštalované GD rozšírenie PHP.',
|
||||
'server_upload_limit' => 'Server nedovoľuje nahrávanie súborov s takouto veľkosťou. Skúste prosím menší súbor.',
|
||||
'image_upload_error' => 'Pri nahrávaní obrázka nastala chyba',
|
||||
'file_upload_timeout' => 'Nahrávanie súboru vypršalo.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Page mismatch during attachment update',
|
||||
|
||||
@@ -38,6 +38,7 @@ return [
|
||||
'uploaded' => 'Servern tillåter inte så här stora filer. Prova en mindre fil.',
|
||||
'image_upload_error' => 'Ett fel inträffade vid uppladdningen',
|
||||
'image_upload_type_error' => 'Filtypen du försöker ladda upp är ogiltig',
|
||||
'file_upload_timeout' => 'Filuppladdningen har tagits ut.',
|
||||
|
||||
// Attachments
|
||||
'attachment_page_mismatch' => 'Fel i sidmatchning vid uppdatering av bilaga',
|
||||
|
||||
50
resources/lang/uk/activities.php
Normal file
50
resources/lang/uk/activities.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Activity text strings.
|
||||
* Is used for all the text within activity logs & notifications.
|
||||
* Текстові рядки активності.
|
||||
* Використовується для всього тексту в журналах активності та сповіщеннях.
|
||||
*/
|
||||
return [
|
||||
|
||||
// Pages
|
||||
'page_create' => 'створив сторінку',
|
||||
'page_create_notification' => 'Сторінка успішно створена',
|
||||
'page_update' => 'оновив сторінку',
|
||||
'page_update_notification' => 'Сторінка успішно оновлена',
|
||||
'page_delete' => 'видалив сторінку',
|
||||
'page_delete_notification' => 'Сторінка успішно видалена',
|
||||
'page_restore' => 'відновив сторінку',
|
||||
'page_restore_notification' => 'Сторінка успішно відновлена',
|
||||
'page_move' => 'перемістив сторінку',
|
||||
|
||||
// Chapters
|
||||
'chapter_create' => 'створив розділ',
|
||||
'chapter_create_notification' => 'Розділ успішно створено',
|
||||
'chapter_update' => 'оновив розділ',
|
||||
'chapter_update_notification' => 'Розділ успішно оновлено',
|
||||
'chapter_delete' => 'видалив розділ',
|
||||
'chapter_delete_notification' => 'Розділ успішно видалено',
|
||||
'chapter_move' => 'перемістив розділ',
|
||||
|
||||
// Books
|
||||
'book_create' => 'створив книгу',
|
||||
'book_create_notification' => 'Книгу успішно створено',
|
||||
'book_update' => 'оновив книгу',
|
||||
'book_update_notification' => 'Книгу успішно оновлено',
|
||||
'book_delete' => 'видалив книгу',
|
||||
'book_delete_notification' => 'Книгу успішно видалено',
|
||||
'book_sort' => 'sorted книгу',
|
||||
'book_sort_notification' => 'Книгу успішно відновлено',
|
||||
|
||||
// Bookshelves
|
||||
'bookshelf_create' => 'створено книжкову полицю',
|
||||
'bookshelf_create_notification' => 'Книжкову полицю успішно створено',
|
||||
'bookshelf_update' => 'оновив книжкову полицю',
|
||||
'bookshelf_update_notification' => 'Книжкову полицю успішно оновлено',
|
||||
'bookshelf_delete' => 'видалив книжкову полицю',
|
||||
'bookshelf_delete_notification' => 'Книжкову полицю успішно видалено',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'прокоментував',
|
||||
];
|
||||
67
resources/lang/uk/auth.php
Normal file
67
resources/lang/uk/auth.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* Authentication Language Lines
|
||||
* The following language lines are used during authentication for various
|
||||
* messages that we need to display to the user.
|
||||
* Під час автентифікації використовуються наступні лінії мов для різних повідомлень
|
||||
* які нам потрібно показати користувачеві.
|
||||
*/
|
||||
return [
|
||||
|
||||
'failed' => 'Цей обліковий запис не знайдено.',
|
||||
'throttle' => 'Забагато спроб входу в систему. Будь ласка, спробуйте ще раз через :seconds секунд.',
|
||||
|
||||
// Login & Register
|
||||
'sign_up' => 'Реєстрація',
|
||||
'log_in' => 'Увійти',
|
||||
'log_in_with' => 'Увійти з :socialDriver',
|
||||
'sign_up_with' => 'Зареєструватись з :socialDriver',
|
||||
'logout' => 'Вихід',
|
||||
|
||||
'name' => 'Ім’я',
|
||||
'username' => 'Логін',
|
||||
'email' => 'Email',
|
||||
'password' => 'Пароль',
|
||||
'password_confirm' => 'Підтвердження пароля',
|
||||
'password_hint' => 'Має бути більше 5 символів',
|
||||
'forgot_password' => 'Забули пароль?',
|
||||
'remember_me' => 'Запам’ятати мене',
|
||||
'ldap_email_hint' => 'Введіть email для цього облікового запису.',
|
||||
'create_account' => 'Створити обліковий запис',
|
||||
'social_login' => 'Вхід через соціальну мережу',
|
||||
'social_registration' => 'Реєстрація через соціальну мережу',
|
||||
'social_registration_text' => 'Реєстрація і вхід через інший сервіс',
|
||||
|
||||
'register_thanks' => 'Дякуємо за реєстрацію!',
|
||||
'register_confirm' => 'Будь ласка, перевірте свою електронну пошту та натисніть кнопку підтвердження, щоб отримати доступ до :appName.',
|
||||
'registrations_disabled' => 'Реєстрацію вимкнено',
|
||||
'registration_email_domain_invalid' => 'Цей домен електронної пошти не має доступу до реєстрації',
|
||||
'register_success' => 'Дякуємо за реєстрацію! Ви зареєстровані та ввійшли в систему.',
|
||||
|
||||
|
||||
// Password Reset
|
||||
'reset_password' => 'Скинути пароль',
|
||||
'reset_password_send_instructions' => 'Введіть адресу електронної пошти нижче, і вам буде надіслано електронне повідомлення з посиланням на зміну пароля.',
|
||||
'reset_password_send_button' => 'Надіслати посилання для скидання',
|
||||
'reset_password_sent_success' => 'Посилання для скидання пароля було надіслано на :email.',
|
||||
'reset_password_success' => 'Ваш пароль успішно скинуто.',
|
||||
'email_reset_subject' => 'Скинути ваш пароль :appName',
|
||||
'email_reset_text' => 'Ви отримали цей електронний лист, оскільки до нас надійшов запит на скидання пароля для вашого облікового запису.',
|
||||
'email_reset_not_requested' => 'Якщо ви не надсилали запит на скидання пароля, подальші дії не потрібні.',
|
||||
|
||||
|
||||
// Email Confirmation
|
||||
'email_confirm_subject' => 'Підтвердьте свою електронну пошту на :appName',
|
||||
'email_confirm_greeting' => 'Дякуємо, що приєдналися до :appName!',
|
||||
'email_confirm_text' => 'Будь ласка, підтвердьте свою адресу електронної пошти, натиснувши кнопку нижче:',
|
||||
'email_confirm_action' => 'Підтвердити Email',
|
||||
'email_confirm_send_error' => 'Необхідно підтвердження електронною поштою, але система не змогла надіслати електронний лист. Зверніться до адміністратора, щоб правильно налаштувати електронну пошту.',
|
||||
'email_confirm_success' => 'Ваш електронну адресу підтверджено!',
|
||||
'email_confirm_resent' => 'Лист з підтвердженням надіслано, перевірте свою пошту.',
|
||||
|
||||
'email_not_confirmed' => 'Адреса Email не підтверджена',
|
||||
'email_not_confirmed_text' => 'Ваша електронна адреса ще не підтверджена.',
|
||||
'email_not_confirmed_click_link' => 'Будь-ласка, натисніть на посилання в електронному листі, яке було надіслано після реєстрації.',
|
||||
'email_not_confirmed_resend' => 'Якщо ви не можете знайти електронний лист, ви можете повторно надіслати підтвердження електронною поштою, на формі нижче.',
|
||||
'email_not_confirmed_resend_button' => 'Повторне підтвердження електронної пошти',
|
||||
];
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user