diff --git a/.travis.yml b/.travis.yml index 0ad753ced..909e3e1f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ dist: trusty -sudo: required +sudo: false language: php php: - 7.0 @@ -8,15 +8,11 @@ cache: directories: - $HOME/.composer/cache -addons: - apt: - packages: - - mysql-server-5.6 - - mysql-client-core-5.6 - - mysql-client-5.6 - before_script: - mysql -u root -e 'create database `bookstack-test`;' + - mysql -u root -e "CREATE USER 'bookstack-test'@'localhost' IDENTIFIED BY 'bookstack-test';" + - mysql -u root -e "GRANT ALL ON \`bookstack-test\`.* TO 'bookstack-test'@'localhost';" + - mysql -u root -e "FLUSH PRIVILEGES;" - phpenv config-rm xdebug.ini - composer dump-autoload --no-interaction - composer install --prefer-dist --no-interaction @@ -25,5 +21,8 @@ before_script: - php artisan migrate --force -n --database=mysql_testing - php artisan db:seed --force -n --class=DummyContentSeeder --database=mysql_testing +after_failure: + - cat storage/logs/laravel.log + script: - phpunit \ No newline at end of file diff --git a/app/Console/Commands/ClearActivity.php b/app/Console/Commands/ClearActivity.php new file mode 100644 index 000000000..66babd9a9 --- /dev/null +++ b/app/Console/Commands/ClearActivity.php @@ -0,0 +1,47 @@ +activity = $activity; + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $this->activity->newQuery()->truncate(); + $this->comment('System activity cleared'); + } +} diff --git a/app/Console/Commands/ClearRevisions.php b/app/Console/Commands/ClearRevisions.php new file mode 100644 index 000000000..f0c8a5e85 --- /dev/null +++ b/app/Console/Commands/ClearRevisions.php @@ -0,0 +1,50 @@ +pageRevision = $pageRevision; + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $deleteTypes = $this->option('all') ? ['version', 'update_draft'] : ['version']; + $this->pageRevision->newQuery()->whereIn('type', $deleteTypes)->delete(); + $this->comment('Revisions deleted'); + } +} diff --git a/app/Console/Commands/ResetViews.php b/app/Console/Commands/ClearViews.php similarity index 74% rename from app/Console/Commands/ResetViews.php rename to app/Console/Commands/ClearViews.php index 3a3903ff8..678c64d33 100644 --- a/app/Console/Commands/ResetViews.php +++ b/app/Console/Commands/ClearViews.php @@ -4,21 +4,21 @@ namespace BookStack\Console\Commands; use Illuminate\Console\Command; -class ResetViews extends Command +class ClearViews extends Command { /** * The name and signature of the console command. * * @var string */ - protected $signature = 'views:reset'; + protected $signature = 'bookstack:clear-views'; /** * The console command description. * * @var string */ - protected $description = 'Reset all view-counts for all entities.'; + protected $description = 'Clear all view-counts for all entities.'; /** * Create a new command instance. @@ -37,5 +37,6 @@ class ResetViews extends Command public function handle() { \Views::resetAll(); + $this->comment('Views cleared'); } } diff --git a/app/Console/Commands/Inspire.php b/app/Console/Commands/Inspire.php deleted file mode 100644 index 4b115cfb9..000000000 --- a/app/Console/Commands/Inspire.php +++ /dev/null @@ -1,33 +0,0 @@ -comment(PHP_EOL.Inspiring::quote().PHP_EOL); - } -} diff --git a/app/Console/Commands/RegeneratePermissions.php b/app/Console/Commands/RegeneratePermissions.php index 60d5f4e45..966ee4a82 100644 --- a/app/Console/Commands/RegeneratePermissions.php +++ b/app/Console/Commands/RegeneratePermissions.php @@ -12,7 +12,7 @@ class RegeneratePermissions extends Command * * @var string */ - protected $signature = 'permissions:regen'; + protected $signature = 'bookstack:regenerate-permissions'; /** * The console command description. @@ -47,5 +47,6 @@ class RegeneratePermissions extends Command public function handle() { $this->permissionService->buildJointPermissions(); + $this->comment('Permissions regenerated'); } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index b725c9e21..0112e72ca 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -13,8 +13,9 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - \BookStack\Console\Commands\Inspire::class, - \BookStack\Console\Commands\ResetViews::class, + \BookStack\Console\Commands\ClearViews::class, + \BookStack\Console\Commands\ClearActivity::class, + \BookStack\Console\Commands\ClearRevisions::class, \BookStack\Console\Commands\RegeneratePermissions::class, ]; @@ -26,7 +27,6 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule) { - $schedule->command('inspire') - ->hourly(); + // } } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index c64f0cd1f..5260eb6cd 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,9 +3,9 @@ namespace BookStack\Exceptions; use Exception; -use Illuminate\Contracts\Validation\ValidationException; +use Illuminate\Auth\AuthenticationException; +use Illuminate\Validation\ValidationException; use Illuminate\Database\Eloquent\ModelNotFoundException; -use PhpSpec\Exception\Example\ErrorException; use Symfony\Component\HttpKernel\Exception\HttpException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Auth\Access\AuthorizationException; diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index 408192ff9..fe9ece5b2 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -3,6 +3,7 @@ use Activity; use BookStack\Repos\EntityRepo; use BookStack\Repos\UserRepo; +use BookStack\Services\ExportService; use Illuminate\Http\Request; use Illuminate\Http\Response; use Views; @@ -12,16 +13,19 @@ class BookController extends Controller protected $entityRepo; protected $userRepo; + protected $exportService; /** * BookController constructor. * @param EntityRepo $entityRepo * @param UserRepo $userRepo + * @param ExportService $exportService */ - public function __construct(EntityRepo $entityRepo, UserRepo $userRepo) + public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService) { $this->entityRepo = $entityRepo; $this->userRepo = $userRepo; + $this->exportService = $exportService; parent::__construct(); } @@ -258,4 +262,49 @@ class BookController extends Controller session()->flash('success', trans('entities.books_permissions_updated')); return redirect($book->getUrl()); } + + /** + * Export a book as a PDF file. + * @param string $bookSlug + * @return mixed + */ + public function exportPdf($bookSlug) + { + $book = $this->entityRepo->getBySlug('book', $bookSlug); + $pdfContent = $this->exportService->bookToPdf($book); + return response()->make($pdfContent, 200, [ + 'Content-Type' => 'application/octet-stream', + 'Content-Disposition' => 'attachment; filename="' . $bookSlug . '.pdf' + ]); + } + + /** + * Export a book as a contained HTML file. + * @param string $bookSlug + * @return mixed + */ + public function exportHtml($bookSlug) + { + $book = $this->entityRepo->getBySlug('book', $bookSlug); + $htmlContent = $this->exportService->bookToContainedHtml($book); + return response()->make($htmlContent, 200, [ + 'Content-Type' => 'application/octet-stream', + 'Content-Disposition' => 'attachment; filename="' . $bookSlug . '.html' + ]); + } + + /** + * Export a book as a plain text file. + * @param $bookSlug + * @return mixed + */ + public function exportPlainText($bookSlug) + { + $book = $this->entityRepo->getBySlug('book', $bookSlug); + $htmlContent = $this->exportService->bookToPlainText($book); + return response()->make($htmlContent, 200, [ + 'Content-Type' => 'application/octet-stream', + 'Content-Disposition' => 'attachment; filename="' . $bookSlug . '.txt' + ]); + } } diff --git a/app/Http/Controllers/ChapterController.php b/app/Http/Controllers/ChapterController.php index 1760ee5c6..ceeb2a3ef 100644 --- a/app/Http/Controllers/ChapterController.php +++ b/app/Http/Controllers/ChapterController.php @@ -3,6 +3,7 @@ use Activity; use BookStack\Repos\EntityRepo; use BookStack\Repos\UserRepo; +use BookStack\Services\ExportService; use Illuminate\Http\Request; use Illuminate\Http\Response; use Views; @@ -12,16 +13,19 @@ class ChapterController extends Controller protected $userRepo; protected $entityRepo; + protected $exportService; /** * ChapterController constructor. * @param EntityRepo $entityRepo * @param UserRepo $userRepo + * @param ExportService $exportService */ - public function __construct(EntityRepo $entityRepo, UserRepo $userRepo) + public function __construct(EntityRepo $entityRepo, UserRepo $userRepo, ExportService $exportService) { $this->entityRepo = $entityRepo; $this->userRepo = $userRepo; + $this->exportService = $exportService; parent::__construct(); } @@ -236,4 +240,52 @@ class ChapterController extends Controller session()->flash('success', trans('entities.chapters_permissions_success')); return redirect($chapter->getUrl()); } + + /** + * Exports a chapter to pdf . + * @param string $bookSlug + * @param string $chapterSlug + * @return \Illuminate\Http\Response + */ + public function exportPdf($bookSlug, $chapterSlug) + { + $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug); + $pdfContent = $this->exportService->chapterToPdf($chapter); + return response()->make($pdfContent, 200, [ + 'Content-Type' => 'application/octet-stream', + 'Content-Disposition' => 'attachment; filename="' . $chapterSlug . '.pdf' + ]); + } + + /** + * Export a chapter to a self-contained HTML file. + * @param string $bookSlug + * @param string $chapterSlug + * @return \Illuminate\Http\Response + */ + public function exportHtml($bookSlug, $chapterSlug) + { + $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug); + $containedHtml = $this->exportService->chapterToContainedHtml($chapter); + return response()->make($containedHtml, 200, [ + 'Content-Type' => 'application/octet-stream', + 'Content-Disposition' => 'attachment; filename="' . $chapterSlug . '.html' + ]); + } + + /** + * Export a chapter to a simple plaintext .txt file. + * @param string $bookSlug + * @param string $chapterSlug + * @return \Illuminate\Http\Response + */ + public function exportPlainText($bookSlug, $chapterSlug) + { + $chapter = $this->entityRepo->getBySlug('chapter', $chapterSlug, $bookSlug); + $containedHtml = $this->exportService->chapterToPlainText($chapter); + return response()->make($containedHtml, 200, [ + 'Content-Type' => 'application/octet-stream', + 'Content-Disposition' => 'attachment; filename="' . $chapterSlug . '.txt' + ]); + } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 2b6c88fe0..733d5416b 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -4,7 +4,7 @@ namespace BookStack\Http\Controllers; use BookStack\Ownable; use Illuminate\Foundation\Bus\DispatchesJobs; -use Illuminate\Http\Exception\HttpResponseException; +use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Http\Request; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php index 4ed10d61e..c97597bc4 100644 --- a/app/Http/Controllers/PageController.php +++ b/app/Http/Controllers/PageController.php @@ -369,10 +369,13 @@ class PageController extends Controller public function showRevision($bookSlug, $pageSlug, $revisionId) { $page = $this->entityRepo->getBySlug('page', $pageSlug, $bookSlug); - $revision = $this->entityRepo->getById('page_revision', $revisionId, false); + $revision = $page->revisions()->where('id', '=', $revisionId)->first(); + if ($revision === null) { + abort(404); + } $page->fill($revision->toArray()); - $this->setPageTitle(trans('entities.pages_revision_named', ['pageName'=>$page->getShortName()])); + $this->setPageTitle(trans('entities.pages_revision_named', ['pageName' => $page->getShortName()])); return view('pages/revision', [ 'page' => $page, @@ -390,7 +393,10 @@ class PageController extends Controller public function showRevisionChanges($bookSlug, $pageSlug, $revisionId) { $page = $this->entityRepo->getBySlug('page', $pageSlug, $bookSlug); - $revision = $this->entityRepo->getById('page_revision', $revisionId); + $revision = $page->revisions()->where('id', '=', $revisionId)->first(); + if ($revision === null) { + abort(404); + } $prev = $revision->getPrevious(); $prevContent = ($prev === null) ? '' : $prev->html; @@ -423,7 +429,7 @@ class PageController extends Controller } /** - * Exports a page to pdf format using barryvdh/laravel-dompdf wrapper. + * Exports a page to a PDF. * https://github.com/barryvdh/laravel-dompdf * @param string $bookSlug * @param string $pageSlug @@ -433,7 +439,6 @@ class PageController extends Controller { $page = $this->entityRepo->getBySlug('page', $pageSlug, $bookSlug); $pdfContent = $this->exportService->pageToPdf($page); -// return $pdfContent; return response()->make($pdfContent, 200, [ 'Content-Type' => 'application/octet-stream', 'Content-Disposition' => 'attachment; filename="' . $pageSlug . '.pdf' diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 40a1eef3d..49cc15dd6 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -1,5 +1,7 @@ getMimeType(), $imageMimes); }); + + \Blade::directive('icon', function($expression) { + return ""; + }); } /** @@ -26,6 +32,8 @@ class AppServiceProvider extends ServiceProvider */ public function register() { - // + $this->app->singleton(SettingService::class, function($app) { + return new SettingService($app->make(Setting::class), $app->make('Illuminate\Contracts\Cache\Repository')); + }); } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 3802f20c0..d82a560f9 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -4,6 +4,7 @@ namespace BookStack\Providers; use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; +use SocialiteProviders\Manager\SocialiteWasCalled; class EventServiceProvider extends ServiceProvider { @@ -13,8 +14,8 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ - 'BookStack\Events\SomeEvent' => [ - 'BookStack\Listeners\EventListener', + SocialiteWasCalled::class => [ + 'SocialiteProviders\Slack\SlackExtendSocialite@handle', ], ]; diff --git a/app/Providers/SocialiteServiceProvider.php b/app/Providers/SocialiteServiceProvider.php deleted file mode 100644 index f7fb30f81..000000000 --- a/app/Providers/SocialiteServiceProvider.php +++ /dev/null @@ -1,36 +0,0 @@ -app->bindShared('Laravel\Socialite\Contracts\Factory', function ($app) { - return new SocialiteManager($app); - }); - } - - /** - * Get the services provided by the provider. - * - * @return array - */ - public function provides() - { - return ['Laravel\Socialite\Contracts\Factory']; - } -} \ No newline at end of file diff --git a/app/Repos/EntityRepo.php b/app/Repos/EntityRepo.php index 8a8740d76..4db69137f 100644 --- a/app/Repos/EntityRepo.php +++ b/app/Repos/EntityRepo.php @@ -86,8 +86,7 @@ class EntityRepo $this->entities = [ 'page' => $this->page, 'chapter' => $this->chapter, - 'book' => $this->book, - 'page_revision' => $this->pageRevision + 'book' => $this->book ]; $this->viewService = $viewService; $this->permissionService = $permissionService; @@ -314,11 +313,12 @@ class EntityRepo * Loads the book slug onto child elements to prevent access database access for getting the slug. * @param Book $book * @param bool $filterDrafts + * @param bool $renderPages * @return mixed */ - public function getBookChildren(Book $book, $filterDrafts = false) + public function getBookChildren(Book $book, $filterDrafts = false, $renderPages = false) { - $q = $this->permissionService->bookChildrenQuery($book->id, $filterDrafts)->get(); + $q = $this->permissionService->bookChildrenQuery($book->id, $filterDrafts, $renderPages)->get(); $entities = []; $parents = []; $tree = []; @@ -326,6 +326,10 @@ class EntityRepo foreach ($q as $index => $rawEntity) { if ($rawEntity->entity_type === 'BookStack\\Page') { $entities[$index] = $this->page->newFromBuilder($rawEntity); + if ($renderPages) { + $entities[$index]->html = $rawEntity->description; + $entities[$index]->html = $this->renderPage($entities[$index]); + }; } else if ($rawEntity->entity_type === 'BookStack\\Chapter') { $entities[$index] = $this->chapter->newFromBuilder($rawEntity); $key = $entities[$index]->entity_type . ':' . $entities[$index]->id; diff --git a/app/Services/ExportService.php b/app/Services/ExportService.php index 880bc54ad..78cef41a4 100644 --- a/app/Services/ExportService.php +++ b/app/Services/ExportService.php @@ -1,5 +1,7 @@ $page, 'pageContent' => $this->entityRepo->renderPage($page), 'css' => $cssContent])->render(); + $pageHtml = view('pages/export', [ + 'page' => $page, + 'pageContent' => $this->entityRepo->renderPage($page) + ])->render(); return $this->containHtml($pageHtml); } /** - * Convert a page to a pdf file. + * Convert a chapter to a self-contained HTML file. + * @param Chapter $chapter + * @return mixed|string + */ + public function chapterToContainedHtml(Chapter $chapter) + { + $pages = $this->entityRepo->getChapterChildren($chapter); + $pages->each(function($page) { + $page->html = $this->entityRepo->renderPage($page); + }); + $html = view('chapters/export', [ + 'chapter' => $chapter, + 'pages' => $pages + ])->render(); + return $this->containHtml($html); + } + + /** + * Convert a book to a self-contained HTML file. + * @param Book $book + * @return mixed|string + */ + public function bookToContainedHtml(Book $book) + { + $bookTree = $this->entityRepo->getBookChildren($book, true, true); + $html = view('books/export', [ + 'book' => $book, + 'bookChildren' => $bookTree + ])->render(); + return $this->containHtml($html); + } + + /** + * Convert a page to a PDF file. * @param Page $page * @return mixed|string */ public function pageToPdf(Page $page) { - $cssContent = file_get_contents(public_path('/css/export-styles.css')); - $pageHtml = view('pages/pdf', ['page' => $page, 'pageContent' => $this->entityRepo->renderPage($page), 'css' => $cssContent])->render(); -// return $pageHtml; + $html = view('pages/pdf', [ + 'page' => $page, + 'pageContent' => $this->entityRepo->renderPage($page) + ])->render(); + return $this->htmlToPdf($html); + } + + /** + * Convert a chapter to a PDF file. + * @param Chapter $chapter + * @return mixed|string + */ + public function chapterToPdf(Chapter $chapter) + { + $pages = $this->entityRepo->getChapterChildren($chapter); + $pages->each(function($page) { + $page->html = $this->entityRepo->renderPage($page); + }); + $html = view('chapters/export', [ + 'chapter' => $chapter, + 'pages' => $pages + ])->render(); + return $this->htmlToPdf($html); + } + + /** + * Convert a book to a PDF file + * @param Book $book + * @return string + */ + public function bookToPdf(Book $book) + { + $bookTree = $this->entityRepo->getBookChildren($book, true, true); + $html = view('books/export', [ + 'book' => $book, + 'bookChildren' => $bookTree + ])->render(); + return $this->htmlToPdf($html); + } + + /** + * Convert normal webpage HTML to a PDF. + * @param $html + * @return string + */ + protected function htmlToPdf($html) + { + $containedHtml = $this->containHtml($html); $useWKHTML = config('snappy.pdf.binary') !== false; - $containedHtml = $this->containHtml($pageHtml); if ($useWKHTML) { $pdf = \SnappyPDF::loadHTML($containedHtml); + $pdf->setOption('print-media-type', true); } else { $pdf = \PDF::loadHTML($containedHtml); } @@ -123,6 +205,40 @@ class ExportService return $text; } + /** + * Convert a chapter into a plain text string. + * @param Chapter $chapter + * @return string + */ + public function chapterToPlainText(Chapter $chapter) + { + $text = $chapter->name . "\n\n"; + $text .= $chapter->description . "\n\n"; + foreach ($chapter->pages as $page) { + $text .= $this->pageToPlainText($page); + } + return $text; + } + + /** + * Convert a book into a plain text string. + * @param Book $book + * @return string + */ + public function bookToPlainText(Book $book) + { + $bookTree = $this->entityRepo->getBookChildren($book, true, true); + $text = $book->name . "\n\n"; + foreach ($bookTree as $bookChild) { + if ($bookChild->isA('chapter')) { + $text .= $this->chapterToPlainText($bookChild); + } else { + $text .= $this->pageToPlainText($bookChild); + } + } + return $text; + } + } diff --git a/app/Services/LdapService.php b/app/Services/LdapService.php index f8a4b88bb..71dc9c0e1 100644 --- a/app/Services/LdapService.php +++ b/app/Services/LdapService.php @@ -41,7 +41,8 @@ class LdapService // Find user $userFilter = $this->buildFilter($this->config['user_filter'], ['user' => $userName]); $baseDn = $this->config['base_dn']; - $users = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $userFilter, ['cn', 'uid', 'dn', 'mail']); + $emailAttr = $this->config['email_attribute']; + $users = $this->ldap->searchAndGetEntries($ldapConnection, $baseDn, $userFilter, ['cn', 'uid', 'dn', $emailAttr]); if ($users['count'] === 0) return null; $user = $users[0]; @@ -49,7 +50,7 @@ class LdapService 'uid' => (isset($user['uid'])) ? $user['uid'][0] : $user['dn'], 'name' => $user['cn'][0], 'dn' => $user['dn'], - 'email' => (isset($user['mail'])) ? $user['mail'][0] : null + 'email' => (isset($user[$emailAttr])) ? (is_array($user[$emailAttr]) ? $user[$emailAttr][0] : $user[$emailAttr]) : null ]; } diff --git a/app/Services/PermissionService.php b/app/Services/PermissionService.php index 72a810b6b..8b47e1246 100644 --- a/app/Services/PermissionService.php +++ b/app/Services/PermissionService.php @@ -474,11 +474,13 @@ class PermissionService /** * Get the children of a book in an efficient single query, Filtered by the permission system. * @param integer $book_id - * @param bool $filterDrafts + * @param bool $filterDrafts + * @param bool $fetchPageContent * @return \Illuminate\Database\Query\Builder */ - public function bookChildrenQuery($book_id, $filterDrafts = false) { - $pageSelect = $this->db->table('pages')->selectRaw("'BookStack\\\\Page' as entity_type, id, slug, name, text, '' as description, book_id, priority, chapter_id, draft")->where('book_id', '=', $book_id)->where(function($query) use ($filterDrafts) { + public function bookChildrenQuery($book_id, $filterDrafts = false, $fetchPageContent = false) { + $pageContentSelect = $fetchPageContent ? 'html' : "''"; + $pageSelect = $this->db->table('pages')->selectRaw("'BookStack\\\\Page' as entity_type, id, slug, name, text, {$pageContentSelect} as description, book_id, priority, chapter_id, draft")->where('book_id', '=', $book_id)->where(function($query) use ($filterDrafts) { $query->where('draft', '=', 0); if (!$filterDrafts) { $query->orWhere(function($query) { diff --git a/app/Services/SettingService.php b/app/Services/SettingService.php index 40094a513..18a7c0d1b 100644 --- a/app/Services/SettingService.php +++ b/app/Services/SettingService.php @@ -16,6 +16,7 @@ class SettingService protected $setting; protected $cache; + protected $localCache = []; protected $cachePrefix = 'setting-'; @@ -40,8 +41,12 @@ class SettingService public function get($key, $default = false) { if ($default === false) $default = config('setting-defaults.' . $key, false); + if (isset($this->localCache[$key])) return $this->localCache[$key]; + $value = $this->getValueFromStore($key, $default); - return $this->formatValue($value, $default); + $formatted = $this->formatValue($value, $default); + $this->localCache[$key] = $formatted; + return $formatted; } /** @@ -71,9 +76,8 @@ class SettingService // Check the cache $cacheKey = $this->cachePrefix . $key; - if ($this->cache->has($cacheKey)) { - return $this->cache->get($cacheKey); - } + $cacheVal = $this->cache->get($cacheKey, null); + if ($cacheVal !== null) return $cacheVal; // Check the database $settingObject = $this->getSettingObjectByKey($key); diff --git a/app/Services/SocialAuthService.php b/app/Services/SocialAuthService.php index 5edd4cad7..2c15e73ce 100644 --- a/app/Services/SocialAuthService.php +++ b/app/Services/SocialAuthService.php @@ -14,7 +14,7 @@ class SocialAuthService protected $socialite; protected $socialAccount; - protected $validSocialDrivers = ['google', 'github']; + protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter']; /** * SocialAuthService constructor. @@ -181,14 +181,24 @@ class SocialAuthService public function getActiveDrivers() { $activeDrivers = []; - foreach ($this->validSocialDrivers as $driverName) { - if ($this->checkDriverConfigured($driverName)) { - $activeDrivers[$driverName] = true; + foreach ($this->validSocialDrivers as $driverKey) { + if ($this->checkDriverConfigured($driverKey)) { + $activeDrivers[$driverKey] = $this->getDriverName($driverKey); } } return $activeDrivers; } + /** + * Get the presentational name for a driver. + * @param $driver + * @return mixed + */ + public function getDriverName($driver) + { + return config('services.' . strtolower($driver) . '.name'); + } + /** * @param string $socialDriver * @param \Laravel\Socialite\Contracts\User $socialUser @@ -211,7 +221,6 @@ class SocialAuthService */ public function detachSocialAccount($socialDriver) { - session(); user()->socialAccounts()->where('driver', '=', $socialDriver)->delete(); session()->flash('success', trans('settings.users_social_disconnected', ['socialAccount' => title_case($socialDriver)])); return redirect(user()->getEditUrl()); diff --git a/app/helpers.php b/app/helpers.php index e68e29d13..153f1e49f 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -73,7 +73,7 @@ function userCan($permission, Ownable $ownable = null) */ function setting($key = null, $default = false) { - $settingService = app(\BookStack\Services\SettingService::class); + $settingService = resolve(\BookStack\Services\SettingService::class); if (is_null($key)) return $settingService; return $settingService->get($key, $default); } @@ -126,6 +126,16 @@ function redirect($to = null, $status = 302, $headers = [], $secure = null) return app('redirect')->to($to, $status, $headers, $secure); } +function icon($name, $attrs = []) { + $iconPath = resource_path('assets/icons/' . $name . '.svg'); + $attrString = ' '; + foreach ($attrs as $attrName => $attr) { + $attrString .= $attrName . '="' . $attr . '" '; + } + $fileContents = file_get_contents($iconPath); + return str_replace('=5.6.4", - "laravel/framework": "^5.3.4", + "laravel/framework": "5.4.*", "ext-tidy": "*", "intervention/image": "^2.3", - "laravel/socialite": "^2.0", - "barryvdh/laravel-ide-helper": "^2.1", - "barryvdh/laravel-debugbar": "^2.2.3", + "laravel/socialite": "^3.0", + "barryvdh/laravel-ide-helper": "^2.2.3", + "barryvdh/laravel-debugbar": "^2.3.2", "league/flysystem-aws-s3-v3": "^1.0", - "barryvdh/laravel-dompdf": "^0.7", + "barryvdh/laravel-dompdf": "^0.8", "predis/predis": "^1.1", "gathercontent/htmldiff": "^0.2.1", - "barryvdh/laravel-snappy": "^0.3.1" + "barryvdh/laravel-snappy": "^0.3.1", + "laravel/browser-kit-testing": "^1.0", + "socialiteproviders/slack": "^3.0" }, "require-dev": { "fzaninotto/faker": "~1.4", @@ -34,9 +36,9 @@ } }, "autoload-dev": { - "classmap": [ - "tests/TestCase.php" - ] + "psr-4": { + "Tests\\": "tests/" + } }, "scripts": { "post-root-package-install": [ diff --git a/composer.lock b/composer.lock index dcde9d9c6..54218ee48 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "2438a2f4a02adbea5f378f9e9408eb29", - "content-hash": "6add8bff71ecc86e0c90858590834a26", + "hash": "e6d32752d02dae662bedc69fa5856feb", + "content-hash": "5f0f4e912f1207e761caf9344f2308a0", "packages": [ { "name": "aws/aws-sdk-php", - "version": "3.19.11", + "version": "3.22.11", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "19bac3bdd7988cbf7f89d5ce8e2748d774e2cde8" + "reference": "277939bd789204b314f3aaca06976cf3ddf78f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/19bac3bdd7988cbf7f89d5ce8e2748d774e2cde8", - "reference": "19bac3bdd7988cbf7f89d5ce8e2748d774e2cde8", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/277939bd789204b314f3aaca06976cf3ddf78f07", + "reference": "277939bd789204b314f3aaca06976cf3ddf78f07", "shasum": "" }, "require": { @@ -85,24 +85,24 @@ "s3", "sdk" ], - "time": "2016-09-27 19:38:36" + "time": "2017-02-24 21:47:48" }, { "name": "barryvdh/laravel-debugbar", - "version": "v2.3.0", + "version": "v2.3.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "0c87981df959c7c1943abe227baf607c92f204f9" + "reference": "24e4f0261e352d3fd86d0447791b56ae49398674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/0c87981df959c7c1943abe227baf607c92f204f9", - "reference": "0c87981df959c7c1943abe227baf607c92f204f9", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/24e4f0261e352d3fd86d0447791b56ae49398674", + "reference": "24e4f0261e352d3fd86d0447791b56ae49398674", "shasum": "" }, "require": { - "illuminate/support": "5.1.*|5.2.*|5.3.*", + "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*", "maximebf/debugbar": "~1.13.0", "php": ">=5.5.9", "symfony/finder": "~2.7|~3.0" @@ -139,31 +139,31 @@ "profiler", "webprofiler" ], - "time": "2016-09-15 14:05:56" + "time": "2017-01-19 08:19:49" }, { "name": "barryvdh/laravel-dompdf", - "version": "v0.7.0", + "version": "v0.8.0", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-dompdf.git", - "reference": "9b8bd179262ad6b200a11edfe7b53516afcfc42a" + "reference": "22ee9cb8e0ac0d5f11633d1194280ab40b2bba1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/9b8bd179262ad6b200a11edfe7b53516afcfc42a", - "reference": "9b8bd179262ad6b200a11edfe7b53516afcfc42a", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/22ee9cb8e0ac0d5f11633d1194280ab40b2bba1f", + "reference": "22ee9cb8e0ac0d5f11633d1194280ab40b2bba1f", "shasum": "" }, "require": { - "dompdf/dompdf": "^0.7", - "illuminate/support": "5.1.x|5.2.x|5.3.x", + "dompdf/dompdf": "^0.8", + "illuminate/support": "5.1.x|5.2.x|5.3.x|5.4.x", "php": ">=5.5.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.7-dev" + "dev-master": "0.8-dev" } }, "autoload": { @@ -187,27 +187,27 @@ "laravel", "pdf" ], - "time": "2016-08-17 08:17:33" + "time": "2017-02-19 06:45:54" }, { "name": "barryvdh/laravel-ide-helper", - "version": "v2.2.1", + "version": "v2.3.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "28af7cd19ca41cc0c63dd1de2b46c2b84d31c463" + "reference": "e82de98cef0d6597b1b686be0b5813a3a4bb53c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/28af7cd19ca41cc0c63dd1de2b46c2b84d31c463", - "reference": "28af7cd19ca41cc0c63dd1de2b46c2b84d31c463", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/e82de98cef0d6597b1b686be0b5813a3a4bb53c5", + "reference": "e82de98cef0d6597b1b686be0b5813a3a4bb53c5", "shasum": "" }, "require": { "barryvdh/reflection-docblock": "^2.0.4", - "illuminate/console": "^5.0,<5.4", - "illuminate/filesystem": "^5.0,<5.4", - "illuminate/support": "^5.0,<5.4", + "illuminate/console": "^5.0,<5.5", + "illuminate/filesystem": "^5.0,<5.5", + "illuminate/support": "^5.0,<5.5", "php": ">=5.4.0", "symfony/class-loader": "^2.3|^3.0" }, @@ -223,7 +223,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -253,25 +253,25 @@ "phpstorm", "sublime" ], - "time": "2016-07-04 11:52:48" + "time": "2017-02-22 12:27:33" }, { "name": "barryvdh/laravel-snappy", - "version": "v0.3.1", + "version": "v0.3.3", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-snappy.git", - "reference": "509a4497be63d8ee7ff464a3daf00d9edde08e21" + "reference": "dea728426bd867652c2f3a307a9cbea3f1ed7dff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/509a4497be63d8ee7ff464a3daf00d9edde08e21", - "reference": "509a4497be63d8ee7ff464a3daf00d9edde08e21", + "url": "https://api.github.com/repos/barryvdh/laravel-snappy/zipball/dea728426bd867652c2f3a307a9cbea3f1ed7dff", + "reference": "dea728426bd867652c2f3a307a9cbea3f1ed7dff", "shasum": "" }, "require": { - "illuminate/filesystem": "5.0.x|5.1.x|5.2.x|5.3.x", - "illuminate/support": "5.0.x|5.1.x|5.2.x|5.3.x", + "illuminate/filesystem": "5.0.x|5.1.x|5.2.x|5.3.x|5.4.x", + "illuminate/support": "5.0.x|5.1.x|5.2.x|5.3.x|5.4.x", "knplabs/knp-snappy": "*", "php": ">=5.4.0" }, @@ -305,7 +305,7 @@ "wkhtmltoimage", "wkhtmltopdf" ], - "time": "2016-08-05 13:08:28" + "time": "2017-02-09 23:18:54" }, { "name": "barryvdh/reflection-docblock", @@ -356,60 +356,6 @@ ], "time": "2016-06-13 19:28:20" }, - { - "name": "classpreloader/classpreloader", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/ClassPreloader/ClassPreloader.git", - "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", - "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^1.0|^2.0", - "php": ">=5.5.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "ClassPreloader\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", - "keywords": [ - "autoload", - "class", - "preload" - ], - "time": "2015-11-09 22:51:51" - }, { "name": "cogpowered/finediff", "version": "0.3.1", @@ -461,39 +407,6 @@ ], "time": "2014-05-19 10:25:02" }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "0.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "@stable" - }, - "type": "project", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "time": "2014-10-24 07:27:01" - }, { "name": "doctrine/inflector", "version": "v1.1.0", @@ -563,28 +476,29 @@ }, { "name": "dompdf/dompdf", - "version": "v0.7.0", + "version": "v0.8.0", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "5c98652b1a5beb7e3cc8ec35419b2828dd63ab14" + "reference": "0f418c6b58fdeafc2a0e80eb1fa5e644e185089c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/5c98652b1a5beb7e3cc8ec35419b2828dd63ab14", - "reference": "5c98652b1a5beb7e3cc8ec35419b2828dd63ab14", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/0f418c6b58fdeafc2a0e80eb1fa5e644e185089c", + "reference": "0f418c6b58fdeafc2a0e80eb1fa5e644e185089c", "shasum": "" }, "require": { "ext-dom": "*", "ext-gd": "*", "ext-mbstring": "*", - "phenx/php-font-lib": "0.4.*", - "phenx/php-svg-lib": "0.1.*", + "phenx/php-font-lib": "0.5.*", + "phenx/php-svg-lib": "0.2.*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "3.7.*" + "phpunit/phpunit": "4.8.*", + "squizlabs/php_codesniffer": "2.*" }, "type": "library", "extra": { @@ -620,7 +534,49 @@ ], "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", "homepage": "https://github.com/dompdf/dompdf", - "time": "2016-05-11 00:36:29" + "time": "2017-02-16 02:40:40" + }, + { + "name": "erusev/parsedown", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "20ff8bbb57205368b4b42d094642a3e52dac85fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/20ff8bbb57205368b4b42d094642a3e52dac85fb", + "reference": "20ff8bbb57205368b4b42d094642a3e52dac85fb", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "time": "2016-11-02 15:56:58" }, { "name": "gathercontent/htmldiff", @@ -673,16 +629,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.2.1", + "version": "6.2.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "3f808fba627f2c5b69e2501217bf31af349c1427" + "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/3f808fba627f2c5b69e2501217bf31af349c1427", - "reference": "3f808fba627f2c5b69e2501217bf31af349c1427", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ebf29dee597f02f09f4d5bbecc68230ea9b08f60", + "reference": "ebf29dee597f02f09f4d5bbecc68230ea9b08f60", "shasum": "" }, "require": { @@ -731,32 +687,32 @@ "rest", "web service" ], - "time": "2016-07-15 17:22:37" + "time": "2016-10-08 15:01:37" }, { "name": "guzzlehttp/promises", - "version": "1.2.0", + "version": "v1.3.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579" + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579", - "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -782,7 +738,7 @@ "keywords": [ "promise" ], - "time": "2016-05-18 16:56:05" + "time": "2016-12-20 10:07:11" }, { "name": "guzzlehttp/psr7", @@ -844,16 +800,16 @@ }, { "name": "intervention/image", - "version": "2.3.8", + "version": "2.3.11", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c" + "reference": "e8881fd99b9804b29e02d6d1c2c15ee459335cf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/4064a980324f6c3bfa2bd981dfb247afa705ec3c", - "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c", + "url": "https://api.github.com/repos/Intervention/image/zipball/e8881fd99b9804b29e02d6d1c2c15ee459335cf1", + "reference": "e8881fd99b9804b29e02d6d1c2c15ee459335cf1", "shasum": "" }, "require": { @@ -902,152 +858,7 @@ "thumbnail", "watermark" ], - "time": "2016-09-01 17:04:03" - }, - { - "name": "jakub-onderka/php-console-color", - "version": "0.1", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1", - "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "0.*", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "3.7.*", - "squizlabs/php_codesniffer": "1.*" - }, - "type": "library", - "autoload": { - "psr-0": { - "JakubOnderka\\PhpConsoleColor": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com", - "homepage": "http://www.acci.cz" - } - ], - "time": "2014-04-08 15:00:19" - }, - { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", - "shasum": "" - }, - "require": { - "jakub-onderka/php-console-color": "~0.1", - "php": ">=5.3.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~0.5", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JakubOnderka\\PhpConsoleHighlighter": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" - } - ], - "time": "2015-04-20 18:58:01" - }, - { - "name": "jeremeamia/SuperClosure", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/jeremeamia/super_closure.git", - "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/29a88be2a4846d27c1613aed0c9071dfad7b5938", - "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^1.2|^2.0", - "php": ">=5.4", - "symfony/polyfill-php56": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "SuperClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia", - "role": "Developer" - } - ], - "description": "Serialize Closure objects, including their context and binding", - "homepage": "https://github.com/jeremeamia/super_closure", - "keywords": [ - "closure", - "function", - "lambda", - "parser", - "serializable", - "serialize", - "tokenizer" - ], - "time": "2015-12-05 17:17:57" + "time": "2017-02-04 10:37:19" }, { "name": "knplabs/knp-snappy", @@ -1115,43 +926,88 @@ "time": "2015-11-17 13:16:27" }, { - "name": "laravel/framework", - "version": "v5.3.11", + "name": "laravel/browser-kit-testing", + "version": "v1.0.3", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "ca48001b95a0543fb39fcd7219de960bbc03eaa5" + "url": "https://github.com/laravel/browser-kit-testing.git", + "reference": "0adfb725147815bff5516d157577f375a6e66ebd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ca48001b95a0543fb39fcd7219de960bbc03eaa5", - "reference": "ca48001b95a0543fb39fcd7219de960bbc03eaa5", + "url": "https://api.github.com/repos/laravel/browser-kit-testing/zipball/0adfb725147815bff5516d157577f375a6e66ebd", + "reference": "0adfb725147815bff5516d157577f375a6e66ebd", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/css-selector": "~3.1", + "symfony/dom-crawler": "~3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\BrowserKitTesting\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Provides backwards compatibility for BrowserKit testing in Laravel 5.4.", + "keywords": [ + "laravel", + "testing" + ], + "time": "2017-02-08 22:32:37" + }, + { + "name": "laravel/framework", + "version": "v5.4.13", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "3eebfaa759156e06144892b00bb95304aa5a71c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/3eebfaa759156e06144892b00bb95304aa5a71c1", + "reference": "3eebfaa759156e06144892b00bb95304aa5a71c1", "shasum": "" }, "require": { - "classpreloader/classpreloader": "~3.0", "doctrine/inflector": "~1.0", + "erusev/parsedown": "~1.6", "ext-mbstring": "*", "ext-openssl": "*", - "jeremeamia/superclosure": "~2.2", "league/flysystem": "~1.0", "monolog/monolog": "~1.11", "mtdowling/cron-expression": "~1.0", "nesbot/carbon": "~1.20", "paragonie/random_compat": "~1.4|~2.0", "php": ">=5.6.4", - "psy/psysh": "0.7.*", "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.1", - "symfony/console": "3.1.*", - "symfony/debug": "3.1.*", - "symfony/finder": "3.1.*", - "symfony/http-foundation": "3.1.*", - "symfony/http-kernel": "3.1.*", - "symfony/process": "3.1.*", - "symfony/routing": "3.1.*", - "symfony/translation": "3.1.*", - "symfony/var-dumper": "3.1.*", + "swiftmailer/swiftmailer": "~5.4", + "symfony/console": "~3.2", + "symfony/debug": "~3.2", + "symfony/finder": "~3.2", + "symfony/http-foundation": "~3.2", + "symfony/http-kernel": "~3.2", + "symfony/process": "~3.2", + "symfony/routing": "~3.2", + "symfony/var-dumper": "~3.2", + "tijsverkoyen/css-to-inline-styles": "~2.2", "vlucas/phpdotenv": "~2.2" }, "replace": { @@ -1188,31 +1044,34 @@ }, "require-dev": { "aws/aws-sdk-php": "~3.0", + "doctrine/dbal": "~2.5", "mockery/mockery": "~0.9.4", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.4", + "phpunit/phpunit": "~5.7", "predis/predis": "~1.0", - "symfony/css-selector": "3.1.*", - "symfony/dom-crawler": "3.1.*" + "symfony/css-selector": "~3.2", + "symfony/dom-crawler": "~3.2" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", + "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (3.1.*).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (3.1.*).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -1240,27 +1099,27 @@ "framework", "laravel" ], - "time": "2016-09-28 02:15:37" + "time": "2017-02-22 16:07:04" }, { "name": "laravel/socialite", - "version": "v2.0.18", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "76ee5397fcdea5a062361392abca4eb397e519a3" + "reference": "01588748beef55ad5dd4f172d235548d3a6be79a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/76ee5397fcdea5a062361392abca4eb397e519a3", - "reference": "76ee5397fcdea5a062361392abca4eb397e519a3", + "url": "https://api.github.com/repos/laravel/socialite/zipball/01588748beef55ad5dd4f172d235548d3a6be79a", + "reference": "01588748beef55ad5dd4f172d235548d3a6be79a", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~5.0|~6.0", - "illuminate/contracts": "~5.0", - "illuminate/http": "~5.0", - "illuminate/support": "~5.0", + "guzzlehttp/guzzle": "~6.0", + "illuminate/contracts": "~5.4", + "illuminate/http": "~5.4", + "illuminate/support": "~5.4", "league/oauth1-client": "~1.0", "php": ">=5.4.0" }, @@ -1294,24 +1153,24 @@ "laravel", "oauth" ], - "time": "2016-06-22 12:40:16" + "time": "2017-02-01 13:43:56" }, { "name": "league/flysystem", - "version": "1.0.27", + "version": "1.0.35", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9" + "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/50e2045ed70a7e75a5e30bc3662904f3b67af8a9", - "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/dda7f3ab94158a002d9846a97dc18ebfb7acc062", + "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=5.5.9" }, "conflict": { "league/flysystem-sftp": "<1.0.6" @@ -1377,7 +1236,7 @@ "sftp", "storage" ], - "time": "2016-08-10 08:55:11" + "time": "2017-02-09 11:33:58" }, { "name": "league/flysystem-aws-s3-v3", @@ -1491,16 +1350,16 @@ }, { "name": "maximebf/debugbar", - "version": "v1.13.0", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/maximebf/php-debugbar.git", - "reference": "5f49a5ed6cfde81d31d89378806670d77462526e" + "reference": "afee79a236348e39a44cb837106b7c5b4897ac2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/5f49a5ed6cfde81d31d89378806670d77462526e", - "reference": "5f49a5ed6cfde81d31d89378806670d77462526e", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/afee79a236348e39a44cb837106b7c5b4897ac2a", + "reference": "afee79a236348e39a44cb837106b7c5b4897ac2a", "shasum": "" }, "require": { @@ -1548,20 +1407,20 @@ "debug", "debugbar" ], - "time": "2016-09-15 14:01:59" + "time": "2017-01-05 08:46:19" }, { "name": "monolog/monolog", - "version": "1.21.0", + "version": "1.22.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" + "reference": "bad29cb8d18ab0315e6c477751418a82c850d558" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", - "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bad29cb8d18ab0315e6c477751418a82c850d558", + "reference": "bad29cb8d18ab0315e6c477751418a82c850d558", "shasum": "" }, "require": { @@ -1572,7 +1431,7 @@ "psr/log-implementation": "1.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9", + "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", "jakub-onderka/php-parallel-lint": "0.9", @@ -1626,20 +1485,20 @@ "logging", "psr-3" ], - "time": "2016-07-29 03:23:52" + "time": "2016-11-26 00:15:39" }, { "name": "mtdowling/cron-expression", - "version": "v1.1.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5" + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", - "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", + "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", "shasum": "" }, "require": { @@ -1650,8 +1509,8 @@ }, "type": "library", "autoload": { - "psr-0": { - "Cron": "src/" + "psr-4": { + "Cron\\": "src/Cron/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1670,20 +1529,20 @@ "cron", "schedule" ], - "time": "2016-01-26 21:23:30" + "time": "2017-01-23 04:29:33" }, { "name": "mtdowling/jmespath.php", - "version": "2.3.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "192f93e43c2c97acde7694993ab171b3de284093" + "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/192f93e43c2c97acde7694993ab171b3de284093", - "reference": "192f93e43c2c97acde7694993ab171b3de284093", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/adcc9531682cf87dfda21e1fd5d0e7a41d292fac", + "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac", "shasum": "" }, "require": { @@ -1725,30 +1584,36 @@ "json", "jsonpath" ], - "time": "2016-01-05 18:25:05" + "time": "2016-12-03 22:08:25" }, { "name": "nesbot/carbon", - "version": "1.21.0", + "version": "1.22.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", - "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", "shasum": "" }, "require": { "php": ">=5.3.0", - "symfony/translation": "~2.6|~3.0" + "symfony/translation": "~2.6 || ~3.0" }, "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "~4.0 || ~5.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.23-dev" + } + }, "autoload": { "psr-4": { "Carbon\\": "src/Carbon/" @@ -1772,71 +1637,20 @@ "datetime", "time" ], - "time": "2015-11-04 20:07:17" - }, - { - "name": "nikic/php-parser", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4dd659edadffdc2143e4753df655d866dbfeedf0", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.4" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2016-09-16 12:04:44" + "time": "2017-01-16 07:55:07" }, { "name": "paragonie/random_compat", - "version": "v2.0.2", + "version": "v2.0.4", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf" + "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf", - "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", + "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", "shasum": "" }, "require": { @@ -1871,26 +1685,29 @@ "pseudorandom", "random" ], - "time": "2016-04-03 06:00:07" + "time": "2016-11-07 23:38:38" }, { "name": "phenx/php-font-lib", - "version": "0.4", + "version": "0.5", "source": { "type": "git", "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "b8af0cacdc3cbf1e41a586fcb78f506f4121a088" + "reference": "19ad2bebc35be028fcc0221025fcbf3d436a3962" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/b8af0cacdc3cbf1e41a586fcb78f506f4121a088", - "reference": "b8af0cacdc3cbf1e41a586fcb78f506f4121a088", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/19ad2bebc35be028fcc0221025fcbf3d436a3962", + "reference": "19ad2bebc35be028fcc0221025fcbf3d436a3962", "shasum": "" }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, "type": "library", "autoload": { - "psr-0": { - "FontLib\\": "src/" + "psr-4": { + "FontLib\\": "src/FontLib" } }, "notification-url": "https://packagist.org/downloads/", @@ -1905,22 +1722,25 @@ ], "description": "A library to read, parse, export and make subsets of different types of font files.", "homepage": "https://github.com/PhenX/php-font-lib", - "time": "2015-05-06 20:02:39" + "time": "2017-02-11 10:58:43" }, { "name": "phenx/php-svg-lib", - "version": "0.1", + "version": "v0.2", "source": { "type": "git", "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "b419766515b3426c6da74b0e29e93d71c4f17099" + "reference": "de291bec8449b89acfe85691b5c71434797959dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/b419766515b3426c6da74b0e29e93d71c4f17099", - "reference": "b419766515b3426c6da74b0e29e93d71c4f17099", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/de291bec8449b89acfe85691b5c71434797959dc", + "reference": "de291bec8449b89acfe85691b5c71434797959dc", "shasum": "" }, + "require": { + "sabberworm/php-css-parser": "6.0.*" + }, "type": "library", "autoload": { "psr-0": { @@ -1939,7 +1759,7 @@ ], "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib", - "time": "2015-05-06 18:49:49" + "time": "2016-12-13 20:25:45" }, { "name": "predis/predis", @@ -2043,16 +1863,16 @@ }, { "name": "psr/log", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "5277094ed527a1c4477177d102fe4c53551953e0" + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0", - "reference": "5277094ed527a1c4477177d102fe4c53551953e0", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "shasum": "" }, "require": { @@ -2086,92 +1906,20 @@ "psr", "psr-3" ], - "time": "2016-09-19 16:02:08" - }, - { - "name": "psy/psysh", - "version": "v0.7.2", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e64e10b20f8d229cac76399e1f3edddb57a0f280", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1", - "jakub-onderka/php-console-highlighter": "0.3.*", - "nikic/php-parser": "^1.2.1|~2.0", - "php": ">=5.3.9", - "symfony/console": "~2.3.10|^2.4.2|~3.0", - "symfony/var-dumper": "~2.7|~3.0" - }, - "require-dev": { - "fabpot/php-cs-fixer": "~1.5", - "phpunit/phpunit": "~3.7|~4.0|~5.0", - "squizlabs/php_codesniffer": "~2.0", - "symfony/finder": "~2.1|~3.0" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.8.x-dev" - } - }, - "autoload": { - "files": [ - "src/Psy/functions.php" - ], - "psr-4": { - "Psy\\": "src/Psy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "time": "2016-03-09 05:03:14" + "time": "2016-10-10 12:19:37" }, { "name": "ramsey/uuid", - "version": "3.5.0", + "version": "3.5.2", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "a6d15c8618ea3951fd54d34e326b68d3d0bc0786" + "reference": "5677cfe02397dd6b58c861870dfaa5d9007d3954" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/a6d15c8618ea3951fd54d34e326b68d3d0bc0786", - "reference": "a6d15c8618ea3951fd54d34e326b68d3d0bc0786", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5677cfe02397dd6b58c861870dfaa5d9007d3954", + "reference": "5677cfe02397dd6b58c861870dfaa5d9007d3954", "shasum": "" }, "require": { @@ -2184,11 +1932,13 @@ "require-dev": { "apigen/apigen": "^4.1", "codeception/aspect-mock": "1.0.0", + "doctrine/annotations": "~1.2.0", "goaop/framework": "1.0.0-alpha.2", "ircmaxell/random-lib": "^1.1", "jakub-onderka/php-parallel-lint": "^0.9.0", "mockery/mockery": "^0.9.4", "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", "phpunit/phpunit": "^4.7|>=5.0 <5.4", "satooshi/php-coveralls": "^0.6.1", "squizlabs/php_codesniffer": "^2.3" @@ -2238,27 +1988,148 @@ "identifier", "uuid" ], - "time": "2016-08-02 18:39:32" + "time": "2016-11-22 19:21:44" }, { - "name": "swiftmailer/swiftmailer", - "version": "v5.4.3", + "name": "sabberworm/php-css-parser", + "version": "6.0.1", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153" + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "9ea4b00c569b19f731d0c2e0e802055877ff40c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", - "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/9ea4b00c569b19f731d0c2e0e802055877ff40c2", + "reference": "9ea4b00c569b19f731d0c2e0e802055877ff40c2", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "time": "2015-08-24 08:48:52" + }, + { + "name": "socialiteproviders/manager", + "version": "v3.0.4", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Manager.git", + "reference": "f57877e96c46f0f9157fcd8fa68a547f6d344ed5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/f57877e96c46f0f9157fcd8fa68a547f6d344ed5", + "reference": "f57877e96c46f0f9157fcd8fa68a547f6d344ed5", + "shasum": "" + }, + "require": { + "laravel/socialite": "~3.0", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Manager\\": "src/", + "SocialiteProviders\\Manager\\Test\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andy Wendt", + "email": "andy@awendt.com" + } + ], + "description": "Easily add new or override built-in providers in Laravel Socialite.", + "time": "2017-02-07 07:26:42" + }, + { + "name": "socialiteproviders/slack", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Slack.git", + "reference": "6f8f0599cd80ecea4958ad37ed729805c4100c8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Slack/zipball/6f8f0599cd80ecea4958ad37ed729805c4100c8c", + "reference": "6f8f0599cd80ecea4958ad37ed729805c4100c8c", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "socialiteproviders/manager": "~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Slack\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Faust", + "email": "hello@brianfaust.de" + } + ], + "description": "Slack OAuth2 Provider for Laravel Socialite", + "time": "2017-02-20 04:42:11" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v5.4.6", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e", + "reference": "81fdccfaf8bdc5d5d7a1ef6bb3a61bbb1a6c4a3e", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "mockery/mockery": "~0.9.1" + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "~3.2" }, "type": "library", "extra": { @@ -2291,20 +2162,20 @@ "mail", "mailer" ], - "time": "2016-07-08 11:51:25" + "time": "2017-02-13 07:52:53" }, { "name": "symfony/class-loader", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "2d0ba77c46ecc96a6641009a98f72632216811ba" + "reference": "2847d56f518ad5721bf85aa9174b3aa3fd12aa03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/2d0ba77c46ecc96a6641009a98f72632216811ba", - "reference": "2d0ba77c46ecc96a6641009a98f72632216811ba", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/2847d56f518ad5721bf85aa9174b3aa3fd12aa03", + "reference": "2847d56f518ad5721bf85aa9174b3aa3fd12aa03", "shasum": "" }, "require": { @@ -2320,7 +2191,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2347,40 +2218,43 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2016-08-23 13:39:15" + "time": "2017-01-21 17:06:35" }, { "name": "symfony/console", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563" + "reference": "0e5e6899f82230fcb1153bcaf0e106ffaa44b870" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8ea494c34f0f772c3954b5fbe00bffc5a435e563", - "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563", + "url": "https://api.github.com/repos/symfony/console/zipball/0e5e6899f82230fcb1153bcaf0e106ffaa44b870", + "reference": "0e5e6899f82230fcb1153bcaf0e106ffaa44b870", "shasum": "" }, "require": { "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { "psr/log": "~1.0", "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", "symfony/process": "~2.8|~3.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/filesystem": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2407,20 +2281,73 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-08-19 06:48:39" + "time": "2017-02-16 14:07:22" }, { - "name": "symfony/debug", - "version": "v3.1.4", + "name": "symfony/css-selector", + "version": "v3.1.10", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11" + "url": "https://github.com/symfony/css-selector.git", + "reference": "722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/34f6ac18c2974ca5fce68adf419ee7d15def6f11", - "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d", + "reference": "722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2017-01-02 20:31:54" + }, + { + "name": "symfony/debug", + "version": "v3.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "9b98854cb45bc59d100b7d4cc4cf9e05f21026b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/9b98854cb45bc59d100b7d4cc4cf9e05f21026b9", + "reference": "9b98854cb45bc59d100b7d4cc4cf9e05f21026b9", "shasum": "" }, "require": { @@ -2437,7 +2364,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2464,20 +2391,76 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-08-23 13:39:15" + "time": "2017-02-16 16:34:18" }, { - "name": "symfony/event-dispatcher", - "version": "v3.1.4", + "name": "symfony/dom-crawler", + "version": "v3.1.10", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "7eede2a901a19928494194f7d1815a77b9a473a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5", - "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7eede2a901a19928494194f7d1815a77b9a473a0", + "reference": "7eede2a901a19928494194f7d1815a77b9a473a0", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "~2.8|~3.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2017-01-21 17:13:55" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9137eb3a3328e413212826d63eeeb0217836e2b6", + "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6", "shasum": "" }, "require": { @@ -2497,7 +2480,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2524,20 +2507,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-07-19 10:45:57" + "time": "2017-01-02 20:32:22" }, { "name": "symfony/finder", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577" + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e568ef1784f447a0e54dcb6f6de30b9747b0f577", - "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577", + "url": "https://api.github.com/repos/symfony/finder/zipball/8c71141cae8e2957946b403cc71a67213c0380d6", + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6", "shasum": "" }, "require": { @@ -2546,7 +2529,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2573,20 +2556,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-08-26 12:04:02" + "time": "2017-01-02 20:32:22" }, { "name": "symfony/http-foundation", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4" + "reference": "a90da6dd679605d88c9803a57a6fc1fb7a19a6e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/63592e00fd90632b57ee50220a1ddb29b6bf3bb4", - "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a90da6dd679605d88c9803a57a6fc1fb7a19a6e0", + "reference": "a90da6dd679605d88c9803a57a6fc1fb7a19a6e0", "shasum": "" }, "require": { @@ -2599,7 +2582,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2626,20 +2609,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2016-08-22 12:11:19" + "time": "2017-02-16 22:46:52" }, { "name": "symfony/http-kernel", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3" + "reference": "4cd0d4bc31819095c6ef13573069f621eb321081" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aeda215d6b01f119508c090d2a09ebb5b0bc61f3", - "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4cd0d4bc31819095c6ef13573069f621eb321081", + "reference": "4cd0d4bc31819095c6ef13573069f621eb321081", "shasum": "" }, "require": { @@ -2647,7 +2630,7 @@ "psr/log": "~1.0", "symfony/debug": "~2.8|~3.0", "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" + "symfony/http-foundation": "~2.8.13|~3.1.6|~3.2" }, "conflict": { "symfony/config": "<2.8" @@ -2667,7 +2650,7 @@ "symfony/stopwatch": "~2.8|~3.0", "symfony/templating": "~2.8|~3.0", "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~2.8|~3.0" + "symfony/var-dumper": "~3.2" }, "suggest": { "symfony/browser-kit": "", @@ -2681,7 +2664,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2708,20 +2691,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2016-09-03 15:28:24" + "time": "2017-02-16 23:59:56" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.2.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "dff51f72b0706335131b00a7f49606168c582594" + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", - "reference": "dff51f72b0706335131b00a7f49606168c582594", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", "shasum": "" }, "require": { @@ -2733,7 +2716,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -2767,128 +2750,20 @@ "portable", "shim" ], - "time": "2016-05-18 14:26:46" - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a", - "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2016-05-18 14:26:46" - }, - { - "name": "symfony/polyfill-util", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99", - "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony utilities for portability of PHP codes", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" - ], - "time": "2016-05-18 14:26:46" + "time": "2016-11-14 01:06:16" }, { "name": "symfony/process", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e64e93041c80e77197ace5ab9385dedb5a143697" + "reference": "0ab87c1e7570b3534a6e51eb4ca8e9f6d7327856" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e64e93041c80e77197ace5ab9385dedb5a143697", - "reference": "e64e93041c80e77197ace5ab9385dedb5a143697", + "url": "https://api.github.com/repos/symfony/process/zipball/0ab87c1e7570b3534a6e51eb4ca8e9f6d7327856", + "reference": "0ab87c1e7570b3534a6e51eb4ca8e9f6d7327856", "shasum": "" }, "require": { @@ -2897,7 +2772,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2924,20 +2799,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-08-16 14:58:24" + "time": "2017-02-16 14:07:22" }, { "name": "symfony/routing", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6" + "reference": "af464432c177dbcdbb32295113b7627500331f2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6", + "url": "https://api.github.com/repos/symfony/routing/zipball/af464432c177dbcdbb32295113b7627500331f2d", + "reference": "af464432c177dbcdbb32295113b7627500331f2d", "shasum": "" }, "require": { @@ -2966,7 +2841,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2999,20 +2874,20 @@ "uri", "url" ], - "time": "2016-08-16 14:58:24" + "time": "2017-01-28 02:37:08" }, { "name": "symfony/translation", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a35edc277513c9bc0f063ca174c36b346f974528" + "reference": "d6825c6bb2f1da13f564678f9f236fe8242c0029" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a35edc277513c9bc0f063ca174c36b346f974528", - "reference": "a35edc277513c9bc0f063ca174c36b346f974528", + "url": "https://api.github.com/repos/symfony/translation/zipball/d6825c6bb2f1da13f564678f9f236fe8242c0029", + "reference": "d6825c6bb2f1da13f564678f9f236fe8242c0029", "shasum": "" }, "require": { @@ -3036,7 +2911,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -3063,20 +2938,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2016-08-05 08:37:39" + "time": "2017-02-16 22:46:52" }, { "name": "symfony/var-dumper", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "62ee73706c421654a4c840028954510277f7dfc8" + "reference": "cb50260b674ee1c2d4ab49f2395a42e0b4681e20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/62ee73706c421654a4c840028954510277f7dfc8", - "reference": "62ee73706c421654a4c840028954510277f7dfc8", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cb50260b674ee1c2d4ab49f2395a42e0b4681e20", + "reference": "cb50260b674ee1c2d4ab49f2395a42e0b4681e20", "shasum": "" }, "require": { @@ -3092,7 +2967,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -3126,7 +3001,54 @@ "debug", "dump" ], - "time": "2016-08-31 09:05:42" + "time": "2017-02-16 22:46:52" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", + "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7", + "symfony/css-selector": "^2.7|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|5.1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "time": "2016-09-20 12:50:39" }, { "name": "vlucas/phpdotenv", @@ -3329,16 +3251,16 @@ }, { "name": "mockery/mockery", - "version": "0.9.5", + "version": "0.9.8", "source": { "type": "git", "url": "https://github.com/padraic/mockery.git", - "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2" + "reference": "1e5e2ffdc4d71d7358ed58a6fdd30a4a0c506855" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/padraic/mockery/zipball/4db079511a283e5aba1b3c2fb19037c645e70fc2", - "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2", + "url": "https://api.github.com/repos/padraic/mockery/zipball/1e5e2ffdc4d71d7358ed58a6fdd30a4a0c506855", + "reference": "1e5e2ffdc4d71d7358ed58a6fdd30a4a0c506855", "shasum": "" }, "require": { @@ -3390,20 +3312,20 @@ "test double", "testing" ], - "time": "2016-05-22 21:52:33" + "time": "2017-02-09 13:29:38" }, { "name": "myclabs/deep-copy", - "version": "1.5.4", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f" + "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/ea74994a3dc7f8d2f65a06009348f2d63c81e61f", - "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5a5a9fc8025a08d8919be87d6884d5a92520cefe", + "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe", "shasum": "" }, "require": { @@ -3432,7 +3354,7 @@ "object", "object graph" ], - "time": "2016-09-16 13:37:59" + "time": "2017-01-26 22:05:40" }, { "name": "phpdocumentor/reflection-common", @@ -3490,16 +3412,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", "shasum": "" }, "require": { @@ -3531,20 +3453,20 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-06-10 09:48:41" + "time": "2016-09-30 07:12:33" }, { "name": "phpdocumentor/type-resolver", - "version": "0.2", + "version": "0.2.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", "shasum": "" }, "require": { @@ -3578,20 +3500,20 @@ "email": "me@mikevanriel.com" } ], - "time": "2016-06-10 07:14:17" + "time": "2016-11-25 06:54:22" }, { "name": "phpspec/prophecy", - "version": "v1.6.1", + "version": "v1.6.2", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", "shasum": "" }, "require": { @@ -3599,10 +3521,11 @@ "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" + "sebastian/recursion-context": "^1.0|^2.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^2.0", + "phpunit/phpunit": "^4.8 || ^5.6.5" }, "type": "library", "extra": { @@ -3640,27 +3563,27 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "time": "2016-11-21 14:58:47" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.1", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3" + "reference": "ca060f645beeddebedb1885c97bf163e93264c35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5f3f7e736d6319d5f1fc402aff8b026da26709a3", - "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca060f645beeddebedb1885c97bf163e93264c35", + "reference": "ca060f645beeddebedb1885c97bf163e93264c35", "shasum": "" }, "require": { "php": "^5.6 || ^7.0", "phpunit/php-file-iterator": "~1.3", "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", "sebastian/code-unit-reverse-lookup": "~1.0", "sebastian/environment": "^1.3.2 || ^2.0", "sebastian/version": "~1.0|~2.0" @@ -3703,20 +3626,20 @@ "testing", "xunit" ], - "time": "2016-07-26 14:39:29" + "time": "2017-02-23 07:38:02" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", "shasum": "" }, "require": { @@ -3750,7 +3673,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2016-10-03 07:40:28" }, { "name": "phpunit/php-text-template", @@ -3839,16 +3762,16 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.8", + "version": "1.4.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + "reference": "284fb0679dd25fb5ffb56dad92c72860c0a22f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/284fb0679dd25fb5ffb56dad92c72860c0a22f1b", + "reference": "284fb0679dd25fb5ffb56dad92c72860c0a22f1b", "shasum": "" }, "require": { @@ -3884,20 +3807,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-09-15 10:49:45" + "time": "2017-02-23 06:14:45" }, { "name": "phpunit/phpunit", - "version": "5.5.5", + "version": "5.7.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a57126dc681b08289fef6ac96a48e30656f84350" + "reference": "4906b8faf23e42612182fd212eb6f4c0f2954b57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a57126dc681b08289fef6ac96a48e30656f84350", - "reference": "a57126dc681b08289fef6ac96a48e30656f84350", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4906b8faf23e42612182fd212eb6f4c0f2954b57", + "reference": "4906b8faf23e42612182fd212eb6f4c0f2954b57", "shasum": "" }, "require": { @@ -3908,20 +3831,20 @@ "ext-xml": "*", "myclabs/deep-copy": "~1.3", "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", + "sebastian/comparator": "^1.2.4", "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", + "sebastian/version": "~1.0.3|~2.0", "symfony/yaml": "~2.1|~3.0" }, "conflict": { @@ -3931,7 +3854,6 @@ "ext-pdo": "*" }, "suggest": { - "ext-tidy": "*", "ext-xdebug": "*", "phpunit/php-invoker": "~1.1" }, @@ -3941,7 +3863,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5.x-dev" + "dev-master": "5.7.x-dev" } }, "autoload": { @@ -3967,27 +3889,27 @@ "testing", "xunit" ], - "time": "2016-09-21 14:40:13" + "time": "2017-02-19 07:22:16" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.2.7", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a" + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", - "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.6 || ^7.0", "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2" + "sebastian/exporter": "^1.2 || ^2.0" }, "conflict": { "phpunit/phpunit": "<5.4.0" @@ -4026,7 +3948,7 @@ "mock", "xunit" ], - "time": "2016-09-06 16:07:45" + "time": "2016-12-08 20:27:08" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -4075,22 +3997,22 @@ }, { "name": "sebastian/comparator", - "version": "1.2.0", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -4135,7 +4057,7 @@ "compare", "equality" ], - "time": "2015-07-26 15:48:44" + "time": "2017-01-29 09:50:25" }, { "name": "sebastian/diff", @@ -4191,28 +4113,28 @@ }, { "name": "sebastian/environment", - "version": "1.3.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4237,25 +4159,25 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-11-26 07:53:53" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", "shasum": "" }, "require": { "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "ext-mbstring": "*", @@ -4264,7 +4186,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4304,7 +4226,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-11-19 08:54:04" }, { "name": "sebastian/global-state", @@ -4359,21 +4281,21 @@ }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", "shasum": "" }, "require": { "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "phpunit/phpunit": "~5" @@ -4381,7 +4303,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4401,20 +4323,20 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "time": "2017-02-18 15:18:39" }, { "name": "sebastian/recursion-context", - "version": "1.0.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", "shasum": "" }, "require": { @@ -4426,7 +4348,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4454,7 +4376,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" + "time": "2016-11-19 07:33:16" }, { "name": "sebastian/resource-operations", @@ -4500,16 +4422,16 @@ }, { "name": "sebastian/version", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { @@ -4539,138 +4461,35 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" - }, - { - "name": "symfony/css-selector", - "version": "v3.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "2851e1932d77ce727776154d659b232d061e816a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/2851e1932d77ce727776154d659b232d061e816a", - "reference": "2851e1932d77ce727776154d659b232d061e816a", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" - }, - { - "name": "symfony/dom-crawler", - "version": "v3.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bb7395e8b1db3654de82b9f35d019958276de4d7", - "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "symfony/css-selector": "~2.8|~3.0" - }, - "suggest": { - "symfony/css-selector": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2016-08-05 08:37:39" + "time": "2016-10-03 07:35:21" }, { "name": "symfony/yaml", - "version": "v3.1.4", + "version": "v3.2.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d" + "reference": "9724c684646fcb5387d579b4bfaa63ee0b0c64c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f291ed25eb1435bddbe8a96caaef16469c2a092d", - "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d", + "url": "https://api.github.com/repos/symfony/yaml/zipball/9724c684646fcb5387d579b4bfaa63ee0b0c64c8", + "reference": "9724c684646fcb5387d579b4bfaa63ee0b0c64c8", "shasum": "" }, "require": { "php": ">=5.5.9" }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -4697,24 +4516,24 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-09-02 02:12:52" + "time": "2017-02-16 22:46:52" }, { "name": "webmozart/assert", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0" + "php": "^5.3.3 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -4723,7 +4542,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -4747,7 +4566,7 @@ "check", "validate" ], - "time": "2016-08-09 15:02:57" + "time": "2016-11-23 20:04:58" } ], "aliases": [], diff --git a/config/app.php b/config/app.php index 0c3e1e71c..bf4f84fc7 100644 --- a/config/app.php +++ b/config/app.php @@ -139,7 +139,7 @@ return [ Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, - Laravel\Socialite\SocialiteServiceProvider::class, + SocialiteProviders\Manager\ServiceProvider::class, /** * Third Party diff --git a/config/database.php b/config/database.php index 832852dc2..92c768245 100644 --- a/config/database.php +++ b/config/database.php @@ -82,7 +82,7 @@ return [ 'mysql_testing' => [ 'driver' => 'mysql', - 'host' => 'localhost', + 'host' => '127.0.0.1', 'database' => 'bookstack-test', 'username' => env('MYSQL_USER', 'bookstack-test'), 'password' => env('MYSQL_PASSWORD', 'bookstack-test'), diff --git a/config/dompdf.php b/config/dompdf.php index 924bdb9cd..036e1bb3c 100644 --- a/config/dompdf.php +++ b/config/dompdf.php @@ -1,6 +1,6 @@ false, // Throw an Exception on warnings from dompdf 'orientation' => 'portrait', - 'defines' => array( + 'defines' => [ /** * The location of the DOMPDF font directory * @@ -143,7 +143,7 @@ return array( * the desired content might be different (e.g. screen or projection view of html file). * Therefore allow specification of content here. */ - "DOMPDF_DEFAULT_MEDIA_TYPE" => "screen", + "DOMPDF_DEFAULT_MEDIA_TYPE" => "print", /** * The default paper size. @@ -260,7 +260,7 @@ return array( "DOMPDF_ENABLE_HTML5PARSER" => true, - ), + ], -); +]; diff --git a/config/services.php b/config/services.php index d71ff4a26..99022e5f2 100644 --- a/config/services.php +++ b/config/services.php @@ -41,12 +41,35 @@ return [ 'client_id' => env('GITHUB_APP_ID', false), 'client_secret' => env('GITHUB_APP_SECRET', false), 'redirect' => env('APP_URL') . '/login/service/github/callback', + 'name' => 'GitHub', ], 'google' => [ 'client_id' => env('GOOGLE_APP_ID', false), 'client_secret' => env('GOOGLE_APP_SECRET', false), 'redirect' => env('APP_URL') . '/login/service/google/callback', + 'name' => 'Google', + ], + + 'slack' => [ + 'client_id' => env('SLACK_APP_ID', false), + 'client_secret' => env('SLACK_APP_SECRET', false), + 'redirect' => env('APP_URL') . '/login/service/slack/callback', + 'name' => 'Slack', + ], + + 'facebook' => [ + 'client_id' => env('FACEBOOK_APP_ID', false), + 'client_secret' => env('FACEBOOK_APP_SECRET', false), + 'redirect' => env('APP_URL') . '/login/service/facebook/callback', + 'name' => 'Facebook', + ], + + 'twitter' => [ + 'client_id' => env('TWITTER_APP_ID', false), + 'client_secret' => env('TWITTER_APP_SECRET', false), + 'redirect' => env('APP_URL') . '/login/service/twitter/callback', + 'name' => 'Twitter', ], 'ldap' => [ @@ -55,7 +78,8 @@ return [ 'pass' => env('LDAP_PASS', false), 'base_dn' => env('LDAP_BASE_DN', false), 'user_filter' => env('LDAP_USER_FILTER', '(&(uid=${user}))'), - 'version' => env('LDAP_VERSION', false) + 'version' => env('LDAP_VERSION', false), + 'email_attribute' => env('LDAP_EMAIL_ATTRIBUTE', 'mail'), ] ]; diff --git a/database/seeds/DummyContentSeeder.php b/database/seeds/DummyContentSeeder.php index c64ca2a8c..efcda4220 100644 --- a/database/seeds/DummyContentSeeder.php +++ b/database/seeds/DummyContentSeeder.php @@ -11,14 +11,14 @@ class DummyContentSeeder extends Seeder */ public function run() { - $user = factory(BookStack\User::class, 1)->create(); + $user = factory(\BookStack\User::class)->create(); $role = \BookStack\Role::getRole('editor'); $user->attachRole($role); - $books = factory(BookStack\Book::class, 20)->create(['created_by' => $user->id, 'updated_by' => $user->id]) + $books = factory(\BookStack\Book::class, 20)->create(['created_by' => $user->id, 'updated_by' => $user->id]) ->each(function($book) use ($user) { - $chapters = factory(BookStack\Chapter::class, 5)->create(['created_by' => $user->id, 'updated_by' => $user->id]) + $chapters = factory(\BookStack\Chapter::class, 5)->create(['created_by' => $user->id, 'updated_by' => $user->id]) ->each(function($chapter) use ($user, $book){ $pages = factory(\BookStack\Page::class, 5)->make(['created_by' => $user->id, 'updated_by' => $user->id, 'book_id' => $book->id]); $chapter->pages()->saveMany($pages); diff --git a/readme.md b/readme.md index 63d43e4b7..65dcbe7b1 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,7 @@ # BookStack -[![GitHub release](https://img.shields.io/github/release/ssddanbrown/BookStack.svg?maxAge=2592000)](https://github.com/ssddanbrown/BookStack/releases/latest) -[![license](https://img.shields.io/github/license/ssddanbrown/BookStack.svg?maxAge=2592000)](https://github.com/ssddanbrown/BookStack/blob/master/LICENSE) +[![GitHub release](https://img.shields.io/github/release/BookStackApp/BookStack.svg?maxAge=2592000)](https://github.com/BookStackApp/BookStack/releases/latest) +[![license](https://img.shields.io/github/license/BookStackApp/BookStack.svg?maxAge=2592000)](https://github.com/BookStackApp/BookStack/blob/master/LICENSE) [![Build Status](https://travis-ci.org/BookStackApp/BookStack.svg)](https://travis-ci.org/BookStackApp/BookStack) A platform for storing and organising information and documentation. General information and documentation for BookStack can be found at https://www.bookstackapp.com/. @@ -45,6 +45,12 @@ Once done you can run `phpunit` in the application root directory to run all tes 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`. 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 + +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. + +Pull requests are very welcome. If the scope of your pull request is very large it may be best to open the pull request early or create an issue for it to discuss how it will fit in to the project and plan out the merge. ## Website, Docs & Blog diff --git a/resources/assets/icons/facebook.svg b/resources/assets/icons/facebook.svg new file mode 100644 index 000000000..7bfafd226 --- /dev/null +++ b/resources/assets/icons/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/icons/github.svg b/resources/assets/icons/github.svg new file mode 100644 index 000000000..ae6dc6f7f --- /dev/null +++ b/resources/assets/icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/icons/google.svg b/resources/assets/icons/google.svg new file mode 100644 index 000000000..34ed1603b --- /dev/null +++ b/resources/assets/icons/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/icons/slack.svg b/resources/assets/icons/slack.svg new file mode 100644 index 000000000..5280f971f --- /dev/null +++ b/resources/assets/icons/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/icons/twitter.svg b/resources/assets/icons/twitter.svg new file mode 100644 index 000000000..fa4d59efd --- /dev/null +++ b/resources/assets/icons/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/js/directives.js b/resources/assets/js/directives.js index ef8bcd85c..10458e753 100644 --- a/resources/assets/js/directives.js +++ b/resources/assets/js/directives.js @@ -214,6 +214,19 @@ export default function (ngApp, events) { } }]); + let renderer = new markdown.Renderer(); + // Custom markdown checkbox list item + // Attribution: https://github.com/chjj/marked/issues/107#issuecomment-44542001 + renderer.listitem = function(text) { + if (/^\s*\[[x ]\]\s*/.test(text)) { + text = text + .replace(/^\s*\[ \]\s*/, '') + .replace(/^\s*\[x\]\s*/, ''); + return `
  • ${text}
  • `; + } + return `
  • ${text}
  • `; + }; + /** * Markdown input * Handles the logic for just the editor input field. @@ -231,13 +244,13 @@ export default function (ngApp, events) { element = element.find('textarea').first(); let content = element.val(); scope.mdModel = content; - scope.mdChange(markdown(content)); + scope.mdChange(markdown(content, {renderer: renderer})); element.on('change input', (event) => { content = element.val(); $timeout(() => { scope.mdModel = content; - scope.mdChange(markdown(content)); + scope.mdChange(markdown(content, {renderer: renderer})); }); }); diff --git a/resources/assets/sass/_blocks.scss b/resources/assets/sass/_blocks.scss index a2023aa37..bd3f8ff4e 100644 --- a/resources/assets/sass/_blocks.scss +++ b/resources/assets/sass/_blocks.scss @@ -135,11 +135,19 @@ border-left: 3px solid #BBB; background-color: #EEE; padding: $-s; + padding-left: $-xl; display: block; + position: relative; &:before { font-family: 'Material-Design-Iconic-Font'; - padding-right: $-s; + left: $-xs + 4px; + top: 50%; + margin-top: -9px; + //top: $-xs + 5px; display: inline-block; + position: absolute; + font-size: 1.222em; + line-height: 1; } &.success { border-left-color: $positive; diff --git a/resources/assets/sass/_buttons.scss b/resources/assets/sass/_buttons.scss index 791a5bb72..6e03c9217 100644 --- a/resources/assets/sass/_buttons.scss +++ b/resources/assets/sass/_buttons.scss @@ -54,6 +54,9 @@ $button-border-radius: 2px; &.muted { @include generate-button-colors(#EEE, #888); } + &.muted-light { + @include generate-button-colors(#666, #e4e4e4); + } } .text-button { @@ -92,6 +95,9 @@ $button-border-radius: 2px; width: 100%; text-align: center; display: block; + &.text-left { + text-align: left; + } } .button.icon { @@ -100,6 +106,19 @@ $button-border-radius: 2px; } } +.button.svg { + svg { + display: inline-block; + position: absolute; + left: $-m; + top: $-s - 2px; + width: 24px; + } + padding: $-s $-m; + padding-bottom: $-s - 2px; + padding-left: $-m*2 + 24px; +} + .button[disabled] { background-color: #BBB; cursor: default; diff --git a/resources/assets/sass/_grid.scss b/resources/assets/sass/_grid.scss index 231c12d4d..b32dafd38 100644 --- a/resources/assets/sass/_grid.scss +++ b/resources/assets/sass/_grid.scss @@ -55,20 +55,6 @@ div[class^="col-"] img { } } -.center-box { - margin: $-xl auto 0 auto; - padding: $-m $-xxl $-xl*2 $-xxl; - max-width: 346px; - display: inline-block; - text-align: left; - vertical-align: top; - &.login { - background-color: #EEE; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1); - border: 1px solid #DDD; - } -} - .row { margin-left: -$-m; margin-right: -$-m; diff --git a/resources/assets/sass/_text.scss b/resources/assets/sass/_text.scss index aac4298ea..a74a81647 100644 --- a/resources/assets/sass/_text.scss +++ b/resources/assets/sass/_text.scss @@ -16,7 +16,7 @@ h2 { } h3 { font-size: 2.333em; - line-height: 1.571428572em; + line-height: 1.221428572em; margin-top: 0.78571429em; margin-bottom: 0.43137255em; } @@ -71,6 +71,13 @@ a, .link { padding-right: 0; padding-left: $-s; } + &.icon { + display: inline-block; + } + svg { + position: relative; + display: inline-block; + } } /* @@ -84,7 +91,6 @@ p, ul, ol, pre, table, blockquote { hr { border: 0; height: 1px; - border: 0; background: #EAEAEA; margin-bottom: $-l; &.faded { @@ -275,6 +281,14 @@ ol { overflow: hidden; } +li.checkbox-item { + list-style: none; + margin-left: - ($-m * 1.3); + input[type="checkbox"] { + margin-right: $-xs; + } +} + /* * Generic text styling classes */ diff --git a/resources/assets/sass/export-styles.scss b/resources/assets/sass/export-styles.scss index 7e1ab4e9e..60450f3e2 100644 --- a/resources/assets/sass/export-styles.scss +++ b/resources/assets/sass/export-styles.scss @@ -1,4 +1,4 @@ -@import "reset"; +//@import "reset"; @import "variables"; @import "mixins"; @import "html"; diff --git a/resources/assets/sass/styles.scss b/resources/assets/sass/styles.scss index 7d33bd0a6..967aba76b 100644 --- a/resources/assets/sass/styles.scss +++ b/resources/assets/sass/styles.scss @@ -251,10 +251,24 @@ $btt-size: 40px; } } - - - - +.center-box { + margin: $-xl auto 0 auto; + padding: $-m $-xxl $-xl $-xxl; + width: 420px; + max-width: 100%; + display: inline-block; + text-align: left; + vertical-align: top; + //border: 1px solid #DDD; + input { + width: 100%; + } + &.login { + background-color: #EEE; + box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1); + border: 1px solid #DDD; + } +} diff --git a/resources/lang/de/auth.php b/resources/lang/de/auth.php index c58d9d974..f253cdfa1 100644 --- a/resources/lang/de/auth.php +++ b/resources/lang/de/auth.php @@ -14,7 +14,50 @@ return [ 'throttle' => 'Zu viele Anmeldeversuche. Bitte versuchen sie es in :seconds Sekunden erneut.', /** - * Email Confirmation Text + * Login & Register + */ + 'sign_up' => 'Registrieren', + 'log_in' => 'Anmelden', + 'logout' => 'Abmelden', + + 'name' => 'Name', + 'username' => 'Benutzername', + 'email' => 'E-Mail', + 'password' => 'Passwort', + 'password_confirm' => 'Passwort bestätigen', + 'password_hint' => 'Mindestlänge: 5 Zeichen', + 'forgot_password' => 'Passwort vergessen?', + 'remember_me' => 'Angemeldet bleiben', + 'ldap_email_hint' => 'Bitte geben Sie eine E-Mail-Adresse ein, um diese mit dem Account zu nutzen.', + 'create_account' => 'Account anlegen', + 'social_login' => 'Social Login', + 'social_registration' => 'Social Registrierung', + 'social_registration_text' => 'Mit einem dieser Möglichkeiten registrieren oder anmelden.', + + + 'register_thanks' => 'Vielen Dank für Ihre Registrierung!', + 'register_confirm' => 'Bitte prüfen Sie Ihren E-Mail Eingang und klicken auf den Verifizieren-Button, um :appName nutzen zu können.', + 'registrations_disabled' => 'Die Registrierung ist momentan nicht möglich', + 'registration_email_domain_invalid' => 'Diese E-Mail-Domain ist für die Benutzer der Applikation nicht freigeschaltet.', + 'register_success' => 'Vielen Dank für Ihre Registrierung! Die Daten sind gespeichert und Sie sind angemeldet.', + + + /** + * Password Reset + */ + 'reset_password' => 'Passwort vergessen', + 'reset_password_send_instructions' => 'Bitte geben Sie unten Ihre E-Mail-Adresse ein und Sie erhalten eine E-Mail, um Ihr Passwort zurück zu setzen.', + 'reset_password_send_button' => 'Passwort zurücksetzen', + 'reset_password_sent_success' => 'Eine E-Mail mit den Instruktionen, um Ihr Passwort zurückzusetzen wurde an :email gesendet.', + 'reset_password_success' => 'Ihr Passwort wurde erfolgreich zurück gesetzt.', + + 'email_reset_subject' => 'Passwort zurücksetzen für :appName', + 'email_reset_text' => 'Sie erhalten diese E-Mail, weil eine Passwort-Rücksetzung für Ihren Account beantragt wurde.', + 'email_reset_not_requested' => 'Wenn Sie die Passwort-Rücksetzung nicht ausgelöst haben, ist kein weiteres Handeln notwendig.', + + + /** + * Email Confirmation */ 'email_confirm_subject' => 'Bestätigen sie ihre E-Mail Adresse bei :appName', 'email_confirm_greeting' => 'Danke, dass sie :appName beigetreten sind!', @@ -23,4 +66,10 @@ return [ 'email_confirm_send_error' => 'Bestätigungs-E-Mail benötigt, aber das System konnte die E-Mail nicht versenden. Kontaktieren sie den Administrator, um sicherzustellen, dass das Sytsem korrekt eingerichtet ist.', 'email_confirm_success' => 'Ihre E-Mail Adresse wurde bestätigt!', 'email_confirm_resent' => 'Bestätigungs-E-Mail wurde erneut versendet, bitte überprüfen sie ihren Posteingang.', + + 'email_not_confirmed' => 'E-Mail-Adresse ist nicht bestätigt', + 'email_not_confirmed_text' => 'Ihre E-Mail-Adresse ist bisher nicht bestätigt.', + 'email_not_confirmed_click_link' => 'Bitte klicken Sie auf den Link in der E-Mail, die Sie nach der Registrierung erhalten haben.', + 'email_not_confirmed_resend' => 'Wenn Sie die E-Mail nicht erhalten haben, können Sie die Nachricht erneut anfordern. Füllen Sie hierzu bitte das folgende Formular aus:', + 'email_not_confirmed_resend_button' => 'Bestätigungs E-Mail erneut senden', ]; diff --git a/resources/lang/de/common.php b/resources/lang/de/common.php new file mode 100644 index 000000000..7ad1743a0 --- /dev/null +++ b/resources/lang/de/common.php @@ -0,0 +1,58 @@ + 'Abbrechen', + 'confirm' => 'Bestätigen', + 'back' => 'Zurück', + 'save' => 'Speichern', + 'continue' => 'Weiter', + 'select' => 'Auswählen', + + /** + * Form Labels + */ + 'name' => 'Name', + 'description' => 'Beschreibung', + 'role' => 'Rolle', + + /** + * Actions + */ + 'actions' => 'Aktionen', + 'view' => 'Anzeigen', + 'create' => 'Anlegen', + 'update' => 'Aktualisieren', + 'edit' => 'Bearbeiten', + 'sort' => 'Sortieren', + 'move' => 'Verschieben', + 'delete' => 'Löschen', + 'search' => 'Suchen', + 'search_clear' => 'Suche löschen', + 'reset' => 'Zurücksetzen', + 'remove' => 'Entfernen', + + + /** + * Misc + */ + 'deleted_user' => 'Gelöschte Benutzer', + 'no_activity' => 'Keine Aktivitäten zum Anzeigen', + 'no_items' => 'Keine Einträge gefunden.', + 'back_to_top' => 'nach oben', + 'toggle_details' => 'Details zeigen/verstecken', + + /** + * Header + */ + 'view_profile' => 'Profil ansehen', + 'edit_profile' => 'Profil bearbeiten', + + /** + * Email Content + */ + 'email_action_help' => 'Sollte es beim Anklicken des ":actionText" Buttons Probleme geben, kopieren Sie folgende URL und fügen diese in Ihrem Webbrowser ein:', + 'email_rights' => 'Alle Rechte vorbehalten', +]; \ No newline at end of file diff --git a/resources/lang/de/components.php b/resources/lang/de/components.php new file mode 100644 index 000000000..a8538c465 --- /dev/null +++ b/resources/lang/de/components.php @@ -0,0 +1,24 @@ + 'Bild auswählen', + 'image_all' => 'Alle', + 'image_all_title' => 'Alle Bilder anzeigen', + 'image_book_title' => 'Zeige alle Bilder, die in dieses Buch hochgeladen wurden', + 'image_page_title' => 'Zeige alle Bilder, die auf diese Seite hochgeladen wurden', + 'image_search_hint' => 'Nach Bildnamen suchen', + 'image_uploaded' => 'Hochgeladen am :uploadedDate', + 'image_load_more' => 'Mehr', + 'image_image_name' => 'Bildname', + 'image_delete_confirm' => 'Dieses Bild wird auf den folgenden Seiten benutzt. Bitte klicken Sie erneut auf löschen, wenn Sie dieses Bild tatsächlich entfernen möchten.', + 'image_select_image' => 'Bild auswählen', + 'image_dropzone' => 'Ziehen Sie Bilder hier hinein oder klicken Sie hier, um ein Bild auszuwählen', + 'images_deleted' => 'Bilder gelöscht', + 'image_preview' => 'Bildvorschau', + 'image_upload_success' => 'Bild erfolgreich hochgeladen', + 'image_update_success' => 'Bilddetails erfolgreich aktualisiert', + 'image_delete_success' => 'Bild erfolgreich gelöscht' +]; \ No newline at end of file diff --git a/resources/lang/de/entities.php b/resources/lang/de/entities.php new file mode 100644 index 000000000..ff590bb88 --- /dev/null +++ b/resources/lang/de/entities.php @@ -0,0 +1,225 @@ + 'Kürzlich angelegt', + 'recently_created_pages' => 'Kürzlich angelegte Seiten', + 'recently_updated_pages' => 'Kürzlich aktualisierte Seiten', + 'recently_created_chapters' => 'Kürzlich angelegte Kapitel', + 'recently_created_books' => 'Kürzlich angelegte Bücher', + 'recently_update' => 'Kürzlich aktualisiert', + 'recently_viewed' => 'Kürzlich angesehen', + 'recent_activity' => 'Kürzliche Aktivität', + 'create_now' => 'Jetzt anlegen', + 'revisions' => 'Revisionen', + 'meta_created' => 'Angelegt am :timeLength', + 'meta_created_name' => 'Angelegt am :timeLength durch :user', + 'meta_updated' => 'Aktualisiert am :timeLength', + 'meta_updated_name' => 'Aktualisiert am :timeLength durch :user', + 'x_pages' => ':count Seiten', + 'entity_select' => 'Eintrag auswählen', + 'images' => 'Bilder', + 'my_recent_drafts' => 'Meine kürzlichen Entwürfe', + 'my_recently_viewed' => 'Kürzlich von mir angesehen', + 'no_pages_viewed' => 'Sie haben bisher keine Seiten angesehen.', + 'no_pages_recently_created' => 'Sie haben bisher keine Seiten angelegt.', + 'no_pages_recently_updated' => 'Sie haben bisher keine Seiten aktualisiert.', + + /** + * Permissions and restrictions + */ + 'permissions' => 'Berechtigungen', + 'permissions_intro' => 'Wenn individuelle Berechtigungen aktiviert werden, überschreiben diese Einstellungen durch Rollen zugewiesene Berechtigungen.', + 'permissions_enable' => 'Individuelle Berechtigungen aktivieren', + 'permissions_save' => 'Berechtigungen speichern', + + /** + * Search + */ + 'search_results' => 'Suchergebnisse', + 'search_results_page' => 'Seiten-Suchergebnisse', + 'search_results_chapter' => 'Kapitel-Suchergebnisse', + 'search_results_book' => 'Buch-Suchergebnisse', + 'search_clear' => 'Suche zurücksetzen', + 'search_view_pages' => 'Zeige alle passenden Seiten', + 'search_view_chapters' => 'Zeige alle passenden Kapitel', + 'search_view_books' => 'Zeige alle passenden Bücher', + 'search_no_pages' => 'Es wurden keine passenden Suchergebnisse gefunden', + 'search_for_term' => 'Suche nach :term', + 'search_page_for_term' => 'Suche nach :term in Seiten', + 'search_chapter_for_term' => 'Suche nach :term in Kapiteln', + 'search_book_for_term' => 'Suche nach :term in Büchern', + + /** + * Books + */ + 'book' => 'Buch', + 'books' => 'Bücher', + 'books_empty' => 'Es wurden keine Bücher angelegt', + 'books_popular' => 'Populäre Bücher', + 'books_recent' => 'Kürzlich genutzte Bücher', + 'books_popular_empty' => 'Die populärsten Bücher werden hier angezeigt.', + 'books_create' => 'Neues Buch anlegen', + 'books_delete' => 'Buch löschen', + 'books_delete_named' => 'Buch :bookName löschen', + 'books_delete_explain' => 'Sie möchten das Buch \':bookName\' löschen und alle Seiten und Kapitel entfernen.', + 'books_delete_confirmation' => 'Sind Sie sicher, dass Sie dieses Buch löschen möchten?', + 'books_edit' => 'Buch bearbeiten', + 'books_edit_named' => 'Buch :bookName bearbeiten', + 'books_form_book_name' => 'Buchname', + 'books_save' => 'Buch speichern', + 'books_permissions' => 'Buch-Berechtigungen', + 'books_permissions_updated' => 'Buch-Berechtigungen aktualisiert', + 'books_empty_contents' => 'Es sind noch keine Seiten oder Kapitel für dieses Buch angelegt.', + 'books_empty_create_page' => 'Neue Seite anlegen', + 'books_empty_or' => 'oder', + 'books_empty_sort_current_book' => 'Aktuelles Buch sortieren', + 'books_empty_add_chapter' => 'Neues Kapitel hinzufügen', + 'books_permissions_active' => 'Buch-Berechtigungen aktiv', + 'books_search_this' => 'Dieses Buch durchsuchen', + 'books_navigation' => 'Buch-Navigation', + 'books_sort' => 'Buchinhalte sortieren', + 'books_sort_named' => 'Buch :bookName sortieren', + 'books_sort_show_other' => 'Andere Bücher zeigen', + 'books_sort_save' => 'Neue Reihenfolge speichern', + + /** + * Chapters + */ + 'chapter' => 'Kapitel', + 'chapters' => 'Kapitel', + 'chapters_popular' => 'Populäre Kapitel', + 'chapters_new' => 'Neues Kapitel', + 'chapters_create' => 'Neues Kapitel anlegen', + 'chapters_delete' => 'Kapitel entfernen', + 'chapters_delete_named' => 'Kapitel :chapterName entfernen', + 'chapters_delete_explain' => 'Sie möchten das Kapitel \':chapterName\' löschen und alle Seiten dem direkten Eltern-Buch hinzugefügen.', + 'chapters_delete_confirm' => 'Sind Sie sicher, dass Sie dieses Kapitel löschen möchten?', + 'chapters_edit' => 'Kapitel bearbeiten', + 'chapters_edit_named' => 'Kapitel :chapterName bearbeiten', + 'chapters_save' => 'Kapitel speichern', + 'chapters_move' => 'Kapitel verschieben', + 'chapters_move_named' => 'Kapitel :chapterName verschieben', + 'chapter_move_success' => 'Kapitel in das Buch :bookName verschoben.', + 'chapters_permissions' => 'Kapitel-Berechtigungen', + 'chapters_empty' => 'Aktuell sind keine Kapitel in diesem Buch angelegt.', + 'chapters_permissions_active' => 'Kapitel-Berechtigungen aktiv', + 'chapters_permissions_success' => 'Kapitel-Berechtigungenen aktualisisert', + + /** + * Pages + */ + 'page' => 'Seite', + 'pages' => 'Seiten', + 'pages_popular' => 'Populäre Seiten', + 'pages_new' => 'Neue Seite', + 'pages_attachments' => 'Anhänge', + 'pages_navigation' => 'Seitennavigation', + 'pages_delete' => 'Seite löschen', + 'pages_delete_named' => 'Seite :pageName löschen', + 'pages_delete_draft_named' => 'Seitenentwurf von :pageName löschen', + 'pages_delete_draft' => 'Seitenentwurf löschen', + 'pages_delete_success' => 'Seite gelöscht', + 'pages_delete_draft_success' => 'Seitenentwurf gelöscht', + 'pages_delete_confirm' => 'Sind Sie sicher, dass Sie diese Seite löschen möchen?', + 'pages_delete_draft_confirm' => 'Sind Sie sicher, dass Sie diesen Seitenentwurf löschen möchten?', + 'pages_editing_named' => 'Seite :pageName bearbeiten', + 'pages_edit_toggle_header' => 'Toggle header', + 'pages_edit_save_draft' => 'Entwurf speichern', + 'pages_edit_draft' => 'Seitenentwurf bearbeiten', + 'pages_editing_draft' => 'Seitenentwurf bearbeiten', + 'pages_editing_page' => 'Seite bearbeiten', + 'pages_edit_draft_save_at' => 'Entwurf gespeichert um ', + 'pages_edit_delete_draft' => 'Entwurf löschen', + 'pages_edit_discard_draft' => 'Entwurf verwerfen', + 'pages_edit_set_changelog' => 'Veränderungshinweis setzen', + 'pages_edit_enter_changelog_desc' => 'Bitte geben Sie eine kurze Zusammenfassung Ihrer Änderungen ein', + 'pages_edit_enter_changelog' => 'Veränderungshinweis eingeben', + 'pages_save' => 'Seite speichern', + 'pages_title' => 'Seitentitel', + 'pages_name' => 'Seitenname', + 'pages_md_editor' => 'Redakteur', + 'pages_md_preview' => 'Vorschau', + 'pages_md_insert_image' => 'Bild einfügen', + 'pages_md_insert_link' => 'Link zu einem Objekt einfügen', + 'pages_not_in_chapter' => 'Seite ist in keinem Kapitel', + 'pages_move' => 'Seite verschieben', + 'pages_move_success' => 'Seite nach ":parentName" verschoben', + 'pages_permissions' => 'Seiten Berechtigungen', + 'pages_permissions_success' => 'Seiten Berechtigungen aktualisiert', + 'pages_revisions' => 'Seitenversionen', + 'pages_revisions_named' => 'Seitenversionen von :pageName', + 'pages_revision_named' => 'Seitenversion von :pageName', + 'pages_revisions_created_by' => 'Angelegt von', + 'pages_revisions_date' => 'Versionsdatum', + 'pages_revisions_changelog' => 'Veränderungshinweise', + 'pages_revisions_changes' => 'Veränderungen', + 'pages_revisions_current' => 'Aktuelle Version', + 'pages_revisions_preview' => 'Vorschau', + 'pages_revisions_restore' => 'Zurück sichern', + 'pages_revisions_none' => 'Diese Seite hat keine älteren Versionen.', + 'pages_export' => 'Exportieren', + 'pages_export_html' => 'HTML-Datei', + 'pages_export_pdf' => 'PDF-Datei', + 'pages_export_text' => 'Text-Datei', + 'pages_copy_link' => 'Link kopieren', + 'pages_permissions_active' => 'Seiten-Berechtigungen aktiv', + 'pages_initial_revision' => 'Erste Veröffentlichung', + 'pages_initial_name' => 'Neue Seite', + 'pages_editing_draft_notification' => 'Sie bearbeiten momenten einen Entwurf, der zuletzt um :timeDiff gespeichert wurde.', + 'pages_draft_edited_notification' => 'Diese Seite wurde seit diesem Zeitpunkt verändert. Wir empfehlen Ihnen, diesen Entwurf zu verwerfen.', + 'pages_draft_edit_active' => [ + 'start_a' => ':count Benutzer haben die Bearbeitung dieser Seite begonnen.', + 'start_b' => ':userName hat die Bearbeitung dieser Seite begonnen.', + 'time_a' => 'seit die Seiten zuletzt aktualisiert wurden.', + 'time_b' => 'in den letzten :minCount Minuten', + 'message' => ':start :time. Achten Sie darauf keine Aktualisierungen von anderen Benutzern zu überschreiben!', + ], + 'pages_draft_discarded' => 'Entwurf verworfen. Der aktuelle Seiteninhalt wurde geladen.', + + /** + * Editor sidebar + */ + 'page_tags' => 'Seiten-Schlagwörter', + 'tag' => 'Schlagwort', + 'tags' => 'Schlagworte', + 'tag_value' => 'Schlagwortinhalt (Optional)', + 'tags_explain' => "Fügen Sie Schlagworte hinzu, um Ihren Inhalt zu kategorisieren. \n Sie können einen erklärenden Inhalt hinzufügen, um eine genauere Unterteilung vorzunehmen.", + 'tags_add' => 'Weiteres Schlagwort hinzufügen', + 'attachments' => 'Anhänge', + 'attachments_explain' => 'Sie können auf Ihrer Seite Dateien hochladen oder Links anfügen. Diese werden in der seitlich angezeigt.', + 'attachments_explain_instant_save' => 'Änderungen werden direkt gespeichert.', + 'attachments_items' => 'Angefügte Elemente', + 'attachments_upload' => 'Datei hochladen', + 'attachments_link' => 'Link anfügen', + 'attachments_set_link' => 'Link setzen', + 'attachments_delete_confirm' => 'Klicken Sie erneut auf löschen, um diesen Anhang zu entfernen.', + 'attachments_dropzone' => 'Ziehen Sie Dateien hier hinein oder klicken Sie hier, um eine Datei auszuwählen', + 'attachments_no_files' => 'Es wurden bisher keine Dateien hochgeladen.', + 'attachments_explain_link' => 'Wenn Sie keine Datei hochladen möchten, können Sie stattdessen einen Link anfügen. Dieser Link kann auf eine andere Seite oder zu einer Datei in der Cloud weisen.', + 'attachments_link_name' => 'Link-Name', + 'attachment_link' => 'Link zum Anhang', + 'attachments_link_url' => 'Link zu einer Datei', + 'attachments_link_url_hint' => 'URL einer Seite oder Datei', + 'attach' => 'anfügen', + 'attachments_edit_file' => 'Datei bearbeiten', + 'attachments_edit_file_name' => 'Dateiname', + 'attachments_edit_drop_upload' => 'Ziehen Sie Dateien hier hinein, um diese hochzuladen und zu überschreiben', + 'attachments_order_updated' => 'Reihenfolge der Anhänge aktualisiert', + 'attachments_updated_success' => 'Anhang-Details aktualisiert', + 'attachments_deleted' => 'Anhang gelöscht', + 'attachments_file_uploaded' => 'Datei erfolgrecich hochgeladen', + 'attachments_file_updated' => 'Datei erfolgreich aktualisisert', + 'attachments_link_attached' => 'Link erfolgreich der Seite hinzugefügt', + + /** + * Profile View + */ + 'profile_user_for_x' => 'Benutzer seit :time', + 'profile_created_content' => 'Angelegte Inhalte', + 'profile_not_created_pages' => ':userName hat bisher keine Seiten angelegt.', + 'profile_not_created_chapters' => ':userName hat bisher keine Kapitel angelegt.', + 'profile_not_created_books' => ':userName hat bisher keine Bücher angelegt.', +]; \ No newline at end of file diff --git a/resources/lang/de/errors.php b/resources/lang/de/errors.php index 697952086..e085d9915 100644 --- a/resources/lang/de/errors.php +++ b/resources/lang/de/errors.php @@ -8,5 +8,63 @@ return [ // Pages 'permission' => 'Sie haben keine Berechtigung auf diese Seite zuzugreifen.', - 'permissionJson' => 'Sie haben keine Berechtigung die angeforderte Aktion auszuführen.' + 'permissionJson' => 'Sie haben keine Berechtigung die angeforderte Aktion auszuführen.', + + // Auth + 'error_user_exists_different_creds' => 'Ein Benutzer mit der E-Mail-Adresse :email ist bereits mit anderen Anmeldedaten angelegt.', + 'email_already_confirmed' => 'Die E-Mail-Adresse ist bereits bestätigt. Bitte melden Sie sich an.', + 'email_confirmation_invalid' => 'Der Bestätigungs-Token ist nicht gültig oder wurde bereits verwendet. Bitte registrieren Sie sich erneut.', + 'email_confirmation_expired' => 'Der Bestätigungs-Token ist abgelaufen. Es wurde eine neue Bestätigungs-E-Mail gesendet.', + 'ldap_fail_anonymous' => 'Anonymer LDAP Zugriff ist fehlgeschlafgen', + 'ldap_fail_authed' => 'LDAP Zugriff mit DN & Passwort ist fehlgeschlagen', + 'ldap_extension_not_installed' => 'LDAP PHP Erweiterung ist nicht installiert.', + 'ldap_cannot_connect' => 'Die Verbindung zu LDAP-Server ist fehlgeschlagen. Beim initialen Verbindungsaufbau trat ein Fehler auf.', + 'social_no_action_defined' => 'Es ist keine Aktion definiert', + 'social_account_in_use' => 'Dieses :socialAccount Konto wird bereits verwendet. Bitte melden Sie sich mit dem :socialAccount Konto an.', + 'social_account_email_in_use' => 'Die E-Mail-Adresse :email ist bereits registriert. Wenn Sie bereits registriert sind, können Sie Ihr :socialAccount Konto in Ihren Profil-Einstellungen verknüpfen.', + 'social_account_existing' => 'Dieses :socialAccount Konto ist bereits mit Ihrem Profil verknüpft.', + 'social_account_already_used_existing' => 'Dieses :socialAccount Konto wird bereits durch einen anderen Benutzer verwendet.', + 'social_account_not_used' => 'Dieses :socialAccount Konto ist bisher keinem Benutzer zugeordnet. Bitte verknüpfen Sie deses in Ihrem Profil-Einstellungen.', + 'social_account_register_instructions' => 'Wenn Sie bisher keinen Social-Media Konto besitzen können Sie ein solches Konto mit der :socialAccount Option anlegen.', + 'social_driver_not_found' => 'Social-Media Konto Treiber nicht gefunden', + 'social_driver_not_configured' => 'Ihr :socialAccount Konto ist nicht korrekt konfiguriert.', + + // System + 'path_not_writable' => 'Die Datei kann nicht in den angegebenen Pfad :filePath hochgeladen werden. Stellen Sie sicher, dass dieser Ordner auf dem Server beschreibbar ist.', + 'cannot_get_image_from_url' => 'Bild konnte nicht von der URL :url geladen werden.', + 'cannot_create_thumbs' => 'Der Server kann keine Vorschau-Bilder erzeugen. Bitte prüfen Sie, ob Sie die GD PHP Erweiterung installiert haben.', + '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.', + + // Attachments + 'attachment_page_mismatch' => 'Die Seite stimmt nach dem Hochladen des Anhangs nicht überein.', + + // Pages + 'page_draft_autosave_fail' => 'Fehler beim Speichern des Entwurfs. Stellen Sie sicher, dass Sie mit dem Internet verbunden sind, bevor Sie den Entwurf dieser Seite speichern.', + + // Entities + 'entity_not_found' => 'Eintrag nicht gefunden', + 'book_not_found' => 'Buch nicht gefunden', + 'page_not_found' => 'Seite nicht gefunden', + 'chapter_not_found' => 'Kapitel nicht gefunden', + 'selected_book_not_found' => 'Das gewählte Buch wurde nicht gefunden.', + 'selected_book_chapter_not_found' => 'Das gewählte Buch oder Kapitel wurde nicht gefunden.', + 'guests_cannot_save_drafts' => 'Gäste können keine Entwürfe speichern', + + // Users + 'users_cannot_delete_only_admin' => 'Sie können den einzigen Administrator nicht löschen.', + 'users_cannot_delete_guest' => 'Sie können den Gast-Benutzer nicht löschen', + + // Roles + 'role_cannot_be_edited' => 'Diese Rolle kann nicht bearbeitet werden.', + 'role_system_cannot_be_deleted' => 'Dies ist eine Systemrolle und kann nicht gelöscht werden', + 'role_registration_default_cannot_delete' => 'Diese Rolle kann nicht gelöscht werden solange sie als Standardrolle für neue Registrierungen gesetzt ist', + + // Error pages + '404_page_not_found' => 'Seite nicht gefunden', + 'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Sie angefordert haben wurde nicht gefunden.', + 'return_home' => 'Zurück zur Startseite', + 'error_occurred' => 'Es ist ein Fehler aufgetreten', + 'app_down' => ':appName befindet sich aktuell im Wartungsmodus.', + 'back_soon' => 'Wir werden so schnell wie möglich wieder online sein.', ]; diff --git a/resources/lang/de/passwords.php b/resources/lang/de/passwords.php index f71358055..c44b49baa 100644 --- a/resources/lang/de/passwords.php +++ b/resources/lang/de/passwords.php @@ -16,7 +16,7 @@ return [ 'password' => 'Passörter müssen mindestens sechs Zeichen enthalten und die Wiederholung muss identisch sein.', 'user' => "Wir können keinen Benutzer mit dieser E-Mail Adresse finden.", 'token' => 'Dieser Passwort-Reset-Token ist ungültig.', - 'sent' => 'Wir haben ihnen eine E-Mail mit einem Link zum Zurücksetzen des Passworts zugesendet!', + 'sent' => 'Wir haben Ihnen eine E-Mail mit einem Link zum Zurücksetzen des Passworts zugesendet!', 'reset' => 'Ihr Passwort wurde zurückgesetzt!', ]; diff --git a/resources/lang/de/settings.php b/resources/lang/de/settings.php index 0017acd1d..668eecf33 100644 --- a/resources/lang/de/settings.php +++ b/resources/lang/de/settings.php @@ -10,14 +10,19 @@ return [ 'settings' => 'Einstellungen', 'settings_save' => 'Einstellungen speichern', + 'settings_save_success' => 'Einstellungen gespeichert', + + /** + * App settings + */ 'app_settings' => 'Anwendungseinstellungen', 'app_name' => 'Anwendungsname', - 'app_name_desc' => 'Dieser Name wird im Header und E-Mails angezeigt.', + 'app_name_desc' => 'Dieser Name wird im Header und in E-Mails angezeigt.', 'app_name_header' => 'Anwendungsname im Header anzeigen?', 'app_public_viewing' => 'Öffentliche Ansicht erlauben?', 'app_secure_images' => 'Erhöhte Sicherheit für Bilduploads aktivieren?', - 'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten vor die Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnindexes deaktiviert sind, um einen einfachen Zugrif zu verhindern.', + 'app_secure_images_desc' => 'Aus Leistungsgründen sind alle Bilder öffentlich sichtbar. Diese Option fügt zufällige, schwer zu eratene, Zeichenketten vor die Bild-URLs hinzu. Stellen sie sicher, dass Verzeichnindexes deaktiviert sind, um einen einfachen Zugriff zu verhindern.', 'app_editor' => 'Seiteneditor', 'app_editor_desc' => 'Wählen sie den Editor aus, der von allen Benutzern genutzt werden soll, um Seiten zu editieren.', 'app_custom_html' => 'Benutzerdefinierter HTML Inhalt', @@ -25,15 +30,82 @@ return [ 'app_logo' => 'Anwendungslogo', 'app_logo_desc' => 'Dieses Bild sollte 43px hoch sein.
    Größere Bilder werden verkleinert.', 'app_primary_color' => 'Primäre Anwendungsfarbe', - 'app_primary_color_desc' => 'Dies sollte ein HEX Wert sein.
    Leer lassen des Feldes setzt auf die Standard-Anwendungsfarbe zurück.', + 'app_primary_color_desc' => 'Dies sollte ein HEX Wert sein.
    Wenn Sie nicht eingeben, wird die Anwendung auf die Standardfarbe zurückgesetzt.', + + /** + * Registration settings + */ 'reg_settings' => 'Registrierungseinstellungen', 'reg_allow' => 'Registrierung erlauben?', 'reg_default_role' => 'Standard-Benutzerrolle nach Registrierung', 'reg_confirm_email' => 'Bestätigung per E-Mail erforderlich?', - 'reg_confirm_email_desc' => 'Falls die Einschränkung für; Domains genutzt wird, ist die Bestätigung per E-Mail zwingend erforderlich und der untenstehende Wert wird ignoriert.', + 'reg_confirm_email_desc' => 'Falls die Einschränkung für Domains genutzt wird, ist die Bestätigung per E-Mail zwingend erforderlich und der untenstehende Wert wird ignoriert.', 'reg_confirm_restrict_domain' => 'Registrierung auf bestimmte Domains einschränken', 'reg_confirm_restrict_domain_desc' => 'Fügen sie eine, durch Komma getrennte, Liste von E-Mail Domains hinzu, auf die die Registrierung eingeschränkt werden soll. Benutzern wird eine E-Mail gesendet, um ihre E-Mail Adresse zu bestätigen, bevor sie diese Anwendung nutzen können.
    Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung ändern.', 'reg_confirm_restrict_domain_placeholder' => 'Keine Einschränkung gesetzt', + /** + * Role settings + */ + + 'roles' => 'Rollen', + 'role_user_roles' => 'Benutzer-Rollen', + 'role_create' => 'Neue Rolle anlegen', + 'role_create_success' => 'Rolle erfolgreich angelegt', + 'role_delete' => 'Rolle löschen', + 'role_delete_confirm' => 'Sie möchten die Rolle \':roleName\' löschen.', + 'role_delete_users_assigned' => 'Diese Rolle ist :userCount Benutzern zugeordnet. Sie können unten eine neue Rolle auswählen, die Sie diesen Benutzern zuordnen möchten.', + 'role_delete_no_migration' => "Den Benutzern keine andere Rolle zuordnen", + 'role_delete_sure' => 'Sind Sie sicher, dass Sie diese Rolle löschen möchten?', + 'role_delete_success' => 'Rolle erfolgreich gelöscht', + 'role_edit' => 'Rolle bearbeiten', + 'role_details' => 'Rollen-Details', + 'role_name' => 'Rollenname', + 'role_desc' => 'Kurzbeschreibung der Rolle', + 'role_system' => 'System-Berechtigungen', + 'role_manage_users' => 'Benutzer verwalten', + 'role_manage_roles' => 'Rollen & Rollen-Berechtigungen verwalten', + 'role_manage_entity_permissions' => 'Alle Buch-, Kapitel und Seiten-Berechtigungen verwalten', + 'role_manage_own_entity_permissions' => 'Nur Berechtigungen eigener Bücher, Kapitel und Seiten verwalten', + 'role_manage_settings' => 'Globaleinstellungen verwalrten', + 'role_asset' => 'Berechtigungen', + 'role_asset_desc' => 'Diese Berechtigungen gelten für den Standard-Zugriff innerhalb des Systems. Berechtigungen für Bücher, Kapitel und Seiten überschreiben diese Berechtigungenen.', + 'role_all' => 'Alle', + 'role_own' => 'Eigene', + 'role_controlled_by_asset' => 'Controlled by the asset they are uploaded to', + 'role_save' => 'Rolle speichern', + 'role_update_success' => 'Rolle erfolgreich gespeichert', + 'role_users' => 'Dieser Rolle zugeordnete Benutzer', + 'role_users_none' => 'Bisher sind dieser Rolle keiner Benutzer zugeordnet,', + + /** + * Users + */ + + 'users' => 'Benutzer', + 'user_profile' => 'Benutzerprofil', + 'users_add_new' => 'Benutzer hinzufügen', + 'users_search' => 'Benutzer suchen', + 'users_role' => 'Benutzerrollen', + 'users_external_auth_id' => 'Externe Authentifizierungs-ID', + 'users_password_warning' => 'Füllen Sie die folgenden Felder nur aus, wenn Sie Ihr Passwort ändern möchten:', + 'users_system_public' => 'Dieser Benutzer repräsentiert alle Gast-Benutzer, die diese Seite betrachten. Er kann nicht zum Anmelden benutzt werden, sondern wird automatisch zugeordnet.', + 'users_delete' => 'Benutzer löschen', + 'users_delete_named' => 'Benutzer :userName löschen', + 'users_delete_warning' => 'Sie möchten den Benutzer \':userName\' gänzlich aus dem System löschen.', + 'users_delete_confirm' => 'Sind Sie sicher, dass Sie diesen Benutzer löschen möchten?', + 'users_delete_success' => 'Benutzer erfolgreich gelöscht.', + 'users_edit' => 'Benutzer bearbeiten', + 'users_edit_profile' => 'Profil bearbeiten', + 'users_edit_success' => 'Benutzer erfolgreich aktualisisert', + 'users_avatar' => 'Benutzer-Bild', + 'users_avatar_desc' => 'Dieses Bild sollte einen Durchmesser von ca. 256px haben.', + 'users_preferred_language' => 'Bevorzugte Sprache', + 'users_social_accounts' => 'Social-Media Konten', + 'users_social_accounts_info' => 'Hier können Sie andere Social-Media Konten für eine schnellere und einfachere Anmeldung verknüpfen. Wenn Sie ein Social-Media Konto hier lösen, bleibt der Zugriff erhalteb. Entfernen Sie in diesem Falle die Berechtigung in Ihren Profil-Einstellungen des verknüpften Social-Media Kontos.', + 'users_social_connect' => 'Social-Media Konto verknüpfen', + 'users_social_disconnect' => 'Social-Media Kontoverknüpfung lösen', + 'users_social_connected' => ':socialAccount Konto wurde erfolgreich mit dem Profil verknüpft.', + 'users_social_disconnected' => ':socialAccount Konto wurde erfolgreich vom Profil gelöst.', ]; diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index b734828fc..a1232efc6 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -18,6 +18,8 @@ return [ */ 'sign_up' => 'Sign up', 'log_in' => 'Log in', + 'log_in_with' => 'Login with :socialDriver', + 'sign_up_with' => 'Sign up with :socialDriver', 'logout' => 'Logout', 'name' => 'Name', diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 928565156..706747b8b 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -32,13 +32,12 @@ @if(count($socialDrivers) > 0)
    -

    {{ trans('auth.social_login') }}

    - @if(isset($socialDrivers['google'])) - - @endif - @if(isset($socialDrivers['github'])) - - @endif + @foreach($socialDrivers as $driver => $name) + + @icon($driver) + {{ trans('auth.log_in_with', ['socialDriver' => $name]) }} + + @endforeach @endif diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 7a119ddba..d5db4afa8 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -35,14 +35,12 @@ @if(count($socialDrivers) > 0)
    -

    {{ trans('auth.social_registration') }}

    -

    {{ trans('auth.social_registration_text') }}

    - @if(isset($socialDrivers['google'])) - - @endif - @if(isset($socialDrivers['github'])) - - @endif + @foreach($socialDrivers as $driver => $name) + + @icon($driver) + {{ trans('auth.sign_up_with', ['socialDriver' => $name]) }} + + @endforeach @endif diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php index a98a37131..bb00ce19e 100644 --- a/resources/views/base.blade.php +++ b/resources/views/base.blade.php @@ -23,9 +23,10 @@ @include('partials/custom-styles') - - @if(setting('app-custom-head')) + @if(setting('app-custom-head') && \Route::currentRouteName() !== 'settings') + {!! setting('app-custom-head') !!} + @endif diff --git a/resources/views/books/export.blade.php b/resources/views/books/export.blade.php new file mode 100644 index 000000000..3ea3c9d65 --- /dev/null +++ b/resources/views/books/export.blade.php @@ -0,0 +1,80 @@ + + + + + {{ $book->name }} + + + @yield('head') + + +
    +
    +
    +
    + +

    {{$book->name}}

    + +

    {{ $book->description }}

    + + @if(count($bookChildren) > 0) +
      + @foreach($bookChildren as $bookChild) +
    • {{ $bookChild->name }}
    • + @if($bookChild->isA('chapter') && count($bookChild->pages) > 0) + + @endif + @endforeach +
    + @endif + + @foreach($bookChildren as $bookChild) +
    +

    {{ $bookChild->name }}

    + @if($bookChild->isA('chapter')) +

    {{ $bookChild->description }}

    + @if(count($bookChild->pages) > 0) + @foreach($bookChild->pages as $page) +
    +
    {{$bookChild->name}}
    +

    {{ $page->name }}

    + {!! $page->html !!} + @endforeach + @endif + @else + {!! $bookChild->html !!} + @endif + @endforeach + +
    +
    +
    +
    + + diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php index 6a18302bc..99ffe80e1 100644 --- a/resources/views/books/show.blade.php +++ b/resources/views/books/show.blade.php @@ -5,11 +5,19 @@
    -
    +
    @include('books._breadcrumbs', ['book' => $book])
    -
    +
    + +
    {{ trans('entities.pages_export') }}
    + +
    @if(userCan('page-create', $book)) {{ trans('entities.pages_new') }} @endif diff --git a/resources/views/chapters/export.blade.php b/resources/views/chapters/export.blade.php new file mode 100644 index 000000000..0fc1295df --- /dev/null +++ b/resources/views/chapters/export.blade.php @@ -0,0 +1,54 @@ + + + + + {{ $chapter->name }} + + + @yield('head') + + +
    +
    +
    +
    + +

    {{$chapter->name}}

    + +

    {{ $chapter->description }}

    + + @if(count($pages) > 0) + + @endif + + @foreach($pages as $page) +
    +

    {{ $page->name }}

    + {!! $page->html !!} + @endforeach + +
    +
    +
    +
    + + diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php index 93eee6424..47a1d9ddf 100644 --- a/resources/views/chapters/show.blade.php +++ b/resources/views/chapters/show.blade.php @@ -10,6 +10,14 @@
    + +
    {{ trans('entities.pages_export') }}
    + +
    @if(userCan('page-create', $chapter)) {{ trans('entities.pages_new') }} @endif diff --git a/resources/views/pages/export.blade.php b/resources/views/pages/export.blade.php index 19a635563..0bb376a9a 100644 --- a/resources/views/pages/export.blade.php +++ b/resources/views/pages/export.blade.php @@ -5,7 +5,9 @@ {{ $page->name }} @yield('head') diff --git a/resources/views/pages/page-display.blade.php b/resources/views/pages/page-display.blade.php index 6eb927687..cb7cae445 100644 --- a/resources/views/pages/page-display.blade.php +++ b/resources/views/pages/page-display.blade.php @@ -1,6 +1,6 @@
    -

    {{$page->name}}

    +

    {{$page->name}}

    diff --git a/resources/views/pages/pdf.blade.php b/resources/views/pages/pdf.blade.php index 7e43c5e1a..33a009fee 100644 --- a/resources/views/pages/pdf.blade.php +++ b/resources/views/pages/pdf.blade.php @@ -30,11 +30,5 @@ clear: both; display: block; } - - .tag-display { - min-width: 0; - max-width: none; - display: none; - } @stop \ No newline at end of file diff --git a/resources/views/public.blade.php b/resources/views/public.blade.php index 05cf043fd..ea2069b86 100644 --- a/resources/views/public.blade.php +++ b/resources/views/public.blade.php @@ -30,7 +30,7 @@